diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..5250dac3 --- /dev/null +++ b/.env.example @@ -0,0 +1,76 @@ +# Copy this file to .env for local TrialMatchAI runtime configuration. +# Do not commit .env. + +TRIALMATCHAI_OUTPUT_DIR=results +TRIALMATCHAI_TRIALS_JSON_FOLDER=data/trials_jsons +TRIALMATCHAI_PATIENT_RAW_DIR=data/patients/raw +TRIALMATCHAI_PATIENT_PROFILE_DIR=data/patients/profiles +TRIALMATCHAI_PATIENT_SUMMARY_DIR=data/patients/summaries +TRIALMATCHAI_PATIENT_INPUT_FORMAT=auto +TRIALMATCHAI_PATIENT_STRICT_VALIDATION=false +TRIALMATCHAI_PATIENT_COPY_RAW=true + +TRIALMATCHAI_SEARCH_BACKEND=lancedb +TRIALMATCHAI_SEARCH_DB_PATH=data/search +TRIALMATCHAI_SEARCH_TRIALS_TABLE=trials +TRIALMATCHAI_SEARCH_CRITERIA_TABLE=criteria +TRIALMATCHAI_SEARCH_CANDIDATE_LIMIT=1000 +TRIALMATCHAI_SEARCH_MODE=hybrid +TRIALMATCHAI_FIRST_LEVEL_ENABLED=true +TRIALMATCHAI_FIRST_LEVEL_MAX_TRIALS=1000 +TRIALMATCHAI_FIRST_LEVEL_PER_CHANNEL_SIZE=300 +TRIALMATCHAI_FIRST_LEVEL_VECTOR_SCORE_THRESHOLD=0.0 +TRIALMATCHAI_FIRST_LEVEL_LLM_EXPANSION_ENABLED=false +TRIALMATCHAI_FIRST_LEVEL_WRITE_REPORTS=true + +TRIALMATCHAI_MODEL_BASE_MODEL=microsoft/phi-4 +TRIALMATCHAI_MODEL_COT_ADAPTER_PATH=models/finetuned_phi_reasoning +TRIALMATCHAI_MODEL_RERANKER_MODEL_PATH=google/gemma-2-2b-it +TRIALMATCHAI_MODEL_RERANKER_ADAPTER_PATH=models/finetuned_gemma2 +TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=false +TRIALMATCHAI_COT_BACKEND=vllm + +# Runtime CoT query expansion (legacy keywords.json behaviour). Off by default; +# the TREC preset enables it. Model/adapter default to the CoT reasoning model. +TRIALMATCHAI_QUERY_EXPANSION_ENABLED=false +TRIALMATCHAI_QUERY_EXPANSION_BACKEND= +TRIALMATCHAI_QUERY_EXPANSION_MODEL= +TRIALMATCHAI_QUERY_EXPANSION_ADAPTER= + +TRIALMATCHAI_ENTITY_BACKEND=gliner2 +TRIALMATCHAI_ENTITY_MODEL_NAME=fastino/gliner2-base-v1 +TRIALMATCHAI_ENTITY_SCHEMA_PATH=entity_schemas/trialmatchai.yaml +TRIALMATCHAI_ENTITY_TRUST_REMOTE_CODE=false +TRIALMATCHAI_CONCEPT_DB_PATH=data/concepts +TRIALMATCHAI_CONCEPT_TABLE=concepts +TRIALMATCHAI_LINK_ACCEPT=0.80 +TRIALMATCHAI_LINK_REJECT=0.30 + +TRIALMATCHAI_CONSTRAINTS_ENABLED=true +TRIALMATCHAI_CONSTRAINTS_SCORE_WEIGHT=0.25 +TRIALMATCHAI_CONSTRAINTS_LLM_EXTRACTION_ENABLED=false +TRIALMATCHAI_CONSTRAINTS_WRITE_REPORTS=true + +TRIALMATCHAI_REGISTRY_SOURCE=clinicaltrials.gov +TRIALMATCHAI_REGISTRY_API_BASE_URL=https://clinicaltrials.gov/api/v2/studies +TRIALMATCHAI_REGISTRY_KEYWORDS_FILE= +TRIALMATCHAI_REGISTRY_SINCE_DAYS=7 +TRIALMATCHAI_REGISTRY_MAX_STUDIES= +TRIALMATCHAI_REGISTRY_REQUEST_TIMEOUT=30 +TRIALMATCHAI_REGISTRY_RATE_LIMIT_PER_SECOND=2 +TRIALMATCHAI_REGISTRY_RAW_DIR=data/registry/raw +TRIALMATCHAI_REGISTRY_MANIFEST_PATH=data/registry/manifest.jsonl +TRIALMATCHAI_REGISTRY_REPORTS_DIR=data/registry/runs +TRIALMATCHAI_REGISTRY_FAILURE_THRESHOLD=0.25 + +TRIALMATCHAI_PROCESSED_TRIALS_SHA256= +TRIALMATCHAI_MODELS_SHA256= +TRIALMATCHAI_CRITERIA_PART_0_SHA256= +TRIALMATCHAI_CRITERIA_PART_1_SHA256= +TRIALMATCHAI_CRITERIA_PART_2_SHA256= +TRIALMATCHAI_CRITERIA_PART_3_SHA256= +TRIALMATCHAI_CRITERIA_PART_4_SHA256= +TRIALMATCHAI_CRITERIA_PART_5_SHA256= + +TRIALMATCHAI_LOG_LEVEL=INFO +TRIALMATCHAI_LOG_JSON=1 diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..60c5be42 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,27 @@ +version: 2 +updates: + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 5 + groups: + # The heavy ML stack lives in optional extras and is intentionally pinned to + # versions compatible with vLLM (see the CI pip-audit policy). Collapse its + # frequent advisories into one low-noise PR instead of dozens. + ml-stack: + patterns: + - "torch*" + - "vllm*" + - "transformers*" + - "accelerate*" + - "bitsandbytes*" + - "nvidia-*" + - "xformers*" + dev-dependencies: + dependency-type: "development" + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a0e70eea..4ecf1987 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,18 +2,13 @@ name: CI on: push: - branches: [main, dev] + branches: [main, dev, deployment-readiness-audit] pull_request: branches: [main, dev] workflow_dispatch: jobs: - test: - strategy: - matrix: - python-version: ["3.11", "3.12"] - fail-fast: false - + deployment-readiness: runs-on: ubuntu-latest steps: @@ -26,10 +21,101 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: ${{ matrix.python-version }} + python-version: "3.11" - name: Install dependencies run: uv sync --frozen + - name: Validate lockfile + run: uv lock --check + + - name: Lint + run: uv run ruff check . + - name: Run tests - run: uv run pytest -v \ No newline at end of file + run: uv run pytest -v + + - name: Build package + run: uv build + + - name: Installed package smoke + run: | + WHEEL="$(ls "$PWD"/dist/trialmatchai-*.whl | head -n 1)" + mkdir -p /tmp/trialmatchai-installed-smoke + cd /tmp/trialmatchai-installed-smoke + uv run --python 3.11 --isolated --with "$WHEEL" python - <<'PY' + from pathlib import Path + from trialmatchai.config.config_loader import load_config + + cfg = load_config() + assert Path(cfg["entity_extraction"]["schema_path"]).exists() + assert cfg["paths"]["output_dir"].endswith("results") + PY + + - name: CLI help smoke + run: | + WHEEL="$(ls dist/trialmatchai-*.whl | head -n 1)" + uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai --help + for cmd in pipeline healthcheck bootstrap-data index build-concepts update-registry \ + import-patient build run e2e trec finetune; do + uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai "$cmd" --help + done + + - name: Secret scan + run: uv run pre-commit run gitleaks --all-files + + - name: Dependency audit + # vLLM 0.23 pins torch 2.11.0; CVE-2025-3000 has no fixed version listed. + run: uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 + + ml-extras-smoke: + # Installs the optional ML extras (CPU-only) and imports the local-model + # surface that the default job never touches, so a broken import or wrong + # transformers/gliner API call is caught instead of shipping silently. + # Non-blocking: it exercises heavy third-party deps (torch/gliner) whose + # availability we don't gate releases on; failures show up as a signal + # without failing the workflow. + continue-on-error: true + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install uv + uses: astral-sh/setup-uv@v5 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install with entity extra (CPU) + run: uv sync --extra entity + + - name: Import ML surface + run: | + uv run python - <<'PY' + import importlib + + # The entity extra's heavy libs must import cleanly in the resolved + # environment (catches a bad transformers API or a torch pin conflict). + for lib in ("torch", "transformers", "gliner", "gliner2"): + importlib.import_module(lib) + print(f"imported {lib}") + + # The package's local-model modules must import with extras present. + modules = [ + "trialmatchai.entities.recognizers", + "trialmatchai.models.embedding.text_embedder", + "trialmatchai.models.llm.llm_reranker", + "trialmatchai.models.llm.vllm_loader", + "trialmatchai.matching.eligibility_reasoning_vllm", + "trialmatchai.finetuning.cot", + "trialmatchai.finetuning.reranker", + "trialmatchai.finetuning.ner", + ] + for name in modules: + importlib.import_module(name) + print(f"imported {name}") + PY diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 00000000..7b340991 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,28 @@ +name: Docs + +# Build the MkDocs site (strict) on every push/PR; deploy to GitHub Pages on main. +on: + push: + branches: [main, deployment-readiness-audit] + pull_request: + branches: [main] + workflow_dispatch: {} + +permissions: + contents: write # mkdocs gh-deploy pushes to the gh-pages branch + +jobs: + docs: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: astral-sh/setup-uv@v5 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + - name: Build docs (strict) + run: uv run --group docs mkdocs build --strict + - name: Deploy to GitHub Pages (main only) + if: github.ref == 'refs/heads/main' + run: uv run --group docs mkdocs gh-deploy --force diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..c225b296 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,44 @@ +name: Release + +# Publishes trialmatchai to PyPI when a GitHub Release is published. +# Uses PyPI Trusted Publishing (OIDC) — no API token is stored in the repo. +# One-time setup on PyPI: add a Trusted Publisher for this repo + workflow + +# the `pypi` environment (https://docs.pypi.org/trusted-publishers/). + +on: + release: + types: [published] + workflow_dispatch: {} + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: astral-sh/setup-uv@v5 + - name: Build sdist + wheel + run: uv build + - name: Check the built metadata + run: uvx twine check dist/* + - uses: actions/upload-artifact@v4 + with: + name: dist + path: dist/ + + pypi-publish: + needs: build + runs-on: ubuntu-latest + environment: pypi + permissions: + id-token: write # required for PyPI Trusted Publishing (OIDC) + steps: + - uses: actions/download-artifact@v4 + with: + name: dist + path: dist/ + - uses: astral-sh/setup-uv@v5 + - name: Publish to PyPI + run: uv publish --trusted-publishing always diff --git a/.gitignore b/.gitignore index e21d4329..f5c27f2b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,53 +3,40 @@ # ============================ data/ results/ -src/ ablation/ logs/ *.log +.env +.env.* +!.env.example -# ============================ -# Finetuning ignore rules -# ============================ - -# Ignore ANY directory under finetuning/ starting with checkpoint -**/finetuning/**/checkpoint*/ - -# Ignore ANY directory under finetuning/ starting with finetuned -**/finetuning/**/finetuned*/ - -# Ignore ANY directory under finetuning/ ending with "data" -**/finetuning/**/*data/ - -# Ignore this explicit model folder -utils/finetuning/finetune_ner/RoBERTa-large-PM-M3-Voc/ -utils/finetuning/finetune_ner/output_eval -utils/finetuning/finetune_ner +/models/ +/source/ +/Parser/ # ============================ -# ElasticSearch artifacts +# Local working dirs (large data stores / uncommitted code) # ============================ -elasticsearch/sif/ -elasticsearch/data1/ -elasticsearch/data/ -elasticsearch/logs/ -elasticsearch/sif/*.sif +/elasticsearch/ +/utils/ # ============================ -# Parser artifacts +# Generated indexing state # ============================ -models/ -source/Parser/resources/ -source/Parser/models/ -source/Parser/input/ -source/Parser/output/ -Parser/logs/ +*.lance +*.lancedb # ============================ # Python cache # ============================ __pycache__/ *.py[cod] +.pytest_cache/ +.ruff_cache/ +.venv/ +build/ +dist/ +*.egg-info/ # ============================ # Temporary / cache files @@ -58,6 +45,8 @@ __pycache__/ *.bak *.swp *.slurm +scripts/*.sh **/tmp/ .DS_Store Thumbs.db +site/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..acd7ccbc --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,25 @@ +# Pre-commit hooks for TrialMatchAI. +# Install once: uv run pre-commit install +# Run on demand: uv run pre-commit run --all-files +repos: + - repo: https://github.com/gitleaks/gitleaks + rev: v8.21.2 + hooks: + - id: gitleaks + name: gitleaks (secret scan) + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.8.4 + hooks: + - id: ruff + args: [--fix] + - id: ruff-format + + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: check-added-large-files + args: [--maxkb=2048] + - id: end-of-file-fixer + - id: trailing-whitespace + - id: check-merge-conflict diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..d94ccf1b --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,69 @@ +# Changelog + +All notable changes to TrialMatchAI are documented here. The format follows +[Keep a Changelog](https://keepachangelog.com/) and the project adheres to +[Semantic Versioning](https://semver.org/). + +## [0.2.0] — 2026-06-28 + +The **deployment-readiness** release: TrialMatchAI becomes one installable, +idempotent, end-to-end pipeline behind a single CLI, with crash-safe resume, +faithful evaluation, professional docs, and PyPI-ready packaging. + +### Added +- **Unified pipeline.** A single ordered registry of idempotent stages + (`prepare → concepts → index → ingest → expand → match → eval`) driven by one + command — `trialmatchai pipeline` — with `--only / --skip / --from / --to / + --force`. Run the whole thing or any slice; finished work is skipped. Stage + flags double as ablation knobs. +- **Single entry point.** One `trialmatchai` console script with 12 subcommands + (`pipeline, healthcheck, bootstrap-data, index, build-concepts, + update-registry, import-patient, build, run, e2e, trec, finetune`). +- **Entity-linking concept store** from openly-licensed vocabularies + (genes, diseases, chemicals, cell lines, cell types, phenotypes), auto-downloaded + via `trialmatchai build --concepts` / `build-concepts --sources open`; OMOP + (SNOMED/LOINC/RxNorm) foldable via `--concepts-csv`. +- **Registry updater** (`update-registry`) — incremental fetch → prepare → upsert + from the ClinicalTrials.gov v2 API, with a `--watch` server mode. +- **`bootstrap-data`** for the prepared corpus + LoRA adapters, plus + `--finetune-data` for the published training sets (Zenodo). +- **Tie-aware nDCG** (McSherry–Najork) + `P@10`, with a deterministic ranking + tie-break and a TREC reproduction regression guard. +- **Multi-format patient ingestion** — text, FHIR, Phenopacket, OMOP; patient + location populated from FHIR/OMOP with an optional country-level trial filter. +- **PyPI-ready packaging** + a Trusted-Publishing (OIDC) release workflow. +- **Documentation site** (MkDocs Material + auto API reference) with a deploy + workflow; `gitleaks` pre-commit and Dependabot. + +### Changed +- **LanceDB** embedded hybrid search replaces Elasticsearch; **vLLM** is the only + LLM backend (LoRA adapters served natively) with a single shared engine. +- **GLiNER2** in-process NER replaces the BERN2 socket daemons; concept linking + moves to a LanceDB FTS+vector store. +- **Crash-safe resume everywhere** — atomic writes (`tmp + fsync + os.replace`), + completion-marker-last ordering, and parse-validated resume gates; every stage + is idempotent and re-running continues from the last completed work. +- **Two-halves CLI** (`build` once, then `e2e`/`run`/`trec` many times) with + fail-fast preflight; a Transformers CPU backend for non-GPU paths. +- **Official TREC sourcing** (NIST topics/qrels); the prepare corpus is the + judged pool, matching the published methodology. +- Faithful domain-aware criteria chunking + a hybrid genetic-variant recognizer. + +### Fixed +- Resume/ingest correctness: transiently-failed trials are retried (not locked + in); stale criteria cleared on re-prepare; final ranking scoped to the current + shortlist; eligibility-criteria source falls back `processed_trials → + trials_jsons` (fail-loud on empty); `import-patient` writes atomically, + summary-before-profile. +- The CoT/reranker vLLM engine is loaded **once** and shared (was reloaded + per patient). +- FHIR importer hardened for real-world EHR exports. +- `concepts` / `run` / `prepare` are now idempotent (skip-if-done, `--force` to + redo). + +### Removed +- Legacy `source/` (BERN2 daemon + CRF parser) and `utils/` experiment trees. +- The homegrown secret scanner (replaced by `gitleaks`). +- The standalone `trialmatchai-*` console scripts (now `trialmatchai `). + +[0.2.0]: https://github.com/cbib/TrialMatchAI/releases/tag/v0.2.0 diff --git a/LICENSE b/LICENSE index 940ec502..0a521cf5 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ MIT License Copyright (c) 2024 -Majd Abdallah (1,2) (majd.abdallah@u-bordeaux.fr ) +Majd Abdallah (1,2) (abdallahmajd7@gmail.com) Macha Nikolski (1,2) (macha.nikolski@u-bordeaux.fr) Mikaël Georges (1,2) (mikael.georges@u-bordeaux.fr) diff --git a/Makefile b/Makefile index 91321012..abcb0b47 100644 --- a/Makefile +++ b/Makefile @@ -1,31 +1,46 @@ -.PHONY: venv sync test lock lint healthcheck bootstrap start-es index setup - -venv: - uv venv +.PHONY: audit bootstrap build clean healthcheck index lint lock release-check sync sync-model test update-registry sync: uv sync -test: - uv run pytest +sync-model: + uv sync --extra llm --extra gpu --extra entity lock: - uv lock + uv lock --check lint: - uv run python -m ruff check . + uv run ruff check . + +test: + uv run pytest + +audit: + uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 + +build: + uv build healthcheck: - uv run trialmatchai-healthcheck --config Matcher/config/config.json --start-es + uv run trialmatchai-healthcheck --registry bootstrap: - bash scripts/bootstrap_data.sh + uv run trialmatchai-bootstrap-data -start-es: - bash scripts/start_es.sh +update-registry: + uv run trialmatchai-update-registry index: - bash scripts/index_data.sh + uv run trialmatchai-index --prepare + +release-check: + uv lock --check + uv run ruff check . + uv run pytest + uv build + uv run python scripts/scan_secrets.py + uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 -setup: - bash setup.sh +clean: + rm -rf build dist src/*.egg-info .pytest_cache .ruff_cache + find . -name '__pycache__' -type d -prune -exec rm -rf {} + diff --git a/README.md b/README.md index 86cc9cd4..36c43536 100644 --- a/README.md +++ b/README.md @@ -1,107 +1,416 @@ -# TrialMatchAI +
-Logo +TrialMatchAI -TrialMatchAI is an AI-driven system for matching patients to relevant clinical trials. It combines retrieval (BM25/vector search), NLP, and LLM-based reasoning to produce transparent, ranked trial recommendations. +

AI-driven clinical trial matching. Import a patient — text, FHIR, Phenopacket, or OMOP — and get ranked, eligible trials with criterion-level eligibility explanations. Local LanceDB search + vLLM reasoning on a single GPU server; no Elasticsearch or hosted vector database to run.

-## Disclaimer -This software is provided for research and informational purposes only. It is not medical advice and must not replace consultation with qualified healthcare professionals. +

+ Install · + Quickstart · + How it works · + Configuration · + CLI +

-## Key Features -- AI-powered matching of patient profiles to clinical trial eligibility criteria. -- Two-stage retrieval (BM25 + vector) with optional reranking. -- Explainable recommendations and criterion-level insights. -- Scalable Elasticsearch-backed indexing. -- Modular pipelines for indexing, retrieval, and reasoning. +
+ +> **⚕️ For research and informational use only.** TrialMatchAI is not medical +> advice, not a medical device, and must not replace review by qualified +> healthcare professionals. + +## TL;DR + +TrialMatchAI runs in **two halves**: **build the system once**, then **match +patients many times**. Both commands are idempotent and resume after disruption. + +```bash +uv sync --extra llm --extra gpu --extra entity # GPU host + HuggingFace access +uv run trialmatchai bootstrap-data # fetch prepared corpus + adapters +uv run trialmatchai build # 1) BUILD: prepare + index (once) +uv run trialmatchai e2e --input patient.txt # 2) MATCH: ingest + match a patient +# -> results//ranked_trials.json +``` ## Requirements -- OS: Linux or macOS -- Python: 3.8+ -- Java: required for NER/normalization components -- Elasticsearch: Docker Compose or Apptainer -- GPU: NVIDIA gpu with at least 40 GB of VRAM is recommended for large-scale processing -- Disk space: 100 GB+ for datasets and indices -## Quickstart (uv recommended) -1) Install dependencies +- Python 3.11 (`pyproject.toml` requires `>=3.11,<3.12`) +- `uv` recommended, or `pip` with an editable install +- NVIDIA GPU for vLLM-backed matching and fine-tuning +- Around 100 GB disk for datasets, model artifacts, LanceDB tables, manifests, + and run outputs +- OMOP vocabulary files if you want to build the concept-linking table locally + +## Install + +Clone the repository and install from the project root: + +```bash +git clone +cd TrialMatchAI +``` + +Base install with `uv` gives the package and CLI entry points without the heavy +model stack: + ```bash uv sync +uv run trialmatchai --help ``` -2) Ensure Elasticsearch credentials are configured -- If using Apptainer, set `ELASTIC_PASSWORD` in `elasticsearch/.env`. -- For the runtime pipeline, set `TRIALMATCHAI_ES_PASSWORD` in your environment. +Install the full model-backed runtime: -3) Start Elasticsearch (auto-start supported) ```bash -trialmatchai-healthcheck --config Matcher/config/config.json --start-es +uv sync --extra llm --extra gpu --extra entity ``` -4) Run the pipeline +Install the fine-tuning stack: + ```bash -python -m Matcher.main +uv sync --extra finetune ``` -Results are written under `results/`. +Editable install with `pip` is also supported: -## One-time Provisioning (data + models + indexing) -You can run the all-in-one bootstrap script: ```bash -./setup.sh +python3.11 -m venv .venv +source .venv/bin/activate +pip install -e . ``` -Or run steps individually: +Optional extras with `pip`: + ```bash -bash scripts/bootstrap_data.sh -bash scripts/start_es.sh -bash scripts/index_data.sh +pip install -e ".[entity]" +pip install -e ".[llm,entity]" +pip install -e ".[llm,gpu,entity]" +pip install -e ".[finetune]" ``` -## Package Installation (pip fallback) +| Extra | Adds | +| --- | --- | +| `entity` | GLiNER2 biomedical extraction | +| `llm` | local embedding and LLM dependencies | +| `gpu` | vLLM and bitsandbytes; intended for Linux CUDA hosts | +| `finetune` | training dependencies for `trialmatchai finetune` | + +Installing the package only gives you the CLI. Real matching also needs the +trial corpus, model artifacts, and LanceDB search tables — all produced by the +**build** step below. + +## Quickstart + +The pipeline has two halves. **Build** is the heavy, one-time setup (GPU); it is +resumable and only does work that is not already done. **Match** is fast and +repeatable against the built system. + +### 0. Set up the runtime (GPU host) + ```bash -pip install -e . +uv sync --extra llm --extra gpu --extra entity # model-backed runtime +cp .env.example .env # optional local overrides +export HF_TOKEN= # required for gated models (phi-4, gemma-2) +``` + +### 1. Build the system — once + +```bash +uv run trialmatchai bootstrap-data # download the prepared corpus + LoRA adapters +uv run trialmatchai build # prepare embeddings/entities + build the index +uv run trialmatchai build --status # see exactly what is built (and what isn't) ``` -## Configuration Overrides -Use environment variables or a `.env` file to override defaults: +`build` fails fast if a GPU, an extra, or model access is missing — and resumes +from where it left off if interrupted. Bringing your **own** trials instead of +bootstrapping? Put normalized JSON in `data/trials_jsons/` and `build` will +prepare them. To enable entity→concept linking, add `--concepts` (open +vocabularies, **auto-downloaded**) — and optionally an OMOP `CONCEPT.csv` for +SNOMED/LOINC/RxNorm on top: + ```bash -# Elasticsearch -TRIALMATCHAI_ES_HOST=https://localhost:9200 -TRIALMATCHAI_ES_USERNAME=elastic -TRIALMATCHAI_ES_PASSWORD=YourNewPassword -TRIALMATCHAI_ES_AUTO_START=true -TRIALMATCHAI_ES_START_SCRIPT=elasticsearch/apptainer-run-es.sh -TRIALMATCHAI_ES_START_TIMEOUT=600 +uv run trialmatchai build --concepts # genes, diseases, chemicals, cells, phenotypes +uv run trialmatchai build --concepts --concepts-csv data/omop/CONCEPT.csv --synonym-csv data/omop/CONCEPT_SYNONYM.csv +``` + +#### What gets fetched, and how + +| Resource | How you get it | Automatic? | +| --- | --- | --- | +| Trial corpus (`processed_trials` + criteria) | `trialmatchai bootstrap-data` (Zenodo) | ✅ automatic | +| Fine-tuned LoRA adapters (CoT + reranker) | `trialmatchai bootstrap-data` (Zenodo) | ✅ automatic | +| Fine-tuning datasets (only if you re-train) | `trialmatchai bootstrap-data --finetune-data` (Zenodo) | ✅ automatic (opt-in) | +| Embedder (`BAAI/bge-m3`) | downloaded from HuggingFace on first use | ✅ automatic | +| Concept-linking vocabularies (genes, diseases, …) | `trialmatchai build --concepts` | ✅ automatic | +| Base LLMs (`microsoft/phi-4`, `google/gemma-2-2b-it`) | HuggingFace on first use | ⚠️ automatic, but **gated** models need a **one-time** `hf auth login` + accepting the model licence | +| OMOP clinical vocab (SNOMED/LOINC/RxNorm) | download `CONCEPT.csv` from [OHDSI Athena](https://athena.ohdsi.org/) | ❌ manual (licensed); linking works without it | + +So a from-scratch user runs **two commands** (`bootstrap-data`, then `build --concepts`) after a one-time `hf auth login`. Everything else is pulled on demand. + +### 2. Match patients — repeatably + +`e2e` ingests the patient (format auto-detected) and matches in one command: + +```bash +uv run trialmatchai e2e --input data/patients/raw/patient-1.txt +uv run trialmatchai e2e --input data/patients/raw/patient-1.fhir.json +uv run trialmatchai e2e --input data/patients/omop_extract +``` + +Results land in `results//` (ranked trials + eligibility +explanations). Re-running skips patients already matched. + +### Health and keeping trials current + +```bash +uv run trialmatchai healthcheck # validate config/paths/deps +``` + +Fold new/changed ClinicalTrials.gov studies into the **live index** — fetch → +embed + entity-annotate → upsert, incremental and idempotent (unchanged studies +are skipped via a manifest, so it is safe to re-run): + +```bash +uv run trialmatchai update-registry --since 2026-06-01 # one-shot +uv run trialmatchai update-registry --watch --interval 86400 # server: update daily +``` + +For a one-shot cadence you can also drive `update-registry` from cron, a systemd +timer, or GitHub Actions — see [docs/registry-updater.md](docs/registry-updater.md). + +
+Manual / advanced control (the steps build and e2e wrap) + +```bash +uv run trialmatchai index --prepare # prepare + index from trials_jsons (what `build` runs) +uv run trialmatchai import-patient --input patient.txt # stage a profile only +uv run trialmatchai run # match already-staged profiles +uv run trialmatchai trec --tracks "21 22" # benchmark: official TREC CT eval +``` -# Embedder -TRIALMATCHAI_EMBEDDER_MODEL_NAME=BAAI/bge-m3 +
-# Logging -TRIALMATCHAI_LOG_LEVEL=INFO -TRIALMATCHAI_LOG_JSON=0 +## How It Works + +The diagram below is the **match** path. The one-time **build** step produces the +LanceDB index it queries — trial and criterion embeddings, entity annotations, +and parsed eligibility constraints. + +```text +Patient data (text / FHIR / Phenopacket / OMOP) + | + v +Interop importers -> canonical PatientProfile + | + v +GLiNER2 entity extraction + deterministic variant patterns -> concept linking + | + v +First-level trial retrieval in LanceDB (BM25 + embeddings) + | + v +Multi-channel query fusion for broad candidate recall + | + v +Criterion retrieval + vLLM Yes/No reranker + | + v +Constraint-aware criterion scoring + | + v +vLLM eligibility reasoning per criterion + | + v +Final ranking + explanations in results/ ``` -Note: `Matcher/config/config.json` ships with a placeholder password (`CHANGE_ME`). Use env vars for production. +The generative LLM stages, reranker and eligibility reasoning, run on vLLM. +LoRA adapters are served natively through vLLM. NER, reranker, and eligibility +reasoning are configurable and fine-tunable. + +## Data and storage + +Everything is **embedded LanceDB** — no external services. A search DB +(`data/search`, with `trials` + `criteria` tables) and a concept-linking DB +(`data/concepts`). ClinicalTrials.gov records are normalized to +`data/trials_jsons/.json`, then prepared into one trial row and one +criteria row per eligibility criterion (text + embeddings + entity annotations + +parsed constraints). Both tables carry full-text and vector columns, so retrieval +runs in `bm25`, `vector`, or `hybrid` mode. Imported patients live under +`data/patients/{profiles,summaries}/`. + +## Patient Inputs + +The importer supports: + +- free-text notes: `.txt` and `.md` +- GA4GH Phenopacket JSON +- HL7 FHIR R4 Bundle JSON, individual FHIR resource JSON, NDJSON, and JSONL +- OMOP CDM extract folders with CSV or Parquet tables + +Importers preserve provenance and unsupported source elements where possible. +The matching summary is rendered deterministically from the canonical +`PatientProfile`; raw patient files are not consumed directly by +`trialmatchai run`. + +See [docs/interoperability.md](docs/interoperability.md) for format details. + +## Learn more + +Deeper guides live in the **[documentation site](https://cbib.github.io/TrialMatchAI/)**: + +- **[Pipeline & CLI](https://cbib.github.io/TrialMatchAI/pipeline/)** — the stage registry, `--only/--skip/--from/--to/--force`, ablation, and presets. +- **[Architecture](https://cbib.github.io/TrialMatchAI/architecture/)** — multi-channel first-level retrieval, constraint-aware ranking, and the LanceDB tables. +- **[Patient interoperability](https://cbib.github.io/TrialMatchAI/interoperability/)** — text / FHIR / Phenopacket / OMOP importers. +- **[Fine-tuning & custom models](https://cbib.github.io/TrialMatchAI/finetuning/)** — swap the NER, reranker, and CoT models; training-data formats. +- **[Registry updater](https://cbib.github.io/TrialMatchAI/registry-updater/)** — keep trials current from ClinicalTrials.gov. +- **[API reference](https://cbib.github.io/TrialMatchAI/api/)** — the Python API. + +To bring your own models, point `entity_extraction.model_name`, +`model.reranker_adapter_path`, and `model.cot_adapter_path` at your checkpoints / +adapters, or train them with `trialmatchai finetune {cot,reranker,ner}` — see the +[fine-tuning guide](https://cbib.github.io/TrialMatchAI/finetuning/). + +## Configuration + +Defaults live in `src/trialmatchai/config/config.json`. Runtime overrides can be +set in `.env` or as environment variables. + +Common overrides: + +```bash +TRIALMATCHAI_OUTPUT_DIR=results +TRIALMATCHAI_TRIALS_JSON_FOLDER=data/trials_jsons +TRIALMATCHAI_SEARCH_DB_PATH=data/search +TRIALMATCHAI_SEARCH_MODE=hybrid +TRIALMATCHAI_FIRST_LEVEL_MAX_TRIALS=1000 +TRIALMATCHAI_FIRST_LEVEL_PER_CHANNEL_SIZE=300 +TRIALMATCHAI_FIRST_LEVEL_VECTOR_SCORE_THRESHOLD=0.0 +TRIALMATCHAI_FIRST_LEVEL_LLM_EXPANSION_ENABLED=false +TRIALMATCHAI_ENTITY_BACKEND=gliner2 +TRIALMATCHAI_ENTITY_SCHEMA_PATH=entity_schemas/trialmatchai.yaml +TRIALMATCHAI_CONCEPT_DB_PATH=data/concepts +TRIALMATCHAI_LINK_ACCEPT=0.80 +TRIALMATCHAI_LINK_REJECT=0.30 +TRIALMATCHAI_CONSTRAINTS_ENABLED=true +TRIALMATCHAI_CONSTRAINTS_SCORE_WEIGHT=0.25 +TRIALMATCHAI_CONSTRAINTS_LLM_EXTRACTION_ENABLED=false +TRIALMATCHAI_CONSTRAINTS_WRITE_REPORTS=true +TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=false +TRIALMATCHAI_LOG_JSON=1 +``` + +The full override list is in [`.env.example`](.env.example). + +## CLI Reference + +There is a single entry point — `trialmatchai` — and every capability is a +subcommand. Under the hood they are all slices of **one idempotent pipeline**. + +**The unified pipeline (run any subset)** + +| Command | Purpose | +| --- | --- | +| `trialmatchai pipeline` | Run the whole pipeline, or any slice: `--only` / `--from` / `--to` / `--skip` / `--force` over the stages `prepare → concepts → index → ingest → expand → match → eval`. Idempotent — finished work is skipped. See [docs](https://cbib.github.io/TrialMatchAI/pipeline/). | + +The commands below are convenience presets over that pipeline. + +**Build the system (setup half)** + +| Command | Purpose | +| --- | --- | +| `trialmatchai build` | Prepare the corpus (embeddings + entities) and build the search index — resumable, with `--status` | +| `trialmatchai bootstrap-data` | Download and extract the prepared corpus + model adapters | +| `trialmatchai build-concepts` | Build the LanceDB concept table for entity normalization (optional, OMOP) | +| `trialmatchai update-registry` | Fetch changed ClinicalTrials.gov studies and upsert LanceDB | + +**Match patients (run half)** + +| Command | Purpose | +| --- | --- | +| `trialmatchai e2e` | Ingest a patient and match end-to-end (idempotent, per-patient resume) | +| `trialmatchai import-patient` | Import text, FHIR, Phenopacket, or OMOP patient data into a profile | +| `trialmatchai run` | Match already-staged patient profiles | +| `trialmatchai trec` | Benchmark: end-to-end evaluation on the official TREC Clinical Trials tracks | + +**Utility** + +| Command | Purpose | +| --- | --- | +| `trialmatchai healthcheck` | Validate config, paths, optional model deps, and LanceDB tables | +| `trialmatchai index` | Lower-level prepare/index of trial and criteria search tables | +| `trialmatchai finetune` | Fine-tune NER, reranker, or eligibility reasoning models | -## Healthcheck ```bash -trialmatchai-healthcheck --config Matcher/config/config.json --start-es +uv run trialmatchai build --status # what is built +uv run python -m trialmatchai e2e --input patient.txt ``` -## Tests +## Deployment + +The supported deployment is a single Python 3.11 GPU server or VM. Search tables +are local LanceDB files under `data/search`, and concept linking uses a separate +LanceDB database under `data/concepts`. + +The registry updater is designed for cron, systemd timers, or GitHub Actions. +See [docs/registry-updater.md](docs/registry-updater.md). + +## Development + ```bash +uv sync +uv run ruff check . uv run pytest +uv run pre-commit run --all-files # ruff + gitleaks secret scan + hygiene +uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 ``` -Integration tests (requires running ES): +Install the git hooks once so secret scanning and linting run on every commit: + ```bash -TRIALMATCHAI_RUN_INTEGRATION=1 pytest -m integration +uv run pre-commit install ``` -## Contributing -We welcome contributions. Please open an issue or submit a PR with tests. +## Security + +Never commit real credentials, private keys, datasets, models, local LanceDB +data, run manifests, or results. Keep runtime values local: + +```bash +cp .env.example .env +``` + +Artifact bootstrap supports optional SHA-256 verification through: + +- `TRIALMATCHAI_PROCESSED_TRIALS_SHA256` +- `TRIALMATCHAI_MODELS_SHA256` +- `TRIALMATCHAI_CRITERIA_PART__SHA256` + +Dependency auditing currently ignores `CVE-2025-3000` because vLLM 0.23 pins +Torch 2.11.0 and the advisory lists no fixed Torch version. Revisit this when +upgrading vLLM or Torch. + +## Citation + +If you use TrialMatchAI in your research, please cite the Nature Communications +paper: + +> Abdallah, M. _et al._ TrialMatchAI: an end-to-end AI-powered clinical trial +> recommendation system to streamline patient-to-trial matching. _Nature +> Communications_ **17**, 4472 (2026). + +```bibtex +@article{abdallah2026trialmatchai, + title = {TrialMatchAI: an end-to-end AI-powered clinical trial recommendation system to streamline patient-to-trial matching}, + author = {Abdallah, Majd and Nakken, Sigve and Georges, Mikael and Bierkens, Mariska and Galvis, Johanna and Groppi, Alexis and Karkar, Slim and Meiqari, Lana and Rujano, Maria Alexandra and Canham, Steve and Dienstmann, Rodrigo and Fijneman, Remond and Hovig, Eivind and Meijer, Gerrit and Nikolski, Macha}, + journal = {Nature Communications}, + volume = {17}, + pages = {4472}, + year = {2026}, + doi = {10.1038/s41467-026-70509-w}, + url = {https://doi.org/10.1038/s41467-026-70509-w} +} +``` ## Support + - Email: abdallahmajd7@gmail.com -- DOI: https://doi.org/10.5281/zenodo.18329084 -- arXiv: https://arxiv.org/abs/2505.08508 +- Software archive (DOI): diff --git a/docs/HLD.md b/docs/HLD.md deleted file mode 100644 index e85b3431..00000000 --- a/docs/HLD.md +++ /dev/null @@ -1,655 +0,0 @@ -# High Level Design — TrialMatchAI - -## 1. Overview - -TrialMatchAI is an AI-driven clinical trial matching system. Given a patient record encoded as a GA4GH Phenopacket, it retrieves and ranks the most relevant clinical trials from a large Elasticsearch-backed corpus using a three-stage pipeline: hybrid retrieval, LLM reranking, and chain-of-thought eligibility reasoning. - -### Goals -- Match individual patients to relevant open clinical trials at scale -- Provide criterion-level explainability (why a trial does or does not match) -- Support reproducible, ontology-grounded patient representations - -### Non-Goals -- Real-time / online inference (designed for batch processing) -- EHR integration or direct clinical deployment -- Trial outcome prediction - ---- - -## 2. System Architecture - -``` -┌─────────────────────────────────────────────────────────────────────┐ -│ TrialMatchAI │ -│ │ -│ ┌──────────────┐ ┌────────────────────────────────────────────┐ │ -│ │ Indexing │ │ Matching Pipeline │ │ -│ │ Pipeline │ │ │ │ -│ │ │ │ Phenopacket │ │ -│ │ ClinicalTrials │ │ │ │ -│ │ .gov JSONs │ │ ▼ │ │ -│ │ │ │ │ ┌─────────────────────┐ │ │ -│ │ ▼ │ │ │ Phenopacket │ │ │ -│ │ BioMedNER │ │ │ Processor + LLM │ │ │ -│ │ annotation │ │ │ (Phi-4 summariser) │ │ │ -│ │ │ │ │ └──────────┬──────────┘ │ │ -│ │ ▼ │ │ │ keywords.json │ │ -│ │ BGE-M3 │ │ ▼ │ │ -│ │ embeddings │ │ ┌─────────────────────┐ │ │ -│ │ │ │ │ │ Stage 1: Hybrid │ │ │ -│ │ ▼ │ │ │ BM25 + Vector Search│ │ │ -│ │ Elasticsearch│◄───┼──│ (clinical_trials) │ │ │ -│ │ clinical_ │ │ └──────────┬──────────┘ │ │ -│ │ trials │ │ │ ~300 candidates │ │ -│ │ trials_ │ │ ▼ │ │ -│ │ eligibility │◄───┼──│ Stage 2: Criteria │ │ │ -│ └──────────────┘ │ │ Search + LLM Rerank │ │ │ -│ │ │ (Gemma-2-2B) │ │ │ -│ │ └──────────┬──────────┘ │ │ -│ │ │ ~33 trials │ │ -│ │ ▼ │ │ -│ │ ┌─────────────────────┐ │ │ -│ │ │ Stage 3: CoT │ │ │ -│ │ │ Reasoning (Phi-4 + │ │ │ -│ │ │ finetuned adapter) │ │ │ -│ │ └──────────┬──────────┘ │ │ -│ │ │ │ │ -│ │ ▼ │ │ -│ │ ┌─────────────────────┐ │ │ -│ │ │ Ranker + Output │ │ │ -│ │ │ ranked_trials.json │ │ │ -│ │ └─────────────────────┘ │ │ -│ └────────────────────────────────────────────┘ │ -└─────────────────────────────────────────────────────────────────────┘ -``` - ---- - -## 3. Components - -### 3.1 Indexing Pipeline - -Run once to prepare the Elasticsearch indices from raw ClinicalTrials.gov data. - -``` -Raw Trial JSONs - │ - ├──► Parser (BioMedNER annotation) - │ │ - │ ▼ - │ Annotated criteria with entity synonyms - │ - ├──► prepare_trials.py ──► BGE-M3 embed ──► clinical_trials index - │ - └──► prepare_criteria.py ──► BGE-M3 embed ──► trials_eligibility index -``` - -**`clinical_trials` index** — one document per trial: - -| Field | Type | Notes | -|---|---|---| -| nct_id | keyword | Primary key | -| brief_title, brief_summary, condition, eligibility_criteria | text | BM25 searchable | -| *_vector (×4) | dense_vector (1024d) | BGE-M3 embeddings | -| minimum_age, maximum_age | float | Years, for age filtering | -| overall_status, phase, gender | keyword | Facet filters | -| interventions, locations | nested | Structured metadata | - -**`trials_eligibility` index** — one document per eligibility criterion: - -| Field | Type | Notes | -|---|---|---| -| criteria_id, nct_id | keyword | Stable hash-derived ID | -| eligibility_type | keyword | `inclusion` or `exclusion` | -| criterion | text | BM25 searchable | -| criterion_vector | dense_vector (1024d, HNSW) | BGE-M3 embedding | -| entities | nested | BioMedNER annotations + synonyms | - ---- - -### 3.2 Phenopacket Processor - -Converts a GA4GH Phenopacket JSON into search-ready keywords. - -**Input:** `example/.json` (Phenopacket v2.0) - -**Steps:** -1. Validate schema with Pydantic -2. Extract structured sections: demographics, phenotypic features (HPO), diagnoses (MONDO), biosamples (UBERON), treatments (CHEBI), procedures (NCIT), genomic interpretations, family history -3. Build medical narrative sentences per section -4. Feed narrative to **Phi-4** (4-bit quantized) with a structured extraction prompt - -**Output:** `keywords.json` -```json -{ - "main_conditions": ["coronary artery disease"], - "other_conditions": ["type 2 diabetes mellitus", "hypercholesterolemia"], - "expanded_sentences": ["58-year-old male with advanced CAD..."] -} -``` - ---- - -### 3.3 Stage 1 — Hybrid Retrieval - -**Component:** `ClinicalTrialSearch` -**Index:** `clinical_trials` -**Goal:** Cast a wide net; recall over precision. - -**Query construction:** -``` -hybrid_score = α × normalized_text_score + β × normalized_vector_score - (α = 0.5, β = 0.5 by default) -``` - -- **BM25 side:** multi-match across `condition`, `eligibility_criteria`, `brief_title`, `brief_summary` with field-specific boosts -- **Vector side:** cosine similarity against 4 embedded fields using script-score queries -- **Synonym expansion:** BioMedNER extracts disease synonyms from `main_conditions` to broaden recall -- **Filters:** age range, gender, `overall_status = Recruiting` - -**Output:** Up to 300 trial IDs with relevance scores → `nct_ids.txt`, `first_level_scores.json` - ---- - -### 3.4 Stage 2 — Criteria Matching + LLM Reranking - -**Component:** `SecondStageRetriever` -**Index:** `trials_eligibility` -**Goal:** Narrow to trials with genuinely matching eligibility criteria. - -**Steps:** -1. For each query term (up to 150), search `trials_eligibility` within the Stage 1 trial subset -2. Retrieve up to 250 matching criteria per query (hybrid search on criterion text + entity synonyms) -3. **Gemma-2-2B reranker** scores each (query, criterion) pair by probability of "Yes" token -4. Apply type weighting: inclusion criteria score × 1.0, exclusion criteria score × 0.25 -5. Aggregate per-trial score: - ``` - trial_score = 0.7 × (Σ scores / √count) + 0.3 × max_score - ``` -6. Filter trials below threshold (default 0.5); select top ~33 - -**Output:** Ranked list of ~33 trial IDs → `top_trials.txt` - ---- - -### 3.5 Stage 3 — Chain-of-Thought Reasoning - -**Component:** `BatchTrialProcessor` (HuggingFace) or `BatchTrialProcessorVLLM` (vLLM) -**Model:** Phi-4 + fine-tuned LoRA adapter (`models/finetuned_phi_reasoning`) -**Goal:** Criterion-level eligibility assessment with explicit reasoning. - -**Prompt structure:** -``` -System: You are a medical expert with advanced knowledge in clinical reasoning... -User: Patient Profile: - Trial Criteria: - For each criterion, assess: Met / Not Met / Not Violated / Violated / Unclear - Output JSON with criterion-level evaluation and Final Decision. -``` - -**Optimizations:** -- Length bucketing to minimise padding waste across batches -- Temperature 0.0 for deterministic outputs -- Idempotent: skips already-processed trials on resume -- vLLM backend for high-throughput GPU inference - -**Output per trial:** `.txt` (raw), `.json` (parsed) -```json -{ - "Inclusion_Criteria_Evaluation": [ - {"criterion": "Age ≥ 18", "status": "Met", "reasoning": "Patient is 58."} - ], - "Exclusion_Criteria_Evaluation": [...], - "Final Decision": "Eligible" -} -``` - ---- - -### 3.6 Ranker - -**Component:** `trial_ranker.py` -**Goal:** Produce a single ranked list from CoT outputs. - -**Scoring formula per trial:** -``` -inclusion_ratio = (met + not_violated) / (met + not_violated + not_met + violated) -exclusion_ratio = (not_violated + met) / (not_violated + met + violated) -final_score = (inclusion_ratio + exclusion_ratio) / 2 -``` - -Irrelevant and unclear criteria are excluded from both numerator and denominator. - -**Output:** `ranked_trials.json` — sorted list of `{nct_id, score}` - ---- - -## 4. Models - -| Model | Role | Quantization | Backend | -|---|---|---|---| -| BAAI/bge-m3 | Text embeddings (1024d) | FP16 | HuggingFace | -| microsoft/phi-4 | Keyword extraction + CoT reasoning | 4-bit NF4 | HF / vLLM | -| finetuned_phi_reasoning | LoRA adapter for eligibility reasoning | — | PEFT / vLLM LoRA | -| google/gemma-2-2b-it | Pairwise criterion reranker | 4-bit NF4 | HuggingFace | - ---- - -## 5. External Services - -### Elasticsearch (3-node cluster) -- **Deployment:** Docker Compose (or Apptainer on HPC) -- **Version:** 8.13.4 -- **Security:** HTTPS + X-Pack, TLS certificates -- **Memory:** 2 GB per node (6 GB total) -- **Ports:** 9200 (API), 5601 (Kibana) - -### BioMedNER -- **Purpose:** Biomedical NER and entity normalization -- **Services:** 4 daemons on ports 18894, 18783, 18888, 18892 -- **Entities:** genes, diseases, drugs, procedures, signs/symptoms, cell types -- **Usage:** synonym expansion (Stage 1) and entity annotation (indexing) - ---- - -## 6. Data Flow Summary - -``` -[One-time setup] -ClinicalTrials.gov JSONs - → BioMedNER annotation - → BGE-M3 embedding - → Elasticsearch (clinical_trials + trials_eligibility indices) - -[Per-patient inference] -phenopacket.json - → PhenopacketProcessor → Phi-4 → keywords.json - → ClinicalTrialSearch (BM25 + vector, ES) → ~300 trial IDs - → SecondStageRetriever (criteria search + Gemma rerank) → ~33 trial IDs - → BatchTrialProcessor (Phi-4 CoT reasoning) → per-trial JSON assessments - → Ranker → ranked_trials.json -``` - ---- - -## 7. Configuration - -All settings are driven by `source/Matcher/config/config.json` and can be overridden via environment variables: - -| Env Var | Default | Description | -|---|---|---| -| `TRIALMATCHAI_ES_HOST` | `https://localhost:9200` | Elasticsearch URL | -| `TRIALMATCHAI_ES_USERNAME` | `elastic` | ES user | -| `TRIALMATCHAI_ES_PASSWORD` | *(required)* | ES password | -| `TRIALMATCHAI_EMBEDDER_MODEL_NAME` | `BAAI/bge-m3` | Embedding model | -| `TRIALMATCHAI_ES_AUTO_START` | `true` | Auto-launch ES if not running | -| `TRIALMATCHAI_LOG_LEVEL` | `INFO` | Logging verbosity | - ---- - -## 8. Output Structure - -``` -results/ -└── / - ├── keywords.json # Extracted conditions and expanded narrative - ├── nct_ids.txt # Stage 1 candidate trial IDs - ├── first_level_scores.json # Stage 1 relevance scores - ├── top_trials.txt # Stage 2 shortlisted trial IDs - ├── .txt # Raw CoT reasoning text - ├── .json # Parsed criterion-level evaluation - └── ranked_trials.json # Final ranked list with scores -``` - ---- - -## 9. Infrastructure Requirements - -| Resource | Minimum | Recommended | -|---|---|---| -| GPU VRAM | 24 GB | 40 GB+ (for Phi-4 unquantized) | -| RAM | 32 GB | 64 GB | -| Disk | 100 GB | 200 GB+ | -| OS | Linux / macOS | Linux (CUDA support) | -| Python | 3.10–3.11 | 3.11 | -| Elasticsearch | 3 × 2 GB nodes | 3 × 6 GB nodes | - ---- - -## 10. Key Design Decisions - -**Two-stage retrieval before reasoning** — LLM reasoning is expensive (5000 token outputs per trial). Stages 1 and 2 reduce the candidate set from hundreds of thousands of trials to ~33 before the LLM is invoked. - -**Ontology-grounded inputs** — Using HPO, MONDO, CHEBI codes rather than free text ensures consistent entity matching across patient records and trial criteria regardless of phrasing variation. - -**Criterion-level scoring** — The final ranking score is computed from individual criterion assessments rather than a holistic match score, enabling explainable recommendations. - -**Resumable processing** — Both indexing and CoT reasoning are idempotent; partial runs can be continued without reprocessing completed items. - -**Pluggable LLM backend** — The reasoning stage supports both HuggingFace (single GPU, lower overhead) and vLLM (multi-GPU, higher throughput) backends, selectable via config. - ---- - ---- - -## HLD — LLM & Agent Harness View - -A simpler view of the system focused on how LLMs are used and how the pipeline harness orchestrates them. - ---- - -## 1. The Three LLM Agents - -TrialMatchAI uses three LLMs, each with a distinct, narrow role. They do not share state or communicate with each other directly — the harness (`main.py`) wires their inputs and outputs together. - -``` -┌─────────────────────────────────────────────────────────────────┐ -│ Pipeline Harness │ -│ (main.py) │ -│ │ -│ Patient ┌──────────────┐ keywords.json │ -│ Phenopacket ──►│ LLM Agent 1 ├──────────────────────┐ │ -│ │ Phi-4 │ │ │ -│ │ Summariser │ ▼ │ -│ └──────────────┘ Elasticsearch │ -│ (BM25 + vector) │ -│ │ │ -│ ~300 candidates │ -│ │ │ -│ ▼ │ -│ ┌──────────────┐ │ -│ │ LLM Agent 2 │◄──────────────────────────┘ │ -│ │ Gemma-2-2B │ (query, criterion) pairs │ -│ │ Reranker ├──────────────────────┐ │ -│ └──────────────┘ │ │ -│ ~33 shortlisted │ -│ trial IDs │ -│ │ │ -│ ▼ │ -│ ┌──────────────┐ │ -│ │ LLM Agent 3 │◄──────────────────────────┘ │ -│ │ Phi-4 + │ (patient profile, │ -│ │ LoRA CoT │ trial criteria) │ -│ │ Reasoner ├──────────────────────┐ │ -│ └──────────────┘ │ │ -│ per-trial JSON │ -│ │ │ -│ ▼ │ -│ Rule-based Ranker │ -│ ranked_trials.json│ -└─────────────────────────────────────────────────────────────────┘ -``` - ---- - -## 2. Agent 1 — Summariser (Phi-4) - -**Job:** Translate a structured Phenopacket into free-text medical keywords suitable for search. - -**Trigger:** Once per patient at the start of the pipeline. - -**Input:** -``` -Medical narrative sentences built from the Phenopacket sections: - DEMOGRAPHICS: Sex: MALE; Age: 58Y... - PHENOTYPE: Myocardial infarction (Present, Severe, Recurrent)... - DIAGNOSIS: Coronary artery disease, Stage III... - TREATMENT: Atorvastatin 40mg oral daily... - INTERPRETATION: LDLR c.1444G>A variant... -``` - -**Prompt pattern:** -``` -System: You are a specialized medical assistant for clinical trial matching. - Extract primary conditions, secondary conditions, and expanded - medical notes. Return strict JSON — no commentary. - -User: -``` - -**Output (JSON, max 2048 tokens):** -```json -{ - "main_conditions": ["coronary artery disease", "CAD", "ischemic heart disease", ...], - "other_conditions": ["type 2 diabetes", "hypercholesterolemia", "LDLR mutation", ...], - "expanded_sentences": ["58-year-old male with advanced multivessel CAD...", ...] -} -``` - -**Why this agent exists:** Phenopackets use ontology codes (HP:0001627), not plain text. The LLM bridges structured clinical data into natural language terms that map to how trials are described in ClinicalTrials.gov. - ---- - -## 3. Agent 2 — Reranker (Gemma-2-2B) - -**Job:** Score how relevant a specific eligibility criterion is to a patient query term. - -**Trigger:** Called in bulk during Stage 2, once per (query term, criterion) pair. Runs in a thread pool with 4 parallel workers. - -**Input (per pair):** -``` -System: You are a clinical assistant determining if patient data supports - trial criterion evaluation. - -User: Statement A: - Statement B: - Respond with 'Yes' or 'No'. -``` - -**Output:** Not free text — the model never generates a full response. The harness reads the **logit scores** for the "Yes" and "No" tokens directly from the last position of the prompt and applies softmax: - -```python -score = softmax([logit_Yes, logit_No])[0] # probability of "Yes" -``` - -Inclusion criteria scores are kept as-is; exclusion criteria scores are multiplied by 0.25 (a trial that excludes the patient's condition is less bad than one that requires something the patient doesn't have). - -**Why this agent exists:** ES keyword and vector search can retrieve a criterion that mentions the right disease but actually *excludes* patients with that disease. The LLM reranker catches this semantic mismatch cheaply — a single forward pass with no generation overhead. - ---- - -## 4. Agent 3 — CoT Reasoner (Phi-4 + LoRA) - -**Job:** Assess each eligibility criterion one-by-one and produce an explainable eligibility decision. - -**Trigger:** Once per shortlisted trial (~33 trials), batched by prompt length. - -**Input:** - -``` -System: You are a medical expert with advanced knowledge in clinical reasoning. - Answer the following question. Before answering, create a concise - chain of thoughts reasoning to ensure a logical and accurate response. - -User: Assess the patient's eligibility for this clinical trial by evaluating - each criterion individually. - - For inclusion criteria classify as: Met | Not Met | Unclear | Irrelevant - For exclusion criteria classify as: Violated | Not Violated | Unclear | Irrelevant - - --- Trial Criteria --- - Inclusion: - 1. Age ≥ 18 years - 2. Documented CAD with ≥50% stenosis - 3. Stable angina or prior MI - Exclusion: - 1. Recent CABG within 6 months - 2. Active malignancy - --- Patient Description --- - -``` - -**Output (JSON, max 5000 tokens):** - -```json -{ - "Inclusion_Criteria_Evaluation": [ - { - "Criterion": "Age ≥ 18 years", - "Classification": "Met", - "Justification": "Patient is 58 years old." - }, - { - "Criterion": "Documented CAD with ≥50% stenosis", - "Classification": "Met", - "Justification": "Diagnosis confirms advanced CAD with multivessel involvement." - } - ], - "Exclusion_Criteria_Evaluation": [ - { - "Criterion": "Recent CABG within 6 months", - "Classification": "Violated", - "Justification": "Patient underwent CABG on 2022-11-15, which is within 6 months of enrollment." - } - ], - "Recap": "Patient meets most inclusion criteria but was disqualified by recent CABG.", - "Final Decision": "Ineligible" -} -``` - -**Why the LoRA adapter:** The base Phi-4 model is general-purpose. The fine-tuned LoRA adapter (`models/finetuned_phi_reasoning`) was trained specifically on clinical trial eligibility assessment tasks, improving structured JSON output and medical reasoning precision. - ---- - -## 5. The Harness (main.py) - -The harness is a **fixed sequential pipeline** — not a dynamic agent loop. There is no tool-calling, no self-reflection, and no LLM deciding what to do next. The harness: - -1. Loads all three models once at startup (cold start is expensive) -2. Iterates over patients in `patients_dir/` -3. Calls agents in a fixed order, passing outputs as inputs to the next stage -4. Writes intermediate results to disk at each step (enabling resume on failure) -5. Handles per-patient exceptions without stopping the full batch - -``` -startup: - load Phi-4 (4-bit) + LoRA adapter - load Gemma-2-2B (4-bit) - load BGE-M3 embedder - load BioMedNER daemons - connect to Elasticsearch - -for each patient: - [Agent 1] phenopacket → keywords.json - [ES] BM25 + vector search → nct_ids.txt - [Agent 2] criteria reranking → top_trials.txt - [Agent 3] CoT reasoning → .json (×33 trials) - [Ranker] score aggregation → ranked_trials.json -``` - -**The ranker is not an LLM** — it is a deterministic formula over the structured JSON that Agent 3 produces. This is intentional: keeping the final scoring rule-based makes it auditable and consistent. - ---- - -## 6. Data Handed Between Agents - -| From | To | Artifact | Content | -| --- | --- | --- | --- | -| Phenopacket (raw) | Agent 1 | medical narrative sentences | Plain-text sentences per clinical category | -| Agent 1 | ES Stage 1 | `keywords.json` | `main_conditions`, `other_conditions`, `expanded_sentences` | -| ES Stage 1 | Agent 2 | `nct_ids.txt` | ~300 trial IDs + scores | -| Agent 2 | Agent 3 | `top_trials.txt` | ~33 trial IDs ranked by criterion match | -| Agent 3 | Ranker | `.json` (×33) | Per-criterion classification + final decision | -| Ranker | User | `ranked_trials.json` | Scored, sorted list of trial IDs | - ---- - -## 7. What This Is Not - -- **Not a ReAct / tool-use agent** — no LLM decides what action to take next -- **Not a multi-agent conversation** — agents never see each other's outputs or converse -- **Not RAG in the classic sense** — retrieved documents (criteria) are fed as structured context to Agent 3, not as retrieved passages for general Q&A -- **Not streaming / real-time** — designed for offline batch processing of patient cohorts - ---- - ---- - -## HLD — Strategy Summary (AI Engineering Learners) - ---- - -### The Problem - -Clinical trials fail to recruit because matching patients to trials manually is slow, expensive, and inconsistent. A trial might have 50 eligibility criteria. A hospital might have thousands of patients. No human team can cross-reference all of that at scale. - -The goal: automate that matching with AI, and make the reasoning **explainable** — not just a black-box score. - ---- - -### The Core Strategy: Progressive Filtering - -The system never throws the most expensive AI at the full problem. Instead it uses a **funnel** — each stage is smarter but slower than the last, and only operates on what survived the previous stage. - -``` -Hundreds of thousands of trials - ↓ cheap keyword + semantic search - 300 candidates - ↓ fast LLM reranking - 33 shortlisted - ↓ deep LLM reasoning - Ranked results with explanations -``` - -This is the central engineering insight: **don't use a sledgehammer where a sieve will do.** - ---- - -### The Four AI Techniques Used - -#### 1. Embeddings + Vector Search - -Convert text into numbers (vectors) that capture semantic meaning. Two pieces of text that mean the same thing — even with different words — land close together in vector space. Used in Stage 1 to find trials that are *semantically* related to the patient's conditions, not just keyword-matched. - -> *Key model: BAAI/bge-m3 (1024-dimensional embeddings)* - -#### 2. RAG — Retrieval-Augmented Generation - -Rather than asking an LLM to memorise every clinical trial, retrieve the relevant trial's criteria at query time and inject them into the prompt as context. The LLM reasons over what it's given, not what it was trained on. - -> *"Give the model the patient chart and the trial rulebook, then ask it to decide."* - -#### 3. Fine-Tuning with LoRA - -The base Phi-4 model is a general-purpose LLM — it can write poetry as easily as it can read medical text. Fine-tuning with a LoRA adapter (a small, efficient set of weight adjustments) specialises it for one task: structured clinical eligibility reasoning. It learns **how** to think about the problem, not specific trial content. - -> *LoRA = teach the model the job, RAG = hand it the case file.* - -#### 4. LLM-as-Scorer (not generator) - -Gemma-2-2B is never asked to generate text. Instead it's used as a **scoring function** — the reranker reads the logit (raw probability) for just two tokens (Yes/No) to score relevance. One forward pass, no generation, extremely fast. This is an underused pattern in production AI systems. - ---- - -### The Data Strategy - -Patient data is structured using the **GA4GH Phenopacket standard** — ontology codes (HPO, MONDO, CHEBI) rather than free text. This solves the vocabulary mismatch problem: a trial saying "coronary artery disease" and a patient record saying "CAD" both resolve to `MONDO:0005066`, ensuring consistent matching regardless of phrasing. - -**BioMedNER** bridges the gap between ontology codes and natural language by extracting synonyms and related terms, expanding search recall. - ---- - -### Key Engineering Decisions - -| Decision | Why | -| --- | --- | -| Three-stage funnel | LLM inference is expensive — only invoke it on a small, pre-filtered set | -| RAG over full fine-tuning for trial knowledge | Trials change constantly; RAG stays current without retraining | -| LoRA over full fine-tuning | Trains faster, uses less memory, can be swapped per use case | -| LLM-as-scorer for reranking | Orders of magnitude faster than generating full responses | -| Criterion-level output | Explainability — doctors need to know *why*, not just a score | -| Deterministic ranker at the end | Keeps the final decision auditable and consistent | - ---- - -### The Takeaway - -TrialMatchAI is a masterclass in **composing AI primitives** rather than reaching for one big model: - -- Use **search** (fast, cheap) to filter -- Use **a small LLM as a scorer** (fast, precise) to refine -- Use **RAG + fine-tuned LLM** (slow, thorough) only on the shortlist -- Use **rules** (deterministic, auditable) for the final decision - -Each component does what it's best at. The system as a whole does what none of them could do alone. diff --git a/docs/api.md b/docs/api.md new file mode 100644 index 00000000..b8db898a --- /dev/null +++ b/docs/api.md @@ -0,0 +1,53 @@ +# API reference + +Auto-generated from docstrings. The pipeline is the primary public API; the +orchestration stages and evaluation metrics are documented for programmatic use. + +## Pipeline + +::: trialmatchai.pipeline + options: + members: + - StageContext + - Stage + - STAGES + - select_stages + - run_pipeline + +## Orchestration stages + +::: trialmatchai.orchestration + options: + members: + - ingest_inputs + - expand_queries + - build_index + - run_matching + - prepare_corpus + - build_system + - build_state + +## Registry updater + +::: trialmatchai.registry.updater + options: + members: + - RegistryUpdater + - RegistryUpdateConfig + - RegistryUpdateReport + +## Evaluation metrics + +::: trialmatchai.trec.metrics + options: + members: + - ndcg_at_k + - condensed_ndcg + - precision_at_k + +::: trialmatchai.trec.qrels + options: + members: + - parse_qrels + - corpus_ncts + - evaluate diff --git a/docs/architecture.md b/docs/architecture.md new file mode 100644 index 00000000..76534f18 --- /dev/null +++ b/docs/architecture.md @@ -0,0 +1,37 @@ +# TrialMatchAI Architecture + +TrialMatchAI is an installable Python package exposed as `trialmatchai`. The supported runtime code lives under `src/trialmatchai`. + +## Runtime Subsystems + +- `trialmatchai.config`: Pydantic-backed settings, path resolution, and `TRIALMATCHAI_` environment overrides. +- `trialmatchai.entities`: schema-driven biomedical entity recognition plus LanceDB-backed concept linking. +- `trialmatchai.registry`: ClinicalTrials.gov v2 client, record normalization, manifest idempotency, preparation, and update orchestration. +- `trialmatchai.search`: embedded LanceDB search tables for trials and eligibility criteria. +- `trialmatchai.matching`: first-stage retrieval, criteria retrieval, ranking, and eligibility reasoning. +- `trialmatchai.models`: local embedding and LLM loader utilities. Install with `--extra llm` and `--extra gpu` for production model runs. +- `trialmatchai.cli`: public command entry points. + +## Data Flow + +1. `trialmatchai update-registry` fetches studies from ClinicalTrials.gov v2. +2. Raw source JSON is written to `data/registry/raw/.json`. +3. Normalized trial JSON is written to `data/trials_jsons/.json`. +4. Changed studies are embedded, criteria are optionally entity annotated, and LanceDB trial/criteria tables are upserted. +5. `trialmatchai run` matches already-imported patient profiles against LanceDB, reranks candidate criteria/trials, and writes results. (Ingest raw patient inputs first with `trialmatchai import-patient`, or use `trialmatchai e2e` to ingest and match in one step.) + +## Storage + +LanceDB is the only search database. It is embedded, file-backed, and stored under `data/search` by default. The concept linker uses a separate LanceDB database under `data/concepts`. + +The registry manifest is append-only JSONL at `data/registry/manifest.jsonl`. The latest record per `nct_id` determines idempotency. + +## Public API + +New code imports from the canonical package namespace: + +```python +from trialmatchai.config.config_loader import load_config +``` + +The old `Matcher` namespace is not shipped. diff --git a/docs/finetuning.md b/docs/finetuning.md new file mode 100644 index 00000000..8f9587dd --- /dev/null +++ b/docs/finetuning.md @@ -0,0 +1,165 @@ +# Fine-tuning & bringing your own models + +TrialMatchAI ships with capable default models, but every model in the pipeline +is **swappable** and **fine-tunable**. You can point the pipeline at your own +checkpoints/adapters via config, and train those adapters with the built-in +`trialmatchai finetune` command. + +| Component | Default | Config key | Fine-tune target | +|-----------|---------|------------|------------------| +| Biomedical extraction | `fastino/gliner2-base-v1` | `entity_extraction.model_name` | GLiNER2 checkpoint | +| Reranker | `google/gemma-2-2b-it` | `model.reranker_adapter_path` | LoRA adapter | +| CoT eligibility | configured CoT model | `model.cot_adapter_path` | LoRA adapter | + +> **Where does the training data come from?** Fine-tuning is **optional** — the +> ready-to-use CoT and reranker adapters are downloaded by `trialmatchai bootstrap-data`, +> so most deployments never need to train. The **published training datasets** are +> available too — fetch them into `data/finetune/`: +> +> ```bash +> trialmatchai bootstrap-data --finetune-data +> ``` +> +> (Source: the paper's Zenodo deposit, .) +> Or bring your own JSONL in the schemas shown below — each line is a self-contained +> example, so you can assemble a dataset from your own annotated patient–trial pairs. + +Install the training dependencies: + +```bash +uv sync --extra finetune +``` + +## 1. Using a custom or fine-tuned model (no training) + +Already have a checkpoint or adapter? Just point the config at it — no code +changes needed. + +- **GLiNER2 extraction:** set `entity_extraction.model_name` to your GLiNER2 + checkpoint (local path or Hub id), backend `gliner2`. LoRA adapters load via + `GLiNER2.load_adapter`. +- **Reranker:** set `model.reranker_adapter_path` to your LoRA adapter directory. +- **CoT:** set `model.cot_adapter_path` to your LoRA adapter directory. + +The reranker and CoT both run on **vLLM (the only LLM backend)**, which serves +the LoRA adapter natively via `LoRARequest` — no merge step required. If you +prefer a single self-contained model instead of base + adapter, merge them: + +```bash +trialmatchai finetune merge \ + --base-model google/gemma-2-2b-it \ + --adapter models/reranker-adapter \ + --output-dir models/reranker-merged +``` + +Then point the config at the merged directory (`model.reranker_model_path` for +the reranker, `model.base_model` for the merged CoT model) and leave the matching +adapter path (`model.reranker_adapter_path` / `model.cot_adapter_path`) empty. + +## 2. Fine-tuning + +### CoT eligibility model (LoRA) + +Train an adapter that improves chain-of-thought eligibility evaluation. + +Data — JSONL, one example per line, either chat or instruct form: + +```json +{"messages": [{"role": "system", "content": "..."}, {"role": "user", "content": "..."}, {"role": "assistant", "content": "{...evaluation JSON...}"}]} +{"instruction": "...", "input": "...", "output": "..."} +``` + +```bash +trialmatchai finetune cot \ + --base-model microsoft/phi-4 \ + --train-data data/finetune/cot.jsonl \ + --eval-data data/finetune/cot.eval.jsonl \ + --output-dir models/cot-adapter \ + --epochs 2 --lora-rank 32 --lora-alpha 64 +``` + +Then set `model.cot_adapter_path: models/cot-adapter`. + +By default, LoRA targets all linear layers (`--target-modules all-linear`), +which works across common Gemma/Llama/Phi-style architectures. Use +`--target-modules auto` to let PEFT choose its built-in mapping, or pass a +comma-separated suffix list such as `q_proj,v_proj`. + +### Reranker (LoRA, Yes/No) + +The reranker decides whether the patient text contains enough information to +evaluate a criterion. Training teaches the model to emit `Yes`/`No`. + +Data — JSONL: + +```json +{"patient_text": "...", "criterion": "...", "label": "Yes"} +{"patient_text": "...", "criterion": "...", "label": "No"} +``` + +```bash +trialmatchai finetune reranker \ + --base-model google/gemma-2-2b-it \ + --train-data data/finetune/reranker.jsonl \ + --eval-data data/finetune/reranker.eval.jsonl \ + --output-dir models/reranker-adapter +``` + +Then set `model.reranker_adapter_path: models/reranker-adapter`. + +### GLiNER2 Schema Extraction + +Uses the native GLiNER2 training stack (`GLiNER2Trainer`). The CLI subcommand is +still named `ner` for compatibility, but the training data can now include flat +entities, schema-based JSON structures, classifications, relations, or a mix. +Flat entity data maps entity-type labels to **surface forms**: + +```json +{"text": "EGFR exon 19 deletion in NSCLC", "entities": {"gene": ["EGFR"], "disease": ["NSCLC"]}} +{"text": "EGFR positive", "ner": [[0, 4, "gene"]]} +{"input": "EGFR positive", "output": {"entities": {"gene": ["EGFR"]}}} +{"text": "No reportable biomarker", "schema": {"entities": {"gene": []}}} +``` + +Structured JSON examples use GLiNER2's native `json_structures` and optional +`json_descriptions` keys: + +```json +{"text": "Patient has EGFR exon 19 deletion and stage IV NSCLC.", "schema": {"entities": {"gene": ["EGFR"]}, "json_structures": [{"biomarker": {"gene": "EGFR", "variant": "exon 19 deletion", "disease_stage": "stage IV"}}], "json_descriptions": {"biomarker": {"gene": "Gene symbol", "variant": "Observed alteration", "disease_stage": "Disease stage"}}}} +{"input": "Erlotinib targets EGFR.", "output": {"relations": [{"targets": {"head": "Erlotinib", "tail": "EGFR"}}]}} +{"text": "Trial requires ECOG 0-1.", "structures": {"eligibility": {"performance_status": "ECOG 0-1"}}} +``` + +`entity_descriptions` are back-filled from your entity schema (`--schema-path`) +for flat entity labels, so entity examples share the runtime label semantics. +TrialMatchAI's current runtime annotator consumes the flat `entities` output; +structured JSON training data is useful for GLiNER2 adapters you call directly +or for future structured extraction integration. + +```bash +trialmatchai finetune ner \ + --base-model fastino/gliner2-base-v1 \ + --train-data data/finetune/ner.jsonl \ + --output-dir models/ner \ + --schema-path src/trialmatchai/entity_schemas/trialmatchai.yaml \ + --epochs 10 # LoRA by default; add --no-lora for a full fine-tune +``` + +- LoRA run saves the adapter to `models/ner/final`; a full run saves + `models/ner/best`. Set `entity_extraction.model_name` to that path. +- Encoder vs. task-head learning rates are tuned separately + (`--encoder-lr 1e-5 --task-lr 5e-4`, GLiNER2 defaults). + +## Notes + +- Training prompts reuse the **exact runtime prompts**, so a fine-tuned model + sees the same format at train and inference time. +- LoRA SFT masks the prompt tokens and computes loss only on the completion. +- `--eval-data` is optional for LoRA SFT. When supplied, evaluation loss is used + for best-checkpoint tracking; `--save-steps` must be a multiple of + `--eval-steps` (defaults align at 500). +- 4-bit quantized loading is on by default (`--no-4bit` to disable) and requires + bitsandbytes on a CUDA-capable machine; `bf16` is default (`--fp16` to switch). + See `trialmatchai finetune --help` for all flags. +- GLiNER2's training API can vary by version; if your installed `gliner2` exposes + a different interface, adapt `src/trialmatchai/finetuning/ner.py`. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..3f495894 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,54 @@ +# TrialMatchAI + +**AI-driven patient-to-clinical-trial matching.** Import a patient — free text, +FHIR, Phenopacket, or OMOP — and get ranked, eligible trials with criterion-level +eligibility explanations. Local LanceDB hybrid search + vLLM reasoning on a single +GPU server; no Elasticsearch or hosted vector database to run. + +!!! warning "Research and informational use only" + TrialMatchAI is not medical advice, not a medical device, and must not replace + review by qualified healthcare professionals. + +## Install + +```bash +uv pip install "trialmatchai[llm,gpu,entity]" # full model-backed runtime (GPU host) +# or, lightweight (CLI + base deps only): +uv pip install trialmatchai +``` + +## The two halves + +TrialMatchAI runs in two halves — **build the system once**, then **match patients +many times** — and both are idempotent: finished work is never redone. + +```bash +trialmatchai bootstrap-data # fetch the prepared corpus + adapters (Zenodo) +trialmatchai build --concepts # prepare + index + concept store (resumable) +trialmatchai e2e --input patient.txt # ingest + match one patient +# -> results//ranked_trials.json +``` + +## One pipeline, maximally modular + +Under the hood everything is a slice of a single, ordered pipeline of idempotent +stages. Run the whole thing, or any subset: + +```bash +trialmatchai pipeline # run every stage (skipping what's done) +trialmatchai pipeline --only match # just (re)match +trialmatchai pipeline --to index # the build half +trialmatchai pipeline --skip expand # ablation: no query expansion +trialmatchai pipeline --force match # redo a stage even if done +``` + +See **[Pipeline & CLI](pipeline.md)** for the stage list and flag scheme, +**[Architecture](architecture.md)** for how it fits together, and the +**[API reference](api.md)** for the Python API. + +## Cite + +> Abdallah, M. *et al.* TrialMatchAI: an end-to-end AI-powered clinical trial +> recommendation system to streamline patient-to-trial matching. *Nature +> Communications* **17**, 4472 (2026). +> diff --git a/docs/interoperability.md b/docs/interoperability.md new file mode 100644 index 00000000..cf952bad --- /dev/null +++ b/docs/interoperability.md @@ -0,0 +1,105 @@ +# Patient Interoperability + +TrialMatchAI uses a canonical `PatientProfile` for patient data. Source-specific +importers preserve raw evidence and provenance, then exporters render the profile +for matching, LLM context, and optional standards output. + +## Supported v1 Inputs + +- Free text notes: `.txt` and `.md` files. +- GA4GH Phenopacket JSON. +- HL7 FHIR R4 Bundle JSON, individual FHIR resource JSON, and NDJSON. +- OMOP CDM extract folders with CSV or Parquet tables. + +The first import milestone intentionally does not implement C-CDA, HL7 v2, +DICOMweb, or CDISC adapters. Those formats should be added as importers on top of +the same `PatientProfile` model, not as new runtime data models. + +## Canonical Profile + +Each imported patient is written to `data/patients/profiles/.json`. +The profile contains: + +- demographics +- conditions +- phenotypes +- observations, labs, and vitals +- medications +- procedures +- diagnostic reports +- genomic findings +- cancer profile fields +- family history +- notes +- source documents +- provenance and unsupported source elements + +Every clinical fact carries source format, source path, source resource or table, +original code, normalized code candidates, evidence text and offsets when +available, confidence, negation, temporality, and mapping status. + +## Narrative Generation + +Narrative rendering is deliberately separate from import. Importers create +structured facts. `trialmatchai.interop.narrative` turns those facts into +deterministic sentences for retrieval and LLM context. This keeps source parsing, +normalization, and prompt context generation independently testable. + +The matching exporter writes `data/patients/summaries/.json` with the +runtime summary fields: + +- `main_conditions` +- `other_conditions` +- `patient_narrative` +- `age` +- `gender` +- `provenance` + +`trialmatchai run` consumes canonical profiles from `patient_inputs.profile_dir`. +Import source files explicitly with `trialmatchai import-patient` before running +matching. + +## Commands + +Import a free text note: + +```bash +uv run trialmatchai import-patient \ + --input data/patients/raw/patient-1.txt \ + --format text +``` + +Import a Phenopacket: + +```bash +uv run trialmatchai import-patient \ + --input data/patients/raw/patient-1.phenopacket.json +``` + +Import a FHIR Bundle: + +```bash +uv run trialmatchai import-patient \ + --input data/patients/raw/patient-1.fhir.json +``` + +Import an OMOP extract folder: + +```bash +uv run trialmatchai import-patient \ + --input data/patients/omop_extract \ + --format omop +``` + +Then run matching: + +```bash +uv run trialmatchai run +``` + +## Conversion Limits + +FHIR and Phenopacket exports are best-effort views of `PatientProfile`. +Unsupported or lossy fields remain in the profile and are reported instead of +being silently dropped. OMOP support is file-based for v1; live database +connectors are out of scope. diff --git a/docs/pipeline.md b/docs/pipeline.md new file mode 100644 index 00000000..9e671d64 --- /dev/null +++ b/docs/pipeline.md @@ -0,0 +1,85 @@ +# Pipeline & CLI + +TrialMatchAI is **one end-to-end pipeline** built from an ordered registry of +**idempotent stages**. Every command is a *slice* of this pipeline. Because each +stage detects and skips work that is already done, a run "just works" from any +starting state — finished stages are cheap no-ops, unfinished ones run. + +## The stages + +| # | Stage | What it does | Idempotency check | +|---|-------|--------------|-------------------| +| 1 | `prepare` | embed + entity-annotate the trial corpus | per-trial prepared file | +| 2 | `concepts` | build the entity-linking concept store | concept table present | +| 3 | `index` | build the LanceDB search tables | both tables present | +| 4 | `ingest` | import patient inputs into canonical profiles | per-patient profile | +| 5 | `expand` | CoT query expansion of patient summaries | `query_expanded` marker | +| 6 | `match` | retrieval + reranking + CoT eligibility + ranking | per-patient `ranked_trials.json` | +| 7 | `eval` | score results against qrels (benchmark runs) | benchmark-only | + +## The single command + +```bash +trialmatchai pipeline [selection] [options] +``` + +**Selection — run any subset** (the unit of modularity is the stage): + +| Flag | Meaning | Example | +|------|---------|---------| +| *(none)* | run every stage, skipping what's done | `trialmatchai pipeline` | +| `--only` | run exactly these stages | `--only match,eval` | +| `--from` / `--to` | run a contiguous slice | `--from index --to match` | +| `--skip` | omit stages (great for ablation) | `--skip expand` | +| `--force` | redo stages even if done (`all` = everything) | `--force match` | + +**Options:** `--input` (repeatable patient files/dirs), `--format`, +`--trials-json-folder`, `--processed-trials-folder`, `--processed-criteria-folder`, +`--concepts` / `--concepts-csv` / `--synonym-csv`, `--config`. + +```bash +trialmatchai pipeline --only prepare,index # build the search index +trialmatchai pipeline --input patient.fhir.json # ingest + match one patient +trialmatchai pipeline --skip concepts,expand # leaner run for an ablation +trialmatchai pipeline --force all # rebuild everything from scratch +``` + +## Ablation + +Stage flags double as ablation knobs — toggle a component and compare: + +```bash +trialmatchai pipeline --skip expand # matching without LLM query expansion +trialmatchai pipeline --skip concepts # without entity-concept linking +``` + +Component backends (reranker, CoT, search mode `bm25`/`vector`/`hybrid`) are set in +the config; see [Architecture](architecture.md). + +## Presets (the same pipeline, named) + +These are thin wrappers over the pipeline that add their own setup: + +| Command | Equivalent slice | Adds | +|---------|------------------|------| +| `trialmatchai build` | `--to index` | build manifest; bootstrap-aware prepare | +| `trialmatchai e2e` | `--from index --to match` | patient ingestion convenience | +| `trialmatchai trec` | `--from index --to eval` (per track) | official topics + qrels + corpus restriction | +| `trialmatchai run` | `--only match` | match already-staged profiles | +| `trialmatchai index` | `--only prepare,index` | — | + +Every command is idempotent and resumable: re-running continues from the last +completed work. + +## Python API + +```python +from trialmatchai.config.config_loader import load_config +from trialmatchai.pipeline import StageContext, run_pipeline + +ctx = StageContext(config=load_config(), inputs=["patient.txt"]) +run_pipeline(ctx, from_stage="index", to_stage="match") +``` + +See the [API reference](api.md) for `StageContext`, `Stage`, `select_stages`, and +`run_pipeline`. diff --git a/docs/registry-updater.md b/docs/registry-updater.md new file mode 100644 index 00000000..45cd1025 --- /dev/null +++ b/docs/registry-updater.md @@ -0,0 +1,89 @@ +# Registry Updater + +`trialmatchai update-registry` updates the local LanceDB-backed trial registry from ClinicalTrials.gov v2. It is command-based and safe to run from cron, systemd timers, or GitHub Actions. + +## Basic Usage + +```bash +uv run trialmatchai update-registry --max-studies 500 +``` + +When no keyword is provided, TrialMatchAI uses broad default keyword queries covering oncology, cardiology, neurology, rare disease, immunology, infectious disease, metabolic disease, hematology, pediatrics, and precision medicine. + +Use explicit keywords: + +```bash +uv run trialmatchai update-registry \ + --keyword "lung cancer" \ + --keyword "EGFR" \ + --since 2026-06-01 \ + --max-studies 250 +``` + +Use a keyword file: + +```bash +uv run trialmatchai update-registry --keywords-file data/registry/keywords.txt +``` + +Dry-run: + +```bash +uv run trialmatchai update-registry --dry-run --max-studies 25 +``` + +Dry-runs do not write raw JSON, normalized trial JSON, manifests, reports, or LanceDB tables unless an explicit `--report-path` is provided. + +## Idempotency + +Each fetched source record is hashed after canonical JSON serialization. If the latest manifest entry for an NCT ID has the same source hash, the updater skips preparation and indexing. + +Changed studies are written and then upserted: + +- Trial rows are replaced by `nct_id`. +- Criteria rows are replaced by `nct_id`. +- Failures are recorded per study and do not stop the run unless the failure rate exceeds `TRIALMATCHAI_REGISTRY_FAILURE_THRESHOLD`. + +## Cron + +Run daily at 02:30: + +```cron +30 2 * * * cd /opt/TrialMatchAI && /usr/local/bin/uv run trialmatchai update-registry --max-studies 1000 >> logs/registry-update.log 2>&1 +``` + +## systemd + +Service: + +```ini +[Unit] +Description=TrialMatchAI registry update + +[Service] +Type=oneshot +WorkingDirectory=/opt/TrialMatchAI +ExecStart=/usr/local/bin/uv run trialmatchai update-registry --max-studies 1000 +``` + +Timer: + +```ini +[Unit] +Description=Daily TrialMatchAI registry update + +[Timer] +OnCalendar=*-*-* 02:30:00 +Persistent=true + +[Install] +WantedBy=timers.target +``` + +## Healthcheck + +```bash +uv run trialmatchai healthcheck --registry --require-tables +``` + +Use `--require-tables` after the first successful update or indexing run. diff --git a/docs/release.md b/docs/release.md new file mode 100644 index 00000000..b88da6c4 --- /dev/null +++ b/docs/release.md @@ -0,0 +1,40 @@ +# Release Checklist + +TrialMatchAI uses a `src/` package layout and exposes the public package name `trialmatchai`. + +## Local Checks + +```bash +uv lock --check +uv run ruff check . +uv run pytest +uv build +uv run pre-commit run --all-files +uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 +``` + +Smoke test console commands: + +```bash +uv run trialmatchai --help +uv run trialmatchai healthcheck --help +uv run trialmatchai bootstrap-data --help +uv run trialmatchai build --help +uv run trialmatchai index --help +uv run trialmatchai build-concepts --help +uv run trialmatchai update-registry --help +uv run trialmatchai import-patient --help +uv run trialmatchai run --help +uv run trialmatchai e2e --help +uv run trialmatchai trec --help +uv run trialmatchai finetune --help +``` + +Wheel install smoke: + +```bash +uv build +python -m venv /tmp/trialmatchai-wheel-smoke +/tmp/trialmatchai-wheel-smoke/bin/pip install dist/trialmatchai-*.whl +/tmp/trialmatchai-wheel-smoke/bin/python -c "import trialmatchai; print(trialmatchai.__version__)" +``` diff --git a/elasticsearch/.env b/elasticsearch/.env deleted file mode 100644 index e9dc0ea8..00000000 --- a/elasticsearch/.env +++ /dev/null @@ -1,29 +0,0 @@ -# Password for the 'elastic' user (at least 6 characters) -ELASTIC_PASSWORD="QQ7wWoB_WnKe*L*X9tAW" - -# Password for the 'kibana_system' user (at least 6 characters) -KIBANA_PASSWORD="QQ7wWoB_WnKe*L*X9tAW" - -# Version of Elastic products -STACK_VERSION=8.13.4 - -# Set the cluster name -CLUSTER_NAME=docker-cluster - -# Set to 'basic' or 'trial' to automatically start the 30-day trial -LICENSE=basic -#LICENSE=trial - -# Port to expose Elasticsearch HTTP API to the host -ES_PORT=9200 -#ES_PORT=127.0.0.1:9200 - -# Port to expose Kibana to the host -KIBANA_PORT=5601 -#KIBANA_PORT=80 - -# Increase or decrease based on the available host memory (in bytes) -MEM_LIMIT=1073741824 - -# Project namespace (defaults to the current folder name if not set) -#COMPOSE_PROJECT_NAME=trialmatchai diff --git a/elasticsearch/apptainer-run-es.sh b/elasticsearch/apptainer-run-es.sh deleted file mode 100644 index 3a6d9a55..00000000 --- a/elasticsearch/apptainer-run-es.sh +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -#=== LOAD .env ===# -if [ ! -f .env ]; then - echo "[ERROR] .env file not found." - exit 1 -fi - -# shellcheck disable=SC1091 -source .env - -#=== CONFIGURATION FROM ENV ===# -STACK_VERSION="${STACK_VERSION:-8.13.4}" -CLUSTER_NAME="${CLUSTER_NAME:-apptainer-cluster}" -ES_IMAGE="docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}" - -BASE_DIR="$(pwd)" -CERTS_DIR="$BASE_DIR/certs" -CONFIG_DIR="$BASE_DIR/config" -DATA_DIR="$BASE_DIR/data" -LOGS_DIR="$BASE_DIR/logs" -SIF_DIR="$BASE_DIR/sif" -TMP_CONFIG="$BASE_DIR/tmp-config" - -ES_PORT1="${ES_PORT:-9200}" -ES_PORT2=$((ES_PORT1 + 1)) -ES_PORT3=$((ES_PORT1 + 2)) - -ELASTIC_PASSWORD="${ELASTIC_PASSWORD:?ELASTIC_PASSWORD not set in .env}" - -#=== PREPARE FOLDERS ===# -mkdir -p "$CONFIG_DIR/es01" "$CONFIG_DIR/es02" "$CONFIG_DIR/es03" -mkdir -p "$DATA_DIR/es01" "$DATA_DIR/es02" "$DATA_DIR/es03" -mkdir -p "$LOGS_DIR" "$SIF_DIR" "$TMP_CONFIG" - -#=== BUILD SIF IMAGE IF NEEDED ===# -if [ ! -f "$SIF_DIR/es.sif" ]; then - echo "[INFO] Building Elasticsearch SIF..." - apptainer build "$SIF_DIR/es.sif" "docker://$ES_IMAGE" -fi - -#=== CLEAN CONFIG EXTRACTION DIR ===# -rm -rf "$TMP_CONFIG"/* - -#=== EXTRACT DEFAULT CONFIG FILES ===# -echo "[INFO] Extracting default Elasticsearch config files..." -apptainer exec --bind "$TMP_CONFIG:/mnt/tmp" "$SIF_DIR/es.sif" \ - bash -c 'cp -r /usr/share/elasticsearch/config/* /mnt/tmp/' - -#=== PREPARE NODE CONFIGS ===# -for NODE in es01 es02 es03; do - cp -r "$TMP_CONFIG"/* "$CONFIG_DIR/$NODE/" - cp "$CERTS_DIR/ca.crt" "$CONFIG_DIR/$NODE/" - cp "$CERTS_DIR/$NODE/$NODE.crt" "$CONFIG_DIR/$NODE/" - cp "$CERTS_DIR/$NODE/$NODE.key" "$CONFIG_DIR/$NODE/" - - cat > "$CONFIG_DIR/$NODE/elasticsearch.yml" < "$LOGS_DIR/$NODE.log" 2>&1 & -} - -launch_node es01 $ES_PORT1 9300 -sleep 10 -launch_node es02 $ES_PORT2 9301 -sleep 10 -launch_node es03 $ES_PORT3 9302 -sleep 10 - -#=== WAIT FOR ES01 TO BE READY ===# -echo "[INFO] Waiting for es01 to be ready..." -until curl -s --cacert "$CERTS_DIR/ca.crt" -u elastic:"$ELASTIC_PASSWORD" \ - https://localhost:$ES_PORT1/_cluster/health?pretty | grep -q '"status"'; do - echo -n "." - sleep 5 -done -echo -e "\n[INFO] Elasticsearch cluster is up." - -echo "[INFO] Access Elasticsearch at: https://localhost:$ES_PORT1" diff --git a/elasticsearch/certs/ca.crt b/elasticsearch/certs/ca.crt deleted file mode 100755 index d8c6ffd4..00000000 --- a/elasticsearch/certs/ca.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIVAO2BMtuZgADcrNJORc/UB2rj/y6JMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI0MDUyNzE5NTg0OVoXDTI3MDUyNzE5NTg0OVowNDEyMDAG -A1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5lcmF0ZWQgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCat4tgRPHYWsZrygCUNASc -cc4wGONcNzRkn7LRbF+jWVcx3G8SLK1uY5w0jdC+mioRe8vIVR1amng1KtIoADxa -aV43rCNSTfPO6DsDPu9AGdoxlHrUjkpf5mPcy1hhRpVfHi01ytqSip/deA+2jShq -2naMug4o6YoqdPdiVvOrzMvuVdGeGNNrlihTHmENtI6vZp1Uq/pxZYqHhqkzlCDr -uZvhe6bLpvbbyGVpx6dJA51MuxZ6m6yEtz1fNz2fgh+2tl91hXp7WaeMDpGHaezq -cCbiHSMG9vXhU8fsgTTB2NONiGiH/635VZcTbbS9dtDeUe4Y/vEY0uURU2dyBF3L -AgMBAAGjUzBRMB0GA1UdDgQWBBRSHBPSZApefVLWs8FZB/ROLMos9DAfBgNVHSME -GDAWgBRSHBPSZApefVLWs8FZB/ROLMos9DAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBCwUAA4IBAQB2Hfsz3RT9Y+th7haS4C6yI4ZnwirEehexM9RjjIWlCS/i -c3IZ1dwJlR1pI6jeFjhF6iEnWY24cxH2GvZrynIrwACSJBibzVuMa/4+7pcF2xQS -L9H+18StNK2S51a1xxzfhlQpTizea05rnLpkhJP52PfUaoWD42kPz8t8ITafD5ay -IzKiz+aL1+elT+Tlmcmi2k0s+sJahLrcI62jUsmUB474fsv/00DWEBaSRKVXCy4D -pUv2PKV+EElHiM65UlMxZ7q5KBWsCvotILrIeP7rJZE3uloe6UTeZ0CSTDiQNCOb -jonBnKm6Zw7z2Io9Jl0yJJg0kl8tc8OFsV85p9RO ------END CERTIFICATE----- diff --git a/elasticsearch/certs/ca.zip b/elasticsearch/certs/ca.zip deleted file mode 100755 index 7e0b64ed..00000000 Binary files a/elasticsearch/certs/ca.zip and /dev/null differ diff --git a/elasticsearch/certs/ca/ca.crt b/elasticsearch/certs/ca/ca.crt deleted file mode 100755 index d8c6ffd4..00000000 --- a/elasticsearch/certs/ca/ca.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIVAO2BMtuZgADcrNJORc/UB2rj/y6JMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI0MDUyNzE5NTg0OVoXDTI3MDUyNzE5NTg0OVowNDEyMDAG -A1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5lcmF0ZWQgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCat4tgRPHYWsZrygCUNASc -cc4wGONcNzRkn7LRbF+jWVcx3G8SLK1uY5w0jdC+mioRe8vIVR1amng1KtIoADxa -aV43rCNSTfPO6DsDPu9AGdoxlHrUjkpf5mPcy1hhRpVfHi01ytqSip/deA+2jShq -2naMug4o6YoqdPdiVvOrzMvuVdGeGNNrlihTHmENtI6vZp1Uq/pxZYqHhqkzlCDr -uZvhe6bLpvbbyGVpx6dJA51MuxZ6m6yEtz1fNz2fgh+2tl91hXp7WaeMDpGHaezq -cCbiHSMG9vXhU8fsgTTB2NONiGiH/635VZcTbbS9dtDeUe4Y/vEY0uURU2dyBF3L -AgMBAAGjUzBRMB0GA1UdDgQWBBRSHBPSZApefVLWs8FZB/ROLMos9DAfBgNVHSME -GDAWgBRSHBPSZApefVLWs8FZB/ROLMos9DAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBCwUAA4IBAQB2Hfsz3RT9Y+th7haS4C6yI4ZnwirEehexM9RjjIWlCS/i -c3IZ1dwJlR1pI6jeFjhF6iEnWY24cxH2GvZrynIrwACSJBibzVuMa/4+7pcF2xQS -L9H+18StNK2S51a1xxzfhlQpTizea05rnLpkhJP52PfUaoWD42kPz8t8ITafD5ay -IzKiz+aL1+elT+Tlmcmi2k0s+sJahLrcI62jUsmUB474fsv/00DWEBaSRKVXCy4D -pUv2PKV+EElHiM65UlMxZ7q5KBWsCvotILrIeP7rJZE3uloe6UTeZ0CSTDiQNCOb -jonBnKm6Zw7z2Io9Jl0yJJg0kl8tc8OFsV85p9RO ------END CERTIFICATE----- diff --git a/elasticsearch/certs/ca/ca.key b/elasticsearch/certs/ca/ca.key deleted file mode 100755 index 48dca6bf..00000000 --- a/elasticsearch/certs/ca/ca.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAmreLYETx2FrGa8oAlDQEnHHOMBjjXDc0ZJ+y0Wxfo1lXMdxv -EiytbmOcNI3QvpoqEXvLyFUdWpp4NSrSKAA8WmleN6wjUk3zzug7Az7vQBnaMZR6 -1I5KX+Zj3MtYYUaVXx4tNcrakoqf3XgPto0oatp2jLoOKOmKKnT3Ylbzq8zL7lXR -nhjTa5YoUx5hDbSOr2adVKv6cWWKh4apM5Qg67mb4Xumy6b228hlacenSQOdTLsW -epushLc9Xzc9n4IftrZfdYV6e1mnjA6Rh2ns6nAm4h0jBvb14VPH7IE0wdjTjYho -h/+t+VWXE220vXbQ3lHuGP7xGNLlEVNncgRdywIDAQABAoIBADTHPSv7iPbRzJNT -pwvnjNUje39r1g+Mo3paAiGv0xZBsV2IgXlVNVqNb2l8IUQMCiLJtNQjuO5B+JTG -hUdxASWkgSgDuE7o2a1xCkSKsQoQZ573NEmTOqrpSJK26XDRp735aNnLV/GaiXt+ -6/lNwQZmfP93rsHlHSVrnkJ1QA2QOJXwLiBl6FYDtSX/FMlIvDdEFQJw0ueizUpq -jdjyI0yBDhCBtYbiiPaqqn/JdDLmJh6g5fOQrhZ7ugV28Ko8xiHN8n/X4Dgfil8m -qOizYuwEfTuoTf5b0pB3c9MKiug2URinVIvlSSTmYU5cmMDwUI2OfKABwKxgrJ6g -QcgdJUUCgYEAtxhP7R0CkXTziriw4WH5asqPeQsDaokfo2AGv+OgX2TzR9rYofWe -gA+yv/JtV8N0We7lWEU3kwjMrjqPo+FVnMkJB9Ns+EpArYt6VI5jXTc9wv9+Ubg3 -bmqMZy4vK/84bukTJmP1kEkBC6uKxTa6b5agZ91ylmzp1EihgtoblRcCgYEA2FKJ -O41p0Tg7DXskOMTalYmV4tuIPnbCQnL3zdYKkxpvP/DEsgFs2WuznTR7CA8UcQpn -dZf7INPvXNrSAFzsQEFUgOMaeL6whzBD/X8uDzqO0ACJAgAT1ixsPNKD9dipOsjJ -XL0JIu/WDnr+RewY/oYmxGBP/rJ3vh90D0QtFW0CgYA7HEhBfsojd6Rgtru0J9NE -HN0w8NNLg7WJIylKrgxKf+bi3c5ui0N+iJLm0TdnzBw2JKA6XS5R89dQsGtLNyZS -lbyqoCFgD2jOHmeCAO4nW/w+hgmcDGMo7JEjho+IHr9zXx/llwPibw89W0ZT4RVT -jUeAAMhLtCHRfRlXi164RQKBgQCxXrt3QPRKwDhrTVTd10sC4dUsNaT40pdltK7K -732sMDiXzOr6qYB+pXiYpbdbXEH+jfFW0k7vE9dn42PdOFPeO7L2G0BRUMmdj02w -RN+XTQRcOJQeN8IMElCNbm8U3ZmkwY2ZpMYhB1YUeXSUEIpN5+FRk0cEJ4FXOqMH -AXeV4QKBgQCYKWjq4XRLege8h+Cvyi55Kaj12nDc90Oorywx75GrxixEWRbye4aF -qCZg0D+C474MG2C/n58arGuT7jwgX7LDvZVDvHjNcAsLP8JmrvXgUMMHximjdVmP -XokfEI8o2GjsCf0pbgp51jSDV07yBjRh3kxP70J20MC3jLpk+uWt4g== ------END RSA PRIVATE KEY----- diff --git a/elasticsearch/certs/certs.zip b/elasticsearch/certs/certs.zip deleted file mode 100755 index 853422ef..00000000 Binary files a/elasticsearch/certs/certs.zip and /dev/null differ diff --git a/elasticsearch/certs/es01/ca.crt b/elasticsearch/certs/es01/ca.crt deleted file mode 100644 index e69de29b..00000000 diff --git a/elasticsearch/certs/es01/es01.crt b/elasticsearch/certs/es01/es01.crt deleted file mode 100755 index 76b8cdf2..00000000 --- a/elasticsearch/certs/es01/es01.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDQDCCAiigAwIBAgIUKzkAgntIW7y5IHFE2MoxxHoLvGkwDQYJKoZIhvcNAQEL -BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l -cmF0ZWQgQ0EwHhcNMjQwNTI3MTk1ODUwWhcNMjcwNTI3MTk1ODUwWjAPMQ0wCwYD -VQQDEwRlczAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmpXRQ+TH -n+VpNZwD+7+9R7IOhisKjCEGKMqSARr5wQPlulxLDlHoO7pRLw6JcEXmLn4tx+Qu -Lkkm9pFAADYnIcCljzRkFHADKuo+P7BG6AZ+6l1UVHwya6iUaERda3+VClTHPzRo -Pn8TRdX78+cY7dAzme0noosw8WCgpL2HgiYciFiwle80OKaeiVxvRNJ+6n36a/q4 -lgLx9wQoJvox/2OCP3318UY1SgA2AO9kFk0zDTvJji9ESSz6d+6LCB73Bk2cKWx6 -q2pVoSTNPhkC5mD9E/zhuXSACfY3H85GZksJ4jztdF1UcsOsrjYsMwwxHH4BwVKa -k97ERJmICSLV/wIDAQABo28wbTAdBgNVHQ4EFgQUuAQmumKYnqzgVBFsMKNd3Wk5 -bPgwHwYDVR0jBBgwFoAUUhwT0mQKXn1S1rPBWQf0TizKLPQwIAYDVR0RBBkwF4IE -ZXMwMYcEfwAAAYIJbG9jYWxob3N0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD -ggEBAHwCJLqUnUIUV21HxVcEThmOWnxFZzA7VjahpIEb/RaK84Uc/8Cxv7vlVW1T -2mgOFQWpi98lew5K7r9GGuA509TaWuwaWAoqdhJL1T2lNa9eA8XtfRZweedqdw5P -1lCwR4vpJr5vVVEZwJTjKCRg5429owjoqEqPHSYbftVQSC8FlKIjnzNO9b5dHmfJ -y9DV5jYu5zfHZHPHXoksmn7MzLpfE6jA2euI7FSQfzPbkfoaBWBU/ZyvQb/taCyY -LH7JNtTf4Tm+yQe8g1m3hhFOraoQG0W09Ub+wpph50Q12sbHddX0e+ekhcu3+8HM -H4Y2SB9Pv5fsKvXtxix02Xu2m0s= ------END CERTIFICATE----- diff --git a/elasticsearch/certs/es01/es01.key b/elasticsearch/certs/es01/es01.key deleted file mode 100755 index c2c59819..00000000 --- a/elasticsearch/certs/es01/es01.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEogIBAAKCAQEAmpXRQ+THn+VpNZwD+7+9R7IOhisKjCEGKMqSARr5wQPlulxL -DlHoO7pRLw6JcEXmLn4tx+QuLkkm9pFAADYnIcCljzRkFHADKuo+P7BG6AZ+6l1U -VHwya6iUaERda3+VClTHPzRoPn8TRdX78+cY7dAzme0noosw8WCgpL2HgiYciFiw -le80OKaeiVxvRNJ+6n36a/q4lgLx9wQoJvox/2OCP3318UY1SgA2AO9kFk0zDTvJ -ji9ESSz6d+6LCB73Bk2cKWx6q2pVoSTNPhkC5mD9E/zhuXSACfY3H85GZksJ4jzt -dF1UcsOsrjYsMwwxHH4BwVKak97ERJmICSLV/wIDAQABAoIBABDs2Vo1KNQtcoz/ -lYIRVsCMUsHG4aNBFGMP9tdvJCxJaHQ0mbUqK6KqfiwIS+0CgjbR8uJBbfr8YGs7 -sQW06CjuZlIdGt4P+5DNz936R3EtEOVJLawIYx7deM5HufDEqcVVTfFyI/2/vRT2 -3lywj06ubo/qYt4NnmC3Qy92XulVZknvjaolGhqVlYGbHQITSI47KNErFX0KiL77 -dYkO3dY75XIc4NsECk5UyFRyu1Mg6dkG+a8HahPVmX7ctq+bytQ3r9hpwXrY1MZV -RXtEW81kwB0yJV3GmXJRrqKZR+vvpqMRIQhmLZgr0XkKIshBuBneAo4cUX7MVgAX -JcdHsMUCgYEA0P7NgUL4xg9Xtpygf5DWldcCO/cy6yoOkXEJ6d9xOhQny24qi0MN -uOuyCCF4UQnhdEYcR9aY6YOwviQluq6roQT7g1Jex20F2iaaLVNdxaGi5s9nmzgp -CVfBdLK798GCu/yrRwhy1EW6kaQdIJ9D0K1Fkm8SFOAuQY0gKgbK6BsCgYEAvVpH -AKtcUJiqyenkvyhnxmpZXhS93F2qSJnzBJ/2wAuQ7BCxw/vW7vw1XDDy+IKFXLQ4 -eRnbIs2hk+FBAgAQDJl26dUELaE+BKsmU1XACRBrnpLZXNd0ssLc1dMFewkxURmT -krWCku32OjVVnPuIALE4Bv9hBSvotYFmf7DXL+0CgYBU05bFqFEg0olfbSMXo8n0 -91fIzwSzvlY7Yg4MBs0GLbgZMZXDAGxJaiDQfAVBnykK8In5/ngCD5llE3bc1piC -umr7Witt9iox6Qka7INa+8gKtpPuxFSjniK/Iux4GurdMiiypBM3ZTXcdyf7XalA -wZNDZCGKp5MeuBEd/bPNkQKBgAlVzRBUYm26yRjBRjzCYjNfBN7liOK3X3DK3jdJ -J6IaL9/jhtARt2v61SqhYykrTiXe4LXft3UEzEV9InZVyHTGkB1BGj6hp2wVgAM1 -xAzuWU/tD3hLSv6RKtAD4k5Jirvj1emytyhFQRFnlbvyjqbyFcAKkR7vJj7kjUgY -UNOVAoGACkTgg+e0Cxu/rzPqJTcwB7gXikBK9gXegi9fXv2Q8q860Y37MXkTCStF -elsIix7jrUokjXWG8Gc44GfJUCv+WLZCeqaL3oS+ZznfbESfiLwEecu/6jsb3SEk -Swx3Bb5X8q0/S0kD3ShMVPFnFIO37P37efMFaYJ2Fs1C3FpWfwM= ------END RSA PRIVATE KEY----- diff --git a/elasticsearch/certs/es02/es02.crt b/elasticsearch/certs/es02/es02.crt deleted file mode 100755 index 44db9c41..00000000 --- a/elasticsearch/certs/es02/es02.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDQDCCAiigAwIBAgIUTk8VxELi8BcE+Q1QJDjl1ijZS0gwDQYJKoZIhvcNAQEL -BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l -cmF0ZWQgQ0EwHhcNMjQwNTI3MTk1ODUwWhcNMjcwNTI3MTk1ODUwWjAPMQ0wCwYD -VQQDEwRlczAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyaaCYcE+ -eDk4++1N2j0edhOQeJtRlVAY4okWx/GKZ8bUrFgWeXDmYnty8n2BjOsYy5AikELe -ZhsA6xWqV7/l8Tmhfv27e1qsxB1zNBurFQ4B2/O7YXHRXs2uKJqKb2Sj1+2GM6xQ -xZqZQS39MX2rKmENhud8kyDZUpQfqlUNE+QgRjMKMvB+7U9lrTfP/XUW2QosY+dz -Uub1K6pWf/avccf3WJd6R8aTYv2KDQjFsR6sib/RWHXTvtIDQlynQW4SFxSbhplX -DNN8nkaHa1lygAIHcKu77KulFrbTsJZ+hJIMjKn4HYsMuCH2KYDK+1cZToJ1MDvo -A9Xa2yWjbXWaiwIDAQABo28wbTAdBgNVHQ4EFgQUFSfOsv8EnRbLQI9pMbKNrRh0 -wM8wHwYDVR0jBBgwFoAUUhwT0mQKXn1S1rPBWQf0TizKLPQwIAYDVR0RBBkwF4cE -fwAAAYIEZXMwMoIJbG9jYWxob3N0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD -ggEBAAGEWLu8MtZiav5wxvCb0iu5zUOPDSRibK/wTLtLhOeu4LBqyB9MYuT9wRr3 -XKsKuPV6NHSzUdkAK5wTqXsX3b5FXD6+B7PUMB31g62YnauDdTydszR1NxMp9LB+ -8YKb71JBy9iuBNk4OkVhmi9Q3fsQxchAWCtjI8aEa08PYq4XKAHvS1Hp2c4xP57+ -ZBxZS2ASFZo9EJ6BNwErF2OdcjIOQEU4YYebNARwdoY8taFNTBMQfbJRVRRdRCw5 -+n0fGB77j1nEmwLJSYMVkL+b44XUu7OIOiv2gRmvE2ZrQgIcj0hEYKtQpXFfLB+6 -OVv7xEYk2yWjJNBTiOKboVTb1U8= ------END CERTIFICATE----- diff --git a/elasticsearch/certs/es02/es02.key b/elasticsearch/certs/es02/es02.key deleted file mode 100755 index 14209814..00000000 --- a/elasticsearch/certs/es02/es02.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAyaaCYcE+eDk4++1N2j0edhOQeJtRlVAY4okWx/GKZ8bUrFgW -eXDmYnty8n2BjOsYy5AikELeZhsA6xWqV7/l8Tmhfv27e1qsxB1zNBurFQ4B2/O7 -YXHRXs2uKJqKb2Sj1+2GM6xQxZqZQS39MX2rKmENhud8kyDZUpQfqlUNE+QgRjMK -MvB+7U9lrTfP/XUW2QosY+dzUub1K6pWf/avccf3WJd6R8aTYv2KDQjFsR6sib/R -WHXTvtIDQlynQW4SFxSbhplXDNN8nkaHa1lygAIHcKu77KulFrbTsJZ+hJIMjKn4 -HYsMuCH2KYDK+1cZToJ1MDvoA9Xa2yWjbXWaiwIDAQABAoIBABGFNZ6FD0ab1i8m -uFUbaq+gqzScw3ML3Ar8FUN3DEBQXr8WAjyNSinJXGc5mg133xYku6lkHfWqJ/jE -+kwYgMPmRCQIALJK4mhBv3Y0vIxzmfFrP7R2PVZAManBJQELsflQtRB9Ssv4eZNX -tGrd5obOmuxwkCV/vPzMoORdnRQas5a0i0ZtlCjv8jirX/t1VOLlsvoaIGs6TbTm -op3s7zi9ETvnCnZ6VKzsSugwUGCRnFqsIgUt8PUpKPXfgvzdRc5/j1NNWocfwLlH -lTSipk4n64KPevvG/deWw6AnnYLSosIQM4MCC9JrgZ1DhacGs23L7WWbz/1JC+oT -AgEP9FkCgYEAz3pj3PdibwhM/VWuOxwWWR4YS8UJZx1lcFPXzgE4t7V+/YSKuUtL -ro2plGUG1Ji5SgsS0exH/mzaF8OhHX1Jt+eGEVJyzdfJN8S1lomVtOoMyjkyBgxM -I4bajIB1Sz9aipKwVAfise9f6Ga3E0/ET9iq6i0/R1wK5EwgdOCxkBMCgYEA+M84 -W4S5P4EyfaeLOw+puyZcgG0ftVVqlAHdkdQlQLXCt3ijI008A0f5GVqf2tTLVrAj -Ub39aDOrM1wA6FWCqsa8LEbtdD4d1xNDi8DegDvjjjmU1z8ULjxSu8iSikhOCw2G -vyXHsr04DYBg4OURD9Pg8hHGtANZSNtc6CwISqkCgYBogbqZi9Z+HQ1Csgy/42by -XrFYQRh6Yxk8Wk8iigT6rCYaJtAFg4LMmrincbfeEEuMm0VQjha5djTosXaPNxOR -2cHzKbeALchCGghpmkXZSedFWUf0Oe+EGaIuEWqDi5bcpATDXvF2NR/3HP3scUpt -+bIloML1+8vUsO/MT33BFwKBgQCiXR+K4Wa94UKgqwf5p7P8VAFDMXLis3XUVg9Q -DZ+txa7maYwUCl+iSIJuoCv28qwqytCRlCjcqfMLlftlof+eEAhV4IcuNybj5kdK -2LaZ+fr6IetWN2yk62qV7kJqiNqc7dvDuxTBOCdu8BrIR9NFf9+oOB9x80l9eOD9 -BVb32QKBgAjHylTABCzS+2zOwUQeMpXQnYeNhMvvvYug/mDh+GQQL7zVeSJXlNGS -PkJqE3xEoVPDOPJ+Kr8nl5jS3YGCWcWerYURd9XiX7lHx7LlOeb6LusNIm/mO563 -y2U3WPIDTdy36vnvz3FZKYIionGFYc5hRGI54GfWKbCdr9ug2Xaw ------END RSA PRIVATE KEY----- diff --git a/elasticsearch/certs/es03/es03.crt b/elasticsearch/certs/es03/es03.crt deleted file mode 100755 index 7d273002..00000000 --- a/elasticsearch/certs/es03/es03.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgIVAPF8mVPnz7n47MH0IMhGyTp8b8hJMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI0MDUyNzE5NTg1MFoXDTI3MDUyNzE5NTg1MFowDzENMAsG -A1UEAxMEZXMwMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJD8MQOk -+jChQ/ukONKJ5NlmIMvxA30iEF0Dg1raRWu6JktXgl0PcQcqKSbCgQ8V/+jqIsKv -xzURuGH6PNnoeE7B7PSDW5aF8SOh2vIVCcuyqYCTfusv9Pkw0dXb0kkFF7p8wxG7 -xSyQncZxl9qEsEK3sKuR71rHnBF4r7fxuV+QV3ZLzwzJ4xTGFRd7wgrf/N7/iDXC -lrOzslTOj6BxIMQT04Jizm5/Sxcp+9gj89Loxs3Ls3cTNhaWnNl4IDQtaA8LlK2Z -8mC6+UgID3Px0ZfMcp7Qlm8lyX+loFOIFKlBm3RJ/ju566acXM0rrxMCaERxzVh6 -w/RFQ+s9ZEcorrkCAwEAAaNvMG0wHQYDVR0OBBYEFMFV0lcS1xlPM1wnUlztTiKA -2S2WMB8GA1UdIwQYMBaAFFIcE9JkCl59UtazwVkH9E4syiz0MCAGA1UdEQQZMBeH -BH8AAAGCBGVzMDOCCWxvY2FsaG9zdDAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUA -A4IBAQA3jD18KNhrXHJenPB/4FsQhiOgm684fO5mmmEZI14/V0snGIyoXCG4Tvfm -cRmRiOkNLZ79l9O2Feh3defyocED2soPJkjGbGMA6u5CW9B+32yEprfQ/JXOvKKL -zSIXUoa9h22rznuopsq8VQwIV7NFz1ATNllgyyEzKshGpk37Almso3lsX+PFX466 -SUDbNI7f3z8RYUg0uGqjepnJV0v6k5yOWStKmJ9j1uuK0rkKIBUcgOW4Fb2vyqkp -DTCtR8Q6g9+exZV+gezsOXvbf+mrVf48sOOQ0g9YkUTMHoXw/k7pQg/ixWTE6rSm -KhVWEziUuxCqaSOVgEY0qTWgKNP4 ------END CERTIFICATE----- diff --git a/elasticsearch/certs/es03/es03.key b/elasticsearch/certs/es03/es03.key deleted file mode 100755 index ff809b20..00000000 --- a/elasticsearch/certs/es03/es03.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAkPwxA6T6MKFD+6Q40onk2WYgy/EDfSIQXQODWtpFa7omS1eC -XQ9xByopJsKBDxX/6Ooiwq/HNRG4Yfo82eh4TsHs9INbloXxI6Ha8hUJy7KpgJN+ -6y/0+TDR1dvSSQUXunzDEbvFLJCdxnGX2oSwQrewq5HvWsecEXivt/G5X5BXdkvP -DMnjFMYVF3vCCt/83v+INcKWs7OyVM6PoHEgxBPTgmLObn9LFyn72CPz0ujGzcuz -dxM2Fpac2XggNC1oDwuUrZnyYLr5SAgPc/HRl8xyntCWbyXJf6WgU4gUqUGbdEn+ -O7nrppxczSuvEwJoRHHNWHrD9EVD6z1kRyiuuQIDAQABAoIBAAeRot1rLMSCfBIU -WK26aoAO8iyzawM1VrVZtu8fRfssafi08NFQOmOtXR3w5DFCwha0DRcs0LGB41D6 -HK3OPQ701hyjCZJUxmnzIS2ne4Nu0vqAuLd+dsOA5kjL2QaG2t5EH8rlNT3xBCDq -p+AjMoXJISf+eQhm3fbriKuJqwEaFoFs8gFOm7BKSzw4nFdwaBI0hO7QQng9Um8x -g27R+mJAGG+fNFJuDFD6gy2iIN+xkrNP9WGlFmEV4OoCUi1hz5YfxNRs2xCxUA3E -ggzcU0UvmLccHwz6PYK8EzTmsZUJsLRJTyG3WuNuaVTN67oMLYRv7GlGdZ998+HE -7m3KU6ECgYEAurfhPf8ACbMxR49iF62QJUzHM5xu0Qq85z6lWKHiCXWaIcqNv2mI -qnao9a5wBqEsTNNLljDlr99u8stHt+Zx3gAA1F5Pew/3quwOtaFx+zvxqrQKs6pb -cz3q9Ad8sJVthr06SW5W4OvdDGOF52EV+bcITZCetENmk9jvbN6z0ucCgYEAxsgi -enAcripDIT8uxhiEWxEtnsZunOsGWzXKcKJeg7w7cErqHRBb4liPenq3B/6sIp3r -AwPyqRIfVXZNbOpEPwoaF/1bQ9HujHuO0HEMsoeJh12KkBSBuHQXnA/X01Y6Nf0l -ZijizBE/Qc5EkWyxZx+pSTf7RVGf+1DlmKBE3V8CgYBIWUurrA0ltQtZQROvPQ9n -hJKDSxAda926dKm46DEfnTP19/hovMm503SwjcDWsMjrk8vsDFJTjW3+IgpOFbr1 -XGb14v1FH/DFh+ZDNqVlxdpkXJLw/wekZc+OcwA7pArmdJgLL/f1+y6RyFZwS0wq -kGNlOq5kBuHOU/ah5sEi7QKBgQDGiT1mbHM4wJ0rp59f2zzWd+HIowf3UgWXM7Jt -rL4ZdPcowKnzPVOITkt/WPFV2tax/GetK1RB6QfCo9XQ4monTD+jljiBFDvds8qA -BWlZJmYF/TdXkCO/xrON+4TkX0rkgWHJFyzuBIvZfdqeJKFLDiRWLMOaCFxw9eta -9TfSoQKBgEhHjogylvtkkiDIg+ArNhezYCjZ2yVPPsM8Jejh3sFpmjHHLaiw86Np -fRrxp3ealK1DXziRni+USCNM8iM6GFo2I6jBMWTJDTsc6wSyYLu4MlLTXyobZZnc -SwtvyZip2+VL4qEeg9p2c5wxbDBPdxh/8vjW9QxCeAovIr/0lth4 ------END RSA PRIVATE KEY----- diff --git a/elasticsearch/certs/instances.yml b/elasticsearch/certs/instances.yml deleted file mode 100755 index 926d7a15..00000000 --- a/elasticsearch/certs/instances.yml +++ /dev/null @@ -1,19 +0,0 @@ -instances: - - name: es01 - dns: - - es01 - - localhost - ip: - - 127.0.0.1 - - name: es02 - dns: - - es02 - - localhost - ip: - - 127.0.0.1 - - name: es03 - dns: - - es03 - - localhost - ip: - - 127.0.0.1 diff --git a/elasticsearch/config/es01/ca.crt b/elasticsearch/config/es01/ca.crt deleted file mode 100755 index d8c6ffd4..00000000 --- a/elasticsearch/config/es01/ca.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIVAO2BMtuZgADcrNJORc/UB2rj/y6JMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI0MDUyNzE5NTg0OVoXDTI3MDUyNzE5NTg0OVowNDEyMDAG -A1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5lcmF0ZWQgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCat4tgRPHYWsZrygCUNASc -cc4wGONcNzRkn7LRbF+jWVcx3G8SLK1uY5w0jdC+mioRe8vIVR1amng1KtIoADxa -aV43rCNSTfPO6DsDPu9AGdoxlHrUjkpf5mPcy1hhRpVfHi01ytqSip/deA+2jShq -2naMug4o6YoqdPdiVvOrzMvuVdGeGNNrlihTHmENtI6vZp1Uq/pxZYqHhqkzlCDr -uZvhe6bLpvbbyGVpx6dJA51MuxZ6m6yEtz1fNz2fgh+2tl91hXp7WaeMDpGHaezq -cCbiHSMG9vXhU8fsgTTB2NONiGiH/635VZcTbbS9dtDeUe4Y/vEY0uURU2dyBF3L -AgMBAAGjUzBRMB0GA1UdDgQWBBRSHBPSZApefVLWs8FZB/ROLMos9DAfBgNVHSME -GDAWgBRSHBPSZApefVLWs8FZB/ROLMos9DAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBCwUAA4IBAQB2Hfsz3RT9Y+th7haS4C6yI4ZnwirEehexM9RjjIWlCS/i -c3IZ1dwJlR1pI6jeFjhF6iEnWY24cxH2GvZrynIrwACSJBibzVuMa/4+7pcF2xQS -L9H+18StNK2S51a1xxzfhlQpTizea05rnLpkhJP52PfUaoWD42kPz8t8ITafD5ay -IzKiz+aL1+elT+Tlmcmi2k0s+sJahLrcI62jUsmUB474fsv/00DWEBaSRKVXCy4D -pUv2PKV+EElHiM65UlMxZ7q5KBWsCvotILrIeP7rJZE3uloe6UTeZ0CSTDiQNCOb -jonBnKm6Zw7z2Io9Jl0yJJg0kl8tc8OFsV85p9RO ------END CERTIFICATE----- diff --git a/elasticsearch/config/es01/elasticsearch-plugins.example.yml b/elasticsearch/config/es01/elasticsearch-plugins.example.yml deleted file mode 100644 index b6874e91..00000000 --- a/elasticsearch/config/es01/elasticsearch-plugins.example.yml +++ /dev/null @@ -1,27 +0,0 @@ -# Rename this file to `elasticsearch-plugins.yml` to use it. -# -# All plugins must be listed here. If you add a plugin to this list and run -# `elasticsearch-plugin sync`, that plugin will be installed. If you remove -# a plugin from this list, that plugin will be removed when Elasticsearch -# next starts. - -plugins: - # Each plugin must have an ID. Plugins with only an ID are official plugins and will be downloaded from Elastic. - - id: example-id - - # Plugins can be specified by URL (it doesn't have to be HTTP, you could use e.g. `file:`) - - id: example-with-url - location: https://some.domain/path/example4.zip - - # Or by maven coordinates: - - id: example-with-maven-url - location: org.elasticsearch.plugins:example-plugin:1.2.3 - - # A proxy can also be configured per-plugin, if necessary - - id: example-with-proxy - location: https://some.domain/path/example.zip - proxy: https://some.domain:1234 - -# Configures a proxy for all network access. Remove this if you don't need -# to use a proxy. -proxy: https://some.domain:1234 diff --git a/elasticsearch/config/es01/elasticsearch.keystore b/elasticsearch/config/es01/elasticsearch.keystore deleted file mode 100644 index d4e6e642..00000000 Binary files a/elasticsearch/config/es01/elasticsearch.keystore and /dev/null differ diff --git a/elasticsearch/config/es01/elasticsearch.yml b/elasticsearch/config/es01/elasticsearch.yml deleted file mode 100644 index e0675344..00000000 --- a/elasticsearch/config/es01/elasticsearch.yml +++ /dev/null @@ -1,19 +0,0 @@ -node.name: es01 -path.data: /usr/share/elasticsearch/data -path.logs: /usr/share/elasticsearch/logs -network.host: 127.0.0.1 -cluster.name: docker-cluster -discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301", "127.0.0.1:9302"] -cluster.initial_master_nodes: ["es01", "es02", "es03"] -bootstrap.memory_lock: false -xpack.security.enabled: true -xpack.security.http.ssl.enabled: true -xpack.security.http.ssl.key: es01.key -xpack.security.http.ssl.certificate: es01.crt -xpack.security.http.ssl.certificate_authorities: ["ca.crt"] -xpack.security.transport.ssl.enabled: true -xpack.security.transport.ssl.verification_mode: certificate -xpack.security.transport.ssl.key: es01.key -xpack.security.transport.ssl.certificate: es01.crt -xpack.security.transport.ssl.certificate_authorities: ["ca.crt"] -xpack.license.self_generated.type: basic diff --git a/elasticsearch/config/es01/es01.crt b/elasticsearch/config/es01/es01.crt deleted file mode 100755 index 76b8cdf2..00000000 --- a/elasticsearch/config/es01/es01.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDQDCCAiigAwIBAgIUKzkAgntIW7y5IHFE2MoxxHoLvGkwDQYJKoZIhvcNAQEL -BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l -cmF0ZWQgQ0EwHhcNMjQwNTI3MTk1ODUwWhcNMjcwNTI3MTk1ODUwWjAPMQ0wCwYD -VQQDEwRlczAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmpXRQ+TH -n+VpNZwD+7+9R7IOhisKjCEGKMqSARr5wQPlulxLDlHoO7pRLw6JcEXmLn4tx+Qu -Lkkm9pFAADYnIcCljzRkFHADKuo+P7BG6AZ+6l1UVHwya6iUaERda3+VClTHPzRo -Pn8TRdX78+cY7dAzme0noosw8WCgpL2HgiYciFiwle80OKaeiVxvRNJ+6n36a/q4 -lgLx9wQoJvox/2OCP3318UY1SgA2AO9kFk0zDTvJji9ESSz6d+6LCB73Bk2cKWx6 -q2pVoSTNPhkC5mD9E/zhuXSACfY3H85GZksJ4jztdF1UcsOsrjYsMwwxHH4BwVKa -k97ERJmICSLV/wIDAQABo28wbTAdBgNVHQ4EFgQUuAQmumKYnqzgVBFsMKNd3Wk5 -bPgwHwYDVR0jBBgwFoAUUhwT0mQKXn1S1rPBWQf0TizKLPQwIAYDVR0RBBkwF4IE -ZXMwMYcEfwAAAYIJbG9jYWxob3N0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD -ggEBAHwCJLqUnUIUV21HxVcEThmOWnxFZzA7VjahpIEb/RaK84Uc/8Cxv7vlVW1T -2mgOFQWpi98lew5K7r9GGuA509TaWuwaWAoqdhJL1T2lNa9eA8XtfRZweedqdw5P -1lCwR4vpJr5vVVEZwJTjKCRg5429owjoqEqPHSYbftVQSC8FlKIjnzNO9b5dHmfJ -y9DV5jYu5zfHZHPHXoksmn7MzLpfE6jA2euI7FSQfzPbkfoaBWBU/ZyvQb/taCyY -LH7JNtTf4Tm+yQe8g1m3hhFOraoQG0W09Ub+wpph50Q12sbHddX0e+ekhcu3+8HM -H4Y2SB9Pv5fsKvXtxix02Xu2m0s= ------END CERTIFICATE----- diff --git a/elasticsearch/config/es01/es01.key b/elasticsearch/config/es01/es01.key deleted file mode 100755 index c2c59819..00000000 --- a/elasticsearch/config/es01/es01.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEogIBAAKCAQEAmpXRQ+THn+VpNZwD+7+9R7IOhisKjCEGKMqSARr5wQPlulxL -DlHoO7pRLw6JcEXmLn4tx+QuLkkm9pFAADYnIcCljzRkFHADKuo+P7BG6AZ+6l1U -VHwya6iUaERda3+VClTHPzRoPn8TRdX78+cY7dAzme0noosw8WCgpL2HgiYciFiw -le80OKaeiVxvRNJ+6n36a/q4lgLx9wQoJvox/2OCP3318UY1SgA2AO9kFk0zDTvJ -ji9ESSz6d+6LCB73Bk2cKWx6q2pVoSTNPhkC5mD9E/zhuXSACfY3H85GZksJ4jzt -dF1UcsOsrjYsMwwxHH4BwVKak97ERJmICSLV/wIDAQABAoIBABDs2Vo1KNQtcoz/ -lYIRVsCMUsHG4aNBFGMP9tdvJCxJaHQ0mbUqK6KqfiwIS+0CgjbR8uJBbfr8YGs7 -sQW06CjuZlIdGt4P+5DNz936R3EtEOVJLawIYx7deM5HufDEqcVVTfFyI/2/vRT2 -3lywj06ubo/qYt4NnmC3Qy92XulVZknvjaolGhqVlYGbHQITSI47KNErFX0KiL77 -dYkO3dY75XIc4NsECk5UyFRyu1Mg6dkG+a8HahPVmX7ctq+bytQ3r9hpwXrY1MZV -RXtEW81kwB0yJV3GmXJRrqKZR+vvpqMRIQhmLZgr0XkKIshBuBneAo4cUX7MVgAX -JcdHsMUCgYEA0P7NgUL4xg9Xtpygf5DWldcCO/cy6yoOkXEJ6d9xOhQny24qi0MN -uOuyCCF4UQnhdEYcR9aY6YOwviQluq6roQT7g1Jex20F2iaaLVNdxaGi5s9nmzgp -CVfBdLK798GCu/yrRwhy1EW6kaQdIJ9D0K1Fkm8SFOAuQY0gKgbK6BsCgYEAvVpH -AKtcUJiqyenkvyhnxmpZXhS93F2qSJnzBJ/2wAuQ7BCxw/vW7vw1XDDy+IKFXLQ4 -eRnbIs2hk+FBAgAQDJl26dUELaE+BKsmU1XACRBrnpLZXNd0ssLc1dMFewkxURmT -krWCku32OjVVnPuIALE4Bv9hBSvotYFmf7DXL+0CgYBU05bFqFEg0olfbSMXo8n0 -91fIzwSzvlY7Yg4MBs0GLbgZMZXDAGxJaiDQfAVBnykK8In5/ngCD5llE3bc1piC -umr7Witt9iox6Qka7INa+8gKtpPuxFSjniK/Iux4GurdMiiypBM3ZTXcdyf7XalA -wZNDZCGKp5MeuBEd/bPNkQKBgAlVzRBUYm26yRjBRjzCYjNfBN7liOK3X3DK3jdJ -J6IaL9/jhtARt2v61SqhYykrTiXe4LXft3UEzEV9InZVyHTGkB1BGj6hp2wVgAM1 -xAzuWU/tD3hLSv6RKtAD4k5Jirvj1emytyhFQRFnlbvyjqbyFcAKkR7vJj7kjUgY -UNOVAoGACkTgg+e0Cxu/rzPqJTcwB7gXikBK9gXegi9fXv2Q8q860Y37MXkTCStF -elsIix7jrUokjXWG8Gc44GfJUCv+WLZCeqaL3oS+ZznfbESfiLwEecu/6jsb3SEk -Swx3Bb5X8q0/S0kD3ShMVPFnFIO37P37efMFaYJ2Fs1C3FpWfwM= ------END RSA PRIVATE KEY----- diff --git a/elasticsearch/config/es01/jvm.options b/elasticsearch/config/es01/jvm.options deleted file mode 100644 index 0b1af90f..00000000 --- a/elasticsearch/config/es01/jvm.options +++ /dev/null @@ -1,79 +0,0 @@ -################################################################ -## -## JVM configuration -## -################################################################ -## -## WARNING: DO NOT EDIT THIS FILE. If you want to override the -## JVM options in this file, or set any additional options, you -## should create one or more files in the jvm.options.d -## directory containing your adjustments. -## -## See https://www.elastic.co/guide/en/elasticsearch/reference/8.13/jvm-options.html -## for more information. -## -################################################################ - - - -################################################################ -## IMPORTANT: JVM heap size -################################################################ -## -## The heap size is automatically configured by Elasticsearch -## based on the available memory in your system and the roles -## each node is configured to fulfill. If specifying heap is -## required, it should be done through a file in jvm.options.d, -## which should be named with .options suffix, and the min and -## max should be set to the same value. For example, to set the -## heap to 4 GB, create a new file in the jvm.options.d -## directory containing these lines: -## -## -Xms4g -## -Xmx4g -## -## See https://www.elastic.co/guide/en/elasticsearch/reference/8.13/heap-size.html -## for more information -## -################################################################ - - -################################################################ -## Expert settings -################################################################ -## -## All settings below here are considered expert settings. Do -## not adjust them unless you understand what you are doing. Do -## not edit them in this file; instead, create a new file in the -## jvm.options.d directory containing your adjustments. -## -################################################################ - --XX:+UseG1GC - -## JVM temporary directory --Djava.io.tmpdir=${ES_TMPDIR} - -# Leverages accelerated vector hardware instructions; removing this may -# result in less optimal vector performance -20-:--add-modules=jdk.incubator.vector - -## heap dumps - -# generate a heap dump when an allocation from the Java heap fails; heap dumps -# are created in the working directory of the JVM unless an alternative path is -# specified --XX:+HeapDumpOnOutOfMemoryError - -# exit right after heap dump on out of memory error --XX:+ExitOnOutOfMemoryError - -# specify an alternative path for heap dumps; ensure the directory exists and -# has sufficient space --XX:HeapDumpPath=data - -# specify an alternative path for JVM fatal error logs --XX:ErrorFile=logs/hs_err_pid%p.log - -## GC logging --Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,level,pid,tags:filecount=32,filesize=64m diff --git a/elasticsearch/config/es01/log4j2.file.properties b/elasticsearch/config/es01/log4j2.file.properties deleted file mode 100644 index 5bb63ce1..00000000 --- a/elasticsearch/config/es01/log4j2.file.properties +++ /dev/null @@ -1,279 +0,0 @@ -status = error - -appender.console.type = Console -appender.console.name = console -appender.console.layout.type = PatternLayout -appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%consoleException%n - -######## Server JSON ############################ -appender.rolling.type = RollingFile -appender.rolling.name = rolling -appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json -appender.rolling.layout.type = ECSJsonLayout -appender.rolling.layout.dataset = elasticsearch.server - -appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.json.gz -appender.rolling.policies.type = Policies -appender.rolling.policies.time.type = TimeBasedTriggeringPolicy -appender.rolling.policies.time.interval = 1 -appender.rolling.policies.time.modulate = true -appender.rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.rolling.policies.size.size = 128MB -appender.rolling.strategy.type = DefaultRolloverStrategy -appender.rolling.strategy.fileIndex = nomax -appender.rolling.strategy.action.type = Delete -appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path} -appender.rolling.strategy.action.condition.type = IfFileName -appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* -appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize -appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB -################################################ -######## Server - old style pattern ########### -appender.rolling_old.type = RollingFile -appender.rolling_old.name = rolling_old -appender.rolling_old.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log -appender.rolling_old.layout.type = PatternLayout -appender.rolling_old.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%n - -appender.rolling_old.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz -appender.rolling_old.policies.type = Policies -appender.rolling_old.policies.time.type = TimeBasedTriggeringPolicy -appender.rolling_old.policies.time.interval = 1 -appender.rolling_old.policies.time.modulate = true -appender.rolling_old.policies.size.type = SizeBasedTriggeringPolicy -appender.rolling_old.policies.size.size = 128MB -appender.rolling_old.strategy.type = DefaultRolloverStrategy -appender.rolling_old.strategy.fileIndex = nomax -appender.rolling_old.strategy.action.type = Delete -appender.rolling_old.strategy.action.basepath = ${sys:es.logs.base_path} -appender.rolling_old.strategy.action.condition.type = IfFileName -appender.rolling_old.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* -appender.rolling_old.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize -appender.rolling_old.strategy.action.condition.nested_condition.exceeds = 2GB -################################################ - -rootLogger.level = info -rootLogger.appenderRef.console.ref = console -rootLogger.appenderRef.rolling.ref = rolling -rootLogger.appenderRef.rolling_old.ref = rolling_old - -######## Deprecation JSON ####################### -appender.deprecation_rolling.type = RollingFile -appender.deprecation_rolling.name = deprecation_rolling -appender.deprecation_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation.json -appender.deprecation_rolling.layout.type = ECSJsonLayout -# Intentionally follows a different pattern to above -appender.deprecation_rolling.layout.dataset = deprecation.elasticsearch -appender.deprecation_rolling.filter.rate_limit.type = RateLimitingFilter - -appender.deprecation_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation-%i.json.gz -appender.deprecation_rolling.policies.type = Policies -appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.deprecation_rolling.policies.size.size = 1GB -appender.deprecation_rolling.strategy.type = DefaultRolloverStrategy -appender.deprecation_rolling.strategy.max = 4 - -appender.header_warning.type = HeaderWarningAppender -appender.header_warning.name = header_warning -################################################# - -logger.deprecation.name = org.elasticsearch.deprecation -logger.deprecation.level = WARN -logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling -logger.deprecation.appenderRef.header_warning.ref = header_warning -logger.deprecation.additivity = false - -######## Search slowlog JSON #################### -appender.index_search_slowlog_rolling.type = RollingFile -appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling -appender.index_search_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs\ - .cluster_name}_index_search_slowlog.json -appender.index_search_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_search_slowlog_rolling.layout.dataset = elasticsearch.index_search_slowlog - -appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs\ - .cluster_name}_index_search_slowlog-%i.json.gz -appender.index_search_slowlog_rolling.policies.type = Policies -appender.index_search_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.index_search_slowlog_rolling.policies.size.size = 1GB -appender.index_search_slowlog_rolling.strategy.type = DefaultRolloverStrategy -appender.index_search_slowlog_rolling.strategy.max = 4 -################################################# - -################################################# -logger.index_search_slowlog_rolling.name = index.search.slowlog -logger.index_search_slowlog_rolling.level = trace -logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling -logger.index_search_slowlog_rolling.additivity = false - -######## Indexing slowlog JSON ################## -appender.index_indexing_slowlog_rolling.type = RollingFile -appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling -appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}\ - _index_indexing_slowlog.json -appender.index_indexing_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_indexing_slowlog_rolling.layout.dataset = elasticsearch.index_indexing_slowlog - - -appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}\ - _index_indexing_slowlog-%i.json.gz -appender.index_indexing_slowlog_rolling.policies.type = Policies -appender.index_indexing_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.index_indexing_slowlog_rolling.policies.size.size = 1GB -appender.index_indexing_slowlog_rolling.strategy.type = DefaultRolloverStrategy -appender.index_indexing_slowlog_rolling.strategy.max = 4 -################################################# - - -logger.index_indexing_slowlog.name = index.indexing.slowlog.index -logger.index_indexing_slowlog.level = trace -logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling -logger.index_indexing_slowlog.additivity = false - - -logger.org_apache_pdfbox.name = org.apache.pdfbox -logger.org_apache_pdfbox.level = off - -logger.org_apache_poi.name = org.apache.poi -logger.org_apache_poi.level = off - -logger.org_apache_fontbox.name = org.apache.fontbox -logger.org_apache_fontbox.level = off - -logger.org_apache_xmlbeans.name = org.apache.xmlbeans -logger.org_apache_xmlbeans.level = off - - -logger.com_amazonaws.name = com.amazonaws -logger.com_amazonaws.level = warn - -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.name = com.amazonaws.jmx.SdkMBeanRegistrySupport -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.level = error - -logger.com_amazonaws_metrics_AwsSdkMetrics.name = com.amazonaws.metrics.AwsSdkMetrics -logger.com_amazonaws_metrics_AwsSdkMetrics.level = error - -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.name = com.amazonaws.auth.profile.internal.BasicProfileConfigFileLoader -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.level = error - -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.name = com.amazonaws.services.s3.internal.UseArnRegionResolver -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.level = error - - -appender.audit_rolling.type = RollingFile -appender.audit_rolling.name = audit_rolling -appender.audit_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_audit.json -appender.audit_rolling.layout.type = PatternLayout -appender.audit_rolling.layout.pattern = {\ - "type":"audit", \ - "timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ}"\ - %varsNotEmpty{, "cluster.name":"%enc{%map{cluster.name}}{JSON}"}\ - %varsNotEmpty{, "cluster.uuid":"%enc{%map{cluster.uuid}}{JSON}"}\ - %varsNotEmpty{, "node.name":"%enc{%map{node.name}}{JSON}"}\ - %varsNotEmpty{, "node.id":"%enc{%map{node.id}}{JSON}"}\ - %varsNotEmpty{, "host.name":"%enc{%map{host.name}}{JSON}"}\ - %varsNotEmpty{, "host.ip":"%enc{%map{host.ip}}{JSON}"}\ - %varsNotEmpty{, "event.type":"%enc{%map{event.type}}{JSON}"}\ - %varsNotEmpty{, "event.action":"%enc{%map{event.action}}{JSON}"}\ - %varsNotEmpty{, "authentication.type":"%enc{%map{authentication.type}}{JSON}"}\ - %varsNotEmpty{, "user.name":"%enc{%map{user.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.name":"%enc{%map{user.run_by.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.name":"%enc{%map{user.run_as.name}}{JSON}"}\ - %varsNotEmpty{, "user.realm":"%enc{%map{user.realm}}{JSON}"}\ - %varsNotEmpty{, "user.realm_domain":"%enc{%map{user.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm":"%enc{%map{user.run_by.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm_domain":"%enc{%map{user.run_by.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm":"%enc{%map{user.run_as.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm_domain":"%enc{%map{user.run_as.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.roles":%map{user.roles}}\ - %varsNotEmpty{, "apikey.id":"%enc{%map{apikey.id}}{JSON}"}\ - %varsNotEmpty{, "apikey.name":"%enc{%map{apikey.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.name":"%enc{%map{authentication.token.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.type":"%enc{%map{authentication.token.type}}{JSON}"}\ - %varsNotEmpty{, "cross_cluster_access":%map{cross_cluster_access}}\ - %varsNotEmpty{, "origin.type":"%enc{%map{origin.type}}{JSON}"}\ - %varsNotEmpty{, "origin.address":"%enc{%map{origin.address}}{JSON}"}\ - %varsNotEmpty{, "realm":"%enc{%map{realm}}{JSON}"}\ - %varsNotEmpty{, "realm_domain":"%enc{%map{realm_domain}}{JSON}"}\ - %varsNotEmpty{, "url.path":"%enc{%map{url.path}}{JSON}"}\ - %varsNotEmpty{, "url.query":"%enc{%map{url.query}}{JSON}"}\ - %varsNotEmpty{, "request.method":"%enc{%map{request.method}}{JSON}"}\ - %varsNotEmpty{, "request.body":"%enc{%map{request.body}}{JSON}"}\ - %varsNotEmpty{, "request.id":"%enc{%map{request.id}}{JSON}"}\ - %varsNotEmpty{, "action":"%enc{%map{action}}{JSON}"}\ - %varsNotEmpty{, "request.name":"%enc{%map{request.name}}{JSON}"}\ - %varsNotEmpty{, "indices":%map{indices}}\ - %varsNotEmpty{, "opaque_id":"%enc{%map{opaque_id}}{JSON}"}\ - %varsNotEmpty{, "trace.id":"%enc{%map{trace.id}}{JSON}"}\ - %varsNotEmpty{, "x_forwarded_for":"%enc{%map{x_forwarded_for}}{JSON}"}\ - %varsNotEmpty{, "transport.profile":"%enc{%map{transport.profile}}{JSON}"}\ - %varsNotEmpty{, "rule":"%enc{%map{rule}}{JSON}"}\ - %varsNotEmpty{, "put":%map{put}}\ - %varsNotEmpty{, "delete":%map{delete}}\ - %varsNotEmpty{, "change":%map{change}}\ - %varsNotEmpty{, "create":%map{create}}\ - %varsNotEmpty{, "invalidate":%map{invalidate}}\ - }%n -# "node.name" node name from the `elasticsearch.yml` settings -# "node.id" node id which should not change between cluster restarts -# "host.name" unresolved hostname of the local node -# "host.ip" the local bound ip (i.e. the ip listening for connections) -# "origin.type" a received REST request is translated into one or more transport requests. This indicates which processing layer generated the event "rest" or "transport" (internal) -# "event.action" the name of the audited event, eg. "authentication_failed", "access_granted", "run_as_granted", etc. -# "authentication.type" one of "realm", "api_key", "token", "anonymous" or "internal" -# "user.name" the subject name as authenticated by a realm -# "user.run_by.name" the original authenticated subject name that is impersonating another one. -# "user.run_as.name" if this "event.action" is of a run_as type, this is the subject name to be impersonated as. -# "user.realm" the name of the realm that authenticated "user.name" -# "user.realm_domain" if "user.realm" is under a domain, this is the name of the domain -# "user.run_by.realm" the realm name of the impersonating subject ("user.run_by.name") -# "user.run_by.realm_domain" if "user.run_by.realm" is under a domain, this is the name of the domain -# "user.run_as.realm" if this "event.action" is of a run_as type, this is the realm name the impersonated user is looked up from -# "user.run_as.realm_domain" if "user.run_as.realm" is under a domain, this is the name of the domain -# "user.roles" the roles array of the user; these are the roles that are granting privileges -# "apikey.id" this field is present if and only if the "authentication.type" is "api_key" -# "apikey.name" this field is present if and only if the "authentication.type" is "api_key" -# "authentication.token.name" this field is present if and only if the authenticating credential is a service account token -# "authentication.token.type" this field is present if and only if the authenticating credential is a service account token -# "cross_cluster_access" this field is present if and only if the associated authentication occurred cross cluster -# "event.type" informs about what internal system generated the event; possible values are "rest", "transport", "ip_filter" and "security_config_change" -# "origin.address" the remote address and port of the first network hop, i.e. a REST proxy or another cluster node -# "realm" name of a realm that has generated an "authentication_failed" or an "authentication_successful"; the subject is not yet authenticated -# "realm_domain" if "realm" is under a domain, this is the name of the domain -# "url.path" the URI component between the port and the query string; it is percent (URL) encoded -# "url.query" the URI component after the path and before the fragment; it is percent (URL) encoded -# "request.method" the method of the HTTP request, i.e. one of GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, TRACE, CONNECT -# "request.body" the content of the request body entity, JSON escaped -# "request.id" a synthetic identifier for the incoming request, this is unique per incoming request, and consistent across all audit events generated by that request -# "action" an action is the most granular operation that is authorized and this identifies it in a namespaced way (internal) -# "request.name" if the event is in connection to a transport message this is the name of the request class, similar to how rest requests are identified by the url path (internal) -# "indices" the array of indices that the "action" is acting upon -# "opaque_id" opaque value conveyed by the "X-Opaque-Id" request header -# "trace_id" an identifier conveyed by the part of "traceparent" request header -# "x_forwarded_for" the addresses from the "X-Forwarded-For" request header, as a verbatim string value (not an array) -# "transport.profile" name of the transport profile in case this is a "connection_granted" or "connection_denied" event -# "rule" name of the applied rule if the "origin.type" is "ip_filter" -# the "put", "delete", "change", "create", "invalidate" fields are only present -# when the "event.type" is "security_config_change" and contain the security config change (as an object) taking effect - -appender.audit_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_audit-%d{yyyy-MM-dd}-%i.json.gz -appender.audit_rolling.policies.type = Policies -appender.audit_rolling.policies.time.type = TimeBasedTriggeringPolicy -appender.audit_rolling.policies.time.interval = 1 -appender.audit_rolling.policies.time.modulate = true -appender.audit_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.audit_rolling.policies.size.size = 1GB -appender.audit_rolling.strategy.type = DefaultRolloverStrategy -appender.audit_rolling.strategy.fileIndex = nomax - -logger.xpack_security_audit_logfile.name = org.elasticsearch.xpack.security.audit.logfile.LoggingAuditTrail -logger.xpack_security_audit_logfile.level = info -logger.xpack_security_audit_logfile.appenderRef.audit_rolling.ref = audit_rolling -logger.xpack_security_audit_logfile.additivity = false - -logger.xmlsig.name = org.apache.xml.security.signature.XMLSignature -logger.xmlsig.level = error -logger.samlxml_decrypt.name = org.opensaml.xmlsec.encryption.support.Decrypter -logger.samlxml_decrypt.level = fatal -logger.saml2_decrypt.name = org.opensaml.saml.saml2.encryption.Decrypter -logger.saml2_decrypt.level = fatal diff --git a/elasticsearch/config/es01/log4j2.properties b/elasticsearch/config/es01/log4j2.properties deleted file mode 100644 index c0d67c8e..00000000 --- a/elasticsearch/config/es01/log4j2.properties +++ /dev/null @@ -1,193 +0,0 @@ -status = error - -######## Server JSON ############################ -appender.rolling.type = Console -appender.rolling.name = rolling -appender.rolling.layout.type = ECSJsonLayout -appender.rolling.layout.dataset = elasticsearch.server - -################################################ - -################################################ - -rootLogger.level = info -rootLogger.appenderRef.rolling.ref = rolling - -######## Deprecation JSON ####################### -appender.deprecation_rolling.type = Console -appender.deprecation_rolling.name = deprecation_rolling -appender.deprecation_rolling.layout.type = ECSJsonLayout -# Intentionally follows a different pattern to above -appender.deprecation_rolling.layout.dataset = deprecation.elasticsearch -appender.deprecation_rolling.filter.rate_limit.type = RateLimitingFilter - -appender.header_warning.type = HeaderWarningAppender -appender.header_warning.name = header_warning -################################################# - -logger.deprecation.name = org.elasticsearch.deprecation -logger.deprecation.level = WARN -logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling -logger.deprecation.appenderRef.header_warning.ref = header_warning -logger.deprecation.additivity = false - -######## Search slowlog JSON #################### -appender.index_search_slowlog_rolling.type = Console -appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling -appender.index_search_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_search_slowlog_rolling.layout.dataset = elasticsearch.index_search_slowlog - -################################################# - -################################################# -logger.index_search_slowlog_rolling.name = index.search.slowlog -logger.index_search_slowlog_rolling.level = trace -logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling -logger.index_search_slowlog_rolling.additivity = false - -######## Indexing slowlog JSON ################## -appender.index_indexing_slowlog_rolling.type = Console -appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling -appender.index_indexing_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_indexing_slowlog_rolling.layout.dataset = elasticsearch.index_indexing_slowlog - -################################################# - -logger.index_indexing_slowlog.name = index.indexing.slowlog.index -logger.index_indexing_slowlog.level = trace -logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling -logger.index_indexing_slowlog.additivity = false - -logger.org_apache_pdfbox.name = org.apache.pdfbox -logger.org_apache_pdfbox.level = off - -logger.org_apache_poi.name = org.apache.poi -logger.org_apache_poi.level = off - -logger.org_apache_fontbox.name = org.apache.fontbox -logger.org_apache_fontbox.level = off - -logger.org_apache_xmlbeans.name = org.apache.xmlbeans -logger.org_apache_xmlbeans.level = off - -logger.com_amazonaws.name = com.amazonaws -logger.com_amazonaws.level = warn - -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.name = com.amazonaws.jmx.SdkMBeanRegistrySupport -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.level = error - -logger.com_amazonaws_metrics_AwsSdkMetrics.name = com.amazonaws.metrics.AwsSdkMetrics -logger.com_amazonaws_metrics_AwsSdkMetrics.level = error - -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.name = com.amazonaws.auth.profile.internal.BasicProfileConfigFileLoader -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.level = error - -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.name = com.amazonaws.services.s3.internal.UseArnRegionResolver -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.level = error - -appender.audit_rolling.type = Console -appender.audit_rolling.name = audit_rolling -appender.audit_rolling.layout.type = PatternLayout -appender.audit_rolling.layout.pattern = {\ - "type":"audit", \ - "timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ}"\ - %varsNotEmpty{, "cluster.name":"%enc{%map{cluster.name}}{JSON}"}\ - %varsNotEmpty{, "cluster.uuid":"%enc{%map{cluster.uuid}}{JSON}"}\ - %varsNotEmpty{, "node.name":"%enc{%map{node.name}}{JSON}"}\ - %varsNotEmpty{, "node.id":"%enc{%map{node.id}}{JSON}"}\ - %varsNotEmpty{, "host.name":"%enc{%map{host.name}}{JSON}"}\ - %varsNotEmpty{, "host.ip":"%enc{%map{host.ip}}{JSON}"}\ - %varsNotEmpty{, "event.type":"%enc{%map{event.type}}{JSON}"}\ - %varsNotEmpty{, "event.action":"%enc{%map{event.action}}{JSON}"}\ - %varsNotEmpty{, "authentication.type":"%enc{%map{authentication.type}}{JSON}"}\ - %varsNotEmpty{, "user.name":"%enc{%map{user.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.name":"%enc{%map{user.run_by.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.name":"%enc{%map{user.run_as.name}}{JSON}"}\ - %varsNotEmpty{, "user.realm":"%enc{%map{user.realm}}{JSON}"}\ - %varsNotEmpty{, "user.realm_domain":"%enc{%map{user.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm":"%enc{%map{user.run_by.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm_domain":"%enc{%map{user.run_by.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm":"%enc{%map{user.run_as.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm_domain":"%enc{%map{user.run_as.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.roles":%map{user.roles}}\ - %varsNotEmpty{, "apikey.id":"%enc{%map{apikey.id}}{JSON}"}\ - %varsNotEmpty{, "apikey.name":"%enc{%map{apikey.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.name":"%enc{%map{authentication.token.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.type":"%enc{%map{authentication.token.type}}{JSON}"}\ - %varsNotEmpty{, "cross_cluster_access":%map{cross_cluster_access}}\ - %varsNotEmpty{, "origin.type":"%enc{%map{origin.type}}{JSON}"}\ - %varsNotEmpty{, "origin.address":"%enc{%map{origin.address}}{JSON}"}\ - %varsNotEmpty{, "realm":"%enc{%map{realm}}{JSON}"}\ - %varsNotEmpty{, "realm_domain":"%enc{%map{realm_domain}}{JSON}"}\ - %varsNotEmpty{, "url.path":"%enc{%map{url.path}}{JSON}"}\ - %varsNotEmpty{, "url.query":"%enc{%map{url.query}}{JSON}"}\ - %varsNotEmpty{, "request.method":"%enc{%map{request.method}}{JSON}"}\ - %varsNotEmpty{, "request.body":"%enc{%map{request.body}}{JSON}"}\ - %varsNotEmpty{, "request.id":"%enc{%map{request.id}}{JSON}"}\ - %varsNotEmpty{, "action":"%enc{%map{action}}{JSON}"}\ - %varsNotEmpty{, "request.name":"%enc{%map{request.name}}{JSON}"}\ - %varsNotEmpty{, "indices":%map{indices}}\ - %varsNotEmpty{, "opaque_id":"%enc{%map{opaque_id}}{JSON}"}\ - %varsNotEmpty{, "trace.id":"%enc{%map{trace.id}}{JSON}"}\ - %varsNotEmpty{, "x_forwarded_for":"%enc{%map{x_forwarded_for}}{JSON}"}\ - %varsNotEmpty{, "transport.profile":"%enc{%map{transport.profile}}{JSON}"}\ - %varsNotEmpty{, "rule":"%enc{%map{rule}}{JSON}"}\ - %varsNotEmpty{, "put":%map{put}}\ - %varsNotEmpty{, "delete":%map{delete}}\ - %varsNotEmpty{, "change":%map{change}}\ - %varsNotEmpty{, "create":%map{create}}\ - %varsNotEmpty{, "invalidate":%map{invalidate}}\ - }%n -# "node.name" node name from the `elasticsearch.yml` settings -# "node.id" node id which should not change between cluster restarts -# "host.name" unresolved hostname of the local node -# "host.ip" the local bound ip (i.e. the ip listening for connections) -# "origin.type" a received REST request is translated into one or more transport requests. This indicates which processing layer generated the event "rest" or "transport" (internal) -# "event.action" the name of the audited event, eg. "authentication_failed", "access_granted", "run_as_granted", etc. -# "authentication.type" one of "realm", "api_key", "token", "anonymous" or "internal" -# "user.name" the subject name as authenticated by a realm -# "user.run_by.name" the original authenticated subject name that is impersonating another one. -# "user.run_as.name" if this "event.action" is of a run_as type, this is the subject name to be impersonated as. -# "user.realm" the name of the realm that authenticated "user.name" -# "user.realm_domain" if "user.realm" is under a domain, this is the name of the domain -# "user.run_by.realm" the realm name of the impersonating subject ("user.run_by.name") -# "user.run_by.realm_domain" if "user.run_by.realm" is under a domain, this is the name of the domain -# "user.run_as.realm" if this "event.action" is of a run_as type, this is the realm name the impersonated user is looked up from -# "user.run_as.realm_domain" if "user.run_as.realm" is under a domain, this is the name of the domain -# "user.roles" the roles array of the user; these are the roles that are granting privileges -# "apikey.id" this field is present if and only if the "authentication.type" is "api_key" -# "apikey.name" this field is present if and only if the "authentication.type" is "api_key" -# "authentication.token.name" this field is present if and only if the authenticating credential is a service account token -# "authentication.token.type" this field is present if and only if the authenticating credential is a service account token -# "cross_cluster_access" this field is present if and only if the associated authentication occurred cross cluster -# "event.type" informs about what internal system generated the event; possible values are "rest", "transport", "ip_filter" and "security_config_change" -# "origin.address" the remote address and port of the first network hop, i.e. a REST proxy or another cluster node -# "realm" name of a realm that has generated an "authentication_failed" or an "authentication_successful"; the subject is not yet authenticated -# "realm_domain" if "realm" is under a domain, this is the name of the domain -# "url.path" the URI component between the port and the query string; it is percent (URL) encoded -# "url.query" the URI component after the path and before the fragment; it is percent (URL) encoded -# "request.method" the method of the HTTP request, i.e. one of GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, TRACE, CONNECT -# "request.body" the content of the request body entity, JSON escaped -# "request.id" a synthetic identifier for the incoming request, this is unique per incoming request, and consistent across all audit events generated by that request -# "action" an action is the most granular operation that is authorized and this identifies it in a namespaced way (internal) -# "request.name" if the event is in connection to a transport message this is the name of the request class, similar to how rest requests are identified by the url path (internal) -# "indices" the array of indices that the "action" is acting upon -# "opaque_id" opaque value conveyed by the "X-Opaque-Id" request header -# "trace_id" an identifier conveyed by the part of "traceparent" request header -# "x_forwarded_for" the addresses from the "X-Forwarded-For" request header, as a verbatim string value (not an array) -# "transport.profile" name of the transport profile in case this is a "connection_granted" or "connection_denied" event -# "rule" name of the applied rule if the "origin.type" is "ip_filter" -# the "put", "delete", "change", "create", "invalidate" fields are only present -# when the "event.type" is "security_config_change" and contain the security config change (as an object) taking effect - -logger.xpack_security_audit_logfile.name = org.elasticsearch.xpack.security.audit.logfile.LoggingAuditTrail -logger.xpack_security_audit_logfile.level = info -logger.xpack_security_audit_logfile.appenderRef.audit_rolling.ref = audit_rolling -logger.xpack_security_audit_logfile.additivity = false - -logger.xmlsig.name = org.apache.xml.security.signature.XMLSignature -logger.xmlsig.level = error -logger.samlxml_decrypt.name = org.opensaml.xmlsec.encryption.support.Decrypter -logger.samlxml_decrypt.level = fatal -logger.saml2_decrypt.name = org.opensaml.saml.saml2.encryption.Decrypter -logger.saml2_decrypt.level = fatal \ No newline at end of file diff --git a/elasticsearch/config/es01/role_mapping.yml b/elasticsearch/config/es01/role_mapping.yml deleted file mode 100644 index 68c82f7e..00000000 --- a/elasticsearch/config/es01/role_mapping.yml +++ /dev/null @@ -1,14 +0,0 @@ -# Role mapping configuration file which has elasticsearch roles as keys -# that map to one or more user or group distinguished names - -#roleA: this is an elasticsearch role -# - groupA-DN this is a group distinguished name -# - groupB-DN -# - user1-DN this is the full user distinguished name - -#power_user: -# - "cn=admins,dc=example,dc=com" -#user: -# - "cn=users,dc=example,dc=com" -# - "cn=admins,dc=example,dc=com" -# - "cn=John Doe,cn=other users,dc=example,dc=com" diff --git a/elasticsearch/config/es01/roles.yml b/elasticsearch/config/es01/roles.yml deleted file mode 100644 index 68e003b8..00000000 --- a/elasticsearch/config/es01/roles.yml +++ /dev/null @@ -1,3 +0,0 @@ -# The default roles file is empty as the preferred method of defining roles is -# through the API/UI. File based roles are useful in error scenarios when the -# API based roles may not be available. diff --git a/elasticsearch/config/es01/users b/elasticsearch/config/es01/users deleted file mode 100644 index e69de29b..00000000 diff --git a/elasticsearch/config/es01/users_roles b/elasticsearch/config/es01/users_roles deleted file mode 100644 index e69de29b..00000000 diff --git a/elasticsearch/config/es02/ca.crt b/elasticsearch/config/es02/ca.crt deleted file mode 100755 index d8c6ffd4..00000000 --- a/elasticsearch/config/es02/ca.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIVAO2BMtuZgADcrNJORc/UB2rj/y6JMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI0MDUyNzE5NTg0OVoXDTI3MDUyNzE5NTg0OVowNDEyMDAG -A1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5lcmF0ZWQgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCat4tgRPHYWsZrygCUNASc -cc4wGONcNzRkn7LRbF+jWVcx3G8SLK1uY5w0jdC+mioRe8vIVR1amng1KtIoADxa -aV43rCNSTfPO6DsDPu9AGdoxlHrUjkpf5mPcy1hhRpVfHi01ytqSip/deA+2jShq -2naMug4o6YoqdPdiVvOrzMvuVdGeGNNrlihTHmENtI6vZp1Uq/pxZYqHhqkzlCDr -uZvhe6bLpvbbyGVpx6dJA51MuxZ6m6yEtz1fNz2fgh+2tl91hXp7WaeMDpGHaezq -cCbiHSMG9vXhU8fsgTTB2NONiGiH/635VZcTbbS9dtDeUe4Y/vEY0uURU2dyBF3L -AgMBAAGjUzBRMB0GA1UdDgQWBBRSHBPSZApefVLWs8FZB/ROLMos9DAfBgNVHSME -GDAWgBRSHBPSZApefVLWs8FZB/ROLMos9DAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBCwUAA4IBAQB2Hfsz3RT9Y+th7haS4C6yI4ZnwirEehexM9RjjIWlCS/i -c3IZ1dwJlR1pI6jeFjhF6iEnWY24cxH2GvZrynIrwACSJBibzVuMa/4+7pcF2xQS -L9H+18StNK2S51a1xxzfhlQpTizea05rnLpkhJP52PfUaoWD42kPz8t8ITafD5ay -IzKiz+aL1+elT+Tlmcmi2k0s+sJahLrcI62jUsmUB474fsv/00DWEBaSRKVXCy4D -pUv2PKV+EElHiM65UlMxZ7q5KBWsCvotILrIeP7rJZE3uloe6UTeZ0CSTDiQNCOb -jonBnKm6Zw7z2Io9Jl0yJJg0kl8tc8OFsV85p9RO ------END CERTIFICATE----- diff --git a/elasticsearch/config/es02/elasticsearch-plugins.example.yml b/elasticsearch/config/es02/elasticsearch-plugins.example.yml deleted file mode 100644 index b6874e91..00000000 --- a/elasticsearch/config/es02/elasticsearch-plugins.example.yml +++ /dev/null @@ -1,27 +0,0 @@ -# Rename this file to `elasticsearch-plugins.yml` to use it. -# -# All plugins must be listed here. If you add a plugin to this list and run -# `elasticsearch-plugin sync`, that plugin will be installed. If you remove -# a plugin from this list, that plugin will be removed when Elasticsearch -# next starts. - -plugins: - # Each plugin must have an ID. Plugins with only an ID are official plugins and will be downloaded from Elastic. - - id: example-id - - # Plugins can be specified by URL (it doesn't have to be HTTP, you could use e.g. `file:`) - - id: example-with-url - location: https://some.domain/path/example4.zip - - # Or by maven coordinates: - - id: example-with-maven-url - location: org.elasticsearch.plugins:example-plugin:1.2.3 - - # A proxy can also be configured per-plugin, if necessary - - id: example-with-proxy - location: https://some.domain/path/example.zip - proxy: https://some.domain:1234 - -# Configures a proxy for all network access. Remove this if you don't need -# to use a proxy. -proxy: https://some.domain:1234 diff --git a/elasticsearch/config/es02/elasticsearch.keystore b/elasticsearch/config/es02/elasticsearch.keystore deleted file mode 100644 index aedca3db..00000000 Binary files a/elasticsearch/config/es02/elasticsearch.keystore and /dev/null differ diff --git a/elasticsearch/config/es02/elasticsearch.yml b/elasticsearch/config/es02/elasticsearch.yml deleted file mode 100644 index 810114ef..00000000 --- a/elasticsearch/config/es02/elasticsearch.yml +++ /dev/null @@ -1,19 +0,0 @@ -node.name: es02 -path.data: /usr/share/elasticsearch/data -path.logs: /usr/share/elasticsearch/logs -network.host: 127.0.0.1 -cluster.name: docker-cluster -discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301", "127.0.0.1:9302"] -cluster.initial_master_nodes: ["es01", "es02", "es03"] -bootstrap.memory_lock: false -xpack.security.enabled: true -xpack.security.http.ssl.enabled: true -xpack.security.http.ssl.key: es02.key -xpack.security.http.ssl.certificate: es02.crt -xpack.security.http.ssl.certificate_authorities: ["ca.crt"] -xpack.security.transport.ssl.enabled: true -xpack.security.transport.ssl.verification_mode: certificate -xpack.security.transport.ssl.key: es02.key -xpack.security.transport.ssl.certificate: es02.crt -xpack.security.transport.ssl.certificate_authorities: ["ca.crt"] -xpack.license.self_generated.type: basic diff --git a/elasticsearch/config/es02/es02.crt b/elasticsearch/config/es02/es02.crt deleted file mode 100755 index 44db9c41..00000000 --- a/elasticsearch/config/es02/es02.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDQDCCAiigAwIBAgIUTk8VxELi8BcE+Q1QJDjl1ijZS0gwDQYJKoZIhvcNAQEL -BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l -cmF0ZWQgQ0EwHhcNMjQwNTI3MTk1ODUwWhcNMjcwNTI3MTk1ODUwWjAPMQ0wCwYD -VQQDEwRlczAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyaaCYcE+ -eDk4++1N2j0edhOQeJtRlVAY4okWx/GKZ8bUrFgWeXDmYnty8n2BjOsYy5AikELe -ZhsA6xWqV7/l8Tmhfv27e1qsxB1zNBurFQ4B2/O7YXHRXs2uKJqKb2Sj1+2GM6xQ -xZqZQS39MX2rKmENhud8kyDZUpQfqlUNE+QgRjMKMvB+7U9lrTfP/XUW2QosY+dz -Uub1K6pWf/avccf3WJd6R8aTYv2KDQjFsR6sib/RWHXTvtIDQlynQW4SFxSbhplX -DNN8nkaHa1lygAIHcKu77KulFrbTsJZ+hJIMjKn4HYsMuCH2KYDK+1cZToJ1MDvo -A9Xa2yWjbXWaiwIDAQABo28wbTAdBgNVHQ4EFgQUFSfOsv8EnRbLQI9pMbKNrRh0 -wM8wHwYDVR0jBBgwFoAUUhwT0mQKXn1S1rPBWQf0TizKLPQwIAYDVR0RBBkwF4cE -fwAAAYIEZXMwMoIJbG9jYWxob3N0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD -ggEBAAGEWLu8MtZiav5wxvCb0iu5zUOPDSRibK/wTLtLhOeu4LBqyB9MYuT9wRr3 -XKsKuPV6NHSzUdkAK5wTqXsX3b5FXD6+B7PUMB31g62YnauDdTydszR1NxMp9LB+ -8YKb71JBy9iuBNk4OkVhmi9Q3fsQxchAWCtjI8aEa08PYq4XKAHvS1Hp2c4xP57+ -ZBxZS2ASFZo9EJ6BNwErF2OdcjIOQEU4YYebNARwdoY8taFNTBMQfbJRVRRdRCw5 -+n0fGB77j1nEmwLJSYMVkL+b44XUu7OIOiv2gRmvE2ZrQgIcj0hEYKtQpXFfLB+6 -OVv7xEYk2yWjJNBTiOKboVTb1U8= ------END CERTIFICATE----- diff --git a/elasticsearch/config/es02/es02.key b/elasticsearch/config/es02/es02.key deleted file mode 100755 index 14209814..00000000 --- a/elasticsearch/config/es02/es02.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAyaaCYcE+eDk4++1N2j0edhOQeJtRlVAY4okWx/GKZ8bUrFgW -eXDmYnty8n2BjOsYy5AikELeZhsA6xWqV7/l8Tmhfv27e1qsxB1zNBurFQ4B2/O7 -YXHRXs2uKJqKb2Sj1+2GM6xQxZqZQS39MX2rKmENhud8kyDZUpQfqlUNE+QgRjMK -MvB+7U9lrTfP/XUW2QosY+dzUub1K6pWf/avccf3WJd6R8aTYv2KDQjFsR6sib/R -WHXTvtIDQlynQW4SFxSbhplXDNN8nkaHa1lygAIHcKu77KulFrbTsJZ+hJIMjKn4 -HYsMuCH2KYDK+1cZToJ1MDvoA9Xa2yWjbXWaiwIDAQABAoIBABGFNZ6FD0ab1i8m -uFUbaq+gqzScw3ML3Ar8FUN3DEBQXr8WAjyNSinJXGc5mg133xYku6lkHfWqJ/jE -+kwYgMPmRCQIALJK4mhBv3Y0vIxzmfFrP7R2PVZAManBJQELsflQtRB9Ssv4eZNX -tGrd5obOmuxwkCV/vPzMoORdnRQas5a0i0ZtlCjv8jirX/t1VOLlsvoaIGs6TbTm -op3s7zi9ETvnCnZ6VKzsSugwUGCRnFqsIgUt8PUpKPXfgvzdRc5/j1NNWocfwLlH -lTSipk4n64KPevvG/deWw6AnnYLSosIQM4MCC9JrgZ1DhacGs23L7WWbz/1JC+oT -AgEP9FkCgYEAz3pj3PdibwhM/VWuOxwWWR4YS8UJZx1lcFPXzgE4t7V+/YSKuUtL -ro2plGUG1Ji5SgsS0exH/mzaF8OhHX1Jt+eGEVJyzdfJN8S1lomVtOoMyjkyBgxM -I4bajIB1Sz9aipKwVAfise9f6Ga3E0/ET9iq6i0/R1wK5EwgdOCxkBMCgYEA+M84 -W4S5P4EyfaeLOw+puyZcgG0ftVVqlAHdkdQlQLXCt3ijI008A0f5GVqf2tTLVrAj -Ub39aDOrM1wA6FWCqsa8LEbtdD4d1xNDi8DegDvjjjmU1z8ULjxSu8iSikhOCw2G -vyXHsr04DYBg4OURD9Pg8hHGtANZSNtc6CwISqkCgYBogbqZi9Z+HQ1Csgy/42by -XrFYQRh6Yxk8Wk8iigT6rCYaJtAFg4LMmrincbfeEEuMm0VQjha5djTosXaPNxOR -2cHzKbeALchCGghpmkXZSedFWUf0Oe+EGaIuEWqDi5bcpATDXvF2NR/3HP3scUpt -+bIloML1+8vUsO/MT33BFwKBgQCiXR+K4Wa94UKgqwf5p7P8VAFDMXLis3XUVg9Q -DZ+txa7maYwUCl+iSIJuoCv28qwqytCRlCjcqfMLlftlof+eEAhV4IcuNybj5kdK -2LaZ+fr6IetWN2yk62qV7kJqiNqc7dvDuxTBOCdu8BrIR9NFf9+oOB9x80l9eOD9 -BVb32QKBgAjHylTABCzS+2zOwUQeMpXQnYeNhMvvvYug/mDh+GQQL7zVeSJXlNGS -PkJqE3xEoVPDOPJ+Kr8nl5jS3YGCWcWerYURd9XiX7lHx7LlOeb6LusNIm/mO563 -y2U3WPIDTdy36vnvz3FZKYIionGFYc5hRGI54GfWKbCdr9ug2Xaw ------END RSA PRIVATE KEY----- diff --git a/elasticsearch/config/es02/jvm.options b/elasticsearch/config/es02/jvm.options deleted file mode 100644 index 0b1af90f..00000000 --- a/elasticsearch/config/es02/jvm.options +++ /dev/null @@ -1,79 +0,0 @@ -################################################################ -## -## JVM configuration -## -################################################################ -## -## WARNING: DO NOT EDIT THIS FILE. If you want to override the -## JVM options in this file, or set any additional options, you -## should create one or more files in the jvm.options.d -## directory containing your adjustments. -## -## See https://www.elastic.co/guide/en/elasticsearch/reference/8.13/jvm-options.html -## for more information. -## -################################################################ - - - -################################################################ -## IMPORTANT: JVM heap size -################################################################ -## -## The heap size is automatically configured by Elasticsearch -## based on the available memory in your system and the roles -## each node is configured to fulfill. If specifying heap is -## required, it should be done through a file in jvm.options.d, -## which should be named with .options suffix, and the min and -## max should be set to the same value. For example, to set the -## heap to 4 GB, create a new file in the jvm.options.d -## directory containing these lines: -## -## -Xms4g -## -Xmx4g -## -## See https://www.elastic.co/guide/en/elasticsearch/reference/8.13/heap-size.html -## for more information -## -################################################################ - - -################################################################ -## Expert settings -################################################################ -## -## All settings below here are considered expert settings. Do -## not adjust them unless you understand what you are doing. Do -## not edit them in this file; instead, create a new file in the -## jvm.options.d directory containing your adjustments. -## -################################################################ - --XX:+UseG1GC - -## JVM temporary directory --Djava.io.tmpdir=${ES_TMPDIR} - -# Leverages accelerated vector hardware instructions; removing this may -# result in less optimal vector performance -20-:--add-modules=jdk.incubator.vector - -## heap dumps - -# generate a heap dump when an allocation from the Java heap fails; heap dumps -# are created in the working directory of the JVM unless an alternative path is -# specified --XX:+HeapDumpOnOutOfMemoryError - -# exit right after heap dump on out of memory error --XX:+ExitOnOutOfMemoryError - -# specify an alternative path for heap dumps; ensure the directory exists and -# has sufficient space --XX:HeapDumpPath=data - -# specify an alternative path for JVM fatal error logs --XX:ErrorFile=logs/hs_err_pid%p.log - -## GC logging --Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,level,pid,tags:filecount=32,filesize=64m diff --git a/elasticsearch/config/es02/log4j2.file.properties b/elasticsearch/config/es02/log4j2.file.properties deleted file mode 100644 index 5bb63ce1..00000000 --- a/elasticsearch/config/es02/log4j2.file.properties +++ /dev/null @@ -1,279 +0,0 @@ -status = error - -appender.console.type = Console -appender.console.name = console -appender.console.layout.type = PatternLayout -appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%consoleException%n - -######## Server JSON ############################ -appender.rolling.type = RollingFile -appender.rolling.name = rolling -appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json -appender.rolling.layout.type = ECSJsonLayout -appender.rolling.layout.dataset = elasticsearch.server - -appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.json.gz -appender.rolling.policies.type = Policies -appender.rolling.policies.time.type = TimeBasedTriggeringPolicy -appender.rolling.policies.time.interval = 1 -appender.rolling.policies.time.modulate = true -appender.rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.rolling.policies.size.size = 128MB -appender.rolling.strategy.type = DefaultRolloverStrategy -appender.rolling.strategy.fileIndex = nomax -appender.rolling.strategy.action.type = Delete -appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path} -appender.rolling.strategy.action.condition.type = IfFileName -appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* -appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize -appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB -################################################ -######## Server - old style pattern ########### -appender.rolling_old.type = RollingFile -appender.rolling_old.name = rolling_old -appender.rolling_old.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log -appender.rolling_old.layout.type = PatternLayout -appender.rolling_old.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%n - -appender.rolling_old.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz -appender.rolling_old.policies.type = Policies -appender.rolling_old.policies.time.type = TimeBasedTriggeringPolicy -appender.rolling_old.policies.time.interval = 1 -appender.rolling_old.policies.time.modulate = true -appender.rolling_old.policies.size.type = SizeBasedTriggeringPolicy -appender.rolling_old.policies.size.size = 128MB -appender.rolling_old.strategy.type = DefaultRolloverStrategy -appender.rolling_old.strategy.fileIndex = nomax -appender.rolling_old.strategy.action.type = Delete -appender.rolling_old.strategy.action.basepath = ${sys:es.logs.base_path} -appender.rolling_old.strategy.action.condition.type = IfFileName -appender.rolling_old.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* -appender.rolling_old.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize -appender.rolling_old.strategy.action.condition.nested_condition.exceeds = 2GB -################################################ - -rootLogger.level = info -rootLogger.appenderRef.console.ref = console -rootLogger.appenderRef.rolling.ref = rolling -rootLogger.appenderRef.rolling_old.ref = rolling_old - -######## Deprecation JSON ####################### -appender.deprecation_rolling.type = RollingFile -appender.deprecation_rolling.name = deprecation_rolling -appender.deprecation_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation.json -appender.deprecation_rolling.layout.type = ECSJsonLayout -# Intentionally follows a different pattern to above -appender.deprecation_rolling.layout.dataset = deprecation.elasticsearch -appender.deprecation_rolling.filter.rate_limit.type = RateLimitingFilter - -appender.deprecation_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation-%i.json.gz -appender.deprecation_rolling.policies.type = Policies -appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.deprecation_rolling.policies.size.size = 1GB -appender.deprecation_rolling.strategy.type = DefaultRolloverStrategy -appender.deprecation_rolling.strategy.max = 4 - -appender.header_warning.type = HeaderWarningAppender -appender.header_warning.name = header_warning -################################################# - -logger.deprecation.name = org.elasticsearch.deprecation -logger.deprecation.level = WARN -logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling -logger.deprecation.appenderRef.header_warning.ref = header_warning -logger.deprecation.additivity = false - -######## Search slowlog JSON #################### -appender.index_search_slowlog_rolling.type = RollingFile -appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling -appender.index_search_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs\ - .cluster_name}_index_search_slowlog.json -appender.index_search_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_search_slowlog_rolling.layout.dataset = elasticsearch.index_search_slowlog - -appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs\ - .cluster_name}_index_search_slowlog-%i.json.gz -appender.index_search_slowlog_rolling.policies.type = Policies -appender.index_search_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.index_search_slowlog_rolling.policies.size.size = 1GB -appender.index_search_slowlog_rolling.strategy.type = DefaultRolloverStrategy -appender.index_search_slowlog_rolling.strategy.max = 4 -################################################# - -################################################# -logger.index_search_slowlog_rolling.name = index.search.slowlog -logger.index_search_slowlog_rolling.level = trace -logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling -logger.index_search_slowlog_rolling.additivity = false - -######## Indexing slowlog JSON ################## -appender.index_indexing_slowlog_rolling.type = RollingFile -appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling -appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}\ - _index_indexing_slowlog.json -appender.index_indexing_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_indexing_slowlog_rolling.layout.dataset = elasticsearch.index_indexing_slowlog - - -appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}\ - _index_indexing_slowlog-%i.json.gz -appender.index_indexing_slowlog_rolling.policies.type = Policies -appender.index_indexing_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.index_indexing_slowlog_rolling.policies.size.size = 1GB -appender.index_indexing_slowlog_rolling.strategy.type = DefaultRolloverStrategy -appender.index_indexing_slowlog_rolling.strategy.max = 4 -################################################# - - -logger.index_indexing_slowlog.name = index.indexing.slowlog.index -logger.index_indexing_slowlog.level = trace -logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling -logger.index_indexing_slowlog.additivity = false - - -logger.org_apache_pdfbox.name = org.apache.pdfbox -logger.org_apache_pdfbox.level = off - -logger.org_apache_poi.name = org.apache.poi -logger.org_apache_poi.level = off - -logger.org_apache_fontbox.name = org.apache.fontbox -logger.org_apache_fontbox.level = off - -logger.org_apache_xmlbeans.name = org.apache.xmlbeans -logger.org_apache_xmlbeans.level = off - - -logger.com_amazonaws.name = com.amazonaws -logger.com_amazonaws.level = warn - -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.name = com.amazonaws.jmx.SdkMBeanRegistrySupport -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.level = error - -logger.com_amazonaws_metrics_AwsSdkMetrics.name = com.amazonaws.metrics.AwsSdkMetrics -logger.com_amazonaws_metrics_AwsSdkMetrics.level = error - -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.name = com.amazonaws.auth.profile.internal.BasicProfileConfigFileLoader -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.level = error - -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.name = com.amazonaws.services.s3.internal.UseArnRegionResolver -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.level = error - - -appender.audit_rolling.type = RollingFile -appender.audit_rolling.name = audit_rolling -appender.audit_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_audit.json -appender.audit_rolling.layout.type = PatternLayout -appender.audit_rolling.layout.pattern = {\ - "type":"audit", \ - "timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ}"\ - %varsNotEmpty{, "cluster.name":"%enc{%map{cluster.name}}{JSON}"}\ - %varsNotEmpty{, "cluster.uuid":"%enc{%map{cluster.uuid}}{JSON}"}\ - %varsNotEmpty{, "node.name":"%enc{%map{node.name}}{JSON}"}\ - %varsNotEmpty{, "node.id":"%enc{%map{node.id}}{JSON}"}\ - %varsNotEmpty{, "host.name":"%enc{%map{host.name}}{JSON}"}\ - %varsNotEmpty{, "host.ip":"%enc{%map{host.ip}}{JSON}"}\ - %varsNotEmpty{, "event.type":"%enc{%map{event.type}}{JSON}"}\ - %varsNotEmpty{, "event.action":"%enc{%map{event.action}}{JSON}"}\ - %varsNotEmpty{, "authentication.type":"%enc{%map{authentication.type}}{JSON}"}\ - %varsNotEmpty{, "user.name":"%enc{%map{user.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.name":"%enc{%map{user.run_by.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.name":"%enc{%map{user.run_as.name}}{JSON}"}\ - %varsNotEmpty{, "user.realm":"%enc{%map{user.realm}}{JSON}"}\ - %varsNotEmpty{, "user.realm_domain":"%enc{%map{user.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm":"%enc{%map{user.run_by.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm_domain":"%enc{%map{user.run_by.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm":"%enc{%map{user.run_as.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm_domain":"%enc{%map{user.run_as.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.roles":%map{user.roles}}\ - %varsNotEmpty{, "apikey.id":"%enc{%map{apikey.id}}{JSON}"}\ - %varsNotEmpty{, "apikey.name":"%enc{%map{apikey.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.name":"%enc{%map{authentication.token.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.type":"%enc{%map{authentication.token.type}}{JSON}"}\ - %varsNotEmpty{, "cross_cluster_access":%map{cross_cluster_access}}\ - %varsNotEmpty{, "origin.type":"%enc{%map{origin.type}}{JSON}"}\ - %varsNotEmpty{, "origin.address":"%enc{%map{origin.address}}{JSON}"}\ - %varsNotEmpty{, "realm":"%enc{%map{realm}}{JSON}"}\ - %varsNotEmpty{, "realm_domain":"%enc{%map{realm_domain}}{JSON}"}\ - %varsNotEmpty{, "url.path":"%enc{%map{url.path}}{JSON}"}\ - %varsNotEmpty{, "url.query":"%enc{%map{url.query}}{JSON}"}\ - %varsNotEmpty{, "request.method":"%enc{%map{request.method}}{JSON}"}\ - %varsNotEmpty{, "request.body":"%enc{%map{request.body}}{JSON}"}\ - %varsNotEmpty{, "request.id":"%enc{%map{request.id}}{JSON}"}\ - %varsNotEmpty{, "action":"%enc{%map{action}}{JSON}"}\ - %varsNotEmpty{, "request.name":"%enc{%map{request.name}}{JSON}"}\ - %varsNotEmpty{, "indices":%map{indices}}\ - %varsNotEmpty{, "opaque_id":"%enc{%map{opaque_id}}{JSON}"}\ - %varsNotEmpty{, "trace.id":"%enc{%map{trace.id}}{JSON}"}\ - %varsNotEmpty{, "x_forwarded_for":"%enc{%map{x_forwarded_for}}{JSON}"}\ - %varsNotEmpty{, "transport.profile":"%enc{%map{transport.profile}}{JSON}"}\ - %varsNotEmpty{, "rule":"%enc{%map{rule}}{JSON}"}\ - %varsNotEmpty{, "put":%map{put}}\ - %varsNotEmpty{, "delete":%map{delete}}\ - %varsNotEmpty{, "change":%map{change}}\ - %varsNotEmpty{, "create":%map{create}}\ - %varsNotEmpty{, "invalidate":%map{invalidate}}\ - }%n -# "node.name" node name from the `elasticsearch.yml` settings -# "node.id" node id which should not change between cluster restarts -# "host.name" unresolved hostname of the local node -# "host.ip" the local bound ip (i.e. the ip listening for connections) -# "origin.type" a received REST request is translated into one or more transport requests. This indicates which processing layer generated the event "rest" or "transport" (internal) -# "event.action" the name of the audited event, eg. "authentication_failed", "access_granted", "run_as_granted", etc. -# "authentication.type" one of "realm", "api_key", "token", "anonymous" or "internal" -# "user.name" the subject name as authenticated by a realm -# "user.run_by.name" the original authenticated subject name that is impersonating another one. -# "user.run_as.name" if this "event.action" is of a run_as type, this is the subject name to be impersonated as. -# "user.realm" the name of the realm that authenticated "user.name" -# "user.realm_domain" if "user.realm" is under a domain, this is the name of the domain -# "user.run_by.realm" the realm name of the impersonating subject ("user.run_by.name") -# "user.run_by.realm_domain" if "user.run_by.realm" is under a domain, this is the name of the domain -# "user.run_as.realm" if this "event.action" is of a run_as type, this is the realm name the impersonated user is looked up from -# "user.run_as.realm_domain" if "user.run_as.realm" is under a domain, this is the name of the domain -# "user.roles" the roles array of the user; these are the roles that are granting privileges -# "apikey.id" this field is present if and only if the "authentication.type" is "api_key" -# "apikey.name" this field is present if and only if the "authentication.type" is "api_key" -# "authentication.token.name" this field is present if and only if the authenticating credential is a service account token -# "authentication.token.type" this field is present if and only if the authenticating credential is a service account token -# "cross_cluster_access" this field is present if and only if the associated authentication occurred cross cluster -# "event.type" informs about what internal system generated the event; possible values are "rest", "transport", "ip_filter" and "security_config_change" -# "origin.address" the remote address and port of the first network hop, i.e. a REST proxy or another cluster node -# "realm" name of a realm that has generated an "authentication_failed" or an "authentication_successful"; the subject is not yet authenticated -# "realm_domain" if "realm" is under a domain, this is the name of the domain -# "url.path" the URI component between the port and the query string; it is percent (URL) encoded -# "url.query" the URI component after the path and before the fragment; it is percent (URL) encoded -# "request.method" the method of the HTTP request, i.e. one of GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, TRACE, CONNECT -# "request.body" the content of the request body entity, JSON escaped -# "request.id" a synthetic identifier for the incoming request, this is unique per incoming request, and consistent across all audit events generated by that request -# "action" an action is the most granular operation that is authorized and this identifies it in a namespaced way (internal) -# "request.name" if the event is in connection to a transport message this is the name of the request class, similar to how rest requests are identified by the url path (internal) -# "indices" the array of indices that the "action" is acting upon -# "opaque_id" opaque value conveyed by the "X-Opaque-Id" request header -# "trace_id" an identifier conveyed by the part of "traceparent" request header -# "x_forwarded_for" the addresses from the "X-Forwarded-For" request header, as a verbatim string value (not an array) -# "transport.profile" name of the transport profile in case this is a "connection_granted" or "connection_denied" event -# "rule" name of the applied rule if the "origin.type" is "ip_filter" -# the "put", "delete", "change", "create", "invalidate" fields are only present -# when the "event.type" is "security_config_change" and contain the security config change (as an object) taking effect - -appender.audit_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_audit-%d{yyyy-MM-dd}-%i.json.gz -appender.audit_rolling.policies.type = Policies -appender.audit_rolling.policies.time.type = TimeBasedTriggeringPolicy -appender.audit_rolling.policies.time.interval = 1 -appender.audit_rolling.policies.time.modulate = true -appender.audit_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.audit_rolling.policies.size.size = 1GB -appender.audit_rolling.strategy.type = DefaultRolloverStrategy -appender.audit_rolling.strategy.fileIndex = nomax - -logger.xpack_security_audit_logfile.name = org.elasticsearch.xpack.security.audit.logfile.LoggingAuditTrail -logger.xpack_security_audit_logfile.level = info -logger.xpack_security_audit_logfile.appenderRef.audit_rolling.ref = audit_rolling -logger.xpack_security_audit_logfile.additivity = false - -logger.xmlsig.name = org.apache.xml.security.signature.XMLSignature -logger.xmlsig.level = error -logger.samlxml_decrypt.name = org.opensaml.xmlsec.encryption.support.Decrypter -logger.samlxml_decrypt.level = fatal -logger.saml2_decrypt.name = org.opensaml.saml.saml2.encryption.Decrypter -logger.saml2_decrypt.level = fatal diff --git a/elasticsearch/config/es02/log4j2.properties b/elasticsearch/config/es02/log4j2.properties deleted file mode 100644 index c0d67c8e..00000000 --- a/elasticsearch/config/es02/log4j2.properties +++ /dev/null @@ -1,193 +0,0 @@ -status = error - -######## Server JSON ############################ -appender.rolling.type = Console -appender.rolling.name = rolling -appender.rolling.layout.type = ECSJsonLayout -appender.rolling.layout.dataset = elasticsearch.server - -################################################ - -################################################ - -rootLogger.level = info -rootLogger.appenderRef.rolling.ref = rolling - -######## Deprecation JSON ####################### -appender.deprecation_rolling.type = Console -appender.deprecation_rolling.name = deprecation_rolling -appender.deprecation_rolling.layout.type = ECSJsonLayout -# Intentionally follows a different pattern to above -appender.deprecation_rolling.layout.dataset = deprecation.elasticsearch -appender.deprecation_rolling.filter.rate_limit.type = RateLimitingFilter - -appender.header_warning.type = HeaderWarningAppender -appender.header_warning.name = header_warning -################################################# - -logger.deprecation.name = org.elasticsearch.deprecation -logger.deprecation.level = WARN -logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling -logger.deprecation.appenderRef.header_warning.ref = header_warning -logger.deprecation.additivity = false - -######## Search slowlog JSON #################### -appender.index_search_slowlog_rolling.type = Console -appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling -appender.index_search_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_search_slowlog_rolling.layout.dataset = elasticsearch.index_search_slowlog - -################################################# - -################################################# -logger.index_search_slowlog_rolling.name = index.search.slowlog -logger.index_search_slowlog_rolling.level = trace -logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling -logger.index_search_slowlog_rolling.additivity = false - -######## Indexing slowlog JSON ################## -appender.index_indexing_slowlog_rolling.type = Console -appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling -appender.index_indexing_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_indexing_slowlog_rolling.layout.dataset = elasticsearch.index_indexing_slowlog - -################################################# - -logger.index_indexing_slowlog.name = index.indexing.slowlog.index -logger.index_indexing_slowlog.level = trace -logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling -logger.index_indexing_slowlog.additivity = false - -logger.org_apache_pdfbox.name = org.apache.pdfbox -logger.org_apache_pdfbox.level = off - -logger.org_apache_poi.name = org.apache.poi -logger.org_apache_poi.level = off - -logger.org_apache_fontbox.name = org.apache.fontbox -logger.org_apache_fontbox.level = off - -logger.org_apache_xmlbeans.name = org.apache.xmlbeans -logger.org_apache_xmlbeans.level = off - -logger.com_amazonaws.name = com.amazonaws -logger.com_amazonaws.level = warn - -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.name = com.amazonaws.jmx.SdkMBeanRegistrySupport -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.level = error - -logger.com_amazonaws_metrics_AwsSdkMetrics.name = com.amazonaws.metrics.AwsSdkMetrics -logger.com_amazonaws_metrics_AwsSdkMetrics.level = error - -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.name = com.amazonaws.auth.profile.internal.BasicProfileConfigFileLoader -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.level = error - -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.name = com.amazonaws.services.s3.internal.UseArnRegionResolver -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.level = error - -appender.audit_rolling.type = Console -appender.audit_rolling.name = audit_rolling -appender.audit_rolling.layout.type = PatternLayout -appender.audit_rolling.layout.pattern = {\ - "type":"audit", \ - "timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ}"\ - %varsNotEmpty{, "cluster.name":"%enc{%map{cluster.name}}{JSON}"}\ - %varsNotEmpty{, "cluster.uuid":"%enc{%map{cluster.uuid}}{JSON}"}\ - %varsNotEmpty{, "node.name":"%enc{%map{node.name}}{JSON}"}\ - %varsNotEmpty{, "node.id":"%enc{%map{node.id}}{JSON}"}\ - %varsNotEmpty{, "host.name":"%enc{%map{host.name}}{JSON}"}\ - %varsNotEmpty{, "host.ip":"%enc{%map{host.ip}}{JSON}"}\ - %varsNotEmpty{, "event.type":"%enc{%map{event.type}}{JSON}"}\ - %varsNotEmpty{, "event.action":"%enc{%map{event.action}}{JSON}"}\ - %varsNotEmpty{, "authentication.type":"%enc{%map{authentication.type}}{JSON}"}\ - %varsNotEmpty{, "user.name":"%enc{%map{user.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.name":"%enc{%map{user.run_by.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.name":"%enc{%map{user.run_as.name}}{JSON}"}\ - %varsNotEmpty{, "user.realm":"%enc{%map{user.realm}}{JSON}"}\ - %varsNotEmpty{, "user.realm_domain":"%enc{%map{user.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm":"%enc{%map{user.run_by.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm_domain":"%enc{%map{user.run_by.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm":"%enc{%map{user.run_as.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm_domain":"%enc{%map{user.run_as.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.roles":%map{user.roles}}\ - %varsNotEmpty{, "apikey.id":"%enc{%map{apikey.id}}{JSON}"}\ - %varsNotEmpty{, "apikey.name":"%enc{%map{apikey.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.name":"%enc{%map{authentication.token.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.type":"%enc{%map{authentication.token.type}}{JSON}"}\ - %varsNotEmpty{, "cross_cluster_access":%map{cross_cluster_access}}\ - %varsNotEmpty{, "origin.type":"%enc{%map{origin.type}}{JSON}"}\ - %varsNotEmpty{, "origin.address":"%enc{%map{origin.address}}{JSON}"}\ - %varsNotEmpty{, "realm":"%enc{%map{realm}}{JSON}"}\ - %varsNotEmpty{, "realm_domain":"%enc{%map{realm_domain}}{JSON}"}\ - %varsNotEmpty{, "url.path":"%enc{%map{url.path}}{JSON}"}\ - %varsNotEmpty{, "url.query":"%enc{%map{url.query}}{JSON}"}\ - %varsNotEmpty{, "request.method":"%enc{%map{request.method}}{JSON}"}\ - %varsNotEmpty{, "request.body":"%enc{%map{request.body}}{JSON}"}\ - %varsNotEmpty{, "request.id":"%enc{%map{request.id}}{JSON}"}\ - %varsNotEmpty{, "action":"%enc{%map{action}}{JSON}"}\ - %varsNotEmpty{, "request.name":"%enc{%map{request.name}}{JSON}"}\ - %varsNotEmpty{, "indices":%map{indices}}\ - %varsNotEmpty{, "opaque_id":"%enc{%map{opaque_id}}{JSON}"}\ - %varsNotEmpty{, "trace.id":"%enc{%map{trace.id}}{JSON}"}\ - %varsNotEmpty{, "x_forwarded_for":"%enc{%map{x_forwarded_for}}{JSON}"}\ - %varsNotEmpty{, "transport.profile":"%enc{%map{transport.profile}}{JSON}"}\ - %varsNotEmpty{, "rule":"%enc{%map{rule}}{JSON}"}\ - %varsNotEmpty{, "put":%map{put}}\ - %varsNotEmpty{, "delete":%map{delete}}\ - %varsNotEmpty{, "change":%map{change}}\ - %varsNotEmpty{, "create":%map{create}}\ - %varsNotEmpty{, "invalidate":%map{invalidate}}\ - }%n -# "node.name" node name from the `elasticsearch.yml` settings -# "node.id" node id which should not change between cluster restarts -# "host.name" unresolved hostname of the local node -# "host.ip" the local bound ip (i.e. the ip listening for connections) -# "origin.type" a received REST request is translated into one or more transport requests. This indicates which processing layer generated the event "rest" or "transport" (internal) -# "event.action" the name of the audited event, eg. "authentication_failed", "access_granted", "run_as_granted", etc. -# "authentication.type" one of "realm", "api_key", "token", "anonymous" or "internal" -# "user.name" the subject name as authenticated by a realm -# "user.run_by.name" the original authenticated subject name that is impersonating another one. -# "user.run_as.name" if this "event.action" is of a run_as type, this is the subject name to be impersonated as. -# "user.realm" the name of the realm that authenticated "user.name" -# "user.realm_domain" if "user.realm" is under a domain, this is the name of the domain -# "user.run_by.realm" the realm name of the impersonating subject ("user.run_by.name") -# "user.run_by.realm_domain" if "user.run_by.realm" is under a domain, this is the name of the domain -# "user.run_as.realm" if this "event.action" is of a run_as type, this is the realm name the impersonated user is looked up from -# "user.run_as.realm_domain" if "user.run_as.realm" is under a domain, this is the name of the domain -# "user.roles" the roles array of the user; these are the roles that are granting privileges -# "apikey.id" this field is present if and only if the "authentication.type" is "api_key" -# "apikey.name" this field is present if and only if the "authentication.type" is "api_key" -# "authentication.token.name" this field is present if and only if the authenticating credential is a service account token -# "authentication.token.type" this field is present if and only if the authenticating credential is a service account token -# "cross_cluster_access" this field is present if and only if the associated authentication occurred cross cluster -# "event.type" informs about what internal system generated the event; possible values are "rest", "transport", "ip_filter" and "security_config_change" -# "origin.address" the remote address and port of the first network hop, i.e. a REST proxy or another cluster node -# "realm" name of a realm that has generated an "authentication_failed" or an "authentication_successful"; the subject is not yet authenticated -# "realm_domain" if "realm" is under a domain, this is the name of the domain -# "url.path" the URI component between the port and the query string; it is percent (URL) encoded -# "url.query" the URI component after the path and before the fragment; it is percent (URL) encoded -# "request.method" the method of the HTTP request, i.e. one of GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, TRACE, CONNECT -# "request.body" the content of the request body entity, JSON escaped -# "request.id" a synthetic identifier for the incoming request, this is unique per incoming request, and consistent across all audit events generated by that request -# "action" an action is the most granular operation that is authorized and this identifies it in a namespaced way (internal) -# "request.name" if the event is in connection to a transport message this is the name of the request class, similar to how rest requests are identified by the url path (internal) -# "indices" the array of indices that the "action" is acting upon -# "opaque_id" opaque value conveyed by the "X-Opaque-Id" request header -# "trace_id" an identifier conveyed by the part of "traceparent" request header -# "x_forwarded_for" the addresses from the "X-Forwarded-For" request header, as a verbatim string value (not an array) -# "transport.profile" name of the transport profile in case this is a "connection_granted" or "connection_denied" event -# "rule" name of the applied rule if the "origin.type" is "ip_filter" -# the "put", "delete", "change", "create", "invalidate" fields are only present -# when the "event.type" is "security_config_change" and contain the security config change (as an object) taking effect - -logger.xpack_security_audit_logfile.name = org.elasticsearch.xpack.security.audit.logfile.LoggingAuditTrail -logger.xpack_security_audit_logfile.level = info -logger.xpack_security_audit_logfile.appenderRef.audit_rolling.ref = audit_rolling -logger.xpack_security_audit_logfile.additivity = false - -logger.xmlsig.name = org.apache.xml.security.signature.XMLSignature -logger.xmlsig.level = error -logger.samlxml_decrypt.name = org.opensaml.xmlsec.encryption.support.Decrypter -logger.samlxml_decrypt.level = fatal -logger.saml2_decrypt.name = org.opensaml.saml.saml2.encryption.Decrypter -logger.saml2_decrypt.level = fatal \ No newline at end of file diff --git a/elasticsearch/config/es02/role_mapping.yml b/elasticsearch/config/es02/role_mapping.yml deleted file mode 100644 index 68c82f7e..00000000 --- a/elasticsearch/config/es02/role_mapping.yml +++ /dev/null @@ -1,14 +0,0 @@ -# Role mapping configuration file which has elasticsearch roles as keys -# that map to one or more user or group distinguished names - -#roleA: this is an elasticsearch role -# - groupA-DN this is a group distinguished name -# - groupB-DN -# - user1-DN this is the full user distinguished name - -#power_user: -# - "cn=admins,dc=example,dc=com" -#user: -# - "cn=users,dc=example,dc=com" -# - "cn=admins,dc=example,dc=com" -# - "cn=John Doe,cn=other users,dc=example,dc=com" diff --git a/elasticsearch/config/es02/roles.yml b/elasticsearch/config/es02/roles.yml deleted file mode 100644 index 68e003b8..00000000 --- a/elasticsearch/config/es02/roles.yml +++ /dev/null @@ -1,3 +0,0 @@ -# The default roles file is empty as the preferred method of defining roles is -# through the API/UI. File based roles are useful in error scenarios when the -# API based roles may not be available. diff --git a/elasticsearch/config/es02/users b/elasticsearch/config/es02/users deleted file mode 100644 index e69de29b..00000000 diff --git a/elasticsearch/config/es02/users_roles b/elasticsearch/config/es02/users_roles deleted file mode 100644 index e69de29b..00000000 diff --git a/elasticsearch/config/es03/ca.crt b/elasticsearch/config/es03/ca.crt deleted file mode 100755 index d8c6ffd4..00000000 --- a/elasticsearch/config/es03/ca.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIVAO2BMtuZgADcrNJORc/UB2rj/y6JMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI0MDUyNzE5NTg0OVoXDTI3MDUyNzE5NTg0OVowNDEyMDAG -A1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5lcmF0ZWQgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCat4tgRPHYWsZrygCUNASc -cc4wGONcNzRkn7LRbF+jWVcx3G8SLK1uY5w0jdC+mioRe8vIVR1amng1KtIoADxa -aV43rCNSTfPO6DsDPu9AGdoxlHrUjkpf5mPcy1hhRpVfHi01ytqSip/deA+2jShq -2naMug4o6YoqdPdiVvOrzMvuVdGeGNNrlihTHmENtI6vZp1Uq/pxZYqHhqkzlCDr -uZvhe6bLpvbbyGVpx6dJA51MuxZ6m6yEtz1fNz2fgh+2tl91hXp7WaeMDpGHaezq -cCbiHSMG9vXhU8fsgTTB2NONiGiH/635VZcTbbS9dtDeUe4Y/vEY0uURU2dyBF3L -AgMBAAGjUzBRMB0GA1UdDgQWBBRSHBPSZApefVLWs8FZB/ROLMos9DAfBgNVHSME -GDAWgBRSHBPSZApefVLWs8FZB/ROLMos9DAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBCwUAA4IBAQB2Hfsz3RT9Y+th7haS4C6yI4ZnwirEehexM9RjjIWlCS/i -c3IZ1dwJlR1pI6jeFjhF6iEnWY24cxH2GvZrynIrwACSJBibzVuMa/4+7pcF2xQS -L9H+18StNK2S51a1xxzfhlQpTizea05rnLpkhJP52PfUaoWD42kPz8t8ITafD5ay -IzKiz+aL1+elT+Tlmcmi2k0s+sJahLrcI62jUsmUB474fsv/00DWEBaSRKVXCy4D -pUv2PKV+EElHiM65UlMxZ7q5KBWsCvotILrIeP7rJZE3uloe6UTeZ0CSTDiQNCOb -jonBnKm6Zw7z2Io9Jl0yJJg0kl8tc8OFsV85p9RO ------END CERTIFICATE----- diff --git a/elasticsearch/config/es03/elasticsearch-plugins.example.yml b/elasticsearch/config/es03/elasticsearch-plugins.example.yml deleted file mode 100644 index b6874e91..00000000 --- a/elasticsearch/config/es03/elasticsearch-plugins.example.yml +++ /dev/null @@ -1,27 +0,0 @@ -# Rename this file to `elasticsearch-plugins.yml` to use it. -# -# All plugins must be listed here. If you add a plugin to this list and run -# `elasticsearch-plugin sync`, that plugin will be installed. If you remove -# a plugin from this list, that plugin will be removed when Elasticsearch -# next starts. - -plugins: - # Each plugin must have an ID. Plugins with only an ID are official plugins and will be downloaded from Elastic. - - id: example-id - - # Plugins can be specified by URL (it doesn't have to be HTTP, you could use e.g. `file:`) - - id: example-with-url - location: https://some.domain/path/example4.zip - - # Or by maven coordinates: - - id: example-with-maven-url - location: org.elasticsearch.plugins:example-plugin:1.2.3 - - # A proxy can also be configured per-plugin, if necessary - - id: example-with-proxy - location: https://some.domain/path/example.zip - proxy: https://some.domain:1234 - -# Configures a proxy for all network access. Remove this if you don't need -# to use a proxy. -proxy: https://some.domain:1234 diff --git a/elasticsearch/config/es03/elasticsearch.keystore b/elasticsearch/config/es03/elasticsearch.keystore deleted file mode 100644 index 260202e5..00000000 Binary files a/elasticsearch/config/es03/elasticsearch.keystore and /dev/null differ diff --git a/elasticsearch/config/es03/elasticsearch.yml b/elasticsearch/config/es03/elasticsearch.yml deleted file mode 100644 index 00daceba..00000000 --- a/elasticsearch/config/es03/elasticsearch.yml +++ /dev/null @@ -1,19 +0,0 @@ -node.name: es03 -path.data: /usr/share/elasticsearch/data -path.logs: /usr/share/elasticsearch/logs -network.host: 127.0.0.1 -cluster.name: docker-cluster -discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301", "127.0.0.1:9302"] -cluster.initial_master_nodes: ["es01", "es02", "es03"] -bootstrap.memory_lock: false -xpack.security.enabled: true -xpack.security.http.ssl.enabled: true -xpack.security.http.ssl.key: es03.key -xpack.security.http.ssl.certificate: es03.crt -xpack.security.http.ssl.certificate_authorities: ["ca.crt"] -xpack.security.transport.ssl.enabled: true -xpack.security.transport.ssl.verification_mode: certificate -xpack.security.transport.ssl.key: es03.key -xpack.security.transport.ssl.certificate: es03.crt -xpack.security.transport.ssl.certificate_authorities: ["ca.crt"] -xpack.license.self_generated.type: basic diff --git a/elasticsearch/config/es03/es03.crt b/elasticsearch/config/es03/es03.crt deleted file mode 100755 index 7d273002..00000000 --- a/elasticsearch/config/es03/es03.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgIVAPF8mVPnz7n47MH0IMhGyTp8b8hJMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI0MDUyNzE5NTg1MFoXDTI3MDUyNzE5NTg1MFowDzENMAsG -A1UEAxMEZXMwMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJD8MQOk -+jChQ/ukONKJ5NlmIMvxA30iEF0Dg1raRWu6JktXgl0PcQcqKSbCgQ8V/+jqIsKv -xzURuGH6PNnoeE7B7PSDW5aF8SOh2vIVCcuyqYCTfusv9Pkw0dXb0kkFF7p8wxG7 -xSyQncZxl9qEsEK3sKuR71rHnBF4r7fxuV+QV3ZLzwzJ4xTGFRd7wgrf/N7/iDXC -lrOzslTOj6BxIMQT04Jizm5/Sxcp+9gj89Loxs3Ls3cTNhaWnNl4IDQtaA8LlK2Z -8mC6+UgID3Px0ZfMcp7Qlm8lyX+loFOIFKlBm3RJ/ju566acXM0rrxMCaERxzVh6 -w/RFQ+s9ZEcorrkCAwEAAaNvMG0wHQYDVR0OBBYEFMFV0lcS1xlPM1wnUlztTiKA -2S2WMB8GA1UdIwQYMBaAFFIcE9JkCl59UtazwVkH9E4syiz0MCAGA1UdEQQZMBeH -BH8AAAGCBGVzMDOCCWxvY2FsaG9zdDAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUA -A4IBAQA3jD18KNhrXHJenPB/4FsQhiOgm684fO5mmmEZI14/V0snGIyoXCG4Tvfm -cRmRiOkNLZ79l9O2Feh3defyocED2soPJkjGbGMA6u5CW9B+32yEprfQ/JXOvKKL -zSIXUoa9h22rznuopsq8VQwIV7NFz1ATNllgyyEzKshGpk37Almso3lsX+PFX466 -SUDbNI7f3z8RYUg0uGqjepnJV0v6k5yOWStKmJ9j1uuK0rkKIBUcgOW4Fb2vyqkp -DTCtR8Q6g9+exZV+gezsOXvbf+mrVf48sOOQ0g9YkUTMHoXw/k7pQg/ixWTE6rSm -KhVWEziUuxCqaSOVgEY0qTWgKNP4 ------END CERTIFICATE----- diff --git a/elasticsearch/config/es03/es03.key b/elasticsearch/config/es03/es03.key deleted file mode 100755 index ff809b20..00000000 --- a/elasticsearch/config/es03/es03.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAkPwxA6T6MKFD+6Q40onk2WYgy/EDfSIQXQODWtpFa7omS1eC -XQ9xByopJsKBDxX/6Ooiwq/HNRG4Yfo82eh4TsHs9INbloXxI6Ha8hUJy7KpgJN+ -6y/0+TDR1dvSSQUXunzDEbvFLJCdxnGX2oSwQrewq5HvWsecEXivt/G5X5BXdkvP -DMnjFMYVF3vCCt/83v+INcKWs7OyVM6PoHEgxBPTgmLObn9LFyn72CPz0ujGzcuz -dxM2Fpac2XggNC1oDwuUrZnyYLr5SAgPc/HRl8xyntCWbyXJf6WgU4gUqUGbdEn+ -O7nrppxczSuvEwJoRHHNWHrD9EVD6z1kRyiuuQIDAQABAoIBAAeRot1rLMSCfBIU -WK26aoAO8iyzawM1VrVZtu8fRfssafi08NFQOmOtXR3w5DFCwha0DRcs0LGB41D6 -HK3OPQ701hyjCZJUxmnzIS2ne4Nu0vqAuLd+dsOA5kjL2QaG2t5EH8rlNT3xBCDq -p+AjMoXJISf+eQhm3fbriKuJqwEaFoFs8gFOm7BKSzw4nFdwaBI0hO7QQng9Um8x -g27R+mJAGG+fNFJuDFD6gy2iIN+xkrNP9WGlFmEV4OoCUi1hz5YfxNRs2xCxUA3E -ggzcU0UvmLccHwz6PYK8EzTmsZUJsLRJTyG3WuNuaVTN67oMLYRv7GlGdZ998+HE -7m3KU6ECgYEAurfhPf8ACbMxR49iF62QJUzHM5xu0Qq85z6lWKHiCXWaIcqNv2mI -qnao9a5wBqEsTNNLljDlr99u8stHt+Zx3gAA1F5Pew/3quwOtaFx+zvxqrQKs6pb -cz3q9Ad8sJVthr06SW5W4OvdDGOF52EV+bcITZCetENmk9jvbN6z0ucCgYEAxsgi -enAcripDIT8uxhiEWxEtnsZunOsGWzXKcKJeg7w7cErqHRBb4liPenq3B/6sIp3r -AwPyqRIfVXZNbOpEPwoaF/1bQ9HujHuO0HEMsoeJh12KkBSBuHQXnA/X01Y6Nf0l -ZijizBE/Qc5EkWyxZx+pSTf7RVGf+1DlmKBE3V8CgYBIWUurrA0ltQtZQROvPQ9n -hJKDSxAda926dKm46DEfnTP19/hovMm503SwjcDWsMjrk8vsDFJTjW3+IgpOFbr1 -XGb14v1FH/DFh+ZDNqVlxdpkXJLw/wekZc+OcwA7pArmdJgLL/f1+y6RyFZwS0wq -kGNlOq5kBuHOU/ah5sEi7QKBgQDGiT1mbHM4wJ0rp59f2zzWd+HIowf3UgWXM7Jt -rL4ZdPcowKnzPVOITkt/WPFV2tax/GetK1RB6QfCo9XQ4monTD+jljiBFDvds8qA -BWlZJmYF/TdXkCO/xrON+4TkX0rkgWHJFyzuBIvZfdqeJKFLDiRWLMOaCFxw9eta -9TfSoQKBgEhHjogylvtkkiDIg+ArNhezYCjZ2yVPPsM8Jejh3sFpmjHHLaiw86Np -fRrxp3ealK1DXziRni+USCNM8iM6GFo2I6jBMWTJDTsc6wSyYLu4MlLTXyobZZnc -SwtvyZip2+VL4qEeg9p2c5wxbDBPdxh/8vjW9QxCeAovIr/0lth4 ------END RSA PRIVATE KEY----- diff --git a/elasticsearch/config/es03/jvm.options b/elasticsearch/config/es03/jvm.options deleted file mode 100644 index 0b1af90f..00000000 --- a/elasticsearch/config/es03/jvm.options +++ /dev/null @@ -1,79 +0,0 @@ -################################################################ -## -## JVM configuration -## -################################################################ -## -## WARNING: DO NOT EDIT THIS FILE. If you want to override the -## JVM options in this file, or set any additional options, you -## should create one or more files in the jvm.options.d -## directory containing your adjustments. -## -## See https://www.elastic.co/guide/en/elasticsearch/reference/8.13/jvm-options.html -## for more information. -## -################################################################ - - - -################################################################ -## IMPORTANT: JVM heap size -################################################################ -## -## The heap size is automatically configured by Elasticsearch -## based on the available memory in your system and the roles -## each node is configured to fulfill. If specifying heap is -## required, it should be done through a file in jvm.options.d, -## which should be named with .options suffix, and the min and -## max should be set to the same value. For example, to set the -## heap to 4 GB, create a new file in the jvm.options.d -## directory containing these lines: -## -## -Xms4g -## -Xmx4g -## -## See https://www.elastic.co/guide/en/elasticsearch/reference/8.13/heap-size.html -## for more information -## -################################################################ - - -################################################################ -## Expert settings -################################################################ -## -## All settings below here are considered expert settings. Do -## not adjust them unless you understand what you are doing. Do -## not edit them in this file; instead, create a new file in the -## jvm.options.d directory containing your adjustments. -## -################################################################ - --XX:+UseG1GC - -## JVM temporary directory --Djava.io.tmpdir=${ES_TMPDIR} - -# Leverages accelerated vector hardware instructions; removing this may -# result in less optimal vector performance -20-:--add-modules=jdk.incubator.vector - -## heap dumps - -# generate a heap dump when an allocation from the Java heap fails; heap dumps -# are created in the working directory of the JVM unless an alternative path is -# specified --XX:+HeapDumpOnOutOfMemoryError - -# exit right after heap dump on out of memory error --XX:+ExitOnOutOfMemoryError - -# specify an alternative path for heap dumps; ensure the directory exists and -# has sufficient space --XX:HeapDumpPath=data - -# specify an alternative path for JVM fatal error logs --XX:ErrorFile=logs/hs_err_pid%p.log - -## GC logging --Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,level,pid,tags:filecount=32,filesize=64m diff --git a/elasticsearch/config/es03/log4j2.file.properties b/elasticsearch/config/es03/log4j2.file.properties deleted file mode 100644 index 5bb63ce1..00000000 --- a/elasticsearch/config/es03/log4j2.file.properties +++ /dev/null @@ -1,279 +0,0 @@ -status = error - -appender.console.type = Console -appender.console.name = console -appender.console.layout.type = PatternLayout -appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%consoleException%n - -######## Server JSON ############################ -appender.rolling.type = RollingFile -appender.rolling.name = rolling -appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json -appender.rolling.layout.type = ECSJsonLayout -appender.rolling.layout.dataset = elasticsearch.server - -appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.json.gz -appender.rolling.policies.type = Policies -appender.rolling.policies.time.type = TimeBasedTriggeringPolicy -appender.rolling.policies.time.interval = 1 -appender.rolling.policies.time.modulate = true -appender.rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.rolling.policies.size.size = 128MB -appender.rolling.strategy.type = DefaultRolloverStrategy -appender.rolling.strategy.fileIndex = nomax -appender.rolling.strategy.action.type = Delete -appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path} -appender.rolling.strategy.action.condition.type = IfFileName -appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* -appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize -appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB -################################################ -######## Server - old style pattern ########### -appender.rolling_old.type = RollingFile -appender.rolling_old.name = rolling_old -appender.rolling_old.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log -appender.rolling_old.layout.type = PatternLayout -appender.rolling_old.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%n - -appender.rolling_old.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz -appender.rolling_old.policies.type = Policies -appender.rolling_old.policies.time.type = TimeBasedTriggeringPolicy -appender.rolling_old.policies.time.interval = 1 -appender.rolling_old.policies.time.modulate = true -appender.rolling_old.policies.size.type = SizeBasedTriggeringPolicy -appender.rolling_old.policies.size.size = 128MB -appender.rolling_old.strategy.type = DefaultRolloverStrategy -appender.rolling_old.strategy.fileIndex = nomax -appender.rolling_old.strategy.action.type = Delete -appender.rolling_old.strategy.action.basepath = ${sys:es.logs.base_path} -appender.rolling_old.strategy.action.condition.type = IfFileName -appender.rolling_old.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* -appender.rolling_old.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize -appender.rolling_old.strategy.action.condition.nested_condition.exceeds = 2GB -################################################ - -rootLogger.level = info -rootLogger.appenderRef.console.ref = console -rootLogger.appenderRef.rolling.ref = rolling -rootLogger.appenderRef.rolling_old.ref = rolling_old - -######## Deprecation JSON ####################### -appender.deprecation_rolling.type = RollingFile -appender.deprecation_rolling.name = deprecation_rolling -appender.deprecation_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation.json -appender.deprecation_rolling.layout.type = ECSJsonLayout -# Intentionally follows a different pattern to above -appender.deprecation_rolling.layout.dataset = deprecation.elasticsearch -appender.deprecation_rolling.filter.rate_limit.type = RateLimitingFilter - -appender.deprecation_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation-%i.json.gz -appender.deprecation_rolling.policies.type = Policies -appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.deprecation_rolling.policies.size.size = 1GB -appender.deprecation_rolling.strategy.type = DefaultRolloverStrategy -appender.deprecation_rolling.strategy.max = 4 - -appender.header_warning.type = HeaderWarningAppender -appender.header_warning.name = header_warning -################################################# - -logger.deprecation.name = org.elasticsearch.deprecation -logger.deprecation.level = WARN -logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling -logger.deprecation.appenderRef.header_warning.ref = header_warning -logger.deprecation.additivity = false - -######## Search slowlog JSON #################### -appender.index_search_slowlog_rolling.type = RollingFile -appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling -appender.index_search_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs\ - .cluster_name}_index_search_slowlog.json -appender.index_search_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_search_slowlog_rolling.layout.dataset = elasticsearch.index_search_slowlog - -appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs\ - .cluster_name}_index_search_slowlog-%i.json.gz -appender.index_search_slowlog_rolling.policies.type = Policies -appender.index_search_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.index_search_slowlog_rolling.policies.size.size = 1GB -appender.index_search_slowlog_rolling.strategy.type = DefaultRolloverStrategy -appender.index_search_slowlog_rolling.strategy.max = 4 -################################################# - -################################################# -logger.index_search_slowlog_rolling.name = index.search.slowlog -logger.index_search_slowlog_rolling.level = trace -logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling -logger.index_search_slowlog_rolling.additivity = false - -######## Indexing slowlog JSON ################## -appender.index_indexing_slowlog_rolling.type = RollingFile -appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling -appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}\ - _index_indexing_slowlog.json -appender.index_indexing_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_indexing_slowlog_rolling.layout.dataset = elasticsearch.index_indexing_slowlog - - -appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}\ - _index_indexing_slowlog-%i.json.gz -appender.index_indexing_slowlog_rolling.policies.type = Policies -appender.index_indexing_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.index_indexing_slowlog_rolling.policies.size.size = 1GB -appender.index_indexing_slowlog_rolling.strategy.type = DefaultRolloverStrategy -appender.index_indexing_slowlog_rolling.strategy.max = 4 -################################################# - - -logger.index_indexing_slowlog.name = index.indexing.slowlog.index -logger.index_indexing_slowlog.level = trace -logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling -logger.index_indexing_slowlog.additivity = false - - -logger.org_apache_pdfbox.name = org.apache.pdfbox -logger.org_apache_pdfbox.level = off - -logger.org_apache_poi.name = org.apache.poi -logger.org_apache_poi.level = off - -logger.org_apache_fontbox.name = org.apache.fontbox -logger.org_apache_fontbox.level = off - -logger.org_apache_xmlbeans.name = org.apache.xmlbeans -logger.org_apache_xmlbeans.level = off - - -logger.com_amazonaws.name = com.amazonaws -logger.com_amazonaws.level = warn - -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.name = com.amazonaws.jmx.SdkMBeanRegistrySupport -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.level = error - -logger.com_amazonaws_metrics_AwsSdkMetrics.name = com.amazonaws.metrics.AwsSdkMetrics -logger.com_amazonaws_metrics_AwsSdkMetrics.level = error - -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.name = com.amazonaws.auth.profile.internal.BasicProfileConfigFileLoader -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.level = error - -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.name = com.amazonaws.services.s3.internal.UseArnRegionResolver -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.level = error - - -appender.audit_rolling.type = RollingFile -appender.audit_rolling.name = audit_rolling -appender.audit_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_audit.json -appender.audit_rolling.layout.type = PatternLayout -appender.audit_rolling.layout.pattern = {\ - "type":"audit", \ - "timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ}"\ - %varsNotEmpty{, "cluster.name":"%enc{%map{cluster.name}}{JSON}"}\ - %varsNotEmpty{, "cluster.uuid":"%enc{%map{cluster.uuid}}{JSON}"}\ - %varsNotEmpty{, "node.name":"%enc{%map{node.name}}{JSON}"}\ - %varsNotEmpty{, "node.id":"%enc{%map{node.id}}{JSON}"}\ - %varsNotEmpty{, "host.name":"%enc{%map{host.name}}{JSON}"}\ - %varsNotEmpty{, "host.ip":"%enc{%map{host.ip}}{JSON}"}\ - %varsNotEmpty{, "event.type":"%enc{%map{event.type}}{JSON}"}\ - %varsNotEmpty{, "event.action":"%enc{%map{event.action}}{JSON}"}\ - %varsNotEmpty{, "authentication.type":"%enc{%map{authentication.type}}{JSON}"}\ - %varsNotEmpty{, "user.name":"%enc{%map{user.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.name":"%enc{%map{user.run_by.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.name":"%enc{%map{user.run_as.name}}{JSON}"}\ - %varsNotEmpty{, "user.realm":"%enc{%map{user.realm}}{JSON}"}\ - %varsNotEmpty{, "user.realm_domain":"%enc{%map{user.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm":"%enc{%map{user.run_by.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm_domain":"%enc{%map{user.run_by.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm":"%enc{%map{user.run_as.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm_domain":"%enc{%map{user.run_as.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.roles":%map{user.roles}}\ - %varsNotEmpty{, "apikey.id":"%enc{%map{apikey.id}}{JSON}"}\ - %varsNotEmpty{, "apikey.name":"%enc{%map{apikey.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.name":"%enc{%map{authentication.token.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.type":"%enc{%map{authentication.token.type}}{JSON}"}\ - %varsNotEmpty{, "cross_cluster_access":%map{cross_cluster_access}}\ - %varsNotEmpty{, "origin.type":"%enc{%map{origin.type}}{JSON}"}\ - %varsNotEmpty{, "origin.address":"%enc{%map{origin.address}}{JSON}"}\ - %varsNotEmpty{, "realm":"%enc{%map{realm}}{JSON}"}\ - %varsNotEmpty{, "realm_domain":"%enc{%map{realm_domain}}{JSON}"}\ - %varsNotEmpty{, "url.path":"%enc{%map{url.path}}{JSON}"}\ - %varsNotEmpty{, "url.query":"%enc{%map{url.query}}{JSON}"}\ - %varsNotEmpty{, "request.method":"%enc{%map{request.method}}{JSON}"}\ - %varsNotEmpty{, "request.body":"%enc{%map{request.body}}{JSON}"}\ - %varsNotEmpty{, "request.id":"%enc{%map{request.id}}{JSON}"}\ - %varsNotEmpty{, "action":"%enc{%map{action}}{JSON}"}\ - %varsNotEmpty{, "request.name":"%enc{%map{request.name}}{JSON}"}\ - %varsNotEmpty{, "indices":%map{indices}}\ - %varsNotEmpty{, "opaque_id":"%enc{%map{opaque_id}}{JSON}"}\ - %varsNotEmpty{, "trace.id":"%enc{%map{trace.id}}{JSON}"}\ - %varsNotEmpty{, "x_forwarded_for":"%enc{%map{x_forwarded_for}}{JSON}"}\ - %varsNotEmpty{, "transport.profile":"%enc{%map{transport.profile}}{JSON}"}\ - %varsNotEmpty{, "rule":"%enc{%map{rule}}{JSON}"}\ - %varsNotEmpty{, "put":%map{put}}\ - %varsNotEmpty{, "delete":%map{delete}}\ - %varsNotEmpty{, "change":%map{change}}\ - %varsNotEmpty{, "create":%map{create}}\ - %varsNotEmpty{, "invalidate":%map{invalidate}}\ - }%n -# "node.name" node name from the `elasticsearch.yml` settings -# "node.id" node id which should not change between cluster restarts -# "host.name" unresolved hostname of the local node -# "host.ip" the local bound ip (i.e. the ip listening for connections) -# "origin.type" a received REST request is translated into one or more transport requests. This indicates which processing layer generated the event "rest" or "transport" (internal) -# "event.action" the name of the audited event, eg. "authentication_failed", "access_granted", "run_as_granted", etc. -# "authentication.type" one of "realm", "api_key", "token", "anonymous" or "internal" -# "user.name" the subject name as authenticated by a realm -# "user.run_by.name" the original authenticated subject name that is impersonating another one. -# "user.run_as.name" if this "event.action" is of a run_as type, this is the subject name to be impersonated as. -# "user.realm" the name of the realm that authenticated "user.name" -# "user.realm_domain" if "user.realm" is under a domain, this is the name of the domain -# "user.run_by.realm" the realm name of the impersonating subject ("user.run_by.name") -# "user.run_by.realm_domain" if "user.run_by.realm" is under a domain, this is the name of the domain -# "user.run_as.realm" if this "event.action" is of a run_as type, this is the realm name the impersonated user is looked up from -# "user.run_as.realm_domain" if "user.run_as.realm" is under a domain, this is the name of the domain -# "user.roles" the roles array of the user; these are the roles that are granting privileges -# "apikey.id" this field is present if and only if the "authentication.type" is "api_key" -# "apikey.name" this field is present if and only if the "authentication.type" is "api_key" -# "authentication.token.name" this field is present if and only if the authenticating credential is a service account token -# "authentication.token.type" this field is present if and only if the authenticating credential is a service account token -# "cross_cluster_access" this field is present if and only if the associated authentication occurred cross cluster -# "event.type" informs about what internal system generated the event; possible values are "rest", "transport", "ip_filter" and "security_config_change" -# "origin.address" the remote address and port of the first network hop, i.e. a REST proxy or another cluster node -# "realm" name of a realm that has generated an "authentication_failed" or an "authentication_successful"; the subject is not yet authenticated -# "realm_domain" if "realm" is under a domain, this is the name of the domain -# "url.path" the URI component between the port and the query string; it is percent (URL) encoded -# "url.query" the URI component after the path and before the fragment; it is percent (URL) encoded -# "request.method" the method of the HTTP request, i.e. one of GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, TRACE, CONNECT -# "request.body" the content of the request body entity, JSON escaped -# "request.id" a synthetic identifier for the incoming request, this is unique per incoming request, and consistent across all audit events generated by that request -# "action" an action is the most granular operation that is authorized and this identifies it in a namespaced way (internal) -# "request.name" if the event is in connection to a transport message this is the name of the request class, similar to how rest requests are identified by the url path (internal) -# "indices" the array of indices that the "action" is acting upon -# "opaque_id" opaque value conveyed by the "X-Opaque-Id" request header -# "trace_id" an identifier conveyed by the part of "traceparent" request header -# "x_forwarded_for" the addresses from the "X-Forwarded-For" request header, as a verbatim string value (not an array) -# "transport.profile" name of the transport profile in case this is a "connection_granted" or "connection_denied" event -# "rule" name of the applied rule if the "origin.type" is "ip_filter" -# the "put", "delete", "change", "create", "invalidate" fields are only present -# when the "event.type" is "security_config_change" and contain the security config change (as an object) taking effect - -appender.audit_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_audit-%d{yyyy-MM-dd}-%i.json.gz -appender.audit_rolling.policies.type = Policies -appender.audit_rolling.policies.time.type = TimeBasedTriggeringPolicy -appender.audit_rolling.policies.time.interval = 1 -appender.audit_rolling.policies.time.modulate = true -appender.audit_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.audit_rolling.policies.size.size = 1GB -appender.audit_rolling.strategy.type = DefaultRolloverStrategy -appender.audit_rolling.strategy.fileIndex = nomax - -logger.xpack_security_audit_logfile.name = org.elasticsearch.xpack.security.audit.logfile.LoggingAuditTrail -logger.xpack_security_audit_logfile.level = info -logger.xpack_security_audit_logfile.appenderRef.audit_rolling.ref = audit_rolling -logger.xpack_security_audit_logfile.additivity = false - -logger.xmlsig.name = org.apache.xml.security.signature.XMLSignature -logger.xmlsig.level = error -logger.samlxml_decrypt.name = org.opensaml.xmlsec.encryption.support.Decrypter -logger.samlxml_decrypt.level = fatal -logger.saml2_decrypt.name = org.opensaml.saml.saml2.encryption.Decrypter -logger.saml2_decrypt.level = fatal diff --git a/elasticsearch/config/es03/log4j2.properties b/elasticsearch/config/es03/log4j2.properties deleted file mode 100644 index c0d67c8e..00000000 --- a/elasticsearch/config/es03/log4j2.properties +++ /dev/null @@ -1,193 +0,0 @@ -status = error - -######## Server JSON ############################ -appender.rolling.type = Console -appender.rolling.name = rolling -appender.rolling.layout.type = ECSJsonLayout -appender.rolling.layout.dataset = elasticsearch.server - -################################################ - -################################################ - -rootLogger.level = info -rootLogger.appenderRef.rolling.ref = rolling - -######## Deprecation JSON ####################### -appender.deprecation_rolling.type = Console -appender.deprecation_rolling.name = deprecation_rolling -appender.deprecation_rolling.layout.type = ECSJsonLayout -# Intentionally follows a different pattern to above -appender.deprecation_rolling.layout.dataset = deprecation.elasticsearch -appender.deprecation_rolling.filter.rate_limit.type = RateLimitingFilter - -appender.header_warning.type = HeaderWarningAppender -appender.header_warning.name = header_warning -################################################# - -logger.deprecation.name = org.elasticsearch.deprecation -logger.deprecation.level = WARN -logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling -logger.deprecation.appenderRef.header_warning.ref = header_warning -logger.deprecation.additivity = false - -######## Search slowlog JSON #################### -appender.index_search_slowlog_rolling.type = Console -appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling -appender.index_search_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_search_slowlog_rolling.layout.dataset = elasticsearch.index_search_slowlog - -################################################# - -################################################# -logger.index_search_slowlog_rolling.name = index.search.slowlog -logger.index_search_slowlog_rolling.level = trace -logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling -logger.index_search_slowlog_rolling.additivity = false - -######## Indexing slowlog JSON ################## -appender.index_indexing_slowlog_rolling.type = Console -appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling -appender.index_indexing_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_indexing_slowlog_rolling.layout.dataset = elasticsearch.index_indexing_slowlog - -################################################# - -logger.index_indexing_slowlog.name = index.indexing.slowlog.index -logger.index_indexing_slowlog.level = trace -logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling -logger.index_indexing_slowlog.additivity = false - -logger.org_apache_pdfbox.name = org.apache.pdfbox -logger.org_apache_pdfbox.level = off - -logger.org_apache_poi.name = org.apache.poi -logger.org_apache_poi.level = off - -logger.org_apache_fontbox.name = org.apache.fontbox -logger.org_apache_fontbox.level = off - -logger.org_apache_xmlbeans.name = org.apache.xmlbeans -logger.org_apache_xmlbeans.level = off - -logger.com_amazonaws.name = com.amazonaws -logger.com_amazonaws.level = warn - -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.name = com.amazonaws.jmx.SdkMBeanRegistrySupport -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.level = error - -logger.com_amazonaws_metrics_AwsSdkMetrics.name = com.amazonaws.metrics.AwsSdkMetrics -logger.com_amazonaws_metrics_AwsSdkMetrics.level = error - -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.name = com.amazonaws.auth.profile.internal.BasicProfileConfigFileLoader -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.level = error - -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.name = com.amazonaws.services.s3.internal.UseArnRegionResolver -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.level = error - -appender.audit_rolling.type = Console -appender.audit_rolling.name = audit_rolling -appender.audit_rolling.layout.type = PatternLayout -appender.audit_rolling.layout.pattern = {\ - "type":"audit", \ - "timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ}"\ - %varsNotEmpty{, "cluster.name":"%enc{%map{cluster.name}}{JSON}"}\ - %varsNotEmpty{, "cluster.uuid":"%enc{%map{cluster.uuid}}{JSON}"}\ - %varsNotEmpty{, "node.name":"%enc{%map{node.name}}{JSON}"}\ - %varsNotEmpty{, "node.id":"%enc{%map{node.id}}{JSON}"}\ - %varsNotEmpty{, "host.name":"%enc{%map{host.name}}{JSON}"}\ - %varsNotEmpty{, "host.ip":"%enc{%map{host.ip}}{JSON}"}\ - %varsNotEmpty{, "event.type":"%enc{%map{event.type}}{JSON}"}\ - %varsNotEmpty{, "event.action":"%enc{%map{event.action}}{JSON}"}\ - %varsNotEmpty{, "authentication.type":"%enc{%map{authentication.type}}{JSON}"}\ - %varsNotEmpty{, "user.name":"%enc{%map{user.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.name":"%enc{%map{user.run_by.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.name":"%enc{%map{user.run_as.name}}{JSON}"}\ - %varsNotEmpty{, "user.realm":"%enc{%map{user.realm}}{JSON}"}\ - %varsNotEmpty{, "user.realm_domain":"%enc{%map{user.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm":"%enc{%map{user.run_by.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm_domain":"%enc{%map{user.run_by.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm":"%enc{%map{user.run_as.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm_domain":"%enc{%map{user.run_as.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.roles":%map{user.roles}}\ - %varsNotEmpty{, "apikey.id":"%enc{%map{apikey.id}}{JSON}"}\ - %varsNotEmpty{, "apikey.name":"%enc{%map{apikey.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.name":"%enc{%map{authentication.token.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.type":"%enc{%map{authentication.token.type}}{JSON}"}\ - %varsNotEmpty{, "cross_cluster_access":%map{cross_cluster_access}}\ - %varsNotEmpty{, "origin.type":"%enc{%map{origin.type}}{JSON}"}\ - %varsNotEmpty{, "origin.address":"%enc{%map{origin.address}}{JSON}"}\ - %varsNotEmpty{, "realm":"%enc{%map{realm}}{JSON}"}\ - %varsNotEmpty{, "realm_domain":"%enc{%map{realm_domain}}{JSON}"}\ - %varsNotEmpty{, "url.path":"%enc{%map{url.path}}{JSON}"}\ - %varsNotEmpty{, "url.query":"%enc{%map{url.query}}{JSON}"}\ - %varsNotEmpty{, "request.method":"%enc{%map{request.method}}{JSON}"}\ - %varsNotEmpty{, "request.body":"%enc{%map{request.body}}{JSON}"}\ - %varsNotEmpty{, "request.id":"%enc{%map{request.id}}{JSON}"}\ - %varsNotEmpty{, "action":"%enc{%map{action}}{JSON}"}\ - %varsNotEmpty{, "request.name":"%enc{%map{request.name}}{JSON}"}\ - %varsNotEmpty{, "indices":%map{indices}}\ - %varsNotEmpty{, "opaque_id":"%enc{%map{opaque_id}}{JSON}"}\ - %varsNotEmpty{, "trace.id":"%enc{%map{trace.id}}{JSON}"}\ - %varsNotEmpty{, "x_forwarded_for":"%enc{%map{x_forwarded_for}}{JSON}"}\ - %varsNotEmpty{, "transport.profile":"%enc{%map{transport.profile}}{JSON}"}\ - %varsNotEmpty{, "rule":"%enc{%map{rule}}{JSON}"}\ - %varsNotEmpty{, "put":%map{put}}\ - %varsNotEmpty{, "delete":%map{delete}}\ - %varsNotEmpty{, "change":%map{change}}\ - %varsNotEmpty{, "create":%map{create}}\ - %varsNotEmpty{, "invalidate":%map{invalidate}}\ - }%n -# "node.name" node name from the `elasticsearch.yml` settings -# "node.id" node id which should not change between cluster restarts -# "host.name" unresolved hostname of the local node -# "host.ip" the local bound ip (i.e. the ip listening for connections) -# "origin.type" a received REST request is translated into one or more transport requests. This indicates which processing layer generated the event "rest" or "transport" (internal) -# "event.action" the name of the audited event, eg. "authentication_failed", "access_granted", "run_as_granted", etc. -# "authentication.type" one of "realm", "api_key", "token", "anonymous" or "internal" -# "user.name" the subject name as authenticated by a realm -# "user.run_by.name" the original authenticated subject name that is impersonating another one. -# "user.run_as.name" if this "event.action" is of a run_as type, this is the subject name to be impersonated as. -# "user.realm" the name of the realm that authenticated "user.name" -# "user.realm_domain" if "user.realm" is under a domain, this is the name of the domain -# "user.run_by.realm" the realm name of the impersonating subject ("user.run_by.name") -# "user.run_by.realm_domain" if "user.run_by.realm" is under a domain, this is the name of the domain -# "user.run_as.realm" if this "event.action" is of a run_as type, this is the realm name the impersonated user is looked up from -# "user.run_as.realm_domain" if "user.run_as.realm" is under a domain, this is the name of the domain -# "user.roles" the roles array of the user; these are the roles that are granting privileges -# "apikey.id" this field is present if and only if the "authentication.type" is "api_key" -# "apikey.name" this field is present if and only if the "authentication.type" is "api_key" -# "authentication.token.name" this field is present if and only if the authenticating credential is a service account token -# "authentication.token.type" this field is present if and only if the authenticating credential is a service account token -# "cross_cluster_access" this field is present if and only if the associated authentication occurred cross cluster -# "event.type" informs about what internal system generated the event; possible values are "rest", "transport", "ip_filter" and "security_config_change" -# "origin.address" the remote address and port of the first network hop, i.e. a REST proxy or another cluster node -# "realm" name of a realm that has generated an "authentication_failed" or an "authentication_successful"; the subject is not yet authenticated -# "realm_domain" if "realm" is under a domain, this is the name of the domain -# "url.path" the URI component between the port and the query string; it is percent (URL) encoded -# "url.query" the URI component after the path and before the fragment; it is percent (URL) encoded -# "request.method" the method of the HTTP request, i.e. one of GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, TRACE, CONNECT -# "request.body" the content of the request body entity, JSON escaped -# "request.id" a synthetic identifier for the incoming request, this is unique per incoming request, and consistent across all audit events generated by that request -# "action" an action is the most granular operation that is authorized and this identifies it in a namespaced way (internal) -# "request.name" if the event is in connection to a transport message this is the name of the request class, similar to how rest requests are identified by the url path (internal) -# "indices" the array of indices that the "action" is acting upon -# "opaque_id" opaque value conveyed by the "X-Opaque-Id" request header -# "trace_id" an identifier conveyed by the part of "traceparent" request header -# "x_forwarded_for" the addresses from the "X-Forwarded-For" request header, as a verbatim string value (not an array) -# "transport.profile" name of the transport profile in case this is a "connection_granted" or "connection_denied" event -# "rule" name of the applied rule if the "origin.type" is "ip_filter" -# the "put", "delete", "change", "create", "invalidate" fields are only present -# when the "event.type" is "security_config_change" and contain the security config change (as an object) taking effect - -logger.xpack_security_audit_logfile.name = org.elasticsearch.xpack.security.audit.logfile.LoggingAuditTrail -logger.xpack_security_audit_logfile.level = info -logger.xpack_security_audit_logfile.appenderRef.audit_rolling.ref = audit_rolling -logger.xpack_security_audit_logfile.additivity = false - -logger.xmlsig.name = org.apache.xml.security.signature.XMLSignature -logger.xmlsig.level = error -logger.samlxml_decrypt.name = org.opensaml.xmlsec.encryption.support.Decrypter -logger.samlxml_decrypt.level = fatal -logger.saml2_decrypt.name = org.opensaml.saml.saml2.encryption.Decrypter -logger.saml2_decrypt.level = fatal \ No newline at end of file diff --git a/elasticsearch/config/es03/role_mapping.yml b/elasticsearch/config/es03/role_mapping.yml deleted file mode 100644 index 68c82f7e..00000000 --- a/elasticsearch/config/es03/role_mapping.yml +++ /dev/null @@ -1,14 +0,0 @@ -# Role mapping configuration file which has elasticsearch roles as keys -# that map to one or more user or group distinguished names - -#roleA: this is an elasticsearch role -# - groupA-DN this is a group distinguished name -# - groupB-DN -# - user1-DN this is the full user distinguished name - -#power_user: -# - "cn=admins,dc=example,dc=com" -#user: -# - "cn=users,dc=example,dc=com" -# - "cn=admins,dc=example,dc=com" -# - "cn=John Doe,cn=other users,dc=example,dc=com" diff --git a/elasticsearch/config/es03/roles.yml b/elasticsearch/config/es03/roles.yml deleted file mode 100644 index 68e003b8..00000000 --- a/elasticsearch/config/es03/roles.yml +++ /dev/null @@ -1,3 +0,0 @@ -# The default roles file is empty as the preferred method of defining roles is -# through the API/UI. File based roles are useful in error scenarios when the -# API based roles may not be available. diff --git a/elasticsearch/config/es03/users b/elasticsearch/config/es03/users deleted file mode 100644 index e69de29b..00000000 diff --git a/elasticsearch/config/es03/users_roles b/elasticsearch/config/es03/users_roles deleted file mode 100644 index e69de29b..00000000 diff --git a/elasticsearch/docker-compose.yml b/elasticsearch/docker-compose.yml deleted file mode 100644 index 6544593b..00000000 --- a/elasticsearch/docker-compose.yml +++ /dev/null @@ -1,232 +0,0 @@ -services: - setup: - image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} - volumes: - - ./certs:/usr/share/elasticsearch/config/certs:ro - user: "0" - command: > - bash -c ' - if [ x${ELASTIC_PASSWORD} == x ]; then - echo "Set the ELASTIC_PASSWORD environment variable in the .env file"; - exit 1; - elif [ x${KIBANA_PASSWORD} == x ]; then - echo "Set the KIBANA_PASSWORD environment variable in the .env file"; - exit 1; - fi; - if [ ! -f config/certs/ca.zip ]; then - echo "Creating CA"; - bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip; - unzip config/certs/ca.zip -d config/certs; - fi; - if [ ! -f config/certs/certs.zip ]; then - echo "Creating certs"; - echo -ne \ - "instances:\n"\ - " - name: es01\n"\ - " dns:\n"\ - " - es01\n"\ - " - localhost\n"\ - " ip:\n"\ - " - 127.0.0.1\n"\ - " - name: es02\n"\ - " dns:\n"\ - " - es02\n"\ - " - localhost\n"\ - " ip:\n"\ - " - 127.0.0.1\n"\ - " - name: es03\n"\ - " dns:\n"\ - " - es03\n"\ - " - localhost\n"\ - " ip:\n"\ - " - 127.0.0.1\n"\ - > config/certs/instances.yml; - bin/elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --in config/certs/instances.yml --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key; - unzip config/certs/certs.zip -d config/certs; - fi; - echo "Setting file permissions" - chown -R root:root config/certs; - find . -type d -exec chmod 750 \{\} \;; - find . -type f -exec chmod 640 \{\} \;; - echo "Waiting for Elasticsearch availability"; - until curl -s --cacert config/certs/ca/ca.crt https://es01:9200 | grep -q "missing authentication credentials"; do sleep 30; done; - echo "Setting kibana_system password"; - until curl -s -X POST --cacert config/certs/ca/ca.crt -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" https://es01:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done; - echo "All done!"; - ' - healthcheck: - test: ["CMD-SHELL", "[ -f config/certs/es01/es01.crt ]"] - interval: 1s - timeout: 5s - retries: 120 - - es01: - depends_on: - setup: - condition: service_healthy - image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} - volumes: - - ./certs:/usr/share/elasticsearch/config/certs:ro - - esdata01:/usr/share/elasticsearch/data - ports: - - ${ES_PORT}:9200 - environment: - - node.name=es01 - - cluster.name=${CLUSTER_NAME} - - cluster.initial_master_nodes=es01,es02,es03 - - discovery.seed_hosts=es02,es03 - - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} - - bootstrap.memory_lock=true - - xpack.security.enabled=true - - xpack.security.http.ssl.enabled=true - - xpack.security.http.ssl.key=certs/es01/es01.key - - xpack.security.http.ssl.certificate=certs/es01/es01.crt - - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt - - xpack.security.transport.ssl.enabled=true - - xpack.security.transport.ssl.key=certs/es01/es01.key - - xpack.security.transport.ssl.certificate=certs/es01/es01.crt - - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt - - xpack.security.transport.ssl.verification_mode=certificate - - xpack.license.self_generated.type=${LICENSE} - # Add the thread pool settings for rate limits - - thread_pool.search.size=100 # Increase the number of search threads - - thread_pool.search.queue_size=1000 # Increase the size of the search queue - mem_limit: 2g - ulimits: - memlock: - soft: -1 - hard: -1 - healthcheck: - test: - [ - "CMD-SHELL", - "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'", - ] - interval: 10s - timeout: 10s - retries: 120 - - es02: - depends_on: - - es01 - image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} - volumes: - - ./certs:/usr/share/elasticsearch/config/certs:ro - - esdata02:/usr/share/elasticsearch/data - environment: - - node.name=es02 - - cluster.name=${CLUSTER_NAME} - - cluster.initial_master_nodes=es01,es02,es03 - - discovery.seed_hosts=es01,es03 - - bootstrap.memory_lock=true - - xpack.security.enabled=true - - xpack.security.http.ssl.enabled=true - - xpack.security.http.ssl.key=certs/es02/es02.key - - xpack.security.http.ssl.certificate=certs/es02/es02.crt - - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt - - xpack.security.transport.ssl.enabled=true - - xpack.security.transport.ssl.key=certs/es02/es02.key - - xpack.security.transport.ssl.certificate=certs/es02/es02.crt - - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt - - xpack.security.transport.ssl.verification_mode=certificate - - xpack.license.self_generated.type=${LICENSE} - # Add the thread pool settings for rate limits - - thread_pool.search.size=100 - - thread_pool.search.queue_size=1000 - mem_limit: 2g - ulimits: - memlock: - soft: -1 - hard: -1 - healthcheck: - test: - [ - "CMD-SHELL", - "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'", - ] - interval: 10s - timeout: 10s - retries: 120 - - es03: - depends_on: - - es02 - image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} - volumes: - - ./certs:/usr/share/elasticsearch/config/certs:ro - - esdata03:/usr/share/elasticsearch/data - environment: - - node.name=es03 - - cluster.name=${CLUSTER_NAME} - - cluster.initial_master_nodes=es01,es02,es03 - - discovery.seed_hosts=es01,es02 - - bootstrap.memory_lock=true - - xpack.security.enabled=true - - xpack.security.http.ssl.enabled=true - - xpack.security.http.ssl.key=certs/es03/es03.key - - xpack.security.http.ssl.certificate=certs/es03/es03.crt - - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt - - xpack.security.transport.ssl.enabled=true - - xpack.security.transport.ssl.key=certs/es03/es03.key - - xpack.security.transport.ssl.certificate=certs/es03/es03.crt - - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt - - xpack.security.transport.ssl.verification_mode=certificate - - xpack.license.self_generated.type=${LICENSE} - # Add the thread pool settings for rate limits - - thread_pool.search.size=100 - - thread_pool.search.queue_size=1000 - mem_limit: 2g - ulimits: - memlock: - soft: -1 - hard: -1 - healthcheck: - test: - [ - "CMD-SHELL", - "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'", - ] - interval: 10s - timeout: 10s - retries: 120 - - kibana: - depends_on: - es01: - condition: service_healthy - es02: - condition: service_healthy - es03: - condition: service_healthy - image: docker.elastic.co/kibana/kibana:${STACK_VERSION} - volumes: - - ./certs:/usr/share/kibana/config/certs:ro - - kibanadata:/usr/share/kibana/data - ports: - - ${KIBANA_PORT}:5601 - environment: - - SERVERNAME=kibana - - ELASTICSEARCH_HOSTS=https://es01:9200 - - ELASTICSEARCH_USERNAME=kibana_system - - ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD} - - ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=config/certs/ca/ca.crt - mem_limit: ${MEM_LIMIT} - healthcheck: - test: - [ - "CMD-SHELL", - "curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'", - ] - interval: 10s - timeout: 10s - retries: 120 - -volumes: - esdata01: - driver: local - esdata02: - driver: local - esdata03: - driver: local - kibanadata: - driver: local diff --git a/elasticsearch/tmp-config/elasticsearch-plugins.example.yml b/elasticsearch/tmp-config/elasticsearch-plugins.example.yml deleted file mode 100644 index b6874e91..00000000 --- a/elasticsearch/tmp-config/elasticsearch-plugins.example.yml +++ /dev/null @@ -1,27 +0,0 @@ -# Rename this file to `elasticsearch-plugins.yml` to use it. -# -# All plugins must be listed here. If you add a plugin to this list and run -# `elasticsearch-plugin sync`, that plugin will be installed. If you remove -# a plugin from this list, that plugin will be removed when Elasticsearch -# next starts. - -plugins: - # Each plugin must have an ID. Plugins with only an ID are official plugins and will be downloaded from Elastic. - - id: example-id - - # Plugins can be specified by URL (it doesn't have to be HTTP, you could use e.g. `file:`) - - id: example-with-url - location: https://some.domain/path/example4.zip - - # Or by maven coordinates: - - id: example-with-maven-url - location: org.elasticsearch.plugins:example-plugin:1.2.3 - - # A proxy can also be configured per-plugin, if necessary - - id: example-with-proxy - location: https://some.domain/path/example.zip - proxy: https://some.domain:1234 - -# Configures a proxy for all network access. Remove this if you don't need -# to use a proxy. -proxy: https://some.domain:1234 diff --git a/elasticsearch/tmp-config/elasticsearch.yml b/elasticsearch/tmp-config/elasticsearch.yml deleted file mode 100644 index 50b15470..00000000 --- a/elasticsearch/tmp-config/elasticsearch.yml +++ /dev/null @@ -1,2 +0,0 @@ -cluster.name: "docker-cluster" -network.host: 0.0.0.0 diff --git a/elasticsearch/tmp-config/jvm.options b/elasticsearch/tmp-config/jvm.options deleted file mode 100644 index 0b1af90f..00000000 --- a/elasticsearch/tmp-config/jvm.options +++ /dev/null @@ -1,79 +0,0 @@ -################################################################ -## -## JVM configuration -## -################################################################ -## -## WARNING: DO NOT EDIT THIS FILE. If you want to override the -## JVM options in this file, or set any additional options, you -## should create one or more files in the jvm.options.d -## directory containing your adjustments. -## -## See https://www.elastic.co/guide/en/elasticsearch/reference/8.13/jvm-options.html -## for more information. -## -################################################################ - - - -################################################################ -## IMPORTANT: JVM heap size -################################################################ -## -## The heap size is automatically configured by Elasticsearch -## based on the available memory in your system and the roles -## each node is configured to fulfill. If specifying heap is -## required, it should be done through a file in jvm.options.d, -## which should be named with .options suffix, and the min and -## max should be set to the same value. For example, to set the -## heap to 4 GB, create a new file in the jvm.options.d -## directory containing these lines: -## -## -Xms4g -## -Xmx4g -## -## See https://www.elastic.co/guide/en/elasticsearch/reference/8.13/heap-size.html -## for more information -## -################################################################ - - -################################################################ -## Expert settings -################################################################ -## -## All settings below here are considered expert settings. Do -## not adjust them unless you understand what you are doing. Do -## not edit them in this file; instead, create a new file in the -## jvm.options.d directory containing your adjustments. -## -################################################################ - --XX:+UseG1GC - -## JVM temporary directory --Djava.io.tmpdir=${ES_TMPDIR} - -# Leverages accelerated vector hardware instructions; removing this may -# result in less optimal vector performance -20-:--add-modules=jdk.incubator.vector - -## heap dumps - -# generate a heap dump when an allocation from the Java heap fails; heap dumps -# are created in the working directory of the JVM unless an alternative path is -# specified --XX:+HeapDumpOnOutOfMemoryError - -# exit right after heap dump on out of memory error --XX:+ExitOnOutOfMemoryError - -# specify an alternative path for heap dumps; ensure the directory exists and -# has sufficient space --XX:HeapDumpPath=data - -# specify an alternative path for JVM fatal error logs --XX:ErrorFile=logs/hs_err_pid%p.log - -## GC logging --Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,level,pid,tags:filecount=32,filesize=64m diff --git a/elasticsearch/tmp-config/log4j2.file.properties b/elasticsearch/tmp-config/log4j2.file.properties deleted file mode 100644 index 5bb63ce1..00000000 --- a/elasticsearch/tmp-config/log4j2.file.properties +++ /dev/null @@ -1,279 +0,0 @@ -status = error - -appender.console.type = Console -appender.console.name = console -appender.console.layout.type = PatternLayout -appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%consoleException%n - -######## Server JSON ############################ -appender.rolling.type = RollingFile -appender.rolling.name = rolling -appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json -appender.rolling.layout.type = ECSJsonLayout -appender.rolling.layout.dataset = elasticsearch.server - -appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.json.gz -appender.rolling.policies.type = Policies -appender.rolling.policies.time.type = TimeBasedTriggeringPolicy -appender.rolling.policies.time.interval = 1 -appender.rolling.policies.time.modulate = true -appender.rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.rolling.policies.size.size = 128MB -appender.rolling.strategy.type = DefaultRolloverStrategy -appender.rolling.strategy.fileIndex = nomax -appender.rolling.strategy.action.type = Delete -appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path} -appender.rolling.strategy.action.condition.type = IfFileName -appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* -appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize -appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB -################################################ -######## Server - old style pattern ########### -appender.rolling_old.type = RollingFile -appender.rolling_old.name = rolling_old -appender.rolling_old.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log -appender.rolling_old.layout.type = PatternLayout -appender.rolling_old.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%n - -appender.rolling_old.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz -appender.rolling_old.policies.type = Policies -appender.rolling_old.policies.time.type = TimeBasedTriggeringPolicy -appender.rolling_old.policies.time.interval = 1 -appender.rolling_old.policies.time.modulate = true -appender.rolling_old.policies.size.type = SizeBasedTriggeringPolicy -appender.rolling_old.policies.size.size = 128MB -appender.rolling_old.strategy.type = DefaultRolloverStrategy -appender.rolling_old.strategy.fileIndex = nomax -appender.rolling_old.strategy.action.type = Delete -appender.rolling_old.strategy.action.basepath = ${sys:es.logs.base_path} -appender.rolling_old.strategy.action.condition.type = IfFileName -appender.rolling_old.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* -appender.rolling_old.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize -appender.rolling_old.strategy.action.condition.nested_condition.exceeds = 2GB -################################################ - -rootLogger.level = info -rootLogger.appenderRef.console.ref = console -rootLogger.appenderRef.rolling.ref = rolling -rootLogger.appenderRef.rolling_old.ref = rolling_old - -######## Deprecation JSON ####################### -appender.deprecation_rolling.type = RollingFile -appender.deprecation_rolling.name = deprecation_rolling -appender.deprecation_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation.json -appender.deprecation_rolling.layout.type = ECSJsonLayout -# Intentionally follows a different pattern to above -appender.deprecation_rolling.layout.dataset = deprecation.elasticsearch -appender.deprecation_rolling.filter.rate_limit.type = RateLimitingFilter - -appender.deprecation_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation-%i.json.gz -appender.deprecation_rolling.policies.type = Policies -appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.deprecation_rolling.policies.size.size = 1GB -appender.deprecation_rolling.strategy.type = DefaultRolloverStrategy -appender.deprecation_rolling.strategy.max = 4 - -appender.header_warning.type = HeaderWarningAppender -appender.header_warning.name = header_warning -################################################# - -logger.deprecation.name = org.elasticsearch.deprecation -logger.deprecation.level = WARN -logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling -logger.deprecation.appenderRef.header_warning.ref = header_warning -logger.deprecation.additivity = false - -######## Search slowlog JSON #################### -appender.index_search_slowlog_rolling.type = RollingFile -appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling -appender.index_search_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs\ - .cluster_name}_index_search_slowlog.json -appender.index_search_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_search_slowlog_rolling.layout.dataset = elasticsearch.index_search_slowlog - -appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs\ - .cluster_name}_index_search_slowlog-%i.json.gz -appender.index_search_slowlog_rolling.policies.type = Policies -appender.index_search_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.index_search_slowlog_rolling.policies.size.size = 1GB -appender.index_search_slowlog_rolling.strategy.type = DefaultRolloverStrategy -appender.index_search_slowlog_rolling.strategy.max = 4 -################################################# - -################################################# -logger.index_search_slowlog_rolling.name = index.search.slowlog -logger.index_search_slowlog_rolling.level = trace -logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling -logger.index_search_slowlog_rolling.additivity = false - -######## Indexing slowlog JSON ################## -appender.index_indexing_slowlog_rolling.type = RollingFile -appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling -appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}\ - _index_indexing_slowlog.json -appender.index_indexing_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_indexing_slowlog_rolling.layout.dataset = elasticsearch.index_indexing_slowlog - - -appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}\ - _index_indexing_slowlog-%i.json.gz -appender.index_indexing_slowlog_rolling.policies.type = Policies -appender.index_indexing_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.index_indexing_slowlog_rolling.policies.size.size = 1GB -appender.index_indexing_slowlog_rolling.strategy.type = DefaultRolloverStrategy -appender.index_indexing_slowlog_rolling.strategy.max = 4 -################################################# - - -logger.index_indexing_slowlog.name = index.indexing.slowlog.index -logger.index_indexing_slowlog.level = trace -logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling -logger.index_indexing_slowlog.additivity = false - - -logger.org_apache_pdfbox.name = org.apache.pdfbox -logger.org_apache_pdfbox.level = off - -logger.org_apache_poi.name = org.apache.poi -logger.org_apache_poi.level = off - -logger.org_apache_fontbox.name = org.apache.fontbox -logger.org_apache_fontbox.level = off - -logger.org_apache_xmlbeans.name = org.apache.xmlbeans -logger.org_apache_xmlbeans.level = off - - -logger.com_amazonaws.name = com.amazonaws -logger.com_amazonaws.level = warn - -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.name = com.amazonaws.jmx.SdkMBeanRegistrySupport -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.level = error - -logger.com_amazonaws_metrics_AwsSdkMetrics.name = com.amazonaws.metrics.AwsSdkMetrics -logger.com_amazonaws_metrics_AwsSdkMetrics.level = error - -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.name = com.amazonaws.auth.profile.internal.BasicProfileConfigFileLoader -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.level = error - -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.name = com.amazonaws.services.s3.internal.UseArnRegionResolver -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.level = error - - -appender.audit_rolling.type = RollingFile -appender.audit_rolling.name = audit_rolling -appender.audit_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_audit.json -appender.audit_rolling.layout.type = PatternLayout -appender.audit_rolling.layout.pattern = {\ - "type":"audit", \ - "timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ}"\ - %varsNotEmpty{, "cluster.name":"%enc{%map{cluster.name}}{JSON}"}\ - %varsNotEmpty{, "cluster.uuid":"%enc{%map{cluster.uuid}}{JSON}"}\ - %varsNotEmpty{, "node.name":"%enc{%map{node.name}}{JSON}"}\ - %varsNotEmpty{, "node.id":"%enc{%map{node.id}}{JSON}"}\ - %varsNotEmpty{, "host.name":"%enc{%map{host.name}}{JSON}"}\ - %varsNotEmpty{, "host.ip":"%enc{%map{host.ip}}{JSON}"}\ - %varsNotEmpty{, "event.type":"%enc{%map{event.type}}{JSON}"}\ - %varsNotEmpty{, "event.action":"%enc{%map{event.action}}{JSON}"}\ - %varsNotEmpty{, "authentication.type":"%enc{%map{authentication.type}}{JSON}"}\ - %varsNotEmpty{, "user.name":"%enc{%map{user.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.name":"%enc{%map{user.run_by.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.name":"%enc{%map{user.run_as.name}}{JSON}"}\ - %varsNotEmpty{, "user.realm":"%enc{%map{user.realm}}{JSON}"}\ - %varsNotEmpty{, "user.realm_domain":"%enc{%map{user.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm":"%enc{%map{user.run_by.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm_domain":"%enc{%map{user.run_by.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm":"%enc{%map{user.run_as.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm_domain":"%enc{%map{user.run_as.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.roles":%map{user.roles}}\ - %varsNotEmpty{, "apikey.id":"%enc{%map{apikey.id}}{JSON}"}\ - %varsNotEmpty{, "apikey.name":"%enc{%map{apikey.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.name":"%enc{%map{authentication.token.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.type":"%enc{%map{authentication.token.type}}{JSON}"}\ - %varsNotEmpty{, "cross_cluster_access":%map{cross_cluster_access}}\ - %varsNotEmpty{, "origin.type":"%enc{%map{origin.type}}{JSON}"}\ - %varsNotEmpty{, "origin.address":"%enc{%map{origin.address}}{JSON}"}\ - %varsNotEmpty{, "realm":"%enc{%map{realm}}{JSON}"}\ - %varsNotEmpty{, "realm_domain":"%enc{%map{realm_domain}}{JSON}"}\ - %varsNotEmpty{, "url.path":"%enc{%map{url.path}}{JSON}"}\ - %varsNotEmpty{, "url.query":"%enc{%map{url.query}}{JSON}"}\ - %varsNotEmpty{, "request.method":"%enc{%map{request.method}}{JSON}"}\ - %varsNotEmpty{, "request.body":"%enc{%map{request.body}}{JSON}"}\ - %varsNotEmpty{, "request.id":"%enc{%map{request.id}}{JSON}"}\ - %varsNotEmpty{, "action":"%enc{%map{action}}{JSON}"}\ - %varsNotEmpty{, "request.name":"%enc{%map{request.name}}{JSON}"}\ - %varsNotEmpty{, "indices":%map{indices}}\ - %varsNotEmpty{, "opaque_id":"%enc{%map{opaque_id}}{JSON}"}\ - %varsNotEmpty{, "trace.id":"%enc{%map{trace.id}}{JSON}"}\ - %varsNotEmpty{, "x_forwarded_for":"%enc{%map{x_forwarded_for}}{JSON}"}\ - %varsNotEmpty{, "transport.profile":"%enc{%map{transport.profile}}{JSON}"}\ - %varsNotEmpty{, "rule":"%enc{%map{rule}}{JSON}"}\ - %varsNotEmpty{, "put":%map{put}}\ - %varsNotEmpty{, "delete":%map{delete}}\ - %varsNotEmpty{, "change":%map{change}}\ - %varsNotEmpty{, "create":%map{create}}\ - %varsNotEmpty{, "invalidate":%map{invalidate}}\ - }%n -# "node.name" node name from the `elasticsearch.yml` settings -# "node.id" node id which should not change between cluster restarts -# "host.name" unresolved hostname of the local node -# "host.ip" the local bound ip (i.e. the ip listening for connections) -# "origin.type" a received REST request is translated into one or more transport requests. This indicates which processing layer generated the event "rest" or "transport" (internal) -# "event.action" the name of the audited event, eg. "authentication_failed", "access_granted", "run_as_granted", etc. -# "authentication.type" one of "realm", "api_key", "token", "anonymous" or "internal" -# "user.name" the subject name as authenticated by a realm -# "user.run_by.name" the original authenticated subject name that is impersonating another one. -# "user.run_as.name" if this "event.action" is of a run_as type, this is the subject name to be impersonated as. -# "user.realm" the name of the realm that authenticated "user.name" -# "user.realm_domain" if "user.realm" is under a domain, this is the name of the domain -# "user.run_by.realm" the realm name of the impersonating subject ("user.run_by.name") -# "user.run_by.realm_domain" if "user.run_by.realm" is under a domain, this is the name of the domain -# "user.run_as.realm" if this "event.action" is of a run_as type, this is the realm name the impersonated user is looked up from -# "user.run_as.realm_domain" if "user.run_as.realm" is under a domain, this is the name of the domain -# "user.roles" the roles array of the user; these are the roles that are granting privileges -# "apikey.id" this field is present if and only if the "authentication.type" is "api_key" -# "apikey.name" this field is present if and only if the "authentication.type" is "api_key" -# "authentication.token.name" this field is present if and only if the authenticating credential is a service account token -# "authentication.token.type" this field is present if and only if the authenticating credential is a service account token -# "cross_cluster_access" this field is present if and only if the associated authentication occurred cross cluster -# "event.type" informs about what internal system generated the event; possible values are "rest", "transport", "ip_filter" and "security_config_change" -# "origin.address" the remote address and port of the first network hop, i.e. a REST proxy or another cluster node -# "realm" name of a realm that has generated an "authentication_failed" or an "authentication_successful"; the subject is not yet authenticated -# "realm_domain" if "realm" is under a domain, this is the name of the domain -# "url.path" the URI component between the port and the query string; it is percent (URL) encoded -# "url.query" the URI component after the path and before the fragment; it is percent (URL) encoded -# "request.method" the method of the HTTP request, i.e. one of GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, TRACE, CONNECT -# "request.body" the content of the request body entity, JSON escaped -# "request.id" a synthetic identifier for the incoming request, this is unique per incoming request, and consistent across all audit events generated by that request -# "action" an action is the most granular operation that is authorized and this identifies it in a namespaced way (internal) -# "request.name" if the event is in connection to a transport message this is the name of the request class, similar to how rest requests are identified by the url path (internal) -# "indices" the array of indices that the "action" is acting upon -# "opaque_id" opaque value conveyed by the "X-Opaque-Id" request header -# "trace_id" an identifier conveyed by the part of "traceparent" request header -# "x_forwarded_for" the addresses from the "X-Forwarded-For" request header, as a verbatim string value (not an array) -# "transport.profile" name of the transport profile in case this is a "connection_granted" or "connection_denied" event -# "rule" name of the applied rule if the "origin.type" is "ip_filter" -# the "put", "delete", "change", "create", "invalidate" fields are only present -# when the "event.type" is "security_config_change" and contain the security config change (as an object) taking effect - -appender.audit_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_audit-%d{yyyy-MM-dd}-%i.json.gz -appender.audit_rolling.policies.type = Policies -appender.audit_rolling.policies.time.type = TimeBasedTriggeringPolicy -appender.audit_rolling.policies.time.interval = 1 -appender.audit_rolling.policies.time.modulate = true -appender.audit_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.audit_rolling.policies.size.size = 1GB -appender.audit_rolling.strategy.type = DefaultRolloverStrategy -appender.audit_rolling.strategy.fileIndex = nomax - -logger.xpack_security_audit_logfile.name = org.elasticsearch.xpack.security.audit.logfile.LoggingAuditTrail -logger.xpack_security_audit_logfile.level = info -logger.xpack_security_audit_logfile.appenderRef.audit_rolling.ref = audit_rolling -logger.xpack_security_audit_logfile.additivity = false - -logger.xmlsig.name = org.apache.xml.security.signature.XMLSignature -logger.xmlsig.level = error -logger.samlxml_decrypt.name = org.opensaml.xmlsec.encryption.support.Decrypter -logger.samlxml_decrypt.level = fatal -logger.saml2_decrypt.name = org.opensaml.saml.saml2.encryption.Decrypter -logger.saml2_decrypt.level = fatal diff --git a/elasticsearch/tmp-config/log4j2.properties b/elasticsearch/tmp-config/log4j2.properties deleted file mode 100644 index c0d67c8e..00000000 --- a/elasticsearch/tmp-config/log4j2.properties +++ /dev/null @@ -1,193 +0,0 @@ -status = error - -######## Server JSON ############################ -appender.rolling.type = Console -appender.rolling.name = rolling -appender.rolling.layout.type = ECSJsonLayout -appender.rolling.layout.dataset = elasticsearch.server - -################################################ - -################################################ - -rootLogger.level = info -rootLogger.appenderRef.rolling.ref = rolling - -######## Deprecation JSON ####################### -appender.deprecation_rolling.type = Console -appender.deprecation_rolling.name = deprecation_rolling -appender.deprecation_rolling.layout.type = ECSJsonLayout -# Intentionally follows a different pattern to above -appender.deprecation_rolling.layout.dataset = deprecation.elasticsearch -appender.deprecation_rolling.filter.rate_limit.type = RateLimitingFilter - -appender.header_warning.type = HeaderWarningAppender -appender.header_warning.name = header_warning -################################################# - -logger.deprecation.name = org.elasticsearch.deprecation -logger.deprecation.level = WARN -logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling -logger.deprecation.appenderRef.header_warning.ref = header_warning -logger.deprecation.additivity = false - -######## Search slowlog JSON #################### -appender.index_search_slowlog_rolling.type = Console -appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling -appender.index_search_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_search_slowlog_rolling.layout.dataset = elasticsearch.index_search_slowlog - -################################################# - -################################################# -logger.index_search_slowlog_rolling.name = index.search.slowlog -logger.index_search_slowlog_rolling.level = trace -logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling -logger.index_search_slowlog_rolling.additivity = false - -######## Indexing slowlog JSON ################## -appender.index_indexing_slowlog_rolling.type = Console -appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling -appender.index_indexing_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_indexing_slowlog_rolling.layout.dataset = elasticsearch.index_indexing_slowlog - -################################################# - -logger.index_indexing_slowlog.name = index.indexing.slowlog.index -logger.index_indexing_slowlog.level = trace -logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling -logger.index_indexing_slowlog.additivity = false - -logger.org_apache_pdfbox.name = org.apache.pdfbox -logger.org_apache_pdfbox.level = off - -logger.org_apache_poi.name = org.apache.poi -logger.org_apache_poi.level = off - -logger.org_apache_fontbox.name = org.apache.fontbox -logger.org_apache_fontbox.level = off - -logger.org_apache_xmlbeans.name = org.apache.xmlbeans -logger.org_apache_xmlbeans.level = off - -logger.com_amazonaws.name = com.amazonaws -logger.com_amazonaws.level = warn - -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.name = com.amazonaws.jmx.SdkMBeanRegistrySupport -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.level = error - -logger.com_amazonaws_metrics_AwsSdkMetrics.name = com.amazonaws.metrics.AwsSdkMetrics -logger.com_amazonaws_metrics_AwsSdkMetrics.level = error - -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.name = com.amazonaws.auth.profile.internal.BasicProfileConfigFileLoader -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.level = error - -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.name = com.amazonaws.services.s3.internal.UseArnRegionResolver -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.level = error - -appender.audit_rolling.type = Console -appender.audit_rolling.name = audit_rolling -appender.audit_rolling.layout.type = PatternLayout -appender.audit_rolling.layout.pattern = {\ - "type":"audit", \ - "timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ}"\ - %varsNotEmpty{, "cluster.name":"%enc{%map{cluster.name}}{JSON}"}\ - %varsNotEmpty{, "cluster.uuid":"%enc{%map{cluster.uuid}}{JSON}"}\ - %varsNotEmpty{, "node.name":"%enc{%map{node.name}}{JSON}"}\ - %varsNotEmpty{, "node.id":"%enc{%map{node.id}}{JSON}"}\ - %varsNotEmpty{, "host.name":"%enc{%map{host.name}}{JSON}"}\ - %varsNotEmpty{, "host.ip":"%enc{%map{host.ip}}{JSON}"}\ - %varsNotEmpty{, "event.type":"%enc{%map{event.type}}{JSON}"}\ - %varsNotEmpty{, "event.action":"%enc{%map{event.action}}{JSON}"}\ - %varsNotEmpty{, "authentication.type":"%enc{%map{authentication.type}}{JSON}"}\ - %varsNotEmpty{, "user.name":"%enc{%map{user.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.name":"%enc{%map{user.run_by.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.name":"%enc{%map{user.run_as.name}}{JSON}"}\ - %varsNotEmpty{, "user.realm":"%enc{%map{user.realm}}{JSON}"}\ - %varsNotEmpty{, "user.realm_domain":"%enc{%map{user.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm":"%enc{%map{user.run_by.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm_domain":"%enc{%map{user.run_by.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm":"%enc{%map{user.run_as.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm_domain":"%enc{%map{user.run_as.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.roles":%map{user.roles}}\ - %varsNotEmpty{, "apikey.id":"%enc{%map{apikey.id}}{JSON}"}\ - %varsNotEmpty{, "apikey.name":"%enc{%map{apikey.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.name":"%enc{%map{authentication.token.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.type":"%enc{%map{authentication.token.type}}{JSON}"}\ - %varsNotEmpty{, "cross_cluster_access":%map{cross_cluster_access}}\ - %varsNotEmpty{, "origin.type":"%enc{%map{origin.type}}{JSON}"}\ - %varsNotEmpty{, "origin.address":"%enc{%map{origin.address}}{JSON}"}\ - %varsNotEmpty{, "realm":"%enc{%map{realm}}{JSON}"}\ - %varsNotEmpty{, "realm_domain":"%enc{%map{realm_domain}}{JSON}"}\ - %varsNotEmpty{, "url.path":"%enc{%map{url.path}}{JSON}"}\ - %varsNotEmpty{, "url.query":"%enc{%map{url.query}}{JSON}"}\ - %varsNotEmpty{, "request.method":"%enc{%map{request.method}}{JSON}"}\ - %varsNotEmpty{, "request.body":"%enc{%map{request.body}}{JSON}"}\ - %varsNotEmpty{, "request.id":"%enc{%map{request.id}}{JSON}"}\ - %varsNotEmpty{, "action":"%enc{%map{action}}{JSON}"}\ - %varsNotEmpty{, "request.name":"%enc{%map{request.name}}{JSON}"}\ - %varsNotEmpty{, "indices":%map{indices}}\ - %varsNotEmpty{, "opaque_id":"%enc{%map{opaque_id}}{JSON}"}\ - %varsNotEmpty{, "trace.id":"%enc{%map{trace.id}}{JSON}"}\ - %varsNotEmpty{, "x_forwarded_for":"%enc{%map{x_forwarded_for}}{JSON}"}\ - %varsNotEmpty{, "transport.profile":"%enc{%map{transport.profile}}{JSON}"}\ - %varsNotEmpty{, "rule":"%enc{%map{rule}}{JSON}"}\ - %varsNotEmpty{, "put":%map{put}}\ - %varsNotEmpty{, "delete":%map{delete}}\ - %varsNotEmpty{, "change":%map{change}}\ - %varsNotEmpty{, "create":%map{create}}\ - %varsNotEmpty{, "invalidate":%map{invalidate}}\ - }%n -# "node.name" node name from the `elasticsearch.yml` settings -# "node.id" node id which should not change between cluster restarts -# "host.name" unresolved hostname of the local node -# "host.ip" the local bound ip (i.e. the ip listening for connections) -# "origin.type" a received REST request is translated into one or more transport requests. This indicates which processing layer generated the event "rest" or "transport" (internal) -# "event.action" the name of the audited event, eg. "authentication_failed", "access_granted", "run_as_granted", etc. -# "authentication.type" one of "realm", "api_key", "token", "anonymous" or "internal" -# "user.name" the subject name as authenticated by a realm -# "user.run_by.name" the original authenticated subject name that is impersonating another one. -# "user.run_as.name" if this "event.action" is of a run_as type, this is the subject name to be impersonated as. -# "user.realm" the name of the realm that authenticated "user.name" -# "user.realm_domain" if "user.realm" is under a domain, this is the name of the domain -# "user.run_by.realm" the realm name of the impersonating subject ("user.run_by.name") -# "user.run_by.realm_domain" if "user.run_by.realm" is under a domain, this is the name of the domain -# "user.run_as.realm" if this "event.action" is of a run_as type, this is the realm name the impersonated user is looked up from -# "user.run_as.realm_domain" if "user.run_as.realm" is under a domain, this is the name of the domain -# "user.roles" the roles array of the user; these are the roles that are granting privileges -# "apikey.id" this field is present if and only if the "authentication.type" is "api_key" -# "apikey.name" this field is present if and only if the "authentication.type" is "api_key" -# "authentication.token.name" this field is present if and only if the authenticating credential is a service account token -# "authentication.token.type" this field is present if and only if the authenticating credential is a service account token -# "cross_cluster_access" this field is present if and only if the associated authentication occurred cross cluster -# "event.type" informs about what internal system generated the event; possible values are "rest", "transport", "ip_filter" and "security_config_change" -# "origin.address" the remote address and port of the first network hop, i.e. a REST proxy or another cluster node -# "realm" name of a realm that has generated an "authentication_failed" or an "authentication_successful"; the subject is not yet authenticated -# "realm_domain" if "realm" is under a domain, this is the name of the domain -# "url.path" the URI component between the port and the query string; it is percent (URL) encoded -# "url.query" the URI component after the path and before the fragment; it is percent (URL) encoded -# "request.method" the method of the HTTP request, i.e. one of GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, TRACE, CONNECT -# "request.body" the content of the request body entity, JSON escaped -# "request.id" a synthetic identifier for the incoming request, this is unique per incoming request, and consistent across all audit events generated by that request -# "action" an action is the most granular operation that is authorized and this identifies it in a namespaced way (internal) -# "request.name" if the event is in connection to a transport message this is the name of the request class, similar to how rest requests are identified by the url path (internal) -# "indices" the array of indices that the "action" is acting upon -# "opaque_id" opaque value conveyed by the "X-Opaque-Id" request header -# "trace_id" an identifier conveyed by the part of "traceparent" request header -# "x_forwarded_for" the addresses from the "X-Forwarded-For" request header, as a verbatim string value (not an array) -# "transport.profile" name of the transport profile in case this is a "connection_granted" or "connection_denied" event -# "rule" name of the applied rule if the "origin.type" is "ip_filter" -# the "put", "delete", "change", "create", "invalidate" fields are only present -# when the "event.type" is "security_config_change" and contain the security config change (as an object) taking effect - -logger.xpack_security_audit_logfile.name = org.elasticsearch.xpack.security.audit.logfile.LoggingAuditTrail -logger.xpack_security_audit_logfile.level = info -logger.xpack_security_audit_logfile.appenderRef.audit_rolling.ref = audit_rolling -logger.xpack_security_audit_logfile.additivity = false - -logger.xmlsig.name = org.apache.xml.security.signature.XMLSignature -logger.xmlsig.level = error -logger.samlxml_decrypt.name = org.opensaml.xmlsec.encryption.support.Decrypter -logger.samlxml_decrypt.level = fatal -logger.saml2_decrypt.name = org.opensaml.saml.saml2.encryption.Decrypter -logger.saml2_decrypt.level = fatal \ No newline at end of file diff --git a/elasticsearch/tmp-config/role_mapping.yml b/elasticsearch/tmp-config/role_mapping.yml deleted file mode 100644 index 68c82f7e..00000000 --- a/elasticsearch/tmp-config/role_mapping.yml +++ /dev/null @@ -1,14 +0,0 @@ -# Role mapping configuration file which has elasticsearch roles as keys -# that map to one or more user or group distinguished names - -#roleA: this is an elasticsearch role -# - groupA-DN this is a group distinguished name -# - groupB-DN -# - user1-DN this is the full user distinguished name - -#power_user: -# - "cn=admins,dc=example,dc=com" -#user: -# - "cn=users,dc=example,dc=com" -# - "cn=admins,dc=example,dc=com" -# - "cn=John Doe,cn=other users,dc=example,dc=com" diff --git a/elasticsearch/tmp-config/roles.yml b/elasticsearch/tmp-config/roles.yml deleted file mode 100644 index 68e003b8..00000000 --- a/elasticsearch/tmp-config/roles.yml +++ /dev/null @@ -1,3 +0,0 @@ -# The default roles file is empty as the preferred method of defining roles is -# through the API/UI. File based roles are useful in error scenarios when the -# API based roles may not be available. diff --git a/elasticsearch/tmp-config/users b/elasticsearch/tmp-config/users deleted file mode 100644 index e69de29b..00000000 diff --git a/elasticsearch/tmp-config/users_roles b/elasticsearch/tmp-config/users_roles deleted file mode 100644 index e69de29b..00000000 diff --git a/example/phenopacket.json b/example/phenopacket.json deleted file mode 100644 index 0172bbfe..00000000 --- a/example/phenopacket.json +++ /dev/null @@ -1,343 +0,0 @@ -{ - "id": "patient67890", - "subject": { - "id": "patient67890", - "dateOfBirth": "1965-03-22", - "sex": "MALE", - "karyotypicSex": "XY", - "taxonomy": { - "id": "NCBITaxon:9606", - "label": "Homo sapiens" - }, - "description": "58-year-old male with a complex cardiac history and multiple comorbidities.", - "timeAtLastEncounter": { - "age": { - "iso8601duration": "P58Y1M10D" - } - } - }, - "phenotypicFeatures": [ - { - "type": { - "id": "HP:0001627", - "label": "Myocardial infarction" - }, - "onset": { - "age": { - "iso8601duration": "P55Y" - } - }, - "severity": { - "id": "HP:0012828", - "label": "Severe" - }, - "modifiers": [ - { - "id": "HP:0031796", - "label": "Recurrent" - } - ], - "description": "Patient experienced multiple infarctions, requiring emergency stenting and later bypass surgery." - }, - { - "type": { - "id": "HP:0004322", - "label": "Type 2 diabetes mellitus" - }, - "onset": { - "age": { - "iso8601duration": "P48Y" - } - }, - "description": "Diabetes managed with metformin, HbA1c maintained between 6.5% and 7.2%." - }, - { - "type": { - "id": "HP:0001945", - "label": "Elevated hepatic transaminase level" - }, - "onset": { - "age": { - "iso8601duration": "P50Y" - } - }, - "description": "Mild elevation suspected secondary to statin therapy or non-alcoholic fatty liver disease." - }, - { - "type": { - "id": "HP:0001953", - "label": "Hypercholesterolemia" - }, - "onset": { - "age": { - "iso8601duration": "P45Y" - } - }, - "description": "LDL levels >190 mg/dL despite lifestyle interventions." - }, - { - "type": { - "id": "HP:0030654", - "label": "History of smoking" - }, - "onset": { - "age": { - "iso8601duration": "P20Y" - } - }, - "resolution": { - "age": { - "iso8601duration": "P45Y" - } - }, - "description": "Former smoker (20 pack-years), quit at age 45." - } - ], - "diseases": [ - { - "term": { - "id": "MONDO:0005066", - "label": "Coronary artery disease" - }, - "onset": { - "age": { - "iso8601duration": "P55Y" - } - }, - "diseaseStage": [ - { - "id": "NCIT:C27970", - "label": "Stage III" - } - ], - "description": "Advanced CAD with multivessel involvement and impaired left ventricular function." - } - ], - "biosamples": [ - { - "id": "biosample-heart", - "individualId": "patient67890", - "sampledTissue": { - "id": "UBERON:0000948", - "label": "heart" - }, - "sampleType": { - "id": "NCIT:C13302", - "label": "Biopsy specimen" - }, - "timeOfCollection": { - "age": { - "iso8601duration": "P55Y6M" - } - }, - "histologicalDiagnosis": { - "id": "NCIT:C7278", - "label": "Ischemic cardiomyopathy" - }, - "procedure": { - "code": { - "id": "NCIT:C51886", - "label": "Cardiac Biopsy" - } - }, - "description": "Tissue biopsy taken during bypass surgery for pathological analysis of ischemic damage." - }, - { - "id": "biosample-blood", - "individualId": "patient67890", - "sampledTissue": { - "id": "UBERON:0000178", - "label": "blood" - }, - "sampleType": { - "id": "NCIT:C12439", - "label": "Normal specimen" - }, - "timeOfCollection": { - "age": { - "iso8601duration": "P58Y" - } - }, - "description": "Peripheral blood collected for genetic analysis and lipid profile." - } - ], - "interpretations": [ - { - "id": "interpretation-1", - "description": "Genetic testing confirmed heterozygous LDLR mutation consistent with familial hypercholesterolemia.", - "diagnosis": { - "disease": { - "id": "MONDO:0019391", - "label": "Familial hypercholesterolemia" - }, - "genomicInterpretations": [ - { - "variantInterpretation": { - "variationDescriptor": { - "id": "HGVS:NC_000019.10:g.11200068G>A", - "label": "LDLR c.1444G>A", - "geneContext": { - "valueId": "HGNC:6547", - "symbol": "LDLR" - }, - "molecularAttributes": { - "aminoAcidChange": { - "value": "p.Asp482Asn" - } - } - }, - "therapeuticActionability": { - "id": "NCIT:C80153", - "label": "Statin sensitivity" - } - } - } - ] - } - } - ], - "medicalActions": [ - { - "treatment": { - "agent": { - "id": "CHEBI:9150", - "label": "Atorvastatin" - }, - "routeOfAdministration": { - "id": "NCIT:C38288", - "label": "Oral" - }, - "doseIntervals": [ - { - "quantity": { - "unit": { - "id": "UCUM:mg", - "label": "milligram" - }, - "value": 40 - }, - "scheduleFrequency": { - "id": "NCIT:C64575", - "label": "Daily" - } - } - ] - }, - "description": "Statin therapy initiated due to elevated LDL and LDLR mutation; continued post-CABG." - }, - { - "treatment": { - "agent": { - "id": "CHEBI:63638", - "label": "Metformin" - }, - "doseIntervals": [ - { - "quantity": { - "unit": { - "id": "UCUM:mg", - "label": "milligram" - }, - "value": 500 - }, - "scheduleFrequency": { - "id": "NCIT:C64575", - "label": "Twice Daily" - } - } - ] - }, - "description": "First-line therapy for type 2 diabetes; well-tolerated with good glycemic control." - }, - { - "procedure": { - "code": { - "id": "NCIT:C17107", - "label": "Coronary Artery Bypass Grafting" - }, - "performed": "2022-11-15" - }, - "description": "CABG performed after recurrent MI and critical stenosis in three coronary arteries." - } - ], - "family": { - "id": "family-001", - "proband": { - "id": "patient67890" - }, - "relatives": [ - { - "id": "father", - "sex": "MALE", - "phenotypicFeatures": [ - { - "type": { - "id": "HP:0001677", - "label": "Sudden cardiac death" - }, - "onset": { - "age": { - "iso8601duration": "P62Y" - } - } - } - ], - "vitalStatus": { - "status": "DECEASED", - "ageAtDeath": { - "iso8601duration": "P62Y" - } - } - } - ] - }, - "files": [ - { - "uri": "https://example.org/reports/genomics67890.pdf", - "fileAttribute": { - "attributeType": { - "id": "NCIT:C16444", - "label": "Genomics Report" - } - } - }, - { - "uri": "https://example.org/reports/cardiac_biopsy.pdf", - "fileAttribute": { - "attributeType": { - "id": "NCIT:C47885", - "label": "Pathology Report" - } - } - } - ], - "metaData": { - "created": "2024-12-15T10:45:00Z", - "createdBy": "Dr. Patel", - "submittedBy": "Cardiology Dept, Metro Medical Center", - "resources": [ - { - "id": "hp", - "name": "Human Phenotype Ontology", - "namespacePrefix": "HP", - "url": "http://purl.obolibrary.org/obo/hp.owl", - "version": "2023-04-08" - }, - { - "id": "mondo", - "name": "MONDO Disease Ontology", - "namespacePrefix": "MONDO", - "url": "http://purl.obolibrary.org/obo/mondo.owl", - "version": "2023-03-01" - }, - { - "id": "ncit", - "name": "NCI Thesaurus", - "namespacePrefix": "NCIT", - "url": "http://purl.obolibrary.org/obo/ncit.owl", - "version": "23.03d" - } - ], - "phenopacketSchemaVersion": "2.0" - } -} \ No newline at end of file diff --git a/example/phenopacket/keywords.json b/example/phenopacket/keywords.json deleted file mode 100644 index d11e5a8e..00000000 --- a/example/phenopacket/keywords.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "main_conditions": [ - "Myocardial infarction", - "Heart attack", - "Cardiac infarction", - "Type 2 diabetes mellitus", - "Diabetes", - "Elevated hepatic transaminase level", - "Liver enzyme elevation", - "Hypercholesterolemia", - "High cholesterol", - "Coronary artery disease" - ], - "other_conditions": [ - "Recurrent myocardial infarction", - "Emergency stenting", - "Bypass surgery", - "HbA1c levels between 6.5% and 7.2%", - "Mild elevation of liver enzymes", - "Statin therapy", - "Non-alcoholic fatty liver disease", - "LDL levels >190 mg/dL", - "Lifestyle interventions", - "Former smoker", - "20 pack-years", - "Quit smoking at age 45", - "Stage III coronary artery disease", - "Multivessel involvement", - "Impaired left ventricular function", - "Ischemic cardiomyopathy", - "Genetic testing", - "Heterozygous LDLR mutation", - "Familial hypercholesterolemia", - "Atorvastatin treatment", - "Metformin treatment", - "Coronary Artery Bypass Grafting", - "Sudden cardiac death in father", - "Father deceased at age 62" - ], - "expanded_sentences": [ - "The patient is a 58-year-old male with a complex cardiac history, including multiple myocardial infarctions.", - "He has experienced recurrent heart attacks, necessitating emergency stenting and later bypass surgery.", - "The patient has type 2 diabetes mellitus, managed with metformin, maintaining HbA1c levels between 6.5% and 7.2%.", - "There is a mild elevation in liver enzymes, suspected to be secondary to statin therapy or non-alcoholic fatty liver disease.", - "He has hypercholesterolemia, with LDL levels exceeding 190 mg/dL despite lifestyle interventions.", - "The patient is a former smoker, having quit at age 45 after 20 pack-years of smoking.", - "He has advanced coronary artery disease, stage III, with multivessel involvement and impaired left ventricular function.", - "A tissue biopsy taken during bypass surgery revealed ischemic cardiomyopathy.", - "Genetic testing confirmed a heterozygous LDLR mutation, consistent with familial hypercholesterolemia.", - "The patient is currently on atorvastatin and metformin treatments.", - "His father experienced sudden cardiac death at age 62." - ] -} \ No newline at end of file diff --git a/img/logo.png b/img/logo.png index b5ff2ac1..35dc6713 100644 Binary files a/img/logo.png and b/img/logo.png differ diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 00000000..7a566fec --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,65 @@ +site_name: TrialMatchAI +site_description: AI-driven patient-to-clinical-trial matching — hybrid retrieval + LLM eligibility reasoning +site_url: https://cbib.github.io/TrialMatchAI/ +repo_url: https://github.com/cbib/TrialMatchAI +repo_name: cbib/TrialMatchAI +copyright: "© TrialMatchAI — MIT licensed" + +theme: + name: material + features: + - navigation.sections + - navigation.top + - navigation.tracking + - content.code.copy + - content.code.annotate + - search.suggest + - search.highlight + palette: + - scheme: default + primary: teal + accent: teal + toggle: + icon: material/weather-night + name: Switch to dark mode + - scheme: slate + primary: teal + accent: teal + toggle: + icon: material/weather-sunny + name: Switch to light mode + +plugins: + - search + - mkdocstrings: + handlers: + python: + paths: [src] + options: + show_root_heading: true + show_source: true + members_order: source + separate_signature: true + docstring_section_style: spacy + +markdown_extensions: + - admonition + - pymdownx.details + - pymdownx.superfences + - pymdownx.highlight: + anchor_linenums: true + - pymdownx.tabbed: + alternate_style: true + - tables + - toc: + permalink: true + +nav: + - Home: index.md + - Architecture: architecture.md + - Pipeline & CLI: pipeline.md + - Patient interoperability: interoperability.md + - Registry updater: registry-updater.md + - Fine-tuning: finetuning.md + - API reference: api.md + - Release process: release.md diff --git a/pyproject.toml b/pyproject.toml index bb1668f0..85133a79 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,92 +1,119 @@ [build-system] -requires = ["setuptools>=68", "wheel"] +# >=77 for PEP 639 SPDX license metadata (license = "MIT" + license-files). +requires = ["setuptools>=77", "wheel"] build-backend = "setuptools.build_meta" [project] -name = "TrialMatchAI" -version = "0.1.0" -description = "AI-driven clinical trial matching pipeline." +name = "trialmatchai" +version = "0.2.0" +description = "AI-driven patient-to-clinical-trial matching: hybrid retrieval + LLM eligibility reasoning." readme = "README.md" -requires-python = ">=3.10,<3.12" -license = {file = "LICENSE"} +requires-python = ">=3.11,<3.12" +license = "MIT" +license-files = ["LICENSE"] +authors = [{ name = "Majd Abdallah", email = "abdallahmajd7@gmail.com" }] +keywords = [ + "clinical-trials", + "patient-trial-matching", + "biomedical-nlp", + "information-retrieval", + "large-language-models", + "eligibility", + "healthcare", +] +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Healthcare Industry", + "Intended Audience :: Science/Research", + "Operating System :: POSIX :: Linux", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.11", + "Topic :: Scientific/Engineering :: Bio-Informatics", + "Topic :: Scientific/Engineering :: Artificial Intelligence", +] dependencies = [ - # Core ML / NLP - "torch==2.7.1", - "torchvision==0.22.1", - "torchaudio==2.7.1", - "transformers==4.55.0", - "accelerate==1.8.1", - "tokenizers==0.21.1", - "safetensors==0.5.3", - "sentence-transformers==2.7.0", - "sentencepiece==0.2.0", - "datasets==2.19.0", - "faiss-cpu==1.9.0.post1", - "peft==0.15.2", - "einops==0.8.0", - "tiktoken==0.8.0", - "bitsandbytes==0.46.1", - "vllm==0.10.1.1", - # Classical stack & utilities - "numpy==1.26.4", - "scipy==1.15.1", - "scikit-learn==1.6.1", + "numpy>=2.0,<3", "pandas==2.2.3", + "python-dateutil==2.9.0.post0", + "requests==2.34.2", + "tenacity==9.0.0", "tqdm==4.67.1", - "regex==2024.11.6", - "orjson==3.10.14", "PyYAML==6.0.2", - "python-dotenv==1.0.1", - "rich==13.9.4", - # spaCy / medspaCy (for your medical text work) - "spacy==3.7.5", - "medspacy==1.3.1", - "medspacy_quickumls==3.2", - "PyRuSH==1.0.9", - "PyFastNER==1.0.10", - "pysbd==0.3.4", - "quicksectx==0.4.0", - "gliner==0.2.16", - # App / infra - "SQLAlchemy==2.0.37", - "pydantic==2.11.7", - "pydantic-settings==2.7.1", - # Optional APIs - "openai==1.99.1", - "httpx==0.28.1", - "langchain==0.3.18", - "langchain-core==0.3.35", - "langchain-community==0.3.17", - "langchain-openai==0.3.5", - "langsmith==0.2.11", - "huggingface_hub==0.34.4", + "lancedb>=0.25.0,<0.26", + "pyarrow>=24.0.0,<25", + "pydantic>=2.12.0,<3", +] + +[project.optional-dependencies] +gpu = [ + "bitsandbytes==0.49.2; sys_platform == 'linux' or sys_platform == 'win32'", + "vllm==0.23.0; sys_platform == 'linux'", +] +llm = [ + "torch==2.11.0", + "transformers==5.6.2", + "accelerate==1.8.1", + "tokenizers==0.22.1", + "safetensors>=0.6.2,<0.7", + "sentencepiece==0.2.1", + "peft==0.15.2", + "einops==0.8.0", +] +entity = [ + "torch==2.11.0", + "transformers==5.6.2", + "gliner2>=1.3.1,<2", +] +finetune = [ + "torch==2.11.0", + "transformers==5.6.2", + "accelerate==1.8.1", + "peft==0.15.2", + "datasets>=3.0,<5", + "gliner2>=1.3.1,<2", + "bitsandbytes==0.49.2; sys_platform == 'linux' or sys_platform == 'win32'", ] [project.scripts] -trialmatchai-healthcheck = "Matcher.cli.healthcheck:main" +# Single entry point. Every capability is a subcommand: `trialmatchai ` +# (pipeline, healthcheck, bootstrap-data, index, build-concepts, update-registry, +# import-patient, build, run, e2e, trec, finetune). +trialmatchai = "trialmatchai.cli.main:main" + +[project.urls] +Homepage = "https://github.com/cbib/TrialMatchAI" +Repository = "https://github.com/cbib/TrialMatchAI" +Issues = "https://github.com/cbib/TrialMatchAI/issues" +Paper = "https://doi.org/10.1038/s41467-026-70509-w" [dependency-groups] dev = [ - "pytest>=7.4", - "ruff>=0.6.0", + "pytest>=8.3", + "ruff>=0.9.0", + "pip-audit>=2.7.3", + "pre-commit>=4.0", +] +docs = [ + "mkdocs-material>=9.5", + "mkdocstrings[python]>=0.26", ] [tool.setuptools] -package-dir = {"" = "source"} +package-dir = {"" = "src"} include-package-data = true [tool.setuptools.packages.find] -where = ["source"] +where = ["src"] -[tool.uv] -index-url = "https://pypi.org/simple" - -[[tool.uv.index]] -name = "pytorch-cuda" -url = "https://download.pytorch.org/whl/cu128" -explicit = true +[tool.setuptools.package-data] +trialmatchai = [ + "config/*.json", + "entity_schemas/*.yaml", + "entities/resources/*.tsv", +] -[tool.uv.sources] -torch = { index = "pytorch-cuda" } -torchvision = { index = "pytorch-cuda" } -torchaudio = { index = "pytorch-cuda" } \ No newline at end of file +[tool.uv] +environments = [ + "sys_platform == 'darwin'", + "sys_platform == 'linux' and platform_machine == 'x86_64'", +] diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 1546abda..00000000 --- a/requirements.txt +++ /dev/null @@ -1,62 +0,0 @@ ---extra-index-url https://download.pytorch.org/whl/cu128 - -# Core ML / NLP -torch==2.7.1 -torchvision==0.22.1 -torchaudio==2.7.1 -transformers==4.55.0 -accelerate==1.8.1 -tokenizers==0.21.1 -safetensors==0.5.3 -sentence-transformers==2.7.0 -sentencepiece==0.2.0 -datasets==2.19.0 -faiss-cpu==1.9.0.post1 -peft==0.15.2 -einops==0.8.0 -tiktoken==0.8.0 -bitsandbytes==0.46.1 -vllm==0.10.1.1 - -# vllm dependencies (pin to avoid backtracking) -fastapi>=0.115.0 -uvicorn[standard]>=0.30.0 -dnspython>=2.6.0 -email-validator>=2.0.0 - -# Classical stack & utilities -numpy==1.26.4 -scipy==1.15.1 -scikit-learn==1.6.1 -pandas==2.2.3 -tqdm==4.67.1 -regex==2024.11.6 -orjson==3.10.14 -PyYAML==6.0.2 -python-dotenv==1.0.1 -rich==13.9.4 - -# spaCy / medspaCy (for your medical text work) -spacy==3.7.5 -medspacy==1.3.1 -medspacy_quickumls==3.2 -PyRuSH==1.0.9 -PyFastNER==1.0.10 -pysbd==0.3.4 -quicksectx==0.4.0 -gliner==0.2.16 - -# App / infra -SQLAlchemy==2.0.37 -pydantic==2.11.7 -pydantic-settings==2.7.1 - -# Optional APIs -openai==1.99.1 -httpx==0.28.1 -langchain==0.3.18 -langchain-core==0.3.35 -langchain-community==0.3.17 -langchain-openai==0.3.5 -langsmith==0.2.11 -huggingface_hub==0.34.4 \ No newline at end of file diff --git a/scripts/bootstrap_data.sh b/scripts/bootstrap_data.sh deleted file mode 100644 index 8ec1b7db..00000000 --- a/scripts/bootstrap_data.sh +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -IFS=$'\n\t' - -DATA_URL_1="https://zenodo.org/records/15516900/files/processed_trials.tar.gz?download=1" -RESOURCES_URL="https://zenodo.org/records/15516900/files/resources.tar.gz?download=1" -MODELS_URL="https://zenodo.org/records/15516900/files/models.tar.gz?download=1" -CRITERIA_ZIP_BASE_URL="https://zenodo.org/records/15516900/files" -CHUNK_PREFIX="criteria_part" -CHUNK_COUNT=6 - -ARCHIVE_1="processed_trials.tar.gz" -RESOURCES_ARCHIVE="resources.tar.gz" -MODELS_ARCHIVE="models.tar.gz" - -GREEN='\033[0;32m' -NC='\033[0m' -info() { echo -e "${GREEN}[INFO]${NC} $*"; } -error() { echo -e "[ERROR] $*" >&2; exit 1; } - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -DATA_DIR="${ROOT_DIR}/data" - -info "Preparing data directory..." -mkdir -p "$DATA_DIR" -cd "$DATA_DIR" - -if [ ! -f "$ARCHIVE_1" ]; then - info "Downloading ${ARCHIVE_1}..." - curl -fsSL "$DATA_URL_1" -o "$ARCHIVE_1" -else - info "${ARCHIVE_1} already exists. Skipping download." -fi - -if [ ! -f "$RESOURCES_ARCHIVE" ]; then - info "Downloading ${RESOURCES_ARCHIVE}..." - curl -fsSL "$RESOURCES_URL" -o "$RESOURCES_ARCHIVE" -else - info "${RESOURCES_ARCHIVE} already exists. Skipping download." -fi - -if [ ! -f "$MODELS_ARCHIVE" ]; then - info "Downloading ${MODELS_ARCHIVE}..." - curl -fsSL "$MODELS_URL" -o "$MODELS_ARCHIVE" -else - info "${MODELS_ARCHIVE} already exists. Skipping download." -fi - -if [ ! -d "processed_criteria" ]; then - info "Downloading and extracting processed_criteria chunks..." - mkdir -p processed_criteria - - for i in $(seq 0 $((CHUNK_COUNT - 1))); do - chunk_zip="${CHUNK_PREFIX}_${i}.zip" - chunk_url="${CRITERIA_ZIP_BASE_URL}/${chunk_zip}?download=1" - - if [ ! -f "$chunk_zip" ]; then - info "Downloading $chunk_zip..." - curl -fsSL "$chunk_url" -o "$chunk_zip" - else - info "$chunk_zip already exists. Skipping download." - fi - - info "Extracting $chunk_zip into processed_criteria..." - unzip -q "$chunk_zip" -d processed_criteria - done -else - info "processed_criteria already exists. Skipping extraction." -fi - -if [ ! -d "processed_trials" ]; then - info "Extracting $ARCHIVE_1..." - tar -xzvf "$ARCHIVE_1" -else - info "processed_trials already exists. Skipping extraction of $ARCHIVE_1." -fi - -cd "$ROOT_DIR" - -info "Extracting resources into source/Parser..." -mkdir -p source/Parser -tar -xzvf "$DATA_DIR/$RESOURCES_ARCHIVE" -C source/Parser - -info "Extracting models into models/..." -mkdir -p models -tar -xzvf "$DATA_DIR/$MODELS_ARCHIVE" -C models - -info "Cleaning up archives..." -rm -f "$DATA_DIR/$ARCHIVE_1" "$DATA_DIR/$RESOURCES_ARCHIVE" "$DATA_DIR/$MODELS_ARCHIVE" -for i in $(seq 0 $((CHUNK_COUNT - 1))); do - rm -f "$DATA_DIR/${CHUNK_PREFIX}_${i}.zip" -done - -info "✅ Data bootstrap complete." diff --git a/scripts/index_data.sh b/scripts/index_data.sh deleted file mode 100644 index 67285d5e..00000000 --- a/scripts/index_data.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -IFS=$'\n\t' - -GREEN='\033[0;32m' -NC='\033[0m' -info() { echo -e "${GREEN}[INFO]${NC} $*"; } -error() { echo -e "[ERROR] $*" >&2; exit 1; } - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" - -cd "$ROOT_DIR/utils/Indexer" -info "Starting index_criteria.py (trials_eligibility) ..." -nohup python index_criteria.py \ - --config config.json \ - --processed-folder ../../data/processed_criteria \ - --index-name trials_eligibility \ - --batch-size 100 \ - --max-workers 100 \ - > criteria.log 2>&1 & - -info "Starting index_trials.py (clinical_trials) ..." -nohup python index_trials.py \ - --config config.json \ - --processed-folder ../../data/processed_trials \ - --index-name clinical_trials \ - --batch-size 100 \ - > trials.log 2>&1 & - -info "Waiting for indexing jobs to complete..." -wait -info "✅ Indexing complete." diff --git a/scripts/start_es.sh b/scripts/start_es.sh deleted file mode 100644 index d4d56312..00000000 --- a/scripts/start_es.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -IFS=$'\n\t' - -GREEN='\033[0;32m' -NC='\033[0m' -info() { echo -e "${GREEN}[INFO]${NC} $*"; } -error() { echo -e "[ERROR] $*" >&2; exit 1; } - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -cd "$ROOT_DIR/elasticsearch" - -if command -v docker &> /dev/null && docker info &> /dev/null; then - info "Docker is available. Starting Elasticsearch with Docker Compose..." - docker-compose up -d --build -elif command -v apptainer &> /dev/null; then - info "Docker not found or not running. Falling back to Apptainer..." - if [ ! -f "./apptainer-run-es.sh" ]; then - error "Apptainer script not found at ./elasticsearch/apptainer-run-es.sh" - fi - bash ./apptainer-run-es.sh -else - error "Neither Docker nor Apptainer is available. Cannot continue." -fi diff --git a/setup.sh b/setup.sh deleted file mode 100644 index afb26ad8..00000000 --- a/setup.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -IFS=$'\n\t' - -#=== COLORS ===# -GREEN='\033[0;32m' -NC='\033[0m' # No Color - -#=== HELPERS ===# -info() { echo -e "${GREEN}[INFO]${NC} $*"; } -error() { echo -e "[ERROR] $*" >&2; exit 1; } - -#=== MAIN SCRIPT ===# -info "Starting TrialMatchAI setup..." - -# 0) Check for available GPUs -info "Checking for available GPUs..." - -if command -v nvidia-smi &> /dev/null; then - if nvidia-smi &> /dev/null; then - info "NVIDIA GPUs detected:" - nvidia-smi --query-gpu=index,name,memory.total --format=csv - else - info "nvidia-smi found, but no NVIDIA GPU detected or driver not loaded." - fi -else - info "No NVIDIA GPUs detected." -fi - -# 1) Install Python dependencies -if command -v uv &> /dev/null; then - info "Installing Python dependencies with uv..." - uv sync -else - if ! command -v pip &> /dev/null; then - error "pip not found. Please install Python and pip first." - fi - info "Installing Python requirements with pip..." - pip install --upgrade pip - pip install -r requirements.txt -fi - -# 2) Prepare data and models -info "Bootstrapping data and models..." -bash scripts/bootstrap_data.sh - -# 3) Launch Elasticsearch -info "Starting Elasticsearch..." -bash scripts/start_es.sh - -# 4) Launch indexers in background -info "Indexing trial data..." -bash scripts/index_data.sh - -info "✅ TrialMatchAI setup is complete!" diff --git a/source/Matcher/cli/healthcheck.py b/source/Matcher/cli/healthcheck.py deleted file mode 100644 index c82ca704..00000000 --- a/source/Matcher/cli/healthcheck.py +++ /dev/null @@ -1,66 +0,0 @@ -from __future__ import annotations - -import argparse -import sys -from pathlib import Path -from typing import Any, Dict - -from elasticsearch import Elasticsearch - -from Matcher.config.config_loader import load_config -from Matcher.services.elasticsearch_service import ensure_elasticsearch -from Matcher.utils.logging_config import setup_logging - -logger = setup_logging(__name__) - - -def main() -> int: - parser = argparse.ArgumentParser(description="TrialMatchAI healthcheck") - parser.add_argument( - "--config", - default="Matcher/config/config.json", - help="Path to config.json", - ) - parser.add_argument( - "--start-es", - action="store_true", - help="Attempt to start Elasticsearch if unreachable", - ) - args = parser.parse_args() - - config = load_config(args.config) - issues = 0 - - _check_paths(config) - - es_cfg = config["elasticsearch"] - es_client = Elasticsearch( - hosts=[es_cfg["host"]], - ca_certs=config["paths"]["docker_certs"], - basic_auth=(es_cfg["username"], es_cfg["password"]), - request_timeout=es_cfg["request_timeout"], - retry_on_timeout=es_cfg["retry_on_timeout"], - ) - - if args.start_es and es_cfg.get("auto_start") is False: - es_cfg["auto_start"] = True - - if not ensure_elasticsearch(es_client, config): - logger.error("Elasticsearch healthcheck failed.") - issues += 1 - else: - logger.info("Elasticsearch reachable.") - - return 1 if issues else 0 - - -def _check_paths(config: Dict[str, Any]) -> None: - paths = config["paths"] - for key in ["patients_dir", "output_dir", "trials_json_folder", "docker_certs"]: - path = Path(paths[key]) - if not path.exists(): - logger.warning("Path not found: %s=%s", key, path) - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/source/Matcher/config/config.json b/source/Matcher/config/config.json deleted file mode 100644 index da3642b8..00000000 --- a/source/Matcher/config/config.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "bio_med_ner": { - "biomedner_port": 18894, - "gner_port": 18783, - "gene_norm_port": 18888, - "disease_norm_port": 18892, - "biomedner_home": "Parser/", - "use_neural_normalizer": true, - "no_cuda": false - }, - "services": { - "stop_script": "biomedner_services/run_biomedner.sh", - "run_script": "biomedner_services/run_biomedner.sh" - }, - "paths": { - "patients_dir": "../example/", - "output_dir": "../results/", - "trials_json_folder": "../data/trials_jsons", - "docker_certs": "../elasticsearch/certs/ca.crt" - }, - "model": { - "base_model": "microsoft/phi-4", - "quantization": { - "load_in_4bit": true, - "bnb_4bit_use_double_quant": true, - "bnb_4bit_quant_type": "nf4", - "bnb_4bit_compute_dtype": "float16" - }, - "cot_adapter_path": "models/finetuned_phi_reasoning", - "reranker_model_path": "google/gemma-2-2b-it", - "reranker_adapter_path": "models/finetuned_gemma2" - }, - "tokenizer": { - "use_fast": true, - "padding_side": "left" - }, - "global": { - "device": 0 - }, - "elasticsearch": { - "host": "https://localhost:9200", - "username": "elastic", - "password": "CHANGE_ME", - "request_timeout": 600, - "retry_on_timeout": true, - "index_trials": "clinical_trials", - "index_trials_eligibility": "eligibility_criteria", - "auto_start": true, - "start_script": "elasticsearch/apptainer-run-es.sh", - "start_timeout": 600 - }, - "embedder": { - "model_name": "BAAI/bge-m3", - "pooling": "mean", - "max_length": 512, - "batch_size": 32, - "use_gpu": true, - "use_fp16": false, - "normalize": true - }, - "cot": { - "batch_size": 10 - }, - "LLM_reranker": { - "batch_size": 20 - }, - "search": { - "vector_score_threshold": 0.5, - "max_trials_first_level": 300, - "max_trials_second_level": 100 - }, - "use_cot_reasoning": true, - "cot_backend": "vllm", - "rag": { - "batch_size": 4, - "max_trials_rag": 20 - }, - "vllm": { - "batch_size": 100, - "max_new_tokens": 5000, - "temperature": 0.0, - "top_p": 1.0, - "seed": 1234, - "length_bucket": true, - "gpu_memory_utilization": 0.5, - "max_model_len": 8192, - "tensor_parallel_size": 1 - } -} diff --git a/source/Matcher/config/config_loader.py b/source/Matcher/config/config_loader.py deleted file mode 100644 index 58023354..00000000 --- a/source/Matcher/config/config_loader.py +++ /dev/null @@ -1,34 +0,0 @@ -from __future__ import annotations - -import json -import os -from typing import Any, Dict - -from Matcher.config.settings import TrialMatchSettings, apply_env_overrides -from Matcher.utils.logging_config import setup_logging - -try: - from dotenv import load_dotenv -except Exception: # pragma: no cover - optional dependency - load_dotenv = None - - -logger = setup_logging(__name__) - - -def load_config(config_path: str = "Matcher/config/config.json") -> Dict[str, Any]: - """Load and validate configuration from a JSON file with env overrides.""" - if load_dotenv: - load_dotenv() - if not os.path.exists(config_path): - raise FileNotFoundError(f"Configuration file not found: {config_path}") - with open(config_path, "r", encoding="utf-8") as f: - raw: Dict[str, Any] = json.load(f) - raw = apply_env_overrides(raw) - settings = TrialMatchSettings.model_validate(raw) - cfg = settings.to_dict() - if cfg.get("elasticsearch", {}).get("password") in {"", "CHANGE_ME"}: - logger.warning( - "Elasticsearch password is not set. Use TRIALMATCHAI_ES_PASSWORD to supply it." - ) - return cfg diff --git a/source/Matcher/config/settings.py b/source/Matcher/config/settings.py deleted file mode 100644 index bd66cc38..00000000 --- a/source/Matcher/config/settings.py +++ /dev/null @@ -1,177 +0,0 @@ -from __future__ import annotations - -from typing import Any, Dict, Optional - -from pydantic import BaseModel, Field, field_validator - - -class BioMedNerSettings(BaseModel): - biomedner_port: int - gner_port: int - gene_norm_port: int - disease_norm_port: int - biomedner_home: str - use_neural_normalizer: bool = True - no_cuda: bool = False - - -class ServicesSettings(BaseModel): - stop_script: str - run_script: str - - -class PathsSettings(BaseModel): - patients_dir: str - output_dir: str - trials_json_folder: str - docker_certs: str - - -class ModelQuantizationSettings(BaseModel): - load_in_4bit: bool = True - bnb_4bit_use_double_quant: bool = True - bnb_4bit_quant_type: str = "nf4" - bnb_4bit_compute_dtype: str = "float16" - - -class ModelSettings(BaseModel): - base_model: str - quantization: ModelQuantizationSettings - cot_adapter_path: str - reranker_model_path: str - reranker_adapter_path: str - - -class TokenizerSettings(BaseModel): - use_fast: bool = True - padding_side: str = "left" - - -class GlobalSettings(BaseModel): - device: int | str - - -class ElasticsearchSettings(BaseModel): - host: str - username: str - password: str - request_timeout: int = 600 - retry_on_timeout: bool = True - index_trials: str - index_trials_eligibility: str - auto_start: bool = False - start_script: str = "elasticsearch/apptainer-run-es.sh" - start_timeout: int = Field(600, ge=1) - - -class EmbedderSettings(BaseModel): - model_name: str = "BAAI/bge-m3" - pooling: str = "mean" - max_length: int = 512 - batch_size: int = 32 - use_gpu: bool = True - use_fp16: bool = False - normalize: bool = True - - @field_validator("pooling") - @classmethod - def validate_pooling(cls, value: str) -> str: - if value not in {"mean", "cls"}: - raise ValueError("embedder.pooling must be 'mean' or 'cls'") - return value - - -class SearchSettings(BaseModel): - vector_score_threshold: float = Field(0.5, ge=0.0, le=1.0) - max_trials_first_level: int = Field(300, ge=1) - max_trials_second_level: int = Field(100, ge=1) - - -class RagSettings(BaseModel): - batch_size: int = Field(4, ge=1) - max_trials_rag: int = Field(20, ge=1) - - -class VllmSettings(BaseModel): - batch_size: int = Field(100, ge=1) - max_new_tokens: int = Field(5000, ge=1) - temperature: float = Field(0.0, ge=0.0) - top_p: float = Field(1.0, ge=0.0, le=1.0) - seed: int = 1234 - length_bucket: bool = True - gpu_memory_utilization: float = Field(0.5, gt=0.0, le=1.0) - max_model_len: int = Field(8192, ge=256) - tensor_parallel_size: int = Field(1, ge=1) - - -class CotSettings(BaseModel): - batch_size: int = Field(10, ge=1) - - -class LLMRerankerSettings(BaseModel): - batch_size: int = Field(20, ge=1) - - -class TrialMatchSettings(BaseModel): - bio_med_ner: BioMedNerSettings - services: ServicesSettings - paths: PathsSettings - model: ModelSettings - tokenizer: TokenizerSettings - global_: GlobalSettings = Field(alias="global") - elasticsearch: ElasticsearchSettings - embedder: EmbedderSettings - cot: CotSettings - LLM_reranker: LLMRerankerSettings - search: SearchSettings - use_cot_reasoning: bool = True - cot_backend: str = "vllm" - rag: RagSettings - vllm: VllmSettings - - @field_validator("cot_backend") - @classmethod - def validate_cot_backend(cls, value: str) -> str: - if value not in {"default", "vllm"}: - raise ValueError("cot_backend must be 'default' or 'vllm'") - return value - - def to_dict(self) -> Dict[str, Any]: - return self.model_dump(by_alias=True) - - -def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: - """Override config with environment variables for sensitive fields.""" - import os - - env_map = { - "TRIALMATCHAI_ES_HOST": ("elasticsearch", "host"), - "TRIALMATCHAI_ES_USERNAME": ("elasticsearch", "username"), - "TRIALMATCHAI_ES_PASSWORD": ("elasticsearch", "password"), - "TRIALMATCHAI_EMBEDDER_MODEL_NAME": ("embedder", "model_name"), - } - for env_key, path in env_map.items(): - value = os.getenv(env_key) - if value: - cursor: Dict[str, Any] = raw - for key in path[:-1]: - cursor = cursor.setdefault(key, {}) - cursor[path[-1]] = value - auto_start = os.getenv("TRIALMATCHAI_ES_AUTO_START") - if auto_start is not None: - cursor = raw.setdefault("elasticsearch", {}) - cursor["auto_start"] = auto_start.strip().lower() in {"1", "true", "yes"} - - start_script = os.getenv("TRIALMATCHAI_ES_START_SCRIPT") - if start_script: - cursor = raw.setdefault("elasticsearch", {}) - cursor["start_script"] = start_script - - start_timeout = os.getenv("TRIALMATCHAI_ES_START_TIMEOUT") - if start_timeout: - cursor = raw.setdefault("elasticsearch", {}) - try: - cursor["start_timeout"] = int(start_timeout) - except ValueError: - pass - return raw diff --git a/source/Matcher/main.py b/source/Matcher/main.py deleted file mode 100644 index 9351a66b..00000000 --- a/source/Matcher/main.py +++ /dev/null @@ -1,395 +0,0 @@ -from __future__ import annotations - -from pathlib import Path -from typing import Dict, List, Optional, Tuple - -import torch -from Parser.biomedner_engine import BioMedNER - -from elasticsearch import Elasticsearch - -from Matcher.config.config_loader import load_config -from Matcher.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig -from Matcher.models.llm.llm_loader import load_model_and_tokenizer -from Matcher.models.llm.llm_reranker import LLMReranker -from Matcher.models.llm.vllm_loader import load_vllm_engine -from Matcher.pipeline.cot_reasoning import BatchTrialProcessor -from Matcher.pipeline.cot_reasoning_vllm import BatchTrialProcessorVLLM -from Matcher.pipeline.phenopacket_processor import process_phenopacket -from Matcher.pipeline.trial_ranker import ( - load_trial_data, - rank_trials, - save_ranked_trials, -) -from Matcher.pipeline.trial_search.first_level_search import ClinicalTrialSearch -from Matcher.pipeline.trial_search.second_level_search import SecondStageRetriever -from Matcher.services.biomedner_service import initialize_biomedner_services -from Matcher.services.elasticsearch_service import ensure_elasticsearch -from Matcher.utils.file_utils import ( - create_directory, - read_json_file, - read_text_file, - write_json_file, - write_text_file, -) -from Matcher.schemas.phenopacket import Keywords, Phenopacket -from Matcher.utils.logging_config import reset_request_id, set_request_id, setup_logging -from Matcher.utils.timing import log_timing - -logger = setup_logging(__name__) - - -def run_first_level_search( - keywords: Dict, - output_folder: str, - patient_info: Dict, - bio_med_ner, - embedder: TextEmbedder, - config: Dict, - es_client: Elasticsearch, -) -> Optional[Tuple]: - main_conditions = keywords.get("main_conditions", []) - other_conditions = keywords.get("other_conditions", []) - expanded_sentences = keywords.get("expanded_sentences", []) - - if not main_conditions: - logger.error("No main_conditions found in keywords.") - return None - - condition = main_conditions[0] - age = patient_info.get("age", "all") - sex = patient_info.get("gender", "all") - overall_status = "All" - - index_name = config["elasticsearch"]["index_trials"] - cts = ClinicalTrialSearch(es_client, embedder, index_name, bio_med_ner) - - # Get synonyms and expand main conditions - synonyms = cts.get_synonyms(condition.lower().strip()) - main_conditions.extend(synonyms[:5]) - - search_size = config["search"].get("max_trials_first_level", 300) - trials, scores = cts.search_trials( - condition=condition, - age_input=age, - sex=sex, - overall_status=overall_status, - size=search_size, - pre_selected_nct_ids=None, - synonyms=main_conditions, - other_conditions=other_conditions, - vector_score_threshold=config["search"]["vector_score_threshold"], - ) - - nct_ids = [trial.get("nct_id") for trial in trials if trial.get("nct_id")] - first_level_scores = { - trial.get("nct_id"): score - for trial, score in zip(trials, scores) - if trial.get("nct_id") - } - - write_text_file([str(nid) for nid in nct_ids], f"{output_folder}/nct_ids.txt") - write_json_file(first_level_scores, f"{output_folder}/first_level_scores.json") - - logger.info(f"First-level search complete: {len(nct_ids)} trial IDs saved.") - return ( - nct_ids, - main_conditions, - other_conditions, - expanded_sentences, - first_level_scores, - ) - - -def run_second_level_search( - output_folder: str, - nct_ids: List[str], - main_conditions: List[str], - other_conditions: List[str], - expanded_sentences: List[str], - gemma_retriever: SecondStageRetriever, - first_level_scores: Dict, - config: Dict, -) -> Tuple: - queries = list(set(main_conditions + other_conditions + expanded_sentences))[:10] - logger.info(f"Running second-level retrieval with {len(queries)} queries ...") - - # Add synonyms for second level - if queries: - synonyms = gemma_retriever.get_synonyms(queries[0]) - queries.extend(synonyms[:3]) - - top_n = min(len(nct_ids), config["search"].get("max_trials_second_level", 100)) - second_level_results = gemma_retriever.retrieve_and_rank( - queries, nct_ids, top_n=top_n - ) - - combined_scores = {} - for trial in second_level_results: - trial_id = trial["nct_id"] - second_score = trial["score"] - first_score = first_level_scores.get(trial_id, 0) - combined_scores[trial_id] = first_score + second_score - - sorted_trials = sorted(combined_scores.items(), key=lambda x: x[1], reverse=True) - num_top = max(1, min(len(sorted_trials) // 3, top_n)) - semi_final_trials = sorted_trials[:num_top] - - top_trials_path = f"{output_folder}/top_trials.txt" - write_text_file([trial_id for trial_id, _ in semi_final_trials], top_trials_path) - - logger.info("Second-level retrieval and ranking complete. Top trials saved.") - return semi_final_trials, top_trials_path - - -def run_rag_processing( - output_folder: str, - top_trials_file: str, - patient_info: Dict, - model, - tokenizer, - config: Dict, -): - top_trials = read_text_file(top_trials_file) - if not top_trials: - logger.error("No top trials available for RAG processing.") - return - - top_trials = top_trials[: config["rag"].get("max_trials_rag", 20)] - patient_profile = patient_info.get("split_raw_description", []) - if not patient_profile: - logger.error("No patient profile available for RAG processing.") - return - - # Check if vLLM backend is configured - cot_backend = config.get("cot_backend", "default") - use_vllm = cot_backend == "vllm" - - if use_vllm: - logger.info("Using vLLM backend for CoT reasoning") - - # Load vLLM configuration - vllm_cfg = config.get("vllm", {}) - - # Load vLLM engine - vllm_engine, vllm_tokenizer, lora_request = load_vllm_engine( - model_config=config.get("model", {}), - vllm_cfg=vllm_cfg, - ) - - # Create vLLM processor - rag_processor = BatchTrialProcessorVLLM( - llm=vllm_engine, # type: ignore - tokenizer=vllm_tokenizer, - batch_size=vllm_cfg.get("batch_size", 16), - use_cot=config.get("use_cot_reasoning", True), - max_new_tokens=vllm_cfg.get("max_new_tokens", 5000), - temperature=vllm_cfg.get("temperature", 0.0), - top_p=vllm_cfg.get("top_p", 1.0), - seed=vllm_cfg.get("seed", 1234), - length_bucket=vllm_cfg.get("length_bucket", True), - lora_request=lora_request, - ) - else: - logger.info("Using default (HuggingFace) backend for CoT reasoning") - - batch_size = min(config["rag"]["batch_size"] * 2, 8) - if tokenizer.pad_token is None: - tokenizer.pad_token = tokenizer.eos_token - - rag_processor = BatchTrialProcessor( - model, - tokenizer, - device=config["global"]["device"], - batch_size=batch_size, - ) - - rag_processor.process_trials( - nct_ids=top_trials, - json_folder=config["paths"]["trials_json_folder"], - output_folder=output_folder, - patient_profile=patient_profile, - ) - write_json_file({"status": "done"}, f"{output_folder}/rag_output.json") - logger.info("RAG-based trial matching complete.") - - -def main_pipeline(): - logger.info("Starting TrialMatchAI pipeline...") - config = load_config() - paths = config["paths"] - create_directory(paths["output_dir"]) - - if torch.cuda.is_available(): - torch.backends.cudnn.benchmark = True - if hasattr(torch.backends.cuda, "enable_flash_sdp"): - torch.backends.cuda.enable_flash_sdp(True) - - initialize_biomedner_services(config) - - import warnings - - with warnings.catch_warnings(): - warnings.filterwarnings( - "ignore", message=".*quantization_config.*", category=UserWarning - ) - model, tokenizer = load_model_and_tokenizer( - config["model"], config["global"]["device"] - ) - - if tokenizer.pad_token is None: # type: ignore - tokenizer.pad_token = tokenizer.eos_token # type: ignore - if hasattr(model.config, "pad_token_id") and model.config.pad_token_id is None: # type: ignore - model.config.pad_token_id = tokenizer.pad_token_id # type: ignore - - if config["global"]["device"] != "cpu" and torch.cuda.is_available(): - model = model.half() # type: ignore - - # Initialize components - embedder_cfg = config.get("embedder", {}) - embedder = TextEmbedder( - TextEmbedderConfig( - model_name=embedder_cfg.get("model_name", "BAAI/bge-m3"), - pooling=embedder_cfg.get("pooling", "mean"), - max_length=embedder_cfg.get("max_length", 512), - batch_size=embedder_cfg.get("batch_size", 32), - use_gpu=embedder_cfg.get("use_gpu", True), - use_fp16=embedder_cfg.get("use_fp16", False), - normalize=embedder_cfg.get("normalize", True), - ) - ) - bio_med_ner = BioMedNER(**config["bio_med_ner"]) - - with warnings.catch_warnings(): - warnings.filterwarnings( - "ignore", message=".*quantization_config.*", category=UserWarning - ) - llm_reranker = LLMReranker( - model_path=config["model"]["reranker_model_path"], - adapter_path=config["model"]["reranker_adapter_path"], - device=config["global"]["device"], - batch_size=config["rag"]["batch_size"] * 2, - ) - - es_client = Elasticsearch( - hosts=[config["elasticsearch"]["host"]], - ca_certs=paths["docker_certs"], - basic_auth=( - config["elasticsearch"]["username"], - config["elasticsearch"]["password"], - ), - request_timeout=config["elasticsearch"]["request_timeout"], - retry_on_timeout=config["elasticsearch"]["retry_on_timeout"], - ) - if not ensure_elasticsearch(es_client, config): - return - - gemma_retriever = SecondStageRetriever( - es_client=es_client, - llm_reranker=llm_reranker, - embedder=embedder, - index_name=config["elasticsearch"]["index_trials_eligibility"], - bio_med_ner=bio_med_ner, - ) - - # Process phenopackets - patient_folder = Path(paths["patients_dir"]) - if not patient_folder.exists(): - logger.error("Patients folder not found: %s", patient_folder) - return - phenopacket_files = sorted( - [p for p in patient_folder.iterdir() if p.suffix == ".json"] - ) - if not phenopacket_files: - logger.warning("No patient files found in %s", patient_folder) - return - - for phenopacket_path in phenopacket_files: - patient_id = phenopacket_path.stem - token = set_request_id(patient_id) - output_folder = Path(paths["output_dir"]) / patient_id - create_directory(str(output_folder)) - - input_file = str(phenopacket_path) - output_file = str(output_folder / "keywords.json") - - try: - with log_timing(logger, "Phenopacket processing"): - with torch.no_grad(): - process_phenopacket( - input_file, output_file, model=model, tokenizer=tokenizer - ) - - keywords = Keywords.model_validate(read_json_file(output_file)).model_dump() - patient_info = Phenopacket.model_validate( - read_json_file(input_file) - ).model_dump() - patient_info["split_raw_description"] = keywords.get( - "expanded_sentences", [] - ) - - # Run pipeline - with log_timing(logger, "First-level search"): - with torch.no_grad(): - result = run_first_level_search( - keywords, - str(output_folder), - patient_info, - bio_med_ner, - embedder, - config, - es_client, - ) - if not result: - logger.error("First-level search failed for %s", patient_id) - continue - - ( - nct_ids, - main_conditions, - other_conditions, - expanded_sentences, - first_level_scores, - ) = result - - with log_timing(logger, "Second-level search"): - with torch.no_grad(): - _, top_trials_path = run_second_level_search( - str(output_folder), - nct_ids, - main_conditions, - other_conditions, - expanded_sentences, - gemma_retriever, - first_level_scores, - config, - ) - - with log_timing(logger, "RAG processing"): - with torch.no_grad(): - run_rag_processing( - str(output_folder), - top_trials_path, - patient_info, - model, - tokenizer, - config, - ) - - with log_timing(logger, "Final ranking"): - trial_data = load_trial_data(str(output_folder)) - ranked_trials = rank_trials(trial_data) - save_ranked_trials( - ranked_trials, str(output_folder / "ranked_trials.json") - ) - - logger.info("Pipeline completed for patient %s", patient_id) - except Exception: - logger.exception("Pipeline failed for patient %s", patient_id) - continue - finally: - reset_request_id(token) - - -if __name__ == "__main__": - main_pipeline() diff --git a/source/Matcher/models/embedding/__init__.py b/source/Matcher/models/embedding/__init__.py deleted file mode 100644 index 06c33a33..00000000 --- a/source/Matcher/models/embedding/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from Matcher.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig - -__all__ = ["TextEmbedder", "TextEmbedderConfig"] diff --git a/source/Matcher/models/embedding/query_embedder.py b/source/Matcher/models/embedding/query_embedder.py deleted file mode 100644 index 8290a366..00000000 --- a/source/Matcher/models/embedding/query_embedder.py +++ /dev/null @@ -1,24 +0,0 @@ -from Matcher.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig - - -class QueryEmbedder(TextEmbedder): - def __init__( - self, - model_name: str = "ncbi/MedCPT-Query-Encoder", - max_length: int = 512, - use_gpu: bool = True, - use_fp16: bool = False, - batch_size: int = 32, - normalize: bool = True, - ): - super().__init__( - TextEmbedderConfig( - model_name=model_name, - pooling="cls", - max_length=max_length, - batch_size=batch_size, - use_gpu=use_gpu, - use_fp16=use_fp16, - normalize=normalize, - ) - ) diff --git a/source/Matcher/models/embedding/sentence_embedder.py b/source/Matcher/models/embedding/sentence_embedder.py deleted file mode 100644 index 69fd5684..00000000 --- a/source/Matcher/models/embedding/sentence_embedder.py +++ /dev/null @@ -1,24 +0,0 @@ -from Matcher.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig - - -class SecondLevelSentenceEmbedder(TextEmbedder): - def __init__( - self, - model_name: str = "BAAI/bge-m3", - use_gpu: bool = True, - use_fp16: bool = False, - max_length: int = 512, - batch_size: int = 32, - normalize: bool = True, - ): - super().__init__( - TextEmbedderConfig( - model_name=model_name, - pooling="mean", - max_length=max_length, - batch_size=batch_size, - use_gpu=use_gpu, - use_fp16=use_fp16, - normalize=normalize, - ) - ) diff --git a/source/Matcher/models/embedding/text_embedder.py b/source/Matcher/models/embedding/text_embedder.py deleted file mode 100644 index 288df642..00000000 --- a/source/Matcher/models/embedding/text_embedder.py +++ /dev/null @@ -1,86 +0,0 @@ -from __future__ import annotations - -from dataclasses import dataclass -from typing import Iterable, List, Literal, Sequence, Any - -import torch -import torch.nn.functional as F -from transformers import AutoModel, AutoTokenizer - -from Matcher.utils.logging_config import setup_logging - -logger = setup_logging(__name__) - - -PoolingStrategy = Literal["cls", "mean"] - - -@dataclass(frozen=True) -class TextEmbedderConfig: - model_name: str = "BAAI/bge-m3" - pooling: PoolingStrategy = "mean" - max_length: int = 512 - batch_size: int = 32 - use_gpu: bool = True - use_fp16: bool = False - normalize: bool = True - - -class TextEmbedder: - def __init__(self, config: TextEmbedderConfig): - self.config = config - self.device = torch.device( - "cuda" if config.use_gpu and torch.cuda.is_available() else "cpu" - ) - logger.info( - "Loading embedder model %s on device %s", config.model_name, self.device - ) - self.tokenizer = AutoTokenizer.from_pretrained(config.model_name) - self.model = AutoModel.from_pretrained(config.model_name).to(self.device) - self.model.eval() - if config.use_fp16 and self.device.type == "cuda": - self.model = self.model.half() - logger.info("Embedder model converted to FP16") - - def embed_text(self, text: str) -> List[float]: - vectors = self.embed_texts([text]) - if not vectors: - raise ValueError("Cannot embed empty text.") - return vectors[0] - - def embed_texts(self, texts: Sequence[str]) -> List[List[float]]: - cleaned = [t.strip() for t in texts if t and t.strip()] - if not cleaned: - return [] - vectors: List[List[float]] = [] - for batch in _batched(cleaned, self.config.batch_size): - enc = self.tokenizer( - batch, - padding=True, - truncation=True, - return_tensors="pt", - max_length=self.config.max_length, - ).to(self.device) - with torch.inference_mode(): - outputs = self.model(**enc) - pooled = self._pool(outputs, enc["attention_mask"]) - if self.config.normalize: - pooled = F.normalize(pooled, p=2, dim=1) - vectors.extend(pooled.cpu().tolist()) - return vectors - - def _pool(self, outputs: Any, attention_mask: torch.Tensor) -> torch.Tensor: - if self.config.pooling == "cls": - return outputs.last_hidden_state[:, 0, :] - token_embeddings = outputs.last_hidden_state - mask = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float() - summed = torch.sum(token_embeddings * mask, dim=1) - counts = torch.clamp(mask.sum(dim=1), min=1e-9) - return summed / counts - - -def _batched(items: Sequence[str], batch_size: int) -> Iterable[Sequence[str]]: - if batch_size <= 0: - raise ValueError("batch_size must be positive.") - for i in range(0, len(items), batch_size): - yield items[i : i + batch_size] diff --git a/source/Matcher/models/llm/llm_loader.py b/source/Matcher/models/llm/llm_loader.py deleted file mode 100644 index 5259e1ff..00000000 --- a/source/Matcher/models/llm/llm_loader.py +++ /dev/null @@ -1,123 +0,0 @@ -from typing import Tuple - -import torch -from Matcher.utils.logging_config import setup_logging -from peft import PeftModel -from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig - -logger = setup_logging(__name__) - - -def load_model_and_tokenizer( - model_config: dict, device: int -) -> Tuple[AutoModelForCausalLM, AutoTokenizer]: - """Load a model and tokenizer with safe device handling and optional 4-bit.""" - use_cuda = torch.cuda.is_available() - device_str = "cuda" if use_cuda else "cpu" - quant_config = None - attn_impl = None - # Select best dtype - compute_dtype = torch.float32 - if use_cuda and torch.cuda.is_bf16_supported(): - compute_dtype = torch.bfloat16 - elif use_cuda: - compute_dtype = torch.float16 - - if use_cuda: - cuda_count = torch.cuda.device_count() - idx = int(device) if isinstance(device, int) else 0 - if idx < 0 or idx >= cuda_count: - logger.warning( - f"Requested CUDA device {device} invalid; using 0 (num_gpus={cuda_count})." - ) - idx = 0 - try: - torch.cuda.set_device(idx) - except Exception as e: - logger.warning( - f"torch.cuda.set_device({idx}) failed: {e}. Falling back to 0." - ) - idx = 0 - torch.cuda.set_device(idx) - device_str = f"cuda:{idx}" - - # Prefer FlashAttention-2 if available, else SDPA - attn_impl = "sdpa" - try: - import flash_attn # noqa: F401 - - major, minor = torch.cuda.get_device_capability(idx) - if (major * 10 + minor) >= 75: - attn_impl = "flash_attention_2" - logger.info("Using FlashAttention-2.") - else: - logger.info("FlashAttention-2 unsupported on this GPU; using SDPA.") - except Exception: - logger.info("flash-attn not available; using SDPA.") - - quant_config = BitsAndBytesConfig( - load_in_4bit=bool(model_config["quantization"]["load_in_4bit"]), - bnb_4bit_use_double_quant=bool( - model_config["quantization"]["bnb_4bit_use_double_quant"] - ), - bnb_4bit_quant_type=str( - model_config["quantization"]["bnb_4bit_quant_type"] - ), - bnb_4bit_compute_dtype=compute_dtype, - ) - logger.info(f"Loading model on {device_str} with 4-bit quantization.") - else: - logger.warning( - "CUDA not available; loading model on CPU without 4-bit quantization." - ) - device_str = "cpu" - quant_config = BitsAndBytesConfig(load_in_4bit=False) - - tokenizer = AutoTokenizer.from_pretrained( - model_config["base_model"], - use_fast=True, - padding_side="left", - trust_remote_code=True, - ) - # Always left-pad decoder-only models; keep most recent tokens if truncation occurs. - tokenizer.padding_side = "left" - tokenizer.truncation_side = "left" - tokenizer.pad_token = tokenizer.eos_token - if attn_impl == "flash_attention_2": - logger.info( - "Using FlashAttention-2; keeping padding_side='left' for decoder-only models." - ) - - model = AutoModelForCausalLM.from_pretrained( - model_config["base_model"], - trust_remote_code=True, - torch_dtype=compute_dtype if use_cuda else torch.float32, - device_map=device_str, - attn_implementation=attn_impl, - quantization_config=quant_config, - low_cpu_mem_usage=True, - ) - # Ensure KV cache usage for faster generation - try: - model.config.use_cache = True - except Exception: - pass - - model = PeftModel.from_pretrained( - model, model_config["cot_adapter_path"], device_map=device_str - ) - - # Optional: compile for extra speed when supported - if bool(model_config.get("compile", False)): - try: - model = torch.compile(model, mode="max-autotune", fullgraph=False) - logger.info("Model compiled with torch.compile.") - except Exception as e: - logger.warning(f"torch.compile failed; continuing without it. Err: {e}") - - if isinstance(model, torch.nn.Module): - model.eval() - else: - logger.warning("Model is not an instance of torch.nn.Module; skipping eval.") - logger.info(f"Model loaded on {device_str}.") - return model, tokenizer # type: ignore[return-value] diff --git a/source/Matcher/models/llm/llm_reranker.py b/source/Matcher/models/llm/llm_reranker.py deleted file mode 100644 index 1c18cf2c..00000000 --- a/source/Matcher/models/llm/llm_reranker.py +++ /dev/null @@ -1,147 +0,0 @@ -import re -import threading -import unicodedata -from concurrent.futures import ThreadPoolExecutor, as_completed -from typing import Dict, List, Optional - -import torch -import torch.nn.functional as F -from Matcher.utils.logging_config import setup_logging -from peft import PeftModel -from tqdm import tqdm -from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig - -logger = setup_logging(__name__) - - -class LLMReranker: - def __init__( - self, - model_path: str, - adapter_path: Optional[str] = None, - device: int = 0, - torch_dtype=torch.float16, - batch_size: int = 8, - ): - self.model_path = model_path - self.adapter_path = adapter_path - self.torch_dtype = torch_dtype - self.batch_size = batch_size - # Resolve device string - if torch.cuda.is_available(): - cuda_count = torch.cuda.device_count() - idx = int(device) if isinstance(device, int) else 0 - if idx < 0 or idx >= cuda_count: - logger.warning( - f"LLMReranker: requested CUDA device {device} invalid; using 0 (num_gpus={cuda_count})." - ) - idx = 0 - self.device_str = f"cuda:{idx}" - # Ensure Accelerate/HF loaders use the selected GPU when device_map='auto' - try: - torch.cuda.set_device(idx) - except Exception as e: - logger.warning(f"Could not set CUDA device to {idx}: {e}") - else: - logger.warning("LLMReranker: CUDA not available; using CPU.") - self.device_str = "cpu" - - self.tokenizer = AutoTokenizer.from_pretrained( - self.model_path, trust_remote_code=True - ) - self._initialize_token_ids() - self.model = self.load_model() - self.model_lock = threading.Lock() - - def _initialize_token_ids(self): - responses = ["Yes", "No"] - token_ids = [ - self.tokenizer(response, add_special_tokens=False)["input_ids"] - for response in responses - ] - self.applicable_token_id, self.not_applicable_token_id = [ - ids[0] for ids in token_ids - ] - - def load_model(self): - use_cuda = self.device_str.startswith("cuda") - quant_config = ( - BitsAndBytesConfig( - load_in_4bit=True, - bnb_4bit_use_double_quant=True, - bnb_4bit_quant_type="nf4", - bnb_4bit_compute_dtype=self.torch_dtype, - ) - if use_cuda - else None - ) - model = AutoModelForCausalLM.from_pretrained( - self.model_path, - torch_dtype=self.torch_dtype if use_cuda else torch.float32, - quantization_config=quant_config, - device_map="auto" if use_cuda else None, - attn_implementation="flash_attention_2" if use_cuda else None, - trust_remote_code=True, - ) - if self.adapter_path: - model = PeftModel.from_pretrained(model, self.adapter_path) - model.eval() - return model - - def preprocess_text(self, text: str) -> str: - text = unicodedata.normalize("NFKD", text) - text = re.sub(r"\s+", " ", text) - return text.strip() - - def create_messages(self, patient_text: str, trial_text: str) -> List[Dict]: - system_prompt = ( - "You are a clinical assistant tasked with determining whether the patient information (Statement A) " - "provides enough details to evaluate whether the patient satisfies or violates the clinical " - "trial eligibility criterion (Statement B). Respond with 'Yes' if Statement A contains sufficient " - "information to make this evaluation, or 'No' if it does not." - ) - return [ - {"role": "user", "content": system_prompt}, - {"role": "assistant", "content": " "}, - { - "role": "user", - "content": f"Statement A: {patient_text}\nStatement B: {trial_text}\n\n", - }, - ] - - def process_batch(self, batch: List[tuple]) -> List[Dict]: - batch_prompts = [] - for patient_text, trial_text in batch: - messages = self.create_messages( - self.preprocess_text(patient_text), self.preprocess_text(trial_text) - ) - prompt = self.tokenizer.apply_chat_template( - messages, tokenize=False, add_generation_prompt=True - ) - batch_prompts.append(prompt) - inputs = self.tokenizer(batch_prompts, return_tensors="pt", padding=True) - inputs = {k: v.to(self.device_str) for k, v in inputs.items()} - with self.model_lock: - with torch.no_grad(): - outputs = self.model(**inputs) - logits = outputs.logits[:, -1, :] - probabilities = F.softmax(logits, dim=-1) - applicable_probs = probabilities[:, self.applicable_token_id].tolist() - return [ - {"llm_score": prob, "answer": "Yes" if prob > 0.5 else "No"} - for prob in applicable_probs - ] - - def rank_pairs(self, patient_trial_pairs: List[tuple]) -> List[Dict]: - batches = [ - patient_trial_pairs[i : i + self.batch_size] - for i in range(0, len(patient_trial_pairs), self.batch_size) - ] - results = [] - with ThreadPoolExecutor(max_workers=4) as executor: - futures = [executor.submit(self.process_batch, batch) for batch in batches] - for future in tqdm( - as_completed(futures), total=len(futures), desc="Processing batches" - ): - results.extend(future.result()) - return results diff --git a/source/Matcher/pipeline/cot_reasoning.py b/source/Matcher/pipeline/cot_reasoning.py deleted file mode 100644 index aa75c35f..00000000 --- a/source/Matcher/pipeline/cot_reasoning.py +++ /dev/null @@ -1,335 +0,0 @@ -import json -import os -import time -from typing import Dict, List - -import torch -from Matcher.utils.file_utils import read_json_file, write_json_file, write_text_file -from Matcher.utils.logging_config import setup_logging -from tqdm import tqdm - -logger = setup_logging(__name__) - - -class BatchTrialProcessor: - def __init__( - self, - model, - tokenizer, - device: int, - batch_size: int = 4, - use_cot: bool = True, - max_new_tokens: int = 5000, # keep long answers - ): - """ - Optimized for throughput while preserving long outputs. - - Key improvements: - - model.eval(), use_cache, TF32 hints, and SDPA/FlashAttention2 when available - - length bucketing (sort by prompt token length) to reduce padding waste - - telemetry for tokens/sec and stage timings - """ - self.device = device - self.device_str = f"cuda:{device}" - self.batch_size = batch_size - self.model = model - self.tokenizer = tokenizer - self.use_cot = use_cot - self.max_new_tokens = max_new_tokens - - # ---- Inference-time performance knobs (safe if available) ---- - self.model.eval() - try: - # Allow TF32 on Ampere+ (gives a free speedup for matmuls with minimal accuracy loss) - torch.backends.cuda.matmul.allow_tf32 = True - torch.set_float32_matmul_precision("high") - except Exception: - pass - - # Prefer fast attention kernels if supported by your install - try: - from transformers.utils.import_utils import is_flash_attn_2_available - - if hasattr(self.model, "config"): - if is_flash_attn_2_available(): - self.model.config.attn_implementation = "flash_attention_2" - else: - # SDPA is the PyTorch fused attention (fast on recent torch) - self.model.config.attn_implementation = "sdpa" - except Exception: - # Fall back silently; HF will pick the best available - pass - - # Ensure caching is on for generation - try: - if hasattr(self.model, "config") and hasattr( - self.model.config, "use_cache" - ): - self.model.config.use_cache = True - except Exception: - pass - - # Pad token handling (avoids warnings for decoder-only models) - try: - if ( - self.tokenizer.pad_token_id is None - and self.tokenizer.eos_token_id is not None - ): - self.tokenizer.pad_token = self.tokenizer.eos_token - except Exception: - pass - - # ---------------------- I/O helpers ---------------------- - - def _load_trial_data(self, nct_id: str, json_folder: str) -> str: - try: - path = f"{json_folder}/{nct_id}.json" - trial_data = read_json_file(path) - return trial_data.get("eligibility_criteria", "") - except Exception as e: - logger.error(f"Error loading {nct_id}: {str(e)}") - return "" - - # ---------------------- Prompting ---------------------- - - def _format_prompt(self, criteria_text: str, patient_profile: str) -> str: - criteria_text_formatted = ( - f"Eligibility Criteria:\n{criteria_text}" - if criteria_text - else "No eligibility criteria provided." - ) - - if self.use_cot: - system_msg = ( - "You are a medical expert with advanced knowledge in clinical reasoning, diagnostics, and treatment planning. " - "Answer the following question. Before answering, create a concise chain of thoughts reasoning to ensure a logical and accurate response.\n" - ) - chat = [ - {"role": "system", "content": system_msg}, - { - "role": "user", - "content": ( - "Assess the given patient's eligibility for a clinical trial by evaluating each and every criterion individually.\n\n" - "### INCLUSION CRITERIA ASSESSMENT\n" - "For each inclusion criterion, classify it as one of:\n" - "- **Met:** The patient's data explicitly and unequivocally satisfies the criterion.\n" - "- **Not Met:** The patient's data explicitly and unequivocally contradicts or fails to satisfy the criterion.\n" - "- **Unclear:** Insufficient or missing patient data to verify.\n" - "- **Irrelevant:** The criterion does not apply to the patient's context.\n\n" - "### EXCLUSION CRITERIA ASSESSMENT\n" - "For each exclusion criterion, classify it as one of:\n" - "- **Violated:** The patient's data explicitly and unequivocally violates the criterion.\n" - "- **Not Violated:** The patient's data confirms compliance with the criterion.\n" - "- **Unclear:** Insufficient or missing patient data to verify.\n" - "- **Irrelevant:** The criterion does not apply to the patient's context.\n\n" - "### IMPORTANT INSTRUCTIONS\n" - "- Ensure all criteria are assessed one-by-one.\n" - "- Use **only** the provided patient data; **do not infer, assume, or extrapolate beyond the given information.**\n" - "- Justifications must be strictly based on direct evidence from the patient profile.\n" - "### RESPONSE FORMAT (STRICTLY FOLLOW)\n" - "{\n" - ' "Inclusion_Criteria_Evaluation": [\n' - ' {"Criterion": "Exact inclusion criterion text", "Classification": "Met | Not Met | Unclear | Irrelevant", "Justification": "Clear, evidence-based rationale using ONLY provided data"}\n' - " ],\n" - ' "Exclusion_Criteria_Evaluation": [\n' - ' {"Criterion": "Exact exclusion criterion text", "Classification": "Violated | Not Violated | Unclear | Irrelevant", "Justification": "Clear, evidence-based rationale using ONLY provided data"}\n' - " ],\n" - ' "Recap": "Concise summary of key qualifying/disqualifying factors",\n' - ' "Final Decision": "Eligible | Likely Eligible (leaning toward inclusion) | Likely Ineligible (leaning toward exclusion) | Ineligible"\n' - "}\n\n" - "### INPUT\n" - "---Start of Clinical Trial Criteria---\n" - f"{criteria_text_formatted}\n" - "---End of Clinical Trial Criteria---\n\n" - "----\n" - "---Start of Patient Description---\n" - f"{patient_profile}\n" - "Written informed consent has been obtained from the patient or their legal representative.\n" - "---End of Patient Description---\n" - "## IMPORTANT REMINDER:\n" - "NEVER make assumptions, inferences, or extrapolations beyond the explicitly stated patient information." - ), - }, - ] - else: - chat = [ - { - "role": "system", - "content": ( - "You are a clinical assistant tasked with assessing the eligibility of a patient for a clinical trial. " - "Output only a JSON object evaluating trial eligibility for the patient based only on the provided criteria and patient profile.\n" - ), - }, - { - "role": "user", - "content": ( - "For each criterion, classify:\n" - '- If Inclusion Criterion: "Met" | "Not Met" | "Unclear" | "Irrelevant"\n' - '- If Exclusion Criterion: "Violated" | "Not Violated" | "Unclear" | "Irrelevant"\n\n' - "Provide a justification for each classification based strictly on the provided data. " - "Output this JSON schema:\n" - "{\n" - ' "Inclusion_Criteria_Evaluation": [ {"Criterion": "...", "Classification": "...", "Justification": "..."} ],\n' - ' "Exclusion_Criteria_Evaluation": [ {"Criterion": "...", "Classification": "...", "Justification": "..."} ],\n' - ' "Final Decision": "Eligible | Likely Eligible | Likely Ineligible | Ineligible"\n' - "}\n\n" - "---Start of Clinical Trial Criteria---\n" - f"{criteria_text_formatted}\n" - "---End of Clinical Trial Criteria---\n\n" - "---Start of Patient Description---\n" - f"{patient_profile}\n" - "---End of Patient Description---\n" - ), - }, - ] - - if hasattr(self.tokenizer, "apply_chat_template"): - return self.tokenizer.apply_chat_template( - chat, tokenize=False, add_generation_prompt=True - ) - # Fallback: simple concatenation - system_part = f"{chat[0]['content']}\n\n" - user_part = f"{chat[1]['content']}\n\n" - return system_part + user_part + "Answer: " - - # ---------------------- Core batch path ---------------------- - - def _process_batch(self, batch: List[Dict], output_folder: str): - """ - Expects a list of dicts with keys: nct_id, prompt - """ - try: - t0 = time.time() - # Tokenize once; pad to the longest in this batch only - tokenized = self.tokenizer( - [item["prompt"] for item in batch], - padding=True, - truncation=True, # keep to model max length to avoid OOM - return_tensors="pt", - ) - input_len = tokenized["input_ids"].shape[1] - tokenized = tokenized.to(self.device_str) - t1 = time.time() - - # Autocast to model dtype if it's half/bfloat16 for extra speed - model_dtype = next(self.model.parameters()).dtype - use_autocast = model_dtype in (torch.float16, torch.bfloat16) - - with torch.inference_mode(): - ctx = ( - torch.autocast(device_type="cuda", dtype=model_dtype) - if use_autocast - else torch.cuda.amp.autocast(enabled=False) - ) - with ctx: - outputs = self.model.generate( - **tokenized, - max_new_tokens=self.max_new_tokens, # long answers kept - do_sample=False, - use_cache=True, - pad_token_id=self.tokenizer.pad_token_id - if self.tokenizer.pad_token_id is not None - else self.tokenizer.eos_token_id, - eos_token_id=self.tokenizer.eos_token_id, - num_return_sequences=1, - return_dict_in_generate=False, - ) - t2 = time.time() - - # Decode only the generated tail - gen_len = outputs.shape[1] - input_len - decoded_responses = self.tokenizer.batch_decode( - outputs[:, input_len:], skip_special_tokens=True - ) - - # Persist outputs - for item, response in zip(batch, decoded_responses): - self._save_outputs(item["nct_id"], response, output_folder) - - # Telemetry - total_gen_tokens = gen_len * len(batch) - gen_time = t2 - t1 - logger.info( - f"[GPU {self.device}] batch={len(batch)} | in_len={input_len} | " - f"out_len≈{gen_len} | tokenize+H2D={t1 - t0:.2f}s | " - f"generate={gen_time:.2f}s | ~{(total_gen_tokens / gen_time) if gen_time > 0 else 0:.1f} tok/s" - ) - except Exception as e: - logger.error(f"Batch processing failed: {str(e)}") - for item in batch: - logger.error(f"Failed trial: {item['nct_id']}") - - # ---------------------- Persistence ---------------------- - - def _save_outputs(self, nct_id: str, response: str, output_folder: str): - try: - os.makedirs(output_folder, exist_ok=True) - txt_path = f"{output_folder}/{nct_id}.txt" - write_text_file([response], txt_path) - try: - # naive JSON slice (you may replace with a balanced-brace parser if needed) - start = response.find("{") - end = response.rfind("}") - if start != -1 and end != -1 and end > start: - json_str = response[start : end + 1] - json_data = json.loads(json_str) - write_json_file(json_data, f"{output_folder}/{nct_id}.json") - logger.info(f"Processed {nct_id} successfully") - else: - logger.error(f"Invalid JSON boundaries for {nct_id}") - except json.JSONDecodeError as e: - logger.error(f"Invalid JSON response for {nct_id}: {str(e)}") - except Exception as e: - logger.error(f"Failed to save {nct_id}: {str(e)}") - - # ---------------------- Public API ---------------------- - - def process_trials( - self, - nct_ids: List[str], - json_folder: str, - output_folder: str, - patient_profile: List[str], - ): - """ - Length-buckets all prompts to reduce padding overhead, then processes in batches. - Keeps existing outputs (idempotent resume). - """ - patient_text = " ".join( - str(line).strip() for line in patient_profile if str(line).strip() - ) - - # Build worklist, skipping already-processed trials - items: List[Dict] = [] - for nct_id in nct_ids: - output_path = f"{output_folder}/{nct_id}.json" - if os.path.exists(output_path): - logger.info(f"Skipping existing: {nct_id}") - continue - criteria_text = self._load_trial_data(nct_id, json_folder) - prompt = self._format_prompt(criteria_text, patient_text) - - # Measure token length once for bucketing (no truncation here) - try: - tok = self.tokenizer(prompt, add_special_tokens=False) - tok_len = len(tok["input_ids"]) - except Exception: - # Fallback: rough char-based estimate if tokenizer hiccups - tok_len = max(1, len(prompt) // 4) - - items.append({"nct_id": nct_id, "prompt": prompt, "tok_len": tok_len}) - - if not items: - logger.info("No work to do.") - return - - # Sort by length (ascending) => minimal padding inside batches - items.sort(key=lambda x: x["tok_len"]) - - # Process in batches - for i in tqdm( - range(0, len(items), self.batch_size), - desc=f"GPU {self.device} Processing Trials", - ): - batch = items[i : i + self.batch_size] - self._process_batch(batch, output_folder) diff --git a/source/Matcher/pipeline/phenopacket_processor.py b/source/Matcher/pipeline/phenopacket_processor.py deleted file mode 100644 index fbfbcd2c..00000000 --- a/source/Matcher/pipeline/phenopacket_processor.py +++ /dev/null @@ -1,386 +0,0 @@ -import json -import re -from typing import Dict, List, Optional - -import torch -from Matcher.schemas.phenopacket import Phenopacket -from Matcher.utils.file_utils import read_json_file, write_json_file -from Matcher.utils.logging_config import setup_logging -from Matcher.utils.temporal_utils import parse_iso_duration, parse_temporal -from transformers import AutoModelForCausalLM, AutoTokenizer - -logger = setup_logging(__name__) - - -class PhenopacketProcessor: - def __init__(self, file_path: str): - self.phenopacket = self._load_and_validate(file_path) - self.medical_sentences: List[str] = [] - self.ontology_cache: Dict[str, str] = {} - - def _load_and_validate(self, file_path: str) -> Dict: - data = read_json_file(file_path) - try: - Phenopacket.model_validate(data) - logger.info("Phenopacket loaded and validated successfully.") - except Exception as exc: - raise ValueError(f"Invalid Phenopacket: {exc}") from exc - return data - - def _add_medical_sentence(self, category: str, content: str): - self.medical_sentences.append(f"{category.upper()}: {content}") - - def _get_ontology_label(self, term_id: str) -> str: - if term_id in self.ontology_cache: - return self.ontology_cache[term_id] - for resource in self.phenopacket.get("metaData", {}).get("resources", []): - if term_id.startswith(resource.get("namespacePrefix", "")): - label = term_id.split("/")[-1].replace("_", " ") - self.ontology_cache[term_id] = label - return label - return term_id - - def generate_medical_narrative(self) -> List[str]: - try: - self._extract_subject() - self._extract_phenotypic_features() - self._extract_diseases() - self._extract_biosamples() - self._extract_interpretations() - self._extract_medical_actions() - self._extract_measurements() - self._extract_family() - logger.info("Medical narrative generation completed successfully.") - return self.medical_sentences - except Exception as e: - logger.error(f"Narrative generation failed: {e}") - raise - - def _extract_subject(self): - subject = self.phenopacket.get("subject", {}) - demographics = [ - f"Sex: {subject.get('sex', 'Unknown')}", - f"DOB: {subject.get('dateOfBirth', 'Unknown')}", - ] - if "timeAtLastEncounter" in subject: - encounter_time = parse_temporal(subject.get("timeAtLastEncounter")) - demographics.append(f"Last Encounter: {encounter_time}") - if "taxonomy" in subject: - demographics.append( - f"Species: {subject['taxonomy'].get('label', 'Unknown')}" - ) - if subject.get("description"): - demographics.append(f"Description: {subject.get('description')}") - self._add_medical_sentence("DEMOGRAPHICS", "; ".join(demographics)) - - def _extract_phenotypic_features(self): - for pf in self.phenopacket.get("phenotypicFeatures", []): - feature = pf.get("type", {}) - label = self._get_ontology_label(feature.get("label", "Unknown")) - details = ["Absent" if pf.get("excluded", False) else "Present"] - if "severity" in pf: - severity = self._get_ontology_label( - pf["severity"].get("label", "Unknown") - ) - details.append(f"Severity: {severity}") - temporal = parse_temporal(pf.get("onset")) - if temporal: - details.append(f"Onset: {temporal}") - if "modifiers" in pf: - mods = [ - self._get_ontology_label(m.get("label", "Unknown")) - for m in pf["modifiers"] - ] - details.append(f"Modifiers: {', '.join(mods)}") - descs = [] - if pf.get("description"): - descs.append(pf.get("description")) - if feature.get("description"): - descs.append(feature.get("description")) - if descs: - details.append("Description: " + " ".join(descs)) - self._add_medical_sentence("PHENOTYPE", f"{label}: {'; '.join(details)}") - - def _extract_diseases(self): - for disease in self.phenopacket.get("diseases", []): - term = disease.get("term", {}) - label = self._get_ontology_label(term.get("label", "Unknown")) - details = [] - if "diseaseStage" in disease: - stages = [ - self._get_ontology_label(s.get("label", "Unknown")) - for s in disease["diseaseStage"] - ] - details.append(f"Stage: {', '.join(stages)}") - if "tnmFinding" in disease: - tnm = [ - self._get_ontology_label(t.get("label", "Unknown")) - for t in disease["tnmFinding"] - ] - details.append(f"TNM: {', '.join(tnm)}") - onset = parse_temporal(disease.get("onset")) - if onset: - details.append(f"Onset: {onset}") - if disease.get("description"): - details.append(f"Description: {disease.get('description')}") - self._add_medical_sentence("DIAGNOSIS", f"{label}: {'; '.join(details)}") - - def _extract_biosamples(self): - for sample in self.phenopacket.get("biosamples", []): - details = [ - f"Type: {self._get_ontology_label(sample.get('sampleType', {}).get('label', 'Unknown'))}", - f"Tissue: {self._get_ontology_label(sample.get('sampledTissue', {}).get('label', 'Unknown'))}", - f"Collection: {parse_temporal(sample.get('timeOfCollection'))}", - ] - if "histologicalDiagnosis" in sample: - hd = sample["histologicalDiagnosis"] - details.append( - f"Histology: {self._get_ontology_label(hd.get('label', 'Unknown'))}" - ) - if sample.get("description"): - details.append(f"Description: {sample.get('description')}") - self._add_medical_sentence("BIOSAMPLE", "; ".join(details)) - - def _extract_measurements(self): - for meas in self.phenopacket.get("measurements", []): - assay = self._get_ontology_label(meas.get("assay", {}).get("id", "Unknown")) - value_info = meas.get("value", {}) - unit_label = value_info.get("unit", {}).get("label", "") - value = f"{value_info.get('value', 'Unknown')} {unit_label}".strip() - content = f"{assay}: {value}" - if meas.get("description"): - content += f"; Description: {meas.get('description')}" - self._add_medical_sentence("MEASUREMENT", content) - - def _extract_medical_actions(self): - for action in self.phenopacket.get("medicalActions", []): - if "treatment" in action: - tx = action["treatment"] - details = [ - f"Agent: {self._get_ontology_label(tx.get('agent', {}).get('label', 'Unknown'))}", - f"Route: {tx.get('routeOfAdministration', {}).get('label', 'Unknown')}", - ] - if "doseIntervals" in tx and tx["doseIntervals"]: - dose_info = tx["doseIntervals"][0].get("quantity", {}) - dose_unit = dose_info.get("unit", {}).get("label", "") - details.append( - f"Dose: {dose_info.get('value', 'Unknown')} {dose_unit}".strip() - ) - if tx.get("description"): - details.append(f"Description: {tx.get('description')}") - self._add_medical_sentence("TREATMENT", "; ".join(details)) - if "procedure" in action: - proc = action["procedure"] - performed = proc.get("performed", "unknown date") - proc_details = ( - f"{proc.get('code', {}).get('label', 'Procedure')} on {performed}" - ) - if proc.get("description"): - proc_details += f"; Description: {proc.get('description')}" - self._add_medical_sentence("PROCEDURE", proc_details) - - def _extract_interpretations(self): - for interpret in self.phenopacket.get("interpretations", []): - if "diagnosis" not in interpret: - continue - dx = interpret["diagnosis"] - details = [ - f"Status: {dx.get('diagnosisStatus', {}).get('label', 'unknown')}" - ] - if dx.get("description"): - details.append(f"Description: {dx.get('description')}") - for gi in dx.get("genomicInterpretations", []): - if "variantInterpretation" in gi: - var = gi["variantInterpretation"].get("variationDescriptor", {}) - gene = var.get("geneContext", {}).get("symbol", "Unknown gene") - details.append(f"{gene} {var.get('label', 'variant')}") - if interpret.get("description"): - details.append(f"Note: {interpret.get('description')}") - self._add_medical_sentence("INTERPRETATION", "; ".join(details)) - - def _extract_family(self): - family = self.phenopacket.get("family") - if not family: - return - relatives = family.get("relatives", []) - for relative in relatives: - rel_id = relative.get("id", "Unknown") - sex = relative.get("sex", "Unknown") - vital_status = relative.get("vitalStatus", {}).get("status", "Unknown") - age_at_death = parse_iso_duration( - relative.get("vitalStatus", {}) - .get("ageAtDeath", {}) - .get("iso8601duration", "") - ) - rel_phens = [] - for pf in relative.get("phenotypicFeatures", []): - label = self._get_ontology_label( - pf.get("type", {}).get("label", "Unknown") - ) - onset = parse_temporal(pf.get("onset")) - rel_phens.append(f"{label} (onset: {onset})") - description = relative.get("description", "") - summary = f"Relative {rel_id} ({sex}) - Vital status: {vital_status}" - if age_at_death: - summary += f", Age at death: {age_at_death}" - if rel_phens: - summary += f"; Phenotypes: {', '.join(rel_phens)}" - if description: - summary += f"; Description: {description}" - self._add_medical_sentence("FAMILY_HISTORY", summary) - pedigree = family.get("pedigree", {}) - if pedigree.get("persons"): - summary = ( - f"Pedigree defined with {len(pedigree['persons'])} individuals." - ) - self._add_medical_sentence("FAMILY_PEDIGREE", summary) - - -class ClinicalSummarizer: - def __init__(self, model=None, tokenizer=None, model_name: Optional[str] = None): - if model is not None: - if tokenizer is None: - raise ValueError( - "A tokenizer must be provided if a model instance is given." - ) - self.model = model - self.tokenizer = tokenizer - elif model_name is not None: - self.tokenizer = AutoTokenizer.from_pretrained(model_name) - self.model = AutoModelForCausalLM.from_pretrained( - model_name, - torch_dtype=torch.float16, - device_map="auto", - ) - else: - raise ValueError( - "Must provide either a model instance with its tokenizer or a model_name." - ) - - self.model.eval() - - def generate_summary(self, sentences: List[str]) -> Dict: - SYSTEM_PROMPT = """ - You are a specialized medical assistant designed for precise and accurate clinical trial matching. - Analyze the patient's medical description carefully and extract clinically relevant information for trial eligibility assessment. - - 1. **Primary Condition**: - - Determine the primary medical conditions based on explicit patient information and overall clinical context. - - List up to 10 medically recognized synonyms, aliases, or closely related medical terms for the primary conditions. - - Include the identified primary conditions and their associated synonyms or related terms within the "main_conditions" list. - - 2. **Secondary Clinical Factors**: - - Provide up to 50 clinically significant additional factors, including comorbidities, concurrent medical conditions, molecular or genetic biomarkers, prior therapies, relevant medical history, and clinically notable patient characteristics explicitly mentioned in the patient description. - - Provide these factors in the "other_conditions" list. - - 3. **Expanded Clinical Descriptions**: - - Based solely on the original patient-provided data, generate semantically accurate and medically sound statements resembling real-life medical notes. - - **Crucial**: Expanded descriptions must strictly reflect explicit patient-reported information without introducing new or inferred medical details. - - Output: - Return a JSON object in the exact following structure without any additional commentary: - - { - "main_conditions": ["PrimaryCondition", "Synonym1", "Synonym2", "..."], - "other_conditions": ["AdditionalCondition1", "AdditionalCondition2", "..."], - "expanded_sentences": [ - "Expanded note for sentence 1...", - "Expanded note for sentence 2...", - "..." - ] - } - """ - messages = [ - {"role": "system", "content": SYSTEM_PROMPT.strip()}, - {"role": "user", "content": " ".join(sentences)}, - ] - - try: - prompt = self.tokenizer.apply_chat_template( - messages, - truncate=False, - add_generation_prompt=True, - return_tensors="pt", - ).to(self.model.device) - - with torch.no_grad(): - output_ids = self.model.generate( - prompt, - max_new_tokens=2048, - do_sample=False, - return_dict_in_generate=False, - pad_token_id=self.tokenizer.eos_token_id, - ) - - # Only decode the newly generated tokens - generated_text = self.tokenizer.decode( - output_ids[0][prompt.shape[-1] :], skip_special_tokens=True - ) - return self._extract_llm_output(generated_text) - - except Exception as e: - logger.error(f"LLM generation failed: {e}") - return { - "main_conditions": [], - "other_conditions": [], - "expanded_sentences": [], - "error": str(e), - } - - def _extract_llm_output(self, generated_text: str) -> Dict: - try: - match = re.search(r"\{.*\}", generated_text, re.DOTALL) - if not match: - logger.error("No JSON object found in LLM output") - return { - "error": "No JSON object found", - "main_conditions": [], - "other_conditions": [], - "expanded_sentences": [], - } - json_str = match.group() - json_str = re.sub(r"```(?:json)?\s*", "", json_str) - json_str = re.sub(r"\s*```", "", json_str) - result = json.loads(json_str) - expected_keys = [ - "main_conditions", - "other_conditions", - "expanded_sentences", - ] - if not all(key in result for key in expected_keys): - raise ValueError("Missing required JSON keys in LLM output") - return result - except json.JSONDecodeError as e: - logger.error(f"JSON decoding failed: {e}") - return { - "error": f"Invalid JSON format: {str(e)}", - "main_conditions": [], - "other_conditions": [], - "expanded_sentences": [], - } - - -def process_phenopacket( - input_file: str, - output_file: str, - model=None, - tokenizer=None, - model_name: str = "microsoft/phi-2", -) -> bool: - try: - processor = PhenopacketProcessor(input_file) - narrative = processor.generate_medical_narrative() - summarizer = ( - ClinicalSummarizer(model=model, tokenizer=tokenizer) - if model and tokenizer - else ClinicalSummarizer(model_name=model_name) - ) - summary = summarizer.generate_summary(narrative) - write_json_file(summary, output_file) - logger.info( - f"Successfully processed {input_file} and saved results to {output_file}" - ) - return True - except Exception as e: - logger.error(f"Processing failed: {e}") - return False diff --git a/source/Matcher/pipeline/trial_ranker.py b/source/Matcher/pipeline/trial_ranker.py deleted file mode 100644 index 9de662c5..00000000 --- a/source/Matcher/pipeline/trial_ranker.py +++ /dev/null @@ -1,82 +0,0 @@ -import os -from typing import Dict, List - -from Matcher.utils.file_utils import read_json_file, write_json_file -from Matcher.utils.logging_config import setup_logging - -logger = setup_logging(__name__) - - -def load_trial_data(json_folder: str) -> List[Dict]: - trial_data = [] - for file_name in os.listdir(json_folder): - if file_name.endswith(".json"): - file_path = os.path.join(json_folder, file_name) - trial_id = os.path.splitext(file_name)[0] - try: - trial = read_json_file(file_path) - trial["TrialID"] = trial_id - trial_data.append(trial) - except Exception as e: - logger.error(f"Failed to load {file_name}: {e}") - return trial_data - - -def score_trial(trial: Dict) -> float: - def calculate_ratio( - criteria_list, positive_classifications, negative_classifications - ): - criteria_to_exclude = ["Irrelevant", "Unclear"] - criteria_list = [ - c - for c in criteria_list - if c.get("Classification") not in criteria_to_exclude - ] - total_criteria = len(criteria_list) - if total_criteria == 0: - return 0.0 - positive_count = sum( - 1 - for c in criteria_list - if c.get("Classification") in positive_classifications - ) - negative_count = sum( - 1 - for c in criteria_list - if c.get("Classification") in negative_classifications - ) - penalty_factor_negative = 1.0 - reward_factor_positive = 1.0 - score = ( - reward_factor_positive * positive_count - - penalty_factor_negative * negative_count - ) / total_criteria - return score - - inclusion_criteria = trial.get("Inclusion_Criteria_Evaluation", []) - exclusion_criteria = trial.get("Exclusion_Criteria_Evaluation", []) - inclusion_ratio = calculate_ratio( - inclusion_criteria, ["Met", "Not Violated"], ["Violated", "Not Met"] - ) - exclusion_ratio = calculate_ratio( - exclusion_criteria, ["Not Violated", "Met"], ["Violated"] - ) - return (inclusion_ratio + exclusion_ratio) / 2 - - -def rank_trials(trial_data: List[Dict]) -> List[Dict]: - ranked_trials = [] - for trial in trial_data: - trial_id = trial.get("TrialID", "Unknown") - score = score_trial(trial) - ranked_trials.append({"TrialID": trial_id, "Score": score}) - ranked_trials.sort(key=lambda x: x["Score"], reverse=True) - return ranked_trials - - -def save_ranked_trials(ranked_trials: List[Dict], output_file: str): - try: - write_json_file({"RankedTrials": ranked_trials}, output_file) - logger.info(f"Ranked trials saved to {output_file}") - except Exception as e: - logger.error(f"Failed to save ranked trials: {e}") diff --git a/source/Matcher/pipeline/trial_search/first_level_search.py b/source/Matcher/pipeline/trial_search/first_level_search.py deleted file mode 100644 index 547b44db..00000000 --- a/source/Matcher/pipeline/trial_search/first_level_search.py +++ /dev/null @@ -1,470 +0,0 @@ -from datetime import datetime -from typing import Dict, List, Optional, Tuple, Union - -from dateutil import parser as date_parser -from Matcher.models.embedding.text_embedder import TextEmbedder -from Matcher.utils.logging_config import setup_logging -from Matcher.utils.retry import with_retries - -from elasticsearch import Elasticsearch - -logger = setup_logging(__name__) - - -class ClinicalTrialSearch: - def __init__( - self, - es_client: Elasticsearch, - embedder: Optional[TextEmbedder], - index_name: str, - bio_med_ner, - ): - self.es_client = es_client - self.embedder = embedder - self.index_name = index_name - self.bio_med_ner = bio_med_ner - - def get_synonyms(self, condition: str) -> List[str]: - if not self.bio_med_ner: - logger.info("BioMedNER disabled; skipping synonyms extraction.") - return [] - try: - raw_result = self.bio_med_ner.annotate_texts_in_parallel( - [condition], max_workers=1 - ) - ner_results = raw_result - if ner_results and ner_results[0]: - synonyms = set() - for entity in ner_results[0]: - if entity.get("entity_group", "").lower() == "disease": - synonyms.update(entity.get("synonyms", [])) - return list(synonyms) - logger.warning(f"No annotations found for condition: {condition}") - except Exception as e: - logger.error(f"BioMedNER synonym extraction failed for '{condition}': {e}") - return [] - - def parse_age_input(self, age_input: Union[int, str]) -> Optional[int]: - if isinstance(age_input, int): - return age_input - elif isinstance(age_input, str): - age_input = age_input.strip().lower() - age_keywords = ["year", "years", "yr", "yrs"] - try: - for keyword in age_keywords: - if age_input.endswith(keyword): - age_str = age_input.replace(keyword, "").strip() - return int(age_str) - return int(age_input) - except ValueError: - pass - try: - dob = date_parser.parse(age_input, fuzzy=True) - today = datetime.today() - age = ( - today.year - - dob.year - - ((today.month, today.day) < (dob.month, dob.day)) - ) - if age < 0: - raise ValueError("Invalid date of birth.") - return age - except (ValueError, OverflowError, date_parser.ParserError): - pass - return None - - def get_max_text_score(self, synonyms: List[str]) -> float: - should_clauses = [ - { - "multi_match": { - "query": syn, - "fields": [ - "condition^6", - "eligibility_criteria^4", - "brief_title^3", - "brief_summary^2", - "detailed_description^1.5", - "official_title", - ], - "type": "best_fields", - "operator": "and", - } - } - for syn in synonyms - ] - try: - response = with_retries( - lambda: self.es_client.search( - index=self.index_name, - body={ - "size": 1, - "query": { - "bool": {"should": should_clauses, "minimum_should_match": 0} - }, - "track_total_hits": False, - "_source": False, - }, - ), - logger=logger, - action="ES max_text_score search", - ) - max_score = response["hits"]["max_score"] - return max_score if max_score else 1.0 - except Exception: - logger.exception("Failed to compute max text score; defaulting to 1.0") - return 1.0 - - def create_query( - self, - synonyms: List[str], - embeddings: Dict[str, List[float]], - age: int, - sex: str, - overall_status: Optional[str], - max_text_score: float, - vector_score_threshold: float = 0.5, - pre_selected_nct_ids: Optional[List[str]] = None, - other_conditions: Optional[List[str]] = None, - search_mode: str = "hybrid", - ) -> Dict: - sex = sex.upper() - gender_terms = { - "MALE": ["MALE", "Male", "male", "M", "All", "all", "ALL"], - "FEMALE": ["FEMALE", "Female", "female", "F", "All", "all", "ALL"], - "ALL": [ - "All", - "all", - "ALL", - "Both", - "both", - "BOTH", - "FEMALE", - "Female", - "female", - "F", - "MALE", - "Male", - "male", - "M", - ], - }.get(sex, ["All"]) - filters = [] - if age not in [None, "all", "ALL", "All"]: - filters.append( - { - "bool": { - "must": [ - { - "bool": { - "should": [ - {"range": {"minimum_age": {"lte": age}}}, - { - "bool": { - "must_not": { - "exists": {"field": "minimum_age"} - } - } - }, - ] - } - }, - { - "bool": { - "should": [ - {"range": {"maximum_age": {"gte": age}}}, - { - "bool": { - "must_not": { - "exists": {"field": "maximum_age"} - } - } - }, - ] - } - }, - ] - } - } - ) - if overall_status and overall_status.lower() != "all": - filters.append({"match": {"overall_status": overall_status}}) - if pre_selected_nct_ids: - filters.append({"terms": {"nct_id": pre_selected_nct_ids}}) - if gender_terms: - filters.append( - { - "bool": { - "should": [ - {"terms": {"gender": gender_terms}}, - {"bool": {"must_not": {"exists": {"field": "gender"}}}}, - ] - } - } - ) - - # Cap conditions to prevent too many ES clauses (each condition creates 2 clauses) - # ES default maxClauseCount is 1024, leaving room for filters and other clauses - max_conditions_per_query = 800 # Conservative limit - all_conditions = synonyms + (other_conditions or []) - if len(all_conditions) > max_conditions_per_query: - logger.warning( - f"Capping search conditions from {len(all_conditions)} to {max_conditions_per_query} to avoid ES clause limit" - ) - # Prioritize synonyms over other_conditions - capped_synonyms = synonyms[:max_conditions_per_query] - remaining_slots = max_conditions_per_query - len(capped_synonyms) - capped_other = ( - (other_conditions or [])[:remaining_slots] - if remaining_slots > 0 - else [] - ) - synonyms = capped_synonyms - other_conditions = capped_other - - should_clauses = [] - for condition in synonyms + (other_conditions or []): - if condition: - for match_type in ["best_fields", "phrase"]: - multi_match = { - "query": condition, - "fields": [ - "condition^6", - "eligibility_criteria^4", - "brief_title^3", - "brief_summary^2", - "detailed_description^1.5", - "official_title", - ], - "type": match_type, - } - if match_type == "best_fields": - multi_match["operator"] = "and" - should_clauses.append({"multi_match": multi_match}) - - logger.info( - f"Created query with {len(should_clauses)} should clauses for {len(synonyms)} synonyms and {len(other_conditions or [])} other conditions" - ) - - search_mode = (search_mode or "hybrid").lower() - if search_mode == "bm25": - return { - "bool": { - "should": should_clauses, - "minimum_should_match": 0, - "filter": filters, - } - } - - # Prepare vectors for vector/hybrid - query_vectors = [ - embeddings[term] for term in synonyms if term in embeddings and term - ] - other_vectors = [ - embeddings[term] - for term in (other_conditions or []) - if term in embeddings and term - ] - - if search_mode == "vector": - return { - "script_score": { - "query": { - "bool": { - "filter": filters, - } - }, - "script": { - "source": """ - double maxConditionVectorScore = 0.0; - double maxTitleVectorScore = 0.0; - double maxSummaryVectorScore = 0.0; - double maxEligibilityVectorScore = 0.0; - double totalOtherConditionScore = 0.0; - for (int i = 0; i < params.query_vectors.length; ++i) { - maxConditionVectorScore = Math.max(maxConditionVectorScore, cosineSimilarity(params.query_vectors[i], 'condition_vector')); - maxTitleVectorScore = Math.max(maxTitleVectorScore, cosineSimilarity(params.query_vectors[i], 'brief_title_vector')); - maxSummaryVectorScore = Math.max(maxSummaryVectorScore, cosineSimilarity(params.query_vectors[i], 'brief_summary_vector')); - maxEligibilityVectorScore = Math.max(maxEligibilityVectorScore, cosineSimilarity(params.query_vectors[i], 'eligibility_criteria_vector')); - } - int otherConditionCount = params.other_condition_vectors.length; - for (int i = 0; i < otherConditionCount; ++i) { - totalOtherConditionScore += cosineSimilarity(params.other_condition_vectors[i], 'condition_vector'); - totalOtherConditionScore += cosineSimilarity(params.other_condition_vectors[i], 'brief_title_vector'); - totalOtherConditionScore += cosineSimilarity(params.other_condition_vectors[i], 'eligibility_criteria_vector'); - totalOtherConditionScore += cosineSimilarity(params.other_condition_vectors[i], 'brief_summary_vector'); - } - if (otherConditionCount > 0) { - totalOtherConditionScore /= (otherConditionCount * 4); - } - double normalizedConditionScore = (maxConditionVectorScore + 1.0) / 2.0; - double normalizedTitleScore = (maxTitleVectorScore + 1.0) / 2.0; - double normalizedSummaryScore = (maxSummaryVectorScore + 1.0) / 2.0; - double normalizedEligibilityScore = (maxEligibilityVectorScore + 1.0) / 2.0; - double normalizedOtherConditionScore = (totalOtherConditionScore + 1.0) / 2.0; - double combinedVectorScore = ( - 0.3 * normalizedConditionScore + - 0.1 * normalizedTitleScore + - 0.1 * normalizedSummaryScore + - 0.2 * normalizedOtherConditionScore + - 0.3 * normalizedEligibilityScore - ); - if (combinedVectorScore < params.vector_score_threshold) { - return 0; - } - return combinedVectorScore; - """, - "params": { - "query_vectors": query_vectors, - "other_condition_vectors": other_vectors, - "vector_score_threshold": vector_score_threshold, - }, - }, - } - } - - # Hybrid (default) - return { - "script_score": { - "query": { - "bool": { - "should": should_clauses, - "minimum_should_match": 0, - "filter": filters, - } - }, - "script": { - "source": """ - double alpha = 0.5; - double beta = 0.5; - double textScore = _score; - double maxTextScore = params.max_text_score; - double normalizedTextScore = (maxTextScore == 0) ? 0 : textScore / maxTextScore; - double maxConditionVectorScore = 0.0; - double maxTitleVectorScore = 0.0; - double maxSummaryVectorScore = 0.0; - double maxEligibilityVectorScore = 0.0; - double totalOtherConditionScore = 0.0; - for (int i = 0; i < params.query_vectors.length; ++i) { - maxConditionVectorScore = Math.max(maxConditionVectorScore, cosineSimilarity(params.query_vectors[i], 'condition_vector')); - maxTitleVectorScore = Math.max(maxTitleVectorScore, cosineSimilarity(params.query_vectors[i], 'brief_title_vector')); - maxSummaryVectorScore = Math.max(maxSummaryVectorScore, cosineSimilarity(params.query_vectors[i], 'brief_summary_vector')); - maxEligibilityVectorScore = Math.max(maxEligibilityVectorScore, cosineSimilarity(params.query_vectors[i], 'eligibility_criteria_vector')); - } - int otherConditionCount = params.other_condition_vectors.length; - for (int i = 0; i < otherConditionCount; ++i) { - totalOtherConditionScore += cosineSimilarity(params.other_condition_vectors[i], 'condition_vector'); - totalOtherConditionScore += cosineSimilarity(params.other_condition_vectors[i], 'brief_title_vector'); - totalOtherConditionScore += cosineSimilarity(params.other_condition_vectors[i], 'eligibility_criteria_vector'); - totalOtherConditionScore += cosineSimilarity(params.other_condition_vectors[i], 'brief_summary_vector'); - } - if (otherConditionCount > 0) { - totalOtherConditionScore /= (otherConditionCount * 4); - } - double normalizedConditionScore = (maxConditionVectorScore + 1.0) / 2.0; - double normalizedTitleScore = (maxTitleVectorScore + 1.0) / 2.0; - double normalizedSummaryScore = (maxSummaryVectorScore + 1.0) / 2.0; - double normalizedEligibilityScore = (maxEligibilityVectorScore + 1.0) / 2.0; - double normalizedOtherConditionScore = (totalOtherConditionScore + 1.0) / 2.0; - double combinedVectorScore = ( - 0.3 * normalizedConditionScore + - 0.1 * normalizedTitleScore + - 0.1 * normalizedSummaryScore + - 0.2 * normalizedOtherConditionScore + - 0.3 * normalizedEligibilityScore - ); - if (combinedVectorScore < params.vector_score_threshold) { - return 0; - } - return alpha * normalizedTextScore + beta * combinedVectorScore; - """, - "params": { - "query_vectors": query_vectors, - "other_condition_vectors": other_vectors, - "max_text_score": max_text_score, - "vector_score_threshold": vector_score_threshold, - }, - }, - } - } - - def search_trials( - self, - condition: str, - age_input: Union[int, str], - sex: str, - overall_status: Optional[str] = None, - size: int = 10, - pre_selected_nct_ids: Optional[List[str]] = None, - synonyms: Optional[List[str]] = None, - other_conditions: Optional[List[str]] = None, - vector_score_threshold: float = 0.0, - search_mode: str = "hybrid", - ) -> Tuple[List[Dict], List[float]]: - if age_input not in ["all", "ALL", "All"]: - age = self.parse_age_input(age_input) - if age is None: - raise ValueError("Could not parse age input.") - else: - age = None - primary_synonyms = _clean_terms([condition] + (synonyms or [])) - other_conditions = _clean_terms(other_conditions or []) - all_terms = primary_synonyms + other_conditions - - mode = (search_mode or "hybrid").lower() - embeddings: Dict[str, List[float]] = {} - if mode in {"vector", "hybrid"} and self.embedder is not None: - vectors = self.embedder.embed_texts(all_terms) - embeddings = dict(zip(all_terms, vectors)) - if not embeddings: - logger.warning( - "No valid terms to embed for vector search. Falling back to BM25 only." - ) - mode = "bm25" - elif mode in {"vector", "hybrid"} and self.embedder is None: - logger.warning( - "Vector/hybrid mode selected but embedder is None. Falling back to BM25 only." - ) - mode = "bm25" - - max_text_score = ( - 1.0 if mode == "vector" else self.get_max_text_score(primary_synonyms) - ) - query = self.create_query( - primary_synonyms, - embeddings, - age if age is not None else 0, - sex, - overall_status, - max_text_score, - vector_score_threshold, - pre_selected_nct_ids, - other_conditions, - search_mode=mode, - ) - try: - response = with_retries( - lambda: self.es_client.search( - index=self.index_name, body={"size": size, "query": query} - ), - logger=logger, - action="ES trial search", - ) - hits = response["hits"]["hits"] - trials = [hit["_source"] for hit in hits] - scores = [hit["_score"] for hit in hits] - except Exception: - logger.exception("Search failed; returning empty results.") - return [], [] - trials_with_scores = sorted( - zip(trials, scores), key=lambda x: x[1], reverse=True - ) - top_x_percent_index = int(len(trials_with_scores) * 1.0) - trials = [trial for trial, score in trials_with_scores[:top_x_percent_index]] - logger.info( - f"[{mode}] Found {len(trials)} trials matching the search criteria." - ) - return trials, scores - - -def _clean_terms(terms: List[str]) -> List[str]: - return [term.strip() for term in terms if term and term.strip()] diff --git a/source/Matcher/pipeline/trial_search/second_level_search.py b/source/Matcher/pipeline/trial_search/second_level_search.py deleted file mode 100644 index 4bc1c78a..00000000 --- a/source/Matcher/pipeline/trial_search/second_level_search.py +++ /dev/null @@ -1,409 +0,0 @@ -import math -from collections import defaultdict -from concurrent.futures import ThreadPoolExecutor, as_completed -from typing import Dict, List, Optional - -from Matcher.models.embedding.text_embedder import TextEmbedder -from Matcher.models.llm.llm_reranker import LLMReranker -from Matcher.utils.file_utils import write_text_file -from Matcher.utils.logging_config import setup_logging -from Matcher.utils.retry import with_retries - -from elasticsearch import Elasticsearch - -logger = setup_logging(__name__) - - -class SecondStageRetriever: - def __init__( - self, - es_client: Elasticsearch, - llm_reranker: Optional[LLMReranker], # Make optional - embedder: Optional[TextEmbedder], - index_name: str, - size: int = 250, - inclusion_weight: float = 1.0, - exclusion_weight: float = 0.25, - bio_med_ner=None, - search_mode: str = "hybrid", - ): - self.es_client = es_client - self.llm_reranker = llm_reranker # Can be None - self.embedder = embedder - self.index_name = index_name - self.size = size - self.inclusion_weight = inclusion_weight - self.exclusion_weight = exclusion_weight - self.bio_med_ner = bio_med_ner - self.search_mode = search_mode.lower() if search_mode else "hybrid" - - def get_synonyms(self, condition: str) -> List[str]: - if self.bio_med_ner is None: - logger.warning("BioMedNER not initialized; cannot extract synonyms.") - return [] - raw_result = self.bio_med_ner.annotate_texts_in_parallel( - [condition], max_workers=1 - ) - ner_results = raw_result - if ner_results and ner_results[0]: - synonyms = set() - for entity in ner_results[0]: - if entity.get("entity_group", "").lower() == "disease": - synonyms.update(entity.get("synonyms", [])) - return list(synonyms) - logger.warning(f"No annotations found for condition: {condition}") - return [] - - def retrieve_criteria( - self, nct_ids: List[str], queries: List[str] - ) -> Dict[str, List[Dict]]: - query_to_hits = {} - - def execute_query(query): - # Use entities.synonyms only if BioMedNER is enabled - fields_to_search = ( - ["criterion", "entities.synonyms"] - if self.bio_med_ner is not None - else ["criterion"] - ) - - if self.search_mode == "bm25": - # BM25 only query - es_query = { - "bool": { - "should": [ - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "best_fields", - "operator": "and", - } - }, - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "phrase", - } - }, - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "best_fields", - "operator": "or", - } - }, - ], - "minimum_should_match": 1, - "filter": {"terms": {"nct_id": nct_ids}}, - } - } - elif self.search_mode == "vector": - # Vector only query - if self.embedder is None: - logger.warning( - "Vector mode selected but embedder is None. Falling back to BM25." - ) - return execute_query_bm25(query) - - vectors = self.embedder.embed_texts([query]) - if not vectors: - logger.warning( - "Empty query after preprocessing. Falling back to BM25." - ) - return execute_query_bm25(query) - query_vector = vectors[0] - es_query = { - "script_score": { - "query": { - "bool": { - "filter": {"terms": {"nct_id": nct_ids}}, - } - }, - "script": { - "source": """ - double vectorScore = (cosineSimilarity(params.query_vector, 'criterion_vector') + 1.0) / 2.0; - if (vectorScore < params.vector_score_threshold) { - return 0; - } - return vectorScore; - """, - "params": { - "query_vector": query_vector, - "vector_score_threshold": 0.5, - }, - }, - } - } - else: - # Hybrid mode (default) - if self.embedder is None: - logger.warning( - "Hybrid mode selected but embedder is None. Falling back to BM25." - ) - return execute_query_bm25(query) - - vectors = self.embedder.embed_texts([query]) - if not vectors: - logger.warning( - "Empty query after preprocessing. Falling back to BM25." - ) - return execute_query_bm25(query) - query_vector = vectors[0] - es_query = { - "script_score": { - "query": { - "bool": { - "should": [ - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "best_fields", - "operator": "and", - } - }, - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "phrase", - } - }, - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "best_fields", - "operator": "or", - } - }, - ], - "minimum_should_match": 1, - "filter": {"terms": {"nct_id": nct_ids}}, - } - }, - "script": { - "source": """ - double alpha = 0.5; - double beta = 0.5; - double textScore = _score; - double vectorScore = (cosineSimilarity(params.query_vector, 'criterion_vector') + 1.0) / 2.0; - if (vectorScore < params.vector_score_threshold) { - return 0; - } - return alpha * textScore + beta * vectorScore; - """, - "params": { - "query_vector": query_vector, - "vector_score_threshold": 0.5, - }, - }, - } - } - - try: - response = with_retries( - lambda: self.es_client.search( - index=self.index_name, body={"size": self.size, "query": es_query} - ), - logger=logger, - action="ES criteria search", - ) - hits = response["hits"]["hits"] - logger.info( - "[%s] Retrieved %s documents for query: '%s'", - self.search_mode, - len(hits), - query, - ) - return query, hits - except Exception: - logger.exception("Second-level search failed for query: %s", query) - return query, [] - - def execute_query_bm25(query): - # Helper function for BM25-only fallback - fields_to_search = ( - ["criterion", "entities.synonyms"] - if self.bio_med_ner is not None - else ["criterion"] - ) - es_query = { - "bool": { - "should": [ - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "best_fields", - "operator": "and", - } - }, - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "phrase", - } - }, - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "best_fields", - "operator": "or", - } - }, - ], - "minimum_should_match": 1, - "filter": {"terms": {"nct_id": nct_ids}}, - } - } - try: - response = with_retries( - lambda: self.es_client.search( - index=self.index_name, body={"size": self.size, "query": es_query} - ), - logger=logger, - action="ES criteria bm25 search", - ) - hits = response["hits"]["hits"] - logger.info( - "[bm25] Retrieved %s documents for query: '%s'", len(hits), query - ) - return query, hits - except Exception: - logger.exception("BM25 search failed for query: %s", query) - return query, [] - - with ThreadPoolExecutor(max_workers=min(8, len(queries))) as executor: - future_to_query = { - executor.submit(execute_query, query): query for query in queries - } - for future in as_completed(future_to_query): - query, hits = future.result() - query_to_hits[query] = hits - return query_to_hits - - def rerank_criteria(self, queries: List[str], criteria: List[Dict]) -> List[Dict]: - if self.llm_reranker is None: - logger.warning("LLM reranker not available, using ES scores only") - return self.score_criteria_without_llm(criteria) - - pairs = [ - (criterion["query"], criterion["_source"]["criterion"]) - for criterion in criteria - ] - llm_scores = self.llm_reranker.rank_pairs(pairs) - llm_scores = [ - score.get("llm_score", 0.0) if isinstance(score, dict) else float(score) - for score in llm_scores - ] - if len(llm_scores) != len(pairs): - logger.error("Mismatch between LLM scores and pairs!") - raise ValueError("Mismatch between LLM scores and pairs!") - for i, criterion in enumerate(criteria): - llm_score = llm_scores[i] - eligibility_type = criterion["_source"].get("eligibility_type", "").lower() - if eligibility_type == "inclusion criteria": - llm_score *= self.inclusion_weight - elif eligibility_type == "exclusion criteria": - llm_score *= self.exclusion_weight - criterion["llm_score"] = llm_score - return criteria - - def score_criteria_without_llm(self, criteria: List[Dict]) -> List[Dict]: - if not criteria: - return criteria - max_es = max((c.get("_score", 0.0) for c in criteria), default=1.0) or 1.0 - for criterion in criteria: - base = float(criterion.get("_score", 0.0)) / max_es - eligibility_type = criterion["_source"].get("eligibility_type", "").lower() - if eligibility_type == "inclusion criteria": - base *= self.inclusion_weight - elif eligibility_type == "exclusion criteria": - base *= self.exclusion_weight - criterion["llm_score"] = base - return criteria - - def aggregate_to_trials( - self, criteria: List[Dict], threshold: float = 0.5, method: str = "weighted" - ) -> List[Dict]: - trial_scores = defaultdict(list) - for criterion in criteria: - nct_id = criterion["_source"]["nct_id"] - score = criterion["llm_score"] - if score >= threshold: - trial_scores[nct_id].append(score) - aggregated_scores = {} - for nct_id, scores in trial_scores.items(): - count = len(scores) - total = sum(scores) - if count == 0: - continue - if method == "avg": - agg_score = total / count - elif method == "sqrt": - agg_score = total / math.sqrt(count) - elif method == "log": - agg_score = total / math.log(count + 1) - elif method == "weighted": - agg_score = 0.7 * (total / math.sqrt(count)) + 0.3 * max(scores) - else: - raise ValueError(f"Unsupported aggregation method: {method}") - aggregated_scores[nct_id] = agg_score - sorted_trials = [ - {"nct_id": nct_id, "score": score} - for nct_id, score in sorted( - aggregated_scores.items(), key=lambda x: x[1], reverse=True - ) - ] - return sorted_trials - - def retrieve_and_rank( - self, - queries: List[str], - nct_ids: List[str], - top_n: int, - use_reranker: bool = True, - save_path: Optional[str] = None, - ) -> List[Dict]: - # Cap queries to prevent memory/performance issues - max_queries = 150 # Reasonable limit for second-level search - if len(queries) > max_queries: - logger.warning( - f"Capping queries from {len(queries)} to {max_queries} for second-level search" - ) - queries = queries[:max_queries] - - query_to_hits = self.retrieve_criteria(nct_ids, queries) - all_criteria = [] - for query, hits in query_to_hits.items(): - for hit in hits: - hit["query"] = query - all_criteria.append(hit) - - # Check if reranker is available before trying to use it - if use_reranker and self.llm_reranker is not None: - ranked_criteria = self.rerank_criteria(queries, all_criteria) - else: - if use_reranker and self.llm_reranker is None: - logger.info( - "Reranking requested but LLM reranker not available; using ES scores for aggregation." - ) - else: - logger.info( - "Second-level reranking disabled; using ES scores for aggregation." - ) - ranked_criteria = self.score_criteria_without_llm(all_criteria) - - sorted_trials = self.aggregate_to_trials(ranked_criteria) - top_trials = sorted_trials[:top_n] - logger.info(f"Top {top_n} trials retrieved: {top_trials}") - if save_path: - write_text_file([trial["nct_id"] for trial in top_trials], save_path) - logger.info(f"Top trials saved to {save_path}") - return top_trials diff --git a/source/Matcher/schemas/__init__.py b/source/Matcher/schemas/__init__.py deleted file mode 100644 index acbb6535..00000000 --- a/source/Matcher/schemas/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from Matcher.schemas.phenopacket import Keywords, Phenopacket - -__all__ = ["Keywords", "Phenopacket"] diff --git a/source/Matcher/services/biomedner_service.py b/source/Matcher/services/biomedner_service.py deleted file mode 100644 index 87a9f6cc..00000000 --- a/source/Matcher/services/biomedner_service.py +++ /dev/null @@ -1,38 +0,0 @@ -import socket -import subprocess -import time - -from Matcher.utils.logging_config import setup_logging - -logger = setup_logging(__name__) - - -def is_port_in_use(port: int, host: str = "127.0.0.1") -> bool: - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - return s.connect_ex((host, port)) == 0 - - -def check_ports_in_use(ports: list) -> bool: - return any(is_port_in_use(port) for port in ports) - - -def run_script(script_path: str): - logger.info(f"Executing: {script_path}") - subprocess.run(["bash", script_path], check=True) - - -def initialize_biomedner_services(config: dict): - ports_to_check = [ - config["bio_med_ner"]["biomedner_port"], - config["bio_med_ner"]["gner_port"], - config["bio_med_ner"]["gene_norm_port"], - config["bio_med_ner"]["disease_norm_port"], - ] - if check_ports_in_use(ports_to_check): - logger.info("Detected active services. Stopping running instances...") - run_script(config["services"]["stop_script"]) - logger.info("Waiting for 10 seconds before restarting...") - time.sleep(10) - logger.info("Starting BioMedNER services...") - run_script(config["services"]["run_script"]) - logger.info("BioMedNER services started successfully.") diff --git a/source/Matcher/services/elasticsearch_service.py b/source/Matcher/services/elasticsearch_service.py deleted file mode 100644 index fbd17458..00000000 --- a/source/Matcher/services/elasticsearch_service.py +++ /dev/null @@ -1,78 +0,0 @@ -from __future__ import annotations - -import os -import shutil -import subprocess -import time -from pathlib import Path -from typing import Any, Dict - -from Matcher.utils.logging_config import setup_logging - -logger = setup_logging(__name__) - - -def ensure_elasticsearch(es_client: Any, config: Dict[str, Any]) -> bool: - if _ping(es_client): - return True - - es_cfg = config.get("elasticsearch", {}) - auto_start = bool(es_cfg.get("auto_start", False)) - if not auto_start: - logger.error( - "Elasticsearch is not reachable at %s and auto_start is disabled.", - es_cfg.get("host"), - ) - return False - - script_path = es_cfg.get("start_script", "elasticsearch/apptainer-run-es.sh") - timeout = int(es_cfg.get("start_timeout", 600)) - script = _resolve_repo_path(script_path) - - if not script.exists(): - logger.error("Elasticsearch start script not found: %s", script) - return False - - if shutil.which("apptainer") is None: - logger.error("Apptainer is not available in PATH.") - return False - - logger.info("Starting Elasticsearch via Apptainer script: %s", script) - try: - subprocess.run( - ["bash", str(script)], - cwd=str(script.parent), - check=True, - timeout=timeout, - env=os.environ.copy(), - ) - except subprocess.TimeoutExpired: - logger.error("Elasticsearch start timed out after %s seconds.", timeout) - return False - except subprocess.CalledProcessError as exc: - logger.error("Elasticsearch start failed: %s", exc) - return False - - return _wait_for_es(es_client, timeout=60) - - -def _ping(es_client: Any) -> bool: - try: - return bool(es_client.ping()) - except Exception: - return False - - -def _wait_for_es(es_client: Any, timeout: int = 60) -> bool: - deadline = time.time() + timeout - while time.time() < deadline: - if _ping(es_client): - return True - time.sleep(5) - logger.error("Elasticsearch did not become available within %s seconds.", timeout) - return False - - -def _resolve_repo_path(relative_path: str) -> Path: - root = Path(__file__).resolve().parents[3] - return (root / relative_path).resolve() diff --git a/source/Matcher/utils/__init__.py b/source/Matcher/utils/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/source/Matcher/utils/evaluation.py b/source/Matcher/utils/evaluation.py deleted file mode 100644 index 8f81ee75..00000000 --- a/source/Matcher/utils/evaluation.py +++ /dev/null @@ -1,323 +0,0 @@ -# Matcher/utils/evaluation.py -from __future__ import annotations - -import csv -import json -import math -import os -import re -from typing import Any, Dict, Iterable, List, Tuple, Union - -import numpy as np - -# Strict NCT id pattern (case-insensitive on input; stored uppercase) -_NCT_RE = re.compile(r"^NCT\d{8}$", re.IGNORECASE) - - -def load_ground_truth(trec_csv_path: str) -> Dict[str, Dict[str, int]]: - """ - Load TREC ground-truth (query-id, corpus-id, score) from .tsv or .csv. - Returns: { query_id: { NCT########: int(score) } } - - Notes: - - Score semantics (TREC 2021 Clinical Trials): - 2 = eligible (relevant), 1 = excluded (ineligible), 0 = not relevant - - We uppercase trial ids for consistency. - - Header row is optional; delimiter auto-detected between tab/comma. - """ - gt: Dict[str, Dict[str, int]] = {} - if not os.path.exists(trec_csv_path): - raise FileNotFoundError(f"TREC ground truth file not found: {trec_csv_path}") - - with open(trec_csv_path, "r", encoding="utf-8") as fh: - sample = fh.read(4096) - fh.seek(0) - first_line = sample.splitlines()[0] if sample else "" - delimiter = "\t" if ("\t" in first_line) else "," - reader = csv.reader(fh, delimiter=delimiter) - - # Detect header - try: - first = next(reader) - except StopIteration: - return gt - - def _is_header(row: List[str]) -> bool: - if not row: - return False - low = [c.strip().lower() for c in row[:3]] - joined = "|".join(low) - return ( - ("query-id" in joined or "qid" in joined) - and ("corpus-id" in joined or "docid" in joined or "doc-id" in joined) - and ("score" in joined or "label" in joined or "relevance" in joined) - ) - - if not _is_header(first): - fh.seek(0) - reader = csv.reader(fh, delimiter=delimiter) - - for row in reader: - if not row or len(row) < 3: - continue - qid = row[0].strip() - nid = row[1].strip().upper() - # Only store proper NCT ids - if not _NCT_RE.match(nid): - continue - try: - score = int(float(row[2])) - except Exception: - continue - gt.setdefault(qid, {})[nid] = score - return gt - - -def dcg_at_k(relevance_scores: Iterable[int], k: int) -> float: - """ - Discounted Cumulative Gain at rank K. - DCG@K = sum_{i=1..K} rel_i / log2(i + 1) - Linear gain (gain = rel), log2 discount. - """ - relevance_scores = np.asarray(relevance_scores, dtype=float)[:k] - if relevance_scores.size: - return float( - np.sum( - relevance_scores - / np.log2(np.arange(2, relevance_scores.size + 2)) - ) - ) - return 0.0 - - -def ndcg_at_k( - pred_ids: List[str], - ground_truth: Dict[str, int], - k: int, -) -> float: - """ - nDCG@K using graded labels (2 eligible, 1 excluded, 0 not relevant). - - IDCG is computed from the IDEAL ordering of the ranking model's own - relevance scores (the labels of the trials actually evaluated by the final CoT model). - This matches the standard of "ideal re-ranking of the labelled-and-retrieved list" definition. - - Assumes pred_ids already filtered to only labelled trials (see evaluate_ranking). - """ - if k <= 0: - return 0.0 - pred_rels = [int(ground_truth.get(nid, 0)) for nid in pred_ids[:k]] - if not pred_rels: - return 0.0 - ideal_rels = sorted([int(ground_truth.get(nid, 0)) for nid in pred_ids], reverse=True) - dcg_max = dcg_at_k(ideal_rels, k) - if not dcg_max: - return 0.0 - return dcg_at_k(pred_rels, k) / dcg_max - - -def precision_at_k( - pred_ids: List[str], - ground_truth: Dict[str, int], - k: int, - max_grade: int = 2, -) -> float: - """ - Graded-relevance Precision@K for TREC CT (3 labels: 0/1/2). - - P@K = ( sum_{i=1..K} rel_i ) / ( max_grade * K ) - - Each retrieved trial contributes its graded label (0, 1, or 2). - The denominator (max_grade * K) is the maximum achievable score - if every one of the top-K trials had the highest label, so the - metric is bounded in [0, 1]. - - NOTE: K here is the requested cutoff, not len(topk). If fewer than - K trials are retrieved, the denominator still uses min(k, len) so - short lists are not unfairly penalised — adjust if you want a hard K. - """ - if k <= 0: - return 0.0 - topk = pred_ids[:k] - if not topk: - return 0.0 - grades = [int(ground_truth.get(nid, 0)) for nid in topk] - denom = float(max_grade * len(topk)) - if denom <= 0: - return 0.0 - return sum(grades) / denom - - -def _get_case_insensitive(d: Dict[str, Any], *keys: str) -> Any: - """Fetch any matching key (case-insensitive) from dict.""" - lower_map = {k.lower(): k for k in d.keys()} - for k in keys: - real = lower_map.get(k.lower()) - if real is not None: - return d[real] - return None - - -def _extract_top_list(container: Any) -> Any: - """ - If 'container' is a dict that wraps the ranked list, extract the list. - Accepts keys: RankedTrials, ranked_trials, ranked, trials (any case). - Otherwise return container as is. - """ - if isinstance(container, dict): - for k in ("RankedTrials", "ranked_trials", "ranked", "trials"): - v = _get_case_insensitive(container, k) - if isinstance(v, list): - return v - return container - - -def _normalize_ranked_input(ranked: Any) -> List[str]: - """ - Accept common ranked formats and return a clean list of NCT IDs (uppercase), preserving order. - - list[str] - - list[dict] with id keys: TrialID, trial_id, nct_id, id, nctId (any case) - - list[tuple/list] like (id, score) - - dict with top-level list under RankedTrials / ranked_trials / ranked / trials - Filters out non-NCT-shaped IDs and normalizes to uppercase. - """ - ranked = _extract_top_list(ranked) - - ids: List[str] = [] - - if not ranked: - return ids - - # list[str] - if isinstance(ranked, list) and ranked and isinstance(ranked[0], str): - ids = [s for s in ranked] - - # list[tuple/list] - elif isinstance(ranked, list) and ranked and isinstance(ranked[0], (list, tuple)): - ids = [str(item[0]) for item in ranked if item] - - # list[dict] - elif isinstance(ranked, list) and ranked and isinstance(ranked[0], dict): - for r in ranked: - nid = _get_case_insensitive( - r, "TrialID", "trial_id", "nct_id", "id", "nctId" - ) - if nid is None: - continue - ids.append(str(nid)) - - # fallback - else: - try: - ids = [str(x) for x in ranked] # type: ignore - except Exception: - ids = [] - - # Normalize + keep only proper NCT IDs - cleaned: List[str] = [] - for x in ids: - x_u = x.strip().upper() - if _NCT_RE.match(x_u): - cleaned.append(x_u) - return cleaned - - -def evaluate_ranking( - predicted_ranked: Any, - ground_truth_for_query: Dict[str, int], - ks: Tuple[int, ...] = (5, 10, 20), -) -> Dict[str, float]: - """ - Compute metrics for a single patient/query: - - nDCG@K with graded labels (0/1/2) - - Precision@K with graded relevance (sum of grades / (max_grade * K)) - - IMPORTANT: Unlabelled trials are REMOVED before computing metrics, per your requirement. - """ - pred_ids_all = _normalize_ranked_input(predicted_ranked) - - # Keep only labelled trials (ignore unjudged) - pred_ids = ( - [pid for pid in pred_ids_all if pid in ground_truth_for_query] - if ground_truth_for_query - else [] - ) - - results: Dict[str, float] = {} - for k in ks: - results[f"ndcg@{k}"] = ndcg_at_k(pred_ids, ground_truth_for_query, k) - results[f"precision@{k}"] = precision_at_k( - pred_ids, ground_truth_for_query, k, max_grade=2 - ) - return results - - -def evaluate_and_save_metrics( - ranked_trials: Any, - patient_qid: str, - ground_truth_source: Union[str, Dict[str, Dict[str, int]]], - output_folder: str, - ks: Tuple[int, ...] = (5, 10, 20), -) -> Dict[str, float]: - """ - Evaluate 'ranked_trials' for a patient using either: - - ground_truth_source: str path to TREC .tsv/.csv, OR - - a preloaded dict { qid: { nct_id: score } } - - Saves JSON to {output_folder}/evaluation_metrics.json - """ - # Load ground truth if a file path is provided - if isinstance(ground_truth_source, str): - ground_truth_map = load_ground_truth(ground_truth_source) - else: - ground_truth_map = ground_truth_source - - gt = ground_truth_map.get(patient_qid) - if gt is None: - metrics: Dict[str, float] = {"error": "no_ground_truth_for_patient"} # type: ignore[assignment] - else: - metrics = evaluate_ranking(ranked_trials, gt, ks=ks) # type: ignore[assignment] - metrics["patient_id"] = patient_qid # type: ignore[index] - - os.makedirs(output_folder, exist_ok=True) - out_path = os.path.join(output_folder, "evaluation_metrics.json") - with open(out_path, "w", encoding="utf-8") as fh: - json.dump(metrics, fh, indent=2) - return metrics - - -if __name__ == "__main__": - import argparse - - ap = argparse.ArgumentParser("Evaluate ranked trials against TREC ground truth") - ap.add_argument("--ranked", required=True, help="Path to ranked_trials.json") - ap.add_argument( - "--ground-truth", - required=True, - help="Path to TREC TSV/CSV (query-id, corpus-id, score)", - ) - ap.add_argument( - "--patient", required=True, help="Query-id in the ground truth to evaluate" - ) - ap.add_argument( - "--out-dir", default=None, help="Output dir (default: folder of ranked)" - ) - args = ap.parse_args() - - # Lazy import to avoid package cycles - try: - from Matcher.utils.file_utils import read_json_file # type: ignore - except Exception: - # Fallback path if run standalone - from Matcher.utils.file_utils import read_json_file # type: ignore - - ranked = read_json_file(args.ranked) - out_dir = args.out_dir or os.path.dirname(args.ranked) - res = evaluate_and_save_metrics( - ranked_trials=ranked, - patient_qid=args.patient, - ground_truth_source=args.ground_truth, - output_folder=out_dir, - ks=(5, 10, 20), - ) - print(json.dumps(res, indent=2)) diff --git a/source/Matcher/utils/file_utils.py b/source/Matcher/utils/file_utils.py deleted file mode 100644 index e5054bb4..00000000 --- a/source/Matcher/utils/file_utils.py +++ /dev/null @@ -1,44 +0,0 @@ -import json -import os -from typing import Dict, List - - -def read_json_file(file_path: str) -> Dict: - """Read a JSON file and return its contents.""" - try: - with open(file_path, "r", encoding="utf-8") as f: - return json.load(f) - except Exception as e: - raise ValueError(f"Failed to read {file_path}: {str(e)}") - - -def write_json_file(data: Dict, file_path: str): - """Write data to a JSON file.""" - try: - with open(file_path, "w", encoding="utf-8") as f: - json.dump(data, f, indent=4, ensure_ascii=False) - except Exception as e: - raise ValueError(f"Failed to write {file_path}: {str(e)}") - - -def read_text_file(file_path: str) -> List[str]: - """Read lines from a text file.""" - try: - with open(file_path, "r", encoding="utf-8") as f: - return [line.strip() for line in f if line.strip()] - except Exception as e: - raise ValueError(f"Failed to read {file_path}: {str(e)}") - - -def write_text_file(lines: List[str], file_path: str): - """Write lines to a text file.""" - try: - with open(file_path, "w", encoding="utf-8") as f: - f.write("\n".join(lines)) - except Exception as e: - raise ValueError(f"Failed to write {file_path}: {str(e)}") - - -def create_directory(path: str): - """Create a directory if it doesn't exist.""" - os.makedirs(path, exist_ok=True) diff --git a/source/Matcher/utils/retry.py b/source/Matcher/utils/retry.py deleted file mode 100644 index c4429eef..00000000 --- a/source/Matcher/utils/retry.py +++ /dev/null @@ -1,37 +0,0 @@ -from __future__ import annotations - -import random -import time -from typing import Callable, Optional, Tuple, TypeVar - -T = TypeVar("T") - - -def with_retries( - fn: Callable[[], T], - *, - retries: int = 3, - base_delay: float = 0.5, - max_delay: float = 5.0, - jitter: float = 0.1, - exceptions: Tuple[type[BaseException], ...] = (Exception,), - logger: Optional[object] = None, - action: str = "operation", -) -> T: - last_exc: Optional[BaseException] = None - for attempt in range(1, retries + 1): - try: - return fn() - except exceptions as exc: # type: ignore[misc] - last_exc = exc - if logger is not None: - logger.warning( - "%s failed (attempt %s/%s): %s", action, attempt, retries, exc - ) - if attempt < retries: - delay = min(max_delay, base_delay * (2 ** (attempt - 1))) - delay += random.uniform(0, jitter) - time.sleep(delay) - if last_exc is not None: - raise last_exc - raise RuntimeError(f"{action} failed after {retries} attempts") diff --git a/source/Parser/__init__.py b/source/Parser/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/source/Parser/bin/crf_learn b/source/Parser/bin/crf_learn deleted file mode 100755 index 410b4cbb..00000000 Binary files a/source/Parser/bin/crf_learn and /dev/null differ diff --git a/source/Parser/bin/crf_test b/source/Parser/bin/crf_test deleted file mode 100755 index a120d8dd..00000000 Binary files a/source/Parser/bin/crf_test and /dev/null differ diff --git a/source/Parser/biomedner_engine.py b/source/Parser/biomedner_engine.py deleted file mode 100644 index 9b599b4e..00000000 --- a/source/Parser/biomedner_engine.py +++ /dev/null @@ -1,634 +0,0 @@ -import asyncio -import bisect -import gc -import hashlib -import json -import os -import random -import socket -import string -import struct -import tempfile -import time -import traceback -from concurrent.futures import ALL_COMPLETED, ThreadPoolExecutor, wait -from datetime import datetime -from pathlib import Path - -import bioregistry -import numpy as np - -from Parser.convert import get_pub_annotation -from Parser.normalizer import Normalizer - -print(os.getcwd()) - -# Paths -DICT_PATH = Path("Parser/resources/normalization/dictionary") -dict_paths = { - "gene": DICT_PATH / "dict_Gene.txt", - "disease": DICT_PATH / "dict_Disease.txt", - "cell type": DICT_PATH / "dict_CellType.txt", - "drug": DICT_PATH / "dict_ChemicalsDrugs.txt", - "procedure": DICT_PATH / "dict_Procedures.txt", - "sign symptom": DICT_PATH / "dict_SignSymptom.txt", -} - - -def load_shared_dictionaries(): - return { - key: BioMedNER.load_dictionary_file(path) for key, path in dict_paths.items() - } - - -# Global variable for BioMedNER instance -bio_med_ner = None -BASE_TMP_SUPERDIR = "tmp" # Adjust this path as needed - - -def init_worker(biomedner_params, preloaded_dicts): - global bio_med_ner - bio_med_ner = BioMedNER( - **biomedner_params, - biomedner_home=tempfile.TemporaryDirectory(dir=BASE_TMP_SUPERDIR).name, - preloaded_dicts=preloaded_dicts, - ) - - -def process_text_batch(text_batch): - global bio_med_ner - if bio_med_ner is None: - raise RuntimeError( - "bio_med_ner is not initialized. Please call init_worker first." - ) - results = [] - for text in text_batch: - try: - result = bio_med_ner.annotate_text(text) - results.append(result) - except Exception as e: - print(f"Error processing text: {e}") - results.append({"error_code": 1, "error_message": str(e)}) - return results - - -class BioMedNER: - def __init__( - self, - biomedner_home, - biomedner_port, - gner_port, - gene_norm_port, - disease_norm_port, - preloaded_dicts=None, # Use preloaded dictionaries - biomedner_host="localhost", - gner_host="localhost", - time_format="[%d/%b/%Y %H:%M:%S.%f]", - max_word_len=100, - seed=2019, - use_neural_normalizer=True, - no_cuda=False, - ): - self.time_format = time_format - self.max_word_len = max_word_len - self.input_dir = os.path.join(biomedner_home, "input") - self.output_dir = os.path.join(biomedner_home, "output") - - self.print_log("BioMedNER LOADING...") - random.seed(seed) - np.random.seed(seed) - - self.create_directories([self.input_dir, self.output_dir]) - - # FOR NER - self.biomedner_home = os.path.abspath(biomedner_home) - print(self.biomedner_home) - self.biomedner_host = biomedner_host - self.biomedner_port = biomedner_port - self.gner_host = gner_host - self.gner_port = gner_port - - # FOR NEN - self.normalizer = Normalizer( - gene_port=gene_norm_port, - disease_port=disease_norm_port, - use_neural_normalizer=use_neural_normalizer, - no_cuda=no_cuda, - ) - self.dicts = preloaded_dicts if preloaded_dicts else load_shared_dictionaries() - self.print_log("BioMedNER LOADED...") - - @staticmethod - def load_dictionary_file(file_path): - with open(file_path, "r", encoding="utf-8") as f: - return f.read().splitlines() - - def print_log(self, message): - print(datetime.now().strftime(self.time_format), message) - - def create_directories(self, dirs): - for directory in dirs: - os.makedirs(directory, exist_ok=True) - - def annotate_text(self, text): - try: - text = self.preprocess_input(text.strip()) - base_name = self.generate_base_name(text) - biomed_output, gner_output = self.tag_entities( - text, base_name, self.biomedner_home - ) - biomed_output = self.process_output(biomed_output, dict_paths) - gner_output = self.process_output(gner_output, dict_paths) - output = gner_output + biomed_output - except Exception: - self.print_log(traceback.format_exc()) - output = { - "error_code": 1, - "error_message": "Something went wrong. Try again.", - } - - return output - - def process_output(self, output, dict_paths): - if "annotations" not in output: - return output - - output = self.split_cuis(output) - output = self.standardize_prefixes(output) - output = transform_results(output) - append_synonyms(output, dict_paths) - - return output - - def split_cuis(self, output): - for anno in output["annotations"]: - cuis = anno["id"] - new_cuis = [] - for cui in cuis: - if isinstance(cui, list): - cui = cui[0] - new_cuis += cui.replace("|", ",").split(",") - anno["id"] = new_cuis - return output - - def standardize_prefixes(self, output): - for anno in output["annotations"]: - cuis = anno["id"] - obj = anno["obj"] - if obj not in ["disease", "gene", "drug", "cell type"]: - continue - - new_cuis = [] - for cui in cuis: - if "NCBI:txid" in cui: - prefix, numbers = cui.split("NCBI:txid") - prefix = "ncbitaxon" - elif "_" in cui: - prefix, numbers = cui.split("_") - elif ":" in cui: - prefix, numbers = cui.split(":") - else: - new_cuis.append(cui) - continue - - prefix = bioregistry.normalize_prefix(prefix) or prefix - prefix = bioregistry.get_preferred_prefix(prefix) or prefix - - if prefix == "cellosaurus": - numbers = "CVCL_" + numbers - - new_cuis.append(":".join([prefix, numbers])) - - anno["id"] = new_cuis - - return output - - def preprocess_input(self, text): - replacements = { - "\r\n": " ", - "\n": " ", - "\t": " ", - "\xa0": " ", - "\x0b": " ", - "\x0c": " ", - } - for old, new in replacements.items(): - if old in text: - self.print_log(f"Found {old} -> replace it w/ a space") - text = text.replace(old, new) - - text = text.encode("ascii", "ignore").decode() - - tokens = text.split(" ") - for idx, tk in enumerate(tokens): - if len(tk) > self.max_word_len: - tokens[idx] = tk[: self.max_word_len] - self.print_log("Found a too long word -> cut the suffix of the word") - text = " ".join(tokens) - - return text - - def tag_entities(self, text, base_name, biomedner_home): - n_ascii_letters = sum(1 for char in text if char in string.ascii_letters) - if n_ascii_letters == 0: - return "No ascii letters. Please enter your text in English.", "" - - pubtator_file = f"{base_name}.PubTator" - input_data = f"{base_name}|t|\n{base_name}|a|{text}\n\n" - - input_biomedner = os.path.join( - self.input_dir, f"{pubtator_file}.biomedner.PubTator" - ) - output_biomedner = os.path.join( - self.output_dir, f"{pubtator_file}.biomedner.json" - ) - input_gner = os.path.join(self.input_dir, f"{pubtator_file}.gner.PubTator") - output_gner = os.path.join(self.output_dir, f"{pubtator_file}.gner.json") - - self.create_directories([self.input_dir, self.output_dir]) - - # Write input files sequentially - for path in [input_biomedner, input_gner]: - self.write_to_file(path, input_data) - - ner_start_time = time.time() - - async_result = asyncio.run( - self.async_ner( - [ - ("biomedner", pubtator_file, output_biomedner, biomedner_home), - ("gner", pubtator_file, output_gner, biomedner_home), - ] - ) - ) - - ner_elapse_time = time.time() - ner_start_time - async_result["ner_elapse_time"] = ner_elapse_time - - tagged_docs = async_result["biomedner_tagged_docs"] - gner_entities = async_result["gner_tagged_docs"] - - r_norm_start_time = time.time() - tagged_docs = self.normalize_entities( - tagged_docs, async_result["biomedner_num_entities"], base_name - ) - gner_entities = self.normalize_entities( - gner_entities, async_result["gner_num_entities"], base_name - ) - r_norm_elapse_time = time.time() - r_norm_start_time - async_result["r_norm_elapse_time"] = r_norm_elapse_time - - n_norm_start_time = time.time() - if self.normalizer.use_neural_normalizer: - if async_result["biomedner_num_entities"] > 0: - tagged_docs = self.normalizer.neural_normalize( - ent_type="disease", tagged_docs=tagged_docs - ) - tagged_docs = self.normalizer.neural_normalize( - ent_type="drug", tagged_docs=tagged_docs - ) - tagged_docs = self.normalizer.neural_normalize( - ent_type="gene", tagged_docs=tagged_docs - ) - n_norm_elapse_time = time.time() - n_norm_start_time - async_result["n_norm_elapse_time"] = n_norm_elapse_time - - tagged_docs[0] = get_pub_annotation(tagged_docs[0]) - tagged_docs[0]["elapse_time"] = self.get_elapsed_times(async_result) - - gner_entities[0] = get_pub_annotation(gner_entities[0]) - gner_entities[0]["elapse_time"] = { - "gner_elapse_time": async_result["gner_elapse_time"] - } - - self.cleanup_temp_files( - [input_biomedner, output_biomedner, input_gner, output_gner] - ) - gc.collect() - return tagged_docs[0], gner_entities[0] - - def get_elapsed_times(self, async_result): - return { - "biomedner_elapse_time": async_result["biomedner_elapse_time"], - "gner_elapse_time": async_result["gner_elapse_time"], - "ner_elapse_time": async_result["ner_elapse_time"], - "r_norm_elapse_time": async_result["r_norm_elapse_time"], - "n_norm_elapse_time": async_result["n_norm_elapse_time"], - "norm_elapse_time": async_result["r_norm_elapse_time"] - + async_result["n_norm_elapse_time"], - } - - def normalize_entities(self, entities, num_entities, base_name): - if num_entities > 0: - entities = self.normalizer.normalize(base_name, entities) - return entities - - def write_to_file(self, path, data): - with open(path, "w", encoding="utf-8") as f: - f.write(data) - - def generate_base_name(self, text): - return hashlib.sha224((text + str(time.time())).encode("utf-8")).hexdigest() - - async def async_ner(self, arguments): - coroutines = [self._ner_wrap(arg) for arg in arguments] - result = await asyncio.gather(*coroutines) - return {k: v for e in result if e is not None for k, v in e.items()} - - async def _ner_wrap(self, ner_type_info): - ner_type, pubtator_file, output_file, biomedner_home = ner_type_info - retries = 1 - - for _ in range(retries): - try: - start_time = time.time() - await async_tell_inputfile( - self.biomedner_host, - self.biomedner_port if ner_type == "biomedner" else self.gner_port, - biomedner_home, - pubtator_file, - asyncio.get_event_loop(), - ) - - with open(output_file, "r", encoding="utf-8") as f: - content = f.read() - try: - tagged_docs = [json.loads(content)] - except json.JSONDecodeError as e: - self.print_log(f"JSON decode error: {e}") - continue - - num_entities = tagged_docs[0]["num_entities"] - if tagged_docs is None: - return None - - elapse_time = time.time() - start_time - return { - f"{ner_type}_elapse_time": elapse_time, - f"{ner_type}_tagged_docs": tagged_docs, - f"{ner_type}_num_entities": num_entities, - } - - except json.JSONDecodeError as e: - self.print_log(f"JSON decode error: {e}") - time.sleep(0) - - raise Exception("Failed to decode JSON after multiple attempts") - - def cleanup_temp_files(self, files): - for f in files: - if os.path.exists(f): - os.remove(f) - - def annotate_single_text_with_retry(self, text, retries=1, delay=0): - for attempt in range(retries): - try: - return self.annotate_text(text) - except (ConnectionResetError, ConnectionRefusedError) as e: - self.print_log( - f"Error: {e}. Retrying {attempt + 1}/{retries} in {delay} seconds..." - ) - time.sleep(delay) - raise Exception(f"Failed to annotate text after {retries} attempts: {text}") - - def annotate_texts_in_parallel(self, texts, max_workers=20, retries=1, delay=0): - # Reduced max_workers to avoid overwhelming the system - from typing import Any - - results: list[Any] = [None] * len(texts) - with ThreadPoolExecutor(max_workers=max_workers) as executor: - future_to_index = { - executor.submit( - self.annotate_single_text_with_retry, text, retries, delay - ): i - for i, text in enumerate(texts) - } - while future_to_index: - done, _ = wait(future_to_index, return_when=ALL_COMPLETED) - for future in done: - index = future_to_index.pop(future) - try: - results[index] = future.result() - except Exception as exc: - self.print_log( - f"Text at index {index} generated an exception: {exc}" - ) - results[index] = {"error_code": 1, "error_message": str(exc)} - gc.collect() - return results - - -async def async_tell_inputfile(host, port, biomedner_home, inputfile, loop): - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) - try: - sock.connect((host, port)) - message = json.dumps({"biomedner_home": biomedner_home, "inputfile": inputfile}) - input_stream = struct.pack(">H", len(message)) + message.encode("utf-8") - sock.send(input_stream) - output_stream = await loop.run_in_executor(None, sock.recv, 512) - resp = output_stream.decode("utf-8") - sock.close() - return resp - except (ConnectionRefusedError, TimeoutError, ConnectionResetError) as e: - print(e) - return None - - -def append_synonyms(ner_results, dict_paths): - """ - Append synonyms to NER results based on normalized IDs and dictionary paths. - - Args: - ner_results (list): List of dictionaries containing NER results with entity groups and normalized IDs. - dict_paths (dict): Mapping of dictionary types (e.g., 'gene', 'disease') to file paths. - - Returns: - None: Updates ner_results in place by appending 'synonyms' to each entity. - """ - # Map entity groups to the corresponding dictionary keys - entity_group_to_dict = { - "gene": "gene", - "disease": "disease", - "sign symptom": "sign symptom", - "cell type": "cell type", - "drug": "drug", - "diagnostic test": "procedure", - "treatment": "procedure", - "laboratory test": "procedure", - "radiology": "procedure", - "surgical procedure": "procedure", - "genomic analysis technique": "procedure", - } - - for entity in ner_results: - entity_group = entity["entity_group"].lower() - dict_key = entity_group_to_dict.get(entity_group) - if dict_key and dict_key in dict_paths: - file_path = dict_paths[dict_key] - if dict_key == "gene": - # Normalize gene IDs to match expected formats - entity["normalized_id"] = [ - nid.replace("NCBIGene:", "EntrezGene:") - for nid in entity["normalized_id"] - ] - entity["synonyms"] = get_synonyms_from_file( - file_path, entity["normalized_id"] - ) - else: - entity["synonyms"] = [] - - -def get_synonyms_from_file(file_path, entity_ids): - """ - Retrieve synonyms from the dictionary file based on normalized IDs. - - Args: - file_path (str): Path to the dictionary file. - entity_ids (list): List of normalized IDs to find synonyms for. - - Returns: - list: List of unique synonyms associated with the given IDs. - """ - entity_dict = {} - - # Load the dictionary - with open(file_path, "r", encoding="utf-8") as file: - for line in file: - parts = line.strip().split("||") - if len(parts) > 1: - # First part is the ID(s), second part is the synonyms - ids = parts[0].split(",") # Handles potential multiple IDs - synonyms = parts[1].split("|") # Synonyms are separated by '|' - for nid in ids: - nid = nid.strip().upper() # Normalize to uppercase - if nid not in entity_dict: - entity_dict[nid] = set() - entity_dict[nid].update(name.strip() for name in synonyms) - - # Collect synonyms for the provided entity IDs - synonyms = set() - for nid in entity_ids: - nid = nid.strip().upper() # Normalize input ID to uppercase - synonyms.update(entity_dict.get(nid, set())) # Add synonyms if the ID exists - - return list(synonyms) - - -def transform_results(data): - relevant_objs = { - "gene", - "disease", - "drug", - "cell type", - "sign symptom", - "diagnostic test", - "treatment", - "laboratory test", - "surgical procedure", - "radiology", - "genomic analysis technique", - } - - # Filter and transform the data into the desired format using a list comprehension - all_entities = [ - { - "entity_group": annotation["obj"], - "score": annotation["prob"], - "text": annotation["mention"], - "start": annotation["span"]["begin"], - "end": annotation["span"]["end"], - "normalized_id": annotation["id"], - } - for annotation in data["annotations"] - if annotation["prob"] >= 0.8 and annotation["obj"] in relevant_objs - ] - - # Sort entities by descending score - all_entities.sort(key=lambda x: -x["score"]) - - # Initialize structures for efficient overlap detection - accepted_starts = [] - accepted_ends = [] - non_overlapping_entities = [] - - for entity in all_entities: - start, end = entity["start"], entity["end"] - - # Use bisect to find the insertion point for the current entity's start - i = bisect.bisect_left(accepted_starts, start) - - overlap = False - # Check for overlap with the previous accepted entity - if i > 0 and accepted_ends[i - 1] > start: - overlap = True - # Check for overlap with the next accepted entity - if i < len(accepted_starts) and accepted_starts[i] < end: - overlap = True - - if not overlap: - # Insert the current entity into the accepted lists - bisect.insort(accepted_starts, start) - bisect.insort(accepted_ends, end) - non_overlapping_entities.append(entity) - - # Sort the final entities by start and end positions - non_overlapping_entities.sort(key=lambda x: (x["start"], x["end"])) - - return non_overlapping_entities - - -if __name__ == "__main__": - import argparse - - argparser = argparse.ArgumentParser() - argparser.add_argument( - "--max_word_len", type=int, help="word max chars", default=50 - ) - argparser.add_argument("--seed", type=int, help="seed value", default=2019) - argparser.add_argument("--biomedner_home", help="biomedical language model home") - argparser.add_argument( - "--biomedner_host", help="biomedical language model host", default="localhost" - ) - argparser.add_argument( - "--biomedner_port", - type=int, - help="biomedical language model port", - default=18894, - ) - argparser.add_argument("--gner_host", help="gner host", default="localhost") - argparser.add_argument("--gner_port", type=int, help="gner port", default=18783) - argparser.add_argument( - "--gene_norm_port", type=int, help="Gene port", default=18888 - ) - argparser.add_argument( - "--disease_norm_port", type=int, help="Sieve port", default=18892 - ) - argparser.add_argument( - "--time_format", help="time format", default="[%d/%b/%Y %H:%M:%S.%f]" - ) - argparser.add_argument("--use_neural_normalizer", action="store_true") - argparser.add_argument( - "--no_cuda", action="store_false", help="Avoid using CUDA when available" - ) - args = argparser.parse_args() - - biomedner = BioMedNER( - max_word_len=args.max_word_len, - seed=args.seed, - gene_norm_port=args.gene_norm_port, - disease_norm_port=args.disease_norm_port, - biomedner_home=os.path.abspath(args.biomedner_home), - biomedner_host=args.biomedner_host, - biomedner_port=args.biomedner_port, - gner_host=args.gner_host, - gner_port=args.gner_port, - time_format=args.time_format, - use_neural_normalizer=args.use_neural_normalizer, - no_cuda=args.no_cuda, - ) - - texts = ["colorectal cancer"] - results = biomedner.annotate_texts_in_parallel(texts, max_workers=5) - for result in results: - print(result) diff --git a/source/Parser/biomedner_init.py b/source/Parser/biomedner_init.py deleted file mode 100644 index c0de4128..00000000 --- a/source/Parser/biomedner_init.py +++ /dev/null @@ -1,983 +0,0 @@ -import argparse -import json -import logging -import os -import time -from dataclasses import dataclass -from typing import Any, Callable, Dict, List, NamedTuple, NewType, Optional, Tuple - -import numpy as np -import torch -from models import BERTMultiNER2, RoBERTaMultiNER2 -from ops import ( - Profile, - detokenize, - get_prob, - input_form, - json_to_sent, - preprocess, -) -from torch import nn -from torch.utils.data.dataloader import DataLoader -from torch.utils.data.dataset import Dataset -from torch.utils.data.sampler import SequentialSampler -from tqdm import tqdm -from transformers import ( - AutoConfig, - AutoTokenizer, - PreTrainedTokenizer, - set_seed, -) - -logger = logging.getLogger(__name__) - -InputDataClass = NewType("InputDataClass", Any) -DataCollator = NewType( - "DataCollator", Callable[[List[InputDataClass]], Dict[str, torch.Tensor]] -) - - -@dataclass -class InputExample: - """ - A single training/test example for token classification. - - Args: - guid: Unique id for the example. - words: list. The words of the sequence. - labels: (Optional) list. The labels for each word of the sequence. This should be - specified for train and dev examples, but not for test examples. - """ - - guid: str - words: List[str] - labels: Optional[List[str]] - entity_labels: Optional[List[int]] - - -@dataclass -class InputFeatures: - """ - A single set of features of data. - Property names are the same names as the corresponding inputs to a model. - """ - - input_ids: List[int] - attention_mask: List[int] - token_type_ids: Optional[List[int]] = None - label_ids: Optional[List[int]] = None - entity_type_ids: Optional[List[int]] = None - - -class DataProcessor(object): - """Base class for data converters for sequence classification data sets.""" - - def get_train_examples(self, data_dir): - """Gets a collection of `InputExample`s for the train set.""" - raise NotImplementedError() - - def get_dev_examples(self, data_dir): - """Gets a collection of `InputExample`s for the dev set.""" - raise NotImplementedError() - - def get_labels(self): - """Gets the list of labels for this data set.""" - raise NotImplementedError() - - @classmethod - def _read_data(cls, data, pmids): - """Reads a BIO data.""" - lines = [] - words = [] - labels = [] - entity_labels = [] - for pmid in pmids: - for sent in data[pmid]["words"]: - words = sent[:] - labels = ["O"] * len(words) - entity_labels = [str(0)] * len(words) - - if len(words) >= 30: - while len(words) >= 30: - tmplabel = labels[:30] - l = " ".join( - [ - label - for label in labels[: len(tmplabel)] - if len(label) > 0 - ] - ) - w = " ".join( - [word for word in words[: len(tmplabel)] if len(word) > 0] - ) - e = " ".join( - [el for el in entity_labels[: len(tmplabel)] if len(el) > 0] - ) - lines.append([l, w, e]) - words = words[len(tmplabel) :] - labels = labels[len(tmplabel) :] - entity_labels = entity_labels[len(tmplabel) :] - if len(words) == 0: - continue - - l = " ".join([label for label in labels if len(label) > 0]) - w = " ".join([word for word in words if len(word) > 0]) - e = " ".join([el for el in entity_labels if len(entity_labels) > 0]) - lines.append([l, w, e]) - words = [] - labels = [] - entity_labels = [] - continue - - return lines - - -class NerDataset(Dataset): - """ - This will be superseded by a framework-agnostic approach soon. - """ - - features: List[InputFeatures] - pad_token_label_id: int = nn.CrossEntropyLoss().ignore_index - - def __init__( - self, - predict_examples, - labels: List[str], - tokenizer: PreTrainedTokenizer, - config, - params, - base_name, - ): - logger.info("Creating features from dataset file") - self.labels = labels - self.predict_examples = predict_examples - self.tokenizer = tokenizer - self.config = config - self.params = params - - self.features = convert_examples_to_features( - self.predict_examples, - self.labels, - self.params.max_seq_length, - self.tokenizer, - cls_token_at_end=bool(self.config.model_type in ["xlnet"]), - cls_token=self.tokenizer.cls_token, - cls_token_segment_id=2 if self.config.model_type in ["xlnet"] else 0, - sep_token=self.tokenizer.sep_token, - sep_token_extra=False, - pad_on_left=bool(self.tokenizer.padding_side == "left"), - pad_token=self.tokenizer.pad_token_id, - pad_token_segment_id=self.tokenizer.pad_token_type_id, - pad_token_label_id=self.pad_token_label_id, - base_name=base_name, - ) - - def __len__(self): - return len(self.features) - - def __getitem__(self, i) -> InputFeatures: - return self.features[i] - - -class PredictionOutput(NamedTuple): - predictions: np.ndarray - label_ids: Optional[np.ndarray] - - -def default_data_collator(features: List[InputDataClass]) -> Dict[str, torch.Tensor]: - """ - Very simple data collator that: - - simply collates batches of dict-like objects - - Performs special handling for potential keys named: - - `label`: handles a single value (int or float) per object - - `label_ids`: handles a list of values per object - - does not do any additional preprocessing - - i.e., Property names of the input object will be used as corresponding inputs to the model. - See glue and ner for example of how it's useful. - """ - - # In this function we'll make the assumption that all `features` in the batch - # have the same attributes. - # So we will look at the first element as a proxy for what attributes exist - # on the whole batch. - if not isinstance(features[0], dict): - features = [vars(f) for f in features] - - first = features[0] - batch = {} - - # Special handling for labels. - # Ensure that tensor is created with the correct type - # (it should be automatically the case, but let's make sure of it.) - if "label" in first and first["label"] is not None: - dtype = torch.long if type(first["label"]) is int else torch.float - batch["labels"] = torch.tensor([f["label"] for f in features], dtype=dtype) - elif "label_ids" in first and first["label_ids"] is not None: - if isinstance(first["label_ids"], torch.Tensor): - batch["labels"] = torch.stack([f["label_ids"] for f in features]) - else: - dtype = torch.long if type(first["label_ids"][0]) is int else torch.float - batch["labels"] = torch.tensor( - [f["label_ids"] for f in features], dtype=dtype - ) - - # Handling of all other possible keys. - # Again, we will use the first element to figure out which key/values are not None for this model. - for k, v in first.items(): - if k not in ("label", "label_ids") and v is not None and not isinstance(v, str): - if isinstance(v, torch.Tensor): - batch[k] = torch.stack([f[k] for f in features]) - else: - batch[k] = torch.tensor([f[k] for f in features], dtype=torch.long) - - return batch - - -def convert_examples_to_features( - examples: List[InputExample], - label_list: List[str], - max_seq_length: int, - tokenizer: PreTrainedTokenizer, - cls_token_at_end=False, - cls_token="[CLS]", - cls_token_segment_id=1, - sep_token="[SEP]", - sep_token_extra=False, - pad_on_left=False, - pad_token=0, - pad_token_segment_id=0, - pad_token_label_id=-100, - sequence_a_segment_id=0, - mask_padding_with_zero=True, - base_name="", -) -> List[InputFeatures]: - """Loads a data file into a list of `InputFeatures` - `cls_token_at_end` define the location of the CLS token: - - False (Default, BERT/XLM pattern): [CLS] + A + [SEP] + B + [SEP] - - True (XLNet/GPT pattern): A + [SEP] + B + [SEP] + [CLS] - `cls_token_segment_id` define the segment id associated to the CLS token (0 for BERT, 2 for XLNet) - """ - # TODO clean up all this to leverage built-in features of tokenizers - - label_map = {label: i for i, label in enumerate(label_list)} - features = [] - - for ex_index, example in tqdm(enumerate(examples)): - if ex_index % 10_000 == 0: - logger.info("Writing example %d of %d", ex_index, len(examples)) - - ( - tokens, - label_ids, - ) = [], [] - det_tokens = [] - - for word_idx, (word, label) in enumerate( - zip(example.words.split(), example.labels.split()) - ): - word_tokens = tokenizer.tokenize(word) - - # bert-base-multilingual-cased sometimes output "nothing ([]) when calling tokenize with just a space. - if len(word_tokens) > 0: - tokens.extend(word_tokens) - # Use the real label id for the first token of the word, and padding ids for the remaining tokens - label_ids.extend( - [label_map[label]] + [pad_token_label_id] * (len(word_tokens) - 1) - ) - - if len(word_tokens) == 1: - det_tokens.extend(word_tokens) - elif len(word_tokens) > 1: - for det_idx, det_word in enumerate(word_tokens): - if det_idx > 0: - det_word = "##" + det_word - det_tokens.append(det_word) - else: - det_tokens.append(det_word) - - # calculate temperature with length : temp = 1 - 0.02 * length - # temperature = [1 - sharpening * i if i > 1 else i for _, i in enumerate(entity_length)] - - # Account for [CLS] and [SEP] with "- 2" and with "- 3" for RoBERTa. - special_tokens_count = tokenizer.num_special_tokens_to_add() - ## truncating tokens with max_seq_length - # if len(tokens) > max_seq_length - special_tokens_count: - # tokens = tokens[: (max_seq_length - special_tokens_count)] - # label_ids = label_ids[: (max_seq_length - special_tokens_count)] - # det_tokens = det_tokens[: (max_seq_length - special_tokens_count)] - - # for sliding window tokens - update 23.11.13 - for i in range(0, (len(tokens) // max_seq_length) + 1): - if i == 0: - window_tokens = tokens[ - i * max_seq_length : (i + 1) * max_seq_length - special_tokens_count - ] - window_label_ids = label_ids[ - i * max_seq_length : (i + 1) * max_seq_length - special_tokens_count - ] - window_det_tokens = det_tokens[ - i * max_seq_length : (i + 1) * max_seq_length - special_tokens_count - ] - elif i >= 1: - window_tokens = tokens[ - i * max_seq_length - special_tokens_count : (i + 1) * max_seq_length - - special_tokens_count - ] - window_label_ids = label_ids[ - i * max_seq_length - special_tokens_count : (i + 1) * max_seq_length - - special_tokens_count - ] - window_det_tokens = det_tokens[ - i * max_seq_length - special_tokens_count : (i + 1) * max_seq_length - - special_tokens_count - ] - - # The convention in BERT is: - # (a) For sequence pairs: - # tokens: [CLS] is this jack ##son ##ville ? [SEP] no it is not . [SEP] - # type_ids: 0 0 0 0 0 0 0 0 1 1 1 1 1 1 - # (b) For single sequences: - # tokens: [CLS] the dog is hairy . [SEP] - # type_ids: 0 0 0 0 0 0 0 - # - # Where "type_ids" are used to indicate whether this is the first - # sequence or the second sequence. The embedding vectors for `type=0` and - # `type=1` were learned during pre-training and are added to the wordpiece - # embedding vector (and position vector). This is not *strictly* necessary - # since the [SEP] token unambiguously separates the sequences, but it makes - # it easier for the model to learn the concept of sequences. - # - # For classification tasks, the first vector (corresponding to [CLS]) is - # used as as the "sentence vector". Note that this only makes sense because - # the entire model is fine-tuned. - window_tokens += [sep_token] - window_label_ids += [pad_token_label_id] - window_det_tokens += [sep_token] - - if sep_token_extra: - # roberta uses an extra separator b/w pairs of sentences - window_tokens += [sep_token] - window_label_ids += [pad_token_label_id] - window_det_tokens += [sep_token] - - # make entity type label index for multiner - entity_type_ids = [int(example.entity_labels[0])] * len(window_tokens) - segment_ids = [sequence_a_segment_id] * len(window_tokens) - if cls_token_at_end: - window_tokens += [cls_token] - window_label_ids += [pad_token_label_id] - segment_ids += [cls_token_segment_id] - entity_type_ids += [int(example.entity_labels[0])] - window_det_tokens += [cls_token] - else: - window_tokens = [cls_token] + window_tokens - window_label_ids = [pad_token_label_id] + window_label_ids - segment_ids = [cls_token_segment_id] + segment_ids - entity_type_ids = [int(example.entity_labels[0])] + entity_type_ids - window_det_tokens = [cls_token] + window_det_tokens - - input_ids = tokenizer.convert_tokens_to_ids(window_tokens) - # The mask has 1 for real tokens and 0 for padding tokens. Only real - # tokens are attended to. - input_mask = [1 if mask_padding_with_zero else 0] * len(input_ids) - - # Zero-pad up to the sequence length. - padding_length = max_seq_length - len(input_ids) - - if pad_on_left: - input_ids = ([pad_token] * padding_length) + input_ids - input_mask = ( - [0 if mask_padding_with_zero else 1] * padding_length - ) + input_mask - segment_ids = ([pad_token_segment_id] * padding_length) + segment_ids - window_label_ids = ( - [pad_token_label_id] * padding_length - ) + window_label_ids - entity_type_ids = ( - [int(example.entity_labels[0])] * padding_length - ) + entity_type_ids - window_tokens = (["**NULL**"] * padding_length) + window_tokens - window_det_tokens = (["**NULL**"] * padding_length) + window_det_tokens - else: - input_ids += [pad_token] * padding_length - input_mask += [0 if mask_padding_with_zero else 1] * padding_length - segment_ids += [pad_token_segment_id] * padding_length - window_label_ids += [pad_token_label_id] * padding_length - entity_type_ids += [int(example.entity_labels[0])] * padding_length - window_tokens += ["**NULL**"] * padding_length - window_det_tokens += ["**NULL**"] * padding_length - - assert len(input_ids) == max_seq_length - assert len(input_mask) == max_seq_length - assert len(segment_ids) == max_seq_length - assert len(window_label_ids) == max_seq_length - assert len(entity_type_ids) == max_seq_length - assert len(window_tokens) == max_seq_length - - if ex_index < 1: - logger.info("*** Example ***") - logger.info("guid: %s", example.guid) - logger.info("tokens: %s", " ".join([str(x) for x in window_tokens])) - logger.info("input_ids: %s", " ".join([str(x) for x in input_ids])) - logger.info("input_mask: %s", " ".join([str(x) for x in input_mask])) - logger.info("segment_ids: %s", " ".join([str(x) for x in segment_ids])) - logger.info( - "label_ids: %s", " ".join([str(x) for x in window_label_ids]) - ) - logger.info( - "entity_type_ids: %s", " ".join([str(x) for x in entity_type_ids]) - ) - - if "token_type_ids" not in tokenizer.model_input_names: - segment_ids = None - - features.append( - InputFeatures( - input_ids=input_ids, - attention_mask=input_mask, - token_type_ids=segment_ids, - label_ids=window_label_ids, - entity_type_ids=entity_type_ids, - ) - ) - write_tokens(window_tokens, window_det_tokens, "test", base_name) - - return features - - -def write_tokens(tokens, det_tokens, mode, base_name): - if mode == "test": - tmp_path = os.path.join("multi_ner", "tmp") - if not os.path.exists(tmp_path): - os.makedirs(tmp_path) - - path = os.path.join( - "multi_ner", "tmp", "token_{}_{}.txt".format(mode, base_name) - ) - with open(path, "a") as wf: - for token in tokens: - if token != "**NULL**": - wf.write(token + "\n") - - det_path = os.path.join( - "multi_ner", "tmp", "det_token_{}_{}.txt".format(mode, base_name) - ) - with open(det_path, "a") as wf: - for token in det_tokens: - if token != "**NULL**": - wf.write(token + "\n") - - -class NerProcessor(DataProcessor): - def get_test_examples(self, data_dir): - data = list() - pmids = list() - with open(data_dir, "r") as in_: - for line in in_: - line = line.strip() - tmp = json.loads(line) - tmp["title"] = preprocess(tmp["title"]) - tmp["abstract"] = preprocess(tmp["abstract"]) - data.append(tmp) - pmids.append(tmp["pmid"]) - - json_file = input_form(json_to_sent(data)) - - return ( - self._create_example(self._read_data(json_file, pmids), "test"), - json_file, - data, - ) - - def get_test_dict_list(self, dict_list): - pmids = list() - for d in dict_list: - pmids.append(d["pmid"]) - - json_file = input_form(json_to_sent(dict_list)) - - return self._create_example( - self._read_data(json_file, pmids), "test" - ), json_file - - def get_labels(self): - return ["B", "I", "O"] - - def _create_example(self, lines, set_type): - examples = [] - for i, line in enumerate(lines): - guid = "%s-%s" % (set_type, i) - text = line[1] - label = line[0] - entity_labels = line[2] - examples.append( - InputExample( - guid=guid, words=text, labels=label, entity_labels=entity_labels - ) - ) - - return examples - - -class BioMedNER: - def __init__(self, params): - init_start_t = time.time() - - # Set ner processor - self.processor = NerProcessor() - - # Setup parsing - self.params = params - self.prediction_loss_only = False - - # Set seed - set_seed(self.params.seed) - - # Prepare Labels - self.labels = self.processor.get_labels() - self.id2label: Dict[int, str] = { - i: label for i, label in enumerate(self.labels) - } - self.label2id = {label: i for i, label in enumerate(self.labels)} - self.num_labels = len(self.labels) - - self.config = AutoConfig.from_pretrained( - self.params.model_name_or_path, - num_labels=self.num_labels, - id2label=self.id2label, - label2id=self.label2id, - ) - - self.tokenizer = AutoTokenizer.from_pretrained( - self.params.model_name_or_path, - ) - if ( - "roberta" in self.params.model_name_or_path - or "biolm" in self.params.model_name_or_path - ): - # roberta - self.model = RoBERTaMultiNER2.from_pretrained( - self.params.model_name_or_path, - num_labels=self.num_labels, - config=self.config, - ) - else: - self.model = BERTMultiNER2.from_pretrained( - self.params.model_name_or_path, - num_labels=self.num_labels, - config=self.config, - ) - # Determine the device - self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - self.model.to(self.device) - self.entity_types = [ - "disease", - "drug", - "gene", - "species", - "cell line", - "DNA", - "RNA", - "cell type", - ] - self.estimator_dict = {} - for etype in self.entity_types: - self.estimator_dict[etype] = {} - self.estimator_dict[etype]["prediction"] = [] - self.estimator_dict[etype]["log_probs"] = [] - - self.counter = 0 - self.pad_token_label_id: int = nn.CrossEntropyLoss().ignore_index - init_end_t = time.time() - print("BioMedNER init_t {:.3f} sec.".format(init_end_t - init_start_t)) - - @Profile(__name__) - def recognize(self, input_dl, base_name, indent=None): - if type(input_dl) is str: - predict_examples, self.json_dict, self.data_list = ( - self.processor.get_test_examples(input_dl) - ) - elif type(input_dl) is list: - predict_examples, self.json_dict = self.processor.get_test_dict_list( - input_dl - ) - self.data_list = input_dl - else: - raise ValueError("Wrong type") - - token_path = os.path.join( - "multi_ner", "tmp", "token_test_{}.txt".format(base_name) - ) - det_token_path = os.path.join( - "multi_ner", "tmp", "det_token_test_{}.txt".format(base_name) - ) - - if os.path.exists(token_path): - os.remove(token_path) - if os.path.exists(det_token_path): - os.remove(det_token_path) - - predict_example_list = NerDataset( - predict_examples, - self.labels, - self.tokenizer, - self.config, - self.params, - base_name, - ) - - tokens, tot_tokens = list(), list() - - """ - Aggregate label results with detokenized tokens - - words: Auto phagy main tain s tumour growth ... - label: O O O O O O B O ... O - - detok_words: Authophagy maintains tumour growth ... - detok_label: O O O B O ... - """ - - with open(det_token_path, "r") as reader: - for line_idx, line in enumerate(reader): - tok = line.strip() - tot_tokens.append(tok) - - if tok == "[CLS]" or tok == "": - tmp_toks = [tok] - elif tok == "[SEP]" or tok == "": - tmp_toks.append(tok) - tokens.append(tmp_toks) - else: - tmp_toks.append(tok) - - self.predict_dict, self.prob_dict = dict(), dict() - threads, self.out_tag_dict = list(), dict() - - all_type = self._predict(predict_example_list) - # disease, drug, gene, spec, cell_line, dna, rna, cell_type - for etype_idx, etype in enumerate(self.entity_types): - predictions, label_ids = all_type[etype_idx] # batch, seq, labels - preds_array = self.align_predictions(predictions) # batch, seq - - self.out_tag_dict[etype] = (False, None) - self.recognize_etype(etype, tokens, tot_tokens, predictions, preds_array) - - for etype in self.entity_types: - if self.out_tag_dict[etype][0]: - if type(input_dl) is str: - print( - os.path.split(input_dl)[1], - "Found an error:", - self.out_tag_dict[etype][1], - ) - else: - print("Found an error:", self.out_tag_dict[etype][1]) - if os.path.exists(token_path): - os.remove(token_path) - return None - - # get probability of all mentions - data_list = get_prob( - self.data_list, - self.json_dict, - self.predict_dict, - self.prob_dict, - entity_types=self.entity_types, - ) - - if type(input_dl) is str: - output_path = os.path.join( - "result/", - os.path.splitext(os.path.basename(input_dl))[0] - + "_NER_{}.json".format(base_name), - ) - print("pred", output_path) - - with open(output_path, "w") as resultf: - for paper in data_list: - paper["ner_model"] = "MULTI-TASK NER v.20210707" - resultf.write( - json.dumps(paper, sort_keys=True, indent=indent) + "\n" - ) - # delete temp files - if os.path.exists(token_path): - os.remove(token_path) - if os.path.exists(det_token_path): - os.remove(det_token_path) - - return data_list - - @Profile(__name__) - def recognize_etype(self, etype, tokens, tot_tokens, predictions, preds_array): - result = [] - - for one_batch in range(predictions.shape[0]): - result.append( - { - "prediction": preds_array[one_batch], - "log_probs": predictions[one_batch], - } - ) - - predicts = list() - logits = list() - - for pidx, prediction in enumerate(result): - slen = len(tokens[pidx]) - for p in prediction["prediction"][:slen]: - predicts.append(self.id2label[p]) - for l in prediction["log_probs"][:slen]: - logits.append(l) - - de_toks, de_labels, de_logits = detokenize(tot_tokens, predicts, logits) - - self.predict_dict[etype] = dict() - self.prob_dict[etype] = dict() - piv = 0 - for data in self.data_list: - pmid = data["pmid"] - self.predict_dict[etype][pmid] = list() - self.prob_dict[etype][pmid] = list() - - sent_lens = list() - for sent in self.json_dict[pmid]["words"]: - sent_lens.append(len(sent)) - sent_idx = 0 - de_i = 0 - overlen = False - while True: - if overlen: - try: - self.predict_dict[etype][pmid][-1].extend(de_labels[piv + de_i]) - except Exception as e: - self.out_tag_dict[etype] = (True, e) - break - self.prob_dict[etype][pmid][-1].extend(de_logits[piv + de_i]) - de_i += 1 - if len(self.predict_dict[etype][pmid][-1]) == len( - self.json_dict[pmid]["words"][ - len(self.predict_dict[etype][pmid]) - 1 - ] - ): - sent_idx += 1 - overlen = False - - else: - self.predict_dict[etype][pmid].append(de_labels[piv + de_i]) - self.prob_dict[etype][pmid].append(de_logits[piv + de_i]) - de_i += 1 - if len(self.predict_dict[etype][pmid][-1]) == len( - self.json_dict[pmid]["words"][ - len(self.predict_dict[etype][pmid]) - 1 - ] - ): - sent_idx += 1 - overlen = False - else: - overlen = True - - if sent_idx == len(self.json_dict[pmid]["words"]): - piv += de_i - break - - if self.out_tag_dict[etype][0]: - break - - def _predict(self, test_dataset: Dataset): - sampler = SequentialSampler(test_dataset) - data_loader = DataLoader( - test_dataset, - sampler=sampler, - batch_size=32, # you can adjust evaluation batch size, we prefer using 32 - collate_fn=default_data_collator, - drop_last=False, - ) - return self._prediction_loop(data_loader, description="Prediction") - - def _prediction_loop( - self, - dataloader: DataLoader, - description: str, - prediction_loss_only: Optional[bool] = None, - ) -> Tuple[ - PredictionOutput, - PredictionOutput, - PredictionOutput, - PredictionOutput, - PredictionOutput, - PredictionOutput, - PredictionOutput, - PredictionOutput, - ]: - """ - Prediction/evaluation loop, shared by `evaluate()` and `predict()`. - - Works both with or without labels. - """ - - prediction_loss_only = ( - prediction_loss_only - if prediction_loss_only is not None - else self.prediction_loss_only - ) - - model = self.model - device = self.device # Use the dedicated device attribute - - eval_losses: List[float] = [] - dise_preds = chem_preds = gene_preds = spec_preds = cl_preds = dna_preds = ( - rna_preds - ) = ct_preds = None - label_ids = None - model.eval() - - with torch.no_grad(): - for inputs in tqdm(dataloader, desc=description): - # Determine if labels are present - has_labels = any( - inputs.get(k) is not None - for k in ["labels", "lm_labels", "masked_lm_labels"] - ) - - # Move all tensor inputs to the appropriate device - inputs = { - k: v.to(device) if isinstance(v, torch.Tensor) else v - for k, v in inputs.items() - } - - # Forward pass - outputs = model(**inputs) - - if has_labels: - step_eval_loss, logits = outputs[:2] - eval_losses.append(step_eval_loss.mean().item()) - else: - logits = outputs[0] - - if not prediction_loss_only: - # Unpack logits for each entity type - ( - dise_logits, - chem_logits, - gene_logits, - spec_logits, - cl_logits, - dna_logits, - rna_logits, - _, - ct_logits, - ) = logits - - # Initialize prediction tensors if they are None - if dise_preds is None: - dise_preds = dise_logits.detach() - chem_preds = chem_logits.detach() - gene_preds = gene_logits.detach() - spec_preds = spec_logits.detach() - cl_preds = cl_logits.detach() - dna_preds = dna_logits.detach() - rna_preds = rna_logits.detach() - ct_preds = ct_logits.detach() - else: - # Concatenate predictions along the batch dimension - dise_preds = torch.cat( - (dise_preds, dise_logits.detach()), dim=0 - ) - chem_preds = torch.cat( - (chem_preds, chem_logits.detach()), dim=0 - ) - gene_preds = torch.cat( - (gene_preds, gene_logits.detach()), dim=0 - ) - spec_preds = torch.cat( - (spec_preds, spec_logits.detach()), dim=0 - ) - cl_preds = torch.cat((cl_preds, cl_logits.detach()), dim=0) - dna_preds = torch.cat((dna_preds, dna_logits.detach()), dim=0) - rna_preds = torch.cat((rna_preds, rna_logits.detach()), dim=0) - ct_preds = torch.cat((ct_preds, ct_logits.detach()), dim=0) - - if has_labels and not prediction_loss_only: - # Concatenate label IDs - if label_ids is None: - label_ids = inputs["labels"].detach().clone() - else: - label_ids = torch.cat( - (label_ids, inputs["labels"].detach().clone()), dim=0 - ) - - # Convert all prediction tensors to numpy arrays - if all( - pred is not None - for pred in [ - dise_preds, - chem_preds, - gene_preds, - spec_preds, - cl_preds, - dna_preds, - rna_preds, - ct_preds, - ] - ): - dise_preds = dise_preds.cpu().numpy() - chem_preds = chem_preds.cpu().numpy() - gene_preds = gene_preds.cpu().numpy() - spec_preds = spec_preds.cpu().numpy() - cl_preds = cl_preds.cpu().numpy() - dna_preds = dna_preds.cpu().numpy() - rna_preds = rna_preds.cpu().numpy() - ct_preds = ct_preds.cpu().numpy() - - if label_ids is not None: - label_ids = label_ids.cpu().numpy() - - # Create PredictionOutput tuples for each entity type - return_output = ( - PredictionOutput(predictions=dise_preds, label_ids=label_ids), - PredictionOutput(predictions=chem_preds, label_ids=label_ids), - PredictionOutput(predictions=gene_preds, label_ids=label_ids), - PredictionOutput(predictions=spec_preds, label_ids=label_ids), - PredictionOutput(predictions=cl_preds, label_ids=label_ids), - PredictionOutput(predictions=dna_preds, label_ids=label_ids), - PredictionOutput(predictions=rna_preds, label_ids=label_ids), - PredictionOutput(predictions=ct_preds, label_ids=label_ids), - ) - - return return_output - - def align_predictions(self, predictions: np.ndarray) -> List[int]: - preds = np.argmax(predictions, axis=2) - batch_size, seq_len = preds.shape - - preds_list = [[] for _ in range(batch_size)] - - for i in range(batch_size): - for j in range(seq_len): - preds_list[i].append(preds[i][j]) - - return np.array(preds_list) - - -def main(): - argparser = argparse.ArgumentParser() - argparser.add_argument("--model_name_or_path", default="dmis-lab/biobert-v1.1") - argparser.add_argument( - "--max_seq_length", - type=int, - help="The maximum total input sequence length after tokenization. Sequences longer than this will be truncated, sequences shorter will be padded.", - default=128, - ) - argparser.add_argument( - "--seed", type=int, help="random seed for initialization", default=1 - ) - args = argparser.parse_args() - - biomedner = BioMedNER(args) - - -if __name__ == "__main__": - main() diff --git a/source/Parser/biomedner_server.py b/source/Parser/biomedner_server.py deleted file mode 100644 index 6017b805..00000000 --- a/source/Parser/biomedner_server.py +++ /dev/null @@ -1,116 +0,0 @@ -# server_script.py -import argparse -import json -import os -import socket -import struct -from datetime import datetime - -from biomedner_init import BioMedNER -from ops import filter_entities, pubtator2dict_list - - -def count_entities(data): - num_entities = 0 - for d in data: - if "entities" not in d: - continue - for ent_type, entities in d["entities"].items(): - num_entities += len(entities) - return num_entities - - -def biomedner_recognize(model, dict_path, base_name, biomedner_home, args): - # Ensure input and output directories exist within biomedner_home - input_dir = os.path.join(biomedner_home, "input") - output_dir = os.path.join(biomedner_home, "output") - os.makedirs(input_dir, exist_ok=True) - os.makedirs(output_dir, exist_ok=True) - - input_mt_ner = os.path.join( - biomedner_home, "input", f"{dict_path}.biomedner.PubTator" - ) - output_mt_ner = os.path.join( - biomedner_home, "output", f"{dict_path}.biomedner.json" - ) - - dict_list = pubtator2dict_list(input_mt_ner) - - res = model.recognize(input_dl=dict_list, base_name=base_name) - - if res is None: - return None, 0 - - num_filtered_species_per_doc = filter_entities(res) - for n_f_spcs in num_filtered_species_per_doc: - if n_f_spcs[1] > 0: - print( - datetime.now().strftime(args.time_format), - "[{}] Filtered {} species".format(base_name, n_f_spcs[1]), - ) - num_entities = count_entities(res) - - res[0]["num_entities"] = num_entities - # Write output str to a .PubTator format file - with open(output_mt_ner, "w", encoding="utf-8") as f: - json.dump(res[0], f) - - -def run_server(model, args): - host = args.biomedner_host - port = args.biomedner_port - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - s.bind((host, port)) - s.listen(600) - print(f"Server listening on {host}:{port}") - while True: - conn, addr = s.accept() - with conn: - print(f"Connected by {addr}") - message_length = struct.unpack(">H", conn.recv(2))[0] - message = conn.recv(message_length).decode("utf-8") - request = json.loads(message) - biomedner_home = request["biomedner_home"] - inputfile = request["inputfile"] - base_name = inputfile.split(".")[0] - base_name = base_name.replace("\x00A", "") - - biomedner_recognize(model, inputfile, base_name, biomedner_home, args) - - output_stream = struct.pack(">H", len(inputfile)) + inputfile.encode( - "utf-8" - ) - conn.send(output_stream) - print(f"Response sent for {inputfile}") - - -if __name__ == "__main__": - argparser = argparse.ArgumentParser() - argparser.add_argument( - "--seed", type=int, help="random seed for initialization", default=1 - ) - argparser.add_argument("--model_name_or_path") - argparser.add_argument( - "--max_seq_length", - type=int, - help="The maximum total input sequence length after tokenization. Sequences longer than this will be truncated, sequences shorter will be padded.", - default=512, - ) - argparser.add_argument( - "--biomedner_host", help="biomedical language model host", default="localhost" - ) - argparser.add_argument( - "--biomedner_port", - type=int, - help="biomedical language model port", - default=18894, - ) - argparser.add_argument( - "--time_format", help="time format", default="[%d/%b/%Y %H:%M:%S.%f]" - ) - argparser.add_argument( - "--no_cuda", action="store_false", help="Avoid using CUDA when available" - ) - args = argparser.parse_args() - mt_ner = BioMedNER(args) - run_server(mt_ner, args) diff --git a/source/Parser/convert.py b/source/Parser/convert.py deleted file mode 100644 index f0e036dd..00000000 --- a/source/Parser/convert.py +++ /dev/null @@ -1,416 +0,0 @@ -import copy -import json -from datetime import datetime, timezone -from operator import itemgetter - -# from download import query_pubtator2biocxml - - -def pubtator2dict_list(pubtator_file_path): - dict_list = list() - - title_pmid = "" - # abstract_pmid = '' - abstract_text = "" - doc_line_num = 0 - mutations = list() - - with open(pubtator_file_path, "r", encoding="utf-8") as f: - for line in f: - line = line.rstrip() - if len(line) == 0: - if len(mutations) > 0: - if len(mutations) > 1: - mutations = sorted(mutations, key=itemgetter("start")) - - mutations = get_bestplus_spans(mutations, abstract_text) - - doc_dict = { - "pmid": title_pmid, - "mutation_model": "tmVar 2.0", - "entities": {"mutation": copy.deepcopy(mutations)}, - } - doc_dict["abstract"] = abstract_text - - dict_list.append(doc_dict) - - doc_line_num = 0 - mutations.clear() - continue - - if doc_line_num == 0: - title_cols = line.split("|t|") - - if len(title_cols) != 2: - return '{"error": "wrong #title_cols %d"}' % len(title_cols) - - title_pmid = title_cols[0] - - # The 'title' variable is not used, so we skip assigning it. - elif doc_line_num == 1: - abstract_cols = line.split("|a|") - - if len(abstract_cols) != 2: - if len(abstract_cols) > 2: - abstract_text = "|a|".join(abstract_cols[1:]) - else: - return '{"error": "wrong #abstract_cols %d"}' % len( - abstract_cols - ) - else: - if "- No text -" == abstract_cols[1]: - # make tmvar2 results empty - abstract_text = "" - else: - abstract_text = abstract_cols[1] - elif doc_line_num > 1: - mutation_cols = line.split("\t") - - if len(mutation_cols) != 6: - return '{"error": "wrong #mutation_cols %d"}' % len(mutation_cols) - - mutations.append( - { - "start": int(mutation_cols[1]), - "end": int(mutation_cols[2]), - "mention": mutation_cols[3], - "mutationType": mutation_cols[4], - "normalizedName": mutation_cols[5], - } - ) - - doc_line_num += 1 - return dict_list - - -def preprocess(text): - text = text.replace("\r ", " ") - - text = text.replace("\u2028", " ") - text = text.replace("\u2029", " ") - - # HAIR SPACE - # https://www.fileformat.info/info/unicode/char/200a/index.htm - text = text.replace("\u200a", " ") - - # THIN SPACE - # https://www.fileformat.info/info/unicode/char/2009/index.htm - text = text.replace("\u2009", " ") - text = text.replace("\u2008", " ") - - # FOUR-PER-EM SPACE - # https://www.fileformat.info/info/unicode/char/2005/index.htm - text = text.replace("\u2005", " ") - text = text.replace("\u2004", " ") - text = text.replace("\u2003", " ") - - # EN SPACE - # https://www.fileformat.info/info/unicode/char/2002/index.htm - text = text.replace("\u2002", " ") - - # NO-BREAK SPACE - # https://www.fileformat.info/info/unicode/char/00a0/index.htm - text = text.replace("\u00a0", " ") - - # https://www.fileformat.info/info/unicode/char/f8ff/index.htm - text = text.replace("\uf8ff", " ") - - # https://www.fileformat.info/info/unicode/char/202f/index.htm - text = text.replace("\u202f", " ") - - text = text.replace("\ufeff", " ") - text = text.replace("\uf044", " ") - text = text.replace("\uf02d", " ") - text = text.replace("\uf0bb", " ") - - text = text.replace("\uf048", "Η") - text = text.replace("\uf0b0", "°") - - # MIDLINE HORIZONTAL ELLIPSIS: ⋯ - # https://www.fileformat.info/info/unicode/char/22ef/index.htm - # text = text.replace('\u22EF', '...') - - return text - - -def pubtator2pubannotation(pubtator): - dict_list = list() - - title_pmid = "" - abstract_pmid = "" - title = "" - abstract_text = "" - doc_line_num = 0 - entities = list() - - for line in pubtator.splitlines(): - if len(line) == 0: - if title_pmid != abstract_pmid: - return '{"error": "pmid disagreement"}' - - doc_dict = { - "text": title + " " + abstract_text, - "project": "biomedner", - "sourcedb": "PubMed", - "sourceid": title_pmid, - "annotations": copy.deepcopy(entities), - } - - dict_list.append(doc_dict) - - doc_line_num = 0 - entities.clear() - continue - - if doc_line_num == 0: - title_cols = line.split("|t|") - - if len(title_cols) != 2: - return '{"error": "wrong #title_cols=%d", "line": "%s"}' % ( - len(title_cols), - line, - ) - - title_pmid = title_cols[0] - - if "- No text -" == title_cols[1]: - # make tmvar2 results empty - title = "" - else: - title = title_cols[1] - elif doc_line_num == 1: - abstract_cols = line.split("|a|") - - if len(abstract_cols) != 2: - return '{"error": "wrong #abstract_cols %d"}' % len(abstract_cols) - - abstract_pmid = abstract_cols[0] - - if "- No text -" == abstract_cols[1] or "-NoAbstract-" == abstract_cols[1]: - # make tmvar2 results empty - abstract_text = "" - else: - abstract_text = abstract_cols[1] - elif doc_line_num > 1: - entity_cols = line.split("\t") - - if len(entity_cols) != 6: - return '{"error": "wrong #mutation_cols %d"}' % len(entity_cols) - - if entity_cols[4] in entity_cols: - entities.append( - { - "obj": entity_cols[4], - "id": entity_cols[5].split("|"), - "span": { - "begin": int(entity_cols[1]), - "end": int(entity_cols[2]), - }, - } - ) - - doc_line_num += 1 - return dict_list - - -def get_bestplus_spans(mutations, title_space_abstract): - adjusted_mutations = list() - - mention_count_dict = dict() - for m in mutations: - if "No text" in m["mention"]: - continue - - # (20220113) hotfix - if "text " in m["mention"]: - continue - - if m["mention"] in mention_count_dict: - mention_count_dict[m["mention"]] += 1 - else: - mention_count_dict[m["mention"]] = 1 - - count = mention_count_dict[m["mention"]] - - start = -1 - found = 0 - try: - while found < count: - start = title_space_abstract.index(m["mention"], start + 1) - assert start > -1 - found += 1 - except ValueError: - # hotfix for tmvar wrong mention - continue - - end = start + len(m["mention"]) - 1 # 2018.8.29 @chanho feedback - - assert m["mention"] == title_space_abstract[start : end + 1] - - adjusted_mutations.append( - { - "start": start, - "end": end, - "mention": m["mention"], - "mutationType": m["mutationType"], - "normalizedName": m["normalizedName"], - } - ) - - return adjusted_mutations - - -# Ref. -# http://pubannotation.org/docs/sourcedb/PubMed/sourceid/10022882/spans/606-710/annotations.json -# http://www.pubannotation.org/docs/annotation-format/ -def get_pub_annotation(biomedner_dict): - sourceid = biomedner_dict["pmid"] - - sourcedb = "" - text = biomedner_dict["abstract"] - - pa_dict = { - "project": "TrialMatchAI", - "sourcedb": sourcedb, - "sourceid": sourceid, - "text": text, - "annotations": biomedner2pub_annotation( - biomedner_dict["entities"], biomedner_dict, text - ), - "timestamp": datetime.now(tz=timezone.utc).strftime("%a %b %d %H:%M:%S %z %Y"), - } - - return pa_dict - - -def biomedner2pub_annotation(entity_dict, biomedner_dict, text): - entity_list = list() - for etype in entity_dict: - for entity_idx, entity in enumerate(entity_dict[etype]): - # TODO prevention in the previous step - if "id" not in entity: - entity["id"] = "CUI-less" - - assert "id" in entity, "{}, entity={}, entity_dict={}".format( - etype, entity, entity_dict - ) - assert "start" in entity and "end" in entity, ( - "{}, entity={}, entity_dict={}".format(etype, entity, entity_dict) - ) - - if "\t" in entity["id"]: - eid = entity["id"].split("\t") - else: - eid = [entity["id"]] - - entity_pa_dict = {} - # if 'mutation' == etype: - # assert 'mutationType' in entity \ - # and 'normalizedName' in entity, \ - # '{}, entity={}, entity_dict={}'.format( - # etype, entity, entity_dict) - - # entity_pa_dict['mutationType'] = entity['mutationType'] - # entity_pa_dict['normalizedName'] = entity['normalizedName'] - # entity['end'] += 1 # tmvar2 end span makes one character shift in mention - - entity_pa_dict.update( - { - "id": eid, - "span": {"begin": entity["start"], "end": entity["end"]}, - "obj": etype, - "mention": text[entity["start"] : entity["end"]], - "prob": biomedner_dict["prob"][etype][entity_idx][1] - if etype in biomedner_dict["prob"] - and biomedner_dict["prob"][etype][entity_idx][1] - else None, - "is_neural_normalized": entity["is_neural_normalized"] - if "is_neural_normalized" in entity - else False, - } - ) - - entity_list.append(entity_pa_dict) - - # sort by span begin - def get_item_key1(item): - return item["span"]["begin"] - - def get_item_key2(item): - return item["obj"] - - return sorted(sorted(entity_list, key=get_item_key2), key=get_item_key1) - - -def get_pubtator(biomedner_dict_list): - result = "" - for bd in biomedner_dict_list: - text = bd["title"] + " " + bd["abstract"] - - main = ( - bd["pmid"] - + "|t|" - + bd["title"] - + "\n" - + bd["pmid"] - + "|a|" - + bd["abstract"] - ) - - # sort by start - sorted_entities = list() - - for etype in bd["entities"]: - for entity in bd["entities"][etype]: - mention = text[entity["start"] : entity["end"]] - sorted_entities.append( - [ - entity["start"], - entity["end"], - mention, - etype, - "|".join(entity["id"].split("\t")), - ] - ) - - sorted_entities = sorted(sorted_entities, key=itemgetter(0)) - - entities = "" - for e in sorted_entities: - entities += "{}\t{}\t{}\t{}\t{}\t{}\n".format( - bd["pmid"], e[0], e[1], e[2], e[3], e[4] - ) - - result += main + "\n" + entities + "\n" - - return result - - -def tmtooljson2biomedner(tmtool_res): - tmtool_dicts = json.loads(tmtool_res) - - biomedner_dicts = list() - - for td in tmtool_dicts: - mutations = list() - for d in td["annotations"]: - mention = td["text"][d["span"]["begin"] : d["span"]["end"]] - d["span"]["end"] += 1 - mutations.append( - { - "start": d["span"]["start"], - "end": d["span"]["end"], - "mention": mention, - "normalizedName": d["obj"].replace("Mutation:", ""), - } - ) - - doc_dict = { - "pmid": td["sourceid"], - "text": td["text"], - "entities": {"mutation": mutations}, - } - - biomedner_dicts.append(doc_dict) - - return biomedner_dicts diff --git a/source/Parser/gner_server.py b/source/Parser/gner_server.py deleted file mode 100644 index 0155b771..00000000 --- a/source/Parser/gner_server.py +++ /dev/null @@ -1,206 +0,0 @@ -# server_script.py -import argparse -import json -import logging -import os -import socket -import struct -import warnings -from concurrent.futures import ThreadPoolExecutor - -from gliner import GLiNER -from ops import pubtator2dict_list - -warnings.filterwarnings( - "ignore", category=UserWarning, message="TypedStorage is deprecated" -) - -# Setup logging -logging.basicConfig( - level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s" -) - - -def entities_highly_overlap(entity1, entity2, threshold=0.5): - start1, end1 = entity1["start"], entity1["end"] - start2, end2 = entity2["start"], entity2["end"] - overlap_start = max(start1, start2) - overlap_end = min(end1, end2) - overlap_length = max(0, overlap_end - overlap_start) - length1 = end1 - start1 - length2 = end2 - start2 - shorter_length = min(length1, length2) - if shorter_length == 0: - return False - overlap_ratio = overlap_length / shorter_length - return overlap_ratio >= threshold - - -def filter_overlapping_entities(entities, overlap_threshold=0.5): - # Sort entities by score descending - entities = sorted(entities, key=lambda x: x.get("score", 0), reverse=True) - selected_entities = [] - for entity in entities: - overlaps = False - for sel_entity in selected_entities: - if entities_highly_overlap(entity, sel_entity, threshold=overlap_threshold): - overlaps = True - break - if not overlaps: - selected_entities.append(entity) - return selected_entities - - -class GNER: - def __init__(self, params): - self.params = params - self.entities = [ - "diagnostic test", - "treatment", - "laboratory test", - "surgical procedure", - "sign symptom", - "radiology", - "genomic analysis technique", - ] - self.model = GLiNER.from_pretrained( - self.params.model_name_or_path, map_location="cpu" - ) - - def recognize(self, text, base_name): - entities = self.model.predict_entities( - text, self.entities, flat_ner=False, threshold=0.8 - ) - - clean_entities = [ - { - "entity_group": d["label"], - "score": float(d.get("score", 0)), - "text": d["text"], - "start": int(d["start"]), - "end": int(d["end"]), - } - for d in entities - ] - - # clean_entities.extend(aberration_entities) - - # Filter overlapping entities - filtered_entities = filter_overlapping_entities( - clean_entities, overlap_threshold=0.75 - ) - - entity_dict = {entity: [] for entity in self.entities} - prob_dict = {entity: [] for entity in self.entities} - - for entity in filtered_entities: - entity_type = entity["entity_group"] - if entity_type in entity_dict: - entity_dict[entity_type].append( - {"start": entity["start"], "end": entity["end"]} - ) - prob_dict[entity_type].append( - [{"start": entity["start"], "end": entity["end"]}, entity["score"]] - ) - - return { - "pmid": base_name, - "entities": entity_dict, - "title": "", - "abstract": text, - "prob": prob_dict, - "num_entities": len(filtered_entities), - } - - -def gner_recognize(model, input_file, output_file, base_name): - try: - dict_list = pubtator2dict_list(input_file) - texts = [ - entry["abstract"] - for entry in dict_list - if isinstance(entry, dict) and "abstract" in entry - ] - - results = [model.recognize(text, base_name) for text in texts] - - if not results: - return None, 0 - - num_entities = sum(r["num_entities"] for r in results) - results[0]["num_entities"] = ( - num_entities # Total number of entities across all texts - ) - - with open(output_file, "w", encoding="utf-8") as f: - json.dump(results[0], f) - - return results, num_entities - except Exception as e: - logging.error(f"An error occurred in gner_recognize: {e}") - return None, 0 - - -def handle_connection(conn, addr, model, args): - try: - with conn: - logging.info(f"Connection accepted from {addr}") - message_length = struct.unpack(">H", conn.recv(2))[0] - message = conn.recv(message_length).decode("utf-8").replace("\x00", "") - logging.info(f"Received data: {message}") - data = json.loads(message) - biomedner_home = data["biomedner_home"] - inputfile = data["inputfile"] - base_name = os.path.splitext(os.path.basename(inputfile))[0] - - input_file = os.path.join( - biomedner_home, "input", f"{inputfile}.gner.PubTator" - ) - output_file = os.path.join( - biomedner_home, "output", f"{inputfile}.gner.json" - ) - - gner_recognize(model, input_file, output_file, base_name) - - output_stream = struct.pack(">H", len(inputfile)) + inputfile.encode( - "utf-8" - ) - conn.send(output_stream) - except Exception as e: - logging.error(f"An error occurred: {e}") - - -def run_server(model, args): - host = args.gner_host - port = args.gner_port - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - s.bind((host, port)) - s.listen(600) - logging.info(f"Server started on {host}:{port}") - with ThreadPoolExecutor(max_workers=10) as executor: - while True: - try: - conn, addr = s.accept() - executor.submit(handle_connection, conn, addr, model, args) - except Exception as e: - logging.error(f"An error occurred: {e}") - - -if __name__ == "__main__": - argparser = argparse.ArgumentParser() - argparser.add_argument( - "--model_name_or_path", type=str, required=True, help="Path to the model" - ) - argparser.add_argument( - "--gner_host", default="localhost", help="biomedical language model host" - ) - argparser.add_argument( - "--gner_port", type=int, default=18894, help="biomedical language model port" - ) - argparser.add_argument( - "--time_format", default="[%d/%b/%Y %H:%M:%S.%f]", help="time format" - ) - args = argparser.parse_args() - - mt_ner = GNER(args) - run_server(mt_ner, args) diff --git a/source/Parser/include/crfpp.h b/source/Parser/include/crfpp.h deleted file mode 100644 index aa2dbda2..00000000 --- a/source/Parser/include/crfpp.h +++ /dev/null @@ -1,379 +0,0 @@ -/* - CRF++ -- Yet Another CRF toolkit - - $Id: crfpp.h 1592 2007-02-12 09:40:53Z taku $; - - Copyright(C) 2005-2007 Taku Kudo -*/ -#ifndef CRFPP_CRFPP_H_ -#define CRFPP_CRFPP_H_ - -/* C interface */ -#ifdef __cplusplus -#include -#else -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef _WIN32 -#include -# ifdef DLL_EXPORT -# define CRFPP_DLL_EXTERN __declspec(dllexport) -# define CRFPP_DLL_CLASS_EXTERN __declspec(dllexport) -# else -# define CRFPP_DLL_EXTERN __declspec(dllimport) -# endif -#endif - -#ifndef CRFPP_DLL_EXTERN -# define CRFPP_DLL_EXTERN extern -#endif - -#ifndef CRFPP_DLL_CLASS_EXTERN -# define CRFPP_DLL_CLASS_EXTERN -#endif - -#ifndef SWIG - typedef struct crfpp_t crfpp_t; - typedef struct crfpp_model_t crfpp_model_t; - - /* C interface */ - CRFPP_DLL_EXTERN crfpp_model_t* crfpp_model_new(int, char**); - CRFPP_DLL_EXTERN crfpp_model_t* crfpp_model_new2(const char*); - CRFPP_DLL_EXTERN crfpp_model_t* crfpp_model_from_array_new(int, char**, const char *, size_t); - CRFPP_DLL_EXTERN crfpp_model_t* crfpp_model_from_array_new2(const char*, const char *, size_t); - CRFPP_DLL_EXTERN const char * crfpp_model_get_template(crfpp_model_t*); - CRFPP_DLL_EXTERN void crfpp_model_destroy(crfpp_model_t*); - CRFPP_DLL_EXTERN const char * crfpp_model_strerror(crfpp_model_t *); - CRFPP_DLL_EXTERN crfpp_t* crfpp_model_new_tagger(crfpp_model_t *); - - CRFPP_DLL_EXTERN crfpp_t* crfpp_new(int, char**); - CRFPP_DLL_EXTERN crfpp_t* crfpp_new2(const char*); - CRFPP_DLL_EXTERN void crfpp_destroy(crfpp_t*); - CRFPP_DLL_EXTERN int crfpp_set_model(crfpp_t *, crfpp_model_t *); - CRFPP_DLL_EXTERN int crfpp_add2(crfpp_t*, size_t, const char **); - CRFPP_DLL_EXTERN int crfpp_add(crfpp_t*, const char*); - CRFPP_DLL_EXTERN size_t crfpp_size(crfpp_t*); - CRFPP_DLL_EXTERN size_t crfpp_xsize(crfpp_t*); - CRFPP_DLL_EXTERN size_t crfpp_dsize(crfpp_t*); - CRFPP_DLL_EXTERN const float* crfpp_weight_vector(crfpp_t*); - CRFPP_DLL_EXTERN size_t crfpp_result(crfpp_t*, size_t); - CRFPP_DLL_EXTERN size_t crfpp_answer(crfpp_t*, size_t); - CRFPP_DLL_EXTERN size_t crfpp_y(crfpp_t*, size_t); - CRFPP_DLL_EXTERN size_t crfpp_ysize(crfpp_t*); - CRFPP_DLL_EXTERN double crfpp_prob(crfpp_t*, size_t, size_t); - CRFPP_DLL_EXTERN double crfpp_prob2(crfpp_t*, size_t); - CRFPP_DLL_EXTERN double crfpp_prob3(crfpp_t*); - CRFPP_DLL_EXTERN void crfpp_set_penalty(crfpp_t *, size_t i, size_t j, double penalty); - CRFPP_DLL_EXTERN double crfpp_penalty(crfpp_t *, size_t i, size_t j); - CRFPP_DLL_EXTERN double crfpp_alpha(crfpp_t*, size_t, size_t); - CRFPP_DLL_EXTERN double crfpp_beta(crfpp_t*, size_t, size_t); - CRFPP_DLL_EXTERN double crfpp_emisstion_cost(crfpp_t*, size_t, size_t); - CRFPP_DLL_EXTERN double crfpp_next_transition_cost(crfpp_t*, size_t, - size_t, size_t); - CRFPP_DLL_EXTERN double crfpp_prev_transition_cost(crfpp_t*, size_t, - size_t, size_t); - CRFPP_DLL_EXTERN double crfpp_best_cost(crfpp_t*, size_t, size_t); - CRFPP_DLL_EXTERN const int* crfpp_emittion_vector(crfpp_t*, size_t, size_t); - CRFPP_DLL_EXTERN const int* crfpp_next_transition_vector(crfpp_t*, size_t, - size_t, size_t); - CRFPP_DLL_EXTERN const int* crfpp_prev_transition_vector(crfpp_t*, size_t, - size_t, size_t); - CRFPP_DLL_EXTERN double crfpp_Z(crfpp_t*); - CRFPP_DLL_EXTERN int crfpp_parse(crfpp_t*); - CRFPP_DLL_EXTERN int crfpp_empty(crfpp_t*); - CRFPP_DLL_EXTERN int crfpp_clear(crfpp_t*); - CRFPP_DLL_EXTERN int crfpp_next(crfpp_t*); - CRFPP_DLL_EXTERN int crfpp_test(int, char **); - CRFPP_DLL_EXTERN int crfpp_test2(const char *); - CRFPP_DLL_EXTERN int crfpp_learn(int, char **); - CRFPP_DLL_EXTERN int crfpp_learn2(const char *); - CRFPP_DLL_EXTERN const char* crfpp_strerror(crfpp_t*); - CRFPP_DLL_EXTERN const char* crfpp_yname(crfpp_t*, size_t); - CRFPP_DLL_EXTERN const char* crfpp_y2(crfpp_t*, size_t); - CRFPP_DLL_EXTERN const char* crfpp_x(crfpp_t*, size_t, size_t); - CRFPP_DLL_EXTERN const char** crfpp_x2(crfpp_t*, size_t); - CRFPP_DLL_EXTERN const char* crfpp_parse_tostr(crfpp_t*, const char*); - CRFPP_DLL_EXTERN const char* crfpp_parse_tostr2(crfpp_t*, - const char*, size_t); - CRFPP_DLL_EXTERN const char* crfpp_parse_tostr3(crfpp_t*, const char*, - size_t, char *, size_t); - CRFPP_DLL_EXTERN const char* crfpp_tostr(crfpp_t*); - CRFPP_DLL_EXTERN const char* crfpp_tostr2(crfpp_t*, char *, size_t); - - CRFPP_DLL_EXTERN void crfpp_set_vlevel(crfpp_t *, unsigned int); - CRFPP_DLL_EXTERN unsigned int crfpp_vlevel(crfpp_t *); - CRFPP_DLL_EXTERN void crfpp_set_cost_factor(crfpp_t *, float); - CRFPP_DLL_EXTERN float crfpp_cost_factor(crfpp_t *); - CRFPP_DLL_EXTERN void crfpp_set_nbest(crfpp_t *, size_t); -#endif - -#ifdef __cplusplus -} -#endif - -/* C++ interface */ -#ifdef __cplusplus - -namespace CRFPP { - -class Tagger; - -class CRFPP_DLL_CLASS_EXTERN Model { - public: -#ifndef SWIG - // open model with parameters in argv[] - // e.g, argv[] = {"CRF++", "-m", "model", "-v3"}; - virtual bool open(int argc, char** argv) = 0; - - // open model with parameter arg, e.g. arg = "-m model -v3"; - virtual bool open(const char* arg) = 0; - - // open model with parameters in argv[]. - // e.g, argv[] = {"CRF++", "-v3"}; - virtual bool openFromArray(int argc, char** argv, - const char *model_buf, - size_t model_size) = 0; - - // open model with parameter arg, e.g. arg = "-m model -v3"; - virtual bool openFromArray(const char* arg, - const char *model_buf, - size_t model_size) = 0; -#endif - // return template string embedded in this model file. - virtual const char *getTemplate() const = 0; - - // create Tagger object. Returned object shared the same - // model object - virtual Tagger *createTagger() const = 0; - - virtual const char* what() = 0; - - virtual ~Model() {} -}; - -class CRFPP_DLL_CLASS_EXTERN Tagger { - public: -#ifndef SWIG - // open model with parameters in argv[] - // e.g, argv[] = {"CRF++", "-m", "model", "-v3"}; - virtual bool open(int argc, char** argv) = 0; - - // open model with parameter arg, e.g. arg = "-m model -v3"; - virtual bool open(const char* arg) = 0; - - // add str[] as tokens to the current context - virtual bool add(size_t size, const char **str) = 0; - - // close the current model - virtual void close() = 0; - - // return parameter vector. the size should be dsize(); - virtual const float *weight_vector() const = 0; -#endif - - // set Model - virtual bool set_model(const Model &model) = 0; - - // set vlevel - virtual void set_vlevel(unsigned int vlevel) = 0; - - // get vlevel - virtual unsigned int vlevel() const = 0; - - // set cost factor - virtual void set_cost_factor(float cost_factor) = 0; - - // get cost factor - virtual float cost_factor() const = 0; - - // set nbest - virtual void set_nbest(size_t nbest) = 0; - - // get nbest - virtual size_t nbest() const = 0; - - // add one line to the current context - virtual bool add(const char* str) = 0; - - // return size of tokens(lines) - virtual size_t size() const = 0; - - // return size of column - virtual size_t xsize() const = 0; - - // return size of features - virtual size_t dsize() const = 0; - - // return output tag-id of i-th token - virtual size_t result(size_t i) const = 0; - - // return answer tag-id of i-th token if it is available - virtual size_t answer(size_t i) const = 0; - - // alias of result(i) - virtual size_t y(size_t i) const = 0; - - // return output tag of i-th token as string - virtual const char* y2(size_t i) const = 0; - - // return i-th tag-id as string - virtual const char* yname(size_t i) const = 0; - - // return token at [i,j] as string(i:token j:column) - virtual const char* x(size_t i, size_t j) const = 0; - -#ifndef SWIG - // return an array of strings at i-th tokens - virtual const char** x(size_t) const = 0; -#endif - - // return size of output tags - virtual size_t ysize() const = 0; - - // return marginal probability of j-th tag id at i-th token - virtual double prob(size_t i, size_t j) const = 0; - - // return marginal probability of output tag at i-th token - // same as prob(i, tagger->y(i)); - virtual double prob(size_t i) const = 0; - - // return conditional probability of enter output - virtual double prob() const = 0; - - // set token-level penalty. It would be useful for implementing - // Dual decompositon decoding. - // e.g. - // "Dual Decomposition for Parsing with Non-Projective Head Automata" - // Terry Koo Alexander M. Rush Michael Collins Tommi Jaakkola David Sontag - virtual void set_penalty(size_t i, size_t j, double penalty) = 0; - virtual double penalty(size_t i, size_t j) const = 0; - - // return forward log-prob of the j-th tag at i-th token - virtual double alpha(size_t i, size_t j) const = 0; - - // return backward log-prob of the j-th tag at i-th token - virtual double beta(size_t i, size_t j) const = 0; - - // return emission cost of the j-th tag at i-th token - virtual double emission_cost(size_t i, size_t j) const = 0; - - // return transition cost of [j-th tag at i-th token] to - // [k-th tag at(i+1)-th token] - virtual double next_transition_cost(size_t i, - size_t j, size_t k) const = 0; - - // return transition cost of [j-th tag at i-th token] to - // [k-th tag at(i-1)-th token] - virtual double prev_transition_cost(size_t i, - size_t j, size_t k) const = 0; - - // return the best accumulative cost to the j-th tag at i-th token - // used in viterbi search - virtual double best_cost(size_t i, size_t j) const = 0; - -#ifndef SWIG - // return emission feature vector of the j-th tag at i-th token - virtual const int* emission_vector(size_t i, size_t j) const = 0; - - // return transition feature vector of [j-th tag at i-th token] to - // [k-th tag at(i+1)-th token] - virtual const int* next_transition_vector(size_t i, - size_t j, size_t k) const = 0; - - // return transition feature vector of [j-th tag at i-th token] to - // [k-th tag at(i-1)-th token] - virtual const int* prev_transition_vector(size_t i, - size_t j, size_t k) const = 0; -#endif - - // normalizing factor(log-prob) - virtual double Z() const = 0; - - // do parse and change the internal status, if failed, returns false - virtual bool parse() = 0; - - // return true if the context is empty - virtual bool empty() const = 0; - - // clear all context - virtual bool clear() = 0; - - // change the internal state to output next-optimal output. - // calling it n-th times, can get n-best results, - // Neeed to specify -nN option to use this function, where - // N>=2 - virtual bool next() = 0; - - // parse 'str' and return result as string - // 'str' must be written in CRF++'s input format - virtual const char* parse(const char* str) = 0; - -#ifndef SWIG - // return parsed result as string - virtual const char* toString() = 0; - - // return parsed result as string. - // Result is saved in the buffer 'result', 'size' is the - // size of the buffer. if failed, return NULL - virtual const char* toString(char* result , size_t size) = 0; - - // parse 'str' and return parsed result. - // You don't need to delete return value, but the buffer - // is rewritten whenever you call parse method. - // if failed, return NULL - virtual const char* parse(const char *str, size_t size) = 0; - - // parse 'str' and return parsed result. - // The result is stored in the buffer 'result'. - // 'size2' is the size of the buffer. if failed, return NULL - virtual const char* parse(const char *str, size_t size1, - char *result, size_t size2) = 0; -#endif - // return internal error code as string - virtual const char* what() = 0; - - virtual ~Tagger() {} -}; - -/* factory method */ - -// create CRFPP::Tagger instance with parameters in argv[] -// e.g, argv[] = {"CRF++", "-m", "model", "-v3"}; -CRFPP_DLL_EXTERN Tagger *createTagger(int argc, char **argv); - -// create CRFPP::Tagger instance with parameter in arg -// e.g. arg = "-m model -v3"; -CRFPP_DLL_EXTERN Tagger *createTagger(const char *arg); - -// create CRFPP::Model instance with parameters in argv[] -// e.g, argv[] = {"CRF++", "-m", "model", "-v3"}; -CRFPP_DLL_EXTERN Model *createModel(int argc, char **argv); - -// load model from [buf, buf+size]. -CRFPP_DLL_EXTERN Model *createModelFromArray(int argc, char **argv, - const char *model_buf, - size_t model_size); - -// create CRFPP::Model instance with parameter in arg -// e.g. arg = "-m model -v3"; -CRFPP_DLL_EXTERN Model *createModel(const char *arg); - -// load model from [buf, buf+size]. -CRFPP_DLL_EXTERN Model *createModelFromArray(const char *arg, - const char *model_buf, - size_t model_size); - -// return error code of createTagger(); -CRFPP_DLL_EXTERN const char *getTaggerError(); - -// alias of getTaggerError(); -CRFPP_DLL_EXTERN const char *getLastError(); -} - -#endif -#endif diff --git a/source/Parser/input/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.biomedner.PubTator b/source/Parser/input/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.biomedner.PubTator deleted file mode 100644 index 7ff4720f..00000000 --- a/source/Parser/input/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42|t| -1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42|a|clostridioides difficile infection - diff --git a/source/Parser/input/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.gner.PubTator b/source/Parser/input/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.gner.PubTator deleted file mode 100644 index 7ff4720f..00000000 --- a/source/Parser/input/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42|t| -1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42|a|clostridioides difficile infection - diff --git a/source/Parser/input/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.biomedner.PubTator b/source/Parser/input/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.biomedner.PubTator deleted file mode 100644 index cc8af0cd..00000000 --- a/source/Parser/input/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453|t| -427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453|a|severe aortic stenosis - diff --git a/source/Parser/input/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.gner.PubTator b/source/Parser/input/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.gner.PubTator deleted file mode 100644 index cc8af0cd..00000000 --- a/source/Parser/input/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453|t| -427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453|a|severe aortic stenosis - diff --git a/source/Parser/input/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.biomedner.PubTator b/source/Parser/input/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.biomedner.PubTator deleted file mode 100644 index f93b768e..00000000 --- a/source/Parser/input/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e|t| -525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e|a|chronic hepatitis c - diff --git a/source/Parser/input/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.gner.PubTator b/source/Parser/input/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.gner.PubTator deleted file mode 100644 index f93b768e..00000000 --- a/source/Parser/input/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e|t| -525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e|a|chronic hepatitis c - diff --git a/source/Parser/input/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.biomedner.PubTator b/source/Parser/input/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.biomedner.PubTator deleted file mode 100644 index 0accd42c..00000000 --- a/source/Parser/input/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637|t| -611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637|a|myocardial infarction - diff --git a/source/Parser/input/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.gner.PubTator b/source/Parser/input/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.gner.PubTator deleted file mode 100644 index 0accd42c..00000000 --- a/source/Parser/input/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637|t| -611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637|a|myocardial infarction - diff --git a/source/Parser/input/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.biomedner.PubTator b/source/Parser/input/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.biomedner.PubTator deleted file mode 100644 index a884f498..00000000 --- a/source/Parser/input/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc|t| -61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc|a|severe aortic stenosis - diff --git a/source/Parser/input/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.gner.PubTator b/source/Parser/input/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.gner.PubTator deleted file mode 100644 index a884f498..00000000 --- a/source/Parser/input/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc|t| -61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc|a|severe aortic stenosis - diff --git a/source/Parser/input/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.biomedner.PubTator b/source/Parser/input/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.biomedner.PubTator deleted file mode 100644 index 9a883264..00000000 --- a/source/Parser/input/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28|t| -6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28|a|Deficiency, alpha-Lecithin:Cholesterol Acyltransferase - diff --git a/source/Parser/input/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.gner.PubTator b/source/Parser/input/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.gner.PubTator deleted file mode 100644 index 9a883264..00000000 --- a/source/Parser/input/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28|t| -6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28|a|Deficiency, alpha-Lecithin:Cholesterol Acyltransferase - diff --git a/source/Parser/input/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.biomedner.PubTator b/source/Parser/input/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.biomedner.PubTator deleted file mode 100644 index fa321db2..00000000 --- a/source/Parser/input/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377|t| -6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377|a|myocardial infarction - diff --git a/source/Parser/input/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.gner.PubTator b/source/Parser/input/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.gner.PubTator deleted file mode 100644 index fa321db2..00000000 --- a/source/Parser/input/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377|t| -6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377|a|myocardial infarction - diff --git a/source/Parser/input/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.biomedner.PubTator b/source/Parser/input/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.biomedner.PubTator deleted file mode 100644 index 54989c97..00000000 --- a/source/Parser/input/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3|t| -7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3|a|severe aortic stenosis - diff --git a/source/Parser/input/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.gner.PubTator b/source/Parser/input/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.gner.PubTator deleted file mode 100644 index 54989c97..00000000 --- a/source/Parser/input/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3|t| -7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3|a|severe aortic stenosis - diff --git a/source/Parser/input/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.biomedner.PubTator b/source/Parser/input/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.biomedner.PubTator deleted file mode 100644 index c406ffc7..00000000 --- a/source/Parser/input/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace|t| -89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace|a|type 1 diabetes - diff --git a/source/Parser/input/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.gner.PubTator b/source/Parser/input/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.gner.PubTator deleted file mode 100644 index c406ffc7..00000000 --- a/source/Parser/input/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace|t| -89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace|a|type 1 diabetes - diff --git a/source/Parser/input/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.biomedner.PubTator b/source/Parser/input/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.biomedner.PubTator deleted file mode 100644 index 4eeddd9e..00000000 --- a/source/Parser/input/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c|t| -b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c|a|severe aortic stenosis - diff --git a/source/Parser/input/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.gner.PubTator b/source/Parser/input/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.gner.PubTator deleted file mode 100644 index 4eeddd9e..00000000 --- a/source/Parser/input/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c|t| -b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c|a|severe aortic stenosis - diff --git a/source/Parser/lib/libcrfpp.a b/source/Parser/lib/libcrfpp.a deleted file mode 100644 index 15ad3a4d..00000000 Binary files a/source/Parser/lib/libcrfpp.a and /dev/null differ diff --git a/source/Parser/lib/libcrfpp.la b/source/Parser/lib/libcrfpp.la deleted file mode 100755 index b3d56f92..00000000 --- a/source/Parser/lib/libcrfpp.la +++ /dev/null @@ -1,41 +0,0 @@ -# libcrfpp.la - a libtool library file -# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='libcrfpp.so.0' - -# Names of this library. -library_names='libcrfpp.so.0.0.0 libcrfpp.so.0 libcrfpp.so' - -# The name of the static archive. -old_library='libcrfpp.a' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='' - -# Libraries that this one depends upon. -dependency_libs=' -lpthread' - -# Names of additional weak libraries provided by this library -weak_library_names='' - -# Version information for libcrfpp. -current=0 -age=0 -revision=0 - -# Is this an already installed library? -installed=yes - -# Should we warn about portability when linking against -modules? -shouldnotlink=no - -# Files to dlopen/dlpreopen -dlopen='' -dlpreopen='' - -# Directory that this library needs to be installed in: -libdir='/home/mabdallah/lib' diff --git a/source/Parser/lib/libcrfpp.so b/source/Parser/lib/libcrfpp.so deleted file mode 120000 index 01ace25c..00000000 --- a/source/Parser/lib/libcrfpp.so +++ /dev/null @@ -1 +0,0 @@ -libcrfpp.so.0.0.0 \ No newline at end of file diff --git a/source/Parser/lib/libcrfpp.so.0 b/source/Parser/lib/libcrfpp.so.0 deleted file mode 120000 index 01ace25c..00000000 --- a/source/Parser/lib/libcrfpp.so.0 +++ /dev/null @@ -1 +0,0 @@ -libcrfpp.so.0.0.0 \ No newline at end of file diff --git a/source/Parser/lib/libcrfpp.so.0.0.0 b/source/Parser/lib/libcrfpp.so.0.0.0 deleted file mode 100755 index 950c9927..00000000 Binary files a/source/Parser/lib/libcrfpp.so.0.0.0 and /dev/null differ diff --git a/source/Parser/logs/nohup_disease_normalize.out b/source/Parser/logs/nohup_disease_normalize.out deleted file mode 100644 index 32d94d54..00000000 --- a/source/Parser/logs/nohup_disease_normalize.out +++ /dev/null @@ -1,3274 +0,0 @@ - -Sieve loading .. 10430 ms, Ready - -Sieve loading .. 734 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 6045 ms, Ready - -Sieve loading .. 5768 ms, Ready - -Sieve loading .. 593 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 616 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 8209 ms, Ready - -Sieve loading .. 589 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 649 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 589 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 666 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 669 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 608 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 511 ms, Ready - -Sieve loading .. 628 ms, Ready - -Sieve loading .. 588 ms, Ready - -Sieve loading .. 591 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 829 ms, Ready - -Sieve loading .. 657 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 719 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 630 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 645 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 606 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 704 ms, Ready - -Sieve loading .. 599 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 665 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) diff --git a/source/Parser/logs/nohup_gene_normalize.out b/source/Parser/logs/nohup_gene_normalize.out deleted file mode 100644 index 04432902..00000000 --- a/source/Parser/logs/nohup_gene_normalize.out +++ /dev/null @@ -1,3229 +0,0 @@ -Ready (port 18888) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Ready (port 18888) -Ready (port 18888) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) diff --git a/source/Parser/logs/nohup_gner.out b/source/Parser/logs/nohup_gner.out deleted file mode 100644 index d8372107..00000000 --- a/source/Parser/logs/nohup_gner.out +++ /dev/null @@ -1,3609 +0,0 @@ -/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py:129: UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero. (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.) - return torch._C._cuda_getDeviceCount() > 0 -/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py:129: UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero. (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.) - return torch._C._cuda_getDeviceCount() > 0 - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-07-16 22:23:26,080 - INFO - Connection accepted from ('127.0.0.1', 42682) -2025-07-16 22:23:26,081 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e78efe64b067d7c6ebe4216819000751a7603e0892821caf88bbe57c.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-07-16 22:28:05,287 - INFO - Connection accepted from ('127.0.0.1', 39226) -2025-07-16 22:28:05,287 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d8c0749b4cabbd5e7fa9c366d366170266a0289a6471006ccc4cce4e.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-07-16 22:33:00,752 - INFO - Connection accepted from ('127.0.0.1', 38380) -2025-07-16 22:33:00,752 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "99653b33f56427874f327320e5fbe809e84c11edf053dcf16a9f6304.PubTator"} -2025-07-16 22:33:29,894 - INFO - Connection accepted from ('127.0.0.1', 51160) -2025-07-16 22:33:29,894 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6c9ce2824b187646d864962dc8d8875097e553b032c259364b47c8e4.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py:182: UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero. (Triggered internally at /pytorch/c10/cuda/CUDAFunctions.cpp:109.) - return torch._C._cuda_getDeviceCount() > 0 - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-03 19:53:26,698 - INFO - Connection accepted from ('127.0.0.1', 45486) -2025-08-03 19:53:26,698 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2dfc5be0d0231979e69390328155926f65b2e97e59a1eeec9eb31e73.PubTator"} -Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation. -2025-08-03 19:54:22,242 - INFO - Connection accepted from ('127.0.0.1', 38496) -2025-08-03 19:54:22,242 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "db7442428d1dd92f798475bc173d0b523bdd022963e7e0eff5ff05a7.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-03 21:36:00,079 - INFO - Connection accepted from ('127.0.0.1', 53320) -2025-08-03 21:36:00,080 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "57c274e89711aee0e215c55ce2570826468ebf80104f04b418e79b23.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-03 21:39:12,257 - INFO - Connection accepted from ('127.0.0.1', 50288) -2025-08-03 21:39:12,257 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0fb7e7924a0c2b8724b4b5d94aacd0e7bfbc6f6e1214b83b0d11d208.PubTator"} -2025-08-03 21:41:36,886 - INFO - Connection accepted from ('127.0.0.1', 36174) -2025-08-03 21:41:36,886 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a09149cbf48d3f07b7ce16a02353412a74ffb11fb57d4416c27c58a9.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-03 22:10:08,491 - INFO - Connection accepted from ('127.0.0.1', 46522) -2025-08-03 22:10:08,491 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "027e65fb2b9483bcd3c217013c9b445f4e8d55b2abc47edefdd6a9cd.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-18 15:28:06,176 - INFO - Connection accepted from ('127.0.0.1', 58716) -2025-08-18 15:28:06,176 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-18 15:29:11,198 - INFO - Connection accepted from ('127.0.0.1', 36608) -2025-08-18 15:29:11,199 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-19 15:34:24,184 - INFO - Connection accepted from ('127.0.0.1', 43682) -2025-08-19 15:34:24,184 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-19 15:38:56,174 - INFO - Connection accepted from ('127.0.0.1', 47184) -2025-08-19 15:38:56,174 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "99151b7a67a22ab55f38dd2a06a3d775da819ea5d446a03adda90b14.PubTator"} -Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation. -2025-08-19 15:39:26,523 - INFO - Connection accepted from ('127.0.0.1', 59158) -2025-08-19 15:39:26,523 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "fb70ddb214ae646af6262f0d81f16392aea2d1c51d135bdc5ef78115.PubTator"} -2025-08-19 16:01:53,270 - INFO - Connection accepted from ('127.0.0.1', 35774) -2025-08-19 16:01:53,271 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d13f07266a57d3b9ba73f0a0c9a21408eaf190b110eeb44776863fe8.PubTator"} -2025-08-19 16:02:20,147 - INFO - Connection accepted from ('127.0.0.1', 35438) -2025-08-19 16:02:20,147 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-19 16:16:17,634 - INFO - Connection accepted from ('127.0.0.1', 32956) -2025-08-19 16:16:17,634 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-19 16:30:35,460 - INFO - Connection accepted from ('127.0.0.1', 41266) -2025-08-19 16:30:35,461 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-19 16:31:13,964 - INFO - Connection accepted from ('127.0.0.1', 34758) -2025-08-19 16:31:13,964 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3e4cb8e7df26c985018bd8c25b5efa344c861af6fe4929e3d910128a.PubTator"} -2025-08-19 16:31:37,998 - INFO - Connection accepted from ('127.0.0.1', 60472) -2025-08-19 16:31:37,998 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e255e7d010331dabb92a4c12029f2fa1f3080eabb86ec5c7bcd14326.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-19 16:34:04,689 - INFO - Connection accepted from ('127.0.0.1', 45688) -2025-08-19 16:34:04,689 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-19 16:35:00,735 - INFO - Connection accepted from ('127.0.0.1', 45280) -2025-08-19 16:35:00,735 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a1f93c97c4fa3a0e9c279be4d49a56bef290b4242e0e72b792d607b4.PubTator"} -2025-08-19 16:35:21,595 - INFO - Connection accepted from ('127.0.0.1', 57028) -2025-08-19 16:35:21,595 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "643bdfe9af48c14c2eca0ae9b39b15d57e78077cc70e3df07d888f1f.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 18:43:14,684 - INFO - Connection accepted from ('127.0.0.1', 36790) -2025-08-21 18:43:14,684 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7bbf3bbb6ce76096d9fbc4afcf95b756696944eb3970d9ae79a453c2.PubTator"} -2025-08-21 20:28:07,171 - INFO - Connection accepted from ('127.0.0.1', 46510) -2025-08-21 20:28:07,171 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator"} -2025-08-21 20:28:26,150 - INFO - Connection accepted from ('127.0.0.1', 43538) -2025-08-21 20:28:26,151 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cd52dd424cb42cb53d92271bdd29ee9d3fa8bda53b90517a830f3685.PubTator"} -2025-08-21 20:28:40,788 - INFO - Connection accepted from ('127.0.0.1', 59882) -2025-08-21 20:28:40,788 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f5103ff8dd9ca435775ae888a3777ff367e7d2bf988b746c61e21cd9.PubTator"} -2025-08-21 20:28:55,052 - INFO - Connection accepted from ('127.0.0.1', 39820) -2025-08-21 20:28:55,052 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9471c3496c72a025b12c32c03e254c54fd34a88ad8c5d467920db40e.PubTator"} -2025-08-21 20:29:09,787 - INFO - Connection accepted from ('127.0.0.1', 44720) -2025-08-21 20:29:09,787 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator"} -2025-08-21 20:29:22,596 - INFO - Connection accepted from ('127.0.0.1', 50796) -2025-08-21 20:29:22,596 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7c24cb8cc3a7c35ca168b66e94c7cc0f7233f362f69b08c9b60eb758.PubTator"} -2025-08-21 20:29:34,137 - INFO - Connection accepted from ('127.0.0.1', 55958) -2025-08-21 20:29:34,137 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b4364ea1aa7c138ce56345794e8201b25ccddbceccc3a0a6699f7c0f.PubTator"} -2025-08-21 20:29:46,982 - INFO - Connection accepted from ('127.0.0.1', 54484) -2025-08-21 20:29:46,982 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cc07129a14bc136b9fb4a3ab01ea61864fe49f0dc442b3ed29a8b62c.PubTator"} -2025-08-21 20:29:58,469 - INFO - Connection accepted from ('127.0.0.1', 42424) -2025-08-21 20:29:58,470 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bbdc029db533f0cb0bd9ec2c28ec49703dcefdf858055062923a1e04.PubTator"} -2025-08-21 20:30:08,477 - INFO - Connection accepted from ('127.0.0.1', 45430) -2025-08-21 20:30:08,477 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f543f4f8e42327abe82c5c3874536c4fb9438e1a76c0a630198fe2d7.PubTator"} -2025-08-21 20:30:19,554 - INFO - Connection accepted from ('127.0.0.1', 38528) -2025-08-21 20:30:19,554 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "120898529785ace80a90c6a34477b0497c91621b8aa67e5a6b22f0f3.PubTator"} -2025-08-21 20:30:28,083 - INFO - Connection accepted from ('127.0.0.1', 38538) -2025-08-21 20:30:28,084 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a863b4c155212c13c6dc7b78a66dbadc236150e5854e7ad6dafd3c34.PubTator"} -2025-08-21 20:30:36,949 - INFO - Connection accepted from ('127.0.0.1', 58148) -2025-08-21 20:30:36,949 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dfea813b5bf039b384ac104cc18a0547dff18dd604ea71d23f3d9e23.PubTator"} -2025-08-21 20:30:45,521 - INFO - Connection accepted from ('127.0.0.1', 50946) -2025-08-21 20:30:45,521 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "19bd08e9f22e6c3824f7bacb49b915819c73f1972dfcb32283cea9f6.PubTator"} -2025-08-21 20:30:54,051 - INFO - Connection accepted from ('127.0.0.1', 39230) -2025-08-21 20:30:54,051 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5d226bcff34bb0ebfad070b6b566113f06c2a61fb5c4e5e0e3a04554.PubTator"} -2025-08-21 20:30:59,151 - INFO - Connection accepted from ('127.0.0.1', 39240) -2025-08-21 20:30:59,151 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ebc30fd8256840a29eb3943a8246dc7eea3f636de4c5f71631f8aab6.PubTator"} -2025-08-21 20:31:06,592 - INFO - Connection accepted from ('127.0.0.1', 54862) -2025-08-21 20:31:06,592 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "30ff7bb0e9d02c0fd0b0054a9d618d25662339cafc3fcc1442c57182.PubTator"} -2025-08-21 20:31:11,283 - INFO - Connection accepted from ('127.0.0.1', 52380) -2025-08-21 20:31:11,283 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3c499812cd51602e41f4687d1cf95e54a180f6bac1766a346fa82fb4.PubTator"} -2025-08-21 20:31:17,381 - INFO - Connection accepted from ('127.0.0.1', 52390) -2025-08-21 20:31:17,382 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "47cc34dc232a359bd7aaa4bbf9bd33d9d01ea390f670ec15243ce95e.PubTator"} -2025-08-21 20:31:24,416 - INFO - Connection accepted from ('127.0.0.1', 38594) -2025-08-21 20:31:24,416 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e45ed29fce772186ef533ec31f2161005b7e984dc629bb734fb5b9c8.PubTator"} -2025-08-21 20:31:41,790 - INFO - Connection accepted from ('127.0.0.1', 33734) -2025-08-21 20:31:41,790 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a7a921dccee50b85b93ac89251a0403a566783176a94880b1844daf2.PubTator"} -2025-08-21 20:31:50,234 - INFO - Connection accepted from ('127.0.0.1', 39546) -2025-08-21 20:31:50,235 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f99bca598e5bacb24920109bfe16f52a4adcf0623e42f5f35446745b.PubTator"} -2025-08-21 20:31:57,679 - INFO - Connection accepted from ('127.0.0.1', 39558) -2025-08-21 20:31:57,680 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "96fe8a6afa86d95762b56396c5e85bdba1691a5a3d2511612ee22e5e.PubTator"} -2025-08-21 20:32:02,583 - INFO - Connection accepted from ('127.0.0.1', 34198) -2025-08-21 20:32:02,583 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "84f4d162d0889536a392b46f32eebda58db27e58561a3e41e33e4cea.PubTator"} -2025-08-21 20:32:11,222 - INFO - Connection accepted from ('127.0.0.1', 52042) -2025-08-21 20:32:11,222 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "afc3d09d59021579b48e4819dd3f08295f3dc438f7f2919b06ca317e.PubTator"} -2025-08-21 20:32:17,541 - INFO - Connection accepted from ('127.0.0.1', 52046) -2025-08-21 20:32:17,541 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator"} -2025-08-21 20:32:27,493 - INFO - Connection accepted from ('127.0.0.1', 49636) -2025-08-21 20:32:27,493 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 21:12:10,136 - INFO - Connection accepted from ('127.0.0.1', 37164) -2025-08-21 21:12:10,137 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 21:12:47,785 - INFO - Connection accepted from ('127.0.0.1', 58406) -2025-08-21 21:12:47,785 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator"} -2025-08-21 21:12:56,082 - INFO - Connection accepted from ('127.0.0.1', 44096) -2025-08-21 21:12:56,082 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "033058d4b744c965cb1f7c798cc9c1fee136688c7bdd6f191929cd02.PubTator"} -2025-08-21 21:13:08,785 - INFO - Connection accepted from ('127.0.0.1', 38616) -2025-08-21 21:13:08,785 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dc37d57b5508811be20af120757571a6a7725f0d2977f58c84837a7f.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 21:29:46,644 - INFO - Connection accepted from ('127.0.0.1', 47556) -2025-08-21 21:29:46,644 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "729d3f9975787183c5117b5f2a4604e97594352b40aaf9e3688a6823.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 21:51:03,365 - INFO - Connection accepted from ('127.0.0.1', 37414) -2025-08-21 21:51:03,365 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 206, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 21:56:53,487 - INFO - Connection accepted from ('127.0.0.1', 43622) -2025-08-21 21:56:53,487 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "37f8a68ed3c820c1c408bb453ec7114e791811a377460d41c3c3ea84.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 22:05:42,823 - INFO - Connection accepted from ('127.0.0.1', 35540) -2025-08-21 22:05:42,823 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "801077202e18420c5835e270c0d90333911485e69e231121751d3032.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 22:08:51,047 - INFO - Connection accepted from ('127.0.0.1', 49732) -2025-08-21 22:08:51,048 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 22:11:08,274 - INFO - Connection accepted from ('127.0.0.1', 48154) -2025-08-21 22:11:08,275 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 22:11:46,268 - INFO - Connection accepted from ('127.0.0.1', 52076) -2025-08-21 22:11:46,268 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "69f6719bd150439e24005d8432c68e39bf31d5fc113a028bfbd91006.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 22:35:00,501 - INFO - Connection accepted from ('127.0.0.1', 48388) -2025-08-21 22:35:00,501 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "fafdb99975801684a412340ad98293cfe2307e3ab3d7ff0c006eeda5.PubTator"} -2025-08-21 23:44:59,511 - INFO - Connection accepted from ('127.0.0.1', 43480) -2025-08-21 23:44:59,511 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a0b53db8b2ef91d1ebe9d88002d924aca9ec237b144275572593c32e.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 23:56:24,624 - INFO - Connection accepted from ('127.0.0.1', 45490) -2025-08-21 23:56:24,624 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d48beeca8a07e4059a6bea41aad1a8b7e85c15a578008e7317717b07.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-22 00:13:33,851 - INFO - Connection accepted from ('127.0.0.1', 41250) -2025-08-22 00:13:33,851 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c3ea6a29dbea4a139d96f6135c9c1ddd85a1925ab6b64c8658723b5e.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-22 00:18:18,681 - INFO - Connection accepted from ('127.0.0.1', 55022) -2025-08-22 00:18:18,682 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "44b8882bc774b330ebd400912695dfee5bd544e2050be5c5ead326ca.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-22 00:27:32,174 - INFO - Connection accepted from ('127.0.0.1', 45592) -2025-08-22 00:27:32,174 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5022147668ee40f2c64fbef14833893a7356260f54b8b279698a6462.PubTator"} -2025-08-22 00:31:53,330 - INFO - Connection accepted from ('127.0.0.1', 58504) -2025-08-22 00:31:53,330 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-22 00:33:50,052 - INFO - Connection accepted from ('127.0.0.1', 53190) -2025-08-22 00:33:50,053 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-28 10:52:53,110 - INFO - Connection accepted from ('127.0.0.1', 48256) -2025-08-28 10:52:53,110 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "03da14bdd5e112af67e8c6f7a3bd0d6d15e72f411d309a35cd0743bf.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-28 13:34:55,046 - INFO - Connection accepted from ('127.0.0.1', 33522) -2025-08-28 13:34:55,047 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-28 14:02:04,360 - INFO - Connection accepted from ('127.0.0.1', 56596) -2025-08-28 14:02:04,360 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-28 14:51:47,736 - INFO - Connection accepted from ('127.0.0.1', 55280) -2025-08-28 14:51:47,736 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8c3f822074eb06ba00fd145e2f869875b420538754f89f5808d5fd4e.PubTator"} -Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation. -2025-08-29 11:27:26,489 - INFO - Connection accepted from ('127.0.0.1', 59964) -2025-08-29 11:27:26,499 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-17 11:10:30,083 - INFO - Connection accepted from ('127.0.0.1', 56200) -2025-09-17 11:10:30,083 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a1773482ee80b67b47aff91334515e62ecabd077849417bcb463110c.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-17 12:24:07,433 - INFO - Connection accepted from ('127.0.0.1', 60870) -2025-09-17 12:24:07,433 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9bc1ff8066f17a6457bd1921f2c51ed7f03cf9589239369db89ec3fa.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-17 12:46:06,345 - INFO - Connection accepted from ('127.0.0.1', 57978) -2025-09-17 12:46:06,346 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1499349ee9985c99ab932f2ad11e35e3d07201e33e712d179093f32b.PubTator"} -2025-09-17 12:53:45,632 - INFO - Connection accepted from ('127.0.0.1', 38590) -2025-09-17 12:53:45,632 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bf3ae5e071fc67cfc4d940ad4fe46e4d3e36fc0cfd6bc6bf7a77f7f7.PubTator"} -2025-09-17 12:59:57,544 - INFO - Connection accepted from ('127.0.0.1', 53102) -2025-09-17 12:59:57,544 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c85c6699513924186db9dd319fe7f541984da30a50f8ab2f39fa0430.PubTator"} -2025-09-17 13:07:06,174 - INFO - Connection accepted from ('127.0.0.1', 51812) -2025-09-17 13:07:06,175 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7b00b22e2c9ce5ade86424797ad42c463089d18a36f825a3c6962acd.PubTator"} -2025-09-17 13:14:52,250 - INFO - Connection accepted from ('127.0.0.1', 59146) -2025-09-17 13:14:52,250 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7efada28608416135598c736128f1ab7d05b21343ca13208272597e0.PubTator"} -2025-09-17 13:20:46,134 - INFO - Connection accepted from ('127.0.0.1', 41356) -2025-09-17 13:20:46,135 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "48a72cf4a966d71e3495cf4a1437cc2dd507dc56b8fb12827031147b.PubTator"} -2025-09-17 14:10:02,662 - INFO - Connection accepted from ('127.0.0.1', 35748) -2025-09-17 14:10:02,662 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-17 14:31:54,934 - INFO - Connection accepted from ('127.0.0.1', 43550) -2025-09-17 14:31:54,934 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "060cba8cd3860b27a0709755afa3ea974884dd6b40e5353c7fdb92c2.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-17 14:48:55,419 - INFO - Connection accepted from ('127.0.0.1', 44478) -2025-09-17 14:48:55,419 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a8d06891a6253eb44a486c2980d8562e35f96cb3c6550ddc7eb989bd.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-17 15:14:41,909 - INFO - Connection accepted from ('127.0.0.1', 39548) -2025-09-17 15:14:41,910 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6bdc85d4bd729687a38010d5c6720ea19752d77519caaf948039e3dd.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-17 15:35:39,991 - INFO - Connection accepted from ('127.0.0.1', 37396) -2025-09-17 15:35:39,991 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "76a4cfe48d370e6c1d531733a536df09a69e8a90486304c3d0b856b9.PubTator"} -2025-09-17 15:42:35,415 - INFO - Connection accepted from ('127.0.0.1', 46534) -2025-09-17 15:42:35,415 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6f5caa582a230078e590f5538a2885b2b4f2b07cb76743865a806d08.PubTator"} -2025-09-17 15:48:08,323 - INFO - Connection accepted from ('127.0.0.1', 59852) -2025-09-17 15:48:08,323 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "75d30358c4498a0d17ff65b86cb778f43e998ccf8b2af86b59c9cb16.PubTator"} -2025-09-17 15:56:05,394 - INFO - Connection accepted from ('127.0.0.1', 45176) -2025-09-17 15:56:05,394 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f0b016a2e7cb06d6969f346baab78133546b325a29186c668d9640a6.PubTator"} -2025-09-17 16:02:59,522 - INFO - Connection accepted from ('127.0.0.1', 55588) -2025-09-17 16:02:59,523 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b8a10077fd0d1c3910bc30d3dcec583800643d7e5541aa3d831fb67d.PubTator"} -2025-09-17 16:08:28,800 - INFO - Connection accepted from ('127.0.0.1', 53234) -2025-09-17 16:08:28,800 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ae1cd1e6f9166f89e1b6f1f98afab5dbb57fd112e72c97b958902408.PubTator"} -2025-09-17 16:13:45,377 - INFO - Connection accepted from ('127.0.0.1', 55982) -2025-09-17 16:13:45,377 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4b638144a62efd55a9b36b0212e7f064abf21127793c3556d993f33a.PubTator"} -2025-09-17 16:21:36,927 - INFO - Connection accepted from ('127.0.0.1', 57014) -2025-09-17 16:21:36,928 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2935e3773208e8bc6181b79ae26b310eac22ff29ccdf26f4d89fa7f0.PubTator"} -2025-09-17 16:27:12,680 - INFO - Connection accepted from ('127.0.0.1', 58832) -2025-09-17 16:27:12,681 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "722b9804e1bca71e866f16a04e5cc165b78f96274e267766810e3b42.PubTator"} -2025-09-17 16:33:20,241 - INFO - Connection accepted from ('127.0.0.1', 50332) -2025-09-17 16:33:20,242 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7701b2515eb4a5c70aeae8070520c1ff549995b2c53591a702a289ae.PubTator"} -2025-09-17 16:41:29,947 - INFO - Connection accepted from ('127.0.0.1', 47446) -2025-09-17 16:41:29,947 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4224419f654bd839cea844bbe503272a95dedf7ae2c1743bcd1bc5c7.PubTator"} -2025-09-17 16:47:36,561 - INFO - Connection accepted from ('127.0.0.1', 38678) -2025-09-17 16:47:36,561 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "209bf04a447d6f7e96a3dfb2c4a88790d500aaae14b3105ecd02764d.PubTator"} -2025-09-17 16:54:25,440 - INFO - Connection accepted from ('127.0.0.1', 40080) -2025-09-17 16:54:25,440 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ca1db229f1ef3847c6828c295d4940ac1f6c78f81b734fa66461caa6.PubTator"} -2025-09-17 16:59:33,066 - INFO - Connection accepted from ('127.0.0.1', 50822) -2025-09-17 16:59:33,066 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "34f2e2dcfad7023766c0a7cc225aabbd2ea73bedda30df50ceb57945.PubTator"} -2025-09-17 17:07:39,376 - INFO - Connection accepted from ('127.0.0.1', 35054) -2025-09-17 17:07:39,377 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7ca5eaca22563071eab1bfb5f7eadf6c66bbc2bf8e103af1f88504a4.PubTator"} -2025-09-17 17:13:14,423 - INFO - Connection accepted from ('127.0.0.1', 36024) -2025-09-17 17:13:14,424 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8e4a42068dac51e8bb81f364a934429b58a08ce6f927ca01b4e93316.PubTator"} -2025-09-17 17:20:48,700 - INFO - Connection accepted from ('127.0.0.1', 49556) -2025-09-17 17:20:48,700 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8954bd538e3f3376549bfec4f7b763471be35e85123949d8c7c84ac5.PubTator"} -2025-09-17 17:27:45,046 - INFO - Connection accepted from ('127.0.0.1', 52622) -2025-09-17 17:27:45,046 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b32183c5c3d03c5b0aef0dd168a383affeb16900a62524ae3f6c6e31.PubTator"} -2025-09-17 17:32:40,181 - INFO - Connection accepted from ('127.0.0.1', 56844) -2025-09-17 17:32:40,182 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2921d686c0e322af074408698c9622213fc25fae92a8a27c7968cd36.PubTator"} -2025-09-17 17:37:10,016 - INFO - Connection accepted from ('127.0.0.1', 40772) -2025-09-17 17:37:10,017 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "16291d172c065db0c03bc088a38f14c204ca2361ff0e636f0513ae33.PubTator"} -2025-09-17 17:41:18,115 - INFO - Connection accepted from ('127.0.0.1', 49100) -2025-09-17 17:41:18,115 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "56e5d54adf5a52fc2a38efcf5edd8de93fad43bf11c7bc104727e060.PubTator"} -2025-09-17 17:45:29,211 - INFO - Connection accepted from ('127.0.0.1', 45778) -2025-09-17 17:45:29,211 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "23276a4c7b62cba6c0723436fe72678d8c4a5ce1550e424508e90136.PubTator"} -2025-09-17 17:51:59,949 - INFO - Connection accepted from ('127.0.0.1', 56118) -2025-09-17 17:51:59,949 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3eb61697c2c016ce65e3d89ecf23acd7c83c802b38bf13283f3d0f16.PubTator"} -2025-09-17 17:58:28,378 - INFO - Connection accepted from ('127.0.0.1', 33050) -2025-09-17 17:58:28,378 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "14caa8dbd3c091857813e0e85b2fab6adda30e74c1dd3305846a2810.PubTator"} -2025-09-17 18:06:08,673 - INFO - Connection accepted from ('127.0.0.1', 59706) -2025-09-17 18:06:08,674 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6bd8bd22bb14d060a85dcb8d5f10db52f8068bd1a58f8480752bcc5c.PubTator"} -2025-09-17 18:09:28,942 - INFO - Connection accepted from ('127.0.0.1', 52084) -2025-09-17 18:09:28,942 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cc14128c935bd9de76da8e58588cd316b1d30407ed052cbb7e68347a.PubTator"} -2025-09-17 18:22:30,191 - INFO - Connection accepted from ('127.0.0.1', 50598) -2025-09-17 18:22:30,191 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a63504cba3492975c9648d710aab8cfa9f4fd39b37dc59508ae7235d.PubTator"} -2025-09-17 18:29:07,728 - INFO - Connection accepted from ('127.0.0.1', 34200) -2025-09-17 18:29:07,729 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ecf8afce29ed17b1e677eb66c44ab1524a9763daf0edf34014b45a84.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-18 09:34:37,227 - INFO - Connection accepted from ('127.0.0.1', 51696) -2025-09-18 09:34:37,228 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5049bcfec01f4f1d8b656cabcfa9e5b8caf802c714c8d39e043a29fa.PubTator"} -2025-09-18 09:39:27,466 - INFO - Connection accepted from ('127.0.0.1', 48308) -2025-09-18 09:39:27,467 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ac1b31d7f2a8e867832571c4744ff29e8059eea683df90bc6a137d9e.PubTator"} -2025-09-18 09:44:17,690 - INFO - Connection accepted from ('127.0.0.1', 58166) -2025-09-18 09:44:17,690 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2b67bd8a16443927a46d11779226567f82f3aa4c87d16befa692f1c9.PubTator"} -2025-09-18 09:50:36,733 - INFO - Connection accepted from ('127.0.0.1', 48836) -2025-09-18 09:50:36,734 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f1b99bb5a7f3b88950dcb007f8211e6ec96ba02f950adb0eec6eee14.PubTator"} -2025-09-18 09:56:45,271 - INFO - Connection accepted from ('127.0.0.1', 52598) -2025-09-18 09:56:45,271 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d46844df7077d2f721e3f5f21abb0efe5fb5f86e808cee77c4908ff9.PubTator"} -2025-09-18 10:01:21,582 - INFO - Connection accepted from ('127.0.0.1', 59398) -2025-09-18 10:01:21,582 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c711fe5dd543f86071bd13298d01a32749f7dfb9f573859d252a86ee.PubTator"} -2025-09-18 10:07:41,933 - INFO - Connection accepted from ('127.0.0.1', 34056) -2025-09-18 10:07:41,933 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c9eba8f4d2ec18dbca3dfe17411ecfd4df409c2d5c0f6c9cf5b19658.PubTator"} -2025-09-18 10:14:08,238 - INFO - Connection accepted from ('127.0.0.1', 32832) -2025-09-18 10:14:08,238 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "46f6a40db0a9f6c3a591d600259ea573f1006d37ab274d5ad32f1858.PubTator"} -2025-09-18 10:21:11,160 - INFO - Connection accepted from ('127.0.0.1', 57418) -2025-09-18 10:21:11,160 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "97c6cca09972e90229c64dde01fb3643e7e2f9d2b1464c5a0d5f460d.PubTator"} -2025-09-18 10:27:48,306 - INFO - Connection accepted from ('127.0.0.1', 40892) -2025-09-18 10:27:48,307 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4c359d813daeb97f6e7ba03eb46a1a71f9451995d0101420d813935c.PubTator"} -2025-09-18 10:34:03,550 - INFO - Connection accepted from ('127.0.0.1', 42298) -2025-09-18 10:34:03,550 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b6cdc400fa6035b9db4c7a3aa1063324fd34cb8fc0a60999db4a7088.PubTator"} -2025-09-18 10:39:39,718 - INFO - Connection accepted from ('127.0.0.1', 33610) -2025-09-18 10:39:39,719 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "69da3d5c9756484561d38f6b18b486efb3ef03abff2cdca8d4db0470.PubTator"} -2025-09-18 10:45:14,147 - INFO - Connection accepted from ('127.0.0.1', 56592) -2025-09-18 10:45:14,148 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1501995ce586ffd0c7522df67e52af96f151f639f40a785a87e4a1ab.PubTator"} -2025-09-18 10:50:04,609 - INFO - Connection accepted from ('127.0.0.1', 49304) -2025-09-18 10:50:04,609 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "303706e25823bd0149547accec6ec3affcc4b2b7b85151fc9585b934.PubTator"} -2025-09-18 10:53:46,249 - INFO - Connection accepted from ('127.0.0.1', 54308) -2025-09-18 10:53:46,249 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "82aaf78c7d477b26c6d6de9a4891aa26aec9c5eaad2b4bc0f52ff40c.PubTator"} -2025-09-18 10:59:16,103 - INFO - Connection accepted from ('127.0.0.1', 38162) -2025-09-18 10:59:16,103 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "14cc615342962ce4f6996ac0ae9cd43a3b133d5ea971a4ecd1628679.PubTator"} -2025-09-18 11:05:17,978 - INFO - Connection accepted from ('127.0.0.1', 46020) -2025-09-18 11:05:17,978 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "fa40b5a14e86ed1202c7bf4fbf0a5c8ad1163491e5e388cec23b586e.PubTator"} -2025-09-18 11:12:08,564 - INFO - Connection accepted from ('127.0.0.1', 42380) -2025-09-18 11:12:08,564 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a365c0dd1424220c97f5edb66db093580b2f05b882a3ab791206f6a8.PubTator"} -2025-09-18 11:17:47,882 - INFO - Connection accepted from ('127.0.0.1', 47256) -2025-09-18 11:17:47,883 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d080d04547c5a24aab2cb28eb234670adc3985a80aaecacc7c4f708e.PubTator"} -2025-09-18 11:22:00,164 - INFO - Connection accepted from ('127.0.0.1', 60832) -2025-09-18 11:22:00,165 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a3a639e2a4441ddea4d69af957c164ad6ee595ca0b5301c102d697c0.PubTator"} -2025-09-18 11:28:28,021 - INFO - Connection accepted from ('127.0.0.1', 34666) -2025-09-18 11:28:28,021 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0d9b43e2b228a67da2f1615501a481166c7188675b6839c7e7f178ee.PubTator"} -2025-09-18 11:34:16,996 - INFO - Connection accepted from ('127.0.0.1', 54366) -2025-09-18 11:34:16,996 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a8c4468f804d0bc20cddc7db6a652a906a210c1e494f9adfc6bf4a60.PubTator"} -2025-09-18 11:39:12,304 - INFO - Connection accepted from ('127.0.0.1', 46782) -2025-09-18 11:39:12,305 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e696b2e5a7cfb0afad922b6c4fa921b9f19cecdc97384b603310188c.PubTator"} -2025-09-18 11:44:20,257 - INFO - Connection accepted from ('127.0.0.1', 37722) -2025-09-18 11:44:20,257 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a1a9809c4e476f8d900c78f59802a0a25d0a10dcc786371721e174b6.PubTator"} -2025-09-18 11:51:21,135 - INFO - Connection accepted from ('127.0.0.1', 34686) -2025-09-18 11:51:21,135 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d4b31b8900dd2f1d35e13c88a8decefbcf3aa6fff6c171729bfefe96.PubTator"} -2025-09-18 11:57:02,831 - INFO - Connection accepted from ('127.0.0.1', 36436) -2025-09-18 11:57:02,831 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "111eea2c637963c95ca9bf8587b8203b26d9c9073e516436ff029cf4.PubTator"} -2025-09-18 12:01:37,800 - INFO - Connection accepted from ('127.0.0.1', 39046) -2025-09-18 12:01:37,800 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "83d8d008497bd9133e049fc0a68c2f6ccf053283c6c29793f2c29a46.PubTator"} -2025-09-18 12:06:03,380 - INFO - Connection accepted from ('127.0.0.1', 48162) -2025-09-18 12:06:03,381 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0880c1da9adc4eb6836a3b843f63f5a686d66f6a42c3384746bcd569.PubTator"} -2025-09-18 12:09:43,954 - INFO - Connection accepted from ('127.0.0.1', 58850) -2025-09-18 12:09:43,954 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9bf1c4d0a56866015b17d47a224aa769db41a3bb5b68adeaccea4ef8.PubTator"} -2025-09-18 12:15:48,503 - INFO - Connection accepted from ('127.0.0.1', 49840) -2025-09-18 12:15:48,503 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "30981ae22ee94255da8e19eaade584f52cb851a13c56403452d1763a.PubTator"} -2025-09-18 12:22:39,972 - INFO - Connection accepted from ('127.0.0.1', 52698) -2025-09-18 12:22:39,972 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "af1e85300903ea8ef9d73a2bb4188355b64ce7c19e77f7fbecbcffd7.PubTator"} -2025-09-18 12:31:42,308 - INFO - Connection accepted from ('127.0.0.1', 43148) -2025-09-18 12:31:42,309 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "01a3f691d8dec6b385d7bc379ae95559617fcc57d36edd3a162e4e01.PubTator"} -2025-09-18 12:38:17,339 - INFO - Connection accepted from ('127.0.0.1', 38060) -2025-09-18 12:38:17,339 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b1c5dc511d34e30adea874dc4ebe5a15055b5abcd050820fa531e1ad.PubTator"} -2025-09-18 12:41:42,124 - INFO - Connection accepted from ('127.0.0.1', 50694) -2025-09-18 12:41:42,124 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c713c8537457ffe19a2661ed94afb4fd453e37fc31c33d4c61092aa9.PubTator"} -2025-09-18 12:48:55,452 - INFO - Connection accepted from ('127.0.0.1', 49804) -2025-09-18 12:48:55,452 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "db5d75df2bcce6388234127f0517dad4bf02de8e8462438dc9e32284.PubTator"} -2025-09-18 12:55:42,932 - INFO - Connection accepted from ('127.0.0.1', 43356) -2025-09-18 12:55:42,932 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c4db6ef33a6162bf1ec17f0ed155a1b260a6eaf41ac55ad0771f9d28.PubTator"} -2025-09-18 13:00:34,357 - INFO - Connection accepted from ('127.0.0.1', 47984) -2025-09-18 13:00:34,357 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6daf824e33e03585f02add175f1f5833067969d7630b3e2b9da65846.PubTator"} -2025-09-18 13:06:27,871 - INFO - Connection accepted from ('127.0.0.1', 44374) -2025-09-18 13:06:27,871 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d2ebf1ed40624802693fbaf646e42396b2e8a6b95e1a1977f433f231.PubTator"} -2025-09-18 13:12:11,816 - INFO - Connection accepted from ('127.0.0.1', 46938) -2025-09-18 13:12:11,817 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "60ebb311323b94b4e93318b4bb6b9191c266c1fa1637c7ca69cdbc78.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-18 14:17:24,692 - INFO - Connection accepted from ('127.0.0.1', 52728) -2025-09-18 14:17:24,693 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-18 14:28:59,943 - INFO - Connection accepted from ('127.0.0.1', 49890) -2025-09-18 14:28:59,943 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-18 14:45:08,478 - INFO - Connection accepted from ('127.0.0.1', 60906) -2025-09-18 14:45:08,478 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cbf764a70b62954566ef689aa887ec7d0fd3a312d5f673fd8db0f760.PubTator"} -2025-09-18 14:54:38,788 - INFO - Connection accepted from ('127.0.0.1', 34526) -2025-09-18 14:54:38,788 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "69e2d12e4df39d6821e2ad18aa12d61be7a461db5f692d6ac18b2a92.PubTator"} -2025-09-18 15:03:42,012 - INFO - Connection accepted from ('127.0.0.1', 33362) -2025-09-18 15:03:42,012 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "de7d9c2697092fb51ef8c021ae24bd26eea3be85c11d82cfb4ee292c.PubTator"} -2025-09-18 15:09:21,903 - INFO - Connection accepted from ('127.0.0.1', 56974) -2025-09-18 15:09:21,903 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d073b0038f542e06d7d174be1015f99b6861fa37e2ac0b00050bed0b.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-18 15:25:51,471 - INFO - Connection accepted from ('127.0.0.1', 49352) -2025-09-18 15:25:51,471 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "954340c9a89d52dc144557373eb3ea07410622b9db633546c284aacb.PubTator"} -2025-09-18 15:33:30,906 - INFO - Connection accepted from ('127.0.0.1', 58182) -2025-09-18 15:33:30,906 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a3a2271b007d7d01ed6856dc25ee8a8e12e8563c1c6664a3b07f37ee.PubTator"} -2025-09-18 15:39:33,601 - INFO - Connection accepted from ('127.0.0.1', 40700) -2025-09-18 15:39:33,601 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e247a78d735f84fbd245fe69072cf7adae43eecbf543041264c903f5.PubTator"} -2025-09-18 15:42:38,172 - INFO - Connection accepted from ('127.0.0.1', 58460) -2025-09-18 15:42:38,173 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ad98e24772b66b1e6633b19085f457b93d1647ddfa55d27028520eaf.PubTator"} -2025-09-18 15:45:14,764 - INFO - Connection accepted from ('127.0.0.1', 53582) -2025-09-18 15:45:14,764 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8ad06b86b09c8592d5b32f8d4c7b55290552cf63d6c96aa9ce675843.PubTator"} -2025-09-18 15:53:22,071 - INFO - Connection accepted from ('127.0.0.1', 36074) -2025-09-18 15:53:22,071 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "acf7b3170dae39a5584f8afe43cd111d0e1a731212b03a055a4d9a68.PubTator"} -2025-09-18 15:58:26,725 - INFO - Connection accepted from ('127.0.0.1', 54570) -2025-09-18 15:58:26,725 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "03120879462f4ab9426b3fe7956585ac571b4697a2b9a8d659daa55b.PubTator"} -2025-09-18 16:04:24,010 - INFO - Connection accepted from ('127.0.0.1', 52420) -2025-09-18 16:04:24,010 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "57898f44678fbfc1d92e94def7d294d3199a5fbd07d8d9ee37856a17.PubTator"} -2025-09-18 16:15:20,713 - INFO - Connection accepted from ('127.0.0.1', 36016) -2025-09-18 16:15:20,713 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ec3c89691a4f14011228af36714c7c1a76714ba1f69bb1a9a67d24c8.PubTator"} -2025-09-18 16:18:49,092 - INFO - Connection accepted from ('127.0.0.1', 56644) -2025-09-18 16:18:49,093 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4d220d56e87b3bbf3e5f3805d85d65513c9204adb05bb730eaf5969b.PubTator"} -2025-09-18 16:20:45,910 - INFO - Connection accepted from ('127.0.0.1', 41386) -2025-09-18 16:20:45,910 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "25bed10e400940e27cac58db4041ce1e55451d05ade101f45501f48a.PubTator"} -2025-09-18 16:25:21,787 - INFO - Connection accepted from ('127.0.0.1', 41146) -2025-09-18 16:25:21,787 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f7677c0a388102214de9f713a81d3ac4acbbc18549d0767fcb3634c8.PubTator"} -2025-09-18 16:30:39,272 - INFO - Connection accepted from ('127.0.0.1', 59180) -2025-09-18 16:30:39,272 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e9b6cce27a110f601a69995057f50539e442f068bbb8d868fdec0c4c.PubTator"} -2025-09-18 16:34:22,127 - INFO - Connection accepted from ('127.0.0.1', 54736) -2025-09-18 16:34:22,127 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ab5974547f8ae144d1a31b8832f2e7d46811057d0047dd8fc5d2b77d.PubTator"} -2025-09-18 16:38:42,174 - INFO - Connection accepted from ('127.0.0.1', 54132) -2025-09-18 16:38:42,174 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "df6c580fa3698044ac3ab9b1cefac6dca8402aaf776a0f31c9bd3fdb.PubTator"} -2025-09-18 16:45:34,126 - INFO - Connection accepted from ('127.0.0.1', 33396) -2025-09-18 16:45:34,126 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5a134894005431f76832b77a120f94ab28614c3473ac56626559e410.PubTator"} -2025-09-18 16:49:43,716 - INFO - Connection accepted from ('127.0.0.1', 47724) -2025-09-18 16:49:43,716 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "057b00c6ea12be08c9f9aeff2eb25c271a5435018f9dff2632e43ebe.PubTator"} -2025-09-18 16:57:37,781 - INFO - Connection accepted from ('127.0.0.1', 34130) -2025-09-18 16:57:37,781 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "31a4d66dcd6a8bc5ed750e2d64aee5207e3fda56e310428cab3ed633.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-18 17:02:29,262 - INFO - Connection accepted from ('127.0.0.1', 37718) -2025-09-18 17:02:29,263 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3fc3eeb12584d858be7122a31c56f422f177e29ea0904094d0d058bc.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-18 17:14:24,169 - INFO - Connection accepted from ('127.0.0.1', 57218) -2025-09-18 17:14:24,170 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "77018b9b19e70f1d70501dc8857f3d6394b8d2eb5ea3123679ebefc0.PubTator"} -2025-09-18 17:16:30,241 - INFO - Connection accepted from ('127.0.0.1', 53666) -2025-09-18 17:16:30,242 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0eab6c13791e54b6ad7d1a411bf1dab01bbd8894826cb1a8cecf92d6.PubTator"} -2025-09-18 17:20:34,528 - INFO - Connection accepted from ('127.0.0.1', 41466) -2025-09-18 17:20:34,528 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "fe9089e6093f81a87ddb5cad117a11cfb11cd8102889d73873bf77aa.PubTator"} -2025-09-18 17:22:32,499 - INFO - Connection accepted from ('127.0.0.1', 32830) -2025-09-18 17:22:32,499 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d4c1140e8f027f1ed99263a27ecbdd378a11fda959d07f17d5ee9680.PubTator"} -2025-09-18 17:29:04,279 - INFO - Connection accepted from ('127.0.0.1', 35768) -2025-09-18 17:29:04,280 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bfc483cad20f3fe622a8d8c1e579364e26566ce8dee3cf0523fe823b.PubTator"} -2025-09-18 17:36:08,193 - INFO - Connection accepted from ('127.0.0.1', 40518) -2025-09-18 17:36:08,193 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e7cdc9060c04c66306bf421778d65e5ea26db92b124e29e398190d40.PubTator"} -2025-09-18 17:39:40,175 - INFO - Connection accepted from ('127.0.0.1', 48254) -2025-09-18 17:39:40,176 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "98a4909f55310bd6092d4648f344d2f3d964d823e2c01e1079fb3cd7.PubTator"} -2025-09-18 17:41:30,775 - INFO - Connection accepted from ('127.0.0.1', 58426) -2025-09-18 17:41:30,775 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "df3b0f795385d2b3ac0597ff226b151d8921bdf2d6f574cf1f2fc49e.PubTator"} -2025-09-18 17:47:41,785 - INFO - Connection accepted from ('127.0.0.1', 53974) -2025-09-18 17:47:41,785 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "265c71c0318b5858a65200e379fe294137dd553210a882ede3b28b41.PubTator"} -2025-09-18 17:52:39,825 - INFO - Connection accepted from ('127.0.0.1', 48538) -2025-09-18 17:52:39,825 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3045fd7d8e059f7c7e98919cbbe715b38ae5fb09ce52cb44088c2f6f.PubTator"} -2025-09-18 17:57:43,712 - INFO - Connection accepted from ('127.0.0.1', 47556) -2025-09-18 17:57:43,712 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a857d2beb4a279b9d2974859214096a28707e2274041da05317394ed.PubTator"} -2025-09-18 17:59:45,946 - INFO - Connection accepted from ('127.0.0.1', 51112) -2025-09-18 17:59:45,946 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bc6b288387f2dc5ad551cf388a98af62b8bdbc75d1d2ae5f9a0afb06.PubTator"} -2025-09-18 18:01:42,380 - INFO - Connection accepted from ('127.0.0.1', 55664) -2025-09-18 18:01:42,380 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d067d918e9744876e189122f3a7ea86a8d9c1a9cd3f38ead0f9cbb89.PubTator"} -2025-09-18 18:03:19,794 - INFO - Connection accepted from ('127.0.0.1', 44468) -2025-09-18 18:03:19,794 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2c86eba64f1ee8990c41105beb7a04703d017530e55abd2afb634d7e.PubTator"} -2025-09-18 18:05:56,713 - INFO - Connection accepted from ('127.0.0.1', 43628) -2025-09-18 18:05:56,714 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6ab8a5d990e958a50d1b61a912cf51bf394256bb98b8709d437d074f.PubTator"} -2025-09-18 18:09:49,001 - INFO - Connection accepted from ('127.0.0.1', 47286) -2025-09-18 18:09:49,001 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2e25534b847e70038295a86f580c92a46f9b0235c258128b22ea346a.PubTator"} -2025-09-18 18:10:54,128 - INFO - Connection accepted from ('127.0.0.1', 51640) -2025-09-18 18:10:54,128 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "94289d45a2e3fe283f893de0e4ec80022f3201e50a2af61335f7dcfa.PubTator"} -2025-09-18 18:17:25,790 - INFO - Connection accepted from ('127.0.0.1', 43850) -2025-09-18 18:17:25,791 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6b990e3489183a67390fc86fdcb00fa3d19d471fe404e23321f13d5b.PubTator"} -2025-09-18 18:21:35,589 - INFO - Connection accepted from ('127.0.0.1', 44816) -2025-09-18 18:21:35,589 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "56774355c5ad4ede23fdf90f89d9121a53f332a8a61ccb2046d25567.PubTator"} -2025-09-18 18:24:29,874 - INFO - Connection accepted from ('127.0.0.1', 45018) -2025-09-18 18:24:29,874 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5b3bf3591ae9607b9e4088131fc0670244c71825cd0ef671d35b7ead.PubTator"} -2025-09-18 18:29:22,228 - INFO - Connection accepted from ('127.0.0.1', 50678) -2025-09-18 18:29:22,229 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4675b0dccd492746a62b60ab697e300779b44900e3b20c73318b3ec6.PubTator"} -2025-09-18 18:35:40,034 - INFO - Connection accepted from ('127.0.0.1', 52772) -2025-09-18 18:35:40,035 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "34f7d60d86ac64f84ffe1c75a0555a53188639b79747f92f14750897.PubTator"} -2025-09-18 18:40:27,494 - INFO - Connection accepted from ('127.0.0.1', 39006) -2025-09-18 18:40:27,494 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3c0157756963ca15c3e544efd1ee01394a1fc5fc75630e8c9cb4287f.PubTator"} -2025-09-18 18:42:31,946 - INFO - Connection accepted from ('127.0.0.1', 52248) -2025-09-18 18:42:31,947 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "be616bdacc737be1c0128f7a6169eb138091d170677835fec39720d8.PubTator"} -2025-09-18 18:44:43,987 - INFO - Connection accepted from ('127.0.0.1', 58660) -2025-09-18 18:44:43,987 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "05ad9eb69959b351a44c144f3f3481bb8b73efb5e664ad3fe45d58d2.PubTator"} -2025-09-18 18:46:21,249 - INFO - Connection accepted from ('127.0.0.1', 37138) -2025-09-18 18:46:21,249 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d048f9f68e37ba861cfb4a6151ce0ad33a1657fe2baf9f0ffa5f56e3.PubTator"} -2025-09-18 18:51:25,831 - INFO - Connection accepted from ('127.0.0.1', 39594) -2025-09-18 18:51:25,831 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "856ea346ffda32002f1058f1f2641f52cbe604a67f7a2171e330929f.PubTator"} -2025-09-18 18:57:08,492 - INFO - Connection accepted from ('127.0.0.1', 53990) -2025-09-18 18:57:08,492 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a9d724f38f1a9d283dbe86e0fba90f2c482b74c183ef7fed83640e3c.PubTator"} -2025-09-18 18:58:22,453 - INFO - Connection accepted from ('127.0.0.1', 33002) -2025-09-18 18:58:22,454 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "52e08b9bac398c764d1bd5e3c99a7ce606529e46f3ac45e8e7a12bad.PubTator"} -2025-09-18 19:00:48,473 - INFO - Connection accepted from ('127.0.0.1', 55702) -2025-09-18 19:00:48,474 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9bb23f5d43bca137cd50c923a376c3e0fd0b48d54fbe9d581a6f5194.PubTator"} -2025-09-18 19:03:43,692 - INFO - Connection accepted from ('127.0.0.1', 43956) -2025-09-18 19:03:43,692 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1f5930397170dd327f9378332c4509f515f26eb1ab16e73e5ed5b2a5.PubTator"} -2025-09-18 19:04:37,453 - INFO - Connection accepted from ('127.0.0.1', 33912) -2025-09-18 19:04:37,453 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "47e71977159d7f5d5a142aaddd090bff28ba66ffacb8908d6c55f812.PubTator"} -2025-09-18 19:06:59,869 - INFO - Connection accepted from ('127.0.0.1', 45422) -2025-09-18 19:06:59,869 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3bff36eed2351d3c58e9428dce1fda58c7997ee49da5e4e910c7d133.PubTator"} -2025-09-18 19:09:05,755 - INFO - Connection accepted from ('127.0.0.1', 57642) -2025-09-18 19:09:05,755 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "920e960a1d9b4307b21d516514768936af46b460f385aa516ce84504.PubTator"} -2025-09-18 19:10:11,331 - INFO - Connection accepted from ('127.0.0.1', 34020) -2025-09-18 19:10:11,331 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "447f6d9dab85d7d82bb33a5bd3f62b0300a243d57d2c6436a432f7e6.PubTator"} -2025-09-18 19:14:16,268 - INFO - Connection accepted from ('127.0.0.1', 56458) -2025-09-18 19:14:16,269 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d6efb29974a805c658cd2d5e45b3bdbe9a01e427c5e2080c9eddf178.PubTator"} -2025-09-18 19:20:44,669 - INFO - Connection accepted from ('127.0.0.1', 38108) -2025-09-18 19:20:44,670 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7fc19ab2df36ddfd866a1d4aa2b25b84ba031b004faa0e5d4d1b8983.PubTator"} -2025-09-18 19:24:37,520 - INFO - Connection accepted from ('127.0.0.1', 57122) -2025-09-18 19:24:37,520 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "789a480bbcc1316093831ec79f9062d9c1efba17edf30bdd305b8b20.PubTator"} -2025-09-18 19:38:53,797 - INFO - Connection accepted from ('127.0.0.1', 33562) -2025-09-18 19:38:53,797 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6dd893d100ec5df5205b81f51f88211c066f7be6343770de05765da0.PubTator"} -2025-09-18 19:45:22,329 - INFO - Connection accepted from ('127.0.0.1', 34380) -2025-09-18 19:45:22,330 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3451cfaade39905a11e51cfeb43676ccf234495bbf0a24df449dd038.PubTator"} -2025-09-18 19:52:03,529 - INFO - Connection accepted from ('127.0.0.1', 53114) -2025-09-18 19:52:03,530 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f233c18d1e574ed30d4668a0c8ef27c366efdb068ea771796a6a276d.PubTator"} -2025-09-18 20:04:56,223 - INFO - Connection accepted from ('127.0.0.1', 46268) -2025-09-18 20:04:56,224 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "25d6874dff2d9a8b2af6ee78166b1985e122ed869d80d766d9724f31.PubTator"} -2025-09-18 20:07:04,190 - INFO - Connection accepted from ('127.0.0.1', 37614) -2025-09-18 20:07:04,190 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "198ba4be34a8afaba951fc537a2f2889453d8cf57e9c46c4b533acf3.PubTator"} -2025-09-18 20:08:29,953 - INFO - Connection accepted from ('127.0.0.1', 59858) -2025-09-18 20:08:29,953 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "034454635d6c4d53217f14a817c72ca5680c2e4095b82c459e726ff5.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-19 09:30:22,007 - INFO - Connection accepted from ('127.0.0.1', 51848) -2025-09-19 09:30:22,007 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "143956f2912f6d2e3f3e9815d61ded24698f5715e178273ef00dad1e.PubTator"} -2025-09-19 09:33:06,618 - INFO - Connection accepted from ('127.0.0.1', 48584) -2025-09-19 09:33:06,618 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dc4ddc4891a32e37eea954d98d4dcdedaffd321320cdcca6675d54b2.PubTator"} -2025-09-19 09:38:03,502 - INFO - Connection accepted from ('127.0.0.1', 38108) -2025-09-19 09:38:03,502 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0255a68fb738d365f5ed285bc8d9967ccd7009cd2336528d34906c75.PubTator"} -2025-09-19 09:44:28,619 - INFO - Connection accepted from ('127.0.0.1', 35790) -2025-09-19 09:44:28,619 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8ec99913ccee65fb982ad39ca28de73841ad58a356f66abcdcb77de0.PubTator"} -2025-09-19 09:46:24,764 - INFO - Connection accepted from ('127.0.0.1', 44412) -2025-09-19 09:46:24,765 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "fa5c36ab57e8882ea077d4cba9f8fb7c6a3d4910ce05a6ec02420a86.PubTator"} -2025-09-19 09:48:44,078 - INFO - Connection accepted from ('127.0.0.1', 42216) -2025-09-19 09:48:44,078 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ccb8ae87f74313a2e16094cb93d2d0267c3927a8fc09ab285427121e.PubTator"} -2025-09-19 09:50:22,074 - INFO - Connection accepted from ('127.0.0.1', 58460) -2025-09-19 09:50:22,074 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a0bb869bc88070d5ce0668e50eff6e4e7b729e4f52092b7d9fbc39ff.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-19 09:56:36,034 - INFO - Connection accepted from ('127.0.0.1', 39004) -2025-09-19 09:56:36,034 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bf0f3f82a0f5d93c0a434a7179a1973e52fce83cb490b0cb7b612833.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-19 11:05:23,647 - INFO - Connection accepted from ('127.0.0.1', 50832) -2025-09-19 11:05:23,648 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "71307f7056c5bdd3809e893aaf18db2f9bdf77f72f1584e540528a51.PubTator"} -2025-09-19 11:09:38,368 - INFO - Connection accepted from ('127.0.0.1', 47040) -2025-09-19 11:09:38,368 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a120dd754be1b6332560c5f8c19677f702ddb67897be9e5d8f8c4c22.PubTator"} -2025-09-19 11:11:49,536 - INFO - Connection accepted from ('127.0.0.1', 50272) -2025-09-19 11:11:49,536 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c3cbd55f24018bf5f65662c77cfad13d99a62b3b92efb996020ffca0.PubTator"} -2025-09-19 11:16:22,437 - INFO - Connection accepted from ('127.0.0.1', 52990) -2025-09-19 11:16:22,437 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "eb3a9b2afe4ec337d42384cf4884d56deb0d73159fe24ad430a57d04.PubTator"} -2025-09-19 11:20:15,525 - INFO - Connection accepted from ('127.0.0.1', 41230) -2025-09-19 11:20:15,525 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d654c6ec60a57a63006c19bec72a4ff5984517358a5e3a96fc0f972b.PubTator"} -2025-09-19 11:22:52,008 - INFO - Connection accepted from ('127.0.0.1', 51824) -2025-09-19 11:22:52,008 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "08683d4947702432c762b30a5bd315c60d9549756cbb8982b0f80435.PubTator"} -2025-09-19 11:25:53,587 - INFO - Connection accepted from ('127.0.0.1', 49414) -2025-09-19 11:25:53,588 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0e7c4d9706d76ce746bd9bd4a49e8e2c88882893f6e3064e2959f5e0.PubTator"} -2025-09-19 11:30:44,840 - INFO - Connection accepted from ('127.0.0.1', 48078) -2025-09-19 11:30:44,840 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "72b708d554dfd1cc64a7740a2ae6ad814e44eef3128378e0f0e80643.PubTator"} -2025-09-19 11:33:44,534 - INFO - Connection accepted from ('127.0.0.1', 57890) -2025-09-19 11:33:44,534 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5e293e23db67128eb0c8f0e8d5040b7e9366547ffe243c223c998885.PubTator"} -2025-09-19 11:37:32,060 - INFO - Connection accepted from ('127.0.0.1', 37180) -2025-09-19 11:37:32,060 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cfa83f06e09ec0163b65e2627c0cd882190caea8517b8487e27a3ad1.PubTator"} -2025-09-19 11:41:47,361 - INFO - Connection accepted from ('127.0.0.1', 39100) -2025-09-19 11:41:47,361 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "51d06446961ae8425b555a72ea6120f93a0708bfd313659e535f9401.PubTator"} -2025-09-19 11:44:40,273 - INFO - Connection accepted from ('127.0.0.1', 49642) -2025-09-19 11:44:40,273 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b12b0517732991c95c133d1b3a5695d2c81f10c0f87e2e45a89c9977.PubTator"} -2025-09-19 11:47:40,021 - INFO - Connection accepted from ('127.0.0.1', 59142) -2025-09-19 11:47:40,021 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e57acffafd469e70be1667767a615a279163d621b4a3dc9291230361.PubTator"} -2025-09-19 11:50:15,390 - INFO - Connection accepted from ('127.0.0.1', 36456) -2025-09-19 11:50:15,390 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "43f4a165643ded775a06053215258dd16d770493c6f9765661705bd9.PubTator"} -2025-09-19 11:54:02,520 - INFO - Connection accepted from ('127.0.0.1', 57502) -2025-09-19 11:54:02,520 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "285774cbeafa63ef1c0ed93c594aa78e467ef2f86806205cc5fce289.PubTator"} -2025-09-19 11:56:51,198 - INFO - Connection accepted from ('127.0.0.1', 40420) -2025-09-19 11:56:51,199 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8cac582b6bed8043216666ce82267b493f6eb16483871eada6a941a3.PubTator"} -2025-09-19 12:00:28,752 - INFO - Connection accepted from ('127.0.0.1', 43146) -2025-09-19 12:00:28,752 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "244ed21841aeed3d878d76e459c0a0931953f3ff02f4f0020af0a18c.PubTator"} -2025-09-19 12:03:35,515 - INFO - Connection accepted from ('127.0.0.1', 41124) -2025-09-19 12:03:35,516 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7422eaf59ef0ba946412a3e3bf62c453ce6cd0f33645c445488f404e.PubTator"} -2025-09-19 12:06:12,342 - INFO - Connection accepted from ('127.0.0.1', 43840) -2025-09-19 12:06:12,342 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "256b013b958377bdb71244639df1a9a0af101d7cca35ffc0692ebfaa.PubTator"} -2025-09-19 12:08:24,001 - INFO - Connection accepted from ('127.0.0.1', 55338) -2025-09-19 12:08:24,001 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "94185e6d5a641a9ba9d9d8005467c5085a2c05ec4e65792507b4fb91.PubTator"} -2025-09-19 12:11:10,910 - INFO - Connection accepted from ('127.0.0.1', 42736) -2025-09-19 12:11:10,910 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "38584afcb0c262498326e844ca924b1456d1e0f59ec56533bbc4a3b3.PubTator"} -2025-09-19 12:13:21,518 - INFO - Connection accepted from ('127.0.0.1', 54270) -2025-09-19 12:13:21,519 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c2bd5ae7ba5032b6a19647985407bdf380011eaccd37f6ca43f063d3.PubTator"} -2025-09-19 12:16:30,426 - INFO - Connection accepted from ('127.0.0.1', 58514) -2025-09-19 12:16:30,426 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "74d4848c514a39710b447735dd2c72799a1c1df4644610fa83e005bc.PubTator"} -2025-09-19 12:19:51,866 - INFO - Connection accepted from ('127.0.0.1', 48414) -2025-09-19 12:19:51,866 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ed6b163b3fa11fa664c680a518d1d1f30f259497730fe2c00e135c5c.PubTator"} -2025-09-19 12:23:29,204 - INFO - Connection accepted from ('127.0.0.1', 41906) -2025-09-19 12:23:29,205 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "192f8e35935cfa6dc68e82ff302eb2bb6d791276f73f375fca680e69.PubTator"} -2025-09-19 12:25:32,757 - INFO - Connection accepted from ('127.0.0.1', 39340) -2025-09-19 12:25:32,758 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "aba4d596bfb02d9797ff8a8e8fd0f495dc42cb34a4eeee7a56b2b5c4.PubTator"} -2025-09-19 12:32:01,290 - INFO - Connection accepted from ('127.0.0.1', 55450) -2025-09-19 12:32:01,290 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "511de8dca3c0e23e3e0a33926e79f3a25ab09247225e9dcad2fb0076.PubTator"} -2025-09-19 12:35:17,195 - INFO - Connection accepted from ('127.0.0.1', 39950) -2025-09-19 12:35:17,195 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "14f767fc9f11e1b5528e336381743ad8870bdc3e7bc0850c50344616.PubTator"} -2025-09-19 12:39:30,362 - INFO - Connection accepted from ('127.0.0.1', 46668) -2025-09-19 12:39:30,362 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "05e681dde91d2ec492736e9863e75917c65d7ebbe788e337ec411a79.PubTator"} -2025-09-19 12:42:16,373 - INFO - Connection accepted from ('127.0.0.1', 44620) -2025-09-19 12:42:16,373 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c2b10142ee68d356267344b4c97689e05f2efda5e39d975a17898eda.PubTator"} -2025-09-19 12:44:57,963 - INFO - Connection accepted from ('127.0.0.1', 38638) -2025-09-19 12:44:57,963 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3ff666732551c9cadb4b94ab76b60111216a959b26f7cb8a7a19ab47.PubTator"} -2025-09-19 12:48:13,694 - INFO - Connection accepted from ('127.0.0.1', 47594) -2025-09-19 12:48:13,695 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8bc4937a423f854f0f21b4d0a56f721abedc5db4b8da45b89c3a0641.PubTator"} -2025-09-19 12:50:43,720 - INFO - Connection accepted from ('127.0.0.1', 44836) -2025-09-19 12:50:43,720 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b23419d8fb119c35091314e4c82d3af4a5e26f13a6b9c7a0a7fe6ca9.PubTator"} -2025-09-19 12:53:09,327 - INFO - Connection accepted from ('127.0.0.1', 44178) -2025-09-19 12:53:09,327 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "553b58ace9fe43816bf34052ccadfcfabb81fe20fceb965cf7087d84.PubTator"} -2025-09-19 12:56:17,947 - INFO - Connection accepted from ('127.0.0.1', 40582) -2025-09-19 12:56:17,947 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "01cd858bb4e9252f7f96804917fa7fa08aae64bf9cb7cae5e41ed52f.PubTator"} -2025-09-19 12:59:08,607 - INFO - Connection accepted from ('127.0.0.1', 55590) -2025-09-19 12:59:08,608 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "73cf64a5b62d0f47e5b8cd67d0e4fcbb3157cde313df8e82d23fc62b.PubTator"} -2025-09-19 13:02:58,826 - INFO - Connection accepted from ('127.0.0.1', 36706) -2025-09-19 13:02:58,827 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bae5f09781fc9b4738b4f39f4e1e29121187d0e8890a45de621f253e.PubTator"} -2025-09-19 13:06:41,519 - INFO - Connection accepted from ('127.0.0.1', 59976) -2025-09-19 13:06:41,520 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d8be928f0c155ef66a510823266c505503a97ba35c771a735918ee5d.PubTator"} -2025-09-19 13:10:27,004 - INFO - Connection accepted from ('127.0.0.1', 44304) -2025-09-19 13:10:27,004 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f72b29c96f91b31fca3e93e5b0cd790c0ecd885865c8a5dbb71f6092.PubTator"} -2025-09-19 13:12:39,846 - INFO - Connection accepted from ('127.0.0.1', 40842) -2025-09-19 13:12:39,846 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9489eb18cf3b8018ca7cfd9414b55930e43a3c52f8deb1667e50f0d4.PubTator"} -2025-09-19 13:15:21,387 - INFO - Connection accepted from ('127.0.0.1', 33664) -2025-09-19 13:15:21,387 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "145c5d63928e8d61a2193c2c34f434cd9ecc21fdf55a366132048b9c.PubTator"} -2025-09-19 13:17:56,422 - INFO - Connection accepted from ('127.0.0.1', 56834) -2025-09-19 13:17:56,423 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4ddc36bc9a370250bf902814f17faa1e0144eac8281f40188301573d.PubTator"} -2025-09-19 13:19:46,713 - INFO - Connection accepted from ('127.0.0.1', 38582) -2025-09-19 13:19:46,713 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7f74e45c5aceaba3c809369d730fc5b486849b44706e1e53bfd1f878.PubTator"} -2025-09-19 13:22:36,738 - INFO - Connection accepted from ('127.0.0.1', 53290) -2025-09-19 13:22:36,738 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9cd7fa05d163cc07fb96b80c0ffbc94f668205a398234c5e2a1893a7.PubTator"} -2025-09-19 13:25:51,419 - INFO - Connection accepted from ('127.0.0.1', 54398) -2025-09-19 13:25:51,420 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c83d38c65c57058e626a71840da2c4f73a3fac383ba236b1e753b123.PubTator"} -2025-09-19 13:28:55,816 - INFO - Connection accepted from ('127.0.0.1', 39556) -2025-09-19 13:28:55,816 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d42822d25ee8a2ea8c25865b8a0c82015febafeb14e15d7c222afcaa.PubTator"} -2025-09-19 13:31:54,492 - INFO - Connection accepted from ('127.0.0.1', 43590) -2025-09-19 13:31:54,492 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "af2f80599c19e1660aa119e9c8e7ad07861b8c3d919e542718f71500.PubTator"} -2025-09-19 13:34:21,006 - INFO - Connection accepted from ('127.0.0.1', 33034) -2025-09-19 13:34:21,006 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ec1900ecbb4262ec597096316730f4a679df50a20326676303aae02a.PubTator"} -2025-09-19 13:36:47,859 - INFO - Connection accepted from ('127.0.0.1', 55076) -2025-09-19 13:36:47,860 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3208993a0ad8c103429df6b137510f759709d7c7e1f149b83e3300e1.PubTator"} -2025-09-19 13:39:43,232 - INFO - Connection accepted from ('127.0.0.1', 40480) -2025-09-19 13:39:43,232 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "19acd64c9fa261f897bb51c061f2d8b3be89ea9fb0c5938b88f15f81.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-19 15:43:50,070 - INFO - Connection accepted from ('127.0.0.1', 60410) -2025-09-19 15:43:50,070 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7906b66f710bd0249f19d33c238a4315d921d8e1ee015d0299fea3f0.PubTator"} -2025-09-19 15:46:05,248 - INFO - Connection accepted from ('127.0.0.1', 53980) -2025-09-19 15:46:05,248 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5a38376eba124cb90952eb85e96b1b82f89d393aad1d9e4622e582b8.PubTator"} -2025-09-19 15:49:17,672 - INFO - Connection accepted from ('127.0.0.1', 35830) -2025-09-19 15:49:17,672 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "90c4ebd65d71423ae6bfa166cb0e05c49dc87b0deccbef842b31e2b0.PubTator"} -2025-09-19 15:51:43,406 - INFO - Connection accepted from ('127.0.0.1', 34244) -2025-09-19 15:51:43,406 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "318bc8793de48e0e378c0f2fc6d3d13c2f92ecbf37982ff936118749.PubTator"} -2025-09-19 15:54:07,883 - INFO - Connection accepted from ('127.0.0.1', 49726) -2025-09-19 15:54:07,883 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cc0d49dce8d734d20a222175a4a7754e4caac42aec637837fb774fe1.PubTator"} -2025-09-19 15:56:21,654 - INFO - Connection accepted from ('127.0.0.1', 51116) -2025-09-19 15:56:21,654 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "77cf1309f24eccd732e05e11091e3456c1d6327702081b01d3e19995.PubTator"} -2025-09-19 15:58:29,619 - INFO - Connection accepted from ('127.0.0.1', 44930) -2025-09-19 15:58:29,619 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "36364443f39e5cd9f14fedb44e62f095b2cad994fea7868794a409b5.PubTator"} -2025-09-19 16:01:09,107 - INFO - Connection accepted from ('127.0.0.1', 45374) -2025-09-19 16:01:09,108 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4b4eb680d31ddf3bdbe39ec3912fabcf68bd24963b086073d79152c3.PubTator"} -2025-09-19 16:03:58,611 - INFO - Connection accepted from ('127.0.0.1', 32940) -2025-09-19 16:03:58,612 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4439854d0de63973156b18cd112544745353560019b9f3220813054f.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 09:22:27,933 - INFO - Connection accepted from ('127.0.0.1', 48544) -2025-09-20 09:22:27,933 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 09:40:45,180 - INFO - Connection accepted from ('127.0.0.1', 59154) -2025-09-20 09:40:45,180 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5664f237c831964c0dd0a8a1f54a9be8a471c60c5999c74bfe844c33.PubTator"} -2025-09-20 09:44:55,510 - INFO - Connection accepted from ('127.0.0.1', 57416) -2025-09-20 09:44:55,510 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c102291a9efb43013fd47137a4358ebcd0350fd2c999cbc5c46ce081.PubTator"} -2025-09-20 09:48:55,753 - INFO - Connection accepted from ('127.0.0.1', 52552) -2025-09-20 09:48:55,753 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3d879b3015a4b778e7f5d800fe3829e52038c666f76f9ae41ab81ade.PubTator"} -2025-09-20 09:50:50,558 - INFO - Connection accepted from ('127.0.0.1', 53600) -2025-09-20 09:50:50,558 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "305474915b2859ce32c828a2004d1dcdaebe8a397c7af4cb8bf5ea12.PubTator"} -2025-09-20 09:55:11,871 - INFO - Connection accepted from ('127.0.0.1', 53640) -2025-09-20 09:55:11,871 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9b0155136432a6ea20e66720768eaf58f3473f17d17940d3caffce29.PubTator"} -2025-09-20 09:58:11,941 - INFO - Connection accepted from ('127.0.0.1', 45066) -2025-09-20 09:58:11,941 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dcbebaa4e802b6811b24a6a619ced93b98f9edf1a564b2127efc7eef.PubTator"} -2025-09-20 10:01:30,383 - INFO - Connection accepted from ('127.0.0.1', 35050) -2025-09-20 10:01:30,383 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "59439ff29240579aa294f945d63fc56bb060d12f7f04d7537f5ef482.PubTator"} -2025-09-20 10:04:29,576 - INFO - Connection accepted from ('127.0.0.1', 43020) -2025-09-20 10:04:29,577 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "592a9331c9ffbd4311082ccc9b9d6a0380f51733edeb179fea3214da.PubTator"} -2025-09-20 10:07:37,117 - INFO - Connection accepted from ('127.0.0.1', 44554) -2025-09-20 10:07:37,117 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "96386b8c65566b29206e45ae67263210c43221515cbe7953aa82dfd6.PubTator"} -2025-09-20 10:11:16,064 - INFO - Connection accepted from ('127.0.0.1', 56884) -2025-09-20 10:11:16,064 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "15cd22375b4eeeb3ff92fa09996ca5325d5ff0f96de658b5f67f893d.PubTator"} -2025-09-20 10:13:37,910 - INFO - Connection accepted from ('127.0.0.1', 46352) -2025-09-20 10:13:37,910 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "da13bbd5fe4db230644fda2c26a0e82f24a0ff4faf00bba69b0e55ef.PubTator"} -2025-09-20 10:16:30,148 - INFO - Connection accepted from ('127.0.0.1', 60524) -2025-09-20 10:16:30,148 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "71b3f96ba8e8f80c708913d22880886107093dd7402e4e33302e08eb.PubTator"} -2025-09-20 10:20:56,653 - INFO - Connection accepted from ('127.0.0.1', 52540) -2025-09-20 10:20:56,653 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9e7ea7f8d66e0b5452b96b6e1a77f16d31579b793efc7d256dedd5e9.PubTator"} -2025-09-20 10:23:49,794 - INFO - Connection accepted from ('127.0.0.1', 41046) -2025-09-20 10:23:49,794 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "339161045d58c984f3c809ac01f74933004957b64abbedd41eb3c345.PubTator"} -2025-09-20 10:27:34,473 - INFO - Connection accepted from ('127.0.0.1', 34056) -2025-09-20 10:27:34,473 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "232485fb9d82cca08280deeb231064b74018cf004dc845305824faef.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 10:34:54,160 - INFO - Connection accepted from ('127.0.0.1', 56144) -2025-09-20 10:34:54,160 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b98d71393a5d13b634ab712a980e7dce04688253db209c41d3119be3.PubTator"} -2025-09-20 10:40:58,140 - INFO - Connection accepted from ('127.0.0.1', 35492) -2025-09-20 10:40:58,140 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "816e018295d58462ad4058b020920d62cda50569fd8a61449028535e.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 10:46:38,939 - INFO - Connection accepted from ('127.0.0.1', 43300) -2025-09-20 10:46:38,939 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "199bfa66ee289858bb288eb7aa196542cc543b5528d05143fb7b6141.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 10:57:03,220 - INFO - Connection accepted from ('127.0.0.1', 33324) -2025-09-20 10:57:03,220 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d4627bafaffb0215e3d6d8c9de5449b3639d35cbd81583c65b3c7099.PubTator"} -2025-09-20 11:10:58,039 - INFO - Connection accepted from ('127.0.0.1', 50642) -2025-09-20 11:10:58,039 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "717fab74fe9dc657f7b4ffb1c6b33148d3a5dc0673b63805555eb665.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 13:52:58,690 - INFO - Connection accepted from ('127.0.0.1', 46128) -2025-09-20 13:52:58,691 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0daebd7fdc2bd1917650e8ffbd2f77ddcf8365bd7b44807293e8e2bc.PubTator"} -2025-09-20 13:59:04,680 - INFO - Connection accepted from ('127.0.0.1', 58370) -2025-09-20 13:59:04,680 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0aa6cae425b69a43ffb4ce182504187f8fe058d1d824a0db87d8da60.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 19:27:33,287 - INFO - Connection accepted from ('127.0.0.1', 39684) -2025-09-20 19:27:33,287 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c6be8663260e1ef89c8f8babd9cc88aee203e1ccc21efc12a664a17e.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 19:34:13,540 - INFO - Connection accepted from ('127.0.0.1', 48598) -2025-09-20 19:34:13,540 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8c735abb49a84cdc27e493aa0a1de4668468f0360b38163f6cce10e9.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 19:40:18,661 - INFO - Connection accepted from ('127.0.0.1', 41122) -2025-09-20 19:40:18,662 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6fe003eeeb7fffe1cad629a6fd301c8a3f0fc72ccb9d80ac91c321b5.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 19:42:05,920 - INFO - Connection accepted from ('127.0.0.1', 50350) -2025-09-20 19:42:05,920 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f986602ae4eae69125005e80d6cfd57ee0aa5e49b7546f305bd43d0f.PubTator"} -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 11, in - from gliner import GLiNER -ModuleNotFoundError: No module named 'gliner' - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 19:52:50,539 - INFO - Connection accepted from ('127.0.0.1', 44068) -2025-09-20 19:52:50,540 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ccf3fe74cbf3412eac68934089e74cfed41393a1d73a16a2c7b9b563.PubTator"} -2025-09-20 19:58:05,149 - INFO - Connection accepted from ('127.0.0.1', 33012) -2025-09-20 19:58:05,150 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "364846871a1bfc47c37ef0668bfdcedd4051a92d8605473707d5dea4.PubTator"} -2025-09-20 20:01:45,490 - INFO - Connection accepted from ('127.0.0.1', 38822) -2025-09-20 20:01:45,491 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5526e0ea6b75a03edb15c77612c552c010ae4ac39b2f517c79314bf3.PubTator"} -2025-09-20 20:09:36,481 - INFO - Connection accepted from ('127.0.0.1', 39248) -2025-09-20 20:09:36,481 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "414a706897e2271ce0fc7402ffa424524ea74f836be8370fa2f2de53.PubTator"} -2025-09-20 20:15:59,729 - INFO - Connection accepted from ('127.0.0.1', 54476) -2025-09-20 20:15:59,729 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d6e2c59d0a00ca9c0ce5573ba382ed3ff4eb2b181ac52895f5e5d050.PubTator"} -2025-09-20 20:19:57,921 - INFO - Connection accepted from ('127.0.0.1', 51110) -2025-09-20 20:19:57,921 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f18ed1cea6745bcd04a51701e33f2a35a3fad218084e6c44d18caf1f.PubTator"} -2025-09-20 20:25:14,149 - INFO - Connection accepted from ('127.0.0.1', 59440) -2025-09-20 20:25:14,150 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "48f4afda33e3a0dba0b51e8f6294e7802eabddfcec1fe83dc10c46ef.PubTator"} -2025-09-20 20:31:30,940 - INFO - Connection accepted from ('127.0.0.1', 53038) -2025-09-20 20:31:30,940 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c12699693e0dd97c1c5eff3691b27cd5118208103c687fbf4c7a68cf.PubTator"} -2025-09-20 20:36:13,225 - INFO - Connection accepted from ('127.0.0.1', 60828) -2025-09-20 20:36:13,225 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3ea82e6b6dccf3779203d6b703b7d4883f0d8a1e0501142355c0b38c.PubTator"} -2025-09-20 20:42:21,090 - INFO - Connection accepted from ('127.0.0.1', 47968) -2025-09-20 20:42:21,090 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a964cd175dac4e06700e88066ac00e70d50c40df1878990b057d563f.PubTator"} -2025-09-20 20:48:51,044 - INFO - Connection accepted from ('127.0.0.1', 37378) -2025-09-20 20:48:51,044 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1b95ac7132602fc3e0c5b96e3d3cda3273992835489148e18020ffa7.PubTator"} -2025-09-20 20:53:36,344 - INFO - Connection accepted from ('127.0.0.1', 43014) -2025-09-20 20:53:36,344 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dcd6169502e10362c1c1010cec7f252738ec760514552f3b6649ef1a.PubTator"} -2025-09-20 20:58:19,028 - INFO - Connection accepted from ('127.0.0.1', 58452) -2025-09-20 20:58:19,028 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b647426d42c8dcb49ce726d70a3870dc7660632b034165ee92395386.PubTator"} -2025-09-20 21:02:24,195 - INFO - Connection accepted from ('127.0.0.1', 58742) -2025-09-20 21:02:24,196 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c9806fad79b8ea9f2a61cd9abf63c318c4864935b5f1367bf1f06b3d.PubTator"} -2025-09-20 21:08:27,474 - INFO - Connection accepted from ('127.0.0.1', 49180) -2025-09-20 21:08:27,474 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "99f37ba35f157d8da36d84673a5897fce2fbfaaee81d6e344b4e027f.PubTator"} -2025-09-20 21:13:21,501 - INFO - Connection accepted from ('127.0.0.1', 56684) -2025-09-20 21:13:21,502 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "db62c74dff398a892a67bcd133e368604da615792094fdb3fbf6b93a.PubTator"} -2025-09-20 21:19:12,713 - INFO - Connection accepted from ('127.0.0.1', 43024) -2025-09-20 21:19:12,713 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "44da7d4b752dac584317e7a454d3ca6e9662793e6a722addbb7701fb.PubTator"} -2025-09-20 21:23:58,245 - INFO - Connection accepted from ('127.0.0.1', 51764) -2025-09-20 21:23:58,246 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dca7aea6473dcdddbb60cea66c7b58be97882a9e64a9863b43084ba2.PubTator"} -2025-09-20 21:28:16,499 - INFO - Connection accepted from ('127.0.0.1', 34168) -2025-09-20 21:28:16,500 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6248af82794d424bec6b9f64f960431a4de0a76b6dc4e0815e613cb5.PubTator"} -2025-09-20 21:32:05,127 - INFO - Connection accepted from ('127.0.0.1', 41326) -2025-09-20 21:32:05,127 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6cec604f57b112c02ddc4425e2d8ce899f6b0d47181b05e7f41ed403.PubTator"} -2025-09-20 21:37:11,603 - INFO - Connection accepted from ('127.0.0.1', 51970) -2025-09-20 21:37:11,603 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9a57928bc1f6300f27f21a99ff9d04340191533bf0eedb85aa9699a6.PubTator"} -2025-09-20 21:40:29,485 - INFO - Connection accepted from ('127.0.0.1', 40074) -2025-09-20 21:40:29,485 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "97594acaabc0e717744ce5533a66132d675227c616580a08e1823144.PubTator"} -2025-09-20 21:46:18,775 - INFO - Connection accepted from ('127.0.0.1', 54694) -2025-09-20 21:46:18,775 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "057d34521cf4521ea9a86cf47dfa2313dc1bf94f9421e0ad5b305836.PubTator"} -2025-09-20 21:51:43,245 - INFO - Connection accepted from ('127.0.0.1', 54366) -2025-09-20 21:51:43,245 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ca3465210e4b9ff5a7e837e7f37c8d3e2d57e6cb1d8382f58e94c5f0.PubTator"} -2025-09-20 21:59:24,068 - INFO - Connection accepted from ('127.0.0.1', 40282) -2025-09-20 21:59:24,068 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "053ef3afacc077adb727f73eff6472652d88b18084391d46cdf5e355.PubTator"} -2025-09-20 22:02:32,779 - INFO - Connection accepted from ('127.0.0.1', 59132) -2025-09-20 22:02:32,779 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "47dda50da12e378d0215d88d46534fed7c941f2372b66fa9b9f42ec6.PubTator"} -2025-09-20 22:14:17,329 - INFO - Connection accepted from ('127.0.0.1', 33496) -2025-09-20 22:14:17,329 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "17721d7cd3b352cef603c5cbf367cc012caeb03fb9209cb9df09fa5b.PubTator"} -2025-09-20 22:19:30,572 - INFO - Connection accepted from ('127.0.0.1', 52440) -2025-09-20 22:19:30,572 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dcfc294e7eeaeaaca63459a31a54eb18ef80592da6c2f3da68c8e627.PubTator"} -2025-09-20 22:26:09,964 - INFO - Connection accepted from ('127.0.0.1', 60346) -2025-09-20 22:26:09,965 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "19b92d2279c74f644a73f890d679b6b6dde5826d8a79e0ad7f11b317.PubTator"} -2025-09-20 22:31:41,162 - INFO - Connection accepted from ('127.0.0.1', 39708) -2025-09-20 22:31:41,162 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c6a55f186900420e5b87229d7c70f0b7c16ac7de7ed20fc5bd30cceb.PubTator"} -2025-09-20 22:36:26,378 - INFO - Connection accepted from ('127.0.0.1', 60728) -2025-09-20 22:36:26,378 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "549debc385d0613e6bbee78178f81d9050199c694ad902d76b80f0c5.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-22 09:20:28,942 - INFO - Connection accepted from ('127.0.0.1', 52580) -2025-09-22 09:20:28,942 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a3085b94d5613f1b07a209e1b219453c9711502c21e341272f34e306.PubTator"} -2025-09-22 09:24:36,681 - INFO - Connection accepted from ('127.0.0.1', 37944) -2025-09-22 09:24:36,682 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "98f03a2ebaea961d9fcbef05edf45776187801124de4d26fa6d7601b.PubTator"} -2025-09-22 09:29:06,838 - INFO - Connection accepted from ('127.0.0.1', 56058) -2025-09-22 09:29:06,839 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3c20df9d45a6a4dfdba22b57999c1ce6e8cd640a33392f43f89907d7.PubTator"} -2025-09-22 09:34:47,530 - INFO - Connection accepted from ('127.0.0.1', 54368) -2025-09-22 09:34:47,530 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "697d6cfef55297954433d686aa973938cd9d6bbe962d91a054ca026f.PubTator"} -2025-09-22 09:39:33,214 - INFO - Connection accepted from ('127.0.0.1', 45798) -2025-09-22 09:39:33,215 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d13dc8f2c5df5c29826479db64314b2ec153ff42817f87535872e8c6.PubTator"} -2025-09-22 09:44:48,860 - INFO - Connection accepted from ('127.0.0.1', 33874) -2025-09-22 09:44:48,860 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4c69017b22f199bbcc4c8652d61609fdbc2b616ed424ea21f4a5dfc4.PubTator"} -2025-09-22 09:50:04,875 - INFO - Connection accepted from ('127.0.0.1', 56048) -2025-09-22 09:50:04,876 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d192c6f786324a1b5860bfaaf62de5c26487c7434e65a4b4a4861c32.PubTator"} -2025-09-22 09:56:43,492 - INFO - Connection accepted from ('127.0.0.1', 54250) -2025-09-22 09:56:43,492 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c90ceb346679da90befb23e2e1bdaea6bb8c294d3b5108e56337e5ab.PubTator"} -2025-09-22 10:00:51,263 - INFO - Connection accepted from ('127.0.0.1', 60082) -2025-09-22 10:00:51,263 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ff37f44607a04fadbd76c41201c8641c21f662349590ef517cbd7630.PubTator"} -2025-09-22 10:05:38,620 - INFO - Connection accepted from ('127.0.0.1', 42238) -2025-09-22 10:05:38,620 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7106e927ebd56e43712f3d837a1bd02f2282ef07a6dc07fa60522ea9.PubTator"} -2025-09-22 10:09:17,825 - INFO - Connection accepted from ('127.0.0.1', 56758) -2025-09-22 10:09:17,825 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ee53242f93025b923ccb1a8a5d45d2c46a9c323dccac86dc1446a8fb.PubTator"} -2025-09-22 10:12:05,708 - INFO - Connection accepted from ('127.0.0.1', 42806) -2025-09-22 10:12:05,709 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5adc68b4ceb390219c10852b40bbae07358ded0fb0393a9a23d51df4.PubTator"} -2025-09-22 10:16:20,749 - INFO - Connection accepted from ('127.0.0.1', 51350) -2025-09-22 10:16:20,749 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "321554cb35627a265140a67977c105cf4bf95989f2b39002f80b7d09.PubTator"} -2025-09-22 10:20:44,417 - INFO - Connection accepted from ('127.0.0.1', 45332) -2025-09-22 10:20:44,417 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ee26873dc0dd8eb531884dfaafaa5c33f9cc18359a9ef8e9c9bd585e.PubTator"} -2025-09-22 10:25:40,901 - INFO - Connection accepted from ('127.0.0.1', 55182) -2025-09-22 10:25:40,901 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1ddf3cd26852eb961f7b983b5f5cc330bf3396ef5f771ab80804ec2d.PubTator"} -2025-09-22 10:29:52,177 - INFO - Connection accepted from ('127.0.0.1', 42714) -2025-09-22 10:29:52,177 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "420c08dfddbc9341c660761dd3cb935d66abf03c849f59a17a1b2f00.PubTator"} -2025-09-22 10:33:37,681 - INFO - Connection accepted from ('127.0.0.1', 45292) -2025-09-22 10:33:37,681 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9584b2b865f419ee57238a86e48eeca73e5ab46c71488c13457d0826.PubTator"} -2025-09-22 10:37:58,748 - INFO - Connection accepted from ('127.0.0.1', 39200) -2025-09-22 10:37:58,748 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7c3013bef8cc4fbd4735f380a1e487adc887a0427e4d2c6a103b68a7.PubTator"} -2025-09-22 10:43:49,017 - INFO - Connection accepted from ('127.0.0.1', 53898) -2025-09-22 10:43:49,017 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "96cd8c79dd63c0deaf209db0ee8a091dc1ead54c5ccf9dd0ebc999e8.PubTator"} -2025-09-22 10:47:49,848 - INFO - Connection accepted from ('127.0.0.1', 39040) -2025-09-22 10:47:49,848 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9339881e9900411c4d873f6213abaeb4d92f832d9b8b767da148510e.PubTator"} -2025-09-22 10:51:08,478 - INFO - Connection accepted from ('127.0.0.1', 55034) -2025-09-22 10:51:08,479 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f28f4e6b624cb1cd666502ce54a13b6b8c2af5db39720d67ca87b1ed.PubTator"} -2025-09-22 10:56:47,739 - INFO - Connection accepted from ('127.0.0.1', 41026) -2025-09-22 10:56:47,740 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b43c8a02ed8b79429e379c3255b54f18a2c085afb949fce8eb29ab6e.PubTator"} -2025-09-22 11:01:20,517 - INFO - Connection accepted from ('127.0.0.1', 45690) -2025-09-22 11:01:20,517 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9b343a7d92f283d22032480ea0246ac6abb3ddccc40fdbc2a11e382f.PubTator"} -2025-09-22 11:05:10,756 - INFO - Connection accepted from ('127.0.0.1', 34796) -2025-09-22 11:05:10,756 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "54c134353fcb4d9a8f8f9baaa910adc1a61a64a187d7583bbaee65a6.PubTator"} -2025-09-22 11:08:53,992 - INFO - Connection accepted from ('127.0.0.1', 51348) -2025-09-22 11:08:53,992 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7c6668670f0e2a52c95b822c1f3355e1bddd7a9606a1eee366a4079c.PubTator"} -2025-09-22 11:12:18,412 - INFO - Connection accepted from ('127.0.0.1', 55478) -2025-09-22 11:12:18,412 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a6ceb599a8e4915c9e3a7175f3232c9414c7a97b824fa0723869c195.PubTator"} -2025-09-22 11:16:40,869 - INFO - Connection accepted from ('127.0.0.1', 43398) -2025-09-22 11:16:40,869 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "12aad532e1cf987ab12a9fe725460d313ab50565f21fe3d89fbb6206.PubTator"} -2025-09-22 11:21:40,369 - INFO - Connection accepted from ('127.0.0.1', 35106) -2025-09-22 11:21:40,369 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5f9ea548ac21a5f04cd59501d0d4b9aac07d1c46202ce9142ac13336.PubTator"} -2025-09-22 11:28:37,776 - INFO - Connection accepted from ('127.0.0.1', 53346) -2025-09-22 11:28:37,776 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3c082197a7e688d2b89b66848630377920a88c43ba504abd0d9c12a0.PubTator"} -2025-09-22 11:33:46,360 - INFO - Connection accepted from ('127.0.0.1', 56888) -2025-09-22 11:33:46,361 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b82c53d9860ebeea96151558905da443b0169fd5883cabc6c97f1846.PubTator"} -2025-09-22 11:38:22,405 - INFO - Connection accepted from ('127.0.0.1', 49108) -2025-09-22 11:38:22,405 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "fe46196692846700425810e6484da8fcaf8d9b79a5ddba8354bb5554.PubTator"} -2025-09-22 11:43:30,373 - INFO - Connection accepted from ('127.0.0.1', 38366) -2025-09-22 11:43:30,373 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a410c29544a8877e5a456e02c65defd03c1bd147e9a2e52a8db5d4ff.PubTator"} -2025-09-22 11:48:36,869 - INFO - Connection accepted from ('127.0.0.1', 40500) -2025-09-22 11:48:36,869 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5e0eb7159e765aa47cc95222edfb8976b684f39515d3f15a5e43ce6a.PubTator"} -2025-09-22 11:54:14,531 - INFO - Connection accepted from ('127.0.0.1', 36608) -2025-09-22 11:54:14,531 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9a4ba134329e77454bbc25ca29fd15a12f60753b0086f68008549ac7.PubTator"} -2025-09-22 11:59:11,473 - INFO - Connection accepted from ('127.0.0.1', 60910) -2025-09-22 11:59:11,473 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "392b09925e68cea7f78d966da6747b9ba21f9e484e48037726fb2444.PubTator"} -2025-09-22 12:04:27,846 - INFO - Connection accepted from ('127.0.0.1', 36282) -2025-09-22 12:04:27,846 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c1731d1091f67dbee9a845c6cfd0e6ec6392963399dd3dc2995615e6.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-22 14:49:00,940 - INFO - Connection accepted from ('127.0.0.1', 56034) -2025-09-22 14:49:00,940 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "719c67ddef08cc31bbf0b3bd360e1c9f066f9308da92a758b3e84997.PubTator"} -2025-09-22 14:54:43,076 - INFO - Connection accepted from ('127.0.0.1', 52550) -2025-09-22 14:54:43,077 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4736a25cc7c80645c89f5895d8eef71d041bc6463b134a00db25c734.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-22 16:53:07,480 - INFO - Connection accepted from ('127.0.0.1', 48032) -2025-09-22 16:53:07,480 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3eb0b5c5d703a4382fa2ce8d7fe9750dcc75089bb97e39846de22f95.PubTator"} -2025-09-22 16:58:49,569 - INFO - Connection accepted from ('127.0.0.1', 48716) -2025-09-22 16:58:49,569 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b741dc7664d78bfa07ef4acbc16353fdc4f49444d0c46dbfe9e60011.PubTator"} -2025-09-22 17:03:32,185 - INFO - Connection accepted from ('127.0.0.1', 41474) -2025-09-22 17:03:32,185 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4c6b1ed6d40419a6777a1c09dda6604a8bd7f673f133372ea385ae1f.PubTator"} -2025-09-22 17:07:04,908 - INFO - Connection accepted from ('127.0.0.1', 42392) -2025-09-22 17:07:04,908 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e75f16effdc8c5e103b7da0da10a521d7c07a1a2f95ac538e947d659.PubTator"} -2025-09-22 17:13:13,655 - INFO - Connection accepted from ('127.0.0.1', 40486) -2025-09-22 17:13:13,655 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a23ec63602fc8a0bceca6220510f79a2cc398a3f14c2654c3f503089.PubTator"} -2025-09-22 17:18:59,342 - INFO - Connection accepted from ('127.0.0.1', 38378) -2025-09-22 17:18:59,343 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "937d97047cb7e15e5513fb28e213bc24a40bba42b5f2e3cb9229ab60.PubTator"} -2025-09-22 17:22:47,576 - INFO - Connection accepted from ('127.0.0.1', 60202) -2025-09-22 17:22:47,576 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a13176ec332a2f02b7843c7763a8caec477b76c3ec000e98fa4e0e1e.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-23 09:03:15,683 - INFO - Connection accepted from ('127.0.0.1', 53954) -2025-09-23 09:03:15,683 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "327c9dd938596b405c137d4ea57679fc7c484514e1e57d9102b29c2f.PubTator"} -2025-09-23 09:09:01,754 - INFO - Connection accepted from ('127.0.0.1', 47288) -2025-09-23 09:09:01,755 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d5b1c64ccfd55e02594d3053e0d083ce142e3f039d5f6c0845f65c35.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-23 09:25:10,249 - INFO - Connection accepted from ('127.0.0.1', 54668) -2025-09-23 09:25:10,249 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bca13b1a769f13befae32f00955a8c1b7214e01a06ae51c8a4ca2900.PubTator"} -2025-09-23 09:30:34,087 - INFO - Connection accepted from ('127.0.0.1', 60922) -2025-09-23 09:30:34,088 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "80c311dd450f146257afafaf4170756321ec90c748c8431599c2d7cd.PubTator"} -2025-09-23 09:34:17,087 - INFO - Connection accepted from ('127.0.0.1', 54236) -2025-09-23 09:34:17,087 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c9e7f4025719c7513636dc5769e66d1bcc4f3467f8cf6882affa4e5f.PubTator"} -2025-09-23 09:40:36,919 - INFO - Connection accepted from ('127.0.0.1', 48920) -2025-09-23 09:40:36,919 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0e27188b3c7854f411fd03db6d93593fcce49d37b39c91478db74d7c.PubTator"} -2025-09-23 09:46:36,947 - INFO - Connection accepted from ('127.0.0.1', 41316) -2025-09-23 09:46:36,947 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "43d3288c465eace42f8d2e821bfa62fade9140655e2e3fdc352abaaf.PubTator"} -2025-09-23 09:50:24,515 - INFO - Connection accepted from ('127.0.0.1', 35960) -2025-09-23 09:50:24,516 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ae35bffac3b726e5d6d0066093df0313d9c293c293856eb28e315b7a.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-24 10:06:29,881 - INFO - Connection accepted from ('127.0.0.1', 41096) -2025-09-24 10:06:29,881 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1420ef0a237c759a2739c98c4bf4aa2f0660f479eafe10c6fd4f8922.PubTator"} -2025-09-24 10:10:38,671 - INFO - Connection accepted from ('127.0.0.1', 38974) -2025-09-24 10:10:38,671 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "fd94a48ff9d719c02bd3c37565a4a35cdbac18256382cad66884324c.PubTator"} -2025-09-24 10:14:13,418 - INFO - Connection accepted from ('127.0.0.1', 37396) -2025-09-24 10:14:13,418 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "70c43f9636cb7b0c2e58e38c3352e696cbc1ea5f9f8ec26a1f9e7cdb.PubTator"} -2025-09-24 10:17:12,834 - INFO - Connection accepted from ('127.0.0.1', 48140) -2025-09-24 10:17:12,834 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ff5ec87c3a0f7295127c0b50e4dcd9412579a880e4901f25466824f0.PubTator"} -2025-09-24 10:21:35,380 - INFO - Connection accepted from ('127.0.0.1', 50230) -2025-09-24 10:21:35,381 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e0bcdc9db6eafd0fb63c18bb2e0208b7869244d7bc6fb827427682a3.PubTator"} -2025-09-24 10:25:23,540 - INFO - Connection accepted from ('127.0.0.1', 35618) -2025-09-24 10:25:23,540 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "acfe4a2c63aa4a123f49e102bce54b28e7305d93846cf924a062757c.PubTator"} -2025-09-24 10:28:14,424 - INFO - Connection accepted from ('127.0.0.1', 55204) -2025-09-24 10:28:14,424 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bbb4678f5ba7c996d3113d5f581a0813c1800dff0e08cfb7cc473abe.PubTator"} -2025-09-24 10:31:16,207 - INFO - Connection accepted from ('127.0.0.1', 58404) -2025-09-24 10:31:16,207 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b6d1ac149f65608356b5feaad1090070c97047fd395854ee9a121e65.PubTator"} -2025-09-24 10:35:50,053 - INFO - Connection accepted from ('127.0.0.1', 53486) -2025-09-24 10:35:50,053 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ca19d75bcbcec421beee662261485eac8849c9f724e5aecbb3c1a4bc.PubTator"} -2025-09-24 10:39:03,321 - INFO - Connection accepted from ('127.0.0.1', 42772) -2025-09-24 10:39:03,321 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8026ffd52bab97cfc1a296544e009e8dd8695f24add18b6159d20a77.PubTator"} -2025-09-25 10:17:40,685 - INFO - Connection accepted from ('127.0.0.1', 55844) -2025-09-25 10:17:40,685 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-25 10:18:57,323 - INFO - Connection accepted from ('127.0.0.1', 42184) -2025-09-25 10:18:57,323 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "eb19953861f5b6f6d1aa4f357f2ca273518d81d4dc6d1b4434e2feb6.PubTator"} -2025-09-25 10:23:04,686 - INFO - Connection accepted from ('127.0.0.1', 57342) -2025-09-25 10:23:04,686 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cadb18b4259610e726ae682e4f7fe3a922aa2780c1ad27b9160fdd59.PubTator"} -2025-09-25 10:26:38,724 - INFO - Connection accepted from ('127.0.0.1', 56370) -2025-09-25 10:26:38,724 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c81d864090193109077d92ebb48e7f88d1fef10d830ed1cad0c3fdf6.PubTator"} -2025-09-25 10:29:45,272 - INFO - Connection accepted from ('127.0.0.1', 47858) -2025-09-25 10:29:45,272 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3f2af23f1531322bde91a95bfc32fcaf813c56cad6fe23fcae807c62.PubTator"} -2025-09-25 10:33:33,070 - INFO - Connection accepted from ('127.0.0.1', 40060) -2025-09-25 10:33:33,070 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8085539581cafb29416e026946930ff1d0e87d625d12ead1c682e40b.PubTator"} -2025-09-25 10:37:13,698 - INFO - Connection accepted from ('127.0.0.1', 43114) -2025-09-25 10:37:13,698 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a08afbaa186c08be34702f0eec1e79b67130325a7c98869e44405715.PubTator"} -2025-09-25 10:40:02,128 - INFO - Connection accepted from ('127.0.0.1', 34722) -2025-09-25 10:40:02,128 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "baa7796c33bcdb35ccac6e2e2a90018e23e817f798357d01021a4815.PubTator"} -2025-09-25 10:42:51,153 - INFO - Connection accepted from ('127.0.0.1', 60626) -2025-09-25 10:42:51,154 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d529ee87ef1deb4b563867af119c31d025df2f5c0620daeb8b6507b2.PubTator"} -2025-09-25 10:47:36,559 - INFO - Connection accepted from ('127.0.0.1', 52324) -2025-09-25 10:47:36,559 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d0ab29c312375239293c2090efa54ef0a97ef0f4da46b547f3b0965f.PubTator"} -2025-09-25 10:50:45,598 - INFO - Connection accepted from ('127.0.0.1', 53764) -2025-09-25 10:50:45,598 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "91da54bc3dffa2c4a75bb100ede5515c4a8054907228d6b99a3545bc.PubTator"} -2025-09-25 10:54:07,523 - INFO - Connection accepted from ('127.0.0.1', 57774) -2025-09-25 10:54:07,523 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8d85d7de379640b3b1a8781f94586ff546c113f47eee3877461d2110.PubTator"} -2025-09-25 10:58:40,455 - INFO - Connection accepted from ('127.0.0.1', 53066) -2025-09-25 10:58:40,456 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "674ba3a99dcc2dac46c7adac623d6860156e8e7d561a0046b5acdaa6.PubTator"} -2025-09-25 11:02:15,851 - INFO - Connection accepted from ('127.0.0.1', 35836) -2025-09-25 11:02:15,851 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9474dd20ece3e1487b32e0df6dff380479753e0ebea06e392d082f75.PubTator"} -2025-09-25 11:05:44,861 - INFO - Connection accepted from ('127.0.0.1', 36280) -2025-09-25 11:05:44,861 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "26a00d62b705fb245b3596bc0ce6d4e3c497151032ab313de2863823.PubTator"} -2025-09-25 11:09:02,158 - INFO - Connection accepted from ('127.0.0.1', 35212) -2025-09-25 11:09:02,158 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "758ef39cc60138c66288e7850d8f7c74422bcf2b5df8ef708fa057ef.PubTator"} -2025-09-25 11:13:44,056 - INFO - Connection accepted from ('127.0.0.1', 42572) -2025-09-25 11:13:44,057 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "27a9d917884cad0159eacbba51169ff8cf37e7d7358a50ed3613a0ea.PubTator"} -2025-09-25 11:17:11,708 - INFO - Connection accepted from ('127.0.0.1', 33202) -2025-09-25 11:17:11,708 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6bdb0453de11f13741830b2b80b65cf69f26c5554dc27424488631dc.PubTator"} -2025-09-25 11:21:09,664 - INFO - Connection accepted from ('127.0.0.1', 34608) -2025-09-25 11:21:09,664 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d715f13c5b10f1a7bfb758dd9e911df816ab683560d63a7a3eac30f6.PubTator"} -2025-09-25 11:24:46,125 - INFO - Connection accepted from ('127.0.0.1', 49528) -2025-09-25 11:24:46,125 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a5e505dc0c39f4440971ca79009792fe6319596174edcc8e9caf0b8b.PubTator"} -2025-09-25 11:27:10,121 - INFO - Connection accepted from ('127.0.0.1', 42020) -2025-09-25 11:27:10,121 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "648007db092fb23d67c1eea3f95328cd25af752dea6b22ae6f18bfe0.PubTator"} -2025-09-25 11:29:14,744 - INFO - Connection accepted from ('127.0.0.1', 43538) -2025-09-25 11:29:14,744 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "afe00e9a65cdb73d1b9ffb9c911b0868785457ccc8e4025f38cfd913.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-25 11:32:00,080 - INFO - Connection accepted from ('127.0.0.1', 54586) -2025-09-25 11:32:00,080 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b610acc53bb3e20eab35d52629cd4ede3a3d60eff2ea196d83059fa8.PubTator"} -2025-09-25 11:33:44,776 - INFO - Connection accepted from ('127.0.0.1', 42374) -2025-09-25 11:33:44,776 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cb63f2131b5b858a1a575c30fa9248be301f46d14e9bc5fb8ba027fd.PubTator"} -2025-09-25 11:35:53,418 - INFO - Connection accepted from ('127.0.0.1', 53348) -2025-09-25 11:35:53,419 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c7b85706f55829e90abe9abebdd0fe59d65ac4f71bf8e1be44060905.PubTator"} -2025-09-25 11:39:39,197 - INFO - Connection accepted from ('127.0.0.1', 54242) -2025-09-25 11:39:39,197 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cdb006c53853e7ad66fbf3dcd1c10d199de009050ce1b039d7982697.PubTator"} -2025-09-25 11:43:11,230 - INFO - Connection accepted from ('127.0.0.1', 54512) -2025-09-25 11:43:11,231 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1028ef1ed1109621c194239b1cd9930726de5f7054fc008e699894c1.PubTator"} -2025-09-25 11:48:42,009 - INFO - Connection accepted from ('127.0.0.1', 57772) -2025-09-25 11:48:42,009 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d0533299c877cc0db3a726c046a7b9c0077737a90779c5e9ca9c4cc5.PubTator"} -2025-09-25 11:50:20,539 - INFO - Connection accepted from ('127.0.0.1', 42240) -2025-09-25 11:50:20,539 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7f855d3f4f3f78c1087fbfd0c7a2a3954404ed2d0a084b076b532d89.PubTator"} -2025-09-25 11:53:53,503 - INFO - Connection accepted from ('127.0.0.1', 37172) -2025-09-25 11:53:53,503 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b1bdb26a089df24cbf20c47719c4426c15be0a49f727e37f7fc6b4e5.PubTator"} -2025-09-25 11:57:09,920 - INFO - Connection accepted from ('127.0.0.1', 43208) -2025-09-25 11:57:09,920 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7461561dab8deef3d9aab5ba7c45f803c92b3bcb51d4b48e4da39c77.PubTator"} -2025-09-25 12:00:47,369 - INFO - Connection accepted from ('127.0.0.1', 41596) -2025-09-25 12:00:47,369 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2927384d80663bb86c9096bc589f1d45289f9ffac6daa434be0c2092.PubTator"} -2025-09-25 12:05:11,793 - INFO - Connection accepted from ('127.0.0.1', 50886) -2025-09-25 12:05:11,794 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "66f4b8c961bef8b9773e57dfc7abf0cdb6ec9a70430f2ca91f43d4c2.PubTator"} -2025-09-25 12:08:12,017 - INFO - Connection accepted from ('127.0.0.1', 35042) -2025-09-25 12:08:12,017 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "836b38ce9f14af52d2810a986bd46bdcc23be119ab117c27c7bcf943.PubTator"} -2025-09-25 12:10:33,106 - INFO - Connection accepted from ('127.0.0.1', 50948) -2025-09-25 12:10:33,106 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0281529e4fd29553bf6e971da91304d8a9f404ec41aa5e5abdc85640.PubTator"} -2025-09-25 12:13:38,240 - INFO - Connection accepted from ('127.0.0.1', 33836) -2025-09-25 12:13:38,241 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "80fe0918ed787d678c381f108936617276a3f0c7d84263966791962f.PubTator"} -2025-09-25 12:17:01,734 - INFO - Connection accepted from ('127.0.0.1', 34914) -2025-09-25 12:17:01,734 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "11df6b5b12744da37f20133d14c56c50954ad7d4979be356771843c7.PubTator"} -2025-09-25 12:19:13,090 - INFO - Connection accepted from ('127.0.0.1', 54020) -2025-09-25 12:19:13,090 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7e12000e716c7388d82bf510877edfa4053b7788c69b14c0d8d59d6f.PubTator"} -2025-09-25 12:22:33,249 - INFO - Connection accepted from ('127.0.0.1', 33398) -2025-09-25 12:22:33,249 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cf527edae4f230e16cc609598128c4d40e2cbb0f5dfcaf2b92c60acb.PubTator"} -2025-09-25 12:26:08,333 - INFO - Connection accepted from ('127.0.0.1', 41968) -2025-09-25 12:26:08,333 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9c886f5efd40493a9237aaeae50158cc686c36a179299b30d2fab21a.PubTator"} -2025-09-25 12:28:54,554 - INFO - Connection accepted from ('127.0.0.1', 37230) -2025-09-25 12:28:54,555 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "37ca0bfe8b236abd0738ddd73c7e1b471ca218809103c917e12b6a9c.PubTator"} -2025-09-25 12:31:56,942 - INFO - Connection accepted from ('127.0.0.1', 37828) -2025-09-25 12:31:56,942 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a8cc98b8d9f662efe9a460c2a8a69a49ce11621bc8e07c6dc8c137c3.PubTator"} -2025-09-25 12:35:16,845 - INFO - Connection accepted from ('127.0.0.1', 52602) -2025-09-25 12:35:16,846 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "99a52718b2b70e3baf3599c97342e8765d38c120d05b5c2b42899c80.PubTator"} -2025-09-25 12:38:05,113 - INFO - Connection accepted from ('127.0.0.1', 46406) -2025-09-25 12:38:05,113 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1e9f90f8eb4f4a77b33093fe2e93874f25cd1941fcadb9b8d0338a5e.PubTator"} -2025-09-25 12:40:25,174 - INFO - Connection accepted from ('127.0.0.1', 54352) -2025-09-25 12:40:25,174 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dc812159259aa6f682f667ad8eca95ae51eb6aabae205db2a3d06c0f.PubTator"} -2025-09-25 12:42:35,135 - INFO - Connection accepted from ('127.0.0.1', 42698) -2025-09-25 12:42:35,136 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "16c5e5d3ca95387e9b4f0e059ee2cd24d0041ccb4f8876426d4d312e.PubTator"} -2025-09-25 12:44:09,624 - INFO - Connection accepted from ('127.0.0.1', 34158) -2025-09-25 12:44:09,624 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0a22a91d43dab42b3d700708248a0603349e48ee53236848b7584930.PubTator"} -2025-09-25 12:47:05,316 - INFO - Connection accepted from ('127.0.0.1', 47118) -2025-09-25 12:47:05,316 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "97fa148e788eb2e0467c7205d067fa250aa7654af359b322015c7555.PubTator"} -2025-09-25 12:50:13,862 - INFO - Connection accepted from ('127.0.0.1', 56304) -2025-09-25 12:50:13,862 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d93e4c6c35f22d46f426a6b77cf102987b0312d0a3fb44fdb7d3f429.PubTator"} -2025-09-25 12:53:50,758 - INFO - Connection accepted from ('127.0.0.1', 38680) -2025-09-25 12:53:50,759 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "63ca51a7d34213e26976081c922792475eb0abf7382735703b097e59.PubTator"} -2025-09-25 12:56:43,267 - INFO - Connection accepted from ('127.0.0.1', 37816) -2025-09-25 12:56:43,267 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bfa8808dfc82d3e5c0c240a50a7034b4e7be1998e1a5ea3cfc0af237.PubTator"} -2025-09-25 12:58:33,290 - INFO - Connection accepted from ('127.0.0.1', 60584) -2025-09-25 12:58:33,291 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ac245204cda743653e71c16aedddca12d65369b7d9660d3ea594ebc4.PubTator"} -2025-09-25 13:01:50,494 - INFO - Connection accepted from ('127.0.0.1', 54940) -2025-09-25 13:01:50,494 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b767578bec59163524f54d8e757d5443b1ff13d4a97215bd3bc5efec.PubTator"} -2025-09-25 13:04:56,372 - INFO - Connection accepted from ('127.0.0.1', 58004) -2025-09-25 13:04:56,372 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f78416eb33cd0fb83a8fc4ade26ae6d729c265c99eaf15027a27dcbb.PubTator"} -2025-09-25 13:07:37,413 - INFO - Connection accepted from ('127.0.0.1', 36550) -2025-09-25 13:07:37,414 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cf541e246f95268ecea83ba1df38aa4140141eec06596da2703e0760.PubTator"} -2025-09-25 13:09:22,152 - INFO - Connection accepted from ('127.0.0.1', 40436) -2025-09-25 13:09:22,152 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0c88d1e3422f6a3de274e0e54eda8a9e5ee9de18acd855dbe7b4c609.PubTator"} -2025-09-25 13:12:55,866 - INFO - Connection accepted from ('127.0.0.1', 59008) -2025-09-25 13:12:55,866 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "693631ad5e84c355cc744ec8870c9ad63b77c25b2560a026403f8242.PubTator"} -2025-09-25 13:15:33,450 - INFO - Connection accepted from ('127.0.0.1', 43084) -2025-09-25 13:15:33,450 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f96521adbead876da69411df8cee32d216a59c3963202d5e8d42e28a.PubTator"} -2025-09-25 13:17:47,840 - INFO - Connection accepted from ('127.0.0.1', 59314) -2025-09-25 13:17:47,840 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "09f9a9d2837a9ee1dd3b930967dc402f16c4e5fe51c4c581629a4d17.PubTator"} -2025-09-25 13:19:45,905 - INFO - Connection accepted from ('127.0.0.1', 58616) -2025-09-25 13:19:45,905 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4ca9db0721c66c539cdf434af30a7f9ff81285a1e0f8904c3833f8ea.PubTator"} -2025-09-25 13:28:14,344 - INFO - Connection accepted from ('127.0.0.1', 38476) -2025-09-25 13:28:14,344 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "028edba2fdebaa2930c9807624f08c9a0af839a9219f75dea4231dae.PubTator"} -2025-09-25 13:33:30,643 - INFO - Connection accepted from ('127.0.0.1', 54124) -2025-09-25 13:33:30,643 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6bbd72452f996aa5145570eadbd15f6c6efa471690e3ac355f7c30d9.PubTator"} -2025-09-25 13:39:41,031 - INFO - Connection accepted from ('127.0.0.1', 36570) -2025-09-25 13:39:41,032 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1ed9d3f799cc736bfcee91381404bb0b9613b7fdd280ee76b2543733.PubTator"} -2025-09-25 13:46:53,643 - INFO - Connection accepted from ('127.0.0.1', 50636) -2025-09-25 13:46:53,643 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "758ceffdb35dc66b64141387d0d8caf3bd5b2bbabf4e3544066b7e38.PubTator"} -2025-09-25 13:49:49,678 - INFO - Connection accepted from ('127.0.0.1', 49286) -2025-09-25 13:49:49,678 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "03a9cdd8f43493d2b532d0871fcfb9490f613729792275ff3da94696.PubTator"} -2025-09-25 13:51:43,553 - INFO - Connection accepted from ('127.0.0.1', 36812) -2025-09-25 13:51:43,553 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ef7ffde39deb7270736733dc4636da8b810d8af7c81f23a029c370e6.PubTator"} -2025-09-25 13:54:29,620 - INFO - Connection accepted from ('127.0.0.1', 52474) -2025-09-25 13:54:29,621 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "be3c408eb7c8d0390c254bb4abd8d8d30cbb74704de579db7f5ec316.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-25 14:23:21,778 - INFO - Connection accepted from ('127.0.0.1', 32948) -2025-09-25 14:23:21,778 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3faa09f575f6ff729e877e7fc2f6b04dfbdf0cf36dc562e0153e1b7f.PubTator"} -2025-09-25 14:28:56,363 - INFO - Connection accepted from ('127.0.0.1', 40378) -2025-09-25 14:28:56,363 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1b7e2720810289025fb580fb72acb7ec9f4b6013c400f9cd2a71aa92.PubTator"} -2025-09-25 14:34:19,001 - INFO - Connection accepted from ('127.0.0.1', 38678) -2025-09-25 14:34:19,001 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "adc84f02baadc3f93adda48b8c9fb6644d45641040d43de0bb2c51d2.PubTator"} -2025-09-25 14:38:04,090 - INFO - Connection accepted from ('127.0.0.1', 48344) -2025-09-25 14:38:04,090 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d1b66d37afdd0b4e2a190845321759a63b55997fc29a58e9b7cb9cdc.PubTator"} -2025-09-25 14:44:11,444 - INFO - Connection accepted from ('127.0.0.1', 42810) -2025-09-25 14:44:11,444 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bf496a70d5669cba642c4c4c76d75369a1f22b8f1408b1c57bb30c5f.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-25 17:15:57,650 - INFO - Connection accepted from ('127.0.0.1', 60926) -2025-09-25 17:15:57,651 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3c1b7290dd09d0a5707faa7da03525cc9b06ab056fb4039be9600a4f.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-25 17:21:22,899 - INFO - Connection accepted from ('127.0.0.1', 60060) -2025-09-25 17:21:22,900 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f201c21487f1585d8ea2898424af0ed51cbe637ff2085dec0ab2e82c.PubTator"} -2025-09-25 17:27:01,170 - INFO - Connection accepted from ('127.0.0.1', 43162) -2025-09-25 17:27:01,171 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "79c95ed9b3ccdfb1891308215cbf2df5561cd6be88b091447e1d7967.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 206, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-26 17:33:15,664 - INFO - Connection accepted from ('127.0.0.1', 40828) -2025-09-26 17:33:15,664 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "88e5636b8845355f4bdc4b5cdd9114ca871c1c204ad5ae62c0fc749f.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-26 17:37:13,152 - INFO - Connection accepted from ('127.0.0.1', 51086) -2025-09-26 17:37:13,153 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ff5dd16ba0a85786a1fb175203da80b23bd2161390d870d2506c6e5e.PubTator"} -2025-09-26 17:41:42,537 - INFO - Connection accepted from ('127.0.0.1', 58836) -2025-09-26 17:41:42,537 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7e3f2c39c2fd66e17cb2fb717b3cdefcf372bb713e95144ec6083686.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 206, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-27 11:11:16,229 - INFO - Connection accepted from ('127.0.0.1', 41338) -2025-09-27 11:11:16,230 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0e004494fb1bf34a225727e6b878025b720e123f798c8977aa77bfb8.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-27 11:26:17,215 - INFO - Connection accepted from ('127.0.0.1', 45828) -2025-09-27 11:26:17,215 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9388076fdb8fad740dd87124e802ebb191a28f2c619132012525b0f0.PubTator"} -2025-09-27 11:29:52,921 - INFO - Connection accepted from ('127.0.0.1', 51434) -2025-09-27 11:29:52,921 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ccad25b8532bf9520083aa3053180779852682425be60067eb23dc87.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-27 11:40:26,483 - INFO - Connection accepted from ('127.0.0.1', 50840) -2025-09-27 11:40:26,483 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ec64407fc853fb1277271392c19a237b438498670f984ec801fdaeb6.PubTator"} -2025-09-27 11:46:24,593 - INFO - Connection accepted from ('127.0.0.1', 37822) -2025-09-27 11:46:24,594 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4a9b4079bf1b24e98b7eef04bc7035e11beef89862402eed409d7249.PubTator"} -2025-09-27 11:50:34,831 - INFO - Connection accepted from ('127.0.0.1', 55768) -2025-09-27 11:50:34,831 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ed7237d174b0152e51e05cc6e1b44178fb071dc30e1517107f81b164.PubTator"} -2025-09-27 11:56:05,206 - INFO - Connection accepted from ('127.0.0.1', 34588) -2025-09-27 11:56:05,207 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "aa0417ec60c80db81931be58b68a520cbddf566d885ce7831562f2ce.PubTator"} -2025-09-27 12:02:25,453 - INFO - Connection accepted from ('127.0.0.1', 39086) -2025-09-27 12:02:25,453 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "621fabed39d3c5f16576ac76b4164355e6eb732e79a434e295d8ae44.PubTator"} -2025-09-27 12:07:06,450 - INFO - Connection accepted from ('127.0.0.1', 36250) -2025-09-27 12:07:06,450 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cde4f6863ab9f2c5deb47b2cdf0f851aceb2b3f0635cef8dda017e92.PubTator"} -2025-09-27 12:13:27,766 - INFO - Connection accepted from ('127.0.0.1', 56140) -2025-09-27 12:13:27,767 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "da6e343c942dcd0a7e967b865a023c063d90d33e710a5b7accd1e51a.PubTator"} -2025-09-27 12:19:41,538 - INFO - Connection accepted from ('127.0.0.1', 57178) -2025-09-27 12:19:41,539 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b1aa7179947f5562d61ebad44f4faa1c276b4fe97ce299ec8df896a8.PubTator"} -2025-09-27 12:24:35,183 - INFO - Connection accepted from ('127.0.0.1', 45700) -2025-09-27 12:24:35,183 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1ac0eeb746dd1469b5b5576ae02f6a056d92467aa13eaceb1ca49a28.PubTator"} -2025-09-27 12:29:24,977 - INFO - Connection accepted from ('127.0.0.1', 45180) -2025-09-27 12:29:24,978 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "644de15f2398322340ab63953b652080b517e53457edc348c96e2b08.PubTator"} -2025-09-27 12:33:32,898 - INFO - Connection accepted from ('127.0.0.1', 57884) -2025-09-27 12:33:32,899 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ae9e71de011e72210246bc21fb5e8c8f1b9943b4492af3e970e69ec7.PubTator"} -2025-09-27 12:39:04,799 - INFO - Connection accepted from ('127.0.0.1', 32836) -2025-09-27 12:39:04,800 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9c220164c9184d529c42ef0a79f13b643108fd536916df9a99c9ac4f.PubTator"} -2025-09-27 12:44:02,231 - INFO - Connection accepted from ('127.0.0.1', 49876) -2025-09-27 12:44:02,231 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6a23d54a14f1533367307e71ca0f4cb85e2c221cbb3ce0584b099acc.PubTator"} -2025-09-27 12:49:37,000 - INFO - Connection accepted from ('127.0.0.1', 53676) -2025-09-27 12:49:37,000 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "23278c706400dbb032011f15f4dbf10570230e9ba3c353bacc357ece.PubTator"} -2025-09-27 12:54:24,151 - INFO - Connection accepted from ('127.0.0.1', 59552) -2025-09-27 12:54:24,152 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a98b8d6d4d34da098ab9bce4febb21547e162c561768909258532eb5.PubTator"} -2025-09-27 12:58:22,660 - INFO - Connection accepted from ('127.0.0.1', 35788) -2025-09-27 12:58:22,660 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "947b97a51ca23d0d971a4eef20db68c9b052c2f49f22ae81c0176097.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-28 10:19:48,347 - INFO - Connection accepted from ('127.0.0.1', 45728) -2025-09-28 10:19:48,347 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a146d3102f103ea887a6e1c31e9d974edd2c45ef5e06798a02ac0c52.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-28 10:44:47,766 - INFO - Connection accepted from ('127.0.0.1', 55056) -2025-09-28 10:44:47,766 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d07fd4e984b69f583a11a4f42f97506748df2519299e5bb25f42e9e8.PubTator"} -2025-09-28 10:51:04,101 - INFO - Connection accepted from ('127.0.0.1', 49886) -2025-09-28 10:51:04,102 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "528f10ba30ae86eecf1ac2d4c99b9670afc80c6b03344d06a7b254cc.PubTator"} -2025-09-28 10:56:01,781 - INFO - Connection accepted from ('127.0.0.1', 48110) -2025-09-28 10:56:01,781 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2d7099457ba68aa6ba454666d19b1690afd357b775241c2bc6d835b0.PubTator"} -2025-09-28 11:00:16,497 - INFO - Connection accepted from ('127.0.0.1', 33198) -2025-09-28 11:00:16,497 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0ca4d3d2a56739d04d66262c5510d2c6644f461ca461d1c71d15ceed.PubTator"} -2025-09-28 11:06:21,960 - INFO - Connection accepted from ('127.0.0.1', 54360) -2025-09-28 11:06:21,961 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a17248fe2c838d07fd13b407fa55ea1be16a029ba6d21844f6500ba9.PubTator"} -2025-09-28 11:11:57,065 - INFO - Connection accepted from ('127.0.0.1', 51896) -2025-09-28 11:11:57,066 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "651cdebe064fbb80752b960e6b0b3a49553d159862f3f10351e0f450.PubTator"} -2025-09-28 11:16:19,106 - INFO - Connection accepted from ('127.0.0.1', 37422) -2025-09-28 11:16:19,106 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "81fdb9b10d81c428898d881879d5d2e8625ed8da51909820604bbbf9.PubTator"} -2025-09-28 11:21:15,302 - INFO - Connection accepted from ('127.0.0.1', 40628) -2025-09-28 11:21:15,303 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b83d2398fb6e889dedcf984c3805d0d70ac7c0bfdb7e45ce3d6d815a.PubTator"} -2025-09-28 11:27:30,939 - INFO - Connection accepted from ('127.0.0.1', 39750) -2025-09-28 11:27:30,939 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ed73593e140c57a7e1403ef961dfedd220a8f4782a3643c9f4771189.PubTator"} -2025-09-28 11:32:55,553 - INFO - Connection accepted from ('127.0.0.1', 51452) -2025-09-28 11:32:55,553 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "da2fedb3d923bc996f4bb953da642819db4abe90dbdd5ff47332f77b.PubTator"} -2025-09-28 11:38:09,072 - INFO - Connection accepted from ('127.0.0.1', 33546) -2025-09-28 11:38:09,072 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8fe4e0606e5f0403b3bd0474a72fd3bc9fc5d137c4cbefc19ea2bd7f.PubTator"} -2025-09-28 11:42:57,064 - INFO - Connection accepted from ('127.0.0.1', 33960) -2025-09-28 11:42:57,065 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "754e56c01bd4673180b62b2d5e841fbf659a4749e2655d3ab2ee3e6a.PubTator"} -2025-09-28 11:46:32,641 - INFO - Connection accepted from ('127.0.0.1', 36422) -2025-09-28 11:46:32,642 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "628155fa7f0dbfa6db550c9ca7f132ea18c9ffa7c2dfd55dc4a1e61b.PubTator"} -2025-09-28 11:50:47,068 - INFO - Connection accepted from ('127.0.0.1', 34506) -2025-09-28 11:50:47,069 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "de53f648840e59ab76bb1763fc9395344acf912c9631d524bc925a85.PubTator"} -2025-09-28 11:55:21,522 - INFO - Connection accepted from ('127.0.0.1', 49236) -2025-09-28 11:55:21,522 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f3b708cf987e256b9bc781bbc9e5841c24d3a7596278b29800355645.PubTator"} -2025-09-28 12:00:08,609 - INFO - Connection accepted from ('127.0.0.1', 39068) -2025-09-28 12:00:08,609 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4bb92b0ac587e7111550bff58dff84e4f7168e086e4b4b83bd8dc3ca.PubTator"} -2025-09-28 12:03:55,445 - INFO - Connection accepted from ('127.0.0.1', 37814) -2025-09-28 12:03:55,445 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f066543dc38bed0dc227b7467a029c103880867e7d69eed91b7f8226.PubTator"} -2025-09-28 12:09:39,149 - INFO - Connection accepted from ('127.0.0.1', 56884) -2025-09-28 12:09:39,149 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "85cdea09a57885c5cfc0c0684cd0b7a0bc760af57556a07fc92992e6.PubTator"} -2025-09-28 12:13:38,785 - INFO - Connection accepted from ('127.0.0.1', 45822) -2025-09-28 12:13:38,786 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1bc9a5337c5911101c0084da1de1a07ddeef2bc69b75c78535aa8a84.PubTator"} -2025-09-28 12:17:37,187 - INFO - Connection accepted from ('127.0.0.1', 52130) -2025-09-28 12:17:37,187 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d1bcde4444b3d7f57513495345861abdfa8277d99e6019e908289a22.PubTator"} -2025-09-28 12:21:36,406 - INFO - Connection accepted from ('127.0.0.1', 60418) -2025-09-28 12:21:36,406 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "22aeeb29b1938db37952d3e9daad73489acee36777b4fa9b6cae3071.PubTator"} -2025-09-28 12:25:53,131 - INFO - Connection accepted from ('127.0.0.1', 43236) -2025-09-28 12:25:53,132 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "afc90b1b3fdbffbfebc5fa5444bb4ecd75876abe52f30bd227e9f21b.PubTator"} -2025-09-28 12:28:28,245 - INFO - Connection accepted from ('127.0.0.1', 37750) -2025-09-28 12:28:28,245 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6bc71bd40dff82f542da4835c58ded27e9addd81534a6302ebbe6f88.PubTator"} -2025-09-28 12:35:06,669 - INFO - Connection accepted from ('127.0.0.1', 45336) -2025-09-28 12:35:06,669 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "14b6a869b7eeaeb651581cb4ee83b45af0394865787d83d8d4ca831c.PubTator"} -2025-09-28 12:41:03,585 - INFO - Connection accepted from ('127.0.0.1', 57040) -2025-09-28 12:41:03,585 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "37388ade13bb3d8ab015df00c0198898bc7e1c5a4708ecb7bd2c0aec.PubTator"} -2025-09-28 12:47:26,853 - INFO - Connection accepted from ('127.0.0.1', 35090) -2025-09-28 12:47:26,853 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d6fe76e398c6cc8a4567489c4e1042bdeb36c2e32ee512ad4b6c66b6.PubTator"} -2025-09-28 12:51:12,428 - INFO - Connection accepted from ('127.0.0.1', 51158) -2025-09-28 12:51:12,428 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0a280cf3f91c1c844a3ae1909b991cd059aeb95cd56a87ea8d979bec.PubTator"} -2025-09-28 13:01:52,010 - INFO - Connection accepted from ('127.0.0.1', 51570) -2025-09-28 13:01:52,010 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "90d5e8c2b2f6c48b0311b7bc95ce38f247b3ede53541010e3a810c8d.PubTator"} -2025-09-28 13:07:43,063 - INFO - Connection accepted from ('127.0.0.1', 52238) -2025-09-28 13:07:43,063 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d349adb0c0b14f91a3565a93a56d4cdc1b1cafd904483480e0076448.PubTator"} -2025-09-28 13:12:31,475 - INFO - Connection accepted from ('127.0.0.1', 52986) -2025-09-28 13:12:31,475 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9ad69a6fed51ec56c51f2822189f97e963213ef6b685b11085c13142.PubTator"} -2025-09-28 13:17:01,100 - INFO - Connection accepted from ('127.0.0.1', 55116) -2025-09-28 13:17:01,100 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "feaeb2b7d4eb097e15015599bfd0a707af6071a55de297f804952287.PubTator"} -2025-09-28 13:21:03,567 - INFO - Connection accepted from ('127.0.0.1', 50774) -2025-09-28 13:21:03,568 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "776b4d47a75f3b7428d50d588f1e770e77c2408c6e14f5f6ebf8b871.PubTator"} -2025-09-28 13:25:03,733 - INFO - Connection accepted from ('127.0.0.1', 34578) -2025-09-28 13:25:03,733 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "88404ff27b36fd5ea8592dccfe9af3cfc2c450c97c519ebcf985b58c.PubTator"} -2025-09-28 13:29:36,276 - INFO - Connection accepted from ('127.0.0.1', 40526) -2025-09-28 13:29:36,276 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a3b4c161a1ab15500a70e74353505ebfcf7f4d378fa8924043893ab6.PubTator"} -2025-09-28 13:35:30,932 - INFO - Connection accepted from ('127.0.0.1', 32932) -2025-09-28 13:35:30,932 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d156e2f9adf82d68470c2aec42ab216174f6f8ceadf455f0721ec9bb.PubTator"} -2025-09-28 13:41:02,264 - INFO - Connection accepted from ('127.0.0.1', 37462) -2025-09-28 13:41:02,264 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "762ed75e1ac78ed1d5c390eadc05cac23c8982934bd4921a77a5088c.PubTator"} -2025-09-28 13:46:04,882 - INFO - Connection accepted from ('127.0.0.1', 34192) -2025-09-28 13:46:04,882 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "825e174644353061b2f654db662abee1e0dd9a40bb5ad5ed826dd741.PubTator"} -2025-09-28 13:50:53,623 - INFO - Connection accepted from ('127.0.0.1', 58194) -2025-09-28 13:50:53,623 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f936e50f5b6a8d92cf388f34b76735198fb8afa8ab84c22a451254e6.PubTator"} -2025-09-28 13:54:41,625 - INFO - Connection accepted from ('127.0.0.1', 45168) -2025-09-28 13:54:41,626 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c8f8dd56184287ad869344b62afcac15e5a262c1f96c9b4daf60e23d.PubTator"} -2025-09-28 13:59:29,033 - INFO - Connection accepted from ('127.0.0.1', 36586) -2025-09-28 13:59:29,033 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "51abd5a22878659843299924fcdb36c98802ffef690b7daf564d599c.PubTator"} -2025-09-28 14:03:50,426 - INFO - Connection accepted from ('127.0.0.1', 49906) -2025-09-28 14:03:50,426 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "48a4973a2688c8d464500235e9fde703d7d035caf4302b18784c7079.PubTator"} -2025-09-28 14:07:45,676 - INFO - Connection accepted from ('127.0.0.1', 38624) -2025-09-28 14:07:45,677 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b3c12ebf57fd39c8d818d8d14a4d2d5491f600f53c0c555080ae4a2b.PubTator"} -2025-09-28 14:11:27,089 - INFO - Connection accepted from ('127.0.0.1', 48656) -2025-09-28 14:11:27,089 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d1457ef366a4d954210e8c6402bfef74d5e0b9e9d979dd66e5b4faf2.PubTator"} -2025-09-28 14:14:52,506 - INFO - Connection accepted from ('127.0.0.1', 43586) -2025-09-28 14:14:52,506 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b58ba0047bdcbcc3a93c562d637618ee08411706aab9ac48503a2cef.PubTator"} -2025-09-28 14:18:59,903 - INFO - Connection accepted from ('127.0.0.1', 45340) -2025-09-28 14:18:59,903 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "99340d290e8b0c3a7fe7cd8999228317b9a123d9d456e6c3c04df951.PubTator"} -2025-09-28 14:23:42,904 - INFO - Connection accepted from ('127.0.0.1', 58064) -2025-09-28 14:23:42,905 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3b7506c9512001a78cbc16daa8b0ba45e3cc688e78b3769073c569d0.PubTator"} -2025-09-28 14:29:02,466 - INFO - Connection accepted from ('127.0.0.1', 39384) -2025-09-28 14:29:02,466 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f2ca61aa395e347ca334b33b08ae5dd234f3ae4d543817fea9f00d1f.PubTator"} -2025-09-28 14:33:14,406 - INFO - Connection accepted from ('127.0.0.1', 41856) -2025-09-28 14:33:14,406 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "376453ac425edf498c6d0cdd9ab767ff759bbcede8ed57bbe6988a8d.PubTator"} -2025-09-28 14:36:05,107 - INFO - Connection accepted from ('127.0.0.1', 39108) -2025-09-28 14:36:05,107 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "02a01b5a213384ccc526c83fb963f008a855c994addcb835666a4d55.PubTator"} -2025-09-28 14:39:38,090 - INFO - Connection accepted from ('127.0.0.1', 32868) -2025-09-28 14:39:38,090 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "18f19070123416bef42fb63e32d9d992e012b2d878038fe073010f1f.PubTator"} -2025-09-28 14:43:42,066 - INFO - Connection accepted from ('127.0.0.1', 47972) -2025-09-28 14:43:42,066 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6f5d6bf9b256ead4943ca5a5ab47d9fa274cfca68a3403c3f8c16e21.PubTator"} -2025-09-28 14:47:08,912 - INFO - Connection accepted from ('127.0.0.1', 46408) -2025-09-28 14:47:08,913 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cc0534da02a42f433a8c42a4d9aae2defe90a96db062f18eafc85c1e.PubTator"} -2025-09-28 14:50:09,973 - INFO - Connection accepted from ('127.0.0.1', 37630) -2025-09-28 14:50:09,973 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d22f7a107a1edd6955a0f77e6bd11b7228df784f6c43475983ea6fa4.PubTator"} -2025-09-28 14:54:59,555 - INFO - Connection accepted from ('127.0.0.1', 39792) -2025-09-28 14:54:59,555 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0d3fc22c53707777ea937b5d90a2917ea34836f7b7d6bac303c8a8da.PubTator"} -2025-09-28 15:02:31,558 - INFO - Connection accepted from ('127.0.0.1', 53662) -2025-09-28 15:02:31,559 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2f09cf446ef0bc2f39d164df30563c2b41c0b50cec51b6410b4f4fc2.PubTator"} -2025-09-28 15:06:36,556 - INFO - Connection accepted from ('127.0.0.1', 41618) -2025-09-28 15:06:36,556 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b51515243017e94dd0d6cef83ca993f7ed5ff595c3dca87561c60d80.PubTator"} -2025-09-28 15:20:14,890 - INFO - Connection accepted from ('127.0.0.1', 33540) -2025-09-28 15:20:14,890 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "518cce2213aaec5ac066f04becac2479ebf98213c6ded41a39265f43.PubTator"} -2025-09-28 15:25:15,638 - INFO - Connection accepted from ('127.0.0.1', 55480) -2025-09-28 15:25:15,639 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dc705c128481508dbe2d571e3d7ce16ed3546d6623b62fcd9f939c95.PubTator"} -2025-09-28 15:34:47,043 - INFO - Connection accepted from ('127.0.0.1', 33506) -2025-09-28 15:34:47,043 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f888ce80d16463adbd75e8947e1cf1c579a9e5b500cd67ea25dc791a.PubTator"} -2025-09-28 15:45:16,165 - INFO - Connection accepted from ('127.0.0.1', 37074) -2025-09-28 15:45:16,165 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f34dd2edcb5b78e147c9eb6f750c15273c0ca1e601b08abc812e74fb.PubTator"} -2025-09-28 15:50:36,640 - INFO - Connection accepted from ('127.0.0.1', 50568) -2025-09-28 15:50:36,640 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "716dd8fd7c730de44efe1272f10ab1cadd463883f410d96b077e865d.PubTator"} -2025-09-28 15:54:26,736 - INFO - Connection accepted from ('127.0.0.1', 33884) -2025-09-28 15:54:26,737 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "62f4e3688b82b8cfa821e83e3f22c7badbd6271e1ae0bca44073faa1.PubTator"} -2025-09-28 15:59:29,200 - INFO - Connection accepted from ('127.0.0.1', 58648) -2025-09-28 15:59:29,201 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "56aa36ea4ace3a11dc7dc5b0d91081c473df6102289f7651b72d633d.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-30 11:23:42,138 - INFO - Connection accepted from ('127.0.0.1', 53642) -2025-09-30 11:23:42,139 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9dc696dc10fc3c02e4256ff513d6670b4953195ec4dc0e88ddf03207.PubTator"} -Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation. -2025-09-30 11:31:01,868 - INFO - Connection accepted from ('127.0.0.1', 51264) -2025-09-30 11:31:01,869 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "97e1e36f1eb8d35ebaa56b16d73c4409466b7957eed67d74708fa398.PubTator"} -2025-09-30 11:42:27,703 - INFO - Connection accepted from ('127.0.0.1', 48060) -2025-09-30 11:42:27,704 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c10f3314102693f88ad5ad6ff4ec2f2fcbf9bb43fb8f1075a40deae1.PubTator"} -2025-09-30 11:48:53,542 - INFO - Connection accepted from ('127.0.0.1', 55496) -2025-09-30 11:48:53,543 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b80510d88d70dcbe9bd50bcca01e312c31e7f70ea3264ad4244cbe8c.PubTator"} -2025-09-30 11:57:57,116 - INFO - Connection accepted from ('127.0.0.1', 53562) -2025-09-30 11:57:57,116 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "350775959f4563bfc0a8eb79f948d2efa7098e25f24405cdb9cb9d38.PubTator"} -2025-09-30 12:07:20,991 - INFO - Connection accepted from ('127.0.0.1', 33176) -2025-09-30 12:07:20,991 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cb2ff4066fc6bb759927e910dfc8953328a02138d2e5f328466e1f0d.PubTator"} -2025-09-30 12:13:31,876 - INFO - Connection accepted from ('127.0.0.1', 45380) -2025-09-30 12:13:31,876 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "909add6b51a39ebba55fc3eee2ac1395530da0d58f6d08f1060c3058.PubTator"} -2025-09-30 12:19:56,735 - INFO - Connection accepted from ('127.0.0.1', 43646) -2025-09-30 12:19:56,735 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c6bae1422d4144a2f699a62c969eb40307e995e7615dc28632eced04.PubTator"} -2025-09-30 12:27:00,200 - INFO - Connection accepted from ('127.0.0.1', 50310) -2025-09-30 12:27:00,200 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cc4ed7da2040e96e30c6f0624ac8089a9b90866870c93d4e1af415ae.PubTator"} -2025-09-30 12:35:51,229 - INFO - Connection accepted from ('127.0.0.1', 45324) -2025-09-30 12:35:51,230 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d5e8986ebc16918ca83210fabe5200e355341ae02c50dd563db52918.PubTator"} -2025-09-30 12:43:48,147 - INFO - Connection accepted from ('127.0.0.1', 58112) -2025-09-30 12:43:48,148 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3e72724ded443bcc27745e262933293f3318e59d6d733d22eb0713a8.PubTator"} -2025-09-30 12:51:49,376 - INFO - Connection accepted from ('127.0.0.1', 33602) -2025-09-30 12:51:49,376 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ce2b668c80b049e1422dd490a3fa89d29f788ee9558514d78e47030d.PubTator"} -2025-09-30 12:58:45,927 - INFO - Connection accepted from ('127.0.0.1', 35938) -2025-09-30 12:58:45,927 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "52e48637b93ee0c8ccb408fc8bb518c869d2baed085ad687a9c3afc3.PubTator"} -2025-09-30 13:04:51,535 - INFO - Connection accepted from ('127.0.0.1', 39448) -2025-09-30 13:04:51,535 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5f179b2b5403ba934d8555354a7183b8f648725e72fbe2057494cd93.PubTator"} -2025-09-30 13:09:38,632 - INFO - Connection accepted from ('127.0.0.1', 55376) -2025-09-30 13:09:38,633 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "808280b1fef87ac3268b5564aa9ffb8d285c72a01adb37999ccf08b3.PubTator"} -2025-09-30 13:14:47,891 - INFO - Connection accepted from ('127.0.0.1', 33224) -2025-09-30 13:14:47,891 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f99960800e0b273cc9f59eb2f1df9b070b307f867c27a2fca3d3807e.PubTator"} -2025-09-30 13:18:19,146 - INFO - Connection accepted from ('127.0.0.1', 49952) -2025-09-30 13:18:19,147 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2a15b7338089a58b0411cb03e83320ffdf968386a228ce7efbd79baa.PubTator"} -2025-09-30 13:25:43,938 - INFO - Connection accepted from ('127.0.0.1', 45932) -2025-09-30 13:25:43,939 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "15fe96f1a5453a5784e1f1d0eec7d030aff94b59bf979d36ebae2205.PubTator"} -2025-09-30 13:33:16,892 - INFO - Connection accepted from ('127.0.0.1', 49240) -2025-09-30 13:33:16,892 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "254cdf2755df48eea22854aa76ae64b9e263454c27514962ee6858cc.PubTator"} -2025-09-30 13:41:31,260 - INFO - Connection accepted from ('127.0.0.1', 43262) -2025-09-30 13:41:31,261 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a5fccd4b4a4cfcb6bb0a1474206b553e0999e2a6f2bbb9b6f5f6d4cb.PubTator"} -2025-09-30 13:46:28,984 - INFO - Connection accepted from ('127.0.0.1', 42934) -2025-09-30 13:46:28,984 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8e83f0a7669c64f74f096948376634a95298e9fbdb1ceefcc4e6bf7f.PubTator"} -2025-09-30 13:54:14,968 - INFO - Connection accepted from ('127.0.0.1', 34568) -2025-09-30 13:54:14,968 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "fd02acb9f7dde07cf29631c1dfd120fca454fc3c8da580be45f887fb.PubTator"} -2025-09-30 14:00:10,248 - INFO - Connection accepted from ('127.0.0.1', 37252) -2025-09-30 14:00:10,248 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "974022e0e84f62b9466791d7fdf1e7de01194039f4982dee86c5a38d.PubTator"} -2025-09-30 14:06:54,481 - INFO - Connection accepted from ('127.0.0.1', 50352) -2025-09-30 14:06:54,481 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1f7dc8f7d5b1b4a6336a68af0a7dc77706a7381e6c25e7865be238ed.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-10-04 12:33:59,063 - INFO - Connection accepted from ('127.0.0.1', 36990) -2025-10-04 12:33:59,064 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-10-04 12:35:09,664 - INFO - Connection accepted from ('127.0.0.1', 39510) -2025-10-04 12:35:09,664 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9e5db371e5181462e04aa9ff614e8855ccb7a99eef016ccb87033016.PubTator"} -Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation. -2025-10-04 12:35:26,092 - INFO - Connection accepted from ('127.0.0.1', 44718) -2025-10-04 12:35:26,092 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "427659203dcf0a0c1fe3ef6117d0ddcd0a1149f52a519a618d5b363c.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-10-04 12:42:07,237 - INFO - Connection accepted from ('127.0.0.1', 47446) -2025-10-04 12:42:07,238 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-10-04 12:43:08,048 - INFO - Connection accepted from ('127.0.0.1', 52792) -2025-10-04 12:43:08,048 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b29289e71b2cb5235f2a632c3d898362e27afe1519f6e99c6b1f76ef.PubTator"} -2025-10-04 12:43:16,100 - INFO - Connection accepted from ('127.0.0.1', 46382) -2025-10-04 12:43:16,101 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "981bc74e79c14e76efe4e8f05c270a7347b2dbaa05aaee8c2cdbe2d1.PubTator"} diff --git a/source/Parser/logs/nohup_multi_ner.out b/source/Parser/logs/nohup_multi_ner.out deleted file mode 100644 index a64be470..00000000 --- a/source/Parser/logs/nohup_multi_ner.out +++ /dev/null @@ -1,5747 +0,0 @@ -/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py:129: UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero. (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.) - return torch._C._cuda_getDeviceCount() > 0 -BioMedNER init_t 29.402 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 35966) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.669 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.610 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 45884) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.859 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.568 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 42404) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.614 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.569 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 41016) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.588 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.575 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 56102) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.709 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.588 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 48200) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.661 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.557 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36736) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.591 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.584 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 47216) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.595 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.570 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 43336) - 0it [00:00, ?it/s] 1it [00:00, 277.49it/s] - Prediction: 0%| | 0/1 [00:00 0 -/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py:129: UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero. (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.) - return torch._C._cuda_getDeviceCount() > 0 -BioMedNER init_t 0.587 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 40404) - 0it [00:00, ?it/s] 1it [00:00, 314.77it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.655 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.574 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 43746) - 0it [00:00, ?it/s] 1it [00:00, 293.29it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.553 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.607 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 56030) - 0it [00:00, ?it/s] 1it [00:00, 280.82it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.635 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.585 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 41308) - 0it [00:00, ?it/s] 1it [00:00, 251.53it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.592 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.577 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 47960) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.694 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 6.985 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 47844) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.696 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.662 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 59032) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.741 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.699 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 50936) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.726 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.672 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36716) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.801 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.655 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 37582) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.739 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.679 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 42482) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.742 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.665 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 33430) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.814 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.659 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54618) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.698 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py:182: UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero. (Triggered internally at /pytorch/c10/cuda/CUDAFunctions.cpp:109.) - return torch._C._cuda_getDeviceCount() > 0 -BioMedNER init_t 7.251 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54154) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.674 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.603 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 37958) - 0it [00:00, ?it/s] 1it [00:00, 39.05it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.695 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.627 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 46032) - 0it [00:00, ?it/s] 1it [00:00, 287.18it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.690 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.631 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 60866) - 0it [00:00, ?it/s] 1it [00:00, 269.75it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.724 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.632 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 52600) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.655 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.625 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 42170) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.675 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.595 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38802) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.720 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.655 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 39294) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.688 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.609 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 34964) - 0it [00:00, ?it/s] 1it [00:00, 276.47it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -Traceback (most recent call last): - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 421, in _lazy_init - queued_call() - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 269, in _check_capability - capability = get_device_capability(d) - ^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 598, in get_device_capability - prop = get_device_properties(device) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 618, in get_device_properties - return _get_device_properties(device) # type: ignore[name-defined] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -RuntimeError: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "/pytorch/aten/src/ATen/cuda/CUDAContext.cpp":52, please report a bug to PyTorch. device=1, num_gpus=1 - -The above exception was the direct cause of the following exception: - -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 115, in - mt_ner = BioMedNER(args) - ^^^^^^^^^^^^^^^ - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 574, in __init__ - self.model.to(self.device) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/transformers/modeling_utils.py", line 4276, in to - return super().to(*args, **kwargs) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1371, in to - return self._apply(convert) - ^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 957, in _apply - param_applied = fn(param) - ^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1357, in convert - return t.to( - ^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 427, in _lazy_init - raise DeferredCudaCallError(msg) from e -torch.cuda.DeferredCudaCallError: CUDA call failed lazily at initialization with error: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "/pytorch/aten/src/ATen/cuda/CUDAContext.cpp":52, please report a bug to PyTorch. device=1, num_gpus=1 - -CUDA call was originally invoked at: - - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 9, in - from biomedner_init import BioMedNER - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 10, in - import torch - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/__init__.py", line 2087, in - _C._initExtension(_manager_path()) - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 356, in - _lazy_call(_check_capability) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 353, in _lazy_call - _queued_calls.append((callable, traceback.format_stack())) - -Traceback (most recent call last): - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 421, in _lazy_init - queued_call() - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 269, in _check_capability - capability = get_device_capability(d) - ^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 598, in get_device_capability - prop = get_device_properties(device) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 618, in get_device_properties - return _get_device_properties(device) # type: ignore[name-defined] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -RuntimeError: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "/pytorch/aten/src/ATen/cuda/CUDAContext.cpp":52, please report a bug to PyTorch. device=1, num_gpus=1 - -The above exception was the direct cause of the following exception: - -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 115, in - mt_ner = BioMedNER(args) - ^^^^^^^^^^^^^^^ - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 574, in __init__ - self.model.to(self.device) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/transformers/modeling_utils.py", line 4276, in to - return super().to(*args, **kwargs) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1371, in to - return self._apply(convert) - ^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 957, in _apply - param_applied = fn(param) - ^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1357, in convert - return t.to( - ^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 427, in _lazy_init - raise DeferredCudaCallError(msg) from e -torch.cuda.DeferredCudaCallError: CUDA call failed lazily at initialization with error: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "/pytorch/aten/src/ATen/cuda/CUDAContext.cpp":52, please report a bug to PyTorch. device=1, num_gpus=1 - -CUDA call was originally invoked at: - - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 9, in - from biomedner_init import BioMedNER - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 10, in - import torch - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/__init__.py", line 2087, in - _C._initExtension(_manager_path()) - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 356, in - _lazy_call(_check_capability) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 353, in _lazy_call - _queued_calls.append((callable, traceback.format_stack())) - -Traceback (most recent call last): - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 421, in _lazy_init - queued_call() - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 269, in _check_capability - capability = get_device_capability(d) - ^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 598, in get_device_capability - prop = get_device_properties(device) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 618, in get_device_properties - return _get_device_properties(device) # type: ignore[name-defined] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -RuntimeError: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "/pytorch/aten/src/ATen/cuda/CUDAContext.cpp":52, please report a bug to PyTorch. device=1, num_gpus=1 - -The above exception was the direct cause of the following exception: - -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 115, in - mt_ner = BioMedNER(args) - ^^^^^^^^^^^^^^^ - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 574, in __init__ - self.model.to(self.device) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/transformers/modeling_utils.py", line 4276, in to - return super().to(*args, **kwargs) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1371, in to - return self._apply(convert) - ^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 957, in _apply - param_applied = fn(param) - ^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1357, in convert - return t.to( - ^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 427, in _lazy_init - raise DeferredCudaCallError(msg) from e -torch.cuda.DeferredCudaCallError: CUDA call failed lazily at initialization with error: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "/pytorch/aten/src/ATen/cuda/CUDAContext.cpp":52, please report a bug to PyTorch. device=1, num_gpus=1 - -CUDA call was originally invoked at: - - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 9, in - from biomedner_init import BioMedNER - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 10, in - import torch - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/__init__.py", line 2087, in - _C._initExtension(_manager_path()) - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 356, in - _lazy_call(_check_capability) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 353, in _lazy_call - _queued_calls.append((callable, traceback.format_stack())) - -Traceback (most recent call last): - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 421, in _lazy_init - queued_call() - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 269, in _check_capability - capability = get_device_capability(d) - ^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 598, in get_device_capability - prop = get_device_properties(device) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 618, in get_device_properties - return _get_device_properties(device) # type: ignore[name-defined] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -RuntimeError: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "/pytorch/aten/src/ATen/cuda/CUDAContext.cpp":52, please report a bug to PyTorch. device=1, num_gpus=1 - -The above exception was the direct cause of the following exception: - -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 115, in - mt_ner = BioMedNER(args) - ^^^^^^^^^^^^^^^ - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 574, in __init__ - self.model.to(self.device) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/transformers/modeling_utils.py", line 4276, in to - return super().to(*args, **kwargs) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1371, in to - return self._apply(convert) - ^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 957, in _apply - param_applied = fn(param) - ^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1357, in convert - return t.to( - ^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 427, in _lazy_init - raise DeferredCudaCallError(msg) from e -torch.cuda.DeferredCudaCallError: CUDA call failed lazily at initialization with error: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "/pytorch/aten/src/ATen/cuda/CUDAContext.cpp":52, please report a bug to PyTorch. device=1, num_gpus=1 - -CUDA call was originally invoked at: - - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 9, in - from biomedner_init import BioMedNER - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 10, in - import torch - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/__init__.py", line 2087, in - _C._initExtension(_manager_path()) - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 356, in - _lazy_call(_check_capability) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 353, in _lazy_call - _queued_calls.append((callable, traceback.format_stack())) - -BioMedNER init_t 0.242 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 7.317 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 58510) - 0it [00:00, ?it/s] 1it [00:00, 19.72it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.764 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.683 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.603 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 56866) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.685 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.634 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 40636) - 0it [00:00, ?it/s] 1it [00:00, 269.31it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.653 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.631 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55970) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.647 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.633 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 57358) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.673 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.827 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 48700) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.700 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.592 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 53558) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.643 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.699 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.615 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 35666) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.725 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.618 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 41872) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.699 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.616 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 59346) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.661 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.672 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.605 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 34754) - 0it [00:00, ?it/s] 1it [00:00, 242.38it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.588 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.656 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.695 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.607 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 34186) - 0it [00:00, ?it/s] 1it [00:00, 45.21it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.654 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.659 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 46644) - 0it [00:00, ?it/s] 1it [00:00, 38.32it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.673 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.648 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38736) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.682 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 7.581 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55662) - 0it [00:00, ?it/s] 1it [00:00, 262.60it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.600 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36148) - 0it [00:00, ?it/s] 1it [00:00, 254.39it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.670 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 58876) - 0it [00:00, ?it/s] 1it [00:00, 288.45it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.880 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.647 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 53574) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.655 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.671 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 59480) - 0it [00:00, ?it/s] 1it [00:00, 260.69it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.734 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.691 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.617 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 40534) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.677 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -Response sent for 61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator -Connected by ('127.0.0.1', 49444) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.674 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.632 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 45120) - 0it [00:00, ?it/s] 1it [00:00, 248.26it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.686 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.617 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54440) - 0it [00:00, ?it/s] 1it [00:00, 302.01it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.701 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.670 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.713 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.635 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55824) - 0it [00:00, ?it/s] 1it [00:00, 258.81it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.685 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.658 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 52026) - 0it [00:00, ?it/s] 1it [00:00, 253.88it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.674 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.630 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 49418) - 0it [00:00, ?it/s] 1it [00:00, 289.18it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.699 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.617 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38980) - 0it [00:00, ?it/s] 1it [00:00, 271.30it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.716 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.660 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 52322) - 0it [00:00, ?it/s] 1it [00:00, 270.16it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.599 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55710) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.693 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.642 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 51514) - 0it [00:00, ?it/s] 1it [00:00, 300.39it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.645 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.600 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 52062) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.661 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.664 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 58326) - 0it [00:00, ?it/s] 1it [00:00, 27.60it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.664 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.676 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.761 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55874) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.678 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.664 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 57998) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.679 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.672 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 53008) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.630 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.621 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.638 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36312) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.624 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.621 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 60350) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.669 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.679 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 47356) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.623 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.677 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 57180) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.670 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.660 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 49116) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.651 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.687 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 50804) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.899 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.631 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 51960) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.660 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.629 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 50042) - 0it [00:00, ?it/s] 1it [00:00, 234.52it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 6.950 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54262) - 0it [00:00, ?it/s] 1it [00:00, 40.99it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.589 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.640 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 37384) - 0it [00:00, ?it/s] 1it [00:00, 303.85it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.654 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.641 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55558) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.646 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.629 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 45134) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.643 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.583 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54608) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.591 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.601 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 37706) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.734 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.608 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 35874) - 0it [00:00, ?it/s] 1it [00:00, 44.39it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.620 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.606 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.632 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.609 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 40950) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.659 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.618 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 59594) - 0it [00:00, ?it/s] 1it [00:00, 272.66it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.630 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.626 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 35992) - 0it [00:00, ?it/s] 1it [00:00, 249.45it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.636 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.679 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 51178) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.610 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.685 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 51420) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.660 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.662 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38132) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 1.084 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36706) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.651 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.671 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55340) - 0it [00:00, ?it/s] 1it [00:00, 277.35it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.621 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.655 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 56258) - 0it [00:00, ?it/s] 1it [00:00, 32.02it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.625 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.645 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38912) - 0it [00:00, ?it/s] 1it [00:00, 245.11it/s] - Prediction: 0%| | 0/1 [00:00H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 1.136 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.689 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 50952) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 1.155 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -Response sent for 69da3d5c9756484561d38f6b18b486efb3ef03abff2cdca8d4db0470.PubTator -Connected by ('127.0.0.1', 44940) - 0it [00:00, ?it/s] 1it [00:00, 480.89it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -Response sent for 1501995ce586ffd0c7522df67e52af96f151f639f40a785a87e4a1ab.PubTator -Connected by ('127.0.0.1', 44138) - 0it [00:00, ?it/s] 1it [00:00, 475.22it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.599 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 57780) - 0it [00:00, ?it/s] 1it [00:00, 301.40it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.626 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.743 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 46162) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.623 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.641 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 51732) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.592 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.651 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.676 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55168) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.599 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.618 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.705 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 50706) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.619 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.678 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 47454) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.605 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.669 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36056) - 0it [00:00, ?it/s] 1it [00:00, 167.10it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.607 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.761 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 50442) - 0it [00:00, ?it/s] 1it [00:00, 254.32it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.657 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.675 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 48094) - 0it [00:00, ?it/s] 1it [00:00, 257.18it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.688 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.706 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 39282) - 0it [00:00, ?it/s] 1it [00:00, 291.11it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.607 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.682 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 44094) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.621 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.637 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 44206) - 0it [00:00, ?it/s] 1it [00:00, 45.36it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.618 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.621 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 60840) - 0it [00:00, ?it/s] 1it [00:00, 211.71it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.615 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.731 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 47788) - 0it [00:00, ?it/s] 1it [00:00, 273.73it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.641 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.673 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 52268) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.600 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.649 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54538) - 0it [00:00, ?it/s] 1it [00:00, 50.53it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.614 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.654 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55100) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.613 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.613 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.656 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 43618) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.643 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.609 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 49372) - 0it [00:00, ?it/s] 1it [00:00, 49.29it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.644 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.709 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 51396) - 0it [00:00, ?it/s] 1it [00:00, 285.87it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.616 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.659 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 33552) - 0it [00:00, ?it/s] 1it [00:00, 314.63it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.632 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.669 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36438) - 0it [00:00, ?it/s] 1it [00:00, 294.92it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.652 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.660 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 58114) - 0it [00:00, ?it/s] 1it [00:00, 76.53it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.617 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.626 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 51132) - 0it [00:00, ?it/s] 1it [00:00, 45.80it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.617 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.630 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 45558) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.620 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.654 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 57234) - 0it [00:00, ?it/s] 1it [00:00, 293.33it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.660 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.640 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 33816) - 0it [00:00, ?it/s] 1it [00:00, 278.01it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.668 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.664 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 9, in - from biomedner_init import BioMedNER - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 10, in - import torch -ModuleNotFoundError: No module named 'torch' -BioMedNER init_t 0.685 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54500) - 0it [00:00, ?it/s] 1it [00:00, 281.82it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.812 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.600 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 57122) - 0it [00:00, ?it/s] 1it [00:00, 117.55it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.618 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.668 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 58328) - 0it [00:00, ?it/s] 1it [00:00, 263.94it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.584 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.669 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 33454) - 0it [00:00, ?it/s] 1it [00:00, 280.22it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.595 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.726 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36446) - 0it [00:00, ?it/s] 1it [00:00, 38.11it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.634 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.670 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 32980) - 0it [00:00, ?it/s] 1it [00:00, 99.35it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.611 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.637 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38790) - 0it [00:00, ?it/s] 1it [00:00, 322.22it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.615 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.693 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 49014) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.648 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.671 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 47712) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.617 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.663 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54922) - 0it [00:00, ?it/s] 1it [00:00, 27.25it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.667 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 52508) - 0it [00:00, ?it/s] 1it [00:00, 310.78it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.622 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.662 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36956) - 0it [00:00, ?it/s] 1it [00:00, 320.08it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.632 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.761 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 58470) - 0it [00:00, ?it/s] 1it [00:00, 299.55it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.600 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.725 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 39066) - 0it [00:00, ?it/s] 1it [00:00, 37.91it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.630 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.640 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38604) - 0it [00:00, ?it/s] 1it [00:00, 252.70it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.646 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.667 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 57876) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.651 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.609 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 7.686 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 39636) - 0it [00:00, ?it/s] 1it [00:00, 306.06it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.656 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.635 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54280) - 0it [00:00, ?it/s] 1it [00:00, 35.67it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.644 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.628 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 59526) - 0it [00:00, ?it/s] 1it [00:00, 317.41it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.644 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.650 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 52382) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.615 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.636 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 33324) - 0it [00:00, ?it/s] 1it [00:00, 38.50it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.655 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.573 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 60648) - 0it [00:00, ?it/s] 1it [00:00, 50.69it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.603 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.633 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 39646) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.582 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.673 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 43590) - 0it [00:00, ?it/s] 1it [00:00, 281.38it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.650 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.625 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 56334) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.636 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.595 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.570 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 52778) - 0it [00:00, ?it/s] 1it [00:00, 58.14it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.606 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.598 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 43512) - 0it [00:00, ?it/s] 1it [00:00, 321.92it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.575 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.634 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 46524) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.600 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.615 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 60002) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.621 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.593 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 44016) - 0it [00:00, ?it/s] 1it [00:00, 337.35it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.568 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 47056) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.584 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.792 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38682) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.583 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.623 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 42872) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.626 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.595 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38908) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.601 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.610 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 41668) - 0it [00:00, ?it/s] 1it [00:00, 27.26it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.646 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.631 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 48016) - 0it [00:00, ?it/s] 1it [00:00, 302.07it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.589 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.588 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 60800) - 0it [00:00, ?it/s] 1it [00:00, 267.70it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.632 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.650 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 48744) - 0it [00:00, ?it/s] 1it [00:00, 303.25it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.647 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.600 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 56694) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.620 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.663 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 50922) - 0it [00:00, ?it/s] 1it [00:00, 41.07it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.677 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.646 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.622 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 45338) - 0it [00:00, ?it/s] 1it [00:00, 340.81it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.654 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.670 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.610 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54022) - 0it [00:00, ?it/s] 1it [00:00, 314.86it/s] - Prediction: 0%| | 0/1 [00:00 512 and sentence_end_count > 1: - sentences = re.split(r"(?<=[.!?]) +", text) - for sentence in sentences: - new_row = row_copy.copy() - new_row[text_column] = sentence - new_data.append(new_row) - else: - row_copy[text_column] = text - new_data.append(row_copy) - - new_df = pd.DataFrame(new_data) - return new_df - - -def process_file(idx): - global biomedner - if biomedner is None: - raise RuntimeError( - "BioMedNER instance is not initialized. Please ensure 'biomedner' is set before calling process_file." - ) - output_filepath = os.path.join(BASE_OUTPUT_FILEPATH_CT, f"{idx}.json") - if os.path.exists(output_filepath): - print(f"File {idx} already exists. Skipping...") - return - - # Load the dataframe - file_path = None - try: - if data_source == "clinical trials": - file_path = os.path.join( - BASE_INPUT_FILEPATH, "clintra", f"{idx}_preprocessed.tsv" - ) - if os.path.exists(file_path): - print(f"Processing {idx}") - df = pd.read_csv(file_path, delimiter="\t") - else: - print(f"File {file_path} does not exist. Skipping.") - return - elif data_source == "patient": - file_path = os.path.join( - BASE_INPUT_FILEPATH, "patient", f"{idx}_preprocessed.csv" - ) - if os.path.exists(file_path): - df = pd.read_csv(file_path) - else: - print(f"File {file_path} does not exist. Skipping.") - return - else: - warnings.warn( - "Unexpected data source encountered. Please choose between 'clinical trials' or 'patient'", - UserWarning, - ) - return - except pd.errors.EmptyDataError: - print( - f"EmptyDataError: No columns to parse from file {file_path}. Skipping this file." - ) - return - except Exception as e: - print(f"An unexpected error occurred while processing file {file_path}: {e}") - return - - if df.empty: - print(f"Dataframe {idx} is empty. Skipping.") - return - - print(f"Processing {idx}") - df = process_dataframe(df, "sentence") - sentences = df["sentence"].tolist() - if not sentences: - print(f"No sentences to process for {idx}. Skipping.") - return - - # Use the biomedner instance - annotated_sentences = biomedner.annotate_texts_in_parallel(sentences, max_workers=5) - df["entities"] = [entities for entities in annotated_sentences] - result_json = { - "nct_id": idx, - "criteria": [ - { - "criterion": row["sentence"], - "entities": row["entities"], - "type": row["criteria"], - } - for _, row in df.iterrows() - ], - } - # Save the result - with open(output_filepath, "w") as f: - json.dump(result_json, f, indent=4) - print(f"Saved {output_filepath}") - - -def process_files(device_id, ids_to_process, biomedner_params, shared_dicts): - import os - - global biomedner - - # Set the environment variable for this process - os.environ["CUDA_VISIBLE_DEVICES"] = device_id - - # Initialize BioMedNER instance - biomedner = BioMedNER( - **biomedner_params, - biomedner_home=tempfile.TemporaryDirectory(dir=BASE_TMP_SUPERDIR).name, - preloaded_dicts=shared_dicts, - ) - - # Process each file in the chunk - for idx in ids_to_process: - process_file(idx) - - -if __name__ == "__main__": - import multiprocessing - - # Load dictionaries once - shared_dicts = load_shared_dictionaries() - - # Define BioMedNER parameters - biomedner_params = { - "max_word_len": 50, - "seed": 2019, - "gene_norm_port": 18888, - "disease_norm_port": 18892, - "biomedner_host": "localhost", - "biomedner_port": 18894, - "gner_host": "localhost", - "gner_port": 18783, - "time_format": "[%d/%b/%Y %H:%M:%S.%f]", - "use_neural_normalizer": True, - "no_cuda": False, - } - - # Load your NCT IDs - df_trec21 = pd.read_csv("../../data/trec/Unique_NCT_IDs_from_2021_File.csv") - df_trec22 = pd.read_csv("../../data/trec/Unique_NCT_IDs_from_2022_File.csv") - nct_ids21 = df_trec21["Unique NCT IDs"].unique().tolist() - nct_ids22 = df_trec22["Unique NCT IDs"].unique().tolist() - unique_ids = set(nct_ids21 + nct_ids22) - # Prepare the list of unprocessed ids - unprocessed_ids = [ - idx - for idx in unique_ids - if not os.path.exists(os.path.join(BASE_OUTPUT_FILEPATH_CT, f"{idx}.json")) - ] - - # Define your device IDs - device_ids = ["0"] # List of GPU IDs as strings - - # Define the number of processes you want - num_processes = 8 # For example, 12 processes - - # Create a list of device IDs cycling through the available GPUs - process_device_ids = [device_ids[i % len(device_ids)] for i in range(num_processes)] - - # Divide unprocessed_ids among processes - chunks = [[] for _ in range(num_processes)] - for i, idx in enumerate(unprocessed_ids): - chunks[i % num_processes].append(idx) - - processes = [] - for i in range(num_processes): - device_id = process_device_ids[i] - ids_chunk = chunks[i] - if ids_chunk: # Only start a process if there's work to do - p = multiprocessing.Process( - target=process_files, - args=(device_id, ids_chunk, biomedner_params, shared_dicts), - ) - processes.append(p) - p.start() - - for p in processes: - p.join() diff --git a/source/Parser/models.py b/source/Parser/models.py deleted file mode 100644 index c8abea98..00000000 --- a/source/Parser/models.py +++ /dev/null @@ -1,653 +0,0 @@ -# coding=utf-8 -import copy - -import torch -import torch.nn.functional as F -from torch.nn import CrossEntropyLoss -from transformers import ( - BertForTokenClassification, - BertModel, - RobertaForTokenClassification, - RobertaModel, -) - - -class BERTMultiNER2(BertForTokenClassification): - def __init__(self, config, num_labels=3): - super(BERTMultiNER2, self).__init__(config) - self.num_labels = num_labels - self.bert = BertModel(config) - self.dropout = torch.nn.Dropout(config.hidden_dropout_prob) - - self.dise_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # disease - self.chem_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # chemical - self.gene_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # gene/protein - self.spec_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # species - self.cellline_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # cell line - self.dna_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # dna - self.rna_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # rna - self.celltype_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # cell type - - self.dise_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.chem_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.gene_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.spec_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.cellline_classifier_2 = torch.nn.Linear( - config.hidden_size, config.hidden_size - ) - self.dna_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.rna_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.celltype_classifier_2 = torch.nn.Linear( - config.hidden_size, config.hidden_size - ) - - self.init_weights() - - def forward( - self, - input_ids, - token_type_ids=None, - attention_mask=None, - labels=None, - entity_type_ids=None, - ): - sequence_output = self.bert( - input_ids, - token_type_ids=token_type_ids, - attention_mask=attention_mask, - head_mask=None, - )[0] - batch_size, max_len, feat_dim = sequence_output.shape - sequence_output = self.dropout(sequence_output) - - if entity_type_ids[0][0].item() == 0: - """ - Raw text data with trained parameters - """ - dise_sequence_output = F.relu( - self.dise_classifier_2(sequence_output) - ) # disease logit value - chem_sequence_output = F.relu( - self.chem_classifier_2(sequence_output) - ) # chemical logit value - gene_sequence_output = F.relu( - self.gene_classifier_2(sequence_output) - ) # gene/protein logit value - spec_sequence_output = F.relu( - self.spec_classifier_2(sequence_output) - ) # species logit value - cellline_sequence_output = F.relu( - self.cellline_classifier_2(sequence_output) - ) # cell line logit value - dna_sequence_output = F.relu( - self.dna_classifier_2(sequence_output) - ) # dna logit value - rna_sequence_output = F.relu( - self.rna_classifier_2(sequence_output) - ) # rna logit value - celltype_sequence_output = F.relu( - self.celltype_classifier_2(sequence_output) - ) # cell type logit value - - dise_logits = self.dise_classifier( - dise_sequence_output - ) # disease logit value - chem_logits = self.chem_classifier( - chem_sequence_output - ) # chemical logit value - gene_logits = self.gene_classifier( - gene_sequence_output - ) # gene/protein logit value - spec_logits = self.spec_classifier( - spec_sequence_output - ) # species logit value - cellline_logits = self.cellline_classifier( - cellline_sequence_output - ) # cell line logit value - dna_logits = self.dna_classifier(dna_sequence_output) # dna logit value - rna_logits = self.rna_classifier(rna_sequence_output) # rna logit value - celltype_logits = self.celltype_classifier( - celltype_sequence_output - ) # cell type logit value - - # update logit and sequence_output - sequence_output = ( - dise_sequence_output - + chem_sequence_output - + gene_sequence_output - + spec_sequence_output - + cellline_sequence_output - + dna_sequence_output - + rna_sequence_output - + celltype_sequence_output - ) - - logits = ( - dise_logits, - chem_logits, - gene_logits, - spec_logits, - cellline_logits, - dna_logits, - rna_logits, - celltype_logits, - ) - else: - """ - Train, Eval, Test with pre-defined entity type tags - """ - # make 1*1 conv to adopt entity type - dise_idx = copy.deepcopy(entity_type_ids) - chem_idx = copy.deepcopy(entity_type_ids) - gene_idx = copy.deepcopy(entity_type_ids) - spec_idx = copy.deepcopy(entity_type_ids) - cellline_idx = copy.deepcopy(entity_type_ids) - dna_idx = copy.deepcopy(entity_type_ids) - rna_idx = copy.deepcopy(entity_type_ids) - celltype_idx = copy.deepcopy(entity_type_ids) - - dise_idx[dise_idx != 1] = 0 - chem_idx[chem_idx != 2] = 0 - gene_idx[gene_idx != 3] = 0 - spec_idx[spec_idx != 4] = 0 - cellline_idx[cellline_idx != 5] = 0 - dna_idx[dna_idx != 6] = 0 - rna_idx[rna_idx != 7] = 0 - celltype_idx[celltype_idx != 8] = 0 - - dise_sequence_output = dise_idx.unsqueeze(-1) * sequence_output - chem_sequence_output = chem_idx.unsqueeze(-1) * sequence_output - gene_sequence_output = gene_idx.unsqueeze(-1) * sequence_output - spec_sequence_output = spec_idx.unsqueeze(-1) * sequence_output - cellline_sequence_output = cellline_idx.unsqueeze(-1) * sequence_output - dna_sequence_output = dna_idx.unsqueeze(-1) * sequence_output - rna_sequence_output = rna_idx.unsqueeze(-1) * sequence_output - celltype_sequence_output = celltype_idx.unsqueeze(-1) * sequence_output - - # F.tanh or F.relu - dise_sequence_output = F.relu( - self.dise_classifier_2(dise_sequence_output) - ) # disease logit value - chem_sequence_output = F.relu( - self.chem_classifier_2(chem_sequence_output) - ) # chemical logit value - gene_sequence_output = F.relu( - self.gene_classifier_2(gene_sequence_output) - ) # gene/protein logit value - spec_sequence_output = F.relu( - self.spec_classifier_2(spec_sequence_output) - ) # species logit value - cellline_sequence_output = F.relu( - self.cellline_classifier_2(cellline_sequence_output) - ) # cell line logit value - dna_sequence_output = F.relu( - self.dna_classifier_2(dna_sequence_output) - ) # dna logit value - rna_sequence_output = F.relu( - self.rna_classifier_2(rna_sequence_output) - ) # rna logit value - celltype_sequence_output = F.relu( - self.celltype_classifier_2(celltype_sequence_output) - ) # cell type logit value - - dise_logits = self.dise_classifier( - dise_sequence_output - ) # disease logit value - chem_logits = self.chem_classifier( - chem_sequence_output - ) # chemical logit value - gene_logits = self.gene_classifier( - gene_sequence_output - ) # gene/protein logit value - spec_logits = self.spec_classifier( - spec_sequence_output - ) # species logit value - cellline_logits = self.cellline_classifier( - cellline_sequence_output - ) # cell line logit value - dna_logits = self.dna_classifier(dna_sequence_output) # dna logit value - rna_logits = self.rna_classifier(rna_sequence_output) # rna logit value - celltype_logits = self.celltype_classifier( - celltype_sequence_output - ) # cell type logit value - - # update logit and sequence_output - sequence_output = ( - dise_sequence_output - + chem_sequence_output - + gene_sequence_output - + spec_sequence_output - + cellline_sequence_output - + dna_sequence_output - + rna_sequence_output - + celltype_sequence_output - ) - - logits = ( - dise_logits - + chem_logits - + gene_logits - + spec_logits - + cellline_logits - + dna_logits - + rna_logits - + celltype_logits - ) - - outputs = (logits, sequence_output) - if labels is not None: - loss_fct = CrossEntropyLoss() - # Only keep active parts of the loss - if attention_mask is not None: - if entity_type_ids[0][0].item() == 0: - active_loss = attention_mask.view(-1) == 1 - ( - dise_logits, - chem_logits, - gene_logits, - spec_logits, - cellline_logits, - dna_logits, - rna_logits, - celltype_logits, - ) = logits - - active_dise_logits = dise_logits.view(-1, self.num_labels) - active_chem_logits = chem_logits.view(-1, self.num_labels) - active_gene_logits = gene_logits.view(-1, self.num_labels) - active_spec_logits = spec_logits.view(-1, self.num_labels) - active_cellline_logits = cellline_logits.view(-1, self.num_labels) - active_dna_logits = dna_logits.view(-1, self.num_labels) - active_rna_logits = rna_logits.view(-1, self.num_labels) - active_celltype_logits = celltype_logits.view(-1, self.num_labels) - active_labels = torch.where( - active_loss, - labels.view(-1), - torch.tensor(loss_fct.ignore_index).type_as(labels), - ) - dise_loss = loss_fct(active_dise_logits, active_labels) - chem_loss = loss_fct(active_chem_logits, active_labels) - gene_loss = loss_fct(active_gene_logits, active_labels) - spec_loss = loss_fct(active_spec_logits, active_labels) - cellline_loss = loss_fct(active_cellline_logits, active_labels) - dna_loss = loss_fct(active_dna_logits, active_labels) - rna_loss = loss_fct(active_rna_logits, active_labels) - celltype_loss = loss_fct(active_celltype_logits, active_labels) - - loss = ( - dise_loss - + chem_loss - + gene_loss - + spec_loss - + cellline_loss - + dna_loss - + rna_loss - + celltype_loss - ) - - return (loss,) + outputs - else: - active_loss = attention_mask.view(-1) == 1 - active_logits = logits.view(-1, self.num_labels) - active_labels = torch.where( - active_loss, - labels.view(-1), - torch.tensor(loss_fct.ignore_index).type_as(labels), - ) - loss = loss_fct(active_logits, active_labels) - return (loss,) + outputs - else: - loss = loss_fct(logits.view(-1, self.num_labels), labels.view(-1)) - return loss - else: - return logits - - -class RoBERTaMultiNER2(RobertaForTokenClassification): - def __init__(self, config, num_labels=3): - super(RoBERTaMultiNER2, self).__init__(config) - self.num_labels = num_labels - self.roberta = RobertaModel(config) - self.dropout = torch.nn.Dropout(config.hidden_dropout_prob) - - self.dise_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # disease - self.chem_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # chemical - self.gene_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # gene/protein - self.spec_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # species - self.cellline_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # cell line - self.dna_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # dna - self.rna_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # rna - self.protein_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # protein - self.celltype_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # cell type - - self.dise_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.chem_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.gene_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.spec_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.cellline_classifier_2 = torch.nn.Linear( - config.hidden_size, config.hidden_size - ) - self.dna_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.rna_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.protein_classifier_2 = torch.nn.Linear( - config.hidden_size, config.hidden_size - ) - self.celltype_classifier_2 = torch.nn.Linear( - config.hidden_size, config.hidden_size - ) - - self.init_weights() - - def forward( - self, - input_ids, - token_type_ids=None, - attention_mask=None, - labels=None, - entity_type_ids=None, - ): - sequence_output = self.roberta( - input_ids, - token_type_ids=token_type_ids, - attention_mask=attention_mask, - head_mask=None, - )[0] - batch_size, max_len, feat_dim = sequence_output.shape - sequence_output = self.dropout(sequence_output) - - if entity_type_ids[0][0].item() == 0: - """ - Raw text data with trained parameters - """ - dise_sequence_output = F.relu( - self.dise_classifier_2(sequence_output) - ) # disease logit value - chem_sequence_output = F.relu( - self.chem_classifier_2(sequence_output) - ) # chemical logit value - gene_sequence_output = F.relu( - self.gene_classifier_2(sequence_output) - ) # gene/protein logit value - spec_sequence_output = F.relu( - self.spec_classifier_2(sequence_output) - ) # species logit value - cellline_sequence_output = F.relu( - self.cellline_classifier_2(sequence_output) - ) # cell line logit value - dna_sequence_output = F.relu( - self.dna_classifier_2(sequence_output) - ) # dna logit value - rna_sequence_output = F.relu( - self.rna_classifier_2(sequence_output) - ) # rna logit value - protein_sequence_output = F.relu( - self.protein_classifier_2(sequence_output) - ) # protein logit value - celltype_sequence_output = F.relu( - self.celltype_classifier_2(sequence_output) - ) # cell type logit value - - dise_logits = self.dise_classifier( - dise_sequence_output - ) # disease logit value - chem_logits = self.chem_classifier( - chem_sequence_output - ) # chemical logit value - gene_logits = self.gene_classifier( - gene_sequence_output - ) # gene/protein logit value - spec_logits = self.spec_classifier( - spec_sequence_output - ) # species logit value - cellline_logits = self.cellline_classifier( - cellline_sequence_output - ) # cell line logit value - dna_logits = self.dna_classifier(dna_sequence_output) # dna logit value - rna_logits = self.rna_classifier(rna_sequence_output) # rna logit value - protein_logits = self.protein_classifier( - protein_sequence_output - ) # protein logit value - celltype_logits = self.celltype_classifier( - celltype_sequence_output - ) # cell type logit value - - # update logit and sequence_output - sequence_output = ( - dise_sequence_output - + chem_sequence_output - + gene_sequence_output - + spec_sequence_output - + cellline_sequence_output - + dna_sequence_output - + rna_sequence_output - + protein_sequence_output - + celltype_sequence_output - ) - logits = ( - dise_logits, - chem_logits, - gene_logits, - spec_logits, - cellline_logits, - dna_logits, - rna_logits, - protein_logits, - celltype_logits, - ) - else: - """ - Train, Eval, Test with pre-defined entity type tags - """ - # make 1*1 conv to adopt entity type - dise_idx = copy.deepcopy(entity_type_ids) - chem_idx = copy.deepcopy(entity_type_ids) - gene_idx = copy.deepcopy(entity_type_ids) - spec_idx = copy.deepcopy(entity_type_ids) - cellline_idx = copy.deepcopy(entity_type_ids) - dna_idx = copy.deepcopy(entity_type_ids) - rna_idx = copy.deepcopy(entity_type_ids) - protein_idx = copy.deepcopy(entity_type_ids) - celltype_idx = copy.deepcopy(entity_type_ids) - - dise_idx[dise_idx != 1] = 0 - chem_idx[chem_idx != 2] = 0 - gene_idx[gene_idx != 3] = 0 - spec_idx[spec_idx != 4] = 0 - cellline_idx[cellline_idx != 5] = 0 - dna_idx[dna_idx != 6] = 0 - rna_idx[rna_idx != 7] = 0 - protein_idx[protein_idx != 8] = 0 - celltype_idx[celltype_idx != 9] = 0 - - dise_sequence_output = dise_idx.unsqueeze(-1) * sequence_output - chem_sequence_output = chem_idx.unsqueeze(-1) * sequence_output - gene_sequence_output = gene_idx.unsqueeze(-1) * sequence_output - spec_sequence_output = spec_idx.unsqueeze(-1) * sequence_output - cellline_sequence_output = cellline_idx.unsqueeze(-1) * sequence_output - dna_sequence_output = dna_idx.unsqueeze(-1) * sequence_output - rna_sequence_output = rna_idx.unsqueeze(-1) * sequence_output - protein_sequence_output = protein_idx.unsqueeze(-1) * sequence_output - celltype_sequence_output = celltype_idx.unsqueeze(-1) * sequence_output - - # F.tanh or F.relu - dise_sequence_output = F.relu( - self.dise_classifier_2(dise_sequence_output) - ) # disease logit value - chem_sequence_output = F.relu( - self.chem_classifier_2(chem_sequence_output) - ) # chemical logit value - gene_sequence_output = F.relu( - self.gene_classifier_2(gene_sequence_output) - ) # gene/protein logit value - spec_sequence_output = F.relu( - self.spec_classifier_2(spec_sequence_output) - ) # species logit value - cellline_sequence_output = F.relu( - self.cellline_classifier_2(cellline_sequence_output) - ) # cell line logit value - dna_sequence_output = F.relu( - self.dna_classifier_2(dna_sequence_output) - ) # dna logit value - rna_sequence_output = F.relu( - self.rna_classifier_2(rna_sequence_output) - ) # rna logit value - protein_sequence_output = F.relu( - self.protein_classifier_2(protein_sequence_output) - ) # protein logit value - celltype_sequence_output = F.relu( - self.celltype_classifier_2(celltype_sequence_output) - ) # cell type logit value - - dise_logits = self.dise_classifier( - dise_sequence_output - ) # disease logit value - chem_logits = self.chem_classifier( - chem_sequence_output - ) # chemical logit value - gene_logits = self.gene_classifier( - gene_sequence_output - ) # gene/protein logit value - spec_logits = self.spec_classifier( - spec_sequence_output - ) # species logit value - cellline_logits = self.cellline_classifier( - cellline_sequence_output - ) # cell line logit value - dna_logits = self.dna_classifier(dna_sequence_output) # dna logit value - rna_logits = self.rna_classifier(rna_sequence_output) # rna logit value - protein_logits = self.protein_classifier( - protein_sequence_output - ) # protein logit value - celltype_logits = self.celltype_classifier( - celltype_sequence_output - ) # cell type logit value - - # update logit and sequence_output - sequence_output = ( - dise_sequence_output - + chem_sequence_output - + gene_sequence_output - + spec_sequence_output - + cellline_sequence_output - + dna_sequence_output - + rna_sequence_output - + protein_sequence_output - + celltype_sequence_output - ) - logits = ( - dise_logits - + chem_logits - + gene_logits - + spec_logits - + cellline_logits - + dna_logits - + rna_logits - + protein_logits - + celltype_logits - ) - - outputs = (logits, sequence_output) - if labels is not None: - loss_fct = CrossEntropyLoss() - # Only keep active parts of the loss - if attention_mask is not None: - if entity_type_ids[0][0].item() == 0: - active_loss = attention_mask.view(-1) == 1 - ( - dise_logits, - chem_logits, - gene_logits, - spec_logits, - cellline_logits, - dna_logits, - rna_logits, - protein_logits, - celltype_logits, - ) = logits - - active_dise_logits = dise_logits.view(-1, self.num_labels) - active_chem_logits = chem_logits.view(-1, self.num_labels) - active_gene_logits = gene_logits.view(-1, self.num_labels) - active_spec_logits = spec_logits.view(-1, self.num_labels) - active_cellline_logits = cellline_logits.view(-1, self.num_labels) - active_dna_logits = dna_logits.view(-1, self.num_labels) - active_rna_logits = rna_logits.view(-1, self.num_labels) - active_protein_logits = protein_logits.view(-1, self.num_labels) - active_celltype_logits = celltype_logits.view(-1, self.num_labels) - - active_labels = torch.where( - active_loss, - labels.view(-1), - torch.tensor(loss_fct.ignore_index).type_as(labels), - ) - dise_loss = loss_fct(active_dise_logits, active_labels) - chem_loss = loss_fct(active_chem_logits, active_labels) - gene_loss = loss_fct(active_gene_logits, active_labels) - spec_loss = loss_fct(active_spec_logits, active_labels) - cellline_loss = loss_fct(active_cellline_logits, active_labels) - dna_loss = loss_fct(active_dna_logits, active_labels) - rna_loss = loss_fct(active_rna_logits, active_labels) - protein_loss = loss_fct(active_protein_logits, active_labels) - celltype_loss = loss_fct(active_celltype_logits, active_labels) - loss = ( - dise_loss - + chem_loss - + gene_loss - + spec_loss - + cellline_loss - + dna_loss - + rna_loss - + protein_loss - + celltype_loss - ) - - return (loss,) + outputs - else: - active_loss = attention_mask.view(-1) == 1 - active_logits = logits.view(-1, self.num_labels) - active_labels = torch.where( - active_loss, - labels.view(-1), - torch.tensor(loss_fct.ignore_index).type_as(labels), - ) - loss = loss_fct(active_logits, active_labels) - return (loss,) + outputs - else: - loss = loss_fct(logits.view(-1, self.num_labels), labels.view(-1)) - return loss - else: - return logits diff --git a/source/Parser/normalizer.py b/source/Parser/normalizer.py deleted file mode 100644 index 2266c08e..00000000 --- a/source/Parser/normalizer.py +++ /dev/null @@ -1,422 +0,0 @@ -import os -import socket -from concurrent.futures import ThreadPoolExecutor - -from Parser.normalizers.neural_normalizer import NeuralNormalizer -from Parser.normalizers.normalizer_all import ( - CellLineNormalizer, - CellTypeNormalizer, - ChemicalNormalizer, - ProcedureNormalizer, - SignSymptomNormalizer, - SpeciesNormalizer, -) - -time_format = "[%d/%b/%Y %H:%M:%S.%f]" - - -class Normalizer: - def __init__( - self, use_neural_normalizer, gene_port=18888, disease_port=18892, no_cuda=False - ): - self.BASE_DIR = "Parser/resources/normalization/" - self.NORM_INPUT_DIR = { - "disease": os.path.join(self.BASE_DIR, "inputs/disease"), - "gene": os.path.join(self.BASE_DIR, "inputs/gene"), - } - self.NORM_OUTPUT_DIR = { - "disease": os.path.join(self.BASE_DIR, "outputs/disease"), - "gene": os.path.join(self.BASE_DIR, "outputs/gene"), - } - - self.NORM_DICT_PATH = { - "drug": os.path.join(self.BASE_DIR, "dictionary/dict_ChemicalsDrugs.txt"), - "gene": "setup.txt", - "species": os.path.join(self.BASE_DIR, "dictionary/dict_Species.txt"), - "cell line": os.path.join(self.BASE_DIR, "dictionary/dict_CellLine.txt"), - "cell type": os.path.join(self.BASE_DIR, "dictionary/dict_CellType.txt"), - "procedure": os.path.join(self.BASE_DIR, "dictionary/dict_Procedures.txt"), - "sign symptom": os.path.join( - self.BASE_DIR, "dictionary/dict_SignSymptom.txt" - ), - } - - self.NEURAL_NORM_MODEL_PATH = { - "disease": "dmis-lab/biosyn-sapbert-bc5cdr-disease", - "sign symptom": "dmis-lab/biosyn-sapbert-bc5cdr-disease", - "drug": "dmis-lab/biosyn-sapbert-bc5cdr-chemical", - "gene": "dmis-lab/biosyn-sapbert-bc2gn", - } - self.NEURAL_NORM_CACHE_PATH = { - "disease": os.path.join( - self.BASE_DIR, - "normalizers/neural_norm_caches/dict_Disease_20210630.txt.pk", - ), - "sign symptom": os.path.join( - self.BASE_DIR, - "normalizers/neural_norm_caches/dict_Disease_20210630.txt.pk", - ), - "drug": os.path.join( - self.BASE_DIR, - "normalizers/neural_norm_caches/dict_ChemicalCompound_20210630.txt.pk", - ), - "gene": os.path.join( - self.BASE_DIR, "normalizers/neural_norm_caches/dict_Gene.txt.pk" - ), - } - - self.NORM_MODEL_VERSION = "N/A" - self.HOST = "127.0.0.1" - self.GENE_PORT = gene_port - self.DISEASE_PORT = disease_port - self.NO_ENTITY_ID = "CUI-less" - self.use_neural_normalizer = use_neural_normalizer - - # Load normalizers concurrently - with ThreadPoolExecutor() as executor: - future_dict = { - "chemical": executor.submit( - ChemicalNormalizer, self.NORM_DICT_PATH["drug"] - ), - "species": executor.submit( - SpeciesNormalizer, self.NORM_DICT_PATH["species"] - ), - "cellline": executor.submit( - CellLineNormalizer, self.NORM_DICT_PATH["cell line"] - ), - "celltype": executor.submit( - CellTypeNormalizer, self.NORM_DICT_PATH["cell type"] - ), - "procedure": executor.submit( - ProcedureNormalizer, self.NORM_DICT_PATH["procedure"] - ), - "sign symptom": executor.submit( - SignSymptomNormalizer, self.NORM_DICT_PATH["sign symptom"] - ), - } - - self.chemical_normalizer = future_dict["chemical"].result() - self.species_normalizer = future_dict["species"].result() - self.cellline_normalizer = future_dict["cellline"].result() - self.celltype_normalizer = future_dict["celltype"].result() - self.procedure_normalizer = future_dict["procedure"].result() - self.sign_symptom_normalizer = future_dict["sign symptom"].result() - - if self.use_neural_normalizer: - with ThreadPoolExecutor() as executor: - future_dict = { - "neural_disease": executor.submit( - NeuralNormalizer, - model_name_or_path=self.NEURAL_NORM_MODEL_PATH["disease"], - cache_path=self.NEURAL_NORM_CACHE_PATH["disease"], - no_cuda=no_cuda, - ), - "neural_sign symptom": executor.submit( - NeuralNormalizer, - model_name_or_path=self.NEURAL_NORM_MODEL_PATH["sign symptom"], - cache_path=self.NEURAL_NORM_CACHE_PATH["sign symptom"], - no_cuda=no_cuda, - ), - "neural_chemical": executor.submit( - NeuralNormalizer, - model_name_or_path=self.NEURAL_NORM_MODEL_PATH["drug"], - cache_path=self.NEURAL_NORM_CACHE_PATH["drug"], - no_cuda=no_cuda, - ), - "neural_gene": executor.submit( - NeuralNormalizer, - model_name_or_path=self.NEURAL_NORM_MODEL_PATH["gene"], - cache_path=self.NEURAL_NORM_CACHE_PATH["gene"], - no_cuda=no_cuda, - ), - } - self.neural_disease_normalizer = future_dict["neural_disease"].result() - self.neural_sign_symptom_normalizer = future_dict[ - "neural_sign symptom" - ].result() - self.neural_chemical_normalizer = future_dict[ - "neural_chemical" - ].result() - self.neural_gene_normalizer = future_dict["neural_gene"].result() - - def normalize(self, base_name, doc_dict_list): - names = dict() - saved_items = list() - ent_cnt = 0 - abs_cnt = 0 - - for item in doc_dict_list: - content = item["abstract"] - entities = item["entities"] - - abs_cnt += 1 - - for ent_type, locs in entities.items(): - ent_cnt += len(locs) - for loc in locs: - loc["end"] += 1 - name = content[loc["start"] : loc["end"]] - if ent_type in names: - names[ent_type].append([name, len(saved_items)]) - else: - names[ent_type] = [[name, len(saved_items)]] - - item["norm_model"] = self.NORM_MODEL_VERSION - saved_items.append(item) - - results = list() - with ThreadPoolExecutor() as executor: - futures = [] - for ent_type in names.keys(): - futures.append( - executor.submit( - self.run_normalizers_wrap, - ent_type, - base_name, - names, - saved_items, - results, - ) - ) - for future in futures: - future.result() - - for ent_type, type_oids in results: - oid_cnt = 0 - for saved_item in saved_items: - for loc in saved_item["entities"][ent_type]: - loc["id"] = type_oids[oid_cnt] - loc["is_neural_normalized"] = False - oid_cnt += 1 - - return saved_items - - def neural_normalize(self, ent_type, tagged_docs): - abstract = tagged_docs[0]["abstract"] - entities = tagged_docs[0]["entities"][ent_type] - entity_names = [abstract[e["start"] : e["end"]] for e in entities] - cuiless_entity_names = [] - for entity, entity_name in zip(entities, entity_names): - if entity["id"] == self.NO_ENTITY_ID: - cuiless_entity_names.append(entity_name) - cuiless_entity_names = list(set(cuiless_entity_names)) - - if len(cuiless_entity_names) == 0: - return tagged_docs - - norm_entities = [] - if ent_type == "disease": - norm_entities = self.neural_disease_normalizer.normalize( - names=cuiless_entity_names - ) - elif ent_type == "drug": - norm_entities = self.neural_chemical_normalizer.normalize( - names=cuiless_entity_names - ) - elif ent_type == "gene": - norm_entities = self.neural_gene_normalizer.normalize( - names=cuiless_entity_names - ) - elif ent_type == "sign symptom": - norm_entities = self.neural_sign_symptom_normalizer.normalize( - names=cuiless_entity_names - ) - - cuiless_entity2norm_entities = { - c: n for c, n in zip(cuiless_entity_names, norm_entities) - } - for entity, entity_name in zip(entities, entity_names): - if entity_name in cuiless_entity2norm_entities: - cui = cuiless_entity2norm_entities[entity_name][0] - entity["id"] = cui if cui != -1 else self.NO_ENTITY_ID - entity["is_neural_normalized"] = True - else: - entity["is_neural_normalized"] = False - - return tagged_docs - - def run_normalizers_wrap(self, ent_type, base_name, names, saved_items, results): - results.append( - (ent_type, self.run_normalizer(ent_type, base_name, names, saved_items)) - ) - - def run_normalizer(self, ent_type, base_name, names, saved_items): - name_ptr = names[ent_type] - oids = list() - bufsize = 4 - - base_thread_name = base_name - input_filename = base_thread_name + ".concept" - output_filename = base_thread_name + ".oid" - - if ent_type in ["disease"]: - norm_inp_path = os.path.join(self.NORM_INPUT_DIR[ent_type], input_filename) - norm_abs_path = os.path.join( - self.NORM_INPUT_DIR[ent_type], base_thread_name + ".txt" - ) - with open(norm_inp_path, "w") as norm_inp_f: - for name, _ in name_ptr: - norm_inp_f.write(name + "\n") - with open(norm_abs_path, "w") as _: - pass - - s = socket.socket() - s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) - try: - s.connect((self.HOST, self.DISEASE_PORT)) - s.send("{}".format(base_thread_name).encode("utf-8")) - s.recv(bufsize) - except ConnectionRefusedError: - os.remove(norm_inp_path) - os.remove(norm_abs_path) - s.close() - return oids - s.close() - - norm_out_path = os.path.join( - self.NORM_OUTPUT_DIR[ent_type], output_filename - ) - if os.path.exists(norm_out_path): - with open(norm_out_path, "r") as norm_out_f: - for line in norm_out_f: - oid = line[:-1] - oids.append( - oid if oid != self.NO_ENTITY_ID else self.NO_ENTITY_ID - ) - os.remove(norm_out_path) - else: - for _ in range(len(name_ptr)): - oids.append(self.NO_ENTITY_ID) - - elif ent_type in ["drug"]: - names = [ptr[0] for ptr in name_ptr] - preds = self.chemical_normalizer.normalize(names) - oids.extend(preds) - - elif ent_type == "mutation": - pass - - elif ent_type == "species": - names = [ptr[0] for ptr in name_ptr] - preds = self.species_normalizer.normalize(names) - for pred in preds: - if pred != self.NO_ENTITY_ID: - pred = int(pred) // 100 - oids.append("NCBI:txid{}".format(pred)) - else: - oids.append(self.NO_ENTITY_ID) - - elif ent_type == "cell line": - names = [ptr[0] for ptr in name_ptr] - preds = self.cellline_normalizer.normalize(names) - oids.extend(preds) - - elif ent_type == "cell type": - names = [ptr[0] for ptr in name_ptr] - preds = self.celltype_normalizer.normalize(names) - oids.extend(preds) - - elif ent_type == "gene": - s = socket.socket() - s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) - try: - s.connect((self.HOST, self.GENE_PORT)) - except ConnectionRefusedError: - s.close() - return oids - - norm_inp_path = os.path.join(self.NORM_INPUT_DIR[ent_type], input_filename) - norm_abs_path = os.path.join( - self.NORM_INPUT_DIR[ent_type], base_thread_name + ".txt" - ) - - with ( - open(norm_inp_path, "w") as norm_inp_f, - open(norm_abs_path, "w") as norm_abs_f, - ): - for saved_item in saved_items: - entities = saved_item["entities"][ent_type] - if len(entities) == 0: - continue - - abstract_title = saved_item["abstract"] - ent_names = [ - abstract_title[loc["start"] : loc["end"]] for loc in entities - ] - - norm_abs_f.write(saved_item["pmid"] + "||" + abstract_title + "\n") - norm_inp_f.write("||".join(ent_names) + "\n") - - gene_input_dir = os.path.abspath(self.NORM_INPUT_DIR[ent_type]) - gene_output_dir = os.path.abspath(self.NORM_OUTPUT_DIR[ent_type]) - setup_dir = self.NORM_DICT_PATH[ent_type] - - jar_args = ( - "\t".join( - [ - gene_input_dir, - gene_output_dir, - setup_dir, - "9606", - base_thread_name, - ] - ) - + "\n" - ) - s.send(jar_args.encode("utf-8")) - s.recv(bufsize) - s.close() - - norm_out_path = os.path.join(gene_output_dir, output_filename) - if os.path.exists(norm_out_path): - with ( - open(norm_out_path, "r") as norm_out_f, - open(norm_inp_path, "r") as norm_in_f, - ): - for line, input_l in zip(norm_out_f, norm_in_f): - gene_ids, gene_mentions = ( - line[:-1].split("||"), - input_l[:-1].split("||"), - ) - for gene_id, gene_mention in zip(gene_ids, gene_mentions): - eid = ( - "EntrezGene:" + gene_id - if gene_id.lower() != "cui-less" - else self.NO_ENTITY_ID - ) - oids.append(eid) - - os.remove(norm_out_path) - else: - for _ in range(len(name_ptr)): - oids.append(self.NO_ENTITY_ID) - - os.remove(norm_inp_path) - os.remove(norm_abs_path) - - elif ent_type in [ - "diagnostic test", - "treatment", - "radiology", - "surgical procedure", - "laboratory test", - "genomic analysis technique", - ]: - names = [ptr[0] for ptr in name_ptr] - preds = self.procedure_normalizer.normalize(names) - oids.extend(preds) - - elif ent_type == "sign symptom": - names = [ptr[0] for ptr in name_ptr] - preds = self.sign_symptom_normalizer.normalize(names) - oids.extend(preds) - - else: - names = [ptr[0] for ptr in name_ptr] - oids.extend([self.NO_ENTITY_ID] * len(names)) - - assert len(oids) == len(name_ptr), "{} vs {} in {}".format( - len(oids), len(name_ptr), ent_type - ) - - return oids diff --git a/source/Parser/normalizers/__init__.py b/source/Parser/normalizers/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/source/Parser/normalizers/cellline_normalizer.py b/source/Parser/normalizers/cellline_normalizer.py deleted file mode 100644 index 05ea2277..00000000 --- a/source/Parser/normalizers/cellline_normalizer.py +++ /dev/null @@ -1,24 +0,0 @@ -class CellLineNormalizer(object): - def __init__(self, dict_path): - self.NO_ENTITY_ID = "CUI-less" - - # Create dictionary for exact match - self.cl2oid = dict() - with open(dict_path, "r", encoding="utf-8") as f: - for line in f: - oid, names = line[:-1].split("||") - names = names.split("|") - for name in names: - self.cl2oid[name] = oid - - def normalize(self, names): - oids = list() - for name in names: - if name in self.cl2oid: - oids.append(self.cl2oid[name]) - elif name.lower() in self.cl2oid: - oids.append(self.cl2oid[name.lower()]) - else: - oids.append(self.NO_ENTITY_ID) - - return oids diff --git a/source/Parser/normalizers/celltype_normalizer.py b/source/Parser/normalizers/celltype_normalizer.py deleted file mode 100644 index 5074712d..00000000 --- a/source/Parser/normalizers/celltype_normalizer.py +++ /dev/null @@ -1,40 +0,0 @@ -import spacy -import re - -# Load only the lemmatizer component -nlp = spacy.load("en_core_web_sm") -nlp.add_pipe("lemmatizer") -nlp.initialize() - - -class CellTypeNormalizer(object): - def __init__(self, dict_path): - self.NO_ENTITY_ID = "CUI-less" - - # Create dictionary for exact match - self.ct2oid = dict() - with open(dict_path, "r", encoding="utf-8") as f: - for line in f: - oid, names = line.strip().split("||") - names = names.split("|") - for name in names: - normalized_name = self.get_tmchem_name(name) - self.ct2oid[normalized_name] = oid - - def normalize(self, names): - oids = [] - for name in names: - normalized_name = self.get_tmchem_name(name) - if normalized_name in self.ct2oid: - oids.append(self.ct2oid[normalized_name]) - else: - oids.append(self.NO_ENTITY_ID) - return oids - - def get_tmchem_name(self, name): - # Lowercase and remove all whitespace and punctuation - cleaned_name = re.sub(r"[^\w\s-]", "", name.lower()).replace(" ", "") - # Use SpaCy to lemmatize the cleaned name - doc = nlp(cleaned_name) - lemmatized_name = "".join([token.lemma_ for token in doc]) - return lemmatized_name diff --git a/source/Parser/normalizers/chemical_normalizer.py b/source/Parser/normalizers/chemical_normalizer.py deleted file mode 100644 index f9e4ea37..00000000 --- a/source/Parser/normalizers/chemical_normalizer.py +++ /dev/null @@ -1,45 +0,0 @@ -import re - -import nltk -from nltk.stem import WordNetLemmatizer - -# Download NLTK resources quietly -nltk.download("wordnet", quiet=True) -nltk.download("omw-1.4", quiet=True) - - -class ChemicalNormalizer(object): - def __init__(self, dict_path): - self.NO_ENTITY_ID = "CUI-less" - self.lemmatizer = WordNetLemmatizer() - - # Create dictionary for exact match - self.chem2oid = dict() - with open(dict_path, "r", encoding="utf-8") as f: - for line in f: - oid, names = line[:-1].split("||") - names = names.split("|") - for name in names: - # a part of tmChem normalization - normalized_name = self.get_tmchem_name(name) - self.chem2oid[normalized_name] = oid - - def normalize(self, names): - oids = list() - for name in names: - # a part of tmChem normalization - normalized_name = self.get_tmchem_name(name) - - if normalized_name in self.chem2oid: - oids.append(self.chem2oid[normalized_name]) - else: - oids.append(self.NO_ENTITY_ID) - - return oids - - def get_tmchem_name(self, name): - # 1. lowercase, 2. removes all whitespace and punctuation - # https://jcheminf.biomedcentral.com/articles/10.1186/1758-2946-7-S1-S3 - cleaned_name = re.sub(r"[^\w\s]", "", name.lower()).replace(" ", "") - lemmatized_name = self.lemmatizer.lemmatize(cleaned_name) - return lemmatized_name diff --git a/source/Parser/normalizers/neural_normalizer.py b/source/Parser/normalizers/neural_normalizer.py deleted file mode 100644 index bf8c48a8..00000000 --- a/source/Parser/normalizers/neural_normalizer.py +++ /dev/null @@ -1,207 +0,0 @@ -import argparse -import os -import pickle -import re -from string import punctuation - -import faiss -import numpy as np -import torch -from torch.utils.data import DataLoader, Dataset -from tqdm import tqdm -from transformers import AutoModel, AutoTokenizer, default_data_collator - - -class NamesDataset(Dataset): - def __init__(self, encodings, device): - self.encodings = encodings - self.device = device - - def __getitem__(self, idx): - return { - key: torch.tensor(val[idx]).to(self.device) - for key, val in self.encodings.items() - } - - def __len__(self): - return len(self.encodings["input_ids"]) - - -class NeuralNormalizer: - def __init__(self, model_name_or_path, cache_path=None, no_cuda=False): - self.max_length = 25 - self.batch_size = 1024 - self.k = 1 # top k - - # device setup - use_cuda = torch.cuda.is_available() and not no_cuda - self.device = torch.device("cuda" if use_cuda else "cpu") - - # tokenizer and model - self.tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) - # Ensure proper initialization of the model - self.model = AutoModel.from_pretrained(model_name_or_path, device_map=None) - self.model.to_empty(device=self.device) # Use to_empty to handle meta tensors - self.model.eval() - - # regex for basic normalization - self.rmv_puncts_regex = re.compile(r"[\s{}]+".format(re.escape(punctuation))) - - # optionally load existing cache - if cache_path: - self.load_cache(cache_path) - - def load_dictionary(self, dictionary_path=""): - self.dictionary = [] - with open(dictionary_path, "r", encoding="utf-8") as f: - for line in f: - line = line.strip() - if not line: - continue - cui, names = line.split("||") - for name in names.split("|"): - normalized = self._basic_normalize(name) - tokens = self.tokenizer.tokenize(normalized) - if len(tokens) <= self.max_length: - self.dictionary.append((cui, name)) - - # embed dictionary entries - self.dict_embeds = self._embed_dictionary() - - def normalize(self, names): - if not names: - return [] - - names_norm = [self._basic_normalize(n) for n in names] - - # encode inputs - encodings = self.tokenizer( - names_norm, - padding="max_length", - max_length=self.max_length, - truncation=True, - return_tensors=None, - ) - dataset = NamesDataset(encodings, self.device) - loader = DataLoader( - dataset, - batch_size=self.batch_size, - shuffle=False, - collate_fn=default_data_collator, - ) - - # compute embeddings - embeds = [] - with torch.no_grad(): - for batch in loader: - out = self.model(**batch) - cls_emb = out.last_hidden_state[:, 0].cpu().numpy() - embeds.append(cls_emb) - name_embeds = np.vstack(embeds) - - # search FAISS index - distances, indices = self.dict_embeds.search(name_embeds, self.k) - top_indices = indices[:, 0] - - # gather outputs - results = [] - for idx in top_indices: - if idx >= 0: - results.append(self.dictionary[idx]) - else: - results.append((None, None)) - return results - - def _basic_normalize(self, text): - text = text.lower() - text = re.sub(self.rmv_puncts_regex, " ", text) - return " ".join(text.split()) - - def _embed_dictionary(self, show_progress=True): - encs = self.tokenizer( - [self._basic_normalize(name) for _, name in self.dictionary], - padding="max_length", - max_length=self.max_length, - truncation=True, - return_tensors=None, - ) - dataset = NamesDataset(encs, self.device) - loader = DataLoader( - dataset, - batch_size=self.batch_size, - shuffle=False, - collate_fn=default_data_collator, - ) - - embeds = [] - with torch.no_grad(): - for batch in tqdm(loader, disable=not show_progress): - out = self.model(**batch) - cls_emb = out.last_hidden_state[:, 0].cpu().numpy() - embeds.append(cls_emb) - all_embeds = np.vstack(embeds) - return all_embeds - - def save_cache(self, cache_path): - # build FAISS index - dim = self.dict_embeds.shape[1] - quantiser = faiss.IndexFlatIP(dim) - nlist = 2048 - index = faiss.IndexIVFFlat(quantiser, dim, nlist, faiss.METRIC_INNER_PRODUCT) - index.train(self.dict_embeds) - index.add(self.dict_embeds) - index.nprobe = 25 - - faiss.write_index(index, cache_path + ".index") - with open(cache_path, "wb") as f: - pickle.dump(self.dictionary, f) - - def load_cache(self, cache_path): - self.dict_embeds = faiss.read_index(cache_path + ".index") - with open(cache_path, "rb") as f: - self.dictionary = pickle.load(f) - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument("--mode", choices=["indexing", "predict"], default="indexing") - parser.add_argument( - "--model_name_or_path", default="cambridgeltl/SapBERT-from-PubMedBERT-fulltext" - ) - parser.add_argument( - "--dictionary_path", - default="../normalization/resources/dictionary/best_dict_Disease_20210630_tmp.txt", - ) - parser.add_argument("--cache_dir", default="../normalization/biosyn_cache") - parser.add_argument("--no_cuda", action="store_true") - args = parser.parse_args() - - normalizer = NeuralNormalizer( - model_name_or_path=args.model_name_or_path, - cache_path=None, - no_cuda=args.no_cuda, - ) - - if args.mode == "indexing": - normalizer.load_dictionary(dictionary_path=args.dictionary_path) - os.makedirs(args.cache_dir, exist_ok=True) - cache_path = os.path.join( - args.cache_dir, os.path.basename(args.dictionary_path) + ".pk" - ) - normalizer.save_cache(cache_path) - print("Indexing complete. Cache saved to", cache_path) - - elif args.mode == "predict": - # load cache - normalizer.load_cache( - os.path.join(args.cache_dir, os.path.basename(args.dictionary_path) + ".pk") - ) - # example prediction - samples = ["diabetes", "heart disease"] - results = normalizer.normalize(samples) - for inp, out in zip(samples, results): - print(f"{inp} => {out}") - - -if __name__ == "__main__": - main() diff --git a/source/Parser/normalizers/normalizer_all.py b/source/Parser/normalizers/normalizer_all.py deleted file mode 100644 index e7171149..00000000 --- a/source/Parser/normalizers/normalizer_all.py +++ /dev/null @@ -1,137 +0,0 @@ -import re -import os -from datetime import datetime -from rapidfuzz import fuzz - - -class BaseNormalizer: - """ - Base class for flexible normalization with exact and similarity-based matching. - """ - - def __init__(self, dict_path, nlp=None, similarity_threshold=0.5): - self.NO_ENTITY_ID = "CUI-less" - self.similarity_threshold = similarity_threshold - self.nlp = nlp - self.entity2oid = dict() - - self.load_dictionary(dict_path) - - def load_dictionary(self, dict_path): - """ - Load dictionary from the given path and normalize keys for matching. - """ - print( - datetime.now().strftime("[%d/%b/%Y %H:%M:%S.%f]"), "Loading dictionary..." - ) - with open(dict_path, "r", encoding="utf-8") as f: - for line in f: - oid, names = line.strip().split("||") - names = names.split("|") - for name in names: - normalized_name = self.normalize_string(name) - self.entity2oid[normalized_name] = oid - print(datetime.now().strftime("[%d/%b/%Y %H:%M:%S.%f]"), "Dictionary loaded.") - - def normalize(self, names): - """ - Normalize a list of names and return their corresponding IDs. - """ - oids = list() - for name in names: - normalized_name = self.get_tmchem_name(name) - - # Exact match - if normalized_name in self.entity2oid: - oids.append(self.entity2oid[normalized_name]) - else: - # Flexible match based on similarity score - best_match = self.find_best_match(normalized_name) - if best_match: - oids.append(self.entity2oid[best_match]) - else: - oids.append(self.NO_ENTITY_ID) - - return oids - - def get_tmchem_name(self, name): - """ - Normalize a name using lowercasing, punctuation removal, and lemmatization (if NLP is enabled). - """ - cleaned_name = re.sub( - r"[^\w\s-]", "", name.lower() - ) # Remove punctuation but keep hyphens - if self.nlp: - doc = self.nlp(cleaned_name) - lemmatized_name = " ".join([token.lemma_ for token in doc]) - else: - lemmatized_name = cleaned_name - return self.normalize_string(lemmatized_name) - - def normalize_string(self, text): - """ - Normalize a string for matching by removing spaces and hyphens. - """ - return re.sub(r"[\s-]", "", text.lower()) - - def find_best_match(self, normalized_name): - """ - Find the best match for a given normalized name based on a similarity score. - """ - best_match = None - highest_score = 0 - - for key in self.entity2oid.keys(): - score = self.similarity_score(normalized_name, key) - if score > self.similarity_threshold and score > highest_score: - best_match = key - highest_score = score - - return best_match - - def similarity_score(self, name1, name2): - """ - Use RapidFuzz's token_sort_ratio for fast and accurate similarity scoring. - """ - return fuzz.token_sort_ratio(name1, name2) / 100 # Normalize score to 0-1 range - - -class CellTypeNormalizer(BaseNormalizer): - pass - - -class ProcedureNormalizer(BaseNormalizer): - pass - - -class ChemicalNormalizer(BaseNormalizer): - def load_dictionary(self, dict_path): - """ - Specialized dictionary loader for chemical normalizer with file size logging. - """ - dict_size = os.path.getsize(dict_path) - print( - datetime.now().strftime("[%d/%b/%Y %H:%M:%S.%f]"), - f"Chemical dictionary file size: {dict_size} bytes", - ) - super().load_dictionary(dict_path) - - -class CellLineNormalizer(BaseNormalizer): - def get_tmchem_name(self, name): - """ - Simplified name normalization for cell line data. - """ - return self.normalize_string(name) - - -class SpeciesNormalizer(BaseNormalizer): - def get_tmchem_name(self, name): - """ - Simplified name normalization for species data. - """ - return self.normalize_string(name) - - -class SignSymptomNormalizer(BaseNormalizer): - pass diff --git a/source/Parser/normalizers/readme.md b/source/Parser/normalizers/readme.md deleted file mode 100644 index 9b5a93ae..00000000 --- a/source/Parser/normalizers/readme.md +++ /dev/null @@ -1,22 +0,0 @@ -# Neural normalizer - -## How to index dictionary embeddings -``` -# index disease -CUDA_VISIBLE_DEVICES=0 python neural_normalizer.py \ - --model_name_or_path dmis-lab/biosyn-sapbert-bc5cdr-disease \ - --dictionary_path ../resources/normalization/dictionary/dict_Disease_20210630.txt \ - --cache_dir ../resources/normalization/normalizers/neural_norm_caches - -# index chemical -CUDA_VISIBLE_DEVICES=0 python neural_normalizer.py \ - --model_name_or_path dmis-lab/biosyn-sapbert-bc5cdr-chemical \ - --dictionary_path ../resources/normalization/dictionary/dict_ChemicalCompound_20210630.txt \ - --cache_dir ../resources/normalization/normalizers/neural_norm_caches - -# index gene -CUDA_VISIBLE_DEVICES=0 python neural_normalizer.py \ - --model_name_or_path dmis-lab/biosyn-sapbert-bc2gn \ - --dictionary_path ../resources/normalization/dictionary/dict_Gene.txt \ - --cache_dir ../resources/normalization/normalizers/neural_norm_caches -``` diff --git a/source/Parser/normalizers/species_normalizer.py b/source/Parser/normalizers/species_normalizer.py deleted file mode 100644 index bb024c23..00000000 --- a/source/Parser/normalizers/species_normalizer.py +++ /dev/null @@ -1,25 +0,0 @@ -class SpeciesNormalizer(object): - def __init__(self, dict_path): - self.NO_ENTITY_ID = "CUI-less" - - # Create dictionary for exact match - self.species2oid = dict() - with open(dict_path, "r", encoding="utf-8") as f: - for line in f: - oid, names = line[:-1].split("||") - names = names.split("|") - for name in names: - # a part of tmChem normalization - self.species2oid[name] = oid - - def normalize(self, names): - oids = list() - for name in names: - if name in self.species2oid: - oids.append(self.species2oid[name]) - elif name.lower() in self.species2oid: - oids.append(self.species2oid[name.lower()]) - else: - oids.append(self.NO_ENTITY_ID) - - return oids diff --git a/source/Parser/ops.py b/source/Parser/ops.py deleted file mode 100644 index 08668a1e..00000000 --- a/source/Parser/ops.py +++ /dev/null @@ -1,449 +0,0 @@ -import re -import time - -import numpy as np - -tokenize_regex = re.compile(r"([0-9a-zA-Z]+|[^0-9a-zA-Z])") - - -def json_to_sent(data): - """data: list of json file [{pmid,abstract,title}, ...]""" - out = dict() - for paper in data: - sentences = list() - - if len(CoNLL_tokenizer(paper["title"])) < 50: - title = [paper["title"]] - else: - title = sentence_split(paper["title"]) - if len(title) != 1 or len(title[0].strip()) > 0: - sentences.extend(title) - - if len(paper["abstract"]) > 0: - abst = sentence_split(paper["abstract"]) - if len(abst) != 1 or len(abst[0].strip()) > 0: - sentences.extend(abst) - out[paper["pmid"]] = dict() - out[paper["pmid"]]["sentence"] = sentences - return out - - -def input_form(sent_data): - """sent_data: dict of sentence, key=pmid {pmid:[sent,sent, ...], pmid: ...}""" - for pmid in sent_data: - sent_data[pmid]["words"] = list() - sent_data[pmid]["wordPos"] = list() - doc_piv = 0 - for sent in sent_data[pmid]["sentence"]: - wids = list() - wpos = list() - sent_piv = 0 - tok = CoNLL_tokenizer(sent) - - for w in tok: - if len(w) > 20: - wids.append(w[:10]) - else: - wids.append(w) - - start = doc_piv + sent_piv + sent[sent_piv:].find(w) - end = start + len(w) - 1 - sent_piv = end - doc_piv + 1 - wpos.append((start, end)) - doc_piv += len(sent) - sent_data[pmid]["words"].append(wids) - sent_data[pmid]["wordPos"].append(wpos) - - return sent_data - - -def softmax(logits): - out = list() - for logit in logits: - temp = np.subtract(logit, np.max(logit)) - p = np.exp(temp) / np.sum(np.exp(temp)) - out.append(np.max(p)) - return out - - -def CoNLL_tokenizer(text): - rawTok = [t for t in tokenize_regex.split(text) if t] - assert "".join(rawTok) == text - tok = [t for t in rawTok if t != " "] - return tok - - -def sentence_split(text): - sentences = list() - sent = "" - piv = 0 - for idx, char in enumerate(text): - if char in "?!": - if idx > len(text) - 3: - sent = text[piv:] - piv = -1 - else: - sent = text[piv : idx + 1] - piv = idx + 1 - - elif char == ".": - if idx > len(text) - 3: - sent = text[piv:] - piv = -1 - elif (text[idx + 1] == " ") and ( - text[idx + 2] in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ-"' + "'" - ): - sent = text[piv : idx + 1] - piv = idx + 1 - - if sent != "": - toks = CoNLL_tokenizer(sent) - if len(toks) > 100: - while True: - rawTok = [t for t in tokenize_regex.split(sent) if t] - cut = "".join(rawTok[:200]) - sent = "".join(rawTok[200:]) - sentences.append(cut) - - if len(CoNLL_tokenizer(sent)) < 100: - if sent.strip() == "": - sent = "" - break - else: - sentences.append(sent) - sent = "" - break - else: - sentences.append(sent) - sent = "" - - if piv == -1: - break - - if piv != -1: - sent = text[piv:] - toks = CoNLL_tokenizer(sent) - if len(toks) > 100: - while True: - rawTok = [t for t in tokenize_regex.split(sent) if t] - cut = "".join(rawTok[:200]) - sent = "".join(rawTok[200:]) - sentences.append(cut) - - if len(CoNLL_tokenizer(sent)) < 100: - if sent.strip() == "": - sent = "" - break - else: - sentences.append(sent) - sent = "" - break - else: - sentences.append(sent) - sent = "" - - return sentences - - -def get_prob(data, sent_data, predicDict, logitsDict, entity_types=None): - for idx, paper in enumerate(data): - pmid = paper["pmid"] - - if len(paper["abstract"]) > 0: - content = paper["title"] + " " + paper["abstract"] - else: - content = paper["title"] - - if entity_types is not None: - for ent_type in entity_types: - paper["entities"][ent_type] = [] - paper["prob"] = dict() - - if entity_types is None: - continue - - for dtype in entity_types: - for sentidx, tags in enumerate(predicDict[dtype][pmid]): - B_flag = False - tmpSE = dict() - # get position of entity corresponding to types - for widx, tag in enumerate(tags): - if tag == "O": - if B_flag: - tmpSE["end"] = sent_data[pmid]["wordPos"][sentidx][ - widx - 1 - ][1] - paper["entities"][dtype].append(tmpSE) - B_flag = False - continue - elif tag == "B": - if B_flag: - tmpSE["end"] = sent_data[pmid]["wordPos"][sentidx][ - widx - 1 - ][1] - paper["entities"][dtype].append(tmpSE) - tmpSE = {"start": sent_data[pmid]["wordPos"][sentidx][widx][0]} - B_flag = True - elif tag == "I": - continue - if B_flag: - tmpSE["end"] = sent_data[pmid]["wordPos"][sentidx][-1][1] - paper["entities"][dtype].append(tmpSE) - - # get prob. of entity logits corresponding to types - logs = list() - for t_sent in logitsDict[dtype][pmid]: - logs.extend(t_sent) - paper["prob"][dtype] = list() - for pos in paper["entities"][dtype]: - if pos["start"] == pos["end"]: - soft = softmax( - logs[ - len(CoNLL_tokenizer(content[: pos["start"]])) : len( - CoNLL_tokenizer(content[: pos["end"]]) - ) - + 1 - ] - ) - paper["prob"][dtype].append((pos, float(np.average(soft)))) - else: - soft = softmax( - logs[ - len(CoNLL_tokenizer(content[: pos["start"]])) : len( - CoNLL_tokenizer(content[: pos["end"]]) - ) - ] - ) - paper["prob"][dtype].append((pos, float(np.average(soft)))) - - return data - - -def detokenize(tokens, predicts, logits): - pred = dict( - {"toks": tokens[:], "labels": predicts[:], "logit": logits[:]} - ) # dictionary for predicted tokens and labels. - - bert_toks = list() - bert_labels = list() - bert_logits = list() - tmp_p = list() - tmp_l = list() - tmp_s = list() - for t, label, s in zip(pred["toks"], pred["labels"], pred["logit"]): - if t == "[CLS]" or t == "": # non-text tokens will not be evaluated. - continue - elif t == "[SEP]" or t == "": # newline - bert_toks.append(tmp_p) - bert_labels.append(tmp_l) - bert_logits.append(tmp_s) - tmp_p = list() - tmp_l = list() - tmp_s = list() - continue - elif ( - t[:2] == "##" - ): # if it is a piece of a word (broken by Word Piece tokenizer) - tmp_p[-1] = tmp_p[-1] + t[2:] # append pieces - elif t.startswith("Ġ"): # roberta tokenizer - t = t.replace("Ġ", " ") - tmp_p[-1] = tmp_p[-1] + t - else: - tmp_p.append(t) - tmp_l.append(label) - tmp_s.append(s) - return bert_toks, bert_labels, bert_logits - - -# https://stackoverflow.com/a/3620972 -PROF_DATA = {} - - -class Profile(object): - def __init__(self, prefix): - self.prefix = prefix - - def __call__(self, fn): - def with_profiling(*args, **kwargs): - global PROF_DATA - start_time = time.time() - ret = fn(*args, **kwargs) - - elapsed_time = time.time() - start_time - key = "[" + self.prefix + "]." + fn.__name__ - - if key not in PROF_DATA: - PROF_DATA[key] = [0, list()] - PROF_DATA[key][0] += 1 - PROF_DATA[key][1].append(elapsed_time) - - return ret - - return with_profiling - - -def show_prof_data(): - for fname, data in sorted(PROF_DATA.items()): - max_time = max(data[1]) - avg_time = sum(data[1]) / len(data[1]) - total_time = sum(data[1]) - print("\n{} -> called {} times".format(fname, data[0])) - print( - "Time total: {:.3f}, max: {:.3f}, avg: {:.3f}".format( - total_time, max_time, avg_time - ) - ) - - -def clear_prof_data(): - global PROF_DATA - PROF_DATA = {} - - -# Ref. dict of SR4GN -species_human_excl_homo_sapiens = ( - "person|infant|Child|people|participants|woman|" - "Girls|Man|Peoples|Men|Participant|Patients|" - "humans|Persons|mans|participant|Infants|Boys|" - "Human|Humans|Women|children|Mans|child|Participants|Girl|" - "Infant|girl|patient|patients|boys|men|infants|" - "man|girls|Children|Boy|women|persons|human|Woman|" - "peoples|Patient|People|boy|Person".split("|") -) - - -def filter_entities(ner_results): - num_filtered_species_per_doc = list() - - for idx, paper in enumerate(ner_results): - if len(paper["abstract"]) > 0: - content = paper["title"] + " " + paper["abstract"] - else: - content = paper["title"] - - valid_species = list() - species = paper["entities"]["species"] - for spcs in species: - entity_mention = content[spcs["start"] : spcs["end"] + 1] - if entity_mention in species_human_excl_homo_sapiens: - spcs["end"] += 1 - continue - valid_species.append(spcs) - - num_filtered_species = len(species) - len(valid_species) - if num_filtered_species > 0: - paper["entities"]["species"] = valid_species - - num_filtered_species_per_doc.append((paper["pmid"], num_filtered_species)) - - return num_filtered_species_per_doc - - -# from convert.py -def pubtator2dict_list(pubtator_file_path): - dict_list = list() - - title_pmid = "" - # abstract_pmid = '' - title = "" - abstract_text = "" - doc_line_num = 0 - - with open(pubtator_file_path, "r", encoding="utf-8") as f: - for line in f: - line = line.rstrip() - if len(line) == 0: - doc_dict = { - "pmid": title_pmid, - "entities": {}, - } - doc_dict["title"] = title - doc_dict["abstract"] = abstract_text - - dict_list.append(doc_dict) - - doc_line_num = 0 - continue - - if doc_line_num == 0: - title_cols = line.split("|t|") - - if len(title_cols) != 2: - return '{"error": "wrong #title_cols: %d"}' % len(title_cols) - - title_pmid = title_cols[0] - - if "- No text -" == title_cols[1]: - # make tmvar2 results empty - title = "" - else: - title = title_cols[1] - elif doc_line_num == 1: - abstract_cols = line.split("|a|") - - if len(abstract_cols) != 2: - if len(abstract_cols) > 2: - abstract_text = "|a|".join(abstract_cols[1:]) - else: - return '{"error": "wrong #abstract_cols: %d"}' % len( - abstract_cols - ) - else: - if "- No text -" == abstract_cols[1]: - # make tmvar2 results empty - abstract_text = "" - else: - abstract_text = abstract_cols[1] - - doc_line_num += 1 - return dict_list - - -def preprocess(text): - text = text.replace("\r ", " ") - - text = text.replace("\u2028", " ") - text = text.replace("\u2029", " ") - - # HAIR SPACE - # https://www.fileformat.info/info/unicode/char/200a/index.htm - text = text.replace("\u200a", " ") - - # THIN SPACE - # https://www.fileformat.info/info/unicode/char/2009/index.htm - text = text.replace("\u2009", " ") - text = text.replace("\u2008", " ") - - # FOUR-PER-EM SPACE - # https://www.fileformat.info/info/unicode/char/2005/index.htm - text = text.replace("\u2005", " ") - text = text.replace("\u2004", " ") - text = text.replace("\u2003", " ") - - # EN SPACE - # https://www.fileformat.info/info/unicode/char/2002/index.htm - text = text.replace("\u2002", " ") - - # NO-BREAK SPACE - # https://www.fileformat.info/info/unicode/char/00a0/index.htm - text = text.replace("\u00a0", " ") - - # https://www.fileformat.info/info/unicode/char/f8ff/index.htm - text = text.replace("\uf8ff", " ") - - # https://www.fileformat.info/info/unicode/char/202f/index.htm - text = text.replace("\u202f", " ") - - text = text.replace("\ufeff", " ") - text = text.replace("\uf044", " ") - text = text.replace("\uf02d", " ") - text = text.replace("\uf0bb", " ") - - text = text.replace("\uf048", "Η") - text = text.replace("\uf0b0", "°") - - # MIDLINE HORIZONTAL ELLIPSIS: ⋯ - # https://www.fileformat.info/info/unicode/char/22ef/index.htm - # text = text.replace('\u22EF', '...') - - return text diff --git a/source/Parser/output/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.biomedner.json b/source/Parser/output/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.biomedner.json deleted file mode 100644 index b2774e4a..00000000 --- a/source/Parser/output/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.biomedner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42", "entities": {"disease": [{"start": 0, "end": 33}], "drug": [], "gene": [], "species": [{"start": 0, "end": 23}], "cell line": [], "DNA": [], "RNA": [], "cell type": []}, "title": "", "abstract": "clostridioides difficile infection", "prob": {"disease": [[{"start": 0, "end": 33}, 0.9938603043556213]], "drug": [], "gene": [], "species": [[{"start": 0, "end": 23}, 0.5144878625869751]], "cell line": [], "DNA": [], "RNA": [], "cell type": []}, "num_entities": 2} \ No newline at end of file diff --git a/source/Parser/output/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.gner.json b/source/Parser/output/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.gner.json deleted file mode 100644 index 462f7b6a..00000000 --- a/source/Parser/output/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.gner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42", "entities": {"diagnostic test": [], "treatment": [], "laboratory test": [], "surgical procedure": [], "sign symptom": [], "radiology": [], "genomic analysis technique": []}, "title": "", "abstract": "clostridioides difficile infection", "prob": {"diagnostic test": [], "treatment": [], "laboratory test": [], "surgical procedure": [], "sign symptom": [], "radiology": [], "genomic analysis technique": []}, "num_entities": 0} \ No newline at end of file diff --git a/source/Parser/output/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.biomedner.json b/source/Parser/output/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.biomedner.json deleted file mode 100644 index ff193328..00000000 --- a/source/Parser/output/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.biomedner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453", "entities": {"disease": [{"start": 7, "end": 21}], "drug": [], "gene": [], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": [{"start": 0, "end": 21}]}, "title": "", "abstract": "severe aortic stenosis", "prob": {"disease": [[{"start": 7, "end": 21}, 0.9999975562095642]], "drug": [], "gene": [], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": [[{"start": 0, "end": 21}, 0.41163790225982666]]}, "num_entities": 2} \ No newline at end of file diff --git a/source/Parser/output/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.gner.json b/source/Parser/output/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.gner.json deleted file mode 100644 index 10667c76..00000000 --- a/source/Parser/output/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.gner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453", "entities": {"diagnostic test": [], "treatment": [], "laboratory test": [], "surgical procedure": [], "sign symptom": [], "radiology": [], "genomic analysis technique": []}, "title": "", "abstract": "severe aortic stenosis", "prob": {"diagnostic test": [], "treatment": [], "laboratory test": [], "surgical procedure": [], "sign symptom": [], "radiology": [], "genomic analysis technique": []}, "num_entities": 0} \ No newline at end of file diff --git a/source/Parser/output/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.biomedner.json b/source/Parser/output/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.biomedner.json deleted file mode 100644 index 31d36fb2..00000000 --- a/source/Parser/output/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.biomedner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e", "entities": {"disease": [{"start": 0, "end": 18}], "drug": [], "gene": [], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": []}, "title": "", "abstract": "chronic hepatitis c", "prob": {"disease": [[{"start": 0, "end": 18}, 0.9806779623031616]], "drug": [], "gene": [], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": []}, "num_entities": 1} \ No newline at end of file diff --git a/source/Parser/output/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.gner.json b/source/Parser/output/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.gner.json deleted file mode 100644 index aa275e3e..00000000 --- a/source/Parser/output/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.gner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e", "entities": {"diagnostic test": [], "treatment": [], "laboratory test": [], "surgical procedure": [], "sign symptom": [], "radiology": [], "genomic analysis technique": []}, "title": "", "abstract": "chronic hepatitis c", "prob": {"diagnostic test": [], "treatment": [], "laboratory test": [], "surgical procedure": [], "sign symptom": [], "radiology": [], "genomic analysis technique": []}, "num_entities": 0} \ No newline at end of file diff --git a/source/Parser/output/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.biomedner.json b/source/Parser/output/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.biomedner.json deleted file mode 100644 index b97675c9..00000000 --- a/source/Parser/output/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.biomedner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637", "entities": {"disease": [{"start": 0, "end": 20}], "drug": [], "gene": [], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": []}, "title": "", "abstract": "myocardial infarction", "prob": {"disease": [[{"start": 0, "end": 20}, 0.9999976754188538]], "drug": [], "gene": [], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": []}, "num_entities": 1} \ No newline at end of file diff --git a/source/Parser/output/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.biomedner.json b/source/Parser/output/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.biomedner.json deleted file mode 100644 index cf2a2a8c..00000000 --- a/source/Parser/output/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.biomedner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc", "entities": {"disease": [{"start": 7, "end": 21}], "drug": [], "gene": [], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": [{"start": 0, "end": 21}]}, "title": "", "abstract": "severe aortic stenosis", "prob": {"disease": [[{"start": 7, "end": 21}, 0.9999975562095642]], "drug": [], "gene": [], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": [[{"start": 0, "end": 21}, 0.41163790225982666]]}, "num_entities": 2} \ No newline at end of file diff --git a/source/Parser/output/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.gner.json b/source/Parser/output/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.gner.json deleted file mode 100644 index 28a0ac7b..00000000 --- a/source/Parser/output/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.gner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc", "entities": {"diagnostic test": [], "treatment": [], "laboratory test": [], "surgical procedure": [], "sign symptom": [], "radiology": [], "genomic analysis technique": []}, "title": "", "abstract": "severe aortic stenosis", "prob": {"diagnostic test": [], "treatment": [], "laboratory test": [], "surgical procedure": [], "sign symptom": [], "radiology": [], "genomic analysis technique": []}, "num_entities": 0} \ No newline at end of file diff --git a/source/Parser/output/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.biomedner.json b/source/Parser/output/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.biomedner.json deleted file mode 100644 index 4df89bec..00000000 --- a/source/Parser/output/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.biomedner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28", "entities": {"disease": [{"start": 0, "end": 25}], "drug": [{"start": 12, "end": 25}, {"start": 27, "end": 37}], "gene": [{"start": 12, "end": 25}], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": [{"start": 0, "end": 9}]}, "title": "", "abstract": "Deficiency, alpha-Lecithin:Cholesterol Acyltransferase", "prob": {"disease": [[{"start": 0, "end": 25}, 0.9047816395759583]], "drug": [[{"start": 12, "end": 25}, 0.9823459982872009], [{"start": 27, "end": 37}, 0.9986056089401245]], "gene": [[{"start": 12, "end": 25}, 0.8241974711418152]], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": [[{"start": 0, "end": 9}, 0.3515378534793854]]}, "num_entities": 5} \ No newline at end of file diff --git a/source/Parser/output/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.gner.json b/source/Parser/output/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.gner.json deleted file mode 100644 index 0740d7f8..00000000 --- a/source/Parser/output/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.gner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28", "entities": {"diagnostic test": [], "treatment": [], "laboratory test": [{"start": 12, "end": 54}], "surgical procedure": [], "sign symptom": [], "radiology": [], "genomic analysis technique": []}, "title": "", "abstract": "Deficiency, alpha-Lecithin:Cholesterol Acyltransferase", "prob": {"diagnostic test": [], "treatment": [], "laboratory test": [[{"start": 12, "end": 54}, 0.8846812844276428]], "surgical procedure": [], "sign symptom": [], "radiology": [], "genomic analysis technique": []}, "num_entities": 1} \ No newline at end of file diff --git a/source/Parser/output/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.biomedner.json b/source/Parser/output/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.biomedner.json deleted file mode 100644 index 9bd37d7c..00000000 --- a/source/Parser/output/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.biomedner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377", "entities": {"disease": [{"start": 0, "end": 20}], "drug": [], "gene": [], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": []}, "title": "", "abstract": "myocardial infarction", "prob": {"disease": [[{"start": 0, "end": 20}, 0.9999976754188538]], "drug": [], "gene": [], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": []}, "num_entities": 1} \ No newline at end of file diff --git a/source/Parser/output/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.biomedner.json b/source/Parser/output/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.biomedner.json deleted file mode 100644 index 74715ebf..00000000 --- a/source/Parser/output/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.biomedner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3", "entities": {"disease": [{"start": 7, "end": 21}], "drug": [], "gene": [], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": [{"start": 0, "end": 21}]}, "title": "", "abstract": "severe aortic stenosis", "prob": {"disease": [[{"start": 7, "end": 21}, 0.9999975562095642]], "drug": [], "gene": [], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": [[{"start": 0, "end": 21}, 0.41163790225982666]]}, "num_entities": 2} \ No newline at end of file diff --git a/source/Parser/output/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.gner.json b/source/Parser/output/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.gner.json deleted file mode 100644 index dd4acbb3..00000000 --- a/source/Parser/output/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.gner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3", "entities": {"diagnostic test": [], "treatment": [], "laboratory test": [], "surgical procedure": [], "sign symptom": [], "radiology": [], "genomic analysis technique": []}, "title": "", "abstract": "severe aortic stenosis", "prob": {"diagnostic test": [], "treatment": [], "laboratory test": [], "surgical procedure": [], "sign symptom": [], "radiology": [], "genomic analysis technique": []}, "num_entities": 0} \ No newline at end of file diff --git a/source/Parser/output/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.biomedner.json b/source/Parser/output/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.biomedner.json deleted file mode 100644 index 177bb8a6..00000000 --- a/source/Parser/output/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.biomedner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace", "entities": {"disease": [{"start": 0, "end": 14}], "drug": [], "gene": [], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": []}, "title": "", "abstract": "type 1 diabetes", "prob": {"disease": [[{"start": 0, "end": 14}, 0.9999966621398926]], "drug": [], "gene": [], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": []}, "num_entities": 1} \ No newline at end of file diff --git a/source/Parser/output/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.gner.json b/source/Parser/output/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.gner.json deleted file mode 100644 index 1f453d88..00000000 --- a/source/Parser/output/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.gner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace", "entities": {"diagnostic test": [], "treatment": [], "laboratory test": [], "surgical procedure": [], "sign symptom": [], "radiology": [], "genomic analysis technique": []}, "title": "", "abstract": "type 1 diabetes", "prob": {"diagnostic test": [], "treatment": [], "laboratory test": [], "surgical procedure": [], "sign symptom": [], "radiology": [], "genomic analysis technique": []}, "num_entities": 0} \ No newline at end of file diff --git a/source/Parser/output/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.biomedner.json b/source/Parser/output/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.biomedner.json deleted file mode 100644 index a4597d68..00000000 --- a/source/Parser/output/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.biomedner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c", "entities": {"disease": [{"start": 7, "end": 21}], "drug": [], "gene": [], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": [{"start": 0, "end": 21}]}, "title": "", "abstract": "severe aortic stenosis", "prob": {"disease": [[{"start": 7, "end": 21}, 0.9999975562095642]], "drug": [], "gene": [], "species": [], "cell line": [], "DNA": [], "RNA": [], "cell type": [[{"start": 0, "end": 21}, 0.41163790225982666]]}, "num_entities": 2} \ No newline at end of file diff --git a/source/Parser/output/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.gner.json b/source/Parser/output/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.gner.json deleted file mode 100644 index d7615eba..00000000 --- a/source/Parser/output/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.gner.json +++ /dev/null @@ -1 +0,0 @@ -{"pmid": "b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c", "entities": {"diagnostic test": [], "treatment": [], "laboratory test": [], "surgical procedure": [], "sign symptom": [], "radiology": [], "genomic analysis technique": []}, "title": "", "abstract": "severe aortic stenosis", "prob": {"diagnostic test": [], "treatment": [], "laboratory test": [], "surgical procedure": [], "sign symptom": [], "radiology": [], "genomic analysis technique": []}, "num_entities": 0} \ No newline at end of file diff --git a/source/Parser/scripts/run_biomedner.sh b/source/Parser/scripts/run_biomedner.sh deleted file mode 100644 index 19554591..00000000 --- a/source/Parser/scripts/run_biomedner.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -cd .. -#!/bin/bash - -if [ ! -d "logs" ]; then - mkdir logs -fi -#################################### -##### NER ##### -#################################### - -# run neural NER -nohup python biomedner_server.py \ - --model_name_or_path models/finetuned_model_roberta \ - --biomedner_port 18894 >> logs/nohup_multi_ner.out 2>&1 & - -nohup python gner_server.py \ - --model_name_or_path gliner-community/gliner_large-v2.5 \ - --gner_port 18783 >> logs/nohup_gner.out 2>&1 & - -#################################### -##### Normalization ##### -#################################### -cd resources -# Disease (working dir: normalization/) -cd normalization -nohup java -Xmx16G -jar normalizers/disease/disease_normalizer_21.jar \ - "inputs/disease" \ - "outputs/disease" \ - "dictionary/dict_Disease.txt" \ - "normalizers/disease/resources" \ - 9 \ - 18892 \ - >> ../../logs/nohup_disease_normalize.out 2>&1 & - -# Gene (working dir: normalization/normalizers/gene/, port:18888) -cd normalizers/gene -nohup java -Xmx20G -jar gnormplus-normalization_21.jar \ - 18888 \ - >> ../../../../logs/nohup_gene_normalize.out 2>&1 & -cd ../../../.. \ No newline at end of file diff --git a/source/Parser/scripts/stop_biomedner.sh b/source/Parser/scripts/stop_biomedner.sh deleted file mode 100644 index bd44d473..00000000 --- a/source/Parser/scripts/stop_biomedner.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -# Define a function to stop a process by its name -stop_process() { - process_name="$1" - pid=$(ps auxww | grep "$process_name" | grep -v grep | awk '{print $2}' | sort -r) - if [ "$pid" != "" ]; then - # Kill each PID one by one - for p in $pid; do - kill -9 "$p" - echo "Stopped $process_name (PID: $p)" - done - else - echo "No $process_name found to stop." - fi -} - -# Call the function for each process -stop_process "biomedner_server.py" -stop_process "disease_normalizer_21.jar" -stop_process "gnormplus-normalization_21.jar" -stop_process "gner_server.py" - diff --git a/source/__init__.py b/source/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/source/biomedner_services/run_biomedner.sh b/source/biomedner_services/run_biomedner.sh deleted file mode 100644 index b8f963f5..00000000 --- a/source/biomedner_services/run_biomedner.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash -cd Parser - -if [ ! -d "logs" ]; then - mkdir logs -fi -#################################### -##### NER ##### -#################################### -# run NER -nohup python biomedner_server.py \ - --model_name_or_path models/finetuned_model_roberta \ - --biomedner_port 18894 >> logs/nohup_multi_ner.out 2>&1 & - -nohup python gner_server.py \ - --model_name_or_path gliner-community/gliner_large-v2.5 \ - --gner_port 18783 >> logs/nohup_gner.out 2>&1 & - -#################################### -##### Normalization ##### -#################################### -cd resources -# Disease (working dir: normalization/) -cd normalization -nohup java -Xmx16G -jar normalizers/disease/disease_normalizer_21.jar \ - "inputs/disease" \ - "outputs/disease" \ - "dictionary/dict_Disease.txt" \ - "normalizers/disease/resources" \ - 9 \ - 18892 \ - >> ../../logs/nohup_disease_normalize.out 2>&1 & - -# Gene (working dir: normalization/normalizers/gene/, port:18888) -cd normalizers/gene -nohup java -Xmx20G -jar gnormplus-normalization_21.jar \ - 18888 \ - >> ../../../../logs/nohup_gene_normalize.out 2>&1 & -cd ../../../../.. \ No newline at end of file diff --git a/source/biomedner_services/stop_biomedner.sh b/source/biomedner_services/stop_biomedner.sh deleted file mode 100644 index bd44d473..00000000 --- a/source/biomedner_services/stop_biomedner.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -# Define a function to stop a process by its name -stop_process() { - process_name="$1" - pid=$(ps auxww | grep "$process_name" | grep -v grep | awk '{print $2}' | sort -r) - if [ "$pid" != "" ]; then - # Kill each PID one by one - for p in $pid; do - kill -9 "$p" - echo "Stopped $process_name (PID: $p)" - done - else - echo "No $process_name found to stop." - fi -} - -# Call the function for each process -stop_process "biomedner_server.py" -stop_process "disease_normalizer_21.jar" -stop_process "gnormplus-normalization_21.jar" -stop_process "gner_server.py" - diff --git a/source/regex/exception_regex_patterns.json b/source/regex/exception_regex_patterns.json deleted file mode 100644 index bd2fe774..00000000 --- a/source/regex/exception_regex_patterns.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "patterns": { - "pattern1": { - "regex": "^\\d+\\s$", - "comment": "Matches digits followed by a space." - }, - "pattern2": { - "regex": "^\\d+(\\.|\\-)\\d+$", - "comment": "Matches digits separated by a dot (.) or hyphen (-)." - }, - "pattern3": { - "regex": "^\\d+(\\.\\d+)?\\s?[×x]\\s?\\d+(\\.\\d+)?/?[A-Za-z/]+?$", - "comment": "Matches expressions like '3x 2.5mm' or '5.75x2.5mm/s'." - }, - "pattern4": { - "regex": "^\\d+/[A-Za-z]$", - "comment": "Matches fraction expressions like '2/A' or '5/m'." - }, - "pattern5": { - "regex": "^\\d+(\\.\\d+)?%$", - "comment": "Matches percentage values like '25%', '3.5%', etc." - }, - "pattern6": { - "regex": "^\\d+(\\.\\d+)?\\s*[°°°CFC]$", - "comment": "Matches temperature values like '25°C', '3.5°F', etc." - }, - "pattern7": { - "regex": "^\\d+[\\/\\^]\\d+[\\/\\^]\\w$", - "comment": "Matches expressions like '2/3/m' or '5^2/n'." - }, - "pattern8": { - "regex": "\\b\\d+\\b(?![.\\-+*/\\\\()\\[\\]{}])", - "comment": "Matches standalone whole numbers that are not part of larger expressions." - }, - "pattern9": { - "regex": "\\b\\d+-\\w+\\b", - "comment": "Matches expressions like '12-abc' or '5-xyz'." - }, - "pattern10": { - "regex": "\\b\\d+\\/\\d+\\b", - "comment": "Matches fraction expressions like '2/3' or '5/8'." - }, - "pattern11": { - "regex": "\\b\\d+[A-Za-z]+\\b", - "comment": "Matches expressions like '25kg' or '10m'." - }, - "pattern12": { - "regex": "e.g.", - "comment": "Matches 'e.g.' (for example)." - }, - "pattern13": { - "regex": "i.e.", - "comment": "Matches 'i.e.' (that is)." - }, - "pattern14": { - "regex": "\\b\\d+\\.\\d+[A-Za-z]\\b", - "comment": "Matches expressions like '3.14pi' or '2.75x'." - }, - "pattern15": { - "regex": "\\b\\d+\\/\\w+\\b", - "comment": "Matches patterns like '≥ 10/μL', '< 9/cl', '+ 12/hgmm', etc." - }, - "pattern16": { - "regex": "\\b\\d+\\.\\d+[)]?", - "comment": "Matches patterns like '2.0)', '3.0)', '15.0)', '16.1-', '2.1)', '9.6/'." - }, - - "pattern17": { - "regex": "(? int: + parser = argparse.ArgumentParser( + description="Download and prepare TrialMatchAI data and model artifacts" + ) + parser.add_argument( + "--root", + type=Path, + default=None, + help="Runtime root for data/ and models/; defaults to repository root or current directory", + ) + parser.add_argument( + "--data-url", + default=DATA_URL, + help="processed_trials.tar.gz URL", + ) + parser.add_argument( + "--models-url", + default=MODELS_URL, + help="models.tar.gz URL", + ) + parser.add_argument( + "--criteria-base-url", + default=CRITERIA_ZIP_BASE_URL, + help="Base URL containing criteria_part_.zip chunks", + ) + parser.add_argument( + "--criteria-chunks", + type=int, + default=CHUNK_COUNT, + help="Number of criteria zip chunks to download", + ) + parser.add_argument( + "--skip-models", + action="store_true", + help="Do not download or extract model artifacts", + ) + parser.add_argument( + "--finetune-data", + action="store_true", + help="Also download the fine-tuning datasets (CoT/reranker/NER JSONL) to data/finetune/.", + ) + parser.add_argument( + "--finetune-data-url", + default=FINETUNE_DATA_URL, + help="finetuning_datasets.zip URL", + ) + parser.add_argument( + "--force", + action="store_true", + help="Re-extract archives even when target directories already exist", + ) + args = parser.parse_args(argv) + + root = (args.root or _runtime_root()).resolve() + bootstrap_data( + root=root, + data_url=args.data_url, + models_url=args.models_url, + criteria_base_url=args.criteria_base_url, + criteria_chunks=args.criteria_chunks, + skip_models=args.skip_models, + finetune_data=args.finetune_data, + finetune_data_url=args.finetune_data_url, + force=args.force, + ) + return 0 + + +def bootstrap_data( + *, + root: Path, + data_url: str = DATA_URL, + models_url: str = MODELS_URL, + criteria_base_url: str = CRITERIA_ZIP_BASE_URL, + criteria_chunks: int = CHUNK_COUNT, + skip_models: bool = False, + finetune_data: bool = False, + finetune_data_url: str = FINETUNE_DATA_URL, + force: bool = False, +) -> None: + data_dir = root / "data" + models_dir = root / "models" + data_dir.mkdir(parents=True, exist_ok=True) + + criteria_dir = data_dir / "processed_criteria" + if force or not _has_entries(criteria_dir): + criteria_dir.mkdir(parents=True, exist_ok=True) + for index in range(criteria_chunks): + chunk_name = f"{CHUNK_PREFIX}_{index}.zip" + chunk_path = data_dir / chunk_name + _download_if_missing( + f"{criteria_base_url.rstrip('/')}/{chunk_name}?download=1", + chunk_path, + ) + _verify_sha256( + chunk_path, + os.getenv(f"TRIALMATCHAI_CRITERIA_PART_{index}_SHA256"), + ) + _safe_extract_zip(chunk_path, criteria_dir) + + processed_trials_dir = data_dir / "processed_trials" + if force or not _has_entries(processed_trials_dir): + processed_archive = data_dir / PROCESSED_TRIALS_ARCHIVE + _download_if_missing(data_url, processed_archive) + _verify_sha256( + processed_archive, os.getenv("TRIALMATCHAI_PROCESSED_TRIALS_SHA256") + ) + _safe_extract_tar_gz(processed_archive, data_dir) + + if not skip_models: + models_dir.mkdir(parents=True, exist_ok=True) + if force or not _has_entries(models_dir): + models_archive = data_dir / MODELS_ARCHIVE + _download_if_missing(models_url, models_archive) + _verify_sha256(models_archive, os.getenv("TRIALMATCHAI_MODELS_SHA256")) + _safe_extract_tar_gz(models_archive, models_dir) + + if finetune_data: + finetune_dir = data_dir / "finetune" + if force or not _has_entries(finetune_dir): + finetune_dir.mkdir(parents=True, exist_ok=True) + finetune_archive = data_dir / FINETUNE_ARCHIVE + _download_if_missing(finetune_data_url, finetune_archive) + _verify_sha256( + finetune_archive, os.getenv("TRIALMATCHAI_FINETUNE_DATA_SHA256") + ) + _safe_extract_zip(finetune_archive, finetune_dir) + + _cleanup_archives(data_dir, criteria_chunks) + + +def _download_if_missing(url: str, destination: Path) -> None: + if destination.exists(): + _info(f"{destination.name} already exists; skipping download.") + return + + _info(f"Downloading {destination.name}...") + destination.parent.mkdir(parents=True, exist_ok=True) + response = requests.get(url, stream=True, timeout=120) + response.raise_for_status() + with destination.open("wb") as file: + for chunk in response.iter_content(chunk_size=1024 * 1024): + if chunk: + file.write(chunk) + + +def _verify_sha256(path: Path, expected: str | None) -> None: + if not expected: + _warn(f"No SHA-256 checksum configured for {path.name}; skipping verification.") + return + + digest = hashlib.sha256() + with path.open("rb") as file: + for chunk in iter(lambda: file.read(1024 * 1024), b""): + digest.update(chunk) + actual = digest.hexdigest() + if actual != expected: + raise ValueError( + f"Checksum mismatch for {path}: expected {expected}, got {actual}" + ) + + +def _safe_extract_tar_gz(archive: Path, target: Path) -> None: + target.mkdir(parents=True, exist_ok=True) + with tarfile.open(archive, "r:gz") as tar: + for member in tar.getmembers(): + _validated_target_path(target, member.name) + if member.issym() or member.islnk() or member.isdev(): + raise ValueError(f"Archive contains an unsafe member: {member.name}") + tar.extractall(target) + + +def _safe_extract_zip(archive: Path, target: Path) -> None: + target.mkdir(parents=True, exist_ok=True) + with zipfile.ZipFile(archive) as zip_file: + for member in zip_file.infolist(): + _validated_target_path(target, member.filename) + mode = member.external_attr >> 16 + if stat.S_ISLNK(mode): + raise ValueError(f"Archive contains an unsafe member: {member.filename}") + zip_file.extractall(target) + + +def _validated_target_path(target: Path, member_name: str) -> Path: + if not member_name: + raise ValueError("Archive contains an empty path") + member_path = Path(member_name) + if member_path.is_absolute(): + raise ValueError(f"Archive contains an absolute path: {member_name}") + + resolved_target = target.resolve() + resolved_member = (resolved_target / member_path).resolve() + try: + resolved_member.relative_to(resolved_target) + except ValueError as exc: + raise ValueError(f"Archive contains an unsafe path: {member_name}") from exc + return resolved_member + + +def _cleanup_archives(data_dir: Path, criteria_chunks: int) -> None: + for path in [ + data_dir / PROCESSED_TRIALS_ARCHIVE, + data_dir / MODELS_ARCHIVE, + data_dir / FINETUNE_ARCHIVE, + ]: + path.unlink(missing_ok=True) + for index in range(criteria_chunks): + (data_dir / f"{CHUNK_PREFIX}_{index}.zip").unlink(missing_ok=True) + + +def _has_entries(path: Path) -> bool: + return path.exists() and any(path.iterdir()) + + +def _runtime_root() -> Path: + start = Path(__file__).resolve() + for parent in start.parents: + if (parent / "pyproject.toml").exists(): + return parent + return Path.cwd() + + +def _info(message: str) -> None: + print(f"[INFO] {message}") + + +def _warn(message: str) -> None: + print(f"[WARN] {message}", file=sys.stderr) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/cli/build.py b/src/trialmatchai/cli/build.py new file mode 100644 index 00000000..4c99cbe1 --- /dev/null +++ b/src/trialmatchai/cli/build.py @@ -0,0 +1,116 @@ +"""``trialmatchai build`` — prepare the system (the setup half), once. + +Builds the heavy, reusable artifacts a deployment needs before it can match: +embeds + annotates the trial corpus (``processed_*``) and builds the LanceDB +search index. Idempotent and resumable — a disrupted build re-run continues from +the last completed work — and records a manifest so you can see what is done. + + trialmatchai build # prepare (resumable) + index + trialmatchai build --status # report what is already built, then exit + trialmatchai build --concepts # also build the open concept-linking DB + trialmatchai build --concepts --concepts-csv data/omop/CONCEPT.csv # + OMOP vocab +""" + +from __future__ import annotations + +import argparse +import json +import sys + +from trialmatchai.config.config_loader import load_config +from trialmatchai.orchestration import build_state, build_system +from trialmatchai.services.preflight import run_build_preflight +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Build the TrialMatchAI system (prepare corpus + search index)." + ) + parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") + parser.add_argument( + "--trials-json-folder", + default=None, + help="Normalized trial JSONs to prepare from. Defaults to paths.trials_json_folder.", + ) + parser.add_argument("--processed-trials-folder", default="data/processed_trials") + parser.add_argument("--processed-criteria-folder", default="data/processed_criteria") + parser.add_argument( + "--concepts", + action="store_true", + help="Also build the concept-linking DB from open vocabularies " + "(genes, diseases, chemicals, cell lines, cell types, phenotypes; auto-downloaded).", + ) + parser.add_argument( + "--concepts-csv", + default=None, + help="OMOP CONCEPT.csv to add SNOMED/LOINC/RxNorm to the concept DB (optional).", + ) + parser.add_argument("--synonym-csv", default=None, help="OMOP CONCEPT_SYNONYM.csv (optional).") + parser.add_argument("--force-prepare", action="store_true", help="Re-prepare all trials.") + parser.add_argument("--reindex", action="store_true", help="Rebuild the index even if present.") + parser.add_argument( + "--status", action="store_true", help="Print what is already built and exit." + ) + args = parser.parse_args() + + config = load_config(args.config) + + if args.status: + state = build_state( + config, + processed_trials_folder=args.processed_trials_folder, + processed_criteria_folder=args.processed_criteria_folder, + ) + print(json.dumps(state, indent=2)) + ready = state["ready_to_match"] + logger.info("System %s to match.", "READY" if ready else "NOT ready") + return 0 if ready else 1 + + # Fail fast on missing GPU / extras / HF access before any heavy work. + preflight_issues = run_build_preflight(config) + if preflight_issues: + logger.error("Build aborted: resolve the %s issue(s) above.", len(preflight_issues)) + return 1 + + build_system( + config, + trials_json_folder=args.trials_json_folder, + processed_trials_folder=args.processed_trials_folder, + processed_criteria_folder=args.processed_criteria_folder, + force_prepare=args.force_prepare, + force_reindex=args.reindex, + ) + + # Optional: chain the concept-DB build. --concepts pulls the open vocabularies + # (auto-downloaded); --concepts-csv adds the licensed OMOP vocab on top. + if args.concepts or args.concepts_csv: + logger.info("=== build: concepts stage ===") + from trialmatchai.cli.build_concepts import run_build_concepts + + run_build_concepts( + config, + sources="open" if args.concepts else None, + concept_csv=args.concepts_csv, + synonym_csv=args.synonym_csv, + ) + else: + logger.warning( + "Concept DB not built: entity->concept linking will degrade gracefully. " + "Run `trialmatchai build --concepts` to enable it (open vocabularies, " + "auto-downloaded); add --concepts-csv for OMOP SNOMED/LOINC/RxNorm." + ) + + state = build_state( + config, + processed_trials_folder=args.processed_trials_folder, + processed_criteria_folder=args.processed_criteria_folder, + ) + logger.info("Build done. ready_to_match=%s", state["ready_to_match"]) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/cli/build_concepts.py b/src/trialmatchai/cli/build_concepts.py new file mode 100644 index 00000000..a4b88e79 --- /dev/null +++ b/src/trialmatchai/cli/build_concepts.py @@ -0,0 +1,208 @@ +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + +from trialmatchai.config.config_loader import load_config +from trialmatchai.entities.builder import ( + DEFAULT_OMOP_VOCABULARIES, + build_dictionary_rows, + build_omop_concept_rows, + concept_texts_for_embedding, + write_lancedb_table, +) +from trialmatchai.models.embedding import build_embedder +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Build the TrialMatchAI LanceDB concept table." + ) + parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") + parser.add_argument( + "--concept-csv", + default=None, + help="OMOP CONCEPT.csv path (optional; omit to build from --dictionary only)", + ) + parser.add_argument( + "--synonym-csv", + default=None, + help="OMOP CONCEPT_SYNONYM.csv path", + ) + parser.add_argument( + "--dictionary", + action="append", + default=[], + metavar="VOCAB:DOMAIN:PATH", + help="Import a concept dictionary file, e.g. EntrezGene:Gene:/path/dict_Gene.txt", + ) + parser.add_argument( + "--vocabulary", + action="append", + default=[], + help="OMOP vocabulary to include. Defaults to TrialMatchAI deployment set.", + ) + parser.add_argument( + "--sources", + choices=["open"], + default=None, + help="Download + convert a bundled source set. 'open' = genes, diseases, " + "chemicals, cell lines, cell types, phenotypes (no licence required).", + ) + parser.add_argument( + "--concept-cache", + default="data/concept_dicts", + help="Directory for downloaded sources + converted dictionaries (cached).", + ) + parser.add_argument( + "--force-download", + action="store_true", + help="Re-download/re-convert bundled sources even if cached.", + ) + parser.add_argument("--db-path", default=None, help="Output LanceDB directory") + parser.add_argument("--table", default=None, help="Output LanceDB table name") + parser.add_argument( + "--skip-embeddings", + action="store_true", + help="Create an FTS-only table without model embeddings.", + ) + parser.add_argument( + "--force", + action="store_true", + help="Rebuild (re-embed) the concept table even if it already exists " + "(default: skip if present).", + ) + args = parser.parse_args() + + config = load_config(args.config) + if not args.concept_csv and not args.dictionary and not args.sources: + parser.error("provide --concept-csv, --sources, and/or at least one --dictionary") + try: + return run_build_concepts( + config, + db_path=args.db_path, + table=args.table, + sources=args.sources, + dictionary=args.dictionary, + concept_csv=args.concept_csv, + synonym_csv=args.synonym_csv, + vocabulary=args.vocabulary, + concept_cache=args.concept_cache, + force_download=args.force_download, + skip_embeddings=args.skip_embeddings, + force=args.force, + ) + except ValueError as exc: + parser.error(str(exc)) + return 2 # pragma: no cover - parser.error exits + + +def run_build_concepts( + config: dict, + *, + db_path: str | None = None, + table: str | None = None, + sources: str | None = None, + dictionary: list[str] | tuple[str, ...] = (), + concept_csv: str | None = None, + synonym_csv: str | None = None, + vocabulary: list[str] | tuple[str, ...] = (), + concept_cache: str = "data/concept_dicts", + force_download: bool = False, + skip_embeddings: bool = False, + force: bool = False, +) -> int: + """Build the LanceDB concept table (the entity-linking store). Idempotent. + + Importable so the unified pipeline can invoke the concepts stage directly, + rather than re-entering the CLI. Skips the expensive re-embed if the table is + already present, unless ``force`` (or a new OMOP vocab via ``concept_csv``). + """ + linker_cfg = config.get("concept_linker", {}) + db_path = db_path or linker_cfg.get("db_path") or "data/concepts" + table_name = table or linker_cfg.get("table") or "concepts" + + if not concept_csv and not dictionary and not sources: + raise ValueError("provide concept_csv, sources, and/or at least one dictionary") + + if not force and not concept_csv: + ready, rows_present = _concept_table_ready(db_path, table_name) + if ready: + logger.info( + "Concept store already present at %s/%s (%s concepts); skipping. " + "Pass force=True to rebuild.", + db_path, + table_name, + rows_present, + ) + return 0 + + dictionary_specs: list[tuple[str, str, str]] = [ + _parse_dictionary_spec(spec) for spec in dictionary + ] + if sources == "open": + from trialmatchai.entities.concept_sources import build_open_dictionaries + + for source, dict_path in build_open_dictionaries( + Path(concept_cache), force=force_download + ): + dictionary_specs.append( + (source.vocabulary_id, source.domain_id, str(dict_path)) + ) + if not dictionary_specs and not concept_csv: + raise ValueError("no concept sources were built (all downloads failed?)") + + vocabularies = tuple(vocabulary or DEFAULT_OMOP_VOCABULARIES) + rows: list = [] + if concept_csv: + rows = build_omop_concept_rows(concept_csv, synonym_csv, vocabularies=vocabularies) + for vocab, domain, path in dictionary_specs: + rows.extend(build_dictionary_rows(path, vocabulary_id=vocab, domain_id=domain)) + + embeddings = None + if not skip_embeddings: + embedder = build_embedder(config) + embeddings = embedder.embed_texts(concept_texts_for_embedding(rows)) + + Path(db_path).mkdir(parents=True, exist_ok=True) + write_lancedb_table( + rows, + db_path=db_path, + table_name=table_name, + embeddings=embeddings, + recreate=True, + ) + logger.info("Wrote %s concepts to %s/%s", len(rows), db_path, table_name) + return 0 + + +def _parse_dictionary_spec(spec: str) -> tuple[str, str, str]: + parts = spec.split(":", 2) + if len(parts) != 3: + raise ValueError( + "--dictionary must use VOCAB:DOMAIN:PATH, " + f"received: {spec}" + ) + return parts[0], parts[1], parts[2] + + +def _concept_table_ready(db_path: str, table_name: str) -> tuple[bool, int]: + """Return (table exists and is non-empty, row count) for the concept table.""" + try: + import lancedb + + db = lancedb.connect(str(db_path)) + if table_name not in db.table_names(): + return False, 0 + count = db.open_table(table_name).count_rows() + return count > 0, count + except Exception: + return False, 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/cli/e2e.py b/src/trialmatchai/cli/e2e.py new file mode 100644 index 00000000..4e4c335b --- /dev/null +++ b/src/trialmatchai/cli/e2e.py @@ -0,0 +1,70 @@ +"""``trialmatchai e2e`` — match a patient end-to-end in one command. + +A preset over the unified pipeline (the slice index -> ingest -> expand -> match): +imports patient inputs (any supported format, auto-detected), ensures the search +index, and matches. Every stage is idempotent: re-running skips an existing index, +already-imported patients, and already-matched patients. +""" + +from __future__ import annotations + +import argparse +import sys + +from trialmatchai.config.config_loader import load_config +from trialmatchai.orchestration import run_e2e +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Match a patient end-to-end (pipeline slice: index -> ingest -> expand -> match)." + ) + parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") + parser.add_argument( + "--input", + action="append", + default=[], + help="Patient input file or directory (repeatable). Format is auto-detected. " + "Omit if profiles are already staged.", + ) + parser.add_argument( + "--format", + default="auto", + choices=["auto", "text", "phenopacket", "fhir", "fhir-ndjson", "omop"], + help="Input format for --input. Defaults to auto-detection.", + ) + parser.add_argument( + "--processed-trials-folder", + default="data/processed_trials", + help="Folder of prepared trial JSON files used to build the index.", + ) + parser.add_argument( + "--processed-criteria-folder", + default="data/processed_criteria", + help="Folder of prepared criteria subfolders used to build the index.", + ) + parser.add_argument("--no-entities", action="store_true", help="Skip entity annotation on ingest.") + parser.add_argument("--reingest", action="store_true", help="Re-import patients even if profiles exist.") + parser.add_argument("--reindex", action="store_true", help="Rebuild the search index even if present.") + parser.add_argument("--rematch", action="store_true", help="Re-match patients even if results exist.") + args = parser.parse_args() + + config = load_config(args.config) + return run_e2e( + config, + args.input, + input_format=args.format, + with_entities=not args.no_entities, + processed_trials_folder=args.processed_trials_folder, + processed_criteria_folder=args.processed_criteria_folder, + force_reingest=args.reingest, + force_reindex=args.reindex, + force_rematch=args.rematch, + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/cli/healthcheck.py b/src/trialmatchai/cli/healthcheck.py new file mode 100644 index 00000000..8aabf8f1 --- /dev/null +++ b/src/trialmatchai/cli/healthcheck.py @@ -0,0 +1,106 @@ +from __future__ import annotations + +import argparse +import sys + +from trialmatchai.config.config_loader import load_config +from trialmatchai.search import LanceDBSearchBackend +from trialmatchai.services.preflight import run_preflight_checks +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def main() -> int: + parser = argparse.ArgumentParser(description="TrialMatchAI healthcheck") + parser.add_argument( + "--config", + default=None, + help="Path to config.json", + ) + parser.add_argument( + "--require-tables", + action="store_true", + help="Fail if configured LanceDB search tables are missing", + ) + parser.add_argument( + "--registry", + action="store_true", + help="Check registry updater paths and manifest readability.", + ) + parser.add_argument( + "--models", + action="store_true", + help="Require configured model artifacts and optional model dependencies.", + ) + args = parser.parse_args() + + config = load_config(args.config) + issues = 0 + search_backend = LanceDBSearchBackend.from_config(config) + + preflight_issues = run_preflight_checks( + config, + require_patient_inputs=False, + require_trials_json=False, + require_models=args.models, + ) + issues += len(preflight_issues) + + backend_issues = search_backend.health(require_tables=args.require_tables) + if backend_issues: + for issue in backend_issues: + logger.error("Search backend healthcheck failed: %s", issue) + issues += len(backend_issues) + else: + logger.info("LanceDB search backend reachable at %s.", search_backend.db_path) + + if args.registry: + registry_issues = _check_registry(config) + for issue in registry_issues: + logger.error("Registry healthcheck failed: %s", issue) + issues += len(registry_issues) + + return 1 if issues else 0 + + +def _check_registry(config: dict) -> list[str]: + from pathlib import Path + + issues: list[str] = [] + registry_cfg = config.get("registry", {}) + paths_cfg = config.get("paths", {}) + for key in ("raw_dir", "reports_dir"): + value = registry_cfg.get(key) + if not value: + issues.append(f"registry.{key} is not configured.") + continue + try: + Path(value).mkdir(parents=True, exist_ok=True) + except OSError as exc: + issues.append(f"registry.{key} is not writable: {value} ({exc})") + + trials_folder = paths_cfg.get("trials_json_folder") + if not trials_folder: + issues.append("paths.trials_json_folder is not configured.") + else: + try: + Path(trials_folder).mkdir(parents=True, exist_ok=True) + except OSError as exc: + issues.append(f"paths.trials_json_folder is not writable: {trials_folder} ({exc})") + + manifest_path = registry_cfg.get("manifest_path") + if not manifest_path: + issues.append("registry.manifest_path is not configured.") + else: + manifest = Path(manifest_path) + try: + manifest.parent.mkdir(parents=True, exist_ok=True) + if manifest.exists(): + with manifest.open("r", encoding="utf-8"): + pass + except OSError as exc: + issues.append(f"registry.manifest_path is not readable: {manifest} ({exc})") + return issues +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/cli/import_patient.py b/src/trialmatchai/cli/import_patient.py new file mode 100644 index 00000000..242ea77b --- /dev/null +++ b/src/trialmatchai/cli/import_patient.py @@ -0,0 +1,100 @@ +from __future__ import annotations + +import argparse +import sys +from pathlib import Path +from typing import Any + +from trialmatchai.config.config_loader import load_config +from trialmatchai.interop.exporters import profile_to_matching_summary +from trialmatchai.interop.importers import import_patient_path +from trialmatchai.utils.file_utils import write_json_file +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Import patient data into canonical TrialMatchAI profiles." + ) + parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") + parser.add_argument( + "--input", + required=True, + help="Patient input file or OMOP extract directory.", + ) + parser.add_argument( + "--format", + default="auto", + choices=["auto", "text", "phenopacket", "fhir", "fhir-ndjson", "omop"], + help="Input format. Defaults to auto-detection.", + ) + parser.add_argument( + "--output-dir", + default=None, + help="Profile output directory. Defaults to config patient_inputs.profile_dir.", + ) + parser.add_argument( + "--summary-dir", + default=None, + help="Matching summary output directory. Defaults to config patient_inputs.summary_dir.", + ) + parser.add_argument( + "--strict", + action="store_true", + help="Fail on invalid or unsupported source records instead of degrading.", + ) + parser.add_argument( + "--no-entities", + action="store_true", + help="Skip model-backed entity annotation for free-text inputs.", + ) + args = parser.parse_args() + + config = load_config(args.config) + patient_cfg = config.get("patient_inputs", {}) + output_dir = Path(args.output_dir or patient_cfg.get("profile_dir", "data/patients/profiles")) + summary_dir = Path(args.summary_dir or patient_cfg.get("summary_dir", "data/patients/summaries")) + output_dir.mkdir(parents=True, exist_ok=True) + summary_dir.mkdir(parents=True, exist_ok=True) + + entity_annotator = None if args.no_entities else _try_build_entity_annotator(config) + profiles = import_patient_path( + args.input, + input_format=args.format, + entity_annotator=entity_annotator, + strict=args.strict or bool(patient_cfg.get("strict_validation", False)), + ) + if not profiles: + logger.error("No patient profiles were imported from %s.", args.input) + return 1 + + for profile in profiles: + profile_path = output_dir / f"{profile.patient_id}.json" + summary_path = summary_dir / f"{profile.patient_id}.json" + # Atomic writes, summary before profile: the profile is the completion + # marker downstream resume keys on, so it must land last (matches + # orchestration.ingest_inputs). + write_json_file(profile_to_matching_summary(profile), str(summary_path)) + write_json_file(profile.model_dump(mode="json", exclude_none=True), str(profile_path)) + logger.info("Imported patient profile %s -> %s", profile.patient_id, profile_path) + return 0 + + +def _try_build_entity_annotator(config: dict[str, Any]): + try: + from trialmatchai.entities import build_entity_annotator + from trialmatchai.models.embedding import build_embedder + + # Pass an embedder so concept linking can use semantic (vector) search; + # without it linking silently degrades to lexical-only matching. + embedder = build_embedder(config) + return build_entity_annotator(config, embedder=embedder) + except Exception as exc: + logger.warning("Entity annotation unavailable; importing without entities: %s", exc) + return None + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/cli/index_data.py b/src/trialmatchai/cli/index_data.py new file mode 100644 index 00000000..49c23d1c --- /dev/null +++ b/src/trialmatchai/cli/index_data.py @@ -0,0 +1,93 @@ +"""``trialmatchai index`` — prepare + build the LanceDB search tables. + +A thin entry point over the SAME idempotent orchestration stages `build` uses +(`prepare_corpus` + `build_index`), so there is one prepare implementation and one +index implementation, both resumable/skip-if-done. (Historically this command had +its own non-resumable prepare and an always-overwrite index; those are gone.) +""" + +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + +from trialmatchai.config.config_loader import load_config +from trialmatchai.orchestration import build_index, prepare_corpus +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Prepare + build TrialMatchAI LanceDB search tables (idempotent)." + ) + parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") + parser.add_argument( + "--prepare", + action="store_true", + help="Prepare embeddings/entities from normalized trial JSONs before indexing.", + ) + parser.add_argument( + "--trials-json-folder", + default=None, + help="Normalized trial JSONs. Defaults to config paths.trials_json_folder.", + ) + parser.add_argument("--processed-trials-folder", default="data/processed_trials") + parser.add_argument("--processed-criteria-folder", default="data/processed_criteria") + parser.add_argument( + "--force-prepare", + action="store_true", + help="Re-prepare every trial even if already prepared.", + ) + parser.add_argument( + "--reindex", + action="store_true", + help="Rebuild the search tables even if they already exist.", + ) + args = parser.parse_args() + + config = load_config(args.config) + root = _repo_root() + processed_trials = _resolve_path(args.processed_trials_folder, root) + processed_criteria = _resolve_path(args.processed_criteria_folder, root) + + if args.prepare: + prepare_corpus( + config, + trials_json_folder=_resolve_path( + args.trials_json_folder or config["paths"]["trials_json_folder"], root + ), + processed_trials_folder=processed_trials, + processed_criteria_folder=processed_criteria, + force=args.force_prepare, + ) + + build_index( + config, + processed_trials_folder=processed_trials, + processed_criteria_folder=processed_criteria, + force=args.reindex, + ) + logger.info("Search tables ready.") + return 0 + + +def _resolve_path(value: str, root: Path) -> Path: + path = Path(value).expanduser() + if path.is_absolute(): + return path + return (root / path).resolve() + + +def _repo_root() -> Path: + start = Path(__file__).resolve() + for parent in start.parents: + if (parent / "pyproject.toml").exists(): + return parent + return Path.cwd().resolve() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/cli/main.py b/src/trialmatchai/cli/main.py new file mode 100644 index 00000000..df526399 --- /dev/null +++ b/src/trialmatchai/cli/main.py @@ -0,0 +1,100 @@ +from __future__ import annotations + +import argparse +import sys + + +def main() -> int: + parser = argparse.ArgumentParser( + prog="trialmatchai", + description="TrialMatchAI command group.", + ) + subparsers = parser.add_subparsers(dest="command", required=True) + + subparsers.add_parser( + "pipeline", + help="Run the unified e2e pipeline, or any slice (--only/--from/--to/--skip/--force)", + add_help=False, + ) + subparsers.add_parser( + "healthcheck", + help="Run deployment health checks", + add_help=False, + ) + subparsers.add_parser( + "bootstrap-data", + help="Download data and model artifacts", + add_help=False, + ) + subparsers.add_parser("index", help="Build LanceDB search tables", add_help=False) + subparsers.add_parser( + "build-concepts", + help="Build LanceDB concept table", + add_help=False, + ) + subparsers.add_parser( + "update-registry", + help="Fetch and upsert registry studies", + add_help=False, + ) + subparsers.add_parser( + "import-patient", + help="Import patient data profiles", + add_help=False, + ) + subparsers.add_parser( + "build", + help="Build the system (prepare corpus + search index), resumable", + add_help=False, + ) + subparsers.add_parser("run", help="Run the matching pipeline", add_help=False) + subparsers.add_parser( + "e2e", + help="Match a patient end-to-end (pipeline slice index -> ingest -> expand -> match), idempotent", + add_help=False, + ) + subparsers.add_parser( + "trec", + help="End-to-end TREC CT evaluation (preset over e2e)", + add_help=False, + ) + subparsers.add_parser( + "finetune", + help="Fine-tune the CoT / reranker / NER models", + add_help=False, + ) + + args, remainder = parser.parse_known_args() + if args.command == "pipeline": + from trialmatchai.cli.pipeline import main as command + elif args.command == "healthcheck": + from trialmatchai.cli.healthcheck import main as command + elif args.command == "bootstrap-data": + from trialmatchai.cli.bootstrap_data import main as command + elif args.command == "index": + from trialmatchai.cli.index_data import main as command + elif args.command == "build-concepts": + from trialmatchai.cli.build_concepts import main as command + elif args.command == "update-registry": + from trialmatchai.cli.update_registry import main as command + elif args.command == "import-patient": + from trialmatchai.cli.import_patient import main as command + elif args.command == "build": + from trialmatchai.cli.build import main as command + elif args.command == "run": + from trialmatchai.cli.run import main as command + elif args.command == "e2e": + from trialmatchai.cli.e2e import main as command + elif args.command == "trec": + from trialmatchai.cli.trec import main as command + elif args.command == "finetune": + from trialmatchai.finetuning.cli import main as command + else: # pragma: no cover - argparse enforces choices + parser.error(f"Unknown command: {args.command}") + + sys.argv = [f"trialmatchai {args.command}", *remainder] + return command() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/cli/pipeline.py b/src/trialmatchai/cli/pipeline.py new file mode 100644 index 00000000..860c3b28 --- /dev/null +++ b/src/trialmatchai/cli/pipeline.py @@ -0,0 +1,106 @@ +"""``trialmatchai pipeline`` — the one end-to-end pipeline, or any slice of it. + +Default (no selection) runs every stage; each is idempotent, so finished work is +skipped. Select with --only/--from/--to, omit with --skip (handy for ablation), +and redo with --force. +""" + +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + +from trialmatchai.config.config_loader import load_config +from trialmatchai.pipeline import STAGE_NAMES, StageContext, run_pipeline +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def _split(value: str | None) -> list[str]: + return [v.strip() for v in (value or "").split(",") if v.strip()] + + +def main() -> int: + parser = argparse.ArgumentParser( + prog="trialmatchai pipeline", + description=( + "Run the unified TrialMatchAI pipeline or any slice. Stages in order: " + + ", ".join(STAGE_NAMES) + + ". Every stage is idempotent — finished work is skipped automatically." + ), + ) + parser.add_argument("--config", default=None, help="Path to config.json") + parser.add_argument( + "--input", + action="append", + default=[], + help="Patient input file/dir to ingest (repeatable).", + ) + parser.add_argument("--format", default="auto", help="Patient input format (default: auto).") + parser.add_argument( + "--no-entities", action="store_true", help="Ingest patients without entity annotation." + ) + parser.add_argument( + "--trials-json-folder", + default=None, + help="Normalized trial JSONs for prepare. Defaults to config paths.trials_json_folder.", + ) + parser.add_argument("--processed-trials-folder", default="data/processed_trials") + parser.add_argument("--processed-criteria-folder", default="data/processed_criteria") + parser.add_argument( + "--concepts", + action="store_true", + help="In the concepts stage, build the open-vocabulary concept store.", + ) + parser.add_argument("--concepts-csv", default=None, help="OMOP CONCEPT.csv for the concepts stage.") + parser.add_argument("--synonym-csv", default=None, help="OMOP CONCEPT_SYNONYM.csv.") + + sel = parser.add_argument_group("stage selection") + sel.add_argument("--only", default=None, metavar="STAGES", help="Run only these stages.") + sel.add_argument( + "--skip", + default="", + metavar="STAGES", + help="Skip these stages (e.g. ablation: --skip expand).", + ) + sel.add_argument("--from", dest="from_stage", default=None, metavar="STAGE", help="First stage.") + sel.add_argument("--to", dest="to_stage", default=None, metavar="STAGE", help="Last stage.") + sel.add_argument( + "--force", + default="", + metavar="STAGES", + help="Re-run these stages even if done ('all' forces everything).", + ) + args = parser.parse_args() + + config = load_config(args.config) + ctx = StageContext( + config=config, + trials_json_folder=Path(args.trials_json_folder) if args.trials_json_folder else None, + processed_trials_folder=Path(args.processed_trials_folder), + processed_criteria_folder=Path(args.processed_criteria_folder), + inputs=list(args.input), + input_format=args.format, + with_entities=not args.no_entities, + concepts="open" if args.concepts else None, + concept_csv=args.concepts_csv, + synonym_csv=args.synonym_csv, + force=set(_split(args.force)), + ) + try: + return run_pipeline( + ctx, + only=_split(args.only) or None, + skip=_split(args.skip), + from_stage=args.from_stage, + to_stage=args.to_stage, + ) + except ValueError as exc: + parser.error(str(exc)) + return 2 # pragma: no cover - parser.error exits + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/cli/run.py b/src/trialmatchai/cli/run.py new file mode 100644 index 00000000..40898e99 --- /dev/null +++ b/src/trialmatchai/cli/run.py @@ -0,0 +1,27 @@ +from __future__ import annotations + +import argparse +import sys + + +def main() -> int: + parser = argparse.ArgumentParser(description="Run the TrialMatchAI batch pipeline") + parser.add_argument("--config", default=None, help="Path to config.json") + parser.add_argument( + "--force", + action="store_true", + help="Re-match every patient, ignoring existing results (default: resume/skip done).", + ) + args = parser.parse_args() + from trialmatchai.main import main_pipeline + from trialmatchai.orchestration import free_models + + try: + # Idempotent by default: skip patients with valid results. --force redoes all. + return main_pipeline(args.config, resume=not args.force) + finally: + free_models() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/cli/trec.py b/src/trialmatchai/cli/trec.py new file mode 100644 index 00000000..f81df383 --- /dev/null +++ b/src/trialmatchai/cli/trec.py @@ -0,0 +1,69 @@ +"""``trialmatchai trec`` — end-to-end evaluation over the TREC CT tracks. + +A preset over the core e2e orchestration: converts TREC patient topics, builds a +per-track search index restricted to each track's NCT collection, and runs +matching with per-patient resume. Idempotent — re-running skips finished work. +""" + +from __future__ import annotations + +import argparse +import sys + +from trialmatchai.trec.corpus import DEFAULT_TRACKS, TRACK_KEYS +from trialmatchai.trec.runner import run_tracks + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Run TrialMatchAI end-to-end on the official TREC Clinical Trials tracks." + ) + parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") + parser.add_argument( + "--tracks", + default=" ".join(DEFAULT_TRACKS), + help=f"Space-separated track keys to run. Choices: {', '.join(TRACK_KEYS)}. " + f"Default: {' '.join(DEFAULT_TRACKS)} (sigir has no official direct source).", + ) + parser.add_argument("--data-dir", default="data", help="Base data directory.") + parser.add_argument( + "--results-root", default=".", help="Root under which results_trec/ are written." + ) + parser.add_argument( + "--processed-trials-folder", + default=None, + help="Prepared trial JSONs for indexing. Defaults to /processed_trials. " + "Point at /nfs/scratch to build the index from there while data-dir lives on /nfs/home.", + ) + parser.add_argument( + "--processed-criteria-folder", + default=None, + help="Prepared criteria subfolders for indexing. Defaults to /processed_criteria.", + ) + parser.add_argument( + "--index-only", + action="store_true", + help="Convert + build indexes only; skip matching (e.g. on a CPU node).", + ) + parser.add_argument("--reindex", action="store_true", help="Rebuild indexes even if present.") + parser.add_argument("--rematch", action="store_true", help="Re-match patients even if results exist.") + parser.add_argument("--no-eval", action="store_true", help="Skip recall@k evaluation against qrels.") + args = parser.parse_args() + + track_keys = args.tracks.split() + return run_tracks( + track_keys, + config_path=args.config, + data_dir=args.data_dir, + results_root=args.results_root, + processed_trials_folder=args.processed_trials_folder, + processed_criteria_folder=args.processed_criteria_folder, + index_only=args.index_only, + evaluate=not args.no_eval, + force_reindex=args.reindex, + force_rematch=args.rematch, + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/cli/update_registry.py b/src/trialmatchai/cli/update_registry.py new file mode 100644 index 00000000..999737e3 --- /dev/null +++ b/src/trialmatchai/cli/update_registry.py @@ -0,0 +1,201 @@ +from __future__ import annotations + +import argparse +import json +import sys +import time +from dataclasses import replace +from datetime import date, timedelta +from pathlib import Path +from typing import Any + +from trialmatchai.config.config_loader import load_config +from trialmatchai.registry.clinicaltrials_gov import ClinicalTrialsGovClient +from trialmatchai.registry.defaults import DEFAULT_REGISTRY_STATUSES +from trialmatchai.registry.updater import ( + RegistryUpdateConfig, + RegistryUpdater, + normalize_keywords, +) +from trialmatchai.search import InMemorySearchBackend, LanceDBSearchBackend +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Fetch changed ClinicalTrials.gov studies and upsert LanceDB tables." + ) + parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") + parser.add_argument( + "--keyword", + action="append", + default=[], + help="ClinicalTrials.gov keyword query. Repeat for multiple queries.", + ) + parser.add_argument( + "--keywords-file", + default=None, + help="Text file with one ClinicalTrials.gov keyword query per line.", + ) + parser.add_argument("--since", default=None, help="Only process updates since YYYY-MM-DD") + parser.add_argument("--max-studies", type=int, default=None, help="Maximum studies to process") + parser.add_argument( + "--status", + action="append", + default=[], + help="ClinicalTrials.gov overall status filter. Repeat for multiple statuses.", + ) + parser.add_argument("--dry-run", action="store_true", help="Fetch and plan without writing") + parser.add_argument( + "--reindex-all-changed", + action=argparse.BooleanOptionalAction, + default=True, + help="Recompute embeddings/entities and upsert changed studies.", + ) + parser.add_argument( + "--report-path", + default=None, + help="Optional exact path for a copy of the run report JSON.", + ) + parser.add_argument( + "--watch", + action="store_true", + help="Run continuously (server mode): update every --interval seconds.", + ) + parser.add_argument( + "--interval", + type=float, + default=86400.0, + help="Seconds between updates in --watch mode (default 24h).", + ) + args = parser.parse_args() + + config = load_config(args.config) + registry_cfg = config.get("registry", {}) + paths_cfg = config.get("paths", {}) + + since_days = int(registry_cfg.get("since_days", 7)) + since = _resolve_since(args.since, since_days) + keywords = normalize_keywords( + [ + *args.keyword, + *_read_keywords_file( + args.keywords_file or registry_cfg.get("keywords_file") + ), + ] + ) + statuses = tuple(args.status or DEFAULT_REGISTRY_STATUSES) + max_studies = args.max_studies or registry_cfg.get("max_studies") + if max_studies is not None: + max_studies = int(max_studies) + + update_config = RegistryUpdateConfig( + raw_dir=Path(registry_cfg.get("raw_dir", "data/registry/raw")), + normalized_trials_dir=Path(paths_cfg.get("trials_json_folder", "data/trials_jsons")), + manifest_path=Path( + registry_cfg.get("manifest_path", "data/registry/manifest.jsonl") + ), + reports_dir=Path(registry_cfg.get("reports_dir", "data/registry/runs")), + keywords=keywords, + statuses=statuses, + since=since, + max_studies=max_studies, + dry_run=args.dry_run, + reindex_all_changed=args.reindex_all_changed, + failure_threshold=float(registry_cfg.get("failure_threshold", 0.25)), + ) + + client = ClinicalTrialsGovClient( + base_url=registry_cfg.get( + "api_base_url", + "https://clinicaltrials.gov/api/v2/studies", + ), + timeout=float(registry_cfg.get("request_timeout", 30.0)), + rate_limit_per_second=float(registry_cfg.get("rate_limit_per_second", 2.0)), + ) + backend = InMemorySearchBackend() if args.dry_run else LanceDBSearchBackend.from_config(config) + embedder = _NullEmbedder() if args.dry_run else _build_embedder(config) + entity_annotator = None if args.dry_run else _build_entity_annotator(config, embedder) + + updater = RegistryUpdater( + client=client, + backend=backend, + embedder=embedder, + entity_annotator=entity_annotator, + ) + if not args.watch: + return _run_and_report(updater, update_config, args.report_path) + + logger.info( + "Registry watch mode: updating every %.0fs (Ctrl-C to stop).", args.interval + ) + while True: + # Slide the lookback window forward each cycle (unless --since is pinned); + # unchanged studies are deduped by the manifest, so overlap is cheap. + cycle_config = replace(update_config, since=_resolve_since(args.since, since_days)) + try: + _run_and_report(updater, cycle_config, args.report_path) + except Exception: + logger.exception("Registry update cycle failed; retrying next interval") + try: + time.sleep(args.interval) + except KeyboardInterrupt: + logger.info("Registry watch stopped.") + return 0 + + +def _run_and_report(updater: RegistryUpdater, update_config, report_path) -> int: + report = updater.run(update_config) + if report_path: + _write_report_copy(Path(report_path), report.to_dict()) + logger.info("Registry update report: %s", json.dumps(report.to_dict(), sort_keys=True)) + return 1 if report.failure_rate > update_config.failure_threshold else 0 + + +class _NullEmbedder: + def embed_texts(self, texts): + raise RuntimeError("Dry-run updater must not request embeddings.") + + +def _build_embedder(config: dict[str, Any]): + from trialmatchai.models.embedding import build_embedder + + return build_embedder(config) + + +def _build_entity_annotator(config: dict[str, Any], embedder): + from trialmatchai.entities import build_entity_annotator + + return build_entity_annotator(config, embedder=embedder) + + +def _read_keywords_file(path: str | None) -> list[str]: + if not path: + return [] + keyword_path = Path(path) + if not keyword_path.exists(): + raise FileNotFoundError(f"Registry keywords file does not exist: {keyword_path}") + return [ + line.strip() + for line in keyword_path.read_text(encoding="utf-8").splitlines() + if line.strip() and not line.lstrip().startswith("#") + ] + + +def _resolve_since(value: str | None, since_days: int) -> date | None: + if value: + return date.fromisoformat(value) + if since_days <= 0: + return None + return date.today() - timedelta(days=since_days) + + +def _write_report_copy(path: Path, payload: dict[str, Any]) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(json.dumps(payload, indent=2, sort_keys=True), encoding="utf-8") + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/source/Matcher/__init__.py b/src/trialmatchai/config/__init__.py similarity index 100% rename from source/Matcher/__init__.py rename to src/trialmatchai/config/__init__.py diff --git a/src/trialmatchai/config/config.json b/src/trialmatchai/config/config.json new file mode 100644 index 00000000..7f38af8b --- /dev/null +++ b/src/trialmatchai/config/config.json @@ -0,0 +1,141 @@ +{ + "entity_extraction": { + "backend": "gliner2", + "model_name": "fastino/gliner2-base-v1", + "model_revision": null, + "schema_path": "entity_schemas/trialmatchai.yaml", + "threshold": 0.8, + "batch_size": 8, + "device": "auto", + "trust_remote_code": false + }, + "concept_linker": { + "enabled": true, + "db_path": "data/concepts", + "table": "concepts", + "accept_threshold": 0.8, + "reject_threshold": 0.3, + "search_limit": 10 + }, + "paths": { + "output_dir": "results", + "trials_json_folder": "data/trials_jsons" + }, + "patient_inputs": { + "raw_dir": "data/patients/raw", + "profile_dir": "data/patients/profiles", + "summary_dir": "data/patients/summaries", + "default_format": "auto", + "strict_validation": false, + "copy_raw": true + }, + "model": { + "base_model": "microsoft/phi-4", + "base_model_revision": null, + "trust_remote_code": false, + "quantization": { + "load_in_4bit": true, + "bnb_4bit_use_double_quant": true, + "bnb_4bit_quant_type": "nf4", + "bnb_4bit_compute_dtype": "float16" + }, + "cot_adapter_path": "models/finetuned_phi_reasoning", + "reranker_model_path": "google/gemma-2-2b-it", + "reranker_model_revision": null, + "reranker_adapter_path": "models/finetuned_gemma2" + }, + "tokenizer": { + "use_fast": true, + "padding_side": "left" + }, + "global": { + "device": 0 + }, + "search_backend": { + "backend": "lancedb", + "db_path": "data/search", + "trials_table": "trials", + "criteria_table": "criteria", + "candidate_limit": 1000 + }, + "registry": { + "source": "clinicaltrials.gov", + "api_base_url": "https://clinicaltrials.gov/api/v2/studies", + "keywords_file": null, + "since_days": 7, + "max_studies": null, + "request_timeout": 30, + "rate_limit_per_second": 2, + "raw_dir": "data/registry/raw", + "manifest_path": "data/registry/manifest.jsonl", + "reports_dir": "data/registry/runs", + "failure_threshold": 0.25 + }, + "embedder": { + "model_name": "BAAI/bge-m3", + "revision": null, + "trust_remote_code": false, + "pooling": "mean", + "max_length": 512, + "batch_size": 32, + "use_gpu": true, + "use_fp16": false, + "normalize": true + }, + "cot": { + "batch_size": 10 + }, + "LLM_reranker": { + "batch_size": 20 + }, + "search": { + "mode": "hybrid", + "vector_score_threshold": 0.5, + "max_trials_first_level": 1000, + "max_trials_second_level": 100, + "first_level": { + "enabled": true, + "max_trials": 1000, + "per_channel_size": 300, + "fusion": "rrf", + "rrf_k": 60, + "vector_score_threshold": 0.0, + "llm_expansion_enabled": false, + "llm_max_terms": 12, + "write_reports": true, + "hard_filters": ["age", "sex", "overall_status"] + } + }, + "constraints": { + "enabled": true, + "score_weight": 0.25, + "llm_extraction_enabled": false, + "unknown_is_neutral": true, + "write_reports": true + }, + "query_expansion": { + "enabled": false, + "backend": null, + "model": null, + "adapter": null, + "max_new_tokens": 2048, + "max_main_conditions": 11, + "max_other_conditions": 50 + }, + "use_cot_reasoning": true, + "rag": { + "batch_size": 4, + "max_trials_rag": 20 + }, + "vllm": { + "batch_size": 100, + "max_new_tokens": 5000, + "temperature": 0.0, + "top_p": 1.0, + "seed": 1234, + "length_bucket": true, + "gpu_memory_utilization": 0.5, + "max_model_len": 8192, + "tensor_parallel_size": 1 + } +} diff --git a/src/trialmatchai/config/config_loader.py b/src/trialmatchai/config/config_loader.py new file mode 100644 index 00000000..af9ca99e --- /dev/null +++ b/src/trialmatchai/config/config_loader.py @@ -0,0 +1,178 @@ +from __future__ import annotations + +import json +import os +from importlib import resources +from copy import deepcopy +from pathlib import Path +from typing import Any, Dict + +from trialmatchai.config.settings import TrialMatchSettings, apply_env_overrides +from trialmatchai.utils.logging_config import setup_logging + +try: + from dotenv import load_dotenv +except Exception: # pragma: no cover - optional dependency + load_dotenv = None + + +logger = setup_logging(__name__) + + +DEFAULT_CONFIG_RELATIVE_PATH = Path("src/trialmatchai/config/config.json") +CONFIG_RELATIVE_PATHS = ( + Path("trialmatchai/config/config.json"), +) + + +def load_config(config_path: str | os.PathLike[str] | None = None) -> Dict[str, Any]: + """Load and validate configuration from a JSON file with env overrides.""" + if load_dotenv: + load_dotenv(_repo_root() / ".env") + load_dotenv() + + resolved_config = resolve_config_path(config_path) + with resolved_config.open("r", encoding="utf-8") as f: + raw: Dict[str, Any] = json.load(f) + raw = apply_env_overrides(deepcopy(raw)) + settings = TrialMatchSettings.model_validate(raw) + cfg = settings.to_dict() + cfg = normalize_config_paths(cfg, resolved_config) + return cfg + + +def resolve_config_path( + config_path: str | os.PathLike[str] | None = None, +) -> Path: + """Resolve explicit, repo-root, and packaged config paths.""" + root = _repo_root() + candidates: list[Path] = [] + if config_path: + supplied = Path(config_path).expanduser() + if supplied.is_absolute(): + candidates.append(supplied) + else: + candidates.extend( + [ + Path.cwd() / supplied, + root / supplied, + root / "src" / supplied, + ] + ) + if supplied in CONFIG_RELATIVE_PATHS: + candidates.append(root / DEFAULT_CONFIG_RELATIVE_PATH) + else: + candidates.extend( + [ + root / DEFAULT_CONFIG_RELATIVE_PATH, + Path(__file__).resolve().with_name("config.json"), + ] + ) + + for candidate in candidates: + if candidate.exists(): + return candidate.resolve() + + searched = ", ".join(str(path) for path in candidates) + label = str(config_path) if config_path else str(DEFAULT_CONFIG_RELATIVE_PATH) + raise FileNotFoundError(f"Configuration file not found: {label}. Searched: {searched}") + + +def normalize_config_paths(cfg: Dict[str, Any], config_path: Path) -> Dict[str, Any]: + """Normalize known local paths while leaving remote model IDs untouched.""" + root = _repo_root(config_path) + for key in ("output_dir", "trials_json_folder"): + value = cfg.get("paths", {}).get(key) + if value: + cfg["paths"][key] = str(_resolve_local_path(value, root)) + + patient_inputs = cfg.get("patient_inputs", {}) + for key in ("raw_dir", "profile_dir", "summary_dir"): + value = patient_inputs.get(key) + if value: + patient_inputs[key] = str(_resolve_local_path(value, root)) + + schema_path = cfg.get("entity_extraction", {}).get("schema_path") + if schema_path: + cfg["entity_extraction"]["schema_path"] = str( + _resolve_trialmatchai_resource_or_local_path(schema_path, root) + ) + + concept_db_path = cfg.get("concept_linker", {}).get("db_path") + if concept_db_path: + cfg["concept_linker"]["db_path"] = str( + _resolve_local_path(concept_db_path, root) + ) + + search_db_path = cfg.get("search_backend", {}).get("db_path") + if search_db_path: + cfg["search_backend"]["db_path"] = str( + _resolve_local_path(search_db_path, root) + ) + + registry_cfg = cfg.get("registry", {}) + for key in ("keywords_file", "raw_dir", "manifest_path", "reports_dir"): + value = registry_cfg.get(key) + if value: + registry_cfg[key] = str(_resolve_local_path(value, root)) + + for key in ("cot_adapter_path", "reranker_adapter_path"): + value = cfg.get("model", {}).get(key) + if value: + cfg["model"][key] = str(_resolve_local_path(value, root)) + + return cfg + + +def _resolve_local_path(value: str, root: Path) -> Path: + path = Path(value).expanduser() + if path.is_absolute(): + return path.resolve() + return (root / path).resolve() + + +def _resolve_trialmatchai_resource_or_local_path(value: str, root: Path) -> Path: + path = Path(value).expanduser() + if path.is_absolute(): + return path.resolve() + + local_path = (root / path).resolve() + if local_path.exists(): + return local_path + + resource_path = _trialmatchai_resource_path(path) + if resource_path is not None: + return resource_path + + return local_path + + +def _trialmatchai_resource_path(path: Path) -> Path | None: + parts = path.parts + if parts[:2] == ("src", "trialmatchai"): + relative = Path(*parts[2:]) + elif parts and parts[0] == "trialmatchai": + relative = Path(*parts[1:]) + else: + relative = path + + if not relative.parts or relative.parts[0] not in { + "config", + "entity_schemas", + }: + return None + + resource = resources.files("trialmatchai").joinpath(*relative.parts) + if not resource.exists(): + return None + return Path(str(resource)).resolve() + + +def _repo_root(anchor: Path | None = None) -> Path: + start = (anchor or Path(__file__).resolve()).resolve() + if start.is_file(): + start = start.parent + for parent in (start, *start.parents): + if (parent / "pyproject.toml").exists(): + return parent + return Path.cwd().resolve() diff --git a/src/trialmatchai/config/settings.py b/src/trialmatchai/config/settings.py new file mode 100644 index 00000000..73429169 --- /dev/null +++ b/src/trialmatchai/config/settings.py @@ -0,0 +1,444 @@ +from __future__ import annotations + +from typing import Any, Dict, Iterable, Literal, Tuple + +from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator + + +class EntityExtractionSettings(BaseModel): + backend: Literal["gliner2", "regex", "disabled"] = "gliner2" + model_name: str = "fastino/gliner2-base-v1" + model_revision: str | None = None + schema_path: str = "entity_schemas/trialmatchai.yaml" + threshold: float = Field(0.8, ge=0.0, le=1.0) + batch_size: int = Field(8, ge=1) + device: str = "auto" + trust_remote_code: bool = False + # Augment model NER with the deterministic genetic-variant recognizer. + variant_regex: bool = True + model_config = ConfigDict(extra="forbid") + + +class ConceptLinkerSettings(BaseModel): + enabled: bool = True + db_path: str = "data/concepts" + table: str = "concepts" + accept_threshold: float = Field(0.8, ge=0.0, le=1.0) + reject_threshold: float = Field(0.3, ge=0.0, le=1.0) + search_limit: int = Field(10, ge=1) + + @field_validator("reject_threshold") + @classmethod + def validate_reject_threshold(cls, value: float, info): + accept = info.data.get("accept_threshold") + if accept is not None and value > accept: + raise ValueError("concept_linker.reject_threshold must be <= accept_threshold") + return value + + +class PathsSettings(BaseModel): + output_dir: str + trials_json_folder: str + + +class PatientInputSettings(BaseModel): + raw_dir: str = "data/patients/raw" + profile_dir: str = "data/patients/profiles" + summary_dir: str = "data/patients/summaries" + default_format: Literal["auto", "text", "phenopacket", "fhir", "fhir-ndjson", "omop"] = "auto" + strict_validation: bool = False + copy_raw: bool = True + + +class ModelQuantizationSettings(BaseModel): + load_in_4bit: bool = True + bnb_4bit_use_double_quant: bool = True + bnb_4bit_quant_type: str = "nf4" + bnb_4bit_compute_dtype: str = "float16" + + +class ModelSettings(BaseModel): + base_model: str + quantization: ModelQuantizationSettings + cot_adapter_path: str + reranker_model_path: str + reranker_adapter_path: str + trust_remote_code: bool = False + base_model_revision: str | None = None + reranker_model_revision: str | None = None + + +class TokenizerSettings(BaseModel): + use_fast: bool = True + padding_side: str = "left" + + +class GlobalSettings(BaseModel): + device: int | str + + +class SearchBackendSettings(BaseModel): + backend: Literal["lancedb"] = "lancedb" + db_path: str = "data/search" + trials_table: str = "trials" + criteria_table: str = "criteria" + candidate_limit: int = Field(1000, ge=1) + + +class RegistrySettings(BaseModel): + source: Literal["clinicaltrials.gov"] = "clinicaltrials.gov" + api_base_url: str = "https://clinicaltrials.gov/api/v2/studies" + keywords_file: str | None = None + since_days: int = Field(7, ge=0) + max_studies: int | None = Field(default=None, ge=1) + request_timeout: float = Field(30.0, gt=0) + rate_limit_per_second: float = Field(2.0, gt=0) + raw_dir: str = "data/registry/raw" + manifest_path: str = "data/registry/manifest.jsonl" + reports_dir: str = "data/registry/runs" + failure_threshold: float = Field(0.25, ge=0.0, le=1.0) + + +class EmbedderSettings(BaseModel): + backend: Literal["hf", "hashing"] = "hf" + model_name: str = "BAAI/bge-m3" + revision: str | None = None + trust_remote_code: bool = False + pooling: str = "mean" + max_length: int = 512 + batch_size: int = 32 + use_gpu: bool = True + use_fp16: bool = False + normalize: bool = True + hashing_dimensions: int = Field(64, ge=1) + + @field_validator("pooling") + @classmethod + def validate_pooling(cls, value: str) -> str: + if value not in {"mean", "cls"}: + raise ValueError("embedder.pooling must be 'mean' or 'cls'") + return value + + +class FirstLevelSearchSettings(BaseModel): + enabled: bool = True + max_trials: int = Field(1000, ge=1) + per_channel_size: int = Field(300, ge=1) + fusion: Literal["rrf"] = "rrf" + rrf_k: int = Field(60, ge=1) + vector_score_threshold: float = Field(0.0, ge=0.0, le=1.0) + llm_expansion_enabled: bool = False + llm_max_terms: int = Field(12, ge=0) + write_reports: bool = True + # "location" is opt-in (country-level, site-aware); not in the default set. + hard_filters: list[Literal["age", "sex", "overall_status", "location"]] = Field( + default_factory=lambda: ["age", "sex", "overall_status"] + ) + + +class SearchSettings(BaseModel): + mode: Literal["bm25", "vector", "hybrid"] = "hybrid" + vector_score_threshold: float = Field(0.5, ge=0.0, le=1.0) + max_trials_first_level: int = Field(1000, ge=1) + max_trials_second_level: int = Field(100, ge=1) + first_level: FirstLevelSearchSettings = Field( + default_factory=FirstLevelSearchSettings + ) + + @model_validator(mode="before") + @classmethod + def sync_first_level_alias(cls, data): + if not isinstance(data, dict): + return data + normalized = dict(data) + first_level = dict(normalized.get("first_level") or {}) + if "first_level" not in normalized and "max_trials_first_level" in normalized: + first_level["max_trials"] = normalized["max_trials_first_level"] + normalized["first_level"] = first_level + elif "max_trials" in first_level: + normalized["max_trials_first_level"] = first_level["max_trials"] + return normalized + + +class ConstraintSettings(BaseModel): + enabled: bool = True + score_weight: float = Field(0.25, ge=0.0, le=1.0) + llm_extraction_enabled: bool = False + unknown_is_neutral: bool = True + write_reports: bool = True + + +class RagSettings(BaseModel): + enabled: bool = True + backend: Literal["vllm", "transformers"] = "vllm" + batch_size: int = Field(4, ge=1) + max_trials_rag: int = Field(20, ge=1) + + +class VllmSettings(BaseModel): + batch_size: int = Field(100, ge=1) + max_new_tokens: int = Field(5000, ge=1) + temperature: float = Field(0.0, ge=0.0) + top_p: float = Field(1.0, ge=0.0, le=1.0) + seed: int = 1234 + length_bucket: bool = True + gpu_memory_utilization: float = Field(0.5, gt=0.0, le=1.0) + max_model_len: int = Field(8192, ge=256) + tensor_parallel_size: int = Field(1, ge=1) + + +class CotSettings(BaseModel): + batch_size: int = Field(10, ge=1) + + +class LLMRerankerSettings(BaseModel): + enabled: bool = True + backend: Literal["vllm", "transformers"] = "vllm" + batch_size: int = Field(20, ge=1) + + +class QueryExpansionSettings(BaseModel): + """Runtime CoT query expansion (legacy keywords.json behaviour).""" + + enabled: bool = False + backend: Literal["vllm", "transformers"] | None = None + model: str | None = None + adapter: str | None = None + max_new_tokens: int = Field(2048, ge=1) + max_main_conditions: int = Field(11, ge=1) + max_other_conditions: int = Field(50, ge=1) + trust_remote_code: bool = False + + +class TrialMatchSettings(BaseModel): + entity_extraction: EntityExtractionSettings = Field( + default_factory=EntityExtractionSettings + ) + concept_linker: ConceptLinkerSettings = Field(default_factory=ConceptLinkerSettings) + paths: PathsSettings + model: ModelSettings + tokenizer: TokenizerSettings + global_: GlobalSettings = Field(alias="global") + search_backend: SearchBackendSettings = Field(default_factory=SearchBackendSettings) + patient_inputs: PatientInputSettings = Field(default_factory=PatientInputSettings) + registry: RegistrySettings = Field(default_factory=RegistrySettings) + embedder: EmbedderSettings + cot: CotSettings + LLM_reranker: LLMRerankerSettings + search: SearchSettings + constraints: ConstraintSettings = Field(default_factory=ConstraintSettings) + query_expansion: QueryExpansionSettings = Field( + default_factory=QueryExpansionSettings + ) + use_cot_reasoning: bool = True + rag: RagSettings + vllm: VllmSettings + + def to_dict(self) -> Dict[str, Any]: + return self.model_dump(by_alias=True) + + +def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: + """Override config with environment variables for sensitive fields.""" + import os + + string_env_map: dict[str, Tuple[str, ...]] = { + "TRIALMATCHAI_OUTPUT_DIR": ("paths", "output_dir"), + "TRIALMATCHAI_TRIALS_JSON_FOLDER": ("paths", "trials_json_folder"), + "TRIALMATCHAI_PATIENT_RAW_DIR": ("patient_inputs", "raw_dir"), + "TRIALMATCHAI_PATIENT_PROFILE_DIR": ("patient_inputs", "profile_dir"), + "TRIALMATCHAI_PATIENT_SUMMARY_DIR": ("patient_inputs", "summary_dir"), + "TRIALMATCHAI_PATIENT_INPUT_FORMAT": ("patient_inputs", "default_format"), + "TRIALMATCHAI_SEARCH_BACKEND": ("search_backend", "backend"), + "TRIALMATCHAI_SEARCH_DB_PATH": ("search_backend", "db_path"), + "TRIALMATCHAI_SEARCH_TRIALS_TABLE": ("search_backend", "trials_table"), + "TRIALMATCHAI_SEARCH_CRITERIA_TABLE": ("search_backend", "criteria_table"), + "TRIALMATCHAI_SEARCH_MODE": ("search", "mode"), + "TRIALMATCHAI_EMBEDDER_MODEL_NAME": ("embedder", "model_name"), + "TRIALMATCHAI_EMBEDDER_REVISION": ("embedder", "revision"), + "TRIALMATCHAI_MODEL_BASE_MODEL": ("model", "base_model"), + "TRIALMATCHAI_MODEL_BASE_MODEL_REVISION": ( + "model", + "base_model_revision", + ), + "TRIALMATCHAI_MODEL_COT_ADAPTER_PATH": ("model", "cot_adapter_path"), + "TRIALMATCHAI_QUERY_EXPANSION_MODEL": ("query_expansion", "model"), + "TRIALMATCHAI_QUERY_EXPANSION_BACKEND": ("query_expansion", "backend"), + "TRIALMATCHAI_QUERY_EXPANSION_ADAPTER": ("query_expansion", "adapter"), + "TRIALMATCHAI_MODEL_RERANKER_MODEL_PATH": ( + "model", + "reranker_model_path", + ), + "TRIALMATCHAI_MODEL_RERANKER_MODEL_REVISION": ( + "model", + "reranker_model_revision", + ), + "TRIALMATCHAI_MODEL_RERANKER_ADAPTER_PATH": ( + "model", + "reranker_adapter_path", + ), + "TRIALMATCHAI_ENTITY_BACKEND": ("entity_extraction", "backend"), + "TRIALMATCHAI_ENTITY_MODEL_NAME": ("entity_extraction", "model_name"), + "TRIALMATCHAI_ENTITY_MODEL_REVISION": ( + "entity_extraction", + "model_revision", + ), + "TRIALMATCHAI_ENTITY_SCHEMA_PATH": ("entity_extraction", "schema_path"), + "TRIALMATCHAI_ENTITY_DEVICE": ("entity_extraction", "device"), + "TRIALMATCHAI_CONCEPT_DB_PATH": ("concept_linker", "db_path"), + "TRIALMATCHAI_CONCEPT_TABLE": ("concept_linker", "table"), + "TRIALMATCHAI_REGISTRY_SOURCE": ("registry", "source"), + "TRIALMATCHAI_REGISTRY_API_BASE_URL": ("registry", "api_base_url"), + "TRIALMATCHAI_REGISTRY_KEYWORDS_FILE": ("registry", "keywords_file"), + "TRIALMATCHAI_REGISTRY_RAW_DIR": ("registry", "raw_dir"), + "TRIALMATCHAI_REGISTRY_MANIFEST_PATH": ("registry", "manifest_path"), + "TRIALMATCHAI_REGISTRY_REPORTS_DIR": ("registry", "reports_dir"), + } + for env_key, path in string_env_map.items(): + value = os.getenv(env_key) + if value: + _set_nested(raw, path, value) + + bool_env_map: dict[str, Tuple[str, ...]] = { + "TRIALMATCHAI_EMBEDDER_USE_GPU": ("embedder", "use_gpu"), + "TRIALMATCHAI_EMBEDDER_USE_FP16": ("embedder", "use_fp16"), + "TRIALMATCHAI_EMBEDDER_TRUST_REMOTE_CODE": ( + "embedder", + "trust_remote_code", + ), + "TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE": ("model", "trust_remote_code"), + "TRIALMATCHAI_ENTITY_TRUST_REMOTE_CODE": ( + "entity_extraction", + "trust_remote_code", + ), + "TRIALMATCHAI_CONCEPT_LINKER_ENABLED": ("concept_linker", "enabled"), + "TRIALMATCHAI_PATIENT_STRICT_VALIDATION": ( + "patient_inputs", + "strict_validation", + ), + "TRIALMATCHAI_PATIENT_COPY_RAW": ("patient_inputs", "copy_raw"), + "TRIALMATCHAI_CONSTRAINTS_ENABLED": ("constraints", "enabled"), + "TRIALMATCHAI_CONSTRAINTS_LLM_EXTRACTION_ENABLED": ( + "constraints", + "llm_extraction_enabled", + ), + "TRIALMATCHAI_CONSTRAINTS_UNKNOWN_IS_NEUTRAL": ( + "constraints", + "unknown_is_neutral", + ), + "TRIALMATCHAI_CONSTRAINTS_WRITE_REPORTS": ("constraints", "write_reports"), + "TRIALMATCHAI_QUERY_EXPANSION_ENABLED": ("query_expansion", "enabled"), + "TRIALMATCHAI_FIRST_LEVEL_ENABLED": ("search", "first_level", "enabled"), + "TRIALMATCHAI_FIRST_LEVEL_LLM_EXPANSION_ENABLED": ( + "search", + "first_level", + "llm_expansion_enabled", + ), + "TRIALMATCHAI_FIRST_LEVEL_WRITE_REPORTS": ( + "search", + "first_level", + "write_reports", + ), + } + for env_key, path in bool_env_map.items(): + value = os.getenv(env_key) + if value is not None: + _set_nested(raw, path, _parse_bool(value)) + + int_env_map: dict[str, Tuple[str, ...]] = { + "TRIALMATCHAI_SEARCH_CANDIDATE_LIMIT": ( + "search_backend", + "candidate_limit", + ), + "TRIALMATCHAI_EMBEDDER_BATCH_SIZE": ("embedder", "batch_size"), + "TRIALMATCHAI_ENTITY_BATCH_SIZE": ("entity_extraction", "batch_size"), + "TRIALMATCHAI_CONCEPT_SEARCH_LIMIT": ("concept_linker", "search_limit"), + "TRIALMATCHAI_REGISTRY_SINCE_DAYS": ("registry", "since_days"), + "TRIALMATCHAI_REGISTRY_MAX_STUDIES": ("registry", "max_studies"), + "TRIALMATCHAI_SEARCH_MAX_TRIALS_FIRST_LEVEL": ( + "search", + "max_trials_first_level", + ), + "TRIALMATCHAI_FIRST_LEVEL_MAX_TRIALS": ( + "search", + "first_level", + "max_trials", + ), + "TRIALMATCHAI_FIRST_LEVEL_PER_CHANNEL_SIZE": ( + "search", + "first_level", + "per_channel_size", + ), + "TRIALMATCHAI_FIRST_LEVEL_RRF_K": ("search", "first_level", "rrf_k"), + "TRIALMATCHAI_FIRST_LEVEL_LLM_MAX_TERMS": ( + "search", + "first_level", + "llm_max_terms", + ), + "TRIALMATCHAI_SEARCH_MAX_TRIALS_SECOND_LEVEL": ( + "search", + "max_trials_second_level", + ), + "TRIALMATCHAI_RAG_MAX_TRIALS": ("rag", "max_trials_rag"), + "TRIALMATCHAI_VLLM_BATCH_SIZE": ("vllm", "batch_size"), + "TRIALMATCHAI_VLLM_MAX_NEW_TOKENS": ("vllm", "max_new_tokens"), + } + for env_key, path in int_env_map.items(): + value = os.getenv(env_key) + if value: + try: + _set_nested(raw, path, int(value)) + except ValueError: + pass + max_trials_first_level_env = os.getenv("TRIALMATCHAI_SEARCH_MAX_TRIALS_FIRST_LEVEL") + if max_trials_first_level_env: + try: + _set_nested( + raw, + ("search", "first_level", "max_trials"), + int(max_trials_first_level_env), + ) + except ValueError: + pass + + float_env_map: dict[str, Tuple[str, ...]] = { + "TRIALMATCHAI_ENTITY_THRESHOLD": ("entity_extraction", "threshold"), + "TRIALMATCHAI_LINK_ACCEPT": ("concept_linker", "accept_threshold"), + "TRIALMATCHAI_LINK_REJECT": ("concept_linker", "reject_threshold"), + "TRIALMATCHAI_REGISTRY_REQUEST_TIMEOUT": ("registry", "request_timeout"), + "TRIALMATCHAI_REGISTRY_RATE_LIMIT_PER_SECOND": ( + "registry", + "rate_limit_per_second", + ), + "TRIALMATCHAI_REGISTRY_FAILURE_THRESHOLD": ( + "registry", + "failure_threshold", + ), + "TRIALMATCHAI_CONSTRAINTS_SCORE_WEIGHT": ("constraints", "score_weight"), + "TRIALMATCHAI_FIRST_LEVEL_VECTOR_SCORE_THRESHOLD": ( + "search", + "first_level", + "vector_score_threshold", + ), + } + for env_key, path in float_env_map.items(): + value = os.getenv(env_key) + if value: + try: + _set_nested(raw, path, float(value)) + except ValueError: + pass + + return raw + + +def _set_nested(raw: Dict[str, Any], path: Iterable[str], value: Any) -> None: + keys = tuple(path) + cursor: Dict[str, Any] = raw + for key in keys[:-1]: + cursor = cursor.setdefault(key, {}) + cursor[keys[-1]] = value + + +def _parse_bool(value: str) -> bool: + return value.strip().lower() in {"1", "true", "yes", "y", "on"} diff --git a/src/trialmatchai/constraints/__init__.py b/src/trialmatchai/constraints/__init__.py new file mode 100644 index 00000000..d018a0d6 --- /dev/null +++ b/src/trialmatchai/constraints/__init__.py @@ -0,0 +1,30 @@ +from trialmatchai.constraints.evaluation import ( + apply_constraint_score, + build_patient_constraint_context, + evaluate_constraint_set, +) +from trialmatchai.constraints.extraction import extract_constraint_set, normalize_polarity +from trialmatchai.constraints.models import ( + Constraint, + ConstraintEvaluation, + ConstraintSet, + CriterionConstraintEvaluation, + PatientConstraintContext, + PatientConstraintFact, +) +from trialmatchai.constraints.reports import write_constraint_reports + +__all__ = [ + "Constraint", + "ConstraintEvaluation", + "ConstraintSet", + "CriterionConstraintEvaluation", + "PatientConstraintContext", + "PatientConstraintFact", + "apply_constraint_score", + "build_patient_constraint_context", + "evaluate_constraint_set", + "extract_constraint_set", + "normalize_polarity", + "write_constraint_reports", +] diff --git a/src/trialmatchai/constraints/evaluation.py b/src/trialmatchai/constraints/evaluation.py new file mode 100644 index 00000000..61d0c3d7 --- /dev/null +++ b/src/trialmatchai/constraints/evaluation.py @@ -0,0 +1,445 @@ +from __future__ import annotations + +import re +from collections.abc import Iterable, Sequence +from typing import Any + +from trialmatchai.constraints.models import ( + Constraint, + ConstraintEvaluation, + ConstraintSet, + CriterionConstraintEvaluation, + EvaluationStatus, + PatientConstraintContext, + PatientConstraintFact, +) +from trialmatchai.interop.models import ClinicalFact, PatientProfile +from trialmatchai.utils.text import flatten_text + + +MATCH_SIGNAL = 1.0 +INCLUSION_VIOLATION_SIGNAL = -0.6 +EXCLUSION_VIOLATION_SIGNAL = -1.0 +EXCLUSION_NOT_VIOLATED_SIGNAL = 0.25 +# Applied to an inclusion criterion we cannot confirm when unknown_is_neutral=False. +UNKNOWN_INCLUSION_PENALTY = -0.1 + + +def build_patient_constraint_context(profile: PatientProfile) -> PatientConstraintContext: + facts: list[PatientConstraintFact] = [] + facts.extend(_facts_from_clinical(profile.conditions, "condition")) + facts.extend(_facts_from_clinical(profile.phenotypes, "phenotype")) + facts.extend(_facts_from_clinical(profile.observations, "lab")) + facts.extend(_facts_from_clinical(profile.medications, "medication")) + facts.extend(_facts_from_clinical(profile.procedures, "procedure")) + facts.extend(_facts_from_clinical(profile.genomic_findings, "biomarker")) + facts.extend(_facts_from_clinical(profile.cancer_profile, "condition")) + facts.extend(_facts_from_clinical(profile.family_history, "condition")) + facts.extend(_performance_facts(profile)) + return PatientConstraintContext( + patient_id=profile.patient_id, + age_years=profile.demographics.age_years, + sex=profile.demographics.sex, + gender=profile.demographics.gender, + facts=facts, + ) + + +def evaluate_constraint_set( + constraint_set: ConstraintSet, + patient_context: PatientConstraintContext, + *, + unknown_is_neutral: bool = True, +) -> CriterionConstraintEvaluation: + evaluations = [ + evaluate_constraint(constraint, constraint_set, patient_context) + for constraint in constraint_set.constraints + ] + signals = [evaluation.score_signal for evaluation in evaluations if evaluation.score_signal != 0] + if signals: + signal = _clamp(sum(signals) / len(signals)) + elif ( + not unknown_is_neutral + and constraint_set.polarity == "inclusion" + and evaluations + ): + # We could not confirm any inclusion constraint; apply a small penalty. + signal = UNKNOWN_INCLUSION_PENALTY + else: + signal = 0.0 + return CriterionConstraintEvaluation( + nct_id=constraint_set.nct_id, + criteria_id=constraint_set.criteria_id, + criterion=constraint_set.source_text, + polarity=constraint_set.polarity, + evaluations=evaluations, + constraint_signal=signal, + matched_count=sum(1 for evaluation in evaluations if evaluation.status == "matched"), + violated_count=sum(1 for evaluation in evaluations if evaluation.status == "violated"), + unknown_count=sum(1 for evaluation in evaluations if evaluation.status == "unknown"), + not_applicable_count=sum( + 1 for evaluation in evaluations if evaluation.status == "not_applicable" + ), + ) + + +def evaluate_constraint( + constraint: Constraint, + constraint_set: ConstraintSet, + patient_context: PatientConstraintContext, +) -> ConstraintEvaluation: + relation, evidence, reason = _evaluate_relation(constraint, patient_context) + status, signal = _status_and_signal(constraint_set.polarity, relation) + return ConstraintEvaluation( + nct_id=constraint_set.nct_id, + criteria_id=constraint_set.criteria_id, + polarity=constraint_set.polarity, + constraint=constraint, + status=status, + score_signal=signal, + patient_evidence=evidence, + reason=reason, + ) + + +def apply_constraint_score( + base_score: float, + signal: float, + *, + score_weight: float, +) -> float: + return _clamp(base_score + score_weight * signal, lower=0.0, upper=1.0) + + +def _facts_from_clinical( + facts: Sequence[ClinicalFact], + kind: str, +) -> list[PatientConstraintFact]: + output: list[PatientConstraintFact] = [] + for fact in facts: + numeric_value, unit = _parse_numeric_value(fact.description) + output.append( + PatientConstraintFact( + kind=kind, # type: ignore[arg-type] + label=fact.label, + normalized_codes=[ + code.model_dump(mode="json", exclude_none=True) + for code in fact.normalized_codes + ], + value=numeric_value, + unit=unit, + negated=fact.negated, + temporality=fact.temporality, + evidence_text=fact.evidence_text or _fact_text(fact), + source=fact.provenance.model_dump(mode="json", exclude_none=True), + ) + ) + return output + + +def _performance_facts(profile: PatientProfile) -> list[PatientConstraintFact]: + output: list[PatientConstraintFact] = [] + buckets = [ + *profile.observations, + *profile.cancer_profile, + *profile.diagnostic_reports, + ] + for fact in buckets: + text = _fact_text(fact) + for label, pattern in ( + ("ECOG", r"\becog\b[^0-9]*(\d)"), + ("Karnofsky", r"\bkarnofsky\b[^0-9]*(\d{2,3})"), + ): + match = re.search(pattern, text, re.IGNORECASE) + if not match: + continue + output.append( + PatientConstraintFact( + kind="performance_status", + label=label, + value=float(match.group(1)), + negated=fact.negated, + temporality=fact.temporality, + evidence_text=fact.evidence_text or text, + source=fact.provenance.model_dump(mode="json", exclude_none=True), + ) + ) + return output + + +def _evaluate_relation( + constraint: Constraint, + patient_context: PatientConstraintContext, +) -> tuple[str, str | None, str]: + if constraint.kind == "age": + return _evaluate_age(constraint, patient_context) + if constraint.kind == "sex": + return _evaluate_sex(constraint, patient_context) + if constraint.kind == "lab": + return _evaluate_numeric_fact(constraint, patient_context, ("lab",)) + if constraint.kind == "performance_status": + return _evaluate_numeric_fact( + constraint, + patient_context, + ("performance_status", "lab"), + ) + if constraint.kind == "biomarker": + return _evaluate_biomarker(constraint, patient_context) + return _evaluate_concept_fact(constraint, patient_context, (constraint.kind,)) + + +def _evaluate_age( + constraint: Constraint, + patient_context: PatientConstraintContext, +) -> tuple[str, str | None, str]: + age = patient_context.age_years + if age is None: + return "unknown", None, "Patient age is unavailable." + satisfied = _compare_numeric(age, constraint) + evidence = f"Patient age {age:g} years" + if satisfied: + return "satisfied", evidence, "Patient age satisfies the age constraint." + return "unsatisfied", evidence, "Patient age does not satisfy the age constraint." + + +def _evaluate_sex( + constraint: Constraint, + patient_context: PatientConstraintContext, +) -> tuple[str, str | None, str]: + requested = _normalize_text(str(constraint.value or constraint.label)) + current = _normalize_text(patient_context.sex or patient_context.gender or "") + if not current: + return "unknown", None, "Patient sex/gender is unavailable." + if requested in {"all", "any", "both"} or current in {"all", "any", "both"}: + return "satisfied", current, "Sex/gender constraint is broadly compatible." + if requested == current: + return "satisfied", current, "Patient sex/gender satisfies the constraint." + return "unsatisfied", current, "Patient sex/gender does not satisfy the constraint." + + +def _evaluate_numeric_fact( + constraint: Constraint, + patient_context: PatientConstraintContext, + kinds: tuple[str, ...], +) -> tuple[str, str | None, str]: + candidates = _matching_facts(patient_context.facts, constraint, kinds) + if not candidates: + return "unknown", None, f"No patient fact found for {constraint.label}." + for fact in candidates: + if fact.negated: + return "unsatisfied", fact.evidence_text, f"Patient fact is explicitly absent: {fact.label}." + if fact.value is None: + continue + if _compare_numeric(fact.value, constraint): + return "satisfied", fact.evidence_text, f"Patient value satisfies {constraint.label}." + return "unsatisfied", fact.evidence_text, f"Patient value does not satisfy {constraint.label}." + return "unknown", candidates[0].evidence_text, f"No numeric value available for {constraint.label}." + + +_NEGATIVE_BIOMARKER_TERMS = ( + "negative", + "wild type", + "wildtype", + "wild-type", + "not detected", + "no mutation", + "absent", +) + + +def _evaluate_biomarker( + constraint: Constraint, + patient_context: PatientConstraintContext, +) -> tuple[str, str | None, str]: + candidates = _matching_facts( + patient_context.facts, + constraint, + ("biomarker", "lab", "condition"), + ) + if not candidates: + # Patient has no record of this biomarker. + return "absent", None, f"No patient biomarker fact found for {constraint.label}." + + fact = candidates[0] + fact_text = _normalize_text(flatten_text([fact.label, fact.evidence_text])) + patient_negative = fact.negated or any( + term in fact_text for term in _NEGATIVE_BIOMARKER_TERMS + ) + expected_negative = str(constraint.comparator) in {"negative", "wildtype"} + + if expected_negative: + if patient_negative: + return "satisfied", fact.evidence_text, "Patient biomarker is negative/wild-type as required." + return "unsatisfied", fact.evidence_text, "Patient biomarker is not negative/wild-type." + # expected present / positive / mutated + if patient_negative: + return ( + "unsatisfied", + fact.evidence_text, + "Patient biomarker is negative/wild-type; conflicts with the required presence.", + ) + return "satisfied", fact.evidence_text, "Patient biomarker evidence satisfies the constraint." + + +def _evaluate_concept_fact( + constraint: Constraint, + patient_context: PatientConstraintContext, + kinds: tuple[str, ...], +) -> tuple[str, str | None, str]: + candidates = _matching_facts(patient_context.facts, constraint, kinds) + requires_absence = constraint.comparator == "absent" + + # The patient "has" the item when a matching, non-negated fact exists. + present_fact = next((f for f in candidates if not f.negated), None) + evidence = candidates[0].evidence_text if candidates else None + + if requires_absence: + if present_fact is not None: + return "unsatisfied", present_fact.evidence_text, f"Patient has {constraint.label}, but absence is required." + return "satisfied", evidence, f"Patient has no record of {constraint.label} (absence required)." + + if present_fact is not None: + return "satisfied", present_fact.evidence_text, f"Patient fact matches {constraint.label}." + # No matching fact, or only negated ones -> the patient lacks the item. + return "absent", evidence, f"Patient has no record of {constraint.label}." + + +def _status_and_signal(polarity: str, relation: str) -> tuple[EvaluationStatus, float]: + """Map a (polarity, relation) pair to a scoring status and signal. + + Relations: + satisfied - patient meets the criterion's condition / has the item + unsatisfied - patient's value contradicts a numeric bound + absent - patient does not have the item (no record / negated) + unknown - genuinely indeterminate (e.g. age/sex/lab unavailable) + """ + if relation == "not_applicable": + return "not_applicable", 0.0 + + if polarity == "exclusion": + if relation == "satisfied": + # Patient has the excluded item -> excluded. + return "violated", EXCLUSION_VIOLATION_SIGNAL + if relation in {"unsatisfied", "absent"}: + # Patient does not meet / lacks the excluded item -> not excluded. + return "matched", EXCLUSION_NOT_VIOLATED_SIGNAL + return "unknown", 0.0 + + # inclusion / unknown polarity + if relation == "satisfied": + return "matched", MATCH_SIGNAL + if relation == "unsatisfied": + return "violated", INCLUSION_VIOLATION_SIGNAL + # "absent" for an inclusion: we cannot confirm a required presence from an + # (often incomplete) profile, so stay neutral rather than penalize. + return "unknown", 0.0 + + +def _matching_facts( + facts: Iterable[PatientConstraintFact], + constraint: Constraint, + kinds: tuple[str, ...], +) -> list[PatientConstraintFact]: + constraint_text = _normalize_text(constraint.label) + constraint_codes = { + f"{code.get('vocabulary')}:{code.get('code')}".casefold() + for code in constraint.normalized_codes + if code.get("vocabulary") and code.get("code") + } + matches: list[tuple[float, PatientConstraintFact]] = [] + for fact in facts: + if fact.kind not in kinds: + continue + fact_codes = { + f"{code.get('vocabulary')}:{code.get('code')}".casefold() + for code in fact.normalized_codes + if code.get("vocabulary") and code.get("code") + } + if constraint_codes and constraint_codes & fact_codes: + matches.append((1.0, fact)) + continue + fact_text = _normalize_text(flatten_text([fact.label, fact.evidence_text])) + score = _text_match_score(constraint_text, fact_text) + if score > 0: + matches.append((score, fact)) + matches.sort(key=lambda item: item[0], reverse=True) + return [fact for _, fact in matches] + + +def _compare_numeric(value: float, constraint: Constraint) -> bool: + comparator = constraint.comparator + target = _float_or_none(constraint.value) + if comparator == "between": + if constraint.min_value is not None and value < constraint.min_value: + return False + if constraint.max_value is not None and value > constraint.max_value: + return False + return True + if target is None: + return False + if comparator == "gt": + return value > target + if comparator == "ge": + return value >= target + if comparator == "lt": + return value < target + if comparator == "le": + return value <= target + if comparator == "eq": + return value == target + if comparator == "ne": + return value != target + return False + + +def _parse_numeric_value(value: str | None) -> tuple[float | None, str | None]: + if not value: + return None, None + match = re.search(r"(-?\d+(?:\.\d+)?)\s*([A-Za-z/%0-9^µμ.-]+)?", value) + if not match: + return None, None + unit = (match.group(2) or "").strip() or None + return float(match.group(1)), unit + + +def _fact_text(fact: ClinicalFact) -> str: + return flatten_text([fact.label, fact.description, fact.evidence_text]) + + +def _text_match_score(left: str, right: str) -> float: + if not left or not right: + return 0.0 + if left == right: + return 1.0 + if left in right or right in left: + return 0.95 + left_tokens = set(left.split()) + right_tokens = set(right.split()) + if not left_tokens or not right_tokens: + return 0.0 + overlap = len(left_tokens & right_tokens) + if overlap == 0: + return 0.0 + coverage = overlap / len(left_tokens) + jaccard = overlap / len(left_tokens | right_tokens) + score = 0.75 * coverage + 0.25 * jaccard + return score if score >= 0.5 else 0.0 + + +def _normalize_text(value: str) -> str: + value = value.casefold() + value = value.replace("non small", "non-small") + return " ".join(re.findall(r"[a-z0-9-]+", value)) + + +def _float_or_none(value: Any) -> float | None: + try: + if value is None: + return None + return float(value) + except (TypeError, ValueError): + return None + + +def _clamp(value: float, *, lower: float = -1.0, upper: float = 1.0) -> float: + return max(lower, min(upper, value)) diff --git a/src/trialmatchai/constraints/extraction.py b/src/trialmatchai/constraints/extraction.py new file mode 100644 index 00000000..cf095a51 --- /dev/null +++ b/src/trialmatchai/constraints/extraction.py @@ -0,0 +1,487 @@ +from __future__ import annotations + +import re +from typing import Any, Mapping + +from trialmatchai.constraints.models import ( + Constraint, + ConstraintPolarity, + ConstraintSet, +) +from trialmatchai.utils.text import flatten_text + + +GENE_SYMBOLS = ( + "ALK", + "BRAF", + "BRCA1", + "BRCA2", + "EGFR", + "ERBB2", + "HER2", + "KRAS", + "NTRK", + "PD-L1", + "PIK3CA", + "ROS1", + "TP53", +) +LAB_ALIASES = ( + "absolute neutrophil count", + "anc", + "alt", + "ast", + "bilirubin", + "creatinine", + "hemoglobin", + "platelet count", + "platelets", +) + + +def extract_constraint_set( + *, + nct_id: str, + criteria_id: str, + criterion: str, + eligibility_type: str, + entities: Any = None, +) -> ConstraintSet: + text = flatten_text(criterion) + polarity = normalize_polarity(eligibility_type) + constraints: list[Constraint] = [] + constraints.extend(_age_constraints(text)) + constraints.extend(_sex_constraints(text)) + constraints.extend(_performance_constraints(text)) + constraints.extend(_lab_constraints(text)) + constraints.extend(_biomarker_constraints(text)) + constraints.extend(_prior_therapy_constraints(text)) + constraints.extend(_temporal_constraints(text)) + constraints.extend(_entity_constraints(entities, text)) + constraints = _dedupe_constraints(constraints) + return ConstraintSet( + nct_id=str(nct_id), + criteria_id=str(criteria_id), + polarity=polarity, + source_text=text, + source_start=0 if text else None, + source_end=len(text) if text else None, + constraints=constraints, + ) + + +def normalize_polarity(value: str | None) -> ConstraintPolarity: + normalized = (value or "").casefold() + if "excl" in normalized: + return "exclusion" + if "incl" in normalized: + return "inclusion" + return "unknown" + + +def _age_constraints(text: str) -> list[Constraint]: + constraints: list[Constraint] = [] + lower = text.casefold() + # Every numeric age match must carry an explicit age signal — a trailing year + # unit OR a preceding "age/aged" cue — so dosing/lab numbers like + # "100 to 200 mg" or "at least 100 mg" are not mistaken for ages. + year = r"(?:years?|yrs?|y/?o)" + age_cue = r"(?:age[d]?|years?\s+of\s+age)" + + for pattern in ( + rf"\b(\d{{1,3}})\s*(?:-|to|through)\s*(\d{{1,3}})\s*{year}\b", + rf"\b{age_cue}\s*(\d{{1,3}})\s*(?:-|to|through)\s*(\d{{1,3}})\b", + ): + for match in re.finditer(pattern, lower): + start, end = match.span() + constraints.append( + Constraint( + kind="age", + label="age", + comparator="between", + min_value=float(match.group(1)), + max_value=float(match.group(2)), + unit="years", + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + ) + ) + for pattern in ( + rf"\b(\d{{1,3}})\s*{year}\s*(?:or\s+)?(?:older|greater|above)\b", + rf"\b(?:>=|≥|at\s+least)\s*(\d{{1,3}})\s*{year}\b", + rf"\b{age_cue}\s*(\d{{1,3}})\s*(?:or\s+)?(?:older|greater|above)\b", + rf"\b{age_cue}\s*(?:>=|≥|at\s+least)\s*(\d{{1,3}})\b", + ): + for match in re.finditer(pattern, lower): + constraints.append(_age_bound(text, match, "ge", float(match.group(1)))) + for pattern in ( + rf"\b(?:younger|less|under|below)\s+than\s+(\d{{1,3}})\s*{year}\b", + rf"\b{age_cue}\s*(?:younger|less|under|below)\s+than\s+(\d{{1,3}})\b", + ): + for match in re.finditer(pattern, lower): + constraints.append(_age_bound(text, match, "lt", float(match.group(1)))) + for pattern in ( + rf"\b(\d{{1,3}})\s*{year}\s*(?:or\s+)?(?:younger|less|under)\b", + rf"\b{age_cue}\s*(\d{{1,3}})\s*(?:or\s+)?(?:younger|less|under)\b", + ): + for match in re.finditer(pattern, lower): + constraints.append(_age_bound(text, match, "le", float(match.group(1)))) + if not constraints and re.search(r"\badults?\b", lower): + match = re.search(r"\badults?\b", lower) + start, end = match.span() if match else (None, None) + constraints.append( + Constraint( + kind="age", + label="adult", + comparator="ge", + value=18.0, + unit="years", + confidence=0.7, + evidence_text=text[start:end] if start is not None else None, + evidence_start=start, + evidence_end=end, + ) + ) + return constraints + + +def _age_bound(text: str, match: re.Match[str], comparator: str, value: float) -> Constraint: + start, end = match.span() + return Constraint( + kind="age", + label="age", + comparator=comparator, # type: ignore[arg-type] + value=value, + unit="years", + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + ) + + +def _sex_constraints(text: str) -> list[Constraint]: + lower = text.casefold() + constraints: list[Constraint] = [] + female = re.search(r"\b(female|females|woman|women)\b", lower) + male = re.search(r"\b(male|males|man|men)\b", lower) + if female and not male: + constraints.append(_sex_constraint(text, female, "female")) + elif male and not female: + constraints.append(_sex_constraint(text, male, "male")) + return constraints + + +def _sex_constraint(text: str, match: re.Match[str], value: str) -> Constraint: + start, end = match.span() + return Constraint( + kind="sex", + label="sex", + comparator="eq", + value=value, + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + ) + + +def _performance_constraints(text: str) -> list[Constraint]: + constraints: list[Constraint] = [] + lower = text.casefold() + for match in re.finditer( + r"\becog(?:\s+performance\s+status)?(?:\s+of)?\s*(\d)\s*(?:-|to|or)\s*(\d)\b", + lower, + ): + start, end = match.span() + constraints.append( + Constraint( + kind="performance_status", + label="ECOG", + comparator="between", + min_value=float(match.group(1)), + max_value=float(match.group(2)), + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + ) + ) + for match in re.finditer( + r"\becog(?:\s+performance\s+status)?\s*(?:<=|≤|no\s+greater\s+than|up\s+to)\s*(\d)\b", + lower, + ): + start, end = match.span() + constraints.append( + Constraint( + kind="performance_status", + label="ECOG", + comparator="le", + value=float(match.group(1)), + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + ) + ) + for match in re.finditer( + r"\bkarnofsky\b.*?(?:>=|≥|at\s+least)\s*(\d{2,3})\b", + lower, + ): + start, end = match.span() + constraints.append( + Constraint( + kind="performance_status", + label="Karnofsky", + comparator="ge", + value=float(match.group(1)), + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + ) + ) + return constraints + + +def _lab_constraints(text: str) -> list[Constraint]: + constraints: list[Constraint] = [] + aliases = "|".join(re.escape(alias) for alias in LAB_ALIASES) + pattern = re.compile( + rf"\b({aliases})\b(?:[^0-9<>≤≥=]{{0,40}})(>=|<=|≥|≤|>|<|=|at least|greater than|less than)?\s*([0-9]+(?:\.[0-9]+)?)\s*([A-Za-z/%0-9^µμ.-]+)?", + re.IGNORECASE, + ) + for match in pattern.finditer(text): + # Require an explicit comparator: a bare "creatinine 1.5" is directionally + # ambiguous (upper- vs lower-bound), and guessing inverts the signal. + if not match.group(2): + continue + label = _canonical_lab_label(match.group(1)) + comparator = _normalize_comparator(match.group(2)) + start, end = match.span() + constraints.append( + Constraint( + kind="lab", + label=label, + comparator=comparator, + value=float(match.group(3)), + unit=(match.group(4) or "").strip() or None, + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + ) + ) + return constraints + + +def _canonical_lab_label(value: str) -> str: + normalized = value.casefold() + if normalized == "anc": + return "absolute neutrophil count" + if normalized == "platelets": + return "platelet count" + return normalized + + +def _normalize_comparator(value: str) -> str: + normalized = value.strip().casefold() + if normalized in {">=", "≥", "at least", "greater than"}: + return "ge" + if normalized == ">": + return "gt" + if normalized in {"<=", "≤"}: + return "le" + if normalized in {"<", "less than"}: + return "lt" + if normalized == "=": + return "eq" + return "ge" + + +def _biomarker_constraints(text: str) -> list[Constraint]: + constraints: list[Constraint] = [] + gene_pattern = "|".join(re.escape(gene) for gene in GENE_SYMBOLS) + pattern = re.compile( + rf"\b({gene_pattern})\b(?:[-\s]*(mutated|mutation|positive|negative|wild[-\s]?type|amplification|overexpression))?", + re.IGNORECASE, + ) + for match in pattern.finditer(text): + status = (match.group(2) or "").casefold().replace(" ", "-") + comparator = "present" + if status in {"mutated", "mutation"}: + comparator = "mutated" + elif status in {"positive", "amplification", "overexpression"}: + comparator = "positive" + elif status == "negative": + comparator = "negative" + elif status in {"wild-type", "wildtype"}: + comparator = "wildtype" + start, end = match.span() + constraints.append( + Constraint( + kind="biomarker", + label=match.group(1).upper(), + comparator=comparator, # type: ignore[arg-type] + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + confidence=0.9 if comparator != "present" else 0.75, + ) + ) + return constraints + + +def _prior_therapy_constraints(text: str) -> list[Constraint]: + constraints: list[Constraint] = [] + patterns = ( + r"\bprior\s+(?:treatment|therapy)\s+with\s+([^.;,]+)", + r"\bpreviously\s+treated\s+with\s+([^.;,]+)", + r"\breceived\s+prior\s+([^.;,]+)", + r"\bprior\s+investigational\s+therapy\b", + ) + for pattern in patterns: + for match in re.finditer(pattern, text, re.IGNORECASE): + if match.lastindex: + label = match.group(1) + else: + label = "investigational therapy" + start, end = match.span() + constraints.append( + Constraint( + kind="medication", + label=_clean_label(label), + comparator="prior", + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + confidence=0.8, + ) + ) + return constraints + + +def _temporal_constraints(text: str) -> list[Constraint]: + constraints: list[Constraint] = [] + for match in re.finditer( + r"\bwithin\s+(?:the\s+last\s+)?(\d+)\s+(days?|weeks?|months?|years?)\b", + text, + re.IGNORECASE, + ): + start, end = match.span() + constraints.append( + Constraint( + kind="temporal", + label="time window", + comparator="current", + value=float(match.group(1)), + unit=match.group(2).lower(), + temporal_window=text[start:end], + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + confidence=0.7, + ) + ) + return constraints + + +def _entity_constraints(entities: Any, text: str) -> list[Constraint]: + if not isinstance(entities, list): + return [] + constraints: list[Constraint] = [] + for entity in entities: + if not isinstance(entity, Mapping): + continue + group = str(entity.get("entity_group") or entity.get("class") or "").casefold() + label = _clean_label(entity.get("text") or entity.get("entity") or "") + if not label: + continue + kind = _entity_group_to_kind(group) + if kind is None: + continue + start = _safe_int(entity.get("start")) + end = _safe_int(entity.get("end")) + constraints.append( + Constraint( + kind=kind, + label=label, + comparator=_entity_comparator(kind, text), + normalized_codes=_entity_codes(entity), + evidence_text=text[start:end] if start is not None and end is not None else label, + evidence_start=start, + evidence_end=end, + confidence=float(entity.get("score") or 0.8), + ) + ) + return constraints + + +def _entity_group_to_kind(group: str) -> str | None: + if group in {"disease", "condition", "sign symptom", "sign_symptom"}: + return "condition" + if group in {"drug", "medication"}: + return "medication" + if group == "procedure": + return "procedure" + if group == "gene": + return "biomarker" + if group in {"laboratory test", "laboratory_test", "diagnostic test", "diagnostic_test"}: + return "lab" + return None + + +def _entity_comparator(kind: str, text: str) -> str: + if kind == "biomarker": + lower = text.casefold() + if re.search(r"\b(mutated|mutation)\b", lower): + return "mutated" + if re.search(r"\b(positive|amplification|overexpression)\b", lower): + return "positive" + if re.search(r"\bnegative\b", lower): + return "negative" + if kind == "medication" and re.search(r"\b(prior|previous|previously)\b", text, re.IGNORECASE): + return "prior" + return "present" + + +def _entity_codes(entity: Mapping[str, Any]) -> list[dict[str, Any]]: + codes = entity.get("normalized_id") or [] + if isinstance(codes, str): + codes = [codes] + output: list[dict[str, Any]] = [] + for code in codes: + text = str(code) + if not text or text == "CUI-less": + continue + if ":" in text: + vocabulary, value = text.split(":", 1) + else: + vocabulary, value = "local", text + output.append({"vocabulary": vocabulary, "code": value}) + return output + + +def _dedupe_constraints(constraints: list[Constraint]) -> list[Constraint]: + seen: set[tuple[Any, ...]] = set() + output: list[Constraint] = [] + for constraint in constraints: + key = ( + constraint.kind, + constraint.label.casefold(), + constraint.comparator, + constraint.value, + constraint.min_value, + constraint.max_value, + ) + if key in seen: + continue + seen.add(key) + output.append(constraint) + return output + + +def _clean_label(value: Any) -> str: + return re.sub(r"\s+", " ", str(value or "")).strip(" .;,:") + + +def _safe_int(value: Any) -> int | None: + try: + return int(value) + except (TypeError, ValueError): + return None diff --git a/src/trialmatchai/constraints/models.py b/src/trialmatchai/constraints/models.py new file mode 100644 index 00000000..4cb61792 --- /dev/null +++ b/src/trialmatchai/constraints/models.py @@ -0,0 +1,121 @@ +from __future__ import annotations + +from typing import Any, Literal + +from pydantic import BaseModel, ConfigDict, Field + + +ConstraintKind = Literal[ + "age", + "sex", + "condition", + "phenotype", + "medication", + "procedure", + "lab", + "biomarker", + "performance_status", + "temporal", +] +ConstraintPolarity = Literal["inclusion", "exclusion", "unknown"] +ConstraintComparator = Literal[ + "present", + "absent", + "eq", + "ne", + "gt", + "ge", + "lt", + "le", + "between", + "positive", + "negative", + "mutated", + "wildtype", + "prior", + "current", +] +EvaluationStatus = Literal["matched", "violated", "unknown", "not_applicable"] + + +class Constraint(BaseModel): + kind: ConstraintKind + label: str + comparator: ConstraintComparator = "present" + value: float | str | None = None + min_value: float | None = None + max_value: float | None = None + unit: str | None = None + normalized_codes: list[dict[str, Any]] = Field(default_factory=list) + temporal_window: str | None = None + confidence: float = Field(1.0, ge=0.0, le=1.0) + evidence_text: str | None = None + evidence_start: int | None = Field(default=None, ge=0) + evidence_end: int | None = Field(default=None, ge=0) + + model_config = ConfigDict(extra="forbid") + + +class ConstraintSet(BaseModel): + nct_id: str + criteria_id: str + polarity: ConstraintPolarity + source_text: str + source_start: int | None = Field(default=None, ge=0) + source_end: int | None = Field(default=None, ge=0) + constraints: list[Constraint] = Field(default_factory=list) + extractor_version: str = "deterministic-v1" + + model_config = ConfigDict(extra="forbid") + + +class PatientConstraintFact(BaseModel): + kind: ConstraintKind + label: str + normalized_codes: list[dict[str, Any]] = Field(default_factory=list) + value: float | None = None + unit: str | None = None + negated: bool = False + temporality: str | None = None + evidence_text: str | None = None + source: dict[str, Any] = Field(default_factory=dict) + + model_config = ConfigDict(extra="forbid") + + +class PatientConstraintContext(BaseModel): + patient_id: str + age_years: float | None = None + sex: str | None = None + gender: str | None = None + facts: list[PatientConstraintFact] = Field(default_factory=list) + + model_config = ConfigDict(extra="forbid") + + +class ConstraintEvaluation(BaseModel): + nct_id: str + criteria_id: str + polarity: ConstraintPolarity + constraint: Constraint + status: EvaluationStatus + score_signal: float = Field(0.0, ge=-1.0, le=1.0) + patient_evidence: str | None = None + reason: str + + model_config = ConfigDict(extra="forbid") + + +class CriterionConstraintEvaluation(BaseModel): + nct_id: str + criteria_id: str + criterion: str + polarity: ConstraintPolarity + evaluations: list[ConstraintEvaluation] = Field(default_factory=list) + constraint_signal: float = Field(0.0, ge=-1.0, le=1.0) + matched_count: int = 0 + violated_count: int = 0 + unknown_count: int = 0 + not_applicable_count: int = 0 + + model_config = ConfigDict(extra="forbid") diff --git a/src/trialmatchai/constraints/reports.py b/src/trialmatchai/constraints/reports.py new file mode 100644 index 00000000..47070242 --- /dev/null +++ b/src/trialmatchai/constraints/reports.py @@ -0,0 +1,119 @@ +from __future__ import annotations + +from collections import defaultdict +from pathlib import Path +from typing import Iterable + +from trialmatchai.constraints.models import CriterionConstraintEvaluation +from trialmatchai.utils.file_utils import write_json_file, write_text_file + + +def write_constraint_reports( + *, + output_folder: str | Path, + evaluations: Iterable[CriterionConstraintEvaluation], + top_trials: list[dict], +) -> None: + folder = Path(output_folder) + payload = [evaluation.model_dump(mode="json") for evaluation in evaluations] + explained_trials = _build_explained_trials(payload, top_trials) + write_json_file( + {"criteria": payload, "top_trials": top_trials}, + str(folder / "constraint_evaluations.json"), + ) + write_text_file( + _render_markdown(payload, top_trials), + str(folder / "constraint_summary.md"), + ) + write_json_file( + {"top_trials": explained_trials}, + str(folder / "top_trials_explained.json"), + ) + + +def _render_markdown(criteria: list[dict], top_trials: list[dict]) -> list[str]: + lines = ["# Constraint-Aware Retrieval Summary", ""] + if not criteria: + lines.extend( + [ + "No constraint evaluations were produced for this patient.", + "", + ] + ) + return lines + + scores = {trial.get("nct_id"): trial.get("score") for trial in top_trials} + by_trial: dict[str, list[dict]] = defaultdict(list) + for item in criteria: + by_trial[str(item.get("nct_id", "unknown"))].append(item) + + ordered_ids = [str(trial.get("nct_id")) for trial in top_trials if trial.get("nct_id")] + ordered_ids.extend(sorted(set(by_trial) - set(ordered_ids))) + for nct_id in ordered_ids: + trial_items = by_trial.get(nct_id, []) + lines.append(f"## {nct_id}") + score = scores.get(nct_id) + if isinstance(score, (int, float)): + lines.append(f"- Retrieval score: {score:.4f}") + shift = _ranking_shift(trial_items) + if shift: + lines.append(f"- Constraint ranking effect: {shift}") + for status, title in ( + ("matched", "Matched"), + ("violated", "Violated"), + ("unknown", "Unknown"), + ): + entries = _entries_for_status(trial_items, status) + if entries: + lines.append(f"- {title}:") + lines.extend(f" - {entry}" for entry in entries[:8]) + lines.append("") + return lines + + +def _build_explained_trials(criteria: list[dict], top_trials: list[dict]) -> list[dict]: + by_trial: dict[str, list[dict]] = defaultdict(list) + for item in criteria: + by_trial[str(item.get("nct_id", "unknown"))].append(item) + + explained: list[dict] = [] + for trial in top_trials: + nct_id = str(trial.get("nct_id", "")) + trial_items = by_trial.get(nct_id, []) + explained.append( + { + **trial, + "constraint_effect": _ranking_shift(trial_items) or "unchanged", + "matched_constraints": _entries_for_status(trial_items, "matched"), + "violated_constraints": _entries_for_status(trial_items, "violated"), + "unknown_constraints": _entries_for_status(trial_items, "unknown"), + } + ) + return explained + + +def _ranking_shift(trial_items: list[dict]) -> str | None: + if not trial_items: + return None + signal = sum(float(item.get("constraint_signal") or 0.0) for item in trial_items) + if signal > 0.05: + return "boosted" + if signal < -0.05: + return "penalized" + return "unchanged" + + +def _entries_for_status(trial_items: list[dict], status: str) -> list[str]: + entries: list[str] = [] + for item in trial_items: + criterion = item.get("criterion", "") + for evaluation in item.get("evaluations", []): + if evaluation.get("status") != status: + continue + constraint = evaluation.get("constraint", {}) + label = constraint.get("label") or constraint.get("kind") + reason = evaluation.get("reason") or "" + patient = evaluation.get("patient_evidence") or "no patient evidence" + trial = constraint.get("evidence_text") or criterion + entries.append(f"{label}: {reason} Patient: {patient}. Trial: {trial}.") + return entries diff --git a/src/trialmatchai/entities/__init__.py b/src/trialmatchai/entities/__init__.py new file mode 100644 index 00000000..03525712 --- /dev/null +++ b/src/trialmatchai/entities/__init__.py @@ -0,0 +1,13 @@ +from trialmatchai.entities.annotator import ( + SchemaEntityAnnotator, + build_entity_annotator, +) +from trialmatchai.entities.types import ConceptCandidate, EntityAnnotation, EntitySchema + +__all__ = [ + "ConceptCandidate", + "EntityAnnotation", + "EntitySchema", + "SchemaEntityAnnotator", + "build_entity_annotator", +] diff --git a/src/trialmatchai/entities/annotator.py b/src/trialmatchai/entities/annotator.py new file mode 100644 index 00000000..ea3b69b1 --- /dev/null +++ b/src/trialmatchai/entities/annotator.py @@ -0,0 +1,113 @@ +from __future__ import annotations + +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path +from typing import Any, Sequence + +from trialmatchai.entities.linker import ConceptLinker, LanceDBConceptStore +from trialmatchai.entities.recognizers import EntityRecognizer, build_recognizer +from trialmatchai.entities.schemas import load_entity_schemas +from trialmatchai.entities.types import EntityAnnotation +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +class SchemaEntityAnnotator: + def __init__( + self, + recognizer: EntityRecognizer, + schemas: Sequence[Any], + *, + linker: ConceptLinker | None = None, + ): + self.recognizer = recognizer + self.schemas = list(schemas) + self.linker = linker + + def annotate_texts(self, texts: Sequence[str]) -> list[list[EntityAnnotation]]: + recognized = self.recognizer.recognize(texts, self.schemas) + if self.linker is None: + return recognized + return [self.linker.link_annotations(annotations) for annotations in recognized] + + def annotate_text(self, text: str) -> list[dict[str, Any]]: + return [annotation.to_dict() for annotation in self.annotate_texts([text])[0]] + + def annotate_texts_in_parallel( + self, + texts: Sequence[str], + max_workers: int = 20, + ) -> list[list[dict[str, Any]]]: + if max_workers <= 1 or len(texts) <= 1: + return [ + [annotation.to_dict() for annotation in annotations] + for annotations in self.annotate_texts(texts) + ] + + results: list[list[dict[str, Any]]] = [[] for _ in texts] + with ThreadPoolExecutor(max_workers=min(max_workers, len(texts))) as executor: + future_to_index = { + executor.submit(self.annotate_text, text): index + for index, text in enumerate(texts) + } + for future, index in future_to_index.items(): + try: + results[index] = future.result() + except Exception as exc: + logger.exception("Entity annotation failed for text index %s", index) + results[index] = [ + {"error_code": 1, "error_message": str(exc)} + ] + return results + + +def build_entity_annotator( + config: dict[str, Any], + *, + embedder: Any | None = None, +) -> SchemaEntityAnnotator: + extraction_cfg = dict(config.get("entity_extraction") or {}) + linker_cfg = dict(config.get("concept_linker") or {}) + schema_path = extraction_cfg.get("schema_path") + schemas = load_entity_schemas(schema_path) + recognizer = build_recognizer(extraction_cfg) + + linker: ConceptLinker | None = None + if linker_cfg.get("enabled", True): + store = _build_concept_store(linker_cfg, embedder=embedder) + linker = ConceptLinker( + store, + schemas, + accept_threshold=float(linker_cfg.get("accept_threshold", 0.8)), + reject_threshold=float(linker_cfg.get("reject_threshold", 0.3)), + search_limit=int(linker_cfg.get("search_limit", 10)), + ) + + return SchemaEntityAnnotator(recognizer, schemas, linker=linker) + + +def _build_concept_store( + linker_cfg: dict[str, Any], + *, + embedder: Any | None, +) -> LanceDBConceptStore | None: + db_path = linker_cfg.get("db_path") + if not db_path: + logger.warning("Concept linker enabled but concept_linker.db_path is empty.") + return None + + path = Path(db_path) + if not path.exists(): + logger.warning("Concept DB path does not exist; linking will degrade: %s", path) + return None + + try: + return LanceDBConceptStore( + path, + table_name=linker_cfg.get("table", "concepts"), + embedder=embedder, + ) + except Exception as exc: + logger.warning("Concept DB unavailable; linking will degrade: %s", exc) + return None diff --git a/src/trialmatchai/entities/builder.py b/src/trialmatchai/entities/builder.py new file mode 100644 index 00000000..4ef792ca --- /dev/null +++ b/src/trialmatchai/entities/builder.py @@ -0,0 +1,193 @@ +from __future__ import annotations + +import csv +from pathlib import Path +from typing import Any, Iterable, Sequence + +from trialmatchai.entities.types import dedupe_strings + + +DEFAULT_OMOP_VOCABULARIES = ( + "SNOMED", + "ICD10", + "ICD10CM", + "LOINC", + "RxNorm", + "ATC", +) + + +def build_omop_concept_rows( + concept_csv: str | Path, + synonym_csv: str | Path | None = None, + *, + vocabularies: Sequence[str] = DEFAULT_OMOP_VOCABULARIES, +) -> list[dict[str, Any]]: + vocab_filter = {v.casefold() for v in vocabularies} + synonyms_by_concept = _read_omop_synonyms(synonym_csv) if synonym_csv else {} + rows: list[dict[str, Any]] = [] + with Path(concept_csv).open("r", encoding="utf-8-sig", newline="") as handle: + reader = csv.DictReader(handle) + for row in reader: + vocabulary_id = (row.get("vocabulary_id") or "").strip() + if vocab_filter and vocabulary_id.casefold() not in vocab_filter: + continue + concept_id = (row.get("concept_id") or "").strip() + concept_name = (row.get("concept_name") or "").strip() + concept_code = (row.get("concept_code") or "").strip() + if not concept_id or not concept_name or not concept_code: + continue + synonyms = dedupe_strings(tuple(synonyms_by_concept.get(concept_id, ()))) + rows.append( + _concept_row( + concept_id=concept_id, + vocabulary_id=vocabulary_id, + concept_code=concept_code, + concept_name=concept_name, + domain_id=(row.get("domain_id") or "").strip(), + concept_class_id=(row.get("concept_class_id") or "").strip(), + standard_concept=(row.get("standard_concept") or "").strip(), + synonyms=synonyms, + ) + ) + return rows + + +def build_dictionary_rows( + dictionary_path: str | Path, + *, + vocabulary_id: str, + domain_id: str = "", + concept_class_id: str = "Dictionary", +) -> list[dict[str, Any]]: + rows: list[dict[str, Any]] = [] + with Path(dictionary_path).open("r", encoding="utf-8") as handle: + for line in handle: + stripped = line.strip() + if not stripped or "||" not in stripped: + continue + identifiers, names = stripped.split("||", 1) + synonyms = dedupe_strings(tuple(names.split("|"))) + concept_name = synonyms[0] if synonyms else "" + if not concept_name: + continue + for raw_identifier in identifiers.split(","): + concept_code = _strip_prefix(raw_identifier.strip(), vocabulary_id) + if not concept_code: + continue + rows.append( + _concept_row( + concept_id=f"{vocabulary_id}:{concept_code}", + vocabulary_id=vocabulary_id, + concept_code=concept_code, + concept_name=concept_name, + domain_id=domain_id, + concept_class_id=concept_class_id, + standard_concept="", + synonyms=synonyms, + ) + ) + return rows + + +def write_lancedb_table( + rows: Sequence[dict[str, Any]], + *, + db_path: str | Path, + table_name: str = "concepts", + embeddings: Sequence[Sequence[float]] | None = None, + recreate: bool = True, +) -> None: + try: + import lancedb # type: ignore + except Exception as exc: # pragma: no cover - optional dependency + raise RuntimeError( + "Building a LanceDB concept table requires `uv sync --extra entity`." + ) from exc + + payload = [dict(row) for row in rows] + if embeddings is not None: + if len(embeddings) != len(payload): + raise ValueError("Embedding count must match concept row count.") + for row, embedding in zip(payload, embeddings): + row["embedding"] = list(embedding) + + db = lancedb.connect(str(db_path)) + if recreate or not _lancedb_table_exists(db, table_name): + table = db.create_table(table_name, data=payload, mode="overwrite") + else: + table = db.open_table(table_name) + table.add(payload) + try: + table.create_fts_index("fts_text", replace=True) + except Exception: + # Older LanceDB versions or tiny test builds may not support FTS indexes. + pass + + +def concept_texts_for_embedding(rows: Sequence[dict[str, Any]]) -> list[str]: + texts: list[str] = [] + for row in rows: + synonyms = row.get("synonyms") or [] + if isinstance(synonyms, str): + synonyms = synonyms.split("|") + texts.append(" | ".join([row.get("concept_name", ""), *synonyms]).strip()) + return texts + + +def _lancedb_table_exists(db: Any, table_name: str) -> bool: + try: + return table_name in set(db.table_names()) + except Exception: + return False + + +def _read_omop_synonyms(path: str | Path | None) -> dict[str, list[str]]: + if path is None: + return {} + synonyms: dict[str, list[str]] = {} + with Path(path).open("r", encoding="utf-8-sig", newline="") as handle: + reader = csv.DictReader(handle) + for row in reader: + concept_id = (row.get("concept_id") or "").strip() + synonym = (row.get("concept_synonym_name") or "").strip() + if concept_id and synonym: + synonyms.setdefault(concept_id, []).append(synonym) + return synonyms + + +def _concept_row( + *, + concept_id: str, + vocabulary_id: str, + concept_code: str, + concept_name: str, + domain_id: str, + concept_class_id: str, + standard_concept: str, + synonyms: Iterable[str], +) -> dict[str, Any]: + synonyms_tuple = dedupe_strings(tuple(synonyms)) + fts_text = " ".join([concept_name, *synonyms_tuple]) + return { + "concept_id": concept_id, + "vocabulary_id": vocabulary_id, + "concept_code": concept_code, + "concept_name": concept_name, + "domain_id": domain_id, + "concept_class_id": concept_class_id, + "standard_concept": standard_concept, + "synonyms": list(synonyms_tuple), + "fts_text": fts_text, + } + + +def _strip_prefix(identifier: str, vocabulary_id: str) -> str: + if not identifier: + return "" + if ":" not in identifier: + return identifier + prefix, code = identifier.split(":", 1) + if prefix.casefold() == vocabulary_id.casefold(): + return code + return identifier diff --git a/src/trialmatchai/entities/concept_sources.py b/src/trialmatchai/entities/concept_sources.py new file mode 100644 index 00000000..41c34182 --- /dev/null +++ b/src/trialmatchai/entities/concept_sources.py @@ -0,0 +1,242 @@ +"""Open biomedical vocabularies for the entity-linking concept store. + +This turns publicly downloadable ontologies into the concept-dictionary format +consumed by :func:`trialmatchai.entities.builder.build_dictionary_rows` +(``||||...``), so the whole concept store can be +built with a single ``trialmatchai build-concepts --sources open`` command. + +Two source kinds are supported: + * ``obo`` — OBO ontologies (Cell Ontology, HPO, ChEBI, Disease Ontology, + Cellosaurus), filtered by id prefix. + * ``gene_info`` — NCBI ``gene_info`` TSV (symbol + full name + synonyms). + +OMOP clinical vocabularies (SNOMED/LOINC/RxNorm) are *not* here — they come from a +licensed OHDSI Athena ``CONCEPT.csv`` passed via ``--concept-csv``. +""" + +from __future__ import annotations + +import gzip +import re +from dataclasses import dataclass +from pathlib import Path +from typing import IO, Iterator + +import requests + +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + +_SYN_RE = re.compile(r'synonym:\s*"((?:[^"\\]|\\.)*)"') +_WS_RE = re.compile(r"\s+") +_DOWNLOAD_TIMEOUT = 1800 +_CHUNK = 1 << 20 + + +@dataclass(frozen=True) +class ConceptSource: + """A downloadable open vocabulary and how to map it to concept rows.""" + + name: str + url: str + kind: str # "obo" | "gene_info" + vocabulary_id: str + domain_id: str + id_prefix: str | None = None # OBO: keep only ids with this prefix + + @property + def filename(self) -> str: + return self.url.rsplit("/", 1)[-1] + + @property + def dict_filename(self) -> str: + return f"dict_{self.domain_id}.txt" + + +# The default "open" source set (no auth, no licence acceptance required). +OPEN_SOURCES: dict[str, ConceptSource] = { + "genes": ConceptSource( + "genes", + "https://ftp.ncbi.nih.gov/gene/DATA/GENE_INFO/Mammalia/Homo_sapiens.gene_info.gz", + "gene_info", "NCBIGene", "Gene", + ), + "diseases": ConceptSource( + "diseases", "http://purl.obolibrary.org/obo/doid.obo", + "obo", "DOID", "Disease", "DOID:", + ), + "chemicals": ConceptSource( + "chemicals", "https://ftp.ebi.ac.uk/pub/databases/chebi/ontology/chebi_lite.obo", + "obo", "ChEBI", "Chemical", "CHEBI:", + ), + "cell_lines": ConceptSource( + "cell_lines", "https://ftp.expasy.org/databases/cellosaurus/cellosaurus.obo", + "obo", "Cellosaurus", "CellLine", "CVCL_", + ), + "cell_types": ConceptSource( + "cell_types", "http://purl.obolibrary.org/obo/cl.obo", + "obo", "CL", "CellType", "CL:", + ), + "phenotypes": ConceptSource( + "phenotypes", "http://purl.obolibrary.org/obo/hp.obo", + "obo", "HPO", "Phenotype", "HP:", + ), +} + + +def _open(path: Path) -> IO[str]: + if str(path).endswith(".gz"): + return gzip.open(path, "rt", encoding="utf-8") + return open(path, "r", encoding="utf-8") + + +def _clean_names(names: Iterator[str] | list[str]) -> list[str]: + """Normalise whitespace, drop blanks, dedupe case-insensitively (order-preserving).""" + out: list[str] = [] + seen: set[str] = set() + for raw in names: + name = _WS_RE.sub(" ", (raw or "").replace("\\", "")).strip() + key = name.casefold() + if name and key not in seen: + seen.add(key) + out.append(name) + return out + + +def parse_obo(path: Path, prefix: str | None) -> Iterator[tuple[str, list[str]]]: + """Yield ``(id, [name, *synonyms])`` for each non-obsolete OBO term.""" + cid = name = None + synonyms: list[str] = [] + obsolete = False + + def emit() -> tuple[str, list[str]] | None: + if cid and name and not obsolete and (not prefix or cid.startswith(prefix)): + return cid, [name, *synonyms] + return None + + with _open(path) as fh: + for raw in fh: + line = raw.rstrip("\n") + if line == "[Term]": + rec = emit() + if rec: + yield rec + cid = name = None + synonyms = [] + obsolete = False + elif line.startswith("id:"): + cid = line[3:].strip() + elif line.startswith("name:"): + name = line[5:].strip() + elif line.startswith("synonym:"): + m = _SYN_RE.search(line) + if m: + synonyms.append(m.group(1)) + elif line.startswith("is_obsolete:") and "true" in line: + obsolete = True + rec = emit() + if rec: + yield rec + + +def parse_gene_info(path: Path) -> Iterator[tuple[str, list[str]]]: + """Yield ``(gene_id, [symbol, full name, *synonyms, *other designations])``.""" + with _open(path) as fh: + for raw in fh: + if raw.startswith("#"): + continue + cols = raw.rstrip("\n").split("\t") + if len(cols) < 14: + continue + gene_id = cols[1].strip() + symbol = cols[2].strip() + syns = [] if cols[4] == "-" else cols[4].split("|") + full_name = "" if cols[8] == "-" else cols[8].strip() + auth_full = "" if cols[11] == "-" else cols[11].strip() + other = [] if cols[13] == "-" else cols[13].split("|") + names = [n for n in [symbol, auth_full, full_name, *syns, *other] if n] + if gene_id and names: + yield gene_id, names + + +def _iter_source(source: ConceptSource, raw_path: Path) -> Iterator[tuple[str, list[str]]]: + if source.kind == "obo": + return parse_obo(raw_path, source.id_prefix) + if source.kind == "gene_info": + return parse_gene_info(raw_path) + raise ValueError(f"Unknown source kind: {source.kind!r}") + + +def write_dictionary(source: ConceptSource, raw_path: Path, dict_path: Path) -> int: + """Convert a downloaded source file into a concept-dictionary file. Returns rows.""" + n = 0 + with open(dict_path, "w", encoding="utf-8") as out: + for cid, names in _iter_source(source, raw_path): + clean = _clean_names(names) + if cid and clean: + out.write(f"{cid}||{'|'.join(clean)}\n") + n += 1 + return n + + +def download_source( + source: ConceptSource, dest_dir: Path, *, force: bool = False +) -> Path | None: + """Download a source (idempotent, atomic). Returns the path, or None on failure.""" + dest_dir.mkdir(parents=True, exist_ok=True) + dest = dest_dir / source.filename + if dest.exists() and dest.stat().st_size > 0 and not force: + logger.info("cached download: %s", dest) + return dest + logger.info("downloading %s -> %s", source.url, dest) + tmp = dest.with_name(dest.name + ".tmp") + try: + with requests.get(source.url, stream=True, timeout=_DOWNLOAD_TIMEOUT) as resp: + resp.raise_for_status() + with open(tmp, "wb") as handle: + for chunk in resp.iter_content(_CHUNK): + handle.write(chunk) + tmp.replace(dest) + return dest + except Exception: + logger.exception("download failed: %s", source.url) + tmp.unlink(missing_ok=True) + return None + + +def build_open_dictionaries( + work_dir: Path, + *, + sources: list[str] | None = None, + force: bool = False, +) -> list[tuple[ConceptSource, Path]]: + """Download + convert the requested open sources into concept dictionaries. + + Idempotent: existing downloads and converted dictionaries are reused unless + ``force``. Returns ``(source, dict_path)`` for every source that produced a + non-empty dictionary; failed downloads are skipped with a warning. + """ + work_dir = Path(work_dir) + raw_dir = work_dir / "raw" + work_dir.mkdir(parents=True, exist_ok=True) + names = sources or list(OPEN_SOURCES) + results: list[tuple[ConceptSource, Path]] = [] + + for key in names: + source = OPEN_SOURCES[key] + dict_path = work_dir / source.dict_filename + if dict_path.exists() and dict_path.stat().st_size > 0 and not force: + logger.info("cached dictionary: %s", dict_path) + results.append((source, dict_path)) + continue + raw_path = download_source(source, raw_dir, force=force) + if raw_path is None: + logger.warning("skipping %s (download failed)", key) + continue + count = write_dictionary(source, raw_path, dict_path) + logger.info("converted %s: %s concepts -> %s", key, count, dict_path) + if count > 0: + results.append((source, dict_path)) + else: + logger.warning("skipping %s (0 concepts after conversion)", key) + return results diff --git a/src/trialmatchai/entities/linker.py b/src/trialmatchai/entities/linker.py new file mode 100644 index 00000000..967f3c2e --- /dev/null +++ b/src/trialmatchai/entities/linker.py @@ -0,0 +1,352 @@ +from __future__ import annotations + +from dataclasses import replace +from pathlib import Path +from typing import Any, Protocol, Sequence + +from trialmatchai.entities.schemas import schema_by_label +from trialmatchai.entities.types import ( + NO_ENTITY_ID, + ConceptCandidate, + EntityAnnotation, + EntitySchema, + dedupe_strings, +) +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +class ConceptStore(Protocol): + def search( + self, + query: str, + *, + vocabularies: Sequence[str] = (), + domain_hints: Sequence[str] = (), + query_vector: Sequence[float] | None = None, + limit: int = 10, + ) -> list[ConceptCandidate]: + ... + + +class InMemoryConceptStore: + def __init__(self, concepts: Sequence[ConceptCandidate | dict[str, Any]]): + self.concepts = [ + item if isinstance(item, ConceptCandidate) else concept_from_mapping(item) + for item in concepts + ] + + def search( + self, + query: str, + *, + vocabularies: Sequence[str] = (), + domain_hints: Sequence[str] = (), + query_vector: Sequence[float] | None = None, + limit: int = 10, + ) -> list[ConceptCandidate]: + vocab_filter = {v.casefold() for v in vocabularies} + domain_filter = {d.casefold() for d in domain_hints} + scored: list[ConceptCandidate] = [] + for concept in self.concepts: + if vocab_filter and concept.vocabulary_id.casefold() not in vocab_filter: + continue + if domain_filter and concept.domain_id.casefold() not in domain_filter: + continue + score = _lexical_score(query, concept) + if score <= 0: + continue + scored.append( + replace( + concept, + score=score, + source_scores={"lexical": score}, + ) + ) + scored.sort(key=lambda item: item.score, reverse=True) + return scored[:limit] + + +class LanceDBConceptStore: + def __init__( + self, + db_path: str | Path, + *, + table_name: str = "concepts", + embedder: Any | None = None, + ): + try: + import lancedb # type: ignore + except Exception as exc: # pragma: no cover - optional dependency + raise RuntimeError( + "LanceDB concept linking requires the entity extra " + "(`uv sync --extra entity`)." + ) from exc + + self.db_path = str(db_path) + self.table_name = table_name + self.embedder = embedder + self.db = lancedb.connect(self.db_path) + self.table = self.db.open_table(table_name) + + def search( + self, + query: str, + *, + vocabularies: Sequence[str] = (), + domain_hints: Sequence[str] = (), + query_vector: Sequence[float] | None = None, + limit: int = 10, + ) -> list[ConceptCandidate]: + vector = query_vector or self._embed_query(query) + lexical_rows = self._search_fts(query, vocabularies, domain_hints, limit) + vector_rows = ( + self._search_vector(vector, vocabularies, domain_hints, limit) + if vector + else [] + ) + return _rrf_merge(lexical_rows, vector_rows, limit) + + def _embed_query(self, query: str) -> list[float] | None: + if self.embedder is None: + return None + if hasattr(self.embedder, "embed_text"): + return self.embedder.embed_text(query) + if hasattr(self.embedder, "embed_texts"): + vectors = self.embedder.embed_texts([query]) + return vectors[0] if vectors else None + return None + + def _search_fts( + self, + query: str, + vocabularies: Sequence[str], + domain_hints: Sequence[str], + limit: int, + ) -> list[ConceptCandidate]: + try: + search = self.table.search(query, query_type="fts") + where = _lancedb_filter(vocabularies, domain_hints) + if where: + search = search.where(where) + rows = search.limit(limit).to_list() + except Exception as exc: + logger.warning("LanceDB FTS concept search failed: %s", exc) + rows = [] + return [concept_from_mapping(row) for row in rows] + + def _search_vector( + self, + vector: Sequence[float], + vocabularies: Sequence[str], + domain_hints: Sequence[str], + limit: int, + ) -> list[ConceptCandidate]: + try: + search = self.table.search(vector) + where = _lancedb_filter(vocabularies, domain_hints) + if where: + search = search.where(where) + rows = search.limit(limit).to_list() + except Exception as exc: + logger.warning("LanceDB vector concept search failed: %s", exc) + rows = [] + return [concept_from_mapping(row) for row in rows] + + +class ConceptLinker: + def __init__( + self, + store: ConceptStore | None, + schemas: Sequence[EntitySchema], + *, + accept_threshold: float = 0.8, + reject_threshold: float = 0.3, + search_limit: int = 10, + ): + if reject_threshold > accept_threshold: + raise ValueError("reject_threshold must be <= accept_threshold.") + self.store = store + self.schemas = {schema.id: schema for schema in schemas} + self.schemas_by_label = schema_by_label(list(schemas)) + self.accept_threshold = accept_threshold + self.reject_threshold = reject_threshold + self.search_limit = search_limit + + def link_annotations( + self, annotations: Sequence[EntityAnnotation] + ) -> list[EntityAnnotation]: + return [self.link_annotation(annotation) for annotation in annotations] + + def link_annotation(self, annotation: EntityAnnotation) -> EntityAnnotation: + schema = self._schema_for(annotation) + if schema is None or not schema.is_linkable: + return replace(annotation, linker_status="not_linkable") + if self.store is None: + return replace( + annotation, + normalized_id=(NO_ENTITY_ID,), + linker_status="concept_store_unavailable", + ) + + candidates = self.store.search( + annotation.text, + vocabularies=schema.target_vocabularies, + domain_hints=schema.domain_hints, + limit=self.search_limit, + ) + if not candidates: + return replace( + annotation, + normalized_id=(NO_ENTITY_ID,), + concept_candidates=(), + linker_score=0.0, + linker_status="rejected", + ) + + top = candidates[0] + status = _status_for_score( + top.score, + accept_threshold=self.accept_threshold, + reject_threshold=self.reject_threshold, + ) + if status == "accepted": + return replace( + annotation, + normalized_id=(top.normalized_id,), + synonyms=_candidate_synonyms(top), + concept_candidates=tuple(candidates), + linker_score=top.score, + linker_status=status, + ) + return replace( + annotation, + normalized_id=(NO_ENTITY_ID,), + synonyms=(), + concept_candidates=tuple(candidates), + linker_score=top.score, + linker_status=status, + ) + + def _schema_for(self, annotation: EntityAnnotation) -> EntitySchema | None: + if annotation.schema_id and annotation.schema_id in self.schemas: + return self.schemas[annotation.schema_id] + return self.schemas_by_label.get(annotation.entity_group.casefold()) + + +def concept_from_mapping(row: dict[str, Any]) -> ConceptCandidate: + synonyms = row.get("synonyms") or () + if isinstance(synonyms, str): + synonyms = [part.strip() for part in synonyms.split("|")] + return ConceptCandidate( + concept_id=str(row.get("concept_id") or ""), + vocabulary_id=str(row.get("vocabulary_id") or ""), + concept_code=str(row.get("concept_code") or ""), + concept_name=str(row.get("concept_name") or ""), + domain_id=str(row.get("domain_id") or ""), + concept_class_id=str(row.get("concept_class_id") or ""), + standard_concept=str(row.get("standard_concept") or ""), + synonyms=dedupe_strings(tuple(synonyms)), + score=float(row.get("score") or row.get("_score") or 0.0), + source_scores=dict(row.get("source_scores") or {}), + ) + + +def _candidate_synonyms(candidate: ConceptCandidate) -> tuple[str, ...]: + return dedupe_strings((candidate.concept_name, *candidate.synonyms)) + + +def _status_for_score( + score: float, *, accept_threshold: float, reject_threshold: float +) -> str: + if score >= accept_threshold: + return "accepted" + if score < reject_threshold: + return "rejected" + return "ambiguous" + + +def _lexical_score(query: str, concept: ConceptCandidate) -> float: + query_norm = _normalize_text(query) + names = [concept.concept_name, *concept.synonyms] + best = 0.0 + for name in names: + name_norm = _normalize_text(name) + if not name_norm: + continue + if query_norm == name_norm: + best = max(best, 1.0) + elif query_norm in name_norm or name_norm in query_norm: + best = max(best, 0.86) + else: + best = max(best, _token_jaccard(query_norm, name_norm)) + return best + + +def _normalize_text(value: str) -> str: + return " ".join(value.casefold().replace("-", " ").split()) + + +def _token_jaccard(left: str, right: str) -> float: + left_tokens = set(left.split()) + right_tokens = set(right.split()) + if not left_tokens or not right_tokens: + return 0.0 + overlap = len(left_tokens & right_tokens) + if overlap == 0: + return 0.0 + return 0.2 + 0.6 * (overlap / len(left_tokens | right_tokens)) + + +def _lancedb_filter( + vocabularies: Sequence[str], + domain_hints: Sequence[str], +) -> str: + clauses: list[str] = [] + if vocabularies: + quoted = ", ".join(f"'{_sql_escape(v)}'" for v in vocabularies) + clauses.append(f"vocabulary_id IN ({quoted})") + if domain_hints: + quoted = ", ".join(f"'{_sql_escape(d)}'" for d in domain_hints) + clauses.append(f"domain_id IN ({quoted})") + return " AND ".join(clauses) + + +def _sql_escape(value: str) -> str: + return value.replace("'", "''") + + +def _rrf_merge( + lexical_rows: Sequence[ConceptCandidate], + vector_rows: Sequence[ConceptCandidate], + limit: int, + *, + k: int = 60, +) -> list[ConceptCandidate]: + by_id: dict[str, ConceptCandidate] = {} + scores: dict[str, float] = {} + sources: dict[str, dict[str, float]] = {} + + for source_name, rows in (("fts", lexical_rows), ("vector", vector_rows)): + for rank, row in enumerate(rows, start=1): + key = row.normalized_id + by_id.setdefault(key, row) + score = 1.0 / (k + rank) + scores[key] = scores.get(key, 0.0) + score + sources.setdefault(key, {})[source_name] = score + + if not by_id: + return [] + + max_score = max(scores.values()) or 1.0 + merged = [ + replace( + row, + score=min(1.0, scores[key] / max_score), + source_scores=sources.get(key, {}), + ) + for key, row in by_id.items() + ] + merged.sort(key=lambda item: (-item.score, item.concept_name)) + return merged[:limit] diff --git a/src/trialmatchai/entities/recognizers.py b/src/trialmatchai/entities/recognizers.py new file mode 100644 index 00000000..60501b87 --- /dev/null +++ b/src/trialmatchai/entities/recognizers.py @@ -0,0 +1,351 @@ +from __future__ import annotations + +import re +from importlib import resources +from typing import Any, Protocol, Sequence + +from trialmatchai.entities.schemas import schema_by_label +from trialmatchai.entities.types import EntityAnnotation, EntitySchema, NO_ENTITY_ID +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + +VARIANT_PATTERNS_RESOURCE = ("trialmatchai.entities", "resources/variant_patterns.tsv") + + +class EntityRecognizer(Protocol): + def recognize( + self, texts: Sequence[str], schemas: Sequence[EntitySchema] + ) -> list[list[EntityAnnotation]]: + ... + + +class DisabledRecognizer: + def recognize( + self, texts: Sequence[str], schemas: Sequence[EntitySchema] + ) -> list[list[EntityAnnotation]]: + return [[] for _ in texts] + + +class RegexSchemaRecognizer: + """Small deterministic recognizer used for smoke tests and fixture runs.""" + + def recognize( + self, texts: Sequence[str], schemas: Sequence[EntitySchema] + ) -> list[list[EntityAnnotation]]: + compiled = [ + (schema, re.compile(pattern, re.IGNORECASE)) + for schema in schemas + for pattern in schema.patterns + ] + results: list[list[EntityAnnotation]] = [] + for text in texts: + annotations: list[EntityAnnotation] = [] + for schema, pattern in compiled: + for match in pattern.finditer(text): + mention = match.group(0) + annotations.append( + EntityAnnotation( + entity_group=schema.entity_group, + text=mention, + start=match.start(), + end=match.end(), + score=max(schema.threshold, 0.95), + normalized_id=(NO_ENTITY_ID,), + schema_id=schema.id, + ) + ) + results.append(resolve_overlaps(annotations)) + return results + + +def _load_variant_patterns() -> list[tuple[str, "re.Pattern[str]"]]: + """Load curated genetic-variant regexes (label, compiled pattern).""" + package, name = VARIANT_PATTERNS_RESOURCE + try: + raw = resources.files(package).joinpath(name).read_text(encoding="utf-8") + except (FileNotFoundError, ModuleNotFoundError, OSError): + logger.warning("Variant pattern resource not found; variant detection off.") + return [] + patterns: list[tuple[str, "re.Pattern[str]"]] = [] + for line in raw.splitlines(): + if not line.strip(): + continue + parts = line.split("\t") + if len(parts) < 3: + continue + label = parts[0].strip() or "variant" + # The table stores patterns with doubled backslashes; collapse to one. + pattern_text = parts[-1].replace("\\\\", "\\") + try: + patterns.append((label, re.compile(pattern_text))) + except re.error as exc: + logger.warning("Skipping invalid variant pattern %r: %s", label, exc) + return patterns + + +class RegexVariantRecognizer: + """Deterministic recognizer for genetic variants (HGVS mutations, fusions, + chromosome arms, ...) from a curated pattern table. + + Runs alongside the model recognizer to capture precise biomedical strings — + e.g. ``c.1799T>A``, ``p.V600E``, ``EGFR fusion`` — that a generalist NER + model often misses or mangles. Emits high-confidence spans tagged with the + variant type as the entity group. + """ + + def __init__(self, patterns: list[tuple[str, "re.Pattern[str]"]] | None = None): + self._patterns = patterns if patterns is not None else _load_variant_patterns() + + def recognize( + self, texts: Sequence[str], schemas: Sequence[EntitySchema] + ) -> list[list[EntityAnnotation]]: + results: list[list[EntityAnnotation]] = [] + for text in texts: + annotations: list[EntityAnnotation] = [] + for label, pattern in self._patterns: + for match in pattern.finditer(text): + start, end = match.start(), match.end() + if end <= start or not match.group(0).strip(): + continue # skip zero-width / whitespace-only matches + annotations.append( + EntityAnnotation( + entity_group=label, + text=match.group(0).strip(), + start=start, + end=end, + score=0.97, + normalized_id=(NO_ENTITY_ID,), + schema_id=None, + ) + ) + results.append(resolve_overlaps(annotations)) + return results + + +class CompositeRecognizer: + """Runs a primary recognizer plus augmenters and merges their annotations. + + Overlaps are resolved by confidence then span length, so a high-precision + variant match wins over a lower-confidence model span covering the same text. + """ + + def __init__(self, primary: EntityRecognizer, *augmenters: EntityRecognizer): + self._recognizers = [primary, *augmenters] + + def recognize( + self, texts: Sequence[str], schemas: Sequence[EntitySchema] + ) -> list[list[EntityAnnotation]]: + per_recognizer = [r.recognize(texts, schemas) for r in self._recognizers] + merged: list[list[EntityAnnotation]] = [] + for i in range(len(texts)): + combined: list[EntityAnnotation] = [] + for recognizer_results in per_recognizer: + combined.extend(recognizer_results[i]) + merged.append(resolve_overlaps(combined)) + return merged + + +class GLiNER2Recognizer: + def __init__( + self, + model_name: str, + *, + revision: str | None = None, + device: str | None = None, + trust_remote_code: bool = False, + batch_size: int = 8, + ): + try: + from gliner2 import GLiNER2 # type: ignore + except Exception as exc: # pragma: no cover - exercised without optional dep + raise RuntimeError( + "entity_extraction.backend=gliner2 requires the entity extra " + "(`uv sync --extra entity`) and a GLiNER2-compatible model." + ) from exc + + kwargs: dict[str, Any] = {} + if revision: + kwargs["revision"] = revision + if trust_remote_code: + kwargs["trust_remote_code"] = trust_remote_code + self.model = GLiNER2.from_pretrained(model_name, **kwargs) + if device and device != "auto" and hasattr(self.model, "to"): + self.model.to(device) + self.batch_size = batch_size + + def recognize( + self, texts: Sequence[str], schemas: Sequence[EntitySchema] + ) -> list[list[EntityAnnotation]]: + labels = [schema.label for schema in schemas] + label_map = schema_by_label(list(schemas)) + return [ + resolve_overlaps( + _parse_model_entities( + _call_extractor(self.model, text, labels, schemas), + text, + label_map, + ) + ) + for text in texts + ] + + +def build_recognizer(config: dict[str, Any]) -> EntityRecognizer: + backend = str(config.get("backend", "gliner2")).lower() + if backend == "disabled": + return DisabledRecognizer() + if backend == "regex": + return RegexSchemaRecognizer() + if backend == "gliner2": + recognizer = GLiNER2Recognizer( + model_name=config.get("model_name", "fastino/gliner2-base-v1"), + revision=config.get("model_revision"), + device=config.get("device", "auto"), + trust_remote_code=bool(config.get("trust_remote_code", False)), + batch_size=int(config.get("batch_size", 8)), + ) + else: + raise ValueError( + "entity_extraction.backend must be one of: gliner2, regex, disabled." + ) + + # Augment model NER with the deterministic variant recognizer (on by default) + # so precise HGVS/fusion strings are captured alongside model spans. + if bool(config.get("variant_regex", True)): + variants = _load_variant_patterns() + if variants: + return CompositeRecognizer(recognizer, RegexVariantRecognizer(variants)) + return recognizer + + +def resolve_overlaps( + annotations: Sequence[EntityAnnotation], +) -> list[EntityAnnotation]: + ranked = sorted( + annotations, + key=lambda ann: (ann.score, ann.end - ann.start), + reverse=True, + ) + accepted: list[EntityAnnotation] = [] + for candidate in ranked: + if candidate.start < 0 or candidate.end <= candidate.start: + continue + if any(_overlaps(candidate, current) for current in accepted): + continue + accepted.append(candidate) + return sorted(accepted, key=lambda ann: (ann.start, ann.end)) + + +def _overlaps(left: EntityAnnotation, right: EntityAnnotation) -> bool: + return left.start < right.end and right.start < left.end + + +def _call_extractor( + model: Any, + text: str, + labels: list[str], + schemas: Sequence[EntitySchema], +) -> list[dict[str, Any]]: + if hasattr(model, "extract_entities"): + schema_payload = { + schema.label: schema.description + for schema in schemas + } + try: + return _flatten_gliner2_entities( + model.extract_entities( + text, + schema_payload, + include_confidence=True, + include_spans=True, + ) + ) + except TypeError: + pass + for kwargs in ( + {"schema": schema_payload}, + {"labels": labels}, + {}, + ): + try: + return model.extract_entities(text, **kwargs) + except TypeError: + continue + if hasattr(model, "predict_entities"): + return model.predict_entities(text, labels) + raise RuntimeError("Selected entity model does not expose an entity extraction API.") + + +def _parse_model_entities( + raw_entities: Sequence[dict[str, Any]] | dict[str, Any], + text: str, + label_map: dict[str, EntitySchema], +) -> list[EntityAnnotation]: + parsed: list[EntityAnnotation] = [] + for raw in _flatten_gliner2_entities(raw_entities): + label = str(raw.get("label") or raw.get("entity_group") or raw.get("type") or "") + schema = label_map.get(label.casefold()) + if schema is None: + continue + mention = str(raw.get("text") or raw.get("span") or raw.get("mention") or "") + start = _as_int(raw.get("start")) + end = _as_int(raw.get("end")) + if start is None or end is None: + start, end = _find_span(text, mention) + if start is None or end is None: + continue + mention = text[start:end] + score = float(raw.get("score") or raw.get("confidence") or 0.0) + if score < schema.threshold: + continue + parsed.append( + EntityAnnotation( + entity_group=schema.entity_group, + text=mention, + start=start, + end=end, + score=score, + normalized_id=(NO_ENTITY_ID,), + schema_id=schema.id, + ) + ) + return parsed + + +def _flatten_gliner2_entities(raw_entities: Any) -> list[dict[str, Any]]: + if not isinstance(raw_entities, dict): + return list(raw_entities or []) + entities = raw_entities.get("entities") + if not isinstance(entities, dict): + return [] + flattened: list[dict[str, Any]] = [] + for label, values in entities.items(): + if not isinstance(values, list): + continue + for value in values: + if isinstance(value, dict): + item = dict(value) + else: + item = {"text": str(value)} + item.setdefault("label", label) + flattened.append(item) + return flattened + + +def _find_span(text: str, mention: str) -> tuple[int | None, int | None]: + if not mention: + return None, None + start = text.casefold().find(mention.casefold()) + if start < 0: + return None, None + return start, start + len(mention) + + +def _as_int(value: Any) -> int | None: + try: + if value is None: + return None + return int(value) + except (TypeError, ValueError): + return None diff --git a/source/regex/regex_variants.tsv b/src/trialmatchai/entities/resources/variant_patterns.tsv similarity index 100% rename from source/regex/regex_variants.tsv rename to src/trialmatchai/entities/resources/variant_patterns.tsv diff --git a/src/trialmatchai/entities/schemas.py b/src/trialmatchai/entities/schemas.py new file mode 100644 index 00000000..d683d270 --- /dev/null +++ b/src/trialmatchai/entities/schemas.py @@ -0,0 +1,111 @@ +from __future__ import annotations + +from importlib import resources +from pathlib import Path +from typing import Any + +import yaml + +from trialmatchai.entities.types import EntitySchema + + +DEFAULT_SCHEMA_RESOURCE = "entity_schemas/trialmatchai.yaml" + + +class EntitySchemaError(ValueError): + pass + + +def default_schema_path() -> Path: + return Path(str(resources.files("trialmatchai").joinpath(DEFAULT_SCHEMA_RESOURCE))) + + +def load_entity_schemas(path: str | Path | None = None) -> list[EntitySchema]: + if path: + handle_source = Path(path).expanduser() + handle = handle_source.open("r", encoding="utf-8") + else: + handle = resources.files("trialmatchai").joinpath(DEFAULT_SCHEMA_RESOURCE).open( + "r", + encoding="utf-8", + ) + with handle: + raw = yaml.safe_load(handle) or {} + return parse_entity_schemas(raw) + + +def parse_entity_schemas(raw: dict[str, Any]) -> list[EntitySchema]: + entries = raw.get("entities") + if not isinstance(entries, list) or not entries: + raise EntitySchemaError("Entity schema must contain a non-empty 'entities' list.") + + schemas: list[EntitySchema] = [] + seen_ids: set[str] = set() + for entry in entries: + if not isinstance(entry, dict): + raise EntitySchemaError("Each entity schema entry must be an object.") + + schema_id = _required_string(entry, "id") + if schema_id in seen_ids: + raise EntitySchemaError(f"Duplicate entity schema id: {schema_id}") + seen_ids.add(schema_id) + + threshold = float(entry.get("threshold", 0.8)) + if not 0 <= threshold <= 1: + raise EntitySchemaError( + f"Entity schema '{schema_id}' threshold must be between 0 and 1." + ) + + target_vocabularies = _string_tuple(entry.get("target_vocabularies", ())) + if entry.get("linkable_fields", ["text"]) and not target_vocabularies: + raise EntitySchemaError( + f"Entity schema '{schema_id}' is linkable but has no target vocabularies." + ) + + schemas.append( + EntitySchema( + id=schema_id, + label=_required_string(entry, "label"), + entity_group=str(entry.get("entity_group") or schema_id), + description=_required_string(entry, "description"), + target_vocabularies=target_vocabularies, + domain_hints=_string_tuple(entry.get("domain_hints", ())), + linkable_fields=_string_tuple(entry.get("linkable_fields", ("text",))), + threshold=threshold, + query_expansion=bool(entry.get("query_expansion", False)), + patterns=_string_tuple(entry.get("patterns", ())), + aliases=_string_tuple(entry.get("aliases", ())), + ) + ) + return schemas + + +def schema_by_label(schemas: list[EntitySchema]) -> dict[str, EntitySchema]: + mapping: dict[str, EntitySchema] = {} + for schema in schemas: + for label in schema.recognizer_labels: + mapping[label.casefold()] = schema + return mapping + + +def _required_string(entry: dict[str, Any], key: str) -> str: + value = entry.get(key) + if not isinstance(value, str) or not value.strip(): + raise EntitySchemaError(f"Entity schema field '{key}' must be a non-empty string.") + return value.strip() + + +def _string_tuple(value: Any) -> tuple[str, ...]: + if value is None: + return () + if isinstance(value, str): + return (value.strip(),) if value.strip() else () + if not isinstance(value, list | tuple): + raise EntitySchemaError("Schema string-list fields must be strings or lists.") + cleaned = [] + for item in value: + if not isinstance(item, str): + raise EntitySchemaError("Schema string-list fields may only contain strings.") + if item.strip(): + cleaned.append(item.strip()) + return tuple(cleaned) diff --git a/src/trialmatchai/entities/types.py b/src/trialmatchai/entities/types.py new file mode 100644 index 00000000..72a6e87c --- /dev/null +++ b/src/trialmatchai/entities/types.py @@ -0,0 +1,135 @@ +from __future__ import annotations + +from dataclasses import dataclass, field +from typing import Any + + +NO_ENTITY_ID = "CUI-less" + + +@dataclass(frozen=True) +class EntitySchema: + id: str + label: str + entity_group: str + description: str + target_vocabularies: tuple[str, ...] = () + domain_hints: tuple[str, ...] = () + linkable_fields: tuple[str, ...] = ("text",) + threshold: float = 0.8 + query_expansion: bool = False + patterns: tuple[str, ...] = () + aliases: tuple[str, ...] = () + + @property + def is_linkable(self) -> bool: + return bool(self.linkable_fields) + + @property + def recognizer_labels(self) -> tuple[str, ...]: + labels = [self.label, self.id, self.entity_group, *self.aliases] + return tuple(dict.fromkeys(label for label in labels if label)) + + +@dataclass(frozen=True) +class ConceptCandidate: + concept_id: str + vocabulary_id: str + concept_code: str + concept_name: str + domain_id: str = "" + concept_class_id: str = "" + standard_concept: str = "" + synonyms: tuple[str, ...] = () + score: float = 0.0 + source_scores: dict[str, float] = field(default_factory=dict) + + @property + def normalized_id(self) -> str: + return normalize_concept_id(self.vocabulary_id, self.concept_code) + + def to_dict(self) -> dict[str, Any]: + return { + "concept_id": self.concept_id, + "vocabulary_id": self.vocabulary_id, + "concept_code": self.concept_code, + "concept_name": self.concept_name, + "domain_id": self.domain_id, + "concept_class_id": self.concept_class_id, + "standard_concept": self.standard_concept, + "synonyms": list(self.synonyms), + "score": self.score, + "source_scores": dict(self.source_scores), + "normalized_id": self.normalized_id, + } + + +@dataclass(frozen=True) +class EntityAnnotation: + entity_group: str + text: str + start: int + end: int + score: float + normalized_id: tuple[str, ...] = (NO_ENTITY_ID,) + synonyms: tuple[str, ...] = () + concept_candidates: tuple[ConceptCandidate, ...] = () + linker_score: float | None = None + linker_status: str = "not_linked" + schema_id: str | None = None + + def to_dict(self) -> dict[str, Any]: + return { + "entity_group": self.entity_group, + "text": self.text, + "start": self.start, + "end": self.end, + "score": self.score, + "normalized_id": list(self.normalized_id), + "synonyms": list(self.synonyms), + "concept_candidates": [ + candidate.to_dict() for candidate in self.concept_candidates + ], + "linker_score": self.linker_score, + "linker_status": self.linker_status, + } + + +def normalize_concept_id(vocabulary_id: str, concept_code: str) -> str: + vocab = vocabulary_id.strip() + code = concept_code.strip() + if not vocab or not code: + return NO_ENTITY_ID + if ":" in code: + return code + + canonical_vocab = { + "SNOMED": "SNOMED", + "SNOMEDCT": "SNOMED", + "ICD10": "ICD10", + "ICD10CM": "ICD10CM", + "LOINC": "LOINC", + "RXNORM": "RxNorm", + "RXNORM EXTENSION": "RxNorm", + "ATC": "ATC", + "ENTREZGENE": "EntrezGene", + "NCBIGENE": "EntrezGene", + "CELLOSAURUS": "Cellosaurus", + "NCBITAXON": "NCBITaxon", + }.get(vocab.upper(), vocab) + return f"{canonical_vocab}:{code}" + + +def dedupe_strings(values: list[str] | tuple[str, ...]) -> tuple[str, ...]: + seen: set[str] = set() + deduped: list[str] = [] + for value in values: + cleaned = value.strip() + if not cleaned: + continue + key = cleaned.casefold() + if key in seen: + continue + seen.add(key) + deduped.append(cleaned) + return tuple(deduped) diff --git a/src/trialmatchai/entity_schemas/trialmatchai.yaml b/src/trialmatchai/entity_schemas/trialmatchai.yaml new file mode 100644 index 00000000..95acc4fc --- /dev/null +++ b/src/trialmatchai/entity_schemas/trialmatchai.yaml @@ -0,0 +1,122 @@ +version: 1 +entities: + - id: disease + label: disease or condition + entity_group: disease + description: Diagnosed diseases, clinical conditions, syndromes, and disorders. + aliases: [condition, disorder, syndrome] + target_vocabularies: [SNOMED, ICD10, ICD10CM] + domain_hints: [Condition] + linkable_fields: [text] + threshold: 0.80 + query_expansion: true + patterns: + - "\\b(?:cancer|carcinoma|diabetes|melanoma|leukemia|lymphoma|asthma|hypertension)\\b" + - id: gene + label: gene + entity_group: gene + description: Human genes or gene products mentioned as trial criteria. + aliases: [gene symbol, biomarker] + target_vocabularies: [EntrezGene] + domain_hints: [Gene] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:BRCA1|BRCA2|EGFR|ALK|KRAS|BRAF|TP53|ERBB2|HER2)\\b" + - id: medication + label: drug or medication + entity_group: drug + description: Drugs, medications, biologics, compounds, and therapeutic agents. + aliases: [drug, medication, biologic, compound] + target_vocabularies: [RxNorm, ATC] + domain_hints: [Drug] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:aspirin|metformin|pembrolizumab|nivolumab|cisplatin|paclitaxel)\\b" + - id: procedure + label: procedure + entity_group: procedure + description: Clinical procedures, interventions, treatments, and surgeries. + aliases: [treatment, surgical procedure, intervention] + target_vocabularies: [SNOMED] + domain_hints: [Procedure] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:surgery|radiotherapy|chemotherapy|biopsy|transplantation)\\b" + - id: diagnostic_test + label: diagnostic test + entity_group: diagnostic test + description: Diagnostic assays and tests used to establish eligibility. + aliases: [test, assay] + target_vocabularies: [LOINC, SNOMED] + domain_hints: [Measurement, Procedure] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:MRI|CT scan|PET scan|biopsy|ECG|EKG)\\b" + - id: laboratory_test + label: laboratory test + entity_group: laboratory test + description: Laboratory measurements, lab panels, biomarkers, and analytes. + aliases: [lab test, laboratory value, analyte] + target_vocabularies: [LOINC] + domain_hints: [Measurement] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:hemoglobin|creatinine|ALT|AST|bilirubin|platelet count)\\b" + - id: radiology + label: radiology + entity_group: radiology + description: Imaging modalities and radiology findings used in criteria. + aliases: [imaging] + target_vocabularies: [LOINC, SNOMED] + domain_hints: [Measurement, Procedure] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:radiograph|ultrasound|mammogram|MRI|CT)\\b" + - id: sign_symptom + label: sign or symptom + entity_group: sign symptom + description: Patient signs, symptoms, and clinical findings. + aliases: [symptom, sign] + target_vocabularies: [SNOMED] + domain_hints: [Condition, Observation] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:fever|pain|fatigue|nausea|dyspnea|cough)\\b" + - id: cell_type + label: cell type + entity_group: cell type + description: Cell types, immune cells, and tissue cell populations. + aliases: [cell population] + target_vocabularies: [Cellosaurus] + domain_hints: [Cell] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:T cell|B cell|macrophage|neutrophil|fibroblast)\\b" + - id: species + label: species + entity_group: species + description: Species and organisms in translational eligibility criteria. + aliases: [organism] + target_vocabularies: [NCBITaxon] + domain_hints: [Species] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:human|mouse|rat|zebrafish|macaque)\\b" diff --git a/src/trialmatchai/finetuning/__init__.py b/src/trialmatchai/finetuning/__init__.py new file mode 100644 index 00000000..a1171de5 --- /dev/null +++ b/src/trialmatchai/finetuning/__init__.py @@ -0,0 +1,17 @@ +"""Fine-tuning utilities for TrialMatchAI's local models. + +Lets users train their own NER (GLiNER2), reranker (LoRA), and CoT eligibility +(LoRA) models and plug them straight back into the pipeline via config: + +- NER: entity_extraction.model_name -> a fine-tuned GLiNER2 checkpoint +- reranker: model.reranker_adapter_path -> a LoRA adapter +- CoT: model.cot_adapter_path -> a LoRA adapter + +All heavy training dependencies are imported lazily, so this package imports +cleanly without the ``finetune`` extra installed. Install it with +``uv sync --extra finetune``. +""" + +from trialmatchai.finetuning.config import FinetuneConfig + +__all__ = ["FinetuneConfig"] diff --git a/src/trialmatchai/finetuning/_sft.py b/src/trialmatchai/finetuning/_sft.py new file mode 100644 index 00000000..12973778 --- /dev/null +++ b/src/trialmatchai/finetuning/_sft.py @@ -0,0 +1,231 @@ +"""Shared LoRA supervised fine-tuning loop for causal LMs. + +Builds (input_ids, labels) from chat messages with the prompt masked to -100 so +loss is computed only on the assistant completion, then trains a LoRA adapter +and saves it. Heavy dependencies are imported lazily. +""" + +from __future__ import annotations + +import importlib.util +from typing import Dict, List, Optional + +from trialmatchai.finetuning.config import FinetuneConfig +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def _load_train_deps(): + try: + import torch + from datasets import Dataset + from peft import ( + LoraConfig, + TaskType, + get_peft_model, + prepare_model_for_kbit_training, + ) + from transformers import ( + AutoModelForCausalLM, + AutoTokenizer, + BitsAndBytesConfig, + DataCollatorForSeq2Seq, + Trainer, + ) + except Exception as exc: # pragma: no cover - exercised only without the extra + raise RuntimeError( + "Fine-tuning requires the optional `finetune` dependencies " + "(`uv sync --extra finetune`)." + ) from exc + return { + "torch": torch, + "Dataset": Dataset, + "LoraConfig": LoraConfig, + "TaskType": TaskType, + "get_peft_model": get_peft_model, + "AutoModelForCausalLM": AutoModelForCausalLM, + "AutoTokenizer": AutoTokenizer, + "BitsAndBytesConfig": BitsAndBytesConfig, + "DataCollatorForSeq2Seq": DataCollatorForSeq2Seq, + "Trainer": Trainer, + "prepare_model_for_kbit_training": prepare_model_for_kbit_training, + } + + +def _build_tokenizer(deps, config: FinetuneConfig): + tokenizer = deps["AutoTokenizer"].from_pretrained( + config.base_model, + trust_remote_code=config.trust_remote_code, + token=config.hf_token, + ) + if tokenizer.pad_token is None: + tokenizer.pad_token = tokenizer.eos_token + return tokenizer + + +def _validate_4bit_runtime(deps) -> None: + torch = deps["torch"] + if importlib.util.find_spec("bitsandbytes") is None: + raise RuntimeError( + "4-bit QLoRA requires bitsandbytes. Install the finetune extra on a " + "CUDA-capable Linux/Windows environment, or pass --no-4bit." + ) + if not torch.cuda.is_available(): + raise RuntimeError( + "4-bit QLoRA through bitsandbytes requires CUDA. Pass --no-4bit " + "for full/bfloat16 training on this machine." + ) + + +def _validate_messages(messages: List[Dict[str, str]]) -> None: + if len(messages) < 2: + raise ValueError("Each SFT row must contain at least one prompt and one answer.") + if messages[-1].get("role") != "assistant": + raise ValueError("Each SFT row must end with an assistant message.") + for index, message in enumerate(messages): + if message.get("role") not in {"system", "user", "assistant", "tool"}: + raise ValueError(f"Unsupported chat role at message {index}: {message!r}") + if "content" not in message: + raise ValueError(f"Missing chat content at message {index}: {message!r}") + + +def _encode_example( + tokenizer, messages: List[Dict[str, str]], max_seq_length: int +) -> Dict[str, list]: + """Tokenize a chat example, masking the prompt so only the completion trains.""" + if max_seq_length <= 0: + raise ValueError("max_seq_length must be positive.") + _validate_messages(messages) + if getattr(tokenizer, "chat_template", None) is None: + raise ValueError( + "The base model tokenizer does not define a chat template. Use a chat " + "or instruction-tuned model, or add a tokenizer chat_template before training." + ) + + full_ids = tokenizer.apply_chat_template( + messages, tokenize=True, add_generation_prompt=False + ) + prompt_ids = tokenizer.apply_chat_template( + messages[:-1], tokenize=True, add_generation_prompt=True + ) + if full_ids[: len(prompt_ids)] != prompt_ids: + raise ValueError( + "Tokenizer chat template did not produce a prompt prefix for the full " + "conversation; refusing to risk training on prompt tokens." + ) + + prompt_len = len(prompt_ids) + labels = [-100] * prompt_len + full_ids[prompt_len:] + if len(full_ids) > max_seq_length: + full_ids = full_ids[-max_seq_length:] + labels = labels[-max_seq_length:] + if all(label == -100 for label in labels): + raise ValueError( + "Encoded example has no trainable assistant tokens. Increase " + "max_seq_length or shorten the prompt." + ) + return {"input_ids": full_ids, "attention_mask": [1] * len(full_ids), "labels": labels} + + +def _encode_dataset(deps, tokenizer, message_lists, max_seq_length): + encoded = [ + _encode_example(tokenizer, messages, max_seq_length) for messages in message_lists + ] + if not encoded: + raise ValueError("No examples provided.") + return deps["Dataset"].from_list(encoded), len(encoded) + + +def run_sft( + config: FinetuneConfig, + message_lists: List[List[Dict[str, str]]], + eval_message_lists: Optional[List[List[Dict[str, str]]]] = None, +) -> str: + """Run LoRA SFT over a list of chat-message examples; returns the adapter dir.""" + if not message_lists: + raise ValueError("No training examples provided.") + deps = _load_train_deps() + torch = deps["torch"] + + tokenizer = _build_tokenizer(deps, config) + + compute_dtype = torch.bfloat16 if config.bf16 else torch.float16 + quant_config = None + if config.load_in_4bit: + _validate_4bit_runtime(deps) + quant_config = deps["BitsAndBytesConfig"]( + load_in_4bit=True, + bnb_4bit_use_double_quant=True, + bnb_4bit_quant_type="nf4", + bnb_4bit_compute_dtype=compute_dtype, + ) + + model_kwargs = { + "torch_dtype": compute_dtype, + "quantization_config": quant_config, + "trust_remote_code": config.trust_remote_code, + "token": config.hf_token, + } + if config.load_in_4bit and config.device_map: + model_kwargs["device_map"] = config.device_map + + model = deps["AutoModelForCausalLM"].from_pretrained( + config.base_model, **model_kwargs + ) + model.config.use_cache = False # required with gradient checkpointing + + if config.load_in_4bit: + # Freeze base weights, cast layer norms to fp32, enable gradient + # checkpointing — required for stable 4-bit (QLoRA) training. + model = deps["prepare_model_for_kbit_training"]( + model, use_gradient_checkpointing=True + ) + + peft_kwargs = { + "task_type": deps["TaskType"].CAUSAL_LM, + "inference_mode": False, + "r": config.lora_rank, + "lora_alpha": config.lora_alpha, + "lora_dropout": config.lora_dropout, + } + if config.target_modules is not None: + peft_kwargs["target_modules"] = config.target_modules + peft_config = deps["LoraConfig"](**peft_kwargs) + model = deps["get_peft_model"](model, peft_config) + model.print_trainable_parameters() + + dataset, train_count = _encode_dataset( + deps, tokenizer, message_lists, config.max_seq_length + ) + eval_dataset = None + eval_count = 0 + if eval_message_lists is not None: + eval_dataset, eval_count = _encode_dataset( + deps, tokenizer, eval_message_lists, config.max_seq_length + ) + + collator = deps["DataCollatorForSeq2Seq"]( + tokenizer, padding=True, label_pad_token_id=-100 + ) + trainer = deps["Trainer"]( + model=model, + args=config.to_training_arguments(), + train_dataset=dataset, + eval_dataset=eval_dataset, + data_collator=collator, + ) + + if eval_dataset is None: + logger.info("Starting LoRA SFT on %d examples...", train_count) + else: + logger.info( + "Starting LoRA SFT on %d examples with %d eval examples...", + train_count, + eval_count, + ) + trainer.train() + model.save_pretrained(config.output_dir) + tokenizer.save_pretrained(config.output_dir) + logger.info("Saved LoRA adapter to %s", config.output_dir) + return config.output_dir diff --git a/src/trialmatchai/finetuning/cli.py b/src/trialmatchai/finetuning/cli.py new file mode 100644 index 00000000..dcc85c03 --- /dev/null +++ b/src/trialmatchai/finetuning/cli.py @@ -0,0 +1,208 @@ +"""``trialmatchai finetune`` — train custom GLiNER2 / reranker / CoT models. + +Examples: + trialmatchai finetune cot --base-model microsoft/phi-4 \ + --train-data data/cot.jsonl --output-dir models/cot-adapter + trialmatchai finetune reranker --base-model google/gemma-2-2b-it \ + --train-data data/reranker.jsonl --output-dir models/reranker-adapter + trialmatchai finetune ner --base-model fastino/gliner2-base-v1 \ + --train-data data/ner.jsonl --output-dir models/ner + +Plug the result back into config: entity_extraction.model_name (NER), +model.reranker_adapter_path (reranker), model.cot_adapter_path (CoT). +""" + +from __future__ import annotations + +import argparse +import sys +from typing import Optional, Sequence + +from trialmatchai.finetuning.config import FinetuneConfig + + +def _parse_target_modules(value: Optional[str]): + if value is None: + return "all-linear" + value = value.strip() + if value.lower() in {"auto", "none"}: + return None + if "," in value: + return [part.strip() for part in value.split(",") if part.strip()] + return value + + +def _parse_device_map(value: Optional[str]) -> Optional[str]: + if value is None: + return None + value = value.strip() + if value.lower() in {"", "none", "off", "false"}: + return None + return value + + +def _add_common_lora_args(parser: argparse.ArgumentParser) -> None: + parser.add_argument("--base-model", required=True) + parser.add_argument("--train-data", required=True) + parser.add_argument("--output-dir", required=True) + parser.add_argument("--eval-data", default=None) + parser.add_argument("--epochs", type=float, default=2.0) + parser.add_argument("--learning-rate", type=float, default=5e-5) + parser.add_argument("--batch-size", type=int, default=2) + parser.add_argument("--grad-accum", type=int, default=16) + parser.add_argument("--max-seq-length", type=int, default=2048) + parser.add_argument("--logging-steps", type=int, default=10) + parser.add_argument("--save-steps", type=int, default=500) + parser.add_argument("--eval-steps", type=int, default=None) + parser.add_argument("--save-total-limit", type=int, default=3) + parser.add_argument("--lora-rank", type=int, default=32) + parser.add_argument("--lora-alpha", type=int, default=64) + parser.add_argument("--lora-dropout", type=float, default=0.1) + parser.add_argument( + "--target-modules", + default="all-linear", + help=( + "LoRA target modules: 'all-linear' (default), 'auto' for PEFT's " + "model mapping, or a comma-separated suffix list." + ), + ) + parser.add_argument("--max-examples", type=int, default=None) + parser.add_argument("--no-4bit", action="store_true", help="Disable 4-bit loading") + parser.add_argument("--fp16", action="store_true", help="Use fp16 instead of bf16") + parser.add_argument( + "--device-map", + default="auto", + help="Device map for 4-bit model loading; use 'none' to disable.", + ) + parser.add_argument("--trust-remote-code", action="store_true") + parser.add_argument("--hf-token", default=None) + + +def _lora_config_from_args(args: argparse.Namespace) -> FinetuneConfig: + return FinetuneConfig( + base_model=args.base_model, + train_data=args.train_data, + output_dir=args.output_dir, + eval_data=args.eval_data, + epochs=args.epochs, + learning_rate=args.learning_rate, + per_device_batch_size=args.batch_size, + gradient_accumulation_steps=args.grad_accum, + max_seq_length=args.max_seq_length, + logging_steps=args.logging_steps, + save_steps=args.save_steps, + eval_steps=args.eval_steps, + save_total_limit=args.save_total_limit, + lora_rank=args.lora_rank, + lora_alpha=args.lora_alpha, + lora_dropout=args.lora_dropout, + target_modules=_parse_target_modules(args.target_modules), + max_examples=args.max_examples, + load_in_4bit=not args.no_4bit, + bf16=not args.fp16, + device_map=_parse_device_map(args.device_map), + trust_remote_code=args.trust_remote_code, + hf_token=args.hf_token, + ) + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser( + prog="trialmatchai finetune", + description="Fine-tune TrialMatchAI's GLiNER2, reranker, or CoT models.", + ) + sub = parser.add_subparsers(dest="component", required=True) + + cot = sub.add_parser("cot", help="LoRA SFT for the CoT eligibility model") + _add_common_lora_args(cot) + + reranker = sub.add_parser("reranker", help="LoRA SFT for the reranker (Yes/No)") + _add_common_lora_args(reranker) + + merge = sub.add_parser( + "merge", help="Merge a LoRA adapter into its base model (standalone checkpoint)" + ) + merge.add_argument("--base-model", required=True) + merge.add_argument("--adapter", required=True) + merge.add_argument("--output-dir", required=True) + merge.add_argument("--trust-remote-code", action="store_true") + + ner = sub.add_parser( + "ner", + help="Fine-tune the GLiNER2 schema extraction model (entities/JSON/relations)", + ) + ner.add_argument("--base-model", default="fastino/gliner2-base-v1") + ner.add_argument("--train-data", required=True) + ner.add_argument("--output-dir", required=True) + ner.add_argument("--eval-data", default=None) + ner.add_argument("--epochs", type=float, default=10.0) + ner.add_argument("--batch-size", type=int, default=8) + ner.add_argument("--grad-accum", type=int, default=1) + ner.add_argument("--encoder-lr", type=float, default=1e-5) + ner.add_argument("--task-lr", type=float, default=5e-4) + ner.add_argument("--lora-r", type=int, default=8) + ner.add_argument("--lora-alpha", type=float, default=16.0) + ner.add_argument("--lora-dropout", type=float, default=0.0) + ner.add_argument("--eval-steps", type=int, default=500) + ner.add_argument("--logging-steps", type=int, default=50) + ner.add_argument("--save-total-limit", type=int, default=3) + ner.add_argument("--no-lora", action="store_true", help="Full fine-tune instead of LoRA") + ner.add_argument("--fp32", action="store_true", help="Disable fp16 mixed precision") + ner.add_argument("--schema-path", default=None, help="Entity schema for label descriptions") + ner.add_argument("--max-examples", type=int, default=None) + return parser + + +def main(argv: Optional[Sequence[str]] = None) -> int: + args = build_parser().parse_args(argv) + + if args.component == "cot": + from trialmatchai.finetuning.cot import finetune_cot + + finetune_cot(_lora_config_from_args(args)) + elif args.component == "reranker": + from trialmatchai.finetuning.reranker import finetune_reranker + + finetune_reranker(_lora_config_from_args(args)) + elif args.component == "merge": + from trialmatchai.finetuning.merge import merge_adapter + + merge_adapter( + base_model=args.base_model, + adapter_path=args.adapter, + output_dir=args.output_dir, + trust_remote_code=args.trust_remote_code, + ) + elif args.component == "ner": + from trialmatchai.finetuning.ner import NERFinetuneConfig, finetune_ner + + finetune_ner( + NERFinetuneConfig( + train_data=args.train_data, + output_dir=args.output_dir, + base_model=args.base_model, + eval_data=args.eval_data, + epochs=args.epochs, + batch_size=args.batch_size, + gradient_accumulation_steps=args.grad_accum, + encoder_lr=args.encoder_lr, + task_lr=args.task_lr, + use_lora=not args.no_lora, + lora_r=args.lora_r, + lora_alpha=args.lora_alpha, + lora_dropout=args.lora_dropout, + eval_steps=args.eval_steps, + logging_steps=args.logging_steps, + save_total_limit=args.save_total_limit, + fp16=not args.fp32, + schema_path=args.schema_path, + max_examples=args.max_examples, + ) + ) + else: # pragma: no cover - argparse enforces choices + return 2 + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/finetuning/config.py b/src/trialmatchai/finetuning/config.py new file mode 100644 index 00000000..5c4f9887 --- /dev/null +++ b/src/trialmatchai/finetuning/config.py @@ -0,0 +1,94 @@ +"""Shared configuration for the LoRA fine-tuners (CoT and reranker).""" + +from __future__ import annotations + +from dataclasses import dataclass +from typing import List, Optional, Union + + +@dataclass +class FinetuneConfig: + """Hyper-parameters for LoRA supervised fine-tuning of a causal LM. + + Sensible defaults are tuned for a single consumer GPU; override per run. + """ + + base_model: str + train_data: str + output_dir: str + eval_data: Optional[str] = None + + # Optimization + epochs: float = 2.0 + learning_rate: float = 5e-5 + per_device_batch_size: int = 2 + gradient_accumulation_steps: int = 16 + warmup_ratio: float = 0.1 + max_seq_length: int = 2048 + weight_decay: float = 0.0 + seed: int = 42 + + # LoRA + lora_rank: int = 32 + lora_alpha: int = 64 + lora_dropout: float = 0.1 + target_modules: Optional[Union[List[str], str]] = "all-linear" + + # Runtime + load_in_4bit: bool = True + bf16: bool = True + trust_remote_code: bool = False + logging_steps: int = 10 + save_steps: int = 500 + eval_steps: Optional[int] = None + save_total_limit: int = 3 + max_examples: Optional[int] = None + hf_token: Optional[str] = None + device_map: Optional[str] = "auto" + + def to_training_arguments(self): + """Build transformers.TrainingArguments (imported lazily).""" + from transformers import TrainingArguments + + has_eval = self.eval_data is not None + eval_steps = self.eval_steps or self.save_steps + if has_eval and self.save_steps % eval_steps != 0: + raise ValueError( + "save_steps must be a multiple of eval_steps when eval_data is set " + "because load_best_model_at_end requires aligned save/eval steps." + ) + + kwargs = dict( + output_dir=self.output_dir, + num_train_epochs=self.epochs, + learning_rate=self.learning_rate, + per_device_train_batch_size=self.per_device_batch_size, + per_device_eval_batch_size=self.per_device_batch_size, + gradient_accumulation_steps=self.gradient_accumulation_steps, + warmup_ratio=self.warmup_ratio, + weight_decay=self.weight_decay, + logging_steps=self.logging_steps, + eval_strategy="steps" if has_eval else "no", + save_strategy="steps", + save_steps=self.save_steps, + save_total_limit=self.save_total_limit, + bf16=self.bf16, + fp16=not self.bf16, + seed=self.seed, + report_to=[], + ddp_find_unused_parameters=False, + # QLoRA memory/throughput best practices: gradient checkpointing and + # a paged optimizer keep large models on a single GPU. + gradient_checkpointing=True, + gradient_checkpointing_kwargs={"use_reentrant": False}, + optim="paged_adamw_8bit" if self.load_in_4bit else "adamw_torch", + lr_scheduler_type="cosine", + ) + if has_eval: + kwargs.update( + eval_steps=eval_steps, + load_best_model_at_end=True, + metric_for_best_model="eval_loss", + greater_is_better=False, + ) + return TrainingArguments(**kwargs) diff --git a/src/trialmatchai/finetuning/cot.py b/src/trialmatchai/finetuning/cot.py new file mode 100644 index 00000000..a4da1b2c --- /dev/null +++ b/src/trialmatchai/finetuning/cot.py @@ -0,0 +1,25 @@ +"""Fine-tune the chain-of-thought eligibility model (LoRA SFT). + +Produces a LoRA adapter that plugs into the pipeline via +``model.cot_adapter_path`` (HuggingFace backend) or vLLM's LoRARequest. +""" + +from __future__ import annotations + +from trialmatchai.finetuning._sft import run_sft +from trialmatchai.finetuning.config import FinetuneConfig +from trialmatchai.finetuning.data import cot_row_to_messages, read_jsonl + + +def _load_messages(path: str, max_examples: int | None): + return [cot_row_to_messages(row) for row in read_jsonl(path, max_examples)] + + +def finetune_cot(config: FinetuneConfig) -> str: + message_lists = _load_messages(config.train_data, config.max_examples) + eval_message_lists = ( + _load_messages(config.eval_data, config.max_examples) + if config.eval_data is not None + else None + ) + return run_sft(config, message_lists, eval_message_lists) diff --git a/src/trialmatchai/finetuning/data.py b/src/trialmatchai/finetuning/data.py new file mode 100644 index 00000000..95a4a13e --- /dev/null +++ b/src/trialmatchai/finetuning/data.py @@ -0,0 +1,177 @@ +"""Dataset loading and prompt formatting for fine-tuning. + +Training prompts reuse the exact runtime prompt builders so a fine-tuned model +sees the same format at train and inference time. + +Input formats (JSONL, one object per line): +- CoT: {"messages": [{"role","content"}, ...]} + or {"instruction": str, "input": str, "output": str} +- Reranker: {"patient_text": str, "criterion": str, "label": "Yes"|"No"} +- GLiNER2: {"text": str, "entities": {"label": ["surface form", ...]}} + or char-span {"text": str, "ner": [[start_char, end_char, "label"], ...]} + or native {"input": str, "output": {"entities": {...}, "json_structures": [...]}} + or native {"text": str, "schema": {"json_structures": [...]}} +""" + +from __future__ import annotations + +import json +from typing import Any, Dict, List, Optional + + +def read_jsonl(path: str, max_examples: Optional[int] = None) -> List[Dict[str, Any]]: + if max_examples is not None and max_examples <= 0: + return [] + rows: List[Dict[str, Any]] = [] + with open(path, "r", encoding="utf-8") as handle: + for line_no, line in enumerate(handle, start=1): + line = line.strip() + if not line: + continue + try: + row = json.loads(line) + except json.JSONDecodeError as exc: + raise ValueError(f"Invalid JSON in {path}:{line_no}: {exc.msg}") from exc + if not isinstance(row, dict): + raise ValueError(f"Expected JSON object in {path}:{line_no}.") + rows.append(row) + if max_examples is not None and len(rows) >= max_examples: + break + return rows + + +# --------------------------------------------------------------------------- CoT + + +def cot_row_to_messages(row: Dict[str, Any]) -> List[Dict[str, str]]: + """Normalize a CoT training row to a chat-message list.""" + if "messages" in row: + return [ + {"role": str(message["role"]), "content": str(message["content"])} + for message in row["messages"] + ] + instruction = (row.get("instruction") or "").strip() + user = (row.get("input") or row.get("question") or "").strip() + output = row.get("output") or row.get("answer") or "" + messages: List[Dict[str, str]] = [] + if instruction: + messages.append({"role": "system", "content": instruction}) + messages.append({"role": "user", "content": user}) + messages.append({"role": "assistant", "content": output}) + return messages + + +# ----------------------------------------------------------------------- Reranker + + +def reranker_row_to_messages(row: Dict[str, Any]) -> tuple[List[Dict[str, str]], str]: + """Build the reranker prompt (matching LLMReranker.create_messages) + target.""" + from trialmatchai.models.llm.llm_reranker import LLMReranker + + patient_text = str(row.get("patient_text", "")).strip() + criterion = str(row.get("criterion", row.get("trial_text", ""))).strip() + label = str(row.get("label", "")).strip() or "No" + if label not in {"Yes", "No"}: + label = "Yes" if label.lower() in {"1", "true", "yes", "relevant"} else "No" + messages = LLMReranker.create_messages(patient_text, criterion) + return messages, label + + +# ----------------------------------------------------------------------- GLiNER2 + + +def _entity_mapping(value: Any) -> Dict[str, List[str]]: + entities: Dict[str, List[str]] = {} + for label, surfaces in dict(value or {}).items(): + if surfaces is None: + entities[str(label)] = [] + elif isinstance(surfaces, str): + entities[str(label)] = [surfaces] + else: + entities[str(label)] = [str(surface) for surface in surfaces] + return entities + + +def _copy_if_present(source: Dict[str, Any], target: Dict[str, Any], key: str) -> None: + if key in source and source[key] is not None: + target[key] = source[key] + + +def _json_structures(value: Any) -> Any: + if isinstance(value, dict): + return [{name: fields} for name, fields in value.items()] + return value + + +def gliner2_row_to_training_record(row: Dict[str, Any]) -> Dict[str, Any]: + """Normalize supported GLiNER2 row shapes to ``{"input", "output"}``. + + The output schema is intentionally close to GLiNER2's native format so + schema-based extraction tasks (JSON structures, classifications, relations) + pass through to ``InputExample.from_dict`` without being flattened. + """ + if "input" in row and "output" in row: + text = str(row["input"]) + source = dict(row.get("output") or {}) + else: + text = str(row.get("text", "")) + source = dict(row.get("schema") or {}) + for key in ( + "entities", + "entity_descriptions", + "classifications", + "json_structures", + "structures", + "json_descriptions", + "relations", + ): + _copy_if_present(row, source, key) + + output: Dict[str, Any] = {} + if "entities" in source: + output["entities"] = _entity_mapping(source.get("entities")) + if "ner" in row and "entities" not in output: + output["entities"] = _entities_from_spans(text, row.get("ner") or []) + _copy_if_present(source, output, "entity_descriptions") + _copy_if_present(source, output, "classifications") + if "json_structures" in source: + output["json_structures"] = _json_structures(source["json_structures"]) + elif "structures" in source: + output["json_structures"] = _json_structures(source["structures"]) + _copy_if_present(source, output, "json_descriptions") + _copy_if_present(source, output, "relations") + return {"input": text, "output": output} + + +def _entities_from_spans(text: str, spans: Any) -> Dict[str, List[str]]: + entities: Dict[str, List[str]] = {} + for span in spans: + if not isinstance(span, (list, tuple)): + continue + if len(span) < 3: + continue + start_char, end_char, label = span[0], span[1], span[2] + if not isinstance(start_char, int) or not isinstance(end_char, int): + continue + surface = text[start_char:end_char].strip() + if surface: + label = str(label) + entities.setdefault(label, []) + if surface not in entities[label]: + entities[label].append(surface) + return entities + + +def ner_row_to_entities(row: Dict[str, Any]) -> Dict[str, Any]: + """Normalize an NER row to GLiNER2's surface-form schema. + + Returns ``{"text", "entities": {label: [surface forms]}, "entity_descriptions"}``. + Accepts the native GLiNER2 form, a simple ``entities`` mapping, or character + spans (which are sliced from the text into surface forms). + """ + record = gliner2_row_to_training_record(row) + return { + "text": record["input"], + "entities": record["output"].get("entities", {}), + "entity_descriptions": record["output"].get("entity_descriptions"), + } diff --git a/src/trialmatchai/finetuning/merge.py b/src/trialmatchai/finetuning/merge.py new file mode 100644 index 00000000..2377727f --- /dev/null +++ b/src/trialmatchai/finetuning/merge.py @@ -0,0 +1,45 @@ +"""Merge a LoRA adapter into its base model to produce a standalone checkpoint. + +vLLM serves LoRA adapters natively (via LoRARequest), so merging is optional. +Use it when you prefer a single self-contained model directory over base+adapter. +""" + +from __future__ import annotations + +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def merge_adapter( + base_model: str, + adapter_path: str, + output_dir: str, + *, + trust_remote_code: bool = False, +) -> str: + """Load base + LoRA adapter, merge weights, and save a full model to output_dir.""" + try: + import torch + from peft import PeftModel + from transformers import AutoModelForCausalLM, AutoTokenizer + except Exception as exc: # pragma: no cover - exercised only without the extra + raise RuntimeError( + "Merging requires the optional `finetune` dependencies " + "(`uv sync --extra finetune`)." + ) from exc + + logger.info("Loading base model %s ...", base_model) + base = AutoModelForCausalLM.from_pretrained( + base_model, + torch_dtype=torch.bfloat16, + trust_remote_code=trust_remote_code, + ) + logger.info("Applying and merging adapter %s ...", adapter_path) + merged = PeftModel.from_pretrained(base, adapter_path).merge_and_unload() + merged.save_pretrained(output_dir) + AutoTokenizer.from_pretrained(base_model, trust_remote_code=trust_remote_code).save_pretrained( + output_dir + ) + logger.info("Saved merged model to %s", output_dir) + return output_dir diff --git a/src/trialmatchai/finetuning/ner.py b/src/trialmatchai/finetuning/ner.py new file mode 100644 index 00000000..1f2322cd --- /dev/null +++ b/src/trialmatchai/finetuning/ner.py @@ -0,0 +1,197 @@ +"""Fine-tune the biomedical NER model (GLiNER2). + +Uses the native GLiNER2 training stack (GLiNER2Trainer / TrainingConfig / +InputExample). Produces either a full checkpoint (``/best``) or a +LoRA adapter (``/final``) that plugs into the pipeline via +``entity_extraction.model_name`` with backend "gliner2". + +GLiNER2 data can be flat entity extraction, schema-based JSON structures, +classifications, relations, or a mix of those tasks. Character-span NER rows +are converted automatically. ``entity_descriptions`` is back-filled from the +entity schema so flat entity examples use the same label semantics as inference. +""" + +from __future__ import annotations + +from dataclasses import dataclass +from typing import Dict, Optional + +from trialmatchai.finetuning.data import gliner2_row_to_training_record, read_jsonl +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +@dataclass +class NERFinetuneConfig: + train_data: str + output_dir: str + base_model: str = "fastino/gliner2-base-v1" + eval_data: Optional[str] = None + epochs: float = 10.0 + batch_size: int = 8 + gradient_accumulation_steps: int = 1 + encoder_lr: float = 1e-5 + task_lr: float = 5e-4 + warmup_ratio: float = 0.1 + use_lora: bool = True + lora_r: int = 8 + lora_alpha: float = 16.0 + lora_dropout: float = 0.0 + fp16: bool = True + eval_steps: int = 500 + logging_steps: int = 50 + save_total_limit: int = 3 + max_examples: Optional[int] = None + schema_path: Optional[str] = None + seed: int = 42 + + +def _schema_descriptions(schema_path: Optional[str]) -> Dict[str, str]: + """Map entity-group label -> description from the entity schema, if available.""" + try: + from trialmatchai.entities.schemas import load_entity_schemas + + schemas = load_entity_schemas(schema_path) + except Exception: # pragma: no cover - schema optional during training + return {} + descriptions: Dict[str, str] = {} + for schema in schemas: + if schema.description: + descriptions[schema.entity_group] = schema.description + descriptions[schema.label] = schema.description + return descriptions + + +def _backfill_entity_descriptions( + record: Dict[str, object], descriptions: Dict[str, str] +) -> Dict[str, object]: + output = dict(record.get("output") or {}) + entities = output.get("entities") or {} + if not isinstance(entities, dict): + return record + descs = dict(output.get("entity_descriptions") or {}) + for label in entities: + if label not in descs and label in descriptions: + descs[label] = descriptions[label] + if descs: + output["entity_descriptions"] = descs + record = dict(record) + record["output"] = output + return record + + +def _sanitize_example(example) -> bool: + if not hasattr(example, "sanitize"): + return True + warnings, is_valid = example.sanitize() + for warning in warnings: + logger.warning("Sanitized GLiNER2 training example: %s", warning) + return is_valid + + +def _validate_dataset(dataset) -> None: + try: + dataset.validate(raise_on_error=False) + except TypeError: # pragma: no cover - older GLiNER2 compatibility + dataset.validate(strict=False, raise_on_error=False) + + +def _build_examples(config: "NERFinetuneConfig", path: str, descriptions: Dict[str, str]): + from gliner2.training.data import InputExample + + examples = [] + for row in read_jsonl(path, config.max_examples): + record = gliner2_row_to_training_record(row) + record["input"] = str(record["input"]).strip() + if not record["input"]: + continue + record = _backfill_entity_descriptions(record, descriptions) + example = InputExample.from_dict(record) + if _sanitize_example(example): + examples.append(example) + return examples + + +def finetune_ner(config: NERFinetuneConfig) -> str: + try: + from gliner2 import GLiNER2 + from gliner2.training.data import TrainingDataset + from gliner2.training.trainer import GLiNER2Trainer, TrainingConfig + except Exception as exc: # pragma: no cover - exercised only without the extra + raise RuntimeError( + "GLiNER2 fine-tuning requires the optional `finetune` dependencies " + "(`uv sync --extra finetune`)." + ) from exc + + descriptions = _schema_descriptions(config.schema_path) + train_examples = _build_examples(config, config.train_data, descriptions) + if not train_examples: + raise ValueError("No training examples provided.") + + train_dataset = TrainingDataset(train_examples) + _validate_dataset(train_dataset) + train_dataset.print_stats() + + if config.eval_data: + train_data: object = train_dataset + eval_examples = _build_examples(config, config.eval_data, descriptions) + if not eval_examples: + raise ValueError("No evaluation examples provided.") + val_data: object | None = TrainingDataset(eval_examples) + elif len(train_examples) >= 10: + train_data, val_data, _ = train_dataset.split( + train_ratio=0.9, val_ratio=0.1, test_ratio=0.0, shuffle=True, seed=config.seed + ) + else: + train_data = train_dataset + val_data = None + + has_eval = val_data is not None + + training_config = TrainingConfig( + output_dir=config.output_dir, + experiment_name="trialmatchai_ner", + num_epochs=config.epochs, + batch_size=config.batch_size, + gradient_accumulation_steps=config.gradient_accumulation_steps, + encoder_lr=config.encoder_lr, + task_lr=config.task_lr, + warmup_ratio=config.warmup_ratio, + scheduler_type="cosine", + fp16=config.fp16, + eval_strategy="epoch" if has_eval else "no", + eval_steps=config.eval_steps, + save_total_limit=config.save_total_limit, + save_best=has_eval, + early_stopping=has_eval, + early_stopping_patience=3, + logging_steps=config.logging_steps, + use_lora=config.use_lora, + lora_r=config.lora_r, + lora_alpha=config.lora_alpha, + lora_dropout=config.lora_dropout, + lora_target_modules=["encoder"], + save_adapter_only=config.use_lora, + ) + + model = GLiNER2.from_pretrained(config.base_model) + trainer = GLiNER2Trainer(model, training_config) + logger.info("Starting GLiNER2 fine-tuning on %d examples...", len(train_examples)) + trainer.train(train_data=train_data, val_data=val_data) + + result_dir = ( + f"{config.output_dir.rstrip('/')}/final" + if config.use_lora or not has_eval + else f"{config.output_dir.rstrip('/')}/best" + ) + logger.info( + "Saved %s to %s. Set entity_extraction.model_name to this path " + "(LoRA adapters load via GLiNER2.load_adapter).", + "LoRA adapter" if config.use_lora else "fine-tuned model", + result_dir, + ) + return result_dir + + +__all__ = ["NERFinetuneConfig", "finetune_ner"] diff --git a/src/trialmatchai/finetuning/reranker.py b/src/trialmatchai/finetuning/reranker.py new file mode 100644 index 00000000..9062e3dc --- /dev/null +++ b/src/trialmatchai/finetuning/reranker.py @@ -0,0 +1,30 @@ +"""Fine-tune the cross-encoder reranker (LoRA SFT, Yes/No target). + +The reranker reads the next-token logits for "Yes"/"No" after the prompt, so we +SFT the model to emit the correct token. Produces a LoRA adapter that plugs into +the pipeline via ``model.reranker_adapter_path``. +""" + +from __future__ import annotations + +from trialmatchai.finetuning._sft import run_sft +from trialmatchai.finetuning.config import FinetuneConfig +from trialmatchai.finetuning.data import read_jsonl, reranker_row_to_messages + + +def _load_messages(path: str, max_examples: int | None): + message_lists = [] + for row in read_jsonl(path, max_examples): + messages, label = reranker_row_to_messages(row) + message_lists.append([*messages, {"role": "assistant", "content": label}]) + return message_lists + + +def finetune_reranker(config: FinetuneConfig) -> str: + message_lists = _load_messages(config.train_data, config.max_examples) + eval_message_lists = ( + _load_messages(config.eval_data, config.max_examples) + if config.eval_data is not None + else None + ) + return run_sft(config, message_lists, eval_message_lists) diff --git a/src/trialmatchai/interop/__init__.py b/src/trialmatchai/interop/__init__.py new file mode 100644 index 00000000..e436452e --- /dev/null +++ b/src/trialmatchai/interop/__init__.py @@ -0,0 +1,25 @@ +from trialmatchai.interop.detect import detect_patient_input_format +from trialmatchai.interop.importers import import_patient_path +from trialmatchai.interop.models import ( + ClinicalFact, + Demographics, + Location, + NormalizedCode, + PatientNote, + PatientProfile, + Provenance, + SourceDocument, +) + +__all__ = [ + "ClinicalFact", + "Demographics", + "Location", + "NormalizedCode", + "PatientNote", + "PatientProfile", + "Provenance", + "SourceDocument", + "detect_patient_input_format", + "import_patient_path", +] diff --git a/src/trialmatchai/interop/detect.py b/src/trialmatchai/interop/detect.py new file mode 100644 index 00000000..90e17436 --- /dev/null +++ b/src/trialmatchai/interop/detect.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +import json +from pathlib import Path +from typing import Literal + + +PatientInputFormat = Literal["text", "phenopacket", "fhir", "fhir-ndjson", "omop"] + +OMOP_TABLE_NAMES = { + "person", + "condition_occurrence", + "measurement", + "drug_exposure", + "procedure_occurrence", + "observation", + "note", + "note_nlp", +} + + +def detect_patient_input_format(path: str | Path) -> PatientInputFormat: + candidate = Path(path) + if candidate.is_dir(): + table_stems = { + item.stem.casefold() + for item in candidate.iterdir() + if item.suffix.casefold() in {".csv", ".parquet"} + } + if table_stems & OMOP_TABLE_NAMES: + return "omop" + raise ValueError(f"Could not detect patient input format for directory: {path}") + + suffix = candidate.suffix.casefold() + if suffix in {".txt", ".md"}: + return "text" + if suffix in {".ndjson", ".jsonl"}: + return "fhir-ndjson" + if suffix != ".json": + raise ValueError(f"Unsupported patient input file extension: {suffix}") + + with candidate.open("r", encoding="utf-8") as handle: + data = json.load(handle) + if isinstance(data, dict): + if data.get("resourceType") == "Bundle": + return "fhir" + if data.get("resourceType"): + return "fhir" + if "metaData" in data and ("subject" in data or "phenotypicFeatures" in data): + return "phenopacket" + if {"id", "subject"} <= set(data): + return "phenopacket" + if isinstance(data, list) and any( + isinstance(item, dict) and item.get("resourceType") for item in data + ): + return "fhir" + raise ValueError(f"Could not detect patient input format for file: {path}") diff --git a/src/trialmatchai/interop/exporters/__init__.py b/src/trialmatchai/interop/exporters/__init__.py new file mode 100644 index 00000000..4d808e7f --- /dev/null +++ b/src/trialmatchai/interop/exporters/__init__.py @@ -0,0 +1,9 @@ +from trialmatchai.interop.exporters.fhir import profile_to_fhir_bundle +from trialmatchai.interop.exporters.matching_summary import profile_to_matching_summary +from trialmatchai.interop.exporters.phenopacket import profile_to_phenopacket + +__all__ = [ + "profile_to_fhir_bundle", + "profile_to_matching_summary", + "profile_to_phenopacket", +] diff --git a/src/trialmatchai/interop/exporters/fhir.py b/src/trialmatchai/interop/exporters/fhir.py new file mode 100644 index 00000000..5ea7f2d3 --- /dev/null +++ b/src/trialmatchai/interop/exporters/fhir.py @@ -0,0 +1,83 @@ +from __future__ import annotations + +from trialmatchai.interop.models import ClinicalFact, PatientProfile + + +def profile_to_fhir_bundle(profile: PatientProfile) -> dict: + patient_ref = f"Patient/{profile.patient_id}" + entries = [ + { + "resource": { + "resourceType": "Patient", + "id": profile.patient_id, + "gender": _fhir_gender(profile.demographics.sex), + **( + {"birthDate": profile.demographics.birth_date.isoformat()} + if profile.demographics.birth_date + else {} + ), + } + } + ] + entries.extend( + _fact_entry("Condition", fact, patient_ref) for fact in profile.conditions + ) + entries.extend( + _fact_entry("Observation", fact, patient_ref) + for fact in [*profile.phenotypes, *profile.observations] + ) + entries.extend( + _fact_entry("MedicationStatement", fact, patient_ref) + for fact in profile.medications + ) + entries.extend( + _fact_entry("Procedure", fact, patient_ref) for fact in profile.procedures + ) + entries.extend( + _fact_entry("DiagnosticReport", fact, patient_ref) + for fact in profile.diagnostic_reports + ) + return { + "resourceType": "Bundle", + "type": "collection", + "entry": entries, + } + + +def _fact_entry(resource_type: str, fact: ClinicalFact, patient_ref: str) -> dict: + return { + "resource": { + "resourceType": resource_type, + "id": fact.fact_id, + "subject": {"reference": patient_ref}, + "code": _codeable(fact), + "note": [{"text": fact.description or fact.evidence_text}] + if fact.description or fact.evidence_text + else [], + } + } + + +def _codeable(fact: ClinicalFact) -> dict: + code = fact.normalized_codes[0] if fact.normalized_codes else fact.original_code + if code is None: + return {"text": fact.label} + return { + "text": code.label or fact.label, + "coding": [ + { + "system": code.system or code.vocabulary, + "code": code.code, + "display": code.label or fact.label, + } + ], + } + + +def _fhir_gender(value: str | None) -> str | None: + if not value: + return None + normalized = value.casefold() + if normalized in {"male", "female", "other", "unknown"}: + return normalized + return "unknown" diff --git a/src/trialmatchai/interop/exporters/matching_summary.py b/src/trialmatchai/interop/exporters/matching_summary.py new file mode 100644 index 00000000..e7ff9cef --- /dev/null +++ b/src/trialmatchai/interop/exporters/matching_summary.py @@ -0,0 +1,27 @@ +from __future__ import annotations + +from trialmatchai.interop.models import PatientProfile +from trialmatchai.interop.narrative import render_patient_narrative, render_search_terms + + +def profile_to_matching_summary(profile: PatientProfile) -> dict: + main_conditions, other_conditions = render_search_terms(profile) + age = ( + int(profile.demographics.age_years) + if profile.demographics.age_years is not None + else "all" + ) + gender = profile.demographics.sex or profile.demographics.gender or "all" + patient_narrative = render_patient_narrative(profile) + return { + "patient_id": profile.patient_id, + "main_conditions": main_conditions, + "other_conditions": other_conditions, + "patient_narrative": patient_narrative, + "age": age, + "gender": gender, + "provenance": [ + provenance.model_dump(mode="json", exclude_none=True) + for provenance in profile.provenance + ], + } diff --git a/src/trialmatchai/interop/exporters/phenopacket.py b/src/trialmatchai/interop/exporters/phenopacket.py new file mode 100644 index 00000000..100dfd28 --- /dev/null +++ b/src/trialmatchai/interop/exporters/phenopacket.py @@ -0,0 +1,87 @@ +from __future__ import annotations + +from trialmatchai.interop.models import ClinicalFact, PatientProfile + + +def profile_to_phenopacket(profile: PatientProfile) -> dict: + unsupported: list[dict] = [] + packet = { + "id": profile.patient_id, + "subject": { + "id": profile.patient_id, + **({"sex": profile.demographics.sex.upper()} if profile.demographics.sex else {}), + **( + {"dateOfBirth": profile.demographics.birth_date.isoformat()} + if profile.demographics.birth_date + else {} + ), + }, + "phenotypicFeatures": [_phenotype_fact(fact) for fact in profile.phenotypes], + "diseases": [_disease_fact(fact) for fact in profile.conditions], + "measurements": [_measurement_fact(fact) for fact in profile.observations], + "medicalActions": [ + *[_treatment_fact(fact) for fact in profile.medications], + *[_procedure_fact(fact) for fact in profile.procedures], + ], + "metaData": { + "createdBy": "TrialMatchAI", + "resources": [], + }, + } + for fact in [ + *profile.diagnostic_reports, + *profile.genomic_findings, + *profile.cancer_profile, + *profile.family_history, + ]: + unsupported.append( + { + "fact_id": fact.fact_id, + "category": fact.category, + "label": fact.label, + "reason": "No lossless Phenopacket v1 exporter mapping implemented.", + } + ) + packet["trialmatchaiConversionReport"] = { + "lossy": bool(unsupported), + "unsupported": unsupported, + } + return packet + + +def _ontology_class(fact: ClinicalFact) -> dict: + code = fact.normalized_codes[0] if fact.normalized_codes else fact.original_code + if code is None: + return {"id": fact.label, "label": fact.label} + return {"id": f"{code.vocabulary}:{code.code}", "label": code.label or fact.label} + + +def _phenotype_fact(fact: ClinicalFact) -> dict: + return { + "type": _ontology_class(fact), + "excluded": fact.negated, + **({"description": fact.description} if fact.description else {}), + } + + +def _disease_fact(fact: ClinicalFact) -> dict: + return { + "term": _ontology_class(fact), + **({"excluded": fact.negated} if fact.negated else {}), + **({"description": fact.description} if fact.description else {}), + } + + +def _measurement_fact(fact: ClinicalFact) -> dict: + return { + "assay": _ontology_class(fact), + "value": {"value": fact.description or fact.label}, + } + + +def _treatment_fact(fact: ClinicalFact) -> dict: + return {"treatment": {"agent": _ontology_class(fact)}} + + +def _procedure_fact(fact: ClinicalFact) -> dict: + return {"procedure": {"code": _ontology_class(fact)}} diff --git a/src/trialmatchai/interop/importers/__init__.py b/src/trialmatchai/interop/importers/__init__.py new file mode 100644 index 00000000..3e59c3e9 --- /dev/null +++ b/src/trialmatchai/interop/importers/__init__.py @@ -0,0 +1,35 @@ +from __future__ import annotations + +from pathlib import Path +from typing import Any + +from trialmatchai.interop.detect import detect_patient_input_format +from trialmatchai.interop.importers.fhir import import_fhir +from trialmatchai.interop.importers.omop import import_omop_extract +from trialmatchai.interop.importers.phenopacket import import_phenopacket +from trialmatchai.interop.importers.text import import_text_note +from trialmatchai.interop.models import PatientProfile + + +def import_patient_path( + path: str | Path, + *, + input_format: str = "auto", + entity_annotator: Any | None = None, + strict: bool = False, +) -> list[PatientProfile]: + resolved_format = ( + detect_patient_input_format(path) if input_format == "auto" else input_format + ) + if resolved_format == "text": + return [import_text_note(path, entity_annotator=entity_annotator)] + if resolved_format == "phenopacket": + return [import_phenopacket(path, strict=strict)] + if resolved_format in {"fhir", "fhir-ndjson"}: + return import_fhir(path, input_format=resolved_format, strict=strict) + if resolved_format == "omop": + return import_omop_extract(path, strict=strict) + raise ValueError(f"Unsupported patient input format: {resolved_format}") + + +__all__ = ["import_patient_path"] diff --git a/src/trialmatchai/interop/importers/fhir.py b/src/trialmatchai/interop/importers/fhir.py new file mode 100644 index 00000000..bd0f4523 --- /dev/null +++ b/src/trialmatchai/interop/importers/fhir.py @@ -0,0 +1,764 @@ +from __future__ import annotations + +import json +from pathlib import Path +from typing import Any, Mapping + +from trialmatchai.interop.models import ( + Demographics, + Location, + PatientProfile, + Provenance, + SourceDocument, +) +from trialmatchai.interop.utils import ( + age_years_from_birth_date, + clean_text, + codes_from_fhir_codeable, + label_from_fhir_codeable, + make_fact, + normalize_gender, + parse_date, + safe_patient_id, + source_path_string, +) +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def import_fhir( + path: str | Path, + *, + input_format: str = "fhir", + strict: bool = False, +) -> list[PatientProfile]: + source_path = Path(path) + resources = ( + _load_ndjson(source_path, strict=strict) + if input_format == "fhir-ndjson" + else _load_json_resources(source_path) + ) + patients = [res for res in resources if res.get("resourceType") == "Patient"] + if not patients: + patients = [{}] + + profiles = [ + _profile_from_patient(patient, source_path=source_path, input_format=input_format) + for patient in patients + ] + profiles_by_reference = _profiles_by_reference(patients, profiles) + + for resource in resources: + if resource.get("resourceType") == "Patient": + continue + profile = _profile_for_resource(resource, profiles, profiles_by_reference) + if profile is None: + message = "FHIR resource has no resolvable patient reference" + if strict: + raise ValueError( + f"{message}: {resource.get('resourceType')}/{resource.get('id')}" + ) + # Attribute the orphan to the first profile only (avoid duplicating it + # across every profile in a multi-patient bundle). + profiles[0].unsupported.append( + { + "resourceType": resource.get("resourceType"), + "id": resource.get("id"), + "reason": message, + } + ) + continue + try: + base_provenance = profile.provenance[0] + _add_resource(profile, resource, base_provenance) + except Exception as exc: + if strict: + raise + logger.warning( + "FHIR mapping failed for %s/%s: %s", + resource.get("resourceType"), + resource.get("id"), + exc, + ) + profile.unsupported.append( + { + "resourceType": resource.get("resourceType"), + "id": resource.get("id"), + "reason": f"resource mapping failed: {exc}", + } + ) + return profiles + + +def _profile_from_patient( + patient: Mapping[str, Any], + *, + source_path: Path, + input_format: str, +) -> PatientProfile: + patient_id = safe_patient_id(patient.get("id"), source_path.stem) + provenance = Provenance( + source_format=input_format, + source_id=patient_id, + source_path=source_path_string(source_path), + ) + birth_date = parse_date(patient.get("birthDate")) + return PatientProfile( + patient_id=patient_id, + demographics=Demographics( + sex=normalize_gender(patient.get("gender")), + gender=normalize_gender(patient.get("gender")), + birth_date=birth_date, + age_years=age_years_from_birth_date(birth_date), + ), + location=_patient_location(patient.get("address")), + provenance=[provenance], + ) + + +def _patient_location(address: Any) -> Location | None: + """Extract a coarse location from a FHIR Patient.address list (first entry).""" + if isinstance(address, dict): + address = [address] + if not isinstance(address, list): + return None + for entry in address: + if not isinstance(entry, dict): + continue + country = (entry.get("country") or "").strip() or None + state = (entry.get("state") or "").strip() or None + city = (entry.get("city") or "").strip() or None + if country or state or city: + return Location(country=country, state=state, city=city) + return None + + +# --------------------------------------------------------------------------- I/O + + +def _load_json_resources(path: Path) -> list[dict[str, Any]]: + data = json.loads(path.read_text(encoding="utf-8")) + if isinstance(data, list): + return [item for item in data if isinstance(item, dict)] + if not isinstance(data, dict): + return [] + if data.get("resourceType") == "Bundle": + resources = [] + for entry in data.get("entry") or []: + if not isinstance(entry, dict) or not isinstance(entry.get("resource"), dict): + continue + resource = dict(entry["resource"]) + if entry.get("fullUrl"): + resource["_bundle_full_url"] = entry["fullUrl"] + resources.append(resource) + return resources + return [data] + + +def _load_ndjson(path: Path, *, strict: bool = False) -> list[dict[str, Any]]: + resources: list[dict[str, Any]] = [] + with path.open("r", encoding="utf-8") as handle: + for line_number, line in enumerate(handle, start=1): + line = line.strip() + if not line: + continue + try: + obj = json.loads(line) + except json.JSONDecodeError as exc: + if strict: + raise + logger.warning( + "Skipping malformed NDJSON line %d in %s: %s", + line_number, + path.name, + exc, + ) + continue + if isinstance(obj, dict): + resources.append(obj) + return resources + + +# ------------------------------------------------------------ reference resolution + + +def _profiles_by_reference( + patients: list[Mapping[str, Any]], + profiles: list[PatientProfile], +) -> dict[str, PatientProfile]: + mapping: dict[str, PatientProfile] = {} + for patient, profile in zip(patients, profiles): + patient_id = str(patient.get("id") or "").strip() + if patient_id: + mapping[patient_id] = profile + mapping[f"Patient/{patient_id}"] = profile + full_url = str(patient.get("_bundle_full_url") or "").strip() + if full_url: + mapping[full_url] = profile + if full_url.casefold().startswith("urn:uuid:"): + mapping[full_url.split(":")[-1]] = profile + return mapping + + +def _profile_for_resource( + resource: Mapping[str, Any], + profiles: list[PatientProfile], + profiles_by_reference: Mapping[str, PatientProfile], +) -> PatientProfile | None: + reference = _patient_reference(resource) + if reference: + for candidate in _reference_candidates(reference): + if candidate in profiles_by_reference: + return profiles_by_reference[candidate] + if len(profiles) == 1: + return profiles[0] + return None + + +def _reference_candidates(reference: str) -> list[str]: + """All key forms a patient reference might match (relative, absolute URL, + urn:uuid, contained).""" + ref = reference.strip() + candidates = [ref] + if ref.casefold().startswith("urn:uuid:"): + candidates.append(ref.split(":")[-1]) + if ref.startswith("#"): + candidates.append(ref[1:]) + if "/" in ref: + parts = ref.rstrip("/").split("/") + tail = parts[-1] + candidates.append(tail) + if len(parts) >= 2 and parts[-2].casefold() == "patient": + candidates.append(f"Patient/{tail}") + # de-duplicate, preserve order + seen: set[str] = set() + return [c for c in candidates if c and not (c in seen or seen.add(c))] + + +def _patient_reference(resource: Mapping[str, Any]) -> str | None: + for key in ("subject", "patient", "beneficiary"): + reference = _reference_value(resource.get(key)) + if reference: + return reference + return None + + +def _reference_value(value: Any) -> str | None: + if isinstance(value, Mapping): + reference = value.get("reference") + if isinstance(reference, str) and reference.strip(): + return reference.strip() + return None + + +# ------------------------------------------------------------------ status / dates + +# Statuses that mean the resource is an error or did not happen -> drop entirely. +_STATUS_DROP = {"entered-in-error", "cancelled", "not-done", "nullified", "declined"} +# clinicalStatus values that mean the item is no longer present -> negate. +_INACTIVE_CLINICAL = {"resolved", "inactive", "remission"} + + +def _status_code(value: Any) -> str: + if isinstance(value, Mapping): + for coding in value.get("coding") or []: + code = str((coding or {}).get("code") or "").strip().casefold() + if code: + return code + return clean_text(value.get("text")).casefold() + return str(value or "").strip().casefold() + + +def _resource_disposition(resource_type: str, resource: Mapping[str, Any]) -> tuple[str, bool]: + """Return ("drop"|"keep", negated) from FHIR status fields. + + - entered-in-error / cancelled / not-done -> drop (error or did not happen) + - verificationStatus refuted -> keep but negated + - clinicalStatus resolved/inactive on Condition/Allergy -> keep but negated + (medications stay un-negated: a completed/stopped drug is real prior exposure) + """ + status = _status_code(resource.get("status")) + verification = _status_code(resource.get("verificationStatus")) + clinical = _status_code(resource.get("clinicalStatus")) + + if status in _STATUS_DROP or verification == "entered-in-error": + return "drop", False + if verification == "refuted": + return "keep", True + if resource_type in {"Condition", "AllergyIntolerance"} and clinical in _INACTIVE_CLINICAL: + return "keep", True + return "keep", False + + +def _temporality(resource: Mapping[str, Any], keys: tuple[str, ...]) -> str | None: + for key in keys: + value = resource.get(key) + if not value: + continue + if isinstance(value, str): + return clean_text(value) or None + if isinstance(value, Mapping): + if value.get("start") or value.get("end"): + span = f"{value.get('start', '')} to {value.get('end', '')}" + return clean_text(span).strip(" to") or None + if value.get("value") is not None: + return clean_text(f"{value.get('value')} {value.get('unit', '')}") or None + return None + + +def _annotations_text(value: Any) -> str | None: + if isinstance(value, Mapping): + value = [value] + if not isinstance(value, list): + return None + texts = [ + clean_text((note or {}).get("text")) + for note in value + if isinstance(note, Mapping) + ] + joined = "; ".join(text for text in texts if text) + return joined or None + + +# ----------------------------------------------------------------- resource router + + +def _add_resource( + profile: PatientProfile, + resource: Mapping[str, Any], + base_provenance: Provenance, +) -> None: + resource_type = resource.get("resourceType") + if resource_type in {None, "Patient"}: + return + + disposition, negated = _resource_disposition(str(resource_type), resource) + provenance = base_provenance.model_copy( + update={"source_resource": f"{resource_type}/{resource.get('id', 'unknown')}"} + ) + if disposition == "drop": + profile.unsupported.append( + { + "resourceType": resource_type, + "id": resource.get("id"), + "reason": "dropped: status indicates error or did-not-happen", + } + ) + return + + if resource_type == "Condition": + _add_condition(profile, resource, provenance, negated) + elif resource_type == "Observation": + _add_observation(profile, resource, provenance, negated) + elif resource_type in { + "MedicationRequest", + "MedicationStatement", + "MedicationAdministration", + }: + _add_medication(profile, resource, provenance, negated) + elif resource_type == "Procedure": + _add_procedure(profile, resource, provenance, negated) + elif resource_type == "DiagnosticReport": + _add_diagnostic_report(profile, resource, provenance) + elif resource_type == "DocumentReference": + _add_document_reference(profile, resource, provenance) + elif resource_type == "AllergyIntolerance": + _add_allergy(profile, resource, provenance, negated) + elif resource_type == "FamilyMemberHistory": + _add_family_history(profile, resource, provenance) + elif resource_type in {"MolecularSequence", "GenomicStudy"}: + _add_genomic(profile, resource, provenance, negated) + elif resource_type == "Specimen": + _add_specimen(profile, resource, provenance) + else: + profile.unsupported.append( + { + "resourceType": resource_type, + "id": resource.get("id"), + "reason": "FHIR resource type not mapped in v1 importer", + } + ) + + +def _add_condition( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, + negated: bool, +) -> None: + codeable = resource.get("code") or {} + codes = codes_from_fhir_codeable(codeable) + label = label_from_fhir_codeable(codeable) + if not label: + return + profile.conditions.append( + make_fact( + category="condition", + label=label, + original_code=codes[0] if codes else None, + normalized_codes=codes or None, + provenance=provenance, + description=_annotations_text(resource.get("note")), + temporality=_temporality( + resource, + ("onsetDateTime", "onsetPeriod", "onsetAge", "onsetString", "recordedDate"), + ), + negated=negated, + ) + ) + + +def _add_observation( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, + negated: bool, +) -> None: + codeable = resource.get("code") or {} + codes = codes_from_fhir_codeable(codeable) + label = label_from_fhir_codeable(codeable) + if not label: + return + category = "genomic_finding" if _is_genomic_observation(resource) else "observation" + profile.add_fact( + make_fact( + category=category, + label=label, + original_code=codes[0] if codes else None, + normalized_codes=codes or None, + provenance=provenance, + description=_observation_value(resource), + temporality=_temporality( + resource, ("effectiveDateTime", "effectivePeriod", "effectiveInstant") + ), + negated=negated, + ) + ) + + +def _add_medication( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, + negated: bool, +) -> None: + codes, label = _medication_codes_label(resource) + if not label: + return + profile.medications.append( + make_fact( + category="medication", + label=label, + original_code=codes[0] if codes else None, + normalized_codes=codes or None, + provenance=provenance, + description=_dosage_text(resource.get("dosageInstruction")), + temporality=_temporality( + resource, + ("authoredOn", "effectiveDateTime", "effectivePeriod"), + ), + negated=negated, + ) + ) + + +def _add_procedure( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, + negated: bool, +) -> None: + codeable = resource.get("code") or {} + codes = codes_from_fhir_codeable(codeable) + label = label_from_fhir_codeable(codeable) + if label: + profile.procedures.append( + make_fact( + category="procedure", + label=label, + original_code=codes[0] if codes else None, + normalized_codes=codes or None, + provenance=provenance, + temporality=_temporality( + resource, ("performedDateTime", "performedPeriod", "performedString") + ), + negated=negated, + ) + ) + + +def _add_diagnostic_report( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, +) -> None: + codeable = resource.get("code") or {} + codes = codes_from_fhir_codeable(codeable) + label = label_from_fhir_codeable(codeable) or clean_text(resource.get("conclusion")) + if label: + profile.diagnostic_reports.append( + make_fact( + category="diagnostic_report", + label=label, + original_code=codes[0] if codes else None, + normalized_codes=codes or None, + provenance=provenance, + description=clean_text(resource.get("conclusion")) or None, + ) + ) + + +def _add_document_reference( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, +) -> None: + profile.source_documents.append( + SourceDocument( + document_id=clean_text(resource.get("id")) or provenance.source_resource or "document", + title=clean_text(resource.get("description") or resource.get("docStatus")) or None, + document_type=label_from_fhir_codeable(resource.get("type") or {}) or None, + url=_document_url(resource), + provenance=provenance, + ) + ) + + +def _add_allergy( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, + negated: bool, +) -> None: + codeable = resource.get("code") or {} + codes = codes_from_fhir_codeable(codeable) + label = label_from_fhir_codeable(codeable) + if label: + profile.conditions.append( + make_fact( + category="condition", + label=f"Allergy: {label}", + original_code=codes[0] if codes else None, + normalized_codes=codes or None, + provenance=provenance, + negated=negated, + extra={"clinical_status": _status_code(resource.get("clinicalStatus")) or None}, + ) + ) + + +def _add_family_history( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, +) -> None: + relationship = label_from_fhir_codeable(resource.get("relationship") or {}) + conditions = resource.get("condition") or [] + label = relationship or clean_text(resource.get("id")) + if conditions: + labels = [ + label_from_fhir_codeable(condition.get("code") or {}) + for condition in conditions + if isinstance(condition, Mapping) + ] + label = f"{relationship}: {', '.join(item for item in labels if item)}" + if label: + profile.family_history.append( + make_fact( + category="family_history", + label=label, + provenance=provenance, + extra={"relationship": relationship}, + ) + ) + + +def _add_genomic( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, + negated: bool = False, +) -> None: + label = ( + label_from_fhir_codeable(resource.get("type") or {}) + or clean_text(resource.get("id")) + or "Genomic finding" + ) + profile.genomic_findings.append( + make_fact( + category="genomic_finding", + label=label, + provenance=provenance, + negated=negated, + ) + ) + + +def _add_specimen( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, +) -> None: + label = label_from_fhir_codeable(resource.get("type") or {}) or clean_text( + resource.get("id") + ) + if label: + profile.diagnostic_reports.append( + make_fact( + category="diagnostic_report", + label=f"Specimen: {label}", + provenance=provenance, + ) + ) + + +# ------------------------------------------------------------------- value helpers + + +def _medication_codes_label(resource: Mapping[str, Any]): + """Resolve a medication's codes + label across R4/R5 shapes and references.""" + codeable = resource.get("medicationCodeableConcept") + if not isinstance(codeable, Mapping): + medication = resource.get("medication") + if isinstance(medication, Mapping): + # R5 wraps as medication.concept; otherwise treat as the concept itself. + concept = medication.get("concept") + codeable = concept if isinstance(concept, Mapping) else medication + if isinstance(codeable, Mapping) and (codeable.get("coding") or codeable.get("text")): + label = label_from_fhir_codeable(codeable) + if label: + return codes_from_fhir_codeable(codeable), label + + # medicationReference (R4) / medication.reference (R5), incl. contained Medication. + reference = resource.get("medicationReference") + if not isinstance(reference, Mapping) and isinstance(resource.get("medication"), Mapping): + reference = resource["medication"].get("reference") + if isinstance(reference, Mapping): + contained = _resolve_contained(resource, reference.get("reference")) + if contained is not None: + contained_code = contained.get("code") or {} + label = label_from_fhir_codeable(contained_code) or clean_text( + reference.get("display") + ) + if label: + return codes_from_fhir_codeable(contained_code), label + display = clean_text(reference.get("display")) + if display: + return [], display + return [], None + + +def _resolve_contained(resource: Mapping[str, Any], reference: Any) -> Mapping[str, Any] | None: + if not isinstance(reference, str) or not reference.startswith("#"): + return None + target = reference[1:] + for item in resource.get("contained") or []: + if isinstance(item, Mapping) and str(item.get("id")) == target: + return item + return None + + +def _dosage_text(value: Any) -> str | None: + if isinstance(value, Mapping): + value = [value] + if not isinstance(value, list): + return None + texts = [ + clean_text((dosage or {}).get("text")) + for dosage in value + if isinstance(dosage, Mapping) + ] + joined = "; ".join(text for text in texts if text) + return joined or None + + +def _observation_value(resource: Mapping[str, Any]) -> str | None: + parts: list[str] = [] + main = _value_x(resource) + if main: + parts.append(main) + interpretation = _interpretation_text(resource.get("interpretation")) + if interpretation: + parts.append(f"[{interpretation}]") + for component in resource.get("component") or []: + if not isinstance(component, Mapping): + continue + component_label = label_from_fhir_codeable(component.get("code") or {}) + component_value = _value_x(component) + if component_label and component_value: + parts.append(f"{component_label}: {component_value}") + elif component_label: + parts.append(component_label) + elif component_value: + parts.append(component_value) + return clean_text(" ".join(parts)) or None + + +def _value_x(node: Mapping[str, Any]) -> str | None: + quantity = node.get("valueQuantity") + if isinstance(quantity, Mapping): + comparator = clean_text(quantity.get("comparator")) + unit = clean_text(quantity.get("unit") or quantity.get("code")) + value = quantity.get("value") + if value is not None or comparator: + number = f"{comparator}{value if value is not None else ''}".strip() + return clean_text(f"{number} {unit}") or None + concept = node.get("valueCodeableConcept") + if isinstance(concept, Mapping): + return label_from_fhir_codeable(concept) or None + value_range = node.get("valueRange") + if isinstance(value_range, Mapping): + low = (value_range.get("low") or {}).get("value") + high = (value_range.get("high") or {}).get("value") + span = f"{'' if low is None else low}-{'' if high is None else high}" + return clean_text(span).strip("-") or None + ratio = node.get("valueRatio") + if isinstance(ratio, Mapping): + numerator = (ratio.get("numerator") or {}).get("value") + denominator = (ratio.get("denominator") or {}).get("value") + return clean_text(f"{numerator}/{denominator}") or None + for key in ("valueString", "valueBoolean", "valueInteger", "valueDateTime", "valueTime"): + if key in node: + return clean_text(node.get(key)) or None + return None + + +def _interpretation_text(value: Any) -> str | None: + if isinstance(value, Mapping): + value = [value] + if not isinstance(value, list): + return None + labels = [ + label_from_fhir_codeable(item) for item in value if isinstance(item, Mapping) + ] + joined = ", ".join(label for label in labels if label) + return joined or None + + +_GENOMIC_HINTS = ( + "genetic", + "genomic", + "variant", + "mutation", + "sequence variant", + "molecular", +) + + +def _is_genomic_observation(resource: Mapping[str, Any]) -> bool: + haystack = " ".join( + [ + clean_text(resource.get("category")).casefold(), + label_from_fhir_codeable(resource.get("code") or {}).casefold(), + ] + ) + return any(hint in haystack for hint in _GENOMIC_HINTS) + + +def _document_url(resource: Mapping[str, Any]) -> str | None: + for content in resource.get("content") or []: + attachment = (content or {}).get("attachment") or {} + if attachment.get("url"): + return clean_text(attachment.get("url")) + return None diff --git a/src/trialmatchai/interop/importers/omop.py b/src/trialmatchai/interop/importers/omop.py new file mode 100644 index 00000000..4055770d --- /dev/null +++ b/src/trialmatchai/interop/importers/omop.py @@ -0,0 +1,417 @@ +from __future__ import annotations + +from pathlib import Path +from typing import Any + +import pandas as pd + +from trialmatchai.interop.models import ( + Demographics, + Location, + NormalizedCode, + PatientNote, + PatientProfile, + Provenance, +) +from trialmatchai.interop.utils import ( + age_years_from_birth_date, + clean_text, + make_fact, + normalize_gender, + parse_date, + safe_patient_id, + source_path_string, +) + + +def import_omop_extract( + path: str | Path, + *, + strict: bool = False, +) -> list[PatientProfile]: + root = Path(path) + tables = _load_tables(root) + concepts = _concept_lookup(tables.get("concept")) + location_index = _location_index(tables.get("location")) + person = tables.get("person") + if person is None or person.empty: + if strict: + raise ValueError(f"OMOP extract is missing PERSON table: {root}") + return [] + + # Group each child table by normalized person_id ONCE, so each patient is an + # O(1) lookup instead of a full-table scan (no N+1), and the join is robust + # to float promotion from null person_id and to id sanitization. + grouped = { + name: _group_by_person(tables.get(name)) + for name in ( + "condition_occurrence", + "measurement", + "drug_exposure", + "procedure_occurrence", + "observation", + "note", + "note_nlp", + ) + } + + profiles: list[PatientProfile] = [] + for row in person.to_dict("records"): + raw_person_id = row.get("person_id") + person_key = _normalize_join_id(raw_person_id) + patient_id = safe_patient_id(raw_person_id, "omop-patient") + provenance = Provenance( + source_format="omop", + source_id=patient_id, + source_path=source_path_string(root), + source_table="PERSON", + ) + birth_date = _person_birth_date(row) + profile = PatientProfile( + patient_id=patient_id, + demographics=Demographics( + sex=_concept_label(row.get("gender_concept_id"), concepts) + or normalize_gender(row.get("gender_source_value")), + gender=normalize_gender(row.get("gender_source_value")), + birth_date=birth_date, + age_years=age_years_from_birth_date(birth_date), + ), + location=_person_location(row, location_index, concepts), + provenance=[provenance], + ) + _add_condition_rows(profile, grouped["condition_occurrence"].get(person_key, []), concepts, root) + _add_measurement_rows(profile, grouped["measurement"].get(person_key, []), concepts, root) + _add_drug_rows(profile, grouped["drug_exposure"].get(person_key, []), concepts, root) + _add_procedure_rows(profile, grouped["procedure_occurrence"].get(person_key, []), concepts, root) + _add_observation_rows(profile, grouped["observation"].get(person_key, []), concepts, root) + _add_note_rows(profile, grouped["note"].get(person_key, []), root) + _add_note_nlp_rows(profile, grouped["note_nlp"].get(person_key, []), concepts, root) + profiles.append(profile) + return profiles + + +def _load_tables(root: Path) -> dict[str, pd.DataFrame]: + tables: dict[str, pd.DataFrame] = {} + for file_path in root.iterdir(): + if file_path.suffix.casefold() not in {".csv", ".parquet"}: + continue + name = file_path.stem.casefold() + if file_path.suffix.casefold() == ".csv": + table = pd.read_csv(file_path) + else: + table = pd.read_parquet(file_path) + table.columns = [str(column).casefold() for column in table.columns] + tables[name] = table + return tables + + +def _concept_lookup(table: pd.DataFrame | None) -> dict[Any, dict[str, Any]]: + if table is None: + return {} + return { + record.get("concept_id"): record + for record in table.to_dict("records") + if record.get("concept_id") is not None + } + + +def _person_birth_date(row) -> Any: + if row.get("birth_datetime"): + return parse_date(row.get("birth_datetime")) + year = row.get("year_of_birth") + if pd.isna(year): + return None + month = int(row.get("month_of_birth") or 1) + day = int(row.get("day_of_birth") or 1) + return parse_date(f"{int(year):04d}-{month:02d}-{day:02d}") + + +def _add_condition_rows( + profile: PatientProfile, + rows: list[dict[str, Any]], + concepts: dict[Any, dict[str, Any]], + root: Path, +) -> None: + for row in rows: + code = _omop_code(row.get("condition_concept_id"), concepts) + label = _concept_label(row.get("condition_concept_id"), concepts) or clean_text( + row.get("condition_source_value") + ) + if label: + profile.conditions.append( + make_fact( + category="condition", + label=label, + original_code=code, + provenance=_row_provenance(root, profile.patient_id, "CONDITION_OCCURRENCE"), + temporality=clean_text(row.get("condition_start_date")) or None, + ) + ) + + +def _add_measurement_rows( + profile: PatientProfile, + rows: list[dict[str, Any]], + concepts: dict[Any, dict[str, Any]], + root: Path, +) -> None: + for row in rows: + code = _omop_code(row.get("measurement_concept_id"), concepts) + label = _concept_label(row.get("measurement_concept_id"), concepts) or clean_text( + row.get("measurement_source_value") + ) + value = row.get("value_as_number") + if pd.isna(value): + value = _concept_label(row.get("value_as_concept_id"), concepts) + unit = _concept_label(row.get("unit_concept_id"), concepts) + if label: + profile.observations.append( + make_fact( + category="observation", + label=label, + original_code=code, + provenance=_row_provenance(root, profile.patient_id, "MEASUREMENT"), + description=clean_text(f"{value or ''} {unit or ''}") or None, + temporality=clean_text(row.get("measurement_date")) or None, + ) + ) + + +def _add_drug_rows( + profile: PatientProfile, + rows: list[dict[str, Any]], + concepts: dict[Any, dict[str, Any]], + root: Path, +) -> None: + for row in rows: + code = _omop_code(row.get("drug_concept_id"), concepts) + label = _concept_label(row.get("drug_concept_id"), concepts) or clean_text( + row.get("drug_source_value") + ) + if label: + profile.medications.append( + make_fact( + category="medication", + label=label, + original_code=code, + provenance=_row_provenance(root, profile.patient_id, "DRUG_EXPOSURE"), + temporality=clean_text(row.get("drug_exposure_start_date")) or None, + ) + ) + + +def _add_procedure_rows( + profile: PatientProfile, + rows: list[dict[str, Any]], + concepts: dict[Any, dict[str, Any]], + root: Path, +) -> None: + for row in rows: + code = _omop_code(row.get("procedure_concept_id"), concepts) + label = _concept_label(row.get("procedure_concept_id"), concepts) or clean_text( + row.get("procedure_source_value") + ) + if label: + profile.procedures.append( + make_fact( + category="procedure", + label=label, + original_code=code, + provenance=_row_provenance(root, profile.patient_id, "PROCEDURE_OCCURRENCE"), + temporality=clean_text(row.get("procedure_date")) or None, + ) + ) + + +def _add_observation_rows( + profile: PatientProfile, + rows: list[dict[str, Any]], + concepts: dict[Any, dict[str, Any]], + root: Path, +) -> None: + for row in rows: + code = _omop_code(row.get("observation_concept_id"), concepts) + label = _concept_label(row.get("observation_concept_id"), concepts) or clean_text( + row.get("observation_source_value") + ) + if label: + profile.observations.append( + make_fact( + category="observation", + label=label, + original_code=code, + provenance=_row_provenance(root, profile.patient_id, "OBSERVATION"), + temporality=clean_text(row.get("observation_date")) or None, + ) + ) + + +def _add_note_rows( + profile: PatientProfile, + rows: list[dict[str, Any]], + root: Path, +) -> None: + for row in rows: + text = clean_text(row.get("note_text")) + if not text: + continue + provenance = _row_provenance(root, profile.patient_id, "NOTE") + profile.notes.append( + PatientNote( + note_id=clean_text(row.get("note_id")) or f"{profile.patient_id}-note", + text=text, + note_type=clean_text(row.get("note_type_concept_id")) or "omop-note", + provenance=provenance, + ) + ) + + +def _add_note_nlp_rows( + profile: PatientProfile, + rows: list[dict[str, Any]], + concepts: dict[Any, dict[str, Any]], + root: Path, +) -> None: + for row in rows: + code = _omop_code(row.get("note_nlp_concept_id"), concepts) + label = _concept_label(row.get("note_nlp_concept_id"), concepts) or clean_text( + row.get("lexical_variant") or row.get("snippet") + ) + if not label: + continue + concept = concepts.get(row.get("note_nlp_concept_id"), {}) + domain = clean_text(concept.get("domain_id")).casefold() + category = "condition" if domain == "condition" else "observation" + profile.add_fact( + make_fact( + category=category, + label=label, + original_code=code, + provenance=_row_provenance(root, profile.patient_id, "NOTE_NLP"), + evidence_text=clean_text(row.get("snippet")) or None, + evidence_start=_int_or_none(row.get("offset")), + negated=str(row.get("term_exists")).casefold() == "false", + ) + ) + + +def _normalize_join_id(value: Any) -> str: + """Canonicalize a person_id for joining across tables. + + Robust to float promotion (a null in the column makes person_id 1 -> 1.0) + and to the raw-vs-string mismatch, so PERSON and child tables join on the + same key regardless of dtype. + """ + if value is None: + return "" + if isinstance(value, float): + if pd.isna(value): + return "" + if value.is_integer(): + return str(int(value)) + return str(value) + try: + if pd.isna(value): + return "" + except (TypeError, ValueError): + pass + text = str(value).strip() + if text.endswith(".0") and text[:-2].isdigit(): + return text[:-2] + return text + + +def _location_index(table: pd.DataFrame | None) -> dict[str, dict[str, Any]]: + if table is None or table.empty or "location_id" not in table.columns: + return {} + index: dict[str, dict[str, Any]] = {} + for record in table.to_dict("records"): + key = _normalize_join_id(record.get("location_id")) + if key: + index.setdefault(key, record) + return index + + +def _person_location( + row: dict[str, Any], + location_index: dict[str, dict[str, Any]], + concepts: dict[Any, dict[str, Any]], +) -> Location | None: + if not location_index: + return None + location_id = _normalize_join_id(row.get("location_id")) + if not location_id: + return None + loc = location_index.get(location_id) + if not loc: + return None + + def field(name: str) -> str | None: + value = loc.get(name) + if value is None or (isinstance(value, float) and pd.isna(value)): + return None + return clean_text(value) or None + + country = field("country_source_value") or _concept_label( + loc.get("country_concept_id"), concepts + ) + state = field("state") + city = field("city") + if not (country or state or city): + return None + return Location(country=country, state=state, city=city) + + +def _group_by_person(table: pd.DataFrame | None) -> dict[str, list[dict[str, Any]]]: + if table is None or table.empty or "person_id" not in table.columns: + return {} + grouped: dict[str, list[dict[str, Any]]] = {} + for record in table.to_dict("records"): + key = _normalize_join_id(record.get("person_id")) + if not key: + continue + grouped.setdefault(key, []).append(record) + return grouped + + +def _row_provenance(root: Path, patient_id: str, table_name: str) -> Provenance: + return Provenance( + source_format="omop", + source_id=patient_id, + source_path=source_path_string(root), + source_table=table_name, + ) + + +def _omop_code(concept_id: Any, concepts: dict[Any, dict[str, Any]]) -> NormalizedCode | None: + if concept_id is None or pd.isna(concept_id): + return None + concept = concepts.get(concept_id) + if not concept: + return NormalizedCode( + vocabulary="OMOP", + code=str(int(concept_id)) if isinstance(concept_id, float) else str(concept_id), + mapping_status="unmapped", + ) + return NormalizedCode( + vocabulary=clean_text(concept.get("vocabulary_id")) or "OMOP", + code=clean_text(concept.get("concept_code")) or str(concept_id), + label=clean_text(concept.get("concept_name")) or None, + mapping_status="exact", + ) + + +def _concept_label(concept_id: Any, concepts: dict[Any, dict[str, Any]]) -> str | None: + if concept_id is None or pd.isna(concept_id): + return None + concept = concepts.get(concept_id) + return clean_text((concept or {}).get("concept_name")) or None + + +def _int_or_none(value: Any) -> int | None: + if value is None or pd.isna(value): + return None + try: + return int(value) + except (TypeError, ValueError): + return None diff --git a/src/trialmatchai/interop/importers/phenopacket.py b/src/trialmatchai/interop/importers/phenopacket.py new file mode 100644 index 00000000..59e52b73 --- /dev/null +++ b/src/trialmatchai/interop/importers/phenopacket.py @@ -0,0 +1,299 @@ +from __future__ import annotations + +import json +from pathlib import Path +from typing import Any, Mapping + +from trialmatchai.interop.models import Demographics, PatientProfile, Provenance, SourceDocument +from trialmatchai.interop.utils import ( + clean_text, + code_from_ontology_class, + make_fact, + normalize_gender, + parse_date, + parse_iso8601_age_years, + safe_patient_id, + source_path_string, +) +from trialmatchai.schemas.phenopacket import Phenopacket + + +def import_phenopacket( + path: str | Path, + *, + strict: bool = False, +) -> PatientProfile: + packet_path = Path(path) + data = json.loads(packet_path.read_text(encoding="utf-8")) + try: + Phenopacket.model_validate(data) + except Exception: + if strict: + raise + patient_id = safe_patient_id(data.get("id"), packet_path.stem) + provenance = Provenance( + source_format="phenopacket", + source_id=patient_id, + source_path=source_path_string(packet_path), + ) + profile = PatientProfile( + patient_id=patient_id, + demographics=_demographics(data.get("subject") or {}), + provenance=[provenance], + ) + _add_phenotypes(profile, data, provenance) + _add_diseases(profile, data, provenance) + _add_biosamples(profile, data, provenance) + _add_measurements(profile, data, provenance) + _add_actions(profile, data, provenance) + _add_interpretations(profile, data, provenance) + _add_family(profile, data, provenance) + _add_files(profile, data, provenance) + return profile + + +def _demographics(subject: Mapping[str, Any]) -> Demographics: + age_years = None + encounter = subject.get("timeAtLastEncounter") or {} + if isinstance(encounter, Mapping): + age = encounter.get("age") or {} + if isinstance(age, Mapping): + age_years = parse_iso8601_age_years(age.get("iso8601duration")) + birth_date = parse_date(subject.get("dateOfBirth")) + return Demographics( + sex=normalize_gender(subject.get("sex")), + gender=normalize_gender(subject.get("gender")), + birth_date=birth_date, + age_years=age_years, + species=clean_text((subject.get("taxonomy") or {}).get("label")), + description=clean_text(subject.get("description")) or None, + ) + + +def _add_phenotypes( + profile: PatientProfile, + data: Mapping[str, Any], + provenance: Provenance, +) -> None: + for index, item in enumerate(data.get("phenotypicFeatures") or []): + feature = item.get("type") or {} + code = code_from_ontology_class(feature) + label = clean_text(feature.get("label") or feature.get("id")) + if not label: + continue + profile.phenotypes.append( + make_fact( + category="phenotype", + label=label, + original_code=code, + provenance=provenance.model_copy( + update={"source_resource": f"phenotypicFeatures[{index}]"} + ), + description=clean_text(item.get("description")) or None, + negated=bool(item.get("excluded", False)), + temporality=clean_text(item.get("onset")) or None, + extra={"severity": item.get("severity"), "modifiers": item.get("modifiers")}, + ) + ) + + +def _add_diseases( + profile: PatientProfile, + data: Mapping[str, Any], + provenance: Provenance, +) -> None: + for index, item in enumerate(data.get("diseases") or []): + term = item.get("term") or {} + code = code_from_ontology_class(term) + label = clean_text(term.get("label") or term.get("id")) + if not label: + continue + category = "cancer" if item.get("tnmFinding") or item.get("diseaseStage") else "condition" + profile.add_fact( + make_fact( + category=category, + label=label, + original_code=code, + provenance=provenance.model_copy( + update={"source_resource": f"diseases[{index}]"} + ), + description=clean_text(item.get("description")) or None, + temporality=clean_text(item.get("onset")) or None, + extra={ + "disease_stage": item.get("diseaseStage") or [], + "tnm_finding": item.get("tnmFinding") or [], + }, + ) + ) + + +def _add_biosamples( + profile: PatientProfile, + data: Mapping[str, Any], + provenance: Provenance, +) -> None: + for index, sample in enumerate(data.get("biosamples") or []): + label = clean_text( + (sample.get("histologicalDiagnosis") or {}).get("label") + or (sample.get("sampledTissue") or {}).get("label") + or (sample.get("sampleType") or {}).get("label") + or sample.get("id") + ) + if not label: + continue + profile.diagnostic_reports.append( + make_fact( + category="diagnostic_report", + label=f"Biosample: {label}", + provenance=provenance.model_copy( + update={"source_resource": f"biosamples[{index}]"} + ), + description=clean_text(sample.get("description")) or None, + extra=sample, + ) + ) + + +def _add_measurements( + profile: PatientProfile, + data: Mapping[str, Any], + provenance: Provenance, +) -> None: + for index, item in enumerate(data.get("measurements") or []): + assay = item.get("assay") or {} + code = code_from_ontology_class(assay) + label = clean_text(assay.get("label") or assay.get("id")) + if not label: + continue + value = item.get("value") or {} + profile.observations.append( + make_fact( + category="observation", + label=label, + original_code=code, + provenance=provenance.model_copy( + update={"source_resource": f"measurements[{index}]"} + ), + description=clean_text(value or item.get("description")) or None, + extra={"value": value}, + ) + ) + + +def _add_actions( + profile: PatientProfile, + data: Mapping[str, Any], + provenance: Provenance, +) -> None: + for index, action in enumerate(data.get("medicalActions") or []): + if action.get("treatment"): + tx = action["treatment"] + agent = tx.get("agent") or {} + code = code_from_ontology_class(agent) + label = clean_text(agent.get("label") or agent.get("id") or tx.get("description")) + if label: + profile.medications.append( + make_fact( + category="medication", + label=label, + original_code=code, + provenance=provenance.model_copy( + update={"source_resource": f"medicalActions[{index}].treatment"} + ), + description=clean_text(tx.get("description")) or None, + extra=tx, + ) + ) + if action.get("procedure"): + proc = action["procedure"] + codeable = proc.get("code") or {} + code = code_from_ontology_class(codeable) + label = clean_text(codeable.get("label") or codeable.get("id") or proc.get("description")) + if label: + profile.procedures.append( + make_fact( + category="procedure", + label=label, + original_code=code, + provenance=provenance.model_copy( + update={"source_resource": f"medicalActions[{index}].procedure"} + ), + description=clean_text(proc.get("description")) or None, + temporality=clean_text(proc.get("performed")) or None, + extra=proc, + ) + ) + + +def _add_interpretations( + profile: PatientProfile, + data: Mapping[str, Any], + provenance: Provenance, +) -> None: + for index, item in enumerate(data.get("interpretations") or []): + diagnosis = item.get("diagnosis") or {} + for gi_index, interpretation in enumerate(diagnosis.get("genomicInterpretations") or []): + variant = (interpretation.get("variantInterpretation") or {}).get( + "variationDescriptor" + ) or {} + gene = (variant.get("geneContext") or {}).get("symbol") + label = clean_text(" ".join(part for part in [gene, variant.get("label")] if part)) + if label: + profile.genomic_findings.append( + make_fact( + category="genomic_finding", + label=label, + provenance=provenance.model_copy( + update={ + "source_resource": ( + f"interpretations[{index}].diagnosis." + f"genomicInterpretations[{gi_index}]" + ) + } + ), + description=clean_text(diagnosis.get("description")) or None, + extra=variant, + ) + ) + + +def _add_family( + profile: PatientProfile, + data: Mapping[str, Any], + provenance: Provenance, +) -> None: + family = data.get("family") or {} + for index, relative in enumerate(family.get("relatives") or []): + label = clean_text(relative.get("description") or relative.get("id")) + if not label: + continue + profile.family_history.append( + make_fact( + category="family_history", + label=label, + provenance=provenance.model_copy( + update={"source_resource": f"family.relatives[{index}]"} + ), + extra=relative, + ) + ) + + +def _add_files( + profile: PatientProfile, + data: Mapping[str, Any], + provenance: Provenance, +) -> None: + for index, file_ref in enumerate(data.get("files") or []): + uri = clean_text(file_ref.get("uri") or file_ref.get("path")) + profile.source_documents.append( + SourceDocument( + document_id=clean_text(file_ref.get("individualToFileIdentifiers")) or f"file-{index}", + title=clean_text(file_ref.get("description")) or None, + document_type=clean_text(file_ref.get("fileAttributes")) or None, + url=uri or None, + provenance=provenance.model_copy( + update={"source_resource": f"files[{index}]"} + ), + ) + ) diff --git a/src/trialmatchai/interop/importers/text.py b/src/trialmatchai/interop/importers/text.py new file mode 100644 index 00000000..db1d93b0 --- /dev/null +++ b/src/trialmatchai/interop/importers/text.py @@ -0,0 +1,116 @@ +from __future__ import annotations + +from pathlib import Path +from typing import Any + +from trialmatchai.interop.models import Demographics, PatientNote, PatientProfile, Provenance +from trialmatchai.interop.utils import make_fact, safe_patient_id, source_path_string + + +ENTITY_GROUP_TO_CATEGORY = { + "disease": "condition", + "condition": "condition", + "drug": "medication", + "medication": "medication", + "procedure": "procedure", + "diagnostic_test": "observation", + "laboratory_test": "observation", + "radiology": "diagnostic_report", + "sign_symptom": "phenotype", + "gene": "genomic_finding", + "cell_type": "phenotype", + "species": "phenotype", +} + + +def import_text_note( + path: str | Path, + *, + entity_annotator: Any | None = None, +) -> PatientProfile: + note_path = Path(path) + text = note_path.read_text(encoding="utf-8") + patient_id = safe_patient_id(note_path.stem, note_path.stem) + provenance = Provenance( + source_format="text", + source_id=patient_id, + source_path=source_path_string(note_path), + source_field="note_text", + ) + entities = _annotate(text, entity_annotator) + profile = PatientProfile( + patient_id=patient_id, + demographics=Demographics(), + notes=[ + PatientNote( + note_id=f"{patient_id}-note", + text=text, + entities=entities, + provenance=provenance, + ) + ], + provenance=[provenance], + ) + for entity in entities: + fact = _entity_to_fact(entity, provenance) + if fact is not None: + profile.add_fact(fact) + return profile + + +def _annotate(text: str, entity_annotator: Any | None) -> list[dict]: + if entity_annotator is None: + return [] + if hasattr(entity_annotator, "annotate_texts_in_parallel"): + result = entity_annotator.annotate_texts_in_parallel([text], max_workers=1) + return list(result[0]) if result else [] + if hasattr(entity_annotator, "annotate_texts"): + result = entity_annotator.annotate_texts([text]) + annotations = result[0] if result else [] + return [ + annotation.to_dict() if hasattr(annotation, "to_dict") else dict(annotation) + for annotation in annotations + ] + return [] + + +def _entity_to_fact(entity: dict, provenance: Provenance): + if entity.get("error_code"): + return None + group = str(entity.get("entity_group") or entity.get("class") or "").casefold() + category = ENTITY_GROUP_TO_CATEGORY.get(group, "observation") + text = str(entity.get("text") or entity.get("entity") or "").strip() + if not text: + return None + normalized_codes = [] + for normalized_id in entity.get("normalized_id") or []: + if normalized_id == "CUI-less" or ":" not in normalized_id: + continue + vocabulary, code = normalized_id.split(":", 1) + normalized_codes.append( + { + "vocabulary": vocabulary, + "code": code, + "label": text, + "confidence": entity.get("linker_score") or entity.get("score"), + "mapping_status": "normalized", + } + ) + from trialmatchai.interop.models import NormalizedCode + + return make_fact( + category=category, + label=text, + provenance=provenance, + normalized_codes=[NormalizedCode.model_validate(code) for code in normalized_codes], + evidence_text=text, + evidence_start=entity.get("start"), + evidence_end=entity.get("end"), + confidence=entity.get("score"), + extra={ + "entity_group": entity.get("entity_group"), + "synonyms": entity.get("synonyms") or [], + "concept_candidates": entity.get("concept_candidates") or [], + "linker_status": entity.get("linker_status"), + }, + ) diff --git a/src/trialmatchai/interop/models.py b/src/trialmatchai/interop/models.py new file mode 100644 index 00000000..251046f6 --- /dev/null +++ b/src/trialmatchai/interop/models.py @@ -0,0 +1,148 @@ +from __future__ import annotations + +from datetime import date +from typing import Any, Literal + +from pydantic import BaseModel, ConfigDict, Field, field_validator + + +MappingStatus = Literal[ + "exact", + "normalized", + "broader", + "narrower", + "inferred", + "unsupported", + "unmapped", +] + + +class Provenance(BaseModel): + source_format: str + source_id: str | None = None + source_path: str | None = None + source_resource: str | None = None + source_table: str | None = None + source_field: str | None = None + + model_config = ConfigDict(extra="allow") + + +class NormalizedCode(BaseModel): + vocabulary: str + code: str + label: str | None = None + system: str | None = None + confidence: float | None = Field(default=None, ge=0.0, le=1.0) + mapping_status: MappingStatus = "unmapped" + + model_config = ConfigDict(extra="allow") + + +class Demographics(BaseModel): + sex: str | None = None + gender: str | None = None + birth_date: date | None = None + age_years: float | None = Field(default=None, ge=0) + species: str | None = None + description: str | None = None + + model_config = ConfigDict(extra="allow") + + +class Location(BaseModel): + """A patient's geographic location, used for optional site-based filtering.""" + + country: str | None = None + state: str | None = None + city: str | None = None + + model_config = ConfigDict(extra="allow") + + +class ClinicalFact(BaseModel): + fact_id: str + category: str + label: str + description: str | None = None + original_code: NormalizedCode | None = None + normalized_codes: list[NormalizedCode] = Field(default_factory=list) + vocabulary: str | None = None + evidence_text: str | None = None + evidence_start: int | None = Field(default=None, ge=0) + evidence_end: int | None = Field(default=None, ge=0) + confidence: float | None = Field(default=None, ge=0.0, le=1.0) + negated: bool = False + temporality: str | None = None + mapping_status: MappingStatus = "unmapped" + provenance: Provenance + extra: dict[str, Any] = Field(default_factory=dict) + + model_config = ConfigDict(extra="allow") + + @field_validator("evidence_end") + @classmethod + def validate_evidence_end(cls, value: int | None, info): + start = info.data.get("evidence_start") + if value is not None and start is not None and value < start: + raise ValueError("evidence_end must be >= evidence_start") + return value + + +class PatientNote(BaseModel): + note_id: str + text: str + note_type: str = "clinical-note" + entities: list[dict[str, Any]] = Field(default_factory=list) + provenance: Provenance + + model_config = ConfigDict(extra="allow") + + +class SourceDocument(BaseModel): + document_id: str + title: str | None = None + document_type: str | None = None + url: str | None = None + text: str | None = None + provenance: Provenance + + model_config = ConfigDict(extra="allow") + + +class PatientProfile(BaseModel): + patient_id: str + demographics: Demographics = Field(default_factory=Demographics) + location: Location | None = None + conditions: list[ClinicalFact] = Field(default_factory=list) + phenotypes: list[ClinicalFact] = Field(default_factory=list) + observations: list[ClinicalFact] = Field(default_factory=list) + medications: list[ClinicalFact] = Field(default_factory=list) + procedures: list[ClinicalFact] = Field(default_factory=list) + diagnostic_reports: list[ClinicalFact] = Field(default_factory=list) + genomic_findings: list[ClinicalFact] = Field(default_factory=list) + cancer_profile: list[ClinicalFact] = Field(default_factory=list) + family_history: list[ClinicalFact] = Field(default_factory=list) + notes: list[PatientNote] = Field(default_factory=list) + source_documents: list[SourceDocument] = Field(default_factory=list) + provenance: list[Provenance] = Field(default_factory=list) + unsupported: list[dict[str, Any]] = Field(default_factory=list) + + model_config = ConfigDict(extra="allow") + + def add_fact(self, fact: ClinicalFact) -> None: + bucket = { + "condition": self.conditions, + "phenotype": self.phenotypes, + "observation": self.observations, + "medication": self.medications, + "procedure": self.procedures, + "diagnostic_report": self.diagnostic_reports, + "genomic_finding": self.genomic_findings, + "cancer": self.cancer_profile, + "family_history": self.family_history, + }.get(fact.category) + if bucket is None: + self.observations.append(fact) + else: + bucket.append(fact) diff --git a/src/trialmatchai/interop/narrative.py b/src/trialmatchai/interop/narrative.py new file mode 100644 index 00000000..cf762ed1 --- /dev/null +++ b/src/trialmatchai/interop/narrative.py @@ -0,0 +1,108 @@ +from __future__ import annotations + +import re + +from trialmatchai.interop.models import ClinicalFact, PatientProfile + + +def render_patient_narrative(profile: PatientProfile) -> list[str]: + """Render structured profile facts into deterministic LLM-ready sentences.""" + lines: list[str] = [] + demographics = profile.demographics + demo_bits = [] + if demographics.age_years is not None: + demo_bits.append(f"age {demographics.age_years:g} years") + if demographics.sex: + demo_bits.append(f"sex {demographics.sex}") + if demographics.gender and demographics.gender != demographics.sex: + demo_bits.append(f"gender {demographics.gender}") + if demographics.species: + demo_bits.append(f"species {demographics.species}") + if demographics.description: + demo_bits.append(demographics.description) + if demo_bits: + lines.append("Patient demographics: " + "; ".join(demo_bits) + ".") + + lines.extend(_render_fact_group("Diagnoses", profile.conditions)) + lines.extend(_render_fact_group("Phenotypes", profile.phenotypes)) + lines.extend(_render_fact_group("Observations", profile.observations)) + lines.extend(_render_fact_group("Medications", profile.medications)) + lines.extend(_render_fact_group("Procedures", profile.procedures)) + lines.extend(_render_fact_group("Diagnostic reports", profile.diagnostic_reports)) + lines.extend(_render_fact_group("Genomic findings", profile.genomic_findings)) + lines.extend(_render_fact_group("Cancer profile", profile.cancer_profile)) + lines.extend(_render_fact_group("Family history", profile.family_history)) + + if profile.notes: + note_text = " ".join(note.text for note in profile.notes[:3]) + if note_text: + lines.append(f"Clinical note context: {note_text[:2000]}") + + return lines or ["No structured patient facts were available."] + + +def render_search_terms(profile: PatientProfile) -> tuple[list[str], list[str]]: + main_conditions = _dedupe( + fact.label for fact in profile.conditions if not fact.negated + ) + if not main_conditions: + main_conditions = _dedupe( + fact.label for fact in profile.phenotypes if not fact.negated + ) + if not main_conditions: + main_conditions = _dedupe( + _note_search_term(note.text) for note in profile.notes if note.text + )[:1] + other_terms = _dedupe( + [ + *[fact.label for fact in profile.phenotypes if not fact.negated], + *[fact.label for fact in profile.observations if not fact.negated], + *[fact.label for fact in profile.medications if not fact.negated], + *[fact.label for fact in profile.procedures if not fact.negated], + *[fact.label for fact in profile.genomic_findings if not fact.negated], + *[fact.label for fact in profile.cancer_profile if not fact.negated], + *[fact.label for fact in profile.family_history if not fact.negated], + ] + ) + return main_conditions, [term for term in other_terms if term not in main_conditions] + + +def _render_fact_group(label: str, facts: list[ClinicalFact]) -> list[str]: + if not facts: + return [] + rendered = [] + for fact in facts: + status = "absent" if fact.negated else "present" + pieces = [fact.label, status] + if fact.description: + pieces.append(fact.description) + if fact.temporality: + pieces.append(f"timing {fact.temporality}") + code = fact.normalized_codes[0] if fact.normalized_codes else None + if code and code.code: + pieces.append(f"code {code.vocabulary}:{code.code}") + rendered.append(f"{label}: " + "; ".join(pieces) + ".") + return rendered + + +def _dedupe(values) -> list[str]: + seen: set[str] = set() + output: list[str] = [] + for value in values: + cleaned = str(value).strip() + if not cleaned: + continue + key = cleaned.casefold() + if key in seen: + continue + seen.add(key) + output.append(cleaned) + return output + + +def _note_search_term(text: str, *, max_chars: int = 500) -> str: + cleaned = re.sub(r"\s+", " ", text).strip() + if len(cleaned) <= max_chars: + return cleaned + truncated = cleaned[:max_chars].rsplit(" ", 1)[0].strip() + return truncated or cleaned[:max_chars].strip() diff --git a/src/trialmatchai/interop/utils.py b/src/trialmatchai/interop/utils.py new file mode 100644 index 00000000..130d6858 --- /dev/null +++ b/src/trialmatchai/interop/utils.py @@ -0,0 +1,252 @@ +from __future__ import annotations + +import hashlib +import re +from datetime import date, datetime +from pathlib import Path +from typing import Any, Iterable, Mapping + +from trialmatchai.interop.models import ClinicalFact, NormalizedCode, Provenance + + +FHIR_SYSTEM_TO_VOCABULARY = { + "http://snomed.info/sct": "SNOMED", + "http://loinc.org": "LOINC", + "http://www.nlm.nih.gov/research/umls/rxnorm": "RxNorm", + "http://hl7.org/fhir/sid/icd-10-cm": "ICD10CM", + "http://hl7.org/fhir/sid/icd-10": "ICD10", + "https://hpo.jax.org/app/browse/term": "HP", + "http://purl.obolibrary.org/obo/hp.owl": "HP", + "http://purl.obolibrary.org/obo/mondo.owl": "MONDO", +} + + +def stable_id(*parts: Any) -> str: + payload = "|".join(str(part) for part in parts if part not in (None, "")) + return hashlib.sha256(payload.encode("utf-8")).hexdigest()[:16] + + +def clean_text(value: Any) -> str: + if value is None: + return "" + if isinstance(value, str): + return re.sub(r"\s+", " ", value).strip() + if isinstance(value, Mapping): + return clean_text(" ".join(clean_text(item) for item in value.values())) + if isinstance(value, Iterable) and not isinstance(value, (bytes, bytearray)): + return clean_text(" ".join(clean_text(item) for item in value)) + return clean_text(str(value)) + + +def normalize_gender(value: Any) -> str | None: + if value is None: + return None + text = str(value).strip().casefold() + if text in {"female", "f", "woman", "women"}: + return "Female" + if text in {"male", "m", "man", "men"}: + return "Male" + if text in {"all", "any", "unknown", "other", "undifferentiated"}: + return text.title() + return str(value).strip() or None + + +def parse_date(value: Any) -> date | None: + if not value: + return None + text = str(value).strip() + # Full date / datetime (FHIR dateTime, with or without timezone). + try: + return datetime.fromisoformat(text.replace("Z", "+00:00")).date() + except ValueError: + pass + # Partial FHIR dates are legal: YYYY or YYYY-MM (default to Jan / day 1). + match = re.fullmatch(r"(\d{4})(?:-(\d{2}))?(?:-(\d{2}))?", text) + if match: + try: + return date( + int(match.group(1)), + int(match.group(2) or 1), + int(match.group(3) or 1), + ) + except ValueError: + return None + # Datetime string fromisoformat couldn't parse (e.g. older Python tz forms): + # fall back to the leading YYYY-MM-DD if present. + prefix = re.match(r"(\d{4}-\d{2}-\d{2})", text) + if prefix: + try: + return date.fromisoformat(prefix.group(1)) + except ValueError: + return None + return None + + +def age_years_from_birth_date(birth_date: date | None) -> float | None: + if birth_date is None: + return None + today = date.today() + years = today.year - birth_date.year + if (today.month, today.day) < (birth_date.month, birth_date.day): + years -= 1 + return float(years) if years >= 0 else None + + +def parse_iso8601_age_years(value: Any) -> float | None: + if not value: + return None + text = str(value) + match = re.fullmatch(r"P(?:(\d+(?:\.\d+)?)Y)?(?:(\d+(?:\.\d+)?)M)?", text) + if not match: + return None + years = float(match.group(1) or 0) + months = float(match.group(2) or 0) + return round(years + months / 12, 2) + + +def code_from_ontology_class(value: Mapping[str, Any] | None) -> NormalizedCode | None: + if not value: + return None + identifier = str(value.get("id") or value.get("code") or "").strip() + label = str(value.get("label") or value.get("display") or "").strip() or None + if not identifier and not label: + return None + vocabulary = "local" + code = identifier or label or "" + if ":" in identifier: + vocabulary, code = identifier.split(":", 1) + elif "/" in identifier: + code = identifier.rstrip("/").split("/")[-1] + return NormalizedCode( + vocabulary=vocabulary, + code=code, + label=label, + system=value.get("system"), + mapping_status="exact" if identifier else "unmapped", + ) + + +def codes_from_fhir_codeable(value: Mapping[str, Any] | None) -> list[NormalizedCode]: + """Extract all codings from a FHIR CodeableConcept, known vocabularies first. + + Real EHRs emit several codings per concept (e.g. a proprietary code plus + SNOMED/LOINC/RxNorm). We keep them all and order recognized vocabularies + first so concept linking uses the standard code rather than a local one. + """ + if not isinstance(value, Mapping) or not value: + return [] + text = clean_text(value.get("text")) + codings = value.get("coding") + ranked: list[tuple[int, NormalizedCode]] = [] + for coding in codings if isinstance(codings, list) else []: + if not isinstance(coding, Mapping): + continue + code = str(coding.get("code") or "").strip() + if not code: + continue + system = str(coding.get("system") or "") + known = system in FHIR_SYSTEM_TO_VOCABULARY + vocabulary = FHIR_SYSTEM_TO_VOCABULARY.get(system) or ( + system.rsplit("/", 1)[-1] if system else "FHIR" + ) + label = clean_text(coding.get("display")) or text or None + ranked.append( + ( + 0 if known else 1, + NormalizedCode( + vocabulary=vocabulary or "FHIR", + code=code, + label=label, + system=system or None, + mapping_status="exact", + ), + ) + ) + ranked.sort(key=lambda item: item[0]) # stable: known vocabularies first + codes = [code for _, code in ranked] + if not codes and text: + codes = [ + NormalizedCode( + vocabulary="FHIR", code=text, label=text, mapping_status="unmapped" + ) + ] + return codes + + +def code_from_fhir_codeable(value: Mapping[str, Any] | None) -> NormalizedCode | None: + codes = codes_from_fhir_codeable(value) + return codes[0] if codes else None + + +def label_from_fhir_codeable(value: Mapping[str, Any] | None) -> str: + if not value: + return "" + text = clean_text(value.get("text")) + if text: + return text + codings = value.get("coding") or [] + if isinstance(codings, list): + for coding in codings: + label = clean_text((coding or {}).get("display")) + if label: + return label + code = clean_text((coding or {}).get("code")) + if code: + return code + return "" + + +def make_fact( + *, + category: str, + label: str, + provenance: Provenance, + description: str | None = None, + original_code: NormalizedCode | None = None, + normalized_codes: list[NormalizedCode] | None = None, + evidence_text: str | None = None, + evidence_start: int | None = None, + evidence_end: int | None = None, + confidence: float | None = None, + negated: bool = False, + temporality: str | None = None, + extra: dict[str, Any] | None = None, +) -> ClinicalFact: + cleaned_label = clean_text(label) or "Unknown" + codes = normalized_codes or ([] if original_code is None else [original_code]) + return ClinicalFact( + fact_id=stable_id( + category, + cleaned_label, + provenance.source_format, + provenance.source_path, + provenance.source_resource, + provenance.source_table, + evidence_start, + evidence_end, + ), + category=category, + label=cleaned_label, + description=clean_text(description) or None, + original_code=original_code, + normalized_codes=codes, + vocabulary=(codes[0].vocabulary if codes else None), + evidence_text=clean_text(evidence_text) or None, + evidence_start=evidence_start, + evidence_end=evidence_end, + confidence=confidence, + negated=negated, + temporality=temporality, + mapping_status=codes[0].mapping_status if codes else "unmapped", + provenance=provenance, + extra=extra or {}, + ) + + +def source_path_string(path: str | Path | None) -> str | None: + return str(Path(path).resolve()) if path else None + + +def safe_patient_id(value: Any, fallback: str) -> str: + candidate = clean_text(value) or fallback + return re.sub(r"[^A-Za-z0-9_.-]+", "-", candidate).strip("-") or fallback diff --git a/src/trialmatchai/main.py b/src/trialmatchai/main.py new file mode 100644 index 00000000..4e59d869 --- /dev/null +++ b/src/trialmatchai/main.py @@ -0,0 +1,644 @@ +from __future__ import annotations + +from contextlib import nullcontext +from pathlib import Path +from typing import TYPE_CHECKING, Dict, List, Optional, Tuple + +from trialmatchai.config.config_loader import load_config +from trialmatchai.constraints import ( + build_patient_constraint_context, + write_constraint_reports, +) +from trialmatchai.entities import build_entity_annotator +from trialmatchai.matching.trial_ranker import ( + load_trial_data, + rank_trials, + save_ranked_trials, +) +from trialmatchai.matching.retrieval.trial_retrieval import ClinicalTrialSearch +from trialmatchai.matching.retrieval.criteria_retrieval import SecondStageRetriever +from trialmatchai.matching.retrieval.location import ( + filter_trials_by_country, + patient_country, +) +from trialmatchai.search import LanceDBSearchBackend +from trialmatchai.services.preflight import run_preflight_checks +from trialmatchai.interop.exporters import profile_to_matching_summary +from trialmatchai.interop.models import PatientProfile +from trialmatchai.utils.file_utils import ( + create_directory, + is_valid_json_file, + read_json_file, + read_text_file, + write_json_file, + write_text_file, +) +from trialmatchai.schemas.phenopacket import Keywords +from trialmatchai.utils.logging_config import reset_request_id, set_request_id, setup_logging +from trialmatchai.utils.timing import log_timing + +if TYPE_CHECKING: + from trialmatchai.constraints import PatientConstraintContext + from trialmatchai.models.embedding.text_embedder import TextEmbedder + +logger = setup_logging(__name__) + + +def run_first_level_search( + keywords: Dict, + output_folder: str, + patient_info: Dict, + entity_annotator, + embedder: TextEmbedder, + config: Dict, + search_backend, + patient_profile: PatientProfile | None = None, +) -> Optional[Tuple]: + main_conditions = list(keywords.get("main_conditions", [])) + other_conditions = list(keywords.get("other_conditions", [])) + patient_narrative = list(keywords.get("patient_narrative", [])) + + if not main_conditions: + logger.error("No main_conditions found in keywords.") + return None + + condition = main_conditions[0] + age = patient_info.get("age", "all") + sex = patient_info.get("gender", "all") + overall_status = "All" + + cts = ClinicalTrialSearch( + search_backend=search_backend, + embedder=embedder, + entity_annotator=entity_annotator, + ) + + search_cfg = config["search"] + first_level_cfg = _first_level_search_config(search_cfg) + if first_level_cfg.get("enabled", True) and patient_profile is not None: + plan = cts.build_query_plan( + profile=patient_profile, + matching_summary=keywords, + config=first_level_cfg, + age=age, + sex=sex, + overall_status=overall_status, + ) + trials, scores, candidate_evidence = cts.search_trials_with_plan( + query_plan=plan, + age_input=age, + sex=sex, + overall_status=overall_status, + size=int(first_level_cfg.get("max_trials", 1000)), + per_channel_size=int(first_level_cfg.get("per_channel_size", 300)), + pre_selected_nct_ids=None, + vector_score_threshold=float( + first_level_cfg.get("vector_score_threshold", 0.0) + ), + search_mode=search_cfg.get("mode", "hybrid"), + rrf_k=int(first_level_cfg.get("rrf_k", 60)), + ) + main_conditions = _dedupe_strings( + [ + *main_conditions, + *plan.terms_for("primary_condition", "concept_synonym"), + ] + ) + other_conditions = _dedupe_strings( + [ + *other_conditions, + *plan.terms_for("biomarker", "therapy", "broader_disease"), + ] + ) + if first_level_cfg.get("write_reports", True): + write_json_file( + plan.model_dump(mode="json"), + f"{output_folder}/first_level_query_plan.json", + ) + write_json_file( + { + "candidates": [ + item.model_dump(mode="json") for item in candidate_evidence + ] + }, + f"{output_folder}/first_level_candidates.json", + ) + else: + # Single-query first-level retrieval path. This remains available for exact + # behavior preservation when search.first_level.enabled=false. + synonyms = cts.get_synonyms(condition.lower().strip()) + main_conditions.extend(synonyms[:5]) + + search_size = search_cfg.get("max_trials_first_level", 300) + trials, scores = cts.search_trials( + condition=condition, + age_input=age, + sex=sex, + overall_status=overall_status, + size=search_size, + pre_selected_nct_ids=None, + synonyms=main_conditions, + other_conditions=other_conditions, + vector_score_threshold=search_cfg["vector_score_threshold"], + search_mode=search_cfg.get("mode", "hybrid"), + ) + + # Optional geographic hard filter (country-level, site-aware, opt-in via + # search.first_level.hard_filters). Recall-safe: only drops trials whose + # known sites exclude the patient's country. + hard_filters = first_level_cfg.get("hard_filters") or ["age", "sex", "overall_status"] + if "location" in hard_filters and patient_profile is not None: + country = patient_country(patient_profile) + if country: + before = len(trials) + trials, scores = filter_trials_by_country(trials, scores, country) + logger.info( + "Location filter (country=%s): %d -> %d trials.", + country, + before, + len(trials), + ) + + nct_ids = [trial.get("nct_id") for trial in trials if trial.get("nct_id")] + first_level_scores = { + trial.get("nct_id"): score + for trial, score in zip(trials, scores) + if trial.get("nct_id") + } + + write_text_file([str(nid) for nid in nct_ids], f"{output_folder}/nct_ids.txt") + write_json_file(first_level_scores, f"{output_folder}/first_level_scores.json") + + logger.info(f"First-level search complete: {len(nct_ids)} trial IDs saved.") + return ( + nct_ids, + main_conditions, + other_conditions, + patient_narrative, + first_level_scores, + ) + + +def run_second_level_search( + output_folder: str, + nct_ids: List[str], + main_conditions: List[str], + other_conditions: List[str], + patient_narrative: List[str], + gemma_retriever: SecondStageRetriever, + first_level_scores: Dict, + config: Dict, + patient_context: Optional["PatientConstraintContext"] = None, +) -> Tuple: + queries = list(set(main_conditions + other_conditions + patient_narrative))[:10] + logger.info(f"Running second-level retrieval with {len(queries)} queries ...") + + # Add synonyms for second level + if queries: + synonyms = gemma_retriever.get_synonyms(queries[0]) + queries.extend(synonyms[:3]) + + top_n = min(len(nct_ids), config["search"].get("max_trials_second_level", 100)) + second_level_results = gemma_retriever.retrieve_and_rank( + queries, + nct_ids, + top_n=top_n, + patient_context=patient_context, + constraints_config=config.get("constraints", {}), + ) + + combined_scores = {} + for trial in second_level_results: + trial_id = trial["nct_id"] + second_score = trial["score"] + first_score = first_level_scores.get(trial_id, 0) + combined_scores[trial_id] = first_score + second_score + + sorted_trials = sorted(combined_scores.items(), key=lambda x: x[1], reverse=True) + num_top = max(1, min(len(sorted_trials) // 3, top_n)) + semi_final_trials = sorted_trials[:num_top] + + top_trials_path = f"{output_folder}/top_trials.txt" + write_text_file([trial_id for trial_id, _ in semi_final_trials], top_trials_path) + constraints_config = config.get("constraints", {}) + if constraints_config.get("enabled", True) and constraints_config.get( + "write_reports", + True, + ): + write_constraint_reports( + output_folder=output_folder, + evaluations=gemma_retriever.last_constraint_evaluations, + top_trials=[ + {"nct_id": trial_id, "score": score} + for trial_id, score in semi_final_trials + ], + ) + + logger.info("Second-level retrieval and ranking complete. Top trials saved.") + return semi_final_trials, top_trials_path + + +def _criteria_source_folders(config: Dict) -> list[str]: + """Folders to read each trial's criteria text from, in priority order. + + Both carry the ``eligibility_criteria`` text but cover different provenance, + so trying both makes every trial resolve regardless of how it was added: + * ``processed_trials`` — written by ``build``/``bootstrap-data``. + * ``trials_jsons`` — written by ``build`` and the registry updater. + Sourcing from only one would make the eligibility model silently reason over + "no criteria" (and score 0) for the trials that folder is missing. + """ + paths = config.get("paths", {}) + candidates = [ + paths.get("processed_trials_folder") or "data/processed_trials", + paths.get("trials_json_folder", "data/trials_jsons"), + ] + folders = [str(c) for c in candidates if Path(c).is_dir()] + return folders or [str(candidates[-1])] + + +def run_rag_processing( + output_folder: str, + top_trials_file: str, + patient_info: Dict, + config: Dict, +): + top_trials = read_text_file(top_trials_file) + if not top_trials: + logger.error("No top trials available for RAG processing.") + return + + top_trials = top_trials[: config["rag"].get("max_trials_rag", 20)] + patient_narrative = patient_info.get("patient_narrative", []) + if not patient_narrative: + logger.error("No patient narrative available for RAG processing.") + return + + rag_cfg = config.get("rag", {}) + rag_backend = str(rag_cfg.get("backend", "vllm")) + if rag_backend == "transformers": + from trialmatchai.matching.eligibility_reasoning_transformers import ( + BatchTrialProcessorTransformers, + ) + + vllm_cfg = config.get("vllm", {}) + rag_processor = BatchTrialProcessorTransformers( + model_path=config["model"]["base_model"], + device=str(config.get("global", {}).get("device", "cpu")), + batch_size=rag_cfg.get("batch_size", 1), + use_cot=config.get("use_cot_reasoning", False), + max_new_tokens=vllm_cfg.get("max_new_tokens", 256), + temperature=vllm_cfg.get("temperature", 0.0), + top_p=vllm_cfg.get("top_p", 1.0), + revision=config["model"].get("base_model_revision"), + trust_remote_code=config["model"].get("trust_remote_code", False), + length_bucket=vllm_cfg.get("length_bucket", True), + no_think=rag_cfg.get("no_think", False), + ) + elif rag_backend == "vllm": + from trialmatchai.matching.eligibility_reasoning_vllm import ( + BatchTrialProcessorVLLM, + ) + from trialmatchai.models.llm.vllm_loader import load_vllm_engine + + vllm_cfg = config.get("vllm", {}) + vllm_engine, vllm_tokenizer, lora_request = load_vllm_engine( + model_config=config.get("model", {}), + vllm_cfg=vllm_cfg, + ) + rag_processor = BatchTrialProcessorVLLM( + llm=vllm_engine, # type: ignore + tokenizer=vllm_tokenizer, + batch_size=vllm_cfg.get("batch_size", 16), + use_cot=config.get("use_cot_reasoning", True), + max_new_tokens=vllm_cfg.get("max_new_tokens", 5000), + temperature=vllm_cfg.get("temperature", 0.0), + top_p=vllm_cfg.get("top_p", 1.0), + seed=vllm_cfg.get("seed", 1234), + length_bucket=vllm_cfg.get("length_bucket", True), + lora_request=lora_request, + ) + else: + raise ValueError(f"Unsupported rag.backend: {rag_backend}") + + rag_processor.process_trials( + nct_ids=top_trials, + json_folder=_criteria_source_folders(config), + output_folder=output_folder, + patient_narrative=patient_narrative, + ) + write_json_file({"status": "done"}, f"{output_folder}/rag_output.json") + logger.info("RAG-based trial matching complete.") + + +def main_pipeline( + config_path: str | None = None, + *, + config: Dict | None = None, + resume: bool = False, +) -> int: + logger.info("Starting TrialMatchAI pipeline...") + if config is None: + config = load_config(config_path) + paths = config["paths"] + create_directory(paths["output_dir"]) + + search_backend = LanceDBSearchBackend.from_config(config) + preflight_issues = run_preflight_checks( + config, + require_patient_inputs=True, + require_trials_json=True, + require_models=True, + require_search_tables=False, + ) + if preflight_issues: + return 1 + + index_issues = run_preflight_checks( + config, + search_backend=search_backend, + require_search_tables=True, + ) + if index_issues: + logger.error( + "The search system is not built. Run `trialmatchai build` to prepare " + "the corpus and build the index, then retry matching." + ) + return 1 + + patient_inputs = _load_patient_inputs(config) + if not patient_inputs: + logger.error("No patient profiles were available for matching.") + return 1 + + try: + import torch + except ImportError: + torch = None # type: ignore + + from trialmatchai.models.embedding import build_embedder + if torch is not None and torch.cuda.is_available(): + torch.backends.cudnn.benchmark = True + if hasattr(torch.backends.cuda, "enable_flash_sdp"): + torch.backends.cuda.enable_flash_sdp(True) + + import warnings + + # The eligibility reasoning model is loaded lazily by run_rag_processing + # after the top-trial shortlist is known. + + # Initialize components + embedder = build_embedder(config) + entity_annotator = build_entity_annotator(config, embedder=embedder) + + with warnings.catch_warnings(): + warnings.filterwarnings( + "ignore", message=".*quantization_config.*", category=UserWarning + ) + if _reranker_enabled(config): + if _reranker_backend(config) == "transformers": + from trialmatchai.models.llm.transformers_reranker import ( + TransformersReranker, + ) + + llm_reranker = TransformersReranker( + model_path=config["model"]["reranker_model_path"], + device=str(config["global"]["device"]), + batch_size=config.get("LLM_reranker", {}).get("batch_size", 8), + revision=config["model"].get("reranker_model_revision"), + trust_remote_code=config["model"].get("trust_remote_code", False), + ) + elif _reranker_backend(config) == "vllm": + from trialmatchai.models.llm.llm_reranker import LLMReranker + + llm_reranker = LLMReranker( + model_path=config["model"]["reranker_model_path"], + adapter_path=config["model"]["reranker_adapter_path"], + device=config["global"]["device"], + batch_size=config["rag"]["batch_size"] * 2, + revision=config["model"].get("reranker_model_revision"), + trust_remote_code=config["model"].get("trust_remote_code", False), + ) + else: + raise ValueError( + f"Unsupported LLM_reranker.backend: {_reranker_backend(config)}" + ) + else: + llm_reranker = None + + gemma_retriever = SecondStageRetriever( + search_backend=search_backend, + llm_reranker=llm_reranker, + embedder=embedder, + entity_annotator=entity_annotator, + search_mode=config["search"].get("mode", "hybrid"), + ) + + completed_patients = 0 + failed_patients = 0 + + skipped_patients = 0 + for profile, summary in patient_inputs: + patient_id = profile.patient_id + output_folder = Path(paths["output_dir"]) / patient_id + if resume: + ranked_path = output_folder / "ranked_trials.json" + # Parseable (not just non-empty) so a truncated/partial marker is + # treated as incomplete and re-run, while an empty-but-valid result + # is correctly recognized as completed. + if is_valid_json_file(str(ranked_path)): + logger.info("Resume: skipping already-matched patient %s", patient_id) + skipped_patients += 1 + continue + token = set_request_id(patient_id) + create_directory(str(output_folder)) + + try: + write_json_file(summary, str(output_folder / "keywords.json")) + write_json_file( + profile.model_dump(mode="json", exclude_none=True), + str(output_folder / "patient_profile.json"), + ) + keywords = Keywords.model_validate(summary).model_dump() + patient_info = dict(summary) + patient_info["patient_narrative"] = summary.get("patient_narrative", []) + patient_context = build_patient_constraint_context(profile) + + # Run pipeline + with log_timing(logger, "First-level search"): + with _inference_context(torch): + result = run_first_level_search( + keywords, + str(output_folder), + patient_info, + entity_annotator, + embedder, + config, + search_backend, + patient_profile=profile, + ) + if not result: + logger.error("First-level search failed for %s", patient_id) + continue + + ( + nct_ids, + main_conditions, + other_conditions, + patient_narrative, + first_level_scores, + ) = result + + with log_timing(logger, "Second-level search"): + with _inference_context(torch): + semi_final_trials, top_trials_path = run_second_level_search( + str(output_folder), + nct_ids, + main_conditions, + other_conditions, + patient_narrative, + gemma_retriever, + first_level_scores, + config, + patient_context, + ) + + if _rag_enabled(config): + with log_timing(logger, "RAG processing"): + with _inference_context(torch): + run_rag_processing( + str(output_folder), + top_trials_path, + patient_info, + config, + ) + + with log_timing(logger, "Final ranking"): + # Scope to this run's shortlist so stale per-trial files from a + # prior run with a different shortlist are not ranked. + second_level = dict(semi_final_trials) + trial_data = load_trial_data( + str(output_folder), allowed_ids=set(second_level) + ) + ranked_trials = rank_trials( + trial_data, + first_level_scores=first_level_scores, + second_level_scores=second_level, + ) + save_ranked_trials( + ranked_trials, str(output_folder / "ranked_trials.json") + ) + else: + logger.info("RAG processing disabled; ranking by retrieval scores.") + save_ranked_trials( + [ + {"TrialID": trial_id, "Score": score} + for trial_id, score in semi_final_trials + ], + str(output_folder / "ranked_trials.json"), + ) + + logger.info("Pipeline completed for patient %s", patient_id) + completed_patients += 1 + except Exception: + logger.exception("Pipeline failed for patient %s", patient_id) + failed_patients += 1 + continue + finally: + reset_request_id(token) + + if completed_patients == 0 and skipped_patients == 0: + logger.error("Pipeline failed for all %s patient(s).", len(patient_inputs)) + return 1 + if completed_patients == 0 and skipped_patients: + logger.info( + "Resume: all %s patient(s) already matched; nothing to do.", + skipped_patients, + ) + if failed_patients: + logger.warning("Pipeline completed with %s patient failure(s).", failed_patients) + return 0 + + +def _load_patient_inputs(config: Dict) -> list[tuple[PatientProfile, Dict]]: + patient_cfg = config.get("patient_inputs", {}) + profile_dir = Path(patient_cfg.get("profile_dir", "data/patients/profiles")) + summary_dir = Path(patient_cfg.get("summary_dir", "data/patients/summaries")) + profile_files = sorted(profile_dir.glob("*.json")) if profile_dir.exists() else [] + if not profile_files: + logger.error( + "No canonical patient profiles found in %s. Run " + "`trialmatchai import-patient` first.", + profile_dir, + ) + return [] + + loaded: list[tuple[PatientProfile, Dict]] = [] + for profile_file in profile_files: + try: + profile = PatientProfile.model_validate(read_json_file(str(profile_file))) + summary_path = summary_dir / profile_file.name + if summary_path.exists(): + summary = read_json_file(str(summary_path)) + else: + summary = profile_to_matching_summary(profile) + loaded.append((profile, summary)) + except Exception: + logger.exception("Failed to load patient profile: %s", profile_file) + return loaded + + +def _first_level_search_config(search_cfg: Dict) -> Dict: + first_level_cfg = dict(search_cfg.get("first_level") or {}) + first_level_cfg.setdefault( + "max_trials", + search_cfg.get("max_trials_first_level", 1000), + ) + first_level_cfg.setdefault("per_channel_size", 300) + first_level_cfg.setdefault("rrf_k", 60) + first_level_cfg.setdefault("vector_score_threshold", 0.0) + first_level_cfg.setdefault("enabled", True) + first_level_cfg.setdefault("write_reports", True) + first_level_cfg.setdefault("llm_expansion_enabled", False) + first_level_cfg.setdefault("llm_max_terms", 12) + first_level_cfg.setdefault("hard_filters", ["age", "sex", "overall_status"]) + return first_level_cfg + + +def _dedupe_strings(values: list[str]) -> list[str]: + seen: set[str] = set() + output: list[str] = [] + for value in values: + cleaned = str(value or "").strip() + if not cleaned: + continue + key = cleaned.casefold() + if key in seen: + continue + seen.add(key) + output.append(cleaned) + return output + + +def _reranker_enabled(config: Dict) -> bool: + return bool(config.get("LLM_reranker", {}).get("enabled", True)) + + +def _reranker_backend(config: Dict) -> str: + return str(config.get("LLM_reranker", {}).get("backend", "vllm")) + + +def _rag_enabled(config: Dict) -> bool: + if not bool(config.get("use_cot_reasoning", True)): + return False + return bool(config.get("rag", {}).get("enabled", True)) + + +def _inference_context(torch_module): + if torch_module is None: + return nullcontext() + return torch_module.no_grad() + + +if __name__ == "__main__": + raise SystemExit(main_pipeline()) diff --git a/source/Matcher/config/__init__.py b/src/trialmatchai/matching/__init__.py similarity index 100% rename from source/Matcher/config/__init__.py rename to src/trialmatchai/matching/__init__.py diff --git a/src/trialmatchai/matching/eligibility_base.py b/src/trialmatchai/matching/eligibility_base.py new file mode 100644 index 00000000..f9549173 --- /dev/null +++ b/src/trialmatchai/matching/eligibility_base.py @@ -0,0 +1,278 @@ +"""Shared base for the CoT eligibility processors (HF and vLLM backends). + +Holds the prompt, trial I/O, output persistence, and the worklist/bucketing +orchestration. Backends subclass this and implement only ``_process_batch`` (and +optionally override ``_token_length`` / ``_progress_desc``). +""" + +from __future__ import annotations + +import json +import os +import re +from typing import Dict, List + +from trialmatchai.utils.file_utils import read_json_file, write_json_file, write_text_file +from trialmatchai.utils.json_utils import extract_json_object +from trialmatchai.utils.logging_config import setup_logging +from tqdm import tqdm + +logger = setup_logging(__name__) + + +def _is_error_output(path: str) -> bool: + """True if a per-trial output is a recorded processing failure or unparseable. + + Used by the resume worklist so a transiently-failed trial (written as + ``{"error": ...}``) is retried on the next run instead of being treated as + done and locked into the ranking. + """ + try: + with open(path, "r", encoding="utf-8") as handle: + data = json.load(handle) + except Exception: + return True + return isinstance(data, dict) and "error" in data + + +class BaseTrialProcessor: + # Subclasses set these in __init__. + tokenizer = None + batch_size: int = 4 + use_cot: bool = True + no_think: bool = False + + # ---------------------- I/O helpers ---------------------- + + def _load_trial_data(self, nct_id: str, json_folder) -> str: + # json_folder may be a single folder or an ordered list of fallbacks + # (processed_trials, then trials_jsons) so built, bootstrapped, and + # newly-updated trials all resolve. + folders = [json_folder] if isinstance(json_folder, str) else list(json_folder) + for folder in folders: + try: + trial_data = read_json_file(f"{folder}/{nct_id}.json") + except Exception: + continue + criteria = trial_data.get("eligibility_criteria", "") + if criteria: + return criteria + # Fail loud: no source had criteria text, so the model would otherwise + # silently reason over "no criteria" and score this trial 0. + logger.error("No eligibility criteria found for %s in %s", nct_id, folders) + return "" + + # ---------------------- Prompting ---------------------- + + def _format_prompt(self, criteria_text: str, patient_profile: str) -> str: + criteria_text_formatted = ( + f"Eligibility Criteria:\n{criteria_text}" + if criteria_text + else "No eligibility criteria provided." + ) + + no_think_prefix = "/no_think\n" if self.no_think else "" + + if self.use_cot: + system_msg = ( + "You are a medical expert with advanced knowledge in clinical reasoning, diagnostics, and treatment planning. " + "Answer the following question. Before answering, create a concise chain of thoughts reasoning to ensure a logical and accurate response.\n" + ) + chat = [ + {"role": "system", "content": system_msg}, + { + "role": "user", + "content": ( + no_think_prefix + + "Assess the given patient's eligibility for a clinical trial by evaluating each and every criterion individually.\n\n" + "### INCLUSION CRITERIA ASSESSMENT\n" + "For each inclusion criterion, classify it as one of:\n" + "- **Met:** The patient's data explicitly and unequivocally satisfies the criterion.\n" + "- **Not Met:** The patient's data explicitly and unequivocally contradicts or fails to satisfy the criterion.\n" + "- **Unclear:** Insufficient or missing patient data to verify.\n" + "- **Irrelevant:** The criterion does not apply to the patient's context.\n\n" + "### EXCLUSION CRITERIA ASSESSMENT\n" + "For each exclusion criterion, classify it as one of:\n" + "- **Violated:** The patient's data explicitly and unequivocally violates the criterion.\n" + "- **Not Violated:** The patient's data confirms compliance with the criterion.\n" + "- **Unclear:** Insufficient or missing patient data to verify.\n" + "- **Irrelevant:** The criterion does not apply to the patient's context.\n\n" + "### IMPORTANT INSTRUCTIONS\n" + "- Ensure all criteria are assessed one-by-one.\n" + "- Use **only** the provided patient data; **do not infer, assume, or extrapolate beyond the given information.**\n" + "- Justifications must be strictly based on direct evidence from the patient profile.\n" + "### RESPONSE FORMAT (STRICTLY FOLLOW)\n" + "{\n" + ' "Inclusion_Criteria_Evaluation": [\n' + ' {"Criterion": "Exact inclusion criterion text", "Classification": "Met | Not Met | Unclear | Irrelevant", "Justification": "Clear, evidence-based rationale using ONLY provided data"}\n' + " ],\n" + ' "Exclusion_Criteria_Evaluation": [\n' + ' {"Criterion": "Exact exclusion criterion text", "Classification": "Violated | Not Violated | Unclear | Irrelevant", "Justification": "Clear, evidence-based rationale using ONLY provided data"}\n' + " ],\n" + ' "Recap": "Concise summary of key qualifying/disqualifying factors",\n' + ' "Final Decision": "Eligible | Likely Eligible (leaning toward inclusion) | Likely Ineligible (leaning toward exclusion) | Ineligible"\n' + "}\n\n" + "### INPUT\n" + "---Start of Clinical Trial Criteria---\n" + f"{criteria_text_formatted}\n" + "---End of Clinical Trial Criteria---\n\n" + "----\n" + "---Start of Patient Description---\n" + f"{patient_profile}\n" + "---End of Patient Description---\n" + "## IMPORTANT REMINDER:\n" + "NEVER make assumptions, inferences, or extrapolations beyond the explicitly stated patient information." + ), + }, + ] + else: + chat = [ + { + "role": "system", + "content": ( + "You are a clinical assistant tasked with assessing the eligibility of a patient for a clinical trial. " + "Output only a JSON object evaluating trial eligibility for the patient based only on the provided criteria and patient profile.\n" + ), + }, + { + "role": "user", + "content": ( + no_think_prefix + + "For each criterion, classify:\n" + '- If Inclusion Criterion: "Met" | "Not Met" | "Unclear" | "Irrelevant"\n' + '- If Exclusion Criterion: "Violated" | "Not Violated" | "Unclear" | "Irrelevant"\n\n' + "Provide a justification for each classification based strictly on the provided data. " + "Output this JSON schema:\n" + "{\n" + ' "Inclusion_Criteria_Evaluation": [ {"Criterion": "...", "Classification": "...", "Justification": "..."} ],\n' + ' "Exclusion_Criteria_Evaluation": [ {"Criterion": "...", "Classification": "...", "Justification": "..."} ],\n' + ' "Final Decision": "Eligible | Likely Eligible | Likely Ineligible | Ineligible"\n' + "}\n\n" + "---Start of Clinical Trial Criteria---\n" + f"{criteria_text_formatted}\n" + "---End of Clinical Trial Criteria---\n\n" + "---Start of Patient Description---\n" + f"{patient_profile}\n" + "---End of Patient Description---\n" + ), + }, + ] + + if self.tokenizer is not None and hasattr(self.tokenizer, "apply_chat_template"): + # Pass enable_thinking=False for reasoning models (e.g. Qwen3) when + # no_think is set. The kwarg is silently accepted or raises TypeError on + # models whose chat templates don't declare the variable — fall through. + template_kwargs: dict = {} + if self.no_think: + template_kwargs["enable_thinking"] = False + try: + return self.tokenizer.apply_chat_template( + chat, tokenize=False, add_generation_prompt=True, **template_kwargs + ) + except (TypeError, ValueError) as exc: + logger.warning( + "Tokenizer chat template unavailable; using plain prompt: %s", + exc, + ) + # Fallback: simple concatenation + system_part = f"{chat[0]['content']}\n\n" + user_part = f"{chat[1]['content']}\n\n" + return system_part + user_part + "Answer: " + + # ---------------------- Persistence ---------------------- + + @staticmethod + def _strip_thinking_tags(text: str) -> str: + """Remove blocks emitted by reasoning models (e.g. Qwen3). + + The full response (with thinking) is still written to the .txt file so the + reasoning chain is not lost; only JSON extraction operates on the stripped text. + """ + text = re.sub(r".*?", "", text, flags=re.DOTALL) + # Trim incomplete block if the model was cut off mid-think + cut = text.find("") + if cut != -1: + text = text[:cut] + return text.strip() + + def _save_outputs(self, nct_id: str, response: str, output_folder: str): + try: + os.makedirs(output_folder, exist_ok=True) + txt_path = f"{output_folder}/{nct_id}.txt" + write_text_file([response], txt_path) + try: + json_data = extract_json_object(self._strip_thinking_tags(response)) + write_json_file(json_data, f"{output_folder}/{nct_id}.json") + logger.info(f"Processed {nct_id} successfully") + except (json.JSONDecodeError, ValueError) as e: + logger.error(f"Invalid JSON response for {nct_id}: {str(e)}") + write_json_file( + {"error": "invalid_json_response", "raw_output": response}, + f"{output_folder}/{nct_id}.json", + ) + except Exception as e: + logger.error(f"Failed to save {nct_id}: {str(e)}") + + # ---------------------- Hooks for subclasses ---------------------- + + def _token_length(self, prompt: str, nct_id: str = "") -> int: + """Token count used for length bucketing; char-based fallback on error.""" + try: + kwargs = {"add_special_tokens": False} + max_input_tokens = getattr(self, "max_input_tokens", None) + if isinstance(max_input_tokens, int) and max_input_tokens > 0: + kwargs.update(truncation=True, max_length=max_input_tokens) + return len(self.tokenizer(prompt, **kwargs)["input_ids"]) + except Exception: + return max(1, len(prompt) // 4) + + def _progress_desc(self) -> str: + return "Processing Trials" + + def _process_batch(self, batch: List[Dict], output_folder: str): # pragma: no cover + raise NotImplementedError + + # ---------------------- Public API ---------------------- + + def process_trials( + self, + nct_ids: List[str], + json_folder: str, + output_folder: str, + patient_narrative: List[str], + ): + """Build a worklist (skipping already-processed trials), length-bucket to + minimize padding, then process in batches.""" + patient_text = " ".join( + str(line).strip() for line in patient_narrative if str(line).strip() + ) + + items: List[Dict] = [] + for nct_id in nct_ids: + existing = f"{output_folder}/{nct_id}.json" + # Skip only genuinely-completed trials; a recorded processing failure + # ({"error": ...}) or an unparseable file is retried, not locked in. + if os.path.exists(existing) and not _is_error_output(existing): + logger.info(f"Skipping existing: {nct_id}") + continue + criteria_text = self._load_trial_data(nct_id, json_folder) + prompt = self._format_prompt(criteria_text, patient_text) + items.append( + { + "nct_id": nct_id, + "prompt": prompt, + "tok_len": self._token_length(prompt, nct_id), + } + ) + + if not items: + logger.info("No work to do.") + return + + if getattr(self, "length_bucket", True): + items.sort(key=lambda x: x["tok_len"]) + + for i in tqdm( + range(0, len(items), self.batch_size), desc=self._progress_desc() + ): + self._process_batch(items[i : i + self.batch_size], output_folder) diff --git a/src/trialmatchai/matching/eligibility_reasoning_transformers.py b/src/trialmatchai/matching/eligibility_reasoning_transformers.py new file mode 100644 index 00000000..d79d6a79 --- /dev/null +++ b/src/trialmatchai/matching/eligibility_reasoning_transformers.py @@ -0,0 +1,123 @@ +from __future__ import annotations + +from typing import Any, Dict, List, Optional + +from trialmatchai.matching.eligibility_base import BaseTrialProcessor +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +class BatchTrialProcessorTransformers(BaseTrialProcessor): + """CPU-capable Transformers eligibility processor for smoke/small runs.""" + + def __init__( + self, + model_path: str, + *, + device: str = "cpu", + batch_size: int = 1, + use_cot: bool = False, + max_new_tokens: int = 256, + temperature: float = 0.0, + top_p: float = 1.0, + revision: Optional[str] = None, + trust_remote_code: bool = False, + length_bucket: bool = True, + no_think: bool = False, + ): + try: + import torch + from transformers import AutoModelForCausalLM, AutoTokenizer + except ImportError as exc: # pragma: no cover - optional dependency guard + raise RuntimeError( + "Transformers eligibility processing requires the llm extra " + "(`uv sync --extra llm`)." + ) from exc + + self.torch = torch + self.device = torch.device(device if device != "auto" else "cpu") + self.tokenizer = AutoTokenizer.from_pretrained( + model_path, + revision=revision, + trust_remote_code=trust_remote_code, + ) + if self.tokenizer.pad_token is None: + self.tokenizer.pad_token = self.tokenizer.eos_token + self.tokenizer.padding_side = "left" + self.tokenizer.truncation_side = "left" + self.model = AutoModelForCausalLM.from_pretrained( + model_path, + revision=revision, + trust_remote_code=trust_remote_code, + ).to(self.device) + self.model.eval() + self.batch_size = batch_size + self.use_cot = use_cot + self.max_new_tokens = max_new_tokens + self.temperature = temperature + self.top_p = top_p + self.length_bucket = length_bucket + self.no_think = no_think + self.max_input_tokens = _max_input_tokens( + self.tokenizer, + self.model, + self.max_new_tokens, + ) + logger.info( + "Loaded Transformers eligibility model %s on %s.", + model_path, + self.device, + ) + + def _progress_desc(self) -> str: + return "CPU Transformers Processing Trials" + + def _process_batch(self, batch: List[Dict[str, Any]], output_folder: str): + prompts = [item["prompt"] for item in batch] + encoded = self.tokenizer( + prompts, + padding=True, + truncation=True, + max_length=self.max_input_tokens, + return_tensors="pt", + ).to(self.device) + generation_kwargs: dict[str, Any] = { + "max_new_tokens": self.max_new_tokens, + "pad_token_id": self.tokenizer.pad_token_id, + } + if self.temperature > 0: + generation_kwargs.update( + do_sample=True, + temperature=self.temperature, + top_p=self.top_p, + ) + else: + generation_kwargs["do_sample"] = False + + with self.torch.inference_mode(): + output_ids = self.model.generate(**encoded, **generation_kwargs) + + prompt_width = encoded["input_ids"].shape[1] + for item, sequence in zip(batch, output_ids): + completion_ids = sequence[prompt_width:] + response = self.tokenizer.decode( + completion_ids, + skip_special_tokens=True, + ).strip() + self._save_outputs(item["nct_id"], response, output_folder) + + +def _max_input_tokens(tokenizer: Any, model: Any, max_new_tokens: int) -> int: + candidates: list[int] = [] + config = getattr(model, "config", None) + for attr in ("max_position_embeddings", "n_positions", "n_ctx"): + value = getattr(config, attr, None) + if isinstance(value, int) and 0 < value < 1_000_000: + candidates.append(value) + tokenizer_limit = getattr(tokenizer, "model_max_length", None) + if isinstance(tokenizer_limit, int) and 0 < tokenizer_limit < 1_000_000: + candidates.append(tokenizer_limit) + + context_window = min(candidates) if candidates else 2048 + return max(1, context_window - max(0, int(max_new_tokens))) diff --git a/source/Matcher/pipeline/cot_reasoning_vllm.py b/src/trialmatchai/matching/eligibility_reasoning_vllm.py similarity index 53% rename from source/Matcher/pipeline/cot_reasoning_vllm.py rename to src/trialmatchai/matching/eligibility_reasoning_vllm.py index f2d0dec8..9b3d1671 100644 --- a/source/Matcher/pipeline/cot_reasoning_vllm.py +++ b/src/trialmatchai/matching/eligibility_reasoning_vllm.py @@ -1,29 +1,18 @@ from __future__ import annotations -import json -import os import time -from typing import Dict, List, Optional +from typing import Any, Dict, List, Optional -from Matcher.utils.file_utils import read_json_file, write_json_file, write_text_file -from Matcher.utils.logging_config import setup_logging -from tqdm import tqdm - -from vllm import LLM, SamplingParams - -try: - # Present in vLLM when LoRA is enabled - from vllm.lora.request import LoRARequest # type: ignore -except Exception: # pragma: no cover - LoRARequest = None # type: ignore +from trialmatchai.matching.eligibility_base import BaseTrialProcessor +from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) -class BatchTrialProcessorVLLM: +class BatchTrialProcessorVLLM(BaseTrialProcessor): def __init__( self, - llm: LLM, + llm: Any, tokenizer=None, batch_size: int = 16, use_cot: bool = True, @@ -32,7 +21,7 @@ def __init__( top_p: float = 1.0, seed: Optional[int] = 1234, length_bucket: bool = True, - lora_request: Optional[LoRARequest] = None, # type: ignore + lora_request: Optional[Any] = None, ): """ vLLM-backed trial processor for CoT eligibility evaluation. @@ -53,6 +42,8 @@ def __init__( # Validate LoRA request during initialization self.lora_request = self._init_validate_lora_request(lora_request) + from vllm import SamplingParams # type: ignore + self.sampling_params = SamplingParams( max_tokens=self.max_new_tokens, temperature=self.temperature, @@ -61,6 +52,9 @@ def __init__( detokenize=True, ) + def _progress_desc(self) -> str: + return "vLLM Processing Trials" + def _init_validate_lora_request(self, lora_request): """Validate LoRA request during initialization.""" if lora_request is None: @@ -97,121 +91,6 @@ def _init_validate_lora_request(self, lora_request): logger.warning("Disabling LoRA due to validation error") return None - # ---------------------- I/O helpers ---------------------- - - def _load_trial_data(self, nct_id: str, json_folder: str) -> str: - try: - path = f"{json_folder}/{nct_id}.json" - trial_data = read_json_file(path) - return trial_data.get("eligibility_criteria", "") - except Exception as e: - logger.error(f"Error loading {nct_id}: {str(e)}") - return "" - - # ---------------------- Prompting ---------------------- - - def _format_prompt(self, criteria_text: str, patient_profile: str) -> str: - criteria_text_formatted = ( - f"Eligibility Criteria:\n{criteria_text}" - if criteria_text - else "No eligibility criteria provided." - ) - - if self.use_cot: - system_msg = ( - "You are a medical expert with advanced knowledge in clinical reasoning, diagnostics, and treatment planning. " - "Answer the following question. Before answering, create a concise chain of thoughts reasoning to ensure a logical and accurate response.\n" - ) - chat = [ - {"role": "system", "content": system_msg}, - { - "role": "user", - "content": ( - "Assess the given patient's eligibility for a clinical trial by evaluating each and every criterion individually.\n\n" - "### INCLUSION CRITERIA ASSESSMENT\n" - "For each inclusion criterion, classify it as one of:\n" - "- **Met:** The patient's data explicitly and unequivocally satisfies the criterion.\n" - "- **Not Met:** The patient's data explicitly and unequivocally contradicts or fails to satisfy the criterion.\n" - "- **Unclear:** Insufficient or missing patient data to verify.\n" - "- **Irrelevant:** The criterion does not apply to the patient's context.\n\n" - "### EXCLUSION CRITERIA ASSESSMENT\n" - "For each exclusion criterion, classify it as one of:\n" - "- **Violated:** The patient's data explicitly and unequivocally violates the criterion.\n" - "- **Not Violated:** The patient's data confirms compliance with the criterion.\n" - "- **Unclear:** Insufficient or missing patient data to verify.\n" - "- **Irrelevant:** The criterion does not apply to the patient's context.\n\n" - "### IMPORTANT INSTRUCTIONS\n" - "- Ensure all criteria are assessed one-by-one.\n" - "- Use **only** the provided patient data; **do not infer, assume, or extrapolate beyond the given information.**\n" - "- Justifications must be strictly based on direct evidence from the patient profile.\n" - "### RESPONSE FORMAT (STRICTLY FOLLOW)\n" - "{\n" - ' "Inclusion_Criteria_Evaluation": [\n' - ' {"Criterion": "Exact inclusion criterion text", "Classification": "Met | Not Met | Unclear | Irrelevant", "Justification": "Clear, evidence-based rationale using ONLY provided data"}\n' - " ],\n" - ' "Exclusion_Criteria_Evaluation": [\n' - ' {"Criterion": "Exact exclusion criterion text", "Classification": "Violated | Not Violated | Unclear | Irrelevant", "Justification": "Clear, evidence-based rationale using ONLY provided data"}\n' - " ],\n" - ' "Recap": "Concise summary of key qualifying/disqualifying factors",\n' - ' "Final Decision": "Eligible | Likely Eligible (leaning toward inclusion) | Likely Ineligible (leaning toward exclusion) | Ineligible"\n' - "}\n\n" - "### INPUT\n" - "---Start of Clinical Trial Criteria---\n" - f"{criteria_text_formatted}\n" - "---End of Clinical Trial Criteria---\n\n" - "----\n" - "---Start of Patient Description---\n" - f"{patient_profile}\n" - "Written informed consent has been obtained from the patient or their legal representative.\n" - "---End of Patient Description---\n" - "## IMPORTANT REMINDER:\n" - "NEVER make assumptions, inferences, or extrapolations beyond the explicitly stated patient information." - ), - }, - ] - else: - chat = [ - { - "role": "system", - "content": ( - "You are a clinical assistant tasked with assessing the eligibility of a patient for a clinical trial. " - "Output only a JSON object evaluating trial eligibility for the patient based only on the provided criteria and patient profile.\n" - ), - }, - { - "role": "user", - "content": ( - "For each criterion, classify:\n" - '- If Inclusion Criterion: "Met" | "Not Met" | "Unclear" | "Irrelevant"\n' - '- If Exclusion Criterion: "Violated" | "Not Violated" | "Unclear" | "Irrelevant"\n\n' - "Provide a justification for each classification based strictly on the provided data. " - "Output this JSON schema:\n" - "{\n" - ' "Inclusion_Criteria_Evaluation": [ {"Criterion": "...", "Classification": "...", "Justification": "..."} ],\n' - ' "Exclusion_Criteria_Evaluation": [ {"Criterion": "...", "Classification": "...", "Justification": "..."} ],\n' - ' "Final Decision": "Eligible | Likely Eligible | Likely Ineligible | Ineligible"\n' - "}\n\n" - "---Start of Clinical Trial Criteria---\n" - f"{criteria_text_formatted}\n" - "---End of Clinical Trial Criteria---\n\n" - "---Start of Patient Description---\n" - f"{patient_profile}\n" - "---End of Patient Description---\n" - ), - }, - ] - - if self.tokenizer is not None and hasattr( - self.tokenizer, "apply_chat_template" - ): - return self.tokenizer.apply_chat_template( - chat, tokenize=False, add_generation_prompt=True - ) - - system_part = f"{chat[0]['content']}\n\n" - user_part = f"{chat[1]['content']}\n\n" - return system_part + user_part + "Answer: " - # ---------------------- Core batch path (vLLM) ---------------------- def _process_batch(self, batch: List[Dict], output_folder: str): @@ -391,84 +270,10 @@ def _validate_lora_request(self): logger.warning("Disabling LoRA due to validation error") return None - # ---------------------- Persistence ---------------------- + # ---------------------- Token-length bucketing (vLLM tokenizer aware) ---- - def _save_outputs(self, nct_id: str, response: str, output_folder: str): - try: - os.makedirs(output_folder, exist_ok=True) - txt_path = f"{output_folder}/{nct_id}.txt" - write_text_file([response], txt_path) - try: - start = response.find("{") - end = response.rfind("}") - if start != -1 and end != -1 and end > start: - json_str = response[start : end + 1] - json_data = json.loads(json_str) - write_json_file(json_data, f"{output_folder}/{nct_id}.json") - logger.info(f"Processed {nct_id} successfully") - else: - logger.error(f"Invalid JSON boundaries for {nct_id}") - except json.JSONDecodeError as e: - logger.error(f"Invalid JSON response for {nct_id}: {str(e)}") - except Exception as e: - logger.error(f"Failed to save {nct_id}: {str(e)}") - - # ---------------------- Public API ---------------------- - - def process_trials( - self, - nct_ids: List[str], - json_folder: str, - output_folder: str, - patient_profile: List[str], - ): - patient_text = " ".join( - str(line).strip() for line in patient_profile if str(line).strip() - ) - - items: List[Dict] = [] - for nct_id in nct_ids: - output_path = f"{output_folder}/{nct_id}.json" - if os.path.exists(output_path): - logger.info(f"Skipping existing: {nct_id}") - continue - - criteria_text = self._load_trial_data(nct_id, json_folder) - prompt = self._format_prompt(criteria_text, patient_text) - - # Calculate token length with comprehensive type safety - tok_len = self._safe_calculate_token_length(prompt, nct_id) - - items.append({"nct_id": nct_id, "prompt": prompt, "tok_len": tok_len}) - - if not items: - logger.info("No work to do.") - return - - # Validate all tok_len values before sorting - self._validate_token_lengths(items) - - # Sort by token length if length_bucket is enabled - if self.length_bucket: - try: - items.sort(key=lambda x: x["tok_len"]) - logger.debug(f"Successfully sorted {len(items)} items by token length") - except Exception as e: - logger.error(f"Failed to sort items by token length: {str(e)}") - # Log the problematic items for debugging - for i, item in enumerate(items): - logger.error( - f"Item {i}: nct_id={item['nct_id']}, tok_len={item['tok_len']}, type={type(item['tok_len'])}" - ) - # Disable length bucketing and continue without sorting - logger.warning("Disabling length bucketing due to sorting failure") - pass - - for i in tqdm( - range(0, len(items), self.batch_size), desc="vLLM Processing Trials" - ): - batch = items[i : i + self.batch_size] - self._process_batch(batch, output_folder) + def _token_length(self, prompt: str, nct_id: str = "") -> int: + return self._safe_calculate_token_length(prompt, nct_id) def _safe_calculate_token_length(self, prompt: str, nct_id: str) -> int: """Safely calculate token length using vLLM's tokenizer.""" @@ -541,29 +346,3 @@ def _extract_token_length(self, tokenized, nct_id: str) -> int: logger.warning(f"Could not extract token length for {nct_id}, using fallback") return fallback_length - - def _validate_token_lengths(self, items: List[Dict]) -> None: - """Validate that all token lengths are integers and fix any that aren't.""" - for i, item in enumerate(items): - tok_len = item["tok_len"] - if not isinstance(tok_len, int): - logger.error( - f"Invalid tok_len type for {item['nct_id']}: {type(tok_len)}, value: {tok_len}" - ) - # Force conversion to int - try: - if ( - isinstance(tok_len, (float, str)) - and str(tok_len).replace(".", "").isdigit() - ): - item["tok_len"] = int(float(tok_len)) - logger.warning( - f"Converted tok_len for {item['nct_id']} from {type(tok_len)} to int" - ) - else: - # Use character-based fallback - item["tok_len"] = max(1, len(item["prompt"]) // 4) - logger.warning(f"Using fallback tok_len for {item['nct_id']}") - except Exception as e: - logger.error(f"Failed to convert tok_len for {item['nct_id']}: {e}") - item["tok_len"] = max(1, len(item["prompt"]) // 4) diff --git a/src/trialmatchai/matching/query_expansion.py b/src/trialmatchai/matching/query_expansion.py new file mode 100644 index 00000000..c60cd1cd --- /dev/null +++ b/src/trialmatchai/matching/query_expansion.py @@ -0,0 +1,210 @@ +"""Runtime CoT query expansion (re-introduced from the legacy pipeline). + +The legacy matcher ran a chain-of-thought model over each patient's narrative to +produce the expanded ``keywords.json`` (primary conditions + synonyms, secondary +factors, expanded sentences) that feeds first-level retrieval. The refactor +dropped this; this module restores it faithfully while making the model a config +knob. + +Verbatim SYSTEM_PROMPT and generation behaviour are preserved from +``source/Matcher/pipeline/phenopacket_processor.py`` (main branch). The model and +backend default to the configured CoT reasoning model but are overridable via the +``query_expansion`` config block. Disabled by default; the TREC preset turns it on. +""" + +from __future__ import annotations + +from typing import Any, Dict, List + +from trialmatchai.utils.json_utils import extract_json_object +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + +# Verbatim from the legacy ClinicalSummarizer.generate_summary SYSTEM_PROMPT. +SYSTEM_PROMPT = """ +You are a specialized medical assistant designed for precise and accurate clinical trial matching. +Analyze the patient's medical description carefully and extract clinically relevant information for trial eligibility assessment. + +1. **Primary Condition**: + - Determine the primary medical conditions based on explicit patient information and overall clinical context. + - List up to 10 medically recognized synonyms, aliases, or closely related medical terms for the primary conditions. + - Include the identified primary conditions and their associated synonyms or related terms within the "main_conditions" list. + +2. **Secondary Clinical Factors**: + - Provide up to 50 clinically significant additional factors, including comorbidities, concurrent medical conditions, molecular or genetic biomarkers, prior therapies, relevant medical history, and clinically notable patient characteristics explicitly mentioned in the patient description. + - Provide these factors in the "other_conditions" list. + +3. **Expanded Clinical Descriptions**: + - Based solely on the original patient-provided data, generate semantically accurate and medically sound statements resembling real-life medical notes. + - **Crucial**: Expanded descriptions must strictly reflect explicit patient-reported information without introducing new or inferred medical details. + +Output: +Return a JSON object in the exact following structure without any additional commentary: + +{ +"main_conditions": ["PrimaryCondition", "Synonym1", "Synonym2", "..."], +"other_conditions": ["AdditionalCondition1", "AdditionalCondition2", "..."], +"expanded_sentences": [ + "Expanded note for sentence 1...", + "Expanded note for sentence 2...", + "..." +] +} +""".strip() + +_EMPTY = {"main_conditions": [], "other_conditions": [], "expanded_sentences": []} + + +def _resolve_settings(config: Dict[str, Any]) -> Dict[str, Any]: + qe = dict(config.get("query_expansion") or {}) + model_cfg = config.get("model", {}) + return { + # Default to the RAG/eligibility backend so the expander shares the cached + # CoT engine with the matching stage instead of loading a second copy. + "backend": qe.get("backend") or config.get("rag", {}).get("backend") or "vllm", + "model": qe.get("model") or model_cfg.get("base_model"), + "adapter": qe.get("adapter", model_cfg.get("cot_adapter_path")), + "device": str(config.get("global", {}).get("device", 0)), + "max_new_tokens": int(qe.get("max_new_tokens", 2048)), + "trust_remote_code": bool( + qe.get("trust_remote_code", model_cfg.get("trust_remote_code", False)) + ), + "max_main_conditions": int(qe.get("max_main_conditions", 11)), + "max_other_conditions": int(qe.get("max_other_conditions", 50)), + } + + +class QueryExpander: + """CoT expander; loads its model lazily so import stays base-deps safe.""" + + def __init__(self, settings: Dict[str, Any], config: Dict[str, Any]): + self.settings = settings + self.config = config + self.backend = settings["backend"] + if not settings.get("model"): + raise ValueError("query_expansion requires a model (set query_expansion.model or model.base_model)") + if self.backend == "vllm": + self._init_vllm() + elif self.backend == "transformers": + self._init_transformers() + else: + raise ValueError(f"Unsupported query_expansion.backend: {self.backend}") + + # -- backends ---------------------------------------------------------- # + def _init_transformers(self) -> None: + import torch # noqa: F401 + from transformers import AutoModelForCausalLM, AutoTokenizer + + s = self.settings + self.tokenizer = AutoTokenizer.from_pretrained( + s["model"], trust_remote_code=s["trust_remote_code"] + ) + model = AutoModelForCausalLM.from_pretrained( + s["model"], + torch_dtype="auto", + device_map="auto", + trust_remote_code=s["trust_remote_code"], + ) + if s.get("adapter"): + from peft import PeftModel + + model = PeftModel.from_pretrained(model, s["adapter"]) + model.eval() + self.model = model + + def _init_vllm(self) -> None: + from trialmatchai.models.llm.vllm_loader import load_vllm_engine + + s = self.settings + # Same model_config/vllm_cfg shape as the RAG eligibility path so an + # identical (model, adapter, params) request hits the engine cache and + # shares ONE engine rather than loading a second CoT copy. + model_config = { + **self.config.get("model", {}), + "base_model": s["model"], + "cot_adapter_path": s.get("adapter"), + } + self.engine, self.tokenizer, self.lora_request = load_vllm_engine( + model_config=model_config, vllm_cfg=self.config.get("vllm", {}) + ) + + # -- generation -------------------------------------------------------- # + def _generate(self, narrative: str) -> str: + messages = [ + {"role": "system", "content": SYSTEM_PROMPT}, + {"role": "user", "content": narrative}, + ] + if self.backend == "transformers": + import torch + + prompt = self.tokenizer.apply_chat_template( + messages, add_generation_prompt=True, return_tensors="pt" + ).to(self.model.device) + with torch.no_grad(): + out = self.model.generate( + prompt, + max_new_tokens=self.settings["max_new_tokens"], + do_sample=False, + pad_token_id=self.tokenizer.eos_token_id, + ) + return self.tokenizer.decode(out[0][prompt.shape[-1]:], skip_special_tokens=True) + + # vllm + from vllm import SamplingParams + + prompt_text = self.tokenizer.apply_chat_template( + messages, add_generation_prompt=True, tokenize=False + ) + params = SamplingParams(temperature=0.0, max_tokens=self.settings["max_new_tokens"]) + results = self.engine.generate([prompt_text], params, lora_request=self.lora_request) + return results[0].outputs[0].text if results and results[0].outputs else "" + + def expand(self, narrative_sentences: List[str]) -> Dict[str, Any]: + """Return {main_conditions, other_conditions, expanded_sentences}.""" + narrative = " ".join(s for s in narrative_sentences if s).strip() + if not narrative: + return dict(_EMPTY) + try: + raw = self._generate(narrative) + parsed = extract_json_object(raw) + if not isinstance(parsed, dict): + raise ValueError("expansion output was not a JSON object") + return {key: list(parsed.get(key) or []) for key in _EMPTY} + except Exception as exc: + logger.error("Query expansion failed; falling back to no expansion: %s", exc) + return dict(_EMPTY) + + +def build_query_expander(config: Dict[str, Any]) -> QueryExpander | None: + """Construct an expander when ``query_expansion.enabled`` is true, else None.""" + qe = config.get("query_expansion") or {} + if not qe.get("enabled"): + return None + return QueryExpander(_resolve_settings(config), config) + + +def enrich_summary( + summary: Dict[str, Any], + expansion: Dict[str, Any], + *, + max_main_conditions: int = 11, + max_other_conditions: int = 50, +) -> Dict[str, Any]: + """Fold a CoT expansion into a matching summary (legacy keywords.json shape). + + The legacy ``expanded_sentences`` map to the summary's ``patient_narrative``. + Only non-empty expansion fields overwrite; otherwise the deterministic + summary is left intact. + """ + out = dict(summary) + main = expansion.get("main_conditions") or [] + other = expansion.get("other_conditions") or [] + sentences = expansion.get("expanded_sentences") or [] + if main: + out["main_conditions"] = main[:max_main_conditions] + if other: + out["other_conditions"] = other[:max_other_conditions] + if sentences: + out["patient_narrative"] = sentences + return out diff --git a/source/Matcher/models/__init__.py b/src/trialmatchai/matching/retrieval/__init__.py similarity index 100% rename from source/Matcher/models/__init__.py rename to src/trialmatchai/matching/retrieval/__init__.py diff --git a/src/trialmatchai/matching/retrieval/criteria_retrieval.py b/src/trialmatchai/matching/retrieval/criteria_retrieval.py new file mode 100644 index 00000000..db5f5f1f --- /dev/null +++ b/src/trialmatchai/matching/retrieval/criteria_retrieval.py @@ -0,0 +1,299 @@ +from __future__ import annotations + +import json +import math +from collections import defaultdict +from concurrent.futures import ThreadPoolExecutor, as_completed +from typing import TYPE_CHECKING, Any, Dict, List, Mapping, Optional + +from trialmatchai.constraints import apply_constraint_score, evaluate_constraint_set +from trialmatchai.constraints.models import ConstraintSet, CriterionConstraintEvaluation +from trialmatchai.matching.retrieval.synonyms import disease_synonyms +from trialmatchai.search.lancedb_backend import TrialSearchBackend +from trialmatchai.utils.file_utils import write_text_file +from trialmatchai.utils.logging_config import setup_logging + +if TYPE_CHECKING: + from trialmatchai.constraints.models import PatientConstraintContext + from trialmatchai.models.embedding.text_embedder import TextEmbedder + from trialmatchai.models.llm.llm_reranker import LLMReranker + +logger = setup_logging(__name__) + + +class SecondStageRetriever: + def __init__( + self, + search_backend: TrialSearchBackend, + llm_reranker: Optional[LLMReranker], # Make optional + embedder: Optional[TextEmbedder], + size: int = 250, + inclusion_weight: float = 1.0, + exclusion_weight: float = 0.25, + entity_annotator=None, + search_mode: str = "hybrid", + ): + self.search_backend = search_backend + self.llm_reranker = llm_reranker # Can be None + self.embedder = embedder + self.size = size + self.inclusion_weight = inclusion_weight + self.exclusion_weight = exclusion_weight + self.entity_annotator = entity_annotator + self.search_mode = search_mode.lower() if search_mode else "hybrid" + self.last_constraint_evaluations: list[CriterionConstraintEvaluation] = [] + + def get_synonyms(self, condition: str) -> List[str]: + return disease_synonyms(self.entity_annotator, condition) + + def retrieve_criteria( + self, nct_ids: List[str], queries: List[str] + ) -> Dict[str, List[Dict]]: + query_to_hits = {} + + def execute_query(query): + mode = self.search_mode + query_vector = None + if mode in {"vector", "hybrid"}: + if self.embedder is None: + logger.warning( + "%s mode selected but embedder is None. Falling back to BM25.", + mode, + ) + mode = "bm25" + else: + vectors = self.embedder.embed_texts([query]) + if vectors: + query_vector = vectors[0] + else: + logger.warning("Empty query after preprocessing. Falling back to BM25.") + mode = "bm25" + + try: + hits = self.search_backend.search_criteria( + query=query, + nct_ids=nct_ids, + query_vector=query_vector, + size=self.size, + search_mode=mode, + use_entity_synonyms=self.entity_annotator is not None, + ) + logger.info( + "[%s] Retrieved %s documents for query: '%s'", + mode, + len(hits), + query, + ) + return query, hits + except Exception: + logger.exception("Second-level search failed for query: %s", query) + return query, [] + + if not queries: + return {} + + with ThreadPoolExecutor(max_workers=min(8, len(queries))) as executor: + future_to_query = { + executor.submit(execute_query, query): query for query in queries + } + for future in as_completed(future_to_query): + query, hits = future.result() + query_to_hits[query] = hits + return query_to_hits + + def rerank_criteria(self, criteria: List[Dict]) -> List[Dict]: + if self.llm_reranker is None: + logger.warning("LLM reranker not available, using search scores only") + return self.score_criteria_without_llm(criteria) + + pairs = [ + (criterion["query"], criterion["_source"]["criterion"]) + for criterion in criteria + ] + llm_scores = self.llm_reranker.rank_pairs(pairs) + llm_scores = [ + score.get("llm_score", 0.0) if isinstance(score, dict) else float(score) + for score in llm_scores + ] + if len(llm_scores) != len(pairs): + logger.error("Mismatch between LLM scores and pairs!") + raise ValueError("Mismatch between LLM scores and pairs!") + for i, criterion in enumerate(criteria): + llm_score = llm_scores[i] + eligibility_type = criterion["_source"].get("eligibility_type", "").lower() + if eligibility_type == "inclusion criteria": + llm_score *= self.inclusion_weight + elif eligibility_type == "exclusion criteria": + llm_score *= self.exclusion_weight + criterion["llm_score"] = llm_score + return criteria + + def score_criteria_without_llm(self, criteria: List[Dict]) -> List[Dict]: + if not criteria: + return criteria + max_es = max((c.get("_score", 0.0) for c in criteria), default=1.0) or 1.0 + for criterion in criteria: + base = float(criterion.get("_score", 0.0)) / max_es + eligibility_type = criterion["_source"].get("eligibility_type", "").lower() + if eligibility_type == "inclusion criteria": + base *= self.inclusion_weight + elif eligibility_type == "exclusion criteria": + base *= self.exclusion_weight + criterion["llm_score"] = base + return criteria + + def apply_constraint_adjustments( + self, + criteria: List[Dict], + *, + patient_context: Optional["PatientConstraintContext"] = None, + constraints_config: Mapping[str, Any] | None = None, + ) -> List[Dict]: + self.last_constraint_evaluations = [] + config = constraints_config or {} + if not config.get("enabled", True) or patient_context is None: + return criteria + + score_weight = _constraint_score_weight(config.get("score_weight", 0.25)) + unknown_is_neutral = bool(config.get("unknown_is_neutral", True)) + seen_criteria: set[str] = set() + for criterion in criteria: + source = criterion.get("_source") or {} + raw_constraints = source.get("constraints") + if not raw_constraints: + continue + try: + constraint_set = _constraint_set_from_payload(raw_constraints) + except Exception: + logger.warning( + "Ignoring invalid constraint payload for criterion %s.", + source.get("criteria_id", "unknown"), + ) + continue + if not constraint_set.constraints: + continue + + evaluation = evaluate_constraint_set( + constraint_set, patient_context, unknown_is_neutral=unknown_is_neutral + ) + if evaluation.criteria_id not in seen_criteria: + self.last_constraint_evaluations.append(evaluation) + seen_criteria.add(evaluation.criteria_id) + + base_score = float( + criterion.get("llm_score", criterion.get("_score", 0.0)) or 0.0 + ) + adjusted_score = apply_constraint_score( + base_score, + evaluation.constraint_signal, + score_weight=score_weight, + ) + criterion["pre_constraint_score"] = base_score + criterion["constraint_signal"] = evaluation.constraint_signal + criterion["constraint_adjusted_score"] = adjusted_score + criterion["constraint_evaluation"] = evaluation.model_dump(mode="json") + criterion["llm_score"] = adjusted_score + return criteria + + def aggregate_to_trials( + self, criteria: List[Dict], threshold: float = 0.5, method: str = "weighted" + ) -> List[Dict]: + trial_scores = defaultdict(list) + for criterion in criteria: + nct_id = criterion["_source"]["nct_id"] + score = criterion["llm_score"] + threshold_basis = criterion.get("pre_constraint_score", score) + if score >= threshold or threshold_basis >= threshold: + trial_scores[nct_id].append(score) + aggregated_scores = {} + for nct_id, scores in trial_scores.items(): + count = len(scores) + total = sum(scores) + if count == 0: + continue + if method == "avg": + agg_score = total / count + elif method == "sqrt": + agg_score = total / math.sqrt(count) + elif method == "log": + agg_score = total / math.log(count + 1) + elif method == "weighted": + agg_score = 0.7 * (total / math.sqrt(count)) + 0.3 * max(scores) + else: + raise ValueError(f"Unsupported aggregation method: {method}") + aggregated_scores[nct_id] = agg_score + sorted_trials = [ + {"nct_id": nct_id, "score": score} + for nct_id, score in sorted( + aggregated_scores.items(), key=lambda x: x[1], reverse=True + ) + ] + return sorted_trials + + def retrieve_and_rank( + self, + queries: List[str], + nct_ids: List[str], + top_n: int, + use_reranker: bool = True, + save_path: Optional[str] = None, + patient_context: Optional["PatientConstraintContext"] = None, + constraints_config: Mapping[str, Any] | None = None, + ) -> List[Dict]: + # Cap queries to prevent memory/performance issues + max_queries = 150 # Reasonable limit for second-level search + if len(queries) > max_queries: + logger.warning( + f"Capping queries from {len(queries)} to {max_queries} for second-level search" + ) + queries = queries[:max_queries] + + query_to_hits = self.retrieve_criteria(nct_ids, queries) + all_criteria = [] + for query, hits in query_to_hits.items(): + for hit in hits: + hit["query"] = query + all_criteria.append(hit) + + # Check if reranker is available before trying to use it + if use_reranker and self.llm_reranker is not None: + ranked_criteria = self.rerank_criteria(all_criteria) + else: + if use_reranker and self.llm_reranker is None: + logger.info( + "Reranking requested but LLM reranker not available; using search scores for aggregation." + ) + else: + logger.info( + "Second-level reranking disabled; using search scores for aggregation." + ) + ranked_criteria = self.score_criteria_without_llm(all_criteria) + + ranked_criteria = self.apply_constraint_adjustments( + ranked_criteria, + patient_context=patient_context, + constraints_config=constraints_config, + ) + sorted_trials = self.aggregate_to_trials(ranked_criteria) + top_trials = sorted_trials[:top_n] + logger.info(f"Top {top_n} trials retrieved: {top_trials}") + if save_path: + write_text_file([trial["nct_id"] for trial in top_trials], save_path) + logger.info(f"Top trials saved to {save_path}") + return top_trials + + +def _constraint_score_weight(value: Any) -> float: + try: + weight = float(value) + except (TypeError, ValueError): + return 0.25 + return max(0.0, min(1.0, weight)) + + +def _constraint_set_from_payload(payload: Any) -> ConstraintSet: + if isinstance(payload, ConstraintSet): + return payload + if isinstance(payload, str): + payload = json.loads(payload) + return ConstraintSet.model_validate(payload) diff --git a/src/trialmatchai/matching/retrieval/first_level_planner.py b/src/trialmatchai/matching/retrieval/first_level_planner.py new file mode 100644 index 00000000..a55ac8f0 --- /dev/null +++ b/src/trialmatchai/matching/retrieval/first_level_planner.py @@ -0,0 +1,399 @@ +from __future__ import annotations + +import json +import re +from collections.abc import Callable, Sequence +from typing import Any, Literal, Protocol + +from pydantic import BaseModel, ConfigDict, Field + +from trialmatchai.interop.models import ClinicalFact, PatientProfile +from trialmatchai.interop.narrative import render_patient_narrative +from trialmatchai.matching.retrieval.synonyms import disease_synonyms +from trialmatchai.utils.logging_config import setup_logging +from trialmatchai.utils.text import flatten_text + +logger = setup_logging(__name__) + + +FirstLevelChannelKind = Literal[ + "primary_condition", + "concept_synonym", + "broader_disease", + "narrative", + "biomarker", + "therapy", + "llm_expansion", +] + +DEFAULT_CHANNEL_WEIGHTS: dict[FirstLevelChannelKind, float] = { + "primary_condition": 1.0, + "concept_synonym": 0.9, + "narrative": 0.8, + "biomarker": 0.7, + "therapy": 0.45, + "broader_disease": 0.35, + "llm_expansion": 0.5, +} + + +class FirstLevelQueryChannel(BaseModel): + kind: FirstLevelChannelKind + terms: list[str] + weight: float = Field(ge=0.0) + source: str = "deterministic" + + model_config = ConfigDict(extra="forbid") + + +class FirstLevelQueryPlan(BaseModel): + patient_id: str | None = None + channels: list[FirstLevelQueryChannel] = Field(default_factory=list) + filters: dict[str, Any] = Field(default_factory=dict) + llm_expansion_enabled: bool = False + + model_config = ConfigDict(extra="forbid") + + def terms_for(self, *kinds: FirstLevelChannelKind) -> list[str]: + allowed = set(kinds) + return dedupe_terms( + term + for channel in self.channels + if channel.kind in allowed + for term in channel.terms + ) + + +class FirstLevelCandidateEvidence(BaseModel): + nct_id: str + score: float + channels: list[dict[str, Any]] = Field(default_factory=list) + + model_config = ConfigDict(extra="forbid") + + +class LLMQueryExpansion(BaseModel): + primary_queries: list[str] = Field(default_factory=list) + disease_aliases: list[str] = Field(default_factory=list) + broader_queries: list[str] = Field(default_factory=list) + biomarker_queries: list[str] = Field(default_factory=list) + treatment_queries: list[str] = Field(default_factory=list) + discarded_or_uncertain: list[str] = Field(default_factory=list) + + model_config = ConfigDict(extra="forbid") + + +class LLMQueryExpansionBackend(Protocol): + def expand_first_level_queries( + self, + *, + profile: PatientProfile, + matching_summary: dict[str, Any], + ) -> str | dict[str, Any]: + ... + + +class FirstLevelQueryPlanner: + def __init__( + self, + *, + entity_annotator: Any = None, + llm_expander: LLMQueryExpansionBackend + | Callable[..., str | dict[str, Any]] + | None = None, + ) -> None: + self.entity_annotator = entity_annotator + self.llm_expander = llm_expander + + def build( + self, + *, + profile: PatientProfile, + matching_summary: dict[str, Any], + config: dict[str, Any] | None = None, + age: int | str | None = None, + sex: str | None = None, + overall_status: str | None = None, + ) -> FirstLevelQueryPlan: + cfg = config or {} + channels: list[FirstLevelQueryChannel] = [] + primary_terms = dedupe_terms( + [ + *matching_summary.get("main_conditions", []), + *positive_fact_labels(profile.conditions), + ] + ) + channels.append( + self._channel("primary_condition", primary_terms, "matching_summary") + ) + + synonym_terms = self._synonym_terms(primary_terms) + channels.append(self._channel("concept_synonym", synonym_terms, "concept_linker")) + + broader_terms = broader_disease_terms([*primary_terms, *synonym_terms]) + channels.append(self._channel("broader_disease", broader_terms, "deterministic")) + + narrative_terms = narrative_terms_from_summary_or_profile( + profile, + matching_summary, + ) + channels.append(self._channel("narrative", narrative_terms, "patient_narrative")) + + biomarker_terms = dedupe_terms( + [ + *positive_fact_labels(profile.genomic_findings), + *biomarker_terms_from_facts(profile.cancer_profile), + ] + ) + channels.append(self._channel("biomarker", biomarker_terms, "patient_profile")) + + therapy_terms = therapy_terms_from_profile(profile) + channels.append(self._channel("therapy", therapy_terms, "patient_profile")) + + llm_enabled = bool(cfg.get("llm_expansion_enabled", False)) + if llm_enabled: + llm_terms = self._llm_terms( + profile=profile, + matching_summary=matching_summary, + max_terms=int(cfg.get("llm_max_terms", 12)), + ) + channels.append(self._channel("llm_expansion", llm_terms, "llm")) + + return FirstLevelQueryPlan( + patient_id=profile.patient_id, + channels=[channel for channel in channels if channel.terms], + filters={ + "age": age, + "sex": sex, + "overall_status": overall_status, + "hard_filters": cfg.get( + "hard_filters", + ["age", "sex", "overall_status"], + ), + }, + llm_expansion_enabled=llm_enabled, + ) + + def _channel( + self, + kind: FirstLevelChannelKind, + terms: Sequence[str], + source: str, + ) -> FirstLevelQueryChannel: + return FirstLevelQueryChannel( + kind=kind, + terms=dedupe_terms(terms), + weight=DEFAULT_CHANNEL_WEIGHTS[kind], + source=source, + ) + + def _synonym_terms(self, primary_terms: Sequence[str]) -> list[str]: + output: list[str] = [] + for term in primary_terms[:5]: + output.extend(disease_synonyms(self.entity_annotator, term)) + return dedupe_terms(output) + + def _llm_terms( + self, + *, + profile: PatientProfile, + matching_summary: dict[str, Any], + max_terms: int, + ) -> list[str]: + if self.llm_expander is None: + logger.warning( + "First-level LLM expansion is enabled but no expander is configured." + ) + return [] + try: + if hasattr(self.llm_expander, "expand_first_level_queries"): + raw = self.llm_expander.expand_first_level_queries( + profile=profile, + matching_summary=matching_summary, + ) + else: + raw = self.llm_expander( + profile=profile, + matching_summary=matching_summary, + ) + parsed = parse_llm_query_expansion(raw, max_terms=max_terms) + except Exception: + logger.exception("Discarding invalid first-level LLM query expansion.") + return [] + return dedupe_terms( + [ + *parsed.primary_queries, + *parsed.disease_aliases, + *parsed.broader_queries, + *parsed.biomarker_queries, + *parsed.treatment_queries, + ] + )[:max_terms] + + +def parse_llm_query_expansion( + raw: str | dict[str, Any], + *, + max_terms: int, +) -> LLMQueryExpansion: + payload = json.loads(raw) if isinstance(raw, str) else raw + parsed = LLMQueryExpansion.model_validate(payload) + capped: dict[str, list[str]] = {} + remaining = max(0, max_terms) + for field in ( + "primary_queries", + "disease_aliases", + "broader_queries", + "biomarker_queries", + "treatment_queries", + ): + values = dedupe_terms(getattr(parsed, field)) + if remaining <= 0: + capped[field] = [] + continue + capped[field] = values[:remaining] + remaining -= len(capped[field]) + capped["discarded_or_uncertain"] = dedupe_terms(parsed.discarded_or_uncertain) + return LLMQueryExpansion.model_validate(capped) + + +def fuse_first_level_channel_hits( + channel_hits: Sequence[tuple[FirstLevelQueryChannel, list[dict], list[float]]], + *, + size: int, + rrf_k: int = 60, +) -> tuple[list[dict], list[float], list[FirstLevelCandidateEvidence]]: + candidates: dict[str, dict[str, Any]] = {} + evidence: dict[str, list[dict[str, Any]]] = {} + for channel, trials, scores in channel_hits: + for rank, (trial, raw_score) in enumerate(zip(trials, scores), start=1): + nct_id = str(trial.get("nct_id") or "") + if not nct_id: + continue + contribution = channel.weight / (rrf_k + rank) + if nct_id not in candidates: + candidates[nct_id] = { + "trial": trial, + "score": 0.0, + } + evidence[nct_id] = [] + candidates[nct_id]["score"] += contribution + evidence[nct_id].append( + { + "channel": channel.kind, + "rank": rank, + "raw_score": float(raw_score), + "weight": channel.weight, + "terms": channel.terms, + "contribution": contribution, + } + ) + + ranked = sorted( + candidates.values(), + key=lambda item: item["score"], + reverse=True, + )[:size] + trials = [item["trial"] for item in ranked] + scores = [float(item["score"]) for item in ranked] + candidate_evidence = [ + FirstLevelCandidateEvidence( + nct_id=str(item["trial"].get("nct_id")), + score=float(item["score"]), + channels=evidence.get(str(item["trial"].get("nct_id")), []), + ) + for item in ranked + ] + return trials, scores, candidate_evidence + + +def positive_fact_labels(facts: Sequence[ClinicalFact]) -> list[str]: + return dedupe_terms(fact.label for fact in facts if not fact.negated) + + +def narrative_terms_from_summary_or_profile( + profile: PatientProfile, + matching_summary: dict[str, Any], + *, + max_chars: int = 1500, +) -> list[str]: + sentences = matching_summary.get("patient_narrative") or render_patient_narrative( + profile + ) + sentences = [ + sentence + for sentence in sentences + if " absent" not in str(sentence).casefold() + ] + narrative = flatten_text(sentences) + if not narrative: + return [] + return [narrative[:max_chars].rsplit(" ", 1)[0].strip() or narrative[:max_chars]] + + +def biomarker_terms_from_facts(facts: Sequence[ClinicalFact]) -> list[str]: + terms: list[str] = [] + gene_pattern = re.compile( + r"\b(ALK|BRAF|BRCA1|BRCA2|EGFR|ERBB2|HER2|KRAS|NTRK|PD-L1|PIK3CA|ROS1|TP53)\b", + re.IGNORECASE, + ) + for fact in facts: + if fact.negated: + continue + text = flatten_text([fact.label, fact.description, fact.evidence_text]) + terms.extend(match.group(1).upper() for match in gene_pattern.finditer(text)) + return dedupe_terms(terms) + + +def therapy_terms_from_profile(profile: PatientProfile) -> list[str]: + terms: list[str] = [] + for fact in [*profile.medications, *profile.procedures]: + if fact.negated: + continue + terms.append(fact.label) + if fact.temporality and "prior" in fact.temporality.casefold(): + terms.append(f"prior {fact.label}") + return dedupe_terms(terms) + + +def broader_disease_terms(terms: Sequence[str]) -> list[str]: + output: list[str] = [] + for term in terms: + normalized = term.casefold() + if any( + marker in normalized + for marker in ( + "cancer", + "carcinoma", + "melanoma", + "sarcoma", + "tumor", + "tumour", + "neoplasm", + ) + ): + output.extend(["cancer", "malignant neoplasm", "solid tumor"]) + if any(marker in normalized for marker in ("leukemia", "lymphoma", "myeloma")): + output.extend(["hematologic malignancy", "blood cancer"]) + if "lung" in normalized and any( + marker in normalized for marker in ("cancer", "carcinoma", "nsclc") + ): + output.extend(["thoracic cancer", "solid tumor"]) + return dedupe_terms(output) + + +def dedupe_terms(values: Any) -> list[str]: + if values is None: + return [] + seen: set[str] = set() + output: list[str] = [] + for value in values: + cleaned = re.sub(r"\s+", " ", str(value or "")).strip() + if not cleaned: + continue + key = cleaned.casefold() + if key in seen: + continue + seen.add(key) + output.append(cleaned) + return output diff --git a/src/trialmatchai/matching/retrieval/location.py b/src/trialmatchai/matching/retrieval/location.py new file mode 100644 index 00000000..27532ecf --- /dev/null +++ b/src/trialmatchai/matching/retrieval/location.py @@ -0,0 +1,60 @@ +"""Optional geographic (country-level, site-aware) trial filtering. + +Trials recruit at many sites across countries, so the filter is deliberately +recall-safe: a trial passes when the patient's country is unknown, when the +trial has no indexed site countries, or when ANY of its sites is in the +patient's country. It only drops trials we are confident have no site in the +patient's country. Country granularity avoids the recall risk of distance/region +matching on messy ClinicalTrials.gov site data. +""" + +from __future__ import annotations + +from typing import Any, Mapping, Sequence + + +def patient_country(profile: Any) -> str | None: + location = getattr(profile, "location", None) + country = getattr(location, "country", None) if location is not None else None + country = (country or "").strip() + return country or None + + +def trial_site_countries(trial: Mapping[str, Any]) -> set[str]: + countries: set[str] = set() + locations = trial.get("location") + if isinstance(locations, Mapping): + locations = [locations] + if not isinstance(locations, Sequence) or isinstance(locations, (str, bytes)): + return countries + for site in locations: + if isinstance(site, Mapping): + country = str(site.get("country") or "").strip().casefold() + if country: + countries.add(country) + return countries + + +def trial_in_country(trial: Mapping[str, Any], country: str) -> bool: + """True if the trial should pass the country filter (recall-safe).""" + site_countries = trial_site_countries(trial) + if not site_countries: + return True # unknown location -> do not drop + return country.strip().casefold() in site_countries + + +def filter_trials_by_country( + trials: list[dict[str, Any]], + scores: list[float], + country: str | None, +) -> tuple[list[dict[str, Any]], list[float]]: + """Drop trials with known sites that exclude the patient's country.""" + if not country: + return trials, scores + kept_trials: list[dict[str, Any]] = [] + kept_scores: list[float] = [] + for trial, score in zip(trials, scores): + if trial_in_country(trial, country): + kept_trials.append(trial) + kept_scores.append(score) + return kept_trials, kept_scores diff --git a/src/trialmatchai/matching/retrieval/synonyms.py b/src/trialmatchai/matching/retrieval/synonyms.py new file mode 100644 index 00000000..90cd039e --- /dev/null +++ b/src/trialmatchai/matching/retrieval/synonyms.py @@ -0,0 +1,34 @@ +"""Shared disease-synonym extraction used by the first- and second-stage retrievers.""" + +from __future__ import annotations + +from typing import Any, List + +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def disease_synonyms(entity_annotator: Any, condition: str) -> List[str]: + """Return linked disease synonyms for a condition via the entity annotator. + + Returns an empty list when the annotator is unavailable or extraction fails. + """ + if entity_annotator is None: + logger.info("Entity annotator disabled; skipping synonyms extraction.") + return [] + try: + raw_result = entity_annotator.annotate_texts_in_parallel( + [condition], max_workers=1 + ) + if raw_result and raw_result[0]: + synonyms: set[str] = set() + for entity in raw_result[0]: + if entity.get("entity_group", "").lower() == "disease": + synonyms.update(entity.get("synonyms", [])) + # sorted() for deterministic ordering across runs (set order is not stable). + return sorted(synonyms) + logger.warning("No annotations found for condition: %s", condition) + except Exception as exc: + logger.error("Entity synonym extraction failed for '%s': %s", condition, exc) + return [] diff --git a/src/trialmatchai/matching/retrieval/trial_retrieval.py b/src/trialmatchai/matching/retrieval/trial_retrieval.py new file mode 100644 index 00000000..a70bff98 --- /dev/null +++ b/src/trialmatchai/matching/retrieval/trial_retrieval.py @@ -0,0 +1,282 @@ +from __future__ import annotations + +from datetime import datetime +from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union + +from dateutil import parser as date_parser +from trialmatchai.matching.retrieval.first_level_planner import ( + FirstLevelCandidateEvidence, + FirstLevelQueryPlan, + FirstLevelQueryPlanner, + LLMQueryExpansionBackend, + fuse_first_level_channel_hits, +) +from trialmatchai.matching.retrieval.synonyms import disease_synonyms +from trialmatchai.search.lancedb_backend import TrialSearchBackend +from trialmatchai.utils.logging_config import setup_logging + +if TYPE_CHECKING: + from trialmatchai.interop.models import PatientProfile + from trialmatchai.models.embedding.text_embedder import TextEmbedder + +logger = setup_logging(__name__) + + +class ClinicalTrialSearch: + def __init__( + self, + search_backend: TrialSearchBackend, + embedder: Optional[TextEmbedder], + entity_annotator=None, + llm_query_expander: LLMQueryExpansionBackend | None = None, + ): + self.search_backend = search_backend + self.embedder = embedder + self.entity_annotator = entity_annotator + self.query_planner = FirstLevelQueryPlanner( + entity_annotator=entity_annotator, + llm_expander=llm_query_expander, + ) + + def get_synonyms(self, condition: str) -> List[str]: + return disease_synonyms(self.entity_annotator, condition) + + def parse_age_input(self, age_input: Union[int, str]) -> Optional[int]: + if isinstance(age_input, int): + return age_input + elif isinstance(age_input, str): + age_input = age_input.strip().lower() + age_keywords = ["year", "years", "yr", "yrs"] + try: + for keyword in age_keywords: + if age_input.endswith(keyword): + age_str = age_input.replace(keyword, "").strip() + return int(age_str) + return int(age_input) + except ValueError: + pass + try: + dob = date_parser.parse(age_input, fuzzy=True) + today = datetime.today() + age = ( + today.year + - dob.year + - ((today.month, today.day) < (dob.month, dob.day)) + ) + if age < 0: + raise ValueError("Invalid date of birth.") + return age + except (ValueError, OverflowError, date_parser.ParserError): + pass + return None + + def create_query( + self, + synonyms: List[str], + embeddings: Dict[str, List[float]], + other_conditions: Optional[List[str]] = None, + ) -> Dict: + # Assemble the term lists (with a conservative cap) and embeddings the + # backend consumes. Filters like age/sex/status/nct_ids are passed to the + # backend directly by search_trials, not threaded through this dict. + max_conditions_per_query = 800 # Conservative limit + all_conditions = synonyms + (other_conditions or []) + if len(all_conditions) > max_conditions_per_query: + logger.warning( + f"Capping search conditions from {len(all_conditions)} to {max_conditions_per_query}" + ) + capped_synonyms = synonyms[:max_conditions_per_query] + remaining_slots = max_conditions_per_query - len(capped_synonyms) + capped_other = ( + (other_conditions or [])[:remaining_slots] + if remaining_slots > 0 + else [] + ) + synonyms = capped_synonyms + other_conditions = capped_other + + return { + "primary_terms": synonyms, + "other_terms": other_conditions or [], + "embeddings": embeddings, + } + + def search_trials( + self, + condition: str, + age_input: Union[int, str], + sex: str, + overall_status: Optional[str] = None, + size: int = 10, + pre_selected_nct_ids: Optional[List[str]] = None, + synonyms: Optional[List[str]] = None, + other_conditions: Optional[List[str]] = None, + vector_score_threshold: float = 0.0, + search_mode: str = "hybrid", + ) -> Tuple[List[Dict], List[float]]: + if age_input not in ["all", "ALL", "All"]: + age = self.parse_age_input(age_input) + if age is None: + raise ValueError("Could not parse age input.") + else: + age = None + primary_synonyms = _clean_terms([condition] + (synonyms or [])) + other_conditions = _clean_terms(other_conditions or []) + all_terms = primary_synonyms + other_conditions + + mode = (search_mode or "hybrid").lower() + embeddings: Dict[str, List[float]] = {} + if mode in {"vector", "hybrid"} and self.embedder is not None: + vectors = self.embedder.embed_texts(all_terms) + embeddings = dict(zip(all_terms, vectors)) + if not embeddings: + logger.warning( + "No valid terms to embed for vector search. Falling back to BM25 only." + ) + mode = "bm25" + elif mode in {"vector", "hybrid"} and self.embedder is None: + logger.warning( + "Vector/hybrid mode selected but embedder is None. Falling back to BM25 only." + ) + mode = "bm25" + + query = self.create_query(primary_synonyms, embeddings, other_conditions) + try: + trials, scores = self.search_backend.search_trials( + primary_terms=query["primary_terms"], + other_terms=query["other_terms"], + embeddings=query["embeddings"], + age=age, + sex=sex, + overall_status=overall_status, + pre_selected_nct_ids=pre_selected_nct_ids, + size=size, + vector_score_threshold=vector_score_threshold, + search_mode=mode, + ) + except Exception: + logger.exception("First-level search failed; returning empty results.") + return [], [] + logger.info( + f"[{mode}] Found {len(trials)} trials matching the search criteria." + ) + return trials, scores + + def build_query_plan( + self, + *, + profile: "PatientProfile", + matching_summary: dict[str, Any], + config: dict[str, Any] | None = None, + age: int | str | None = None, + sex: str | None = None, + overall_status: str | None = None, + ) -> FirstLevelQueryPlan: + return self.query_planner.build( + profile=profile, + matching_summary=matching_summary, + config=config, + age=age, + sex=sex, + overall_status=overall_status, + ) + + def search_trials_with_plan( + self, + *, + query_plan: FirstLevelQueryPlan, + age_input: Union[int, str], + sex: str, + overall_status: Optional[str] = None, + size: int = 1000, + per_channel_size: int = 300, + pre_selected_nct_ids: Optional[List[str]] = None, + vector_score_threshold: float = 0.0, + search_mode: str = "hybrid", + rrf_k: int = 60, + ) -> tuple[list[dict], list[float], list[FirstLevelCandidateEvidence]]: + # Honor the configured hard filters: only apply the ones listed in the + # plan (default age/sex/overall_status). This makes first_level.hard_filters + # actually controllable instead of always-on. + # Distinguish an unset value (None -> default) from an explicit empty + # list ([] -> no hard filters), so hard_filters=[] truly disables them. + configured = query_plan.filters.get("hard_filters") + hard_filters = set( + configured if configured is not None else ["age", "sex", "overall_status"] + ) + + age = None + if "age" in hard_filters and str(age_input).strip().casefold() != "all": + age = self.parse_age_input(age_input) + if age is None: + logger.warning( + "Could not parse age %r; proceeding without an age filter.", + age_input, + ) + effective_sex = sex if "sex" in hard_filters else "all" + effective_status = overall_status if "overall_status" in hard_filters else None + + mode = (search_mode or "hybrid").lower() + if mode in {"vector", "hybrid"} and self.embedder is None: + logger.warning( + "Vector/hybrid mode selected but embedder is None. Falling back to BM25 only." + ) + mode = "bm25" + + channel_hits = [] + failed_channels = 0 + for channel in query_plan.channels: + embeddings = self._embed_terms(channel.terms, mode) + try: + trials, scores = self.search_backend.search_trials( + primary_terms=channel.terms, + other_terms=[], + embeddings=embeddings, + age=age, + sex=effective_sex, + overall_status=effective_status, + pre_selected_nct_ids=pre_selected_nct_ids, + size=per_channel_size, + vector_score_threshold=vector_score_threshold, + search_mode=mode, + ) + except Exception: + failed_channels += 1 + logger.exception( + "First-level channel search failed for %s; skipping channel.", + channel.kind, + ) + continue + if trials: + channel_hits.append((channel, trials, scores)) + + if query_plan.channels and not channel_hits: + logger.warning( + "First-level retrieval produced no candidates from %d channels " + "(%d errored). Check the search backend/tables.", + len(query_plan.channels), + failed_channels, + ) + + trials, scores, evidence = fuse_first_level_channel_hits( + channel_hits, + size=size, + rrf_k=rrf_k, + ) + logger.info( + "[%s] First-level planned retrieval found %s trials across %s channels.", + mode, + len(trials), + len(channel_hits), + ) + return trials, scores, evidence + + def _embed_terms(self, terms: list[str], mode: str) -> dict[str, list[float]]: + if mode not in {"vector", "hybrid"} or self.embedder is None: + return {} + vectors = self.embedder.embed_texts(terms) + return dict(zip(terms, vectors)) + + +def _clean_terms(terms: List[str]) -> List[str]: + return [term.strip() for term in terms if term and term.strip()] diff --git a/src/trialmatchai/matching/trial_ranker.py b/src/trialmatchai/matching/trial_ranker.py new file mode 100644 index 00000000..8b88b1ce --- /dev/null +++ b/src/trialmatchai/matching/trial_ranker.py @@ -0,0 +1,119 @@ +import os +from typing import Dict, List + +from trialmatchai.utils.file_utils import read_json_file, write_json_file +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def load_trial_data( + json_folder: str, allowed_ids: set[str] | None = None +) -> List[Dict]: + """Load per-trial eligibility outputs from a patient's result folder. + + ``allowed_ids`` scopes loading to the current shortlist, so per-trial files + left over from a prior run with a different shortlist (e.g. after the index + changed) are ignored instead of being scored into the final ranking. + """ + trial_data = [] + for file_name in os.listdir(json_folder): + # Only NCT-named files are trials; skip run sidecars written to the same + # folder (keywords.json, patient_profile.json, first_level_scores.json, + # rag_output.json), which would otherwise be scored as bogus trials. + if file_name.endswith(".json") and file_name.upper().startswith("NCT"): + file_path = os.path.join(json_folder, file_name) + trial_id = os.path.splitext(file_name)[0] + if allowed_ids is not None and trial_id not in allowed_ids: + continue + try: + trial = read_json_file(file_path) + trial["TrialID"] = trial_id + trial_data.append(trial) + except Exception as e: + logger.error(f"Failed to load {file_name}: {e}") + return trial_data + + +# Eligibility scoring contract (see REFACTOR_PLAN.md PR1, audit finding C1). +# +# The eligibility model classifies each inclusion criterion as one of +# {Met, Not Met, Unclear, Irrelevant} and each exclusion criterion as one of +# {Violated, Not Violated, Unclear, Irrelevant}. A single Violated exclusion +# makes the patient ineligible, so it HARD-DISQUALIFIES the trial rather than +# being averaged against the inclusion score (the previous behavior, which let a +# violated trial outrank an eligible one). Eligible trials are ranked in [0, 1] +# by the fraction of decided inclusion criteria (Met or Not Met) that are Met. +DISQUALIFIED_SCORE = -1.0 + +_DECIDED_INCLUSION = {"Met", "Not Met"} + + +def score_trial(trial: Dict) -> float: + inclusion = [ + c.get("Classification") for c in trial.get("Inclusion_Criteria_Evaluation", []) + ] + exclusion = [ + c.get("Classification") for c in trial.get("Exclusion_Criteria_Evaluation", []) + ] + + # Any violated exclusion is a hard disqualifier: rank below all eligible trials. + if "Violated" in exclusion: + return DISQUALIFIED_SCORE + + # Eligible: score by the fraction of decided inclusion criteria that are Met. + decided = [c for c in inclusion if c in _DECIDED_INCLUSION] + if not decided: + return 0.0 + met = sum(1 for c in decided if c == "Met") + return met / len(decided) + + +def rank_trials( + trial_data: List[Dict], + *, + first_level_scores: Dict[str, float] | None = None, + second_level_scores: Dict[str, float] | None = None, +) -> List[Dict]: + """Rank trials by eligibility, breaking ties deterministically. + + The eligibility score is coarse (small rationals), so many trials tie. Rather + than let ties resolve by arbitrary filesystem order, break them by the + continuous second-level reranker probability, then the first-level retrieval + score, then the NCT id — a meaningful order within each eligibility bucket + that is fully reproducible. (Tie-aware nDCG further ensures genuine ties are + scored fairly regardless of this order.) + """ + first_level_scores = first_level_scores or {} + second_level_scores = second_level_scores or {} + ranked_trials = [] + for trial in trial_data: + trial_id = trial.get("TrialID", "Unknown") + ranked_trials.append( + { + "TrialID": trial_id, + "Score": score_trial(trial), + "RerankerScore": float(second_level_scores.get(trial_id, 0.0)), + "FirstLevelScore": float(first_level_scores.get(trial_id, 0.0)), + } + ) + # Descending eligibility -> reranker -> first-level; ascending NCT id last + # (negate numeric keys so a single ascending sort gives the right order and + # the NCT-id tie-break stays ascending). + ranked_trials.sort( + key=lambda x: ( + -x["Score"], + -x["RerankerScore"], + -x["FirstLevelScore"], + x["TrialID"], + ) + ) + return ranked_trials + + +def save_ranked_trials(ranked_trials: List[Dict], output_file: str): + # Do NOT swallow write failures: the caller treats a returned-without-raising + # call as a completed patient. A failed final write must surface so the + # patient is counted as failed (and retried), not marked done with no marker. + write_json_file({"RankedTrials": ranked_trials}, output_file) + logger.info(f"Ranked trials saved to {output_file}") diff --git a/source/Matcher/models/llm/__init__.py b/src/trialmatchai/models/__init__.py similarity index 100% rename from source/Matcher/models/llm/__init__.py rename to src/trialmatchai/models/__init__.py diff --git a/src/trialmatchai/models/embedding/__init__.py b/src/trialmatchai/models/embedding/__init__.py new file mode 100644 index 00000000..4668f315 --- /dev/null +++ b/src/trialmatchai/models/embedding/__init__.py @@ -0,0 +1,8 @@ +from trialmatchai.models.embedding.text_embedder import ( + HashingTextEmbedder, + TextEmbedder, + TextEmbedderConfig, + build_embedder, +) + +__all__ = ["HashingTextEmbedder", "TextEmbedder", "TextEmbedderConfig", "build_embedder"] diff --git a/src/trialmatchai/models/embedding/text_embedder.py b/src/trialmatchai/models/embedding/text_embedder.py new file mode 100644 index 00000000..b6120795 --- /dev/null +++ b/src/trialmatchai/models/embedding/text_embedder.py @@ -0,0 +1,181 @@ +from __future__ import annotations + +from dataclasses import dataclass +import hashlib +import math +import re +from typing import Iterable, List, Literal, Sequence, Any + +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +EmbedderBackend = Literal["hf", "hashing"] +PoolingStrategy = Literal["cls", "mean"] + + +@dataclass(frozen=True) +class TextEmbedderConfig: + backend: EmbedderBackend = "hf" + model_name: str = "BAAI/bge-m3" + revision: str | None = None + trust_remote_code: bool = False + pooling: PoolingStrategy = "mean" + max_length: int = 512 + batch_size: int = 32 + use_gpu: bool = True + use_fp16: bool = False + normalize: bool = True + hashing_dimensions: int = 64 + + +class HashingTextEmbedder: + """Deterministic lightweight embedder for tests and CPU smoke runs.""" + + def __init__(self, dimensions: int = 64, normalize: bool = True): + if dimensions <= 0: + raise ValueError("hashing_dimensions must be positive.") + self.dimensions = dimensions + self.normalize = normalize + logger.info( + "Using deterministic hashing embedder with %d dimensions.", dimensions + ) + + def embed_text(self, text: str) -> List[float]: + vectors = self.embed_texts([text]) + if not vectors: + raise ValueError("Cannot embed empty text.") + return vectors[0] + + def embed_texts(self, texts: Sequence[str]) -> List[List[float]]: + return [self._embed(text) for text in texts if text and text.strip()] + + def _embed(self, text: str) -> List[float]: + vector = [0.0] * self.dimensions + tokens = re.findall(r"[A-Za-z0-9]+", text.casefold()) + for token in tokens: + digest = hashlib.blake2b(token.encode("utf-8"), digest_size=8).digest() + bucket = int.from_bytes(digest[:4], "big") % self.dimensions + sign = 1.0 if digest[4] % 2 == 0 else -1.0 + vector[bucket] += sign + if self.normalize: + norm = math.sqrt(sum(value * value for value in vector)) + if norm: + vector = [value / norm for value in vector] + return vector + + +class TextEmbedder: + def __init__(self, config: TextEmbedderConfig): + torch, F, AutoModel, AutoTokenizer = _load_embedding_dependencies() + self._torch = torch + self._functional = F + self.config = config + self.device = torch.device( + "cuda" if config.use_gpu and torch.cuda.is_available() else "cpu" + ) + logger.info( + "Loading embedder model %s on device %s", config.model_name, self.device + ) + self.tokenizer = AutoTokenizer.from_pretrained( + config.model_name, + revision=config.revision, + trust_remote_code=config.trust_remote_code, + ) + self.model = AutoModel.from_pretrained( + config.model_name, + revision=config.revision, + trust_remote_code=config.trust_remote_code, + ).to(self.device) + self.model.eval() + if config.use_fp16 and self.device.type == "cuda": + self.model = self.model.half() + logger.info("Embedder model converted to FP16") + + def embed_text(self, text: str) -> List[float]: + vectors = self.embed_texts([text]) + if not vectors: + raise ValueError("Cannot embed empty text.") + return vectors[0] + + def embed_texts(self, texts: Sequence[str]) -> List[List[float]]: + cleaned = [t.strip() for t in texts if t and t.strip()] + if not cleaned: + return [] + vectors: List[List[float]] = [] + for batch in _batched(cleaned, self.config.batch_size): + enc = self.tokenizer( + batch, + padding=True, + truncation=True, + return_tensors="pt", + max_length=self.config.max_length, + ).to(self.device) + with self._torch.inference_mode(): + outputs = self.model(**enc) + pooled = self._pool(outputs, enc["attention_mask"]) + if self.config.normalize: + pooled = self._functional.normalize(pooled, p=2, dim=1) + vectors.extend(pooled.cpu().tolist()) + return vectors + + def _pool(self, outputs: Any, attention_mask: Any) -> Any: + if self.config.pooling == "cls": + return outputs.last_hidden_state[:, 0, :] + token_embeddings = outputs.last_hidden_state + mask = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float() + summed = self._torch.sum(token_embeddings * mask, dim=1) + counts = self._torch.clamp(mask.sum(dim=1), min=1e-9) + return summed / counts + + +def _batched(items: Sequence[str], batch_size: int) -> Iterable[Sequence[str]]: + if batch_size <= 0: + raise ValueError("batch_size must be positive.") + for i in range(0, len(items), batch_size): + yield items[i : i + batch_size] + + +def build_embedder(config: dict) -> TextEmbedder: + """Construct a TextEmbedder from the ``embedder`` section of a config dict. + + Single source for the embedder wiring previously copy-pasted across main.py + and the index/build-concepts/update-registry CLIs. + """ + embedder_cfg = config.get("embedder", {}) or {} + backend = embedder_cfg.get("backend", "hf") + if backend == "hashing": + return HashingTextEmbedder( + dimensions=int(embedder_cfg.get("hashing_dimensions", 64)), + normalize=bool(embedder_cfg.get("normalize", True)), + ) + if backend != "hf": + raise ValueError(f"Unsupported embedder backend: {backend}") + return TextEmbedder( + TextEmbedderConfig( + backend="hf", + model_name=embedder_cfg.get("model_name", "BAAI/bge-m3"), + revision=embedder_cfg.get("revision"), + trust_remote_code=embedder_cfg.get("trust_remote_code", False), + pooling=embedder_cfg.get("pooling", "mean"), + max_length=embedder_cfg.get("max_length", 512), + batch_size=embedder_cfg.get("batch_size", 32), + use_gpu=embedder_cfg.get("use_gpu", True), + use_fp16=embedder_cfg.get("use_fp16", False), + normalize=embedder_cfg.get("normalize", True), + ) + ) + + +def _load_embedding_dependencies(): + try: + import torch + import torch.nn.functional as F + from transformers import AutoModel, AutoTokenizer + except ImportError as exc: + raise RuntimeError( + "Text embedding requires the ML dependencies. Install them with " + "`uv sync --extra llm` or `pip install 'trialmatchai[llm]'`." + ) from exc + return torch, F, AutoModel, AutoTokenizer diff --git a/source/Matcher/pipeline/__init__.py b/src/trialmatchai/models/llm/__init__.py similarity index 100% rename from source/Matcher/pipeline/__init__.py rename to src/trialmatchai/models/llm/__init__.py diff --git a/src/trialmatchai/models/llm/llm_reranker.py b/src/trialmatchai/models/llm/llm_reranker.py new file mode 100644 index 00000000..55812da7 --- /dev/null +++ b/src/trialmatchai/models/llm/llm_reranker.py @@ -0,0 +1,141 @@ +import math +import re +import unicodedata +from typing import Any, Dict, List, Optional + +from trialmatchai.utils.logging_config import setup_logging +from tqdm import tqdm + +logger = setup_logging(__name__) + + +class LLMReranker: + """vLLM-backed pointwise reranker. + + Scores each (patient, criterion) pair by the model's probability of emitting + "Yes" vs "No" as the next token. Generation is constrained to those two + tokens and their logprobs are read back, so the score is a calibrated + relevance probability. A fine-tuned LoRA adapter is served via vLLM's + LoRARequest (the only LLM backend in TrialMatchAI). + """ + + def __init__( + self, + model_path: str, + adapter_path: Optional[str] = None, + device: Any = 0, # accepted for API compatibility; vLLM manages devices + torch_dtype: Any | None = None, + batch_size: int = 8, + revision: Optional[str] = None, + trust_remote_code: bool = False, + gpu_memory_utilization: float = 0.4, + max_model_len: int = 4096, + max_lora_rank: int = 32, + dtype: str = "auto", + ): + from vllm import LLM, SamplingParams # type: ignore + + try: + from vllm.lora.request import LoRARequest # type: ignore + except ImportError: # pragma: no cover - older vLLM + LoRARequest = None # type: ignore + + self.batch_size = batch_size + enable_lora = bool(adapter_path) and LoRARequest is not None + if adapter_path and not enable_lora: + logger.warning( + "Reranker adapter requested but LoRA is unavailable in this vLLM " + "build; using the base model." + ) + + self.llm = LLM( + model=str(model_path), + revision=revision, + trust_remote_code=trust_remote_code, + enable_lora=enable_lora, + max_lora_rank=max_lora_rank if enable_lora else 16, + gpu_memory_utilization=gpu_memory_utilization, + max_model_len=max_model_len, + dtype=dtype, + ) + self.tokenizer = self.llm.get_tokenizer() + self.lora_request = ( + LoRARequest("reranker_adapter", 1, str(adapter_path)) if enable_lora else None + ) + + self.applicable_token_id, self.not_applicable_token_id = self._yes_no_token_ids() + self.sampling_params = SamplingParams( + temperature=0.0, + max_tokens=1, + logprobs=20, + allowed_token_ids=[self.applicable_token_id, self.not_applicable_token_id], + ) + + def _yes_no_token_ids(self) -> tuple[int, int]: + yes = self.tokenizer("Yes", add_special_tokens=False)["input_ids"] + no = self.tokenizer("No", add_special_tokens=False)["input_ids"] + return yes[0], no[0] + + @staticmethod + def create_messages(patient_text: str, trial_text: str) -> List[Dict]: + system_prompt = ( + "You are a clinical assistant tasked with determining whether the patient information (Statement A) " + "provides enough details to evaluate whether the patient satisfies or violates the clinical " + "trial eligibility criterion (Statement B). Respond with 'Yes' if Statement A contains sufficient " + "information to make this evaluation, or 'No' if it does not." + ) + return [ + {"role": "user", "content": system_prompt}, + {"role": "assistant", "content": " "}, + { + "role": "user", + "content": f"Statement A: {patient_text}\nStatement B: {trial_text}\n\n", + }, + ] + + def preprocess_text(self, text: str) -> str: + text = unicodedata.normalize("NFKD", text) + text = re.sub(r"\s+", " ", text) + return text.strip() + + def _build_prompt(self, patient_text: str, trial_text: str) -> str: + messages = self.create_messages( + self.preprocess_text(patient_text), self.preprocess_text(trial_text) + ) + return self.tokenizer.apply_chat_template( + messages, tokenize=False, add_generation_prompt=True + ) + + def _yes_probability(self, output: Any) -> float: + try: + token_logprobs = output.outputs[0].logprobs[0] + except (AttributeError, IndexError, TypeError): + return 0.0 + yes = token_logprobs.get(self.applicable_token_id) + no = token_logprobs.get(self.not_applicable_token_id) + yes_lp = yes.logprob if yes is not None else float("-inf") + no_lp = no.logprob if no is not None else float("-inf") + highest = max(yes_lp, no_lp) + if highest == float("-inf"): + return 0.0 + ey = math.exp(yes_lp - highest) + en = math.exp(no_lp - highest) + return ey / (ey + en) + + def rank_pairs(self, patient_trial_pairs: List[tuple]) -> List[Dict]: + results: List[Dict] = [] + for start in tqdm( + range(0, len(patient_trial_pairs), self.batch_size), + desc="Reranking batches", + ): + batch = patient_trial_pairs[start : start + self.batch_size] + prompts = [self._build_prompt(p, t) for p, t in batch] + outputs = self.llm.generate( + prompts, self.sampling_params, lora_request=self.lora_request + ) + for output in outputs: + prob = self._yes_probability(output) + results.append( + {"llm_score": prob, "answer": "Yes" if prob > 0.5 else "No"} + ) + return results diff --git a/src/trialmatchai/models/llm/transformers_reranker.py b/src/trialmatchai/models/llm/transformers_reranker.py new file mode 100644 index 00000000..131691e1 --- /dev/null +++ b/src/trialmatchai/models/llm/transformers_reranker.py @@ -0,0 +1,101 @@ +from __future__ import annotations + +import math +from typing import Any, List, Optional + +from tqdm import tqdm + +from trialmatchai.models.llm.llm_reranker import LLMReranker +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +class TransformersReranker: + """CPU-capable next-token Yes/No reranker for smoke tests and small runs.""" + + def __init__( + self, + model_path: str, + *, + device: str = "cpu", + batch_size: int = 8, + revision: Optional[str] = None, + trust_remote_code: bool = False, + ): + try: + import torch + from transformers import AutoModelForCausalLM, AutoTokenizer + except ImportError as exc: # pragma: no cover - optional dependency guard + raise RuntimeError( + "Transformers reranker requires the llm extra " + "(`uv sync --extra llm`)." + ) from exc + + self.torch = torch + self.device = torch.device(device if device != "auto" else "cpu") + self.batch_size = batch_size + self.tokenizer = AutoTokenizer.from_pretrained( + model_path, + revision=revision, + trust_remote_code=trust_remote_code, + ) + if self.tokenizer.pad_token is None: + self.tokenizer.pad_token = self.tokenizer.eos_token + self.model = AutoModelForCausalLM.from_pretrained( + model_path, + revision=revision, + trust_remote_code=trust_remote_code, + ).to(self.device) + self.model.eval() + self.yes_token_id = self._first_token_id(" Yes", "Yes") + self.no_token_id = self._first_token_id(" No", "No") + logger.info("Loaded Transformers reranker %s on %s.", model_path, self.device) + + def _first_token_id(self, preferred: str, fallback: str) -> int: + token_ids = self.tokenizer(preferred, add_special_tokens=False)["input_ids"] + if not token_ids: + token_ids = self.tokenizer(fallback, add_special_tokens=False)["input_ids"] + if not token_ids: + raise ValueError(f"Tokenizer could not encode {fallback!r}.") + return int(token_ids[0]) + + def rank_pairs(self, patient_trial_pairs: List[tuple]) -> List[dict[str, Any]]: + results: List[dict[str, Any]] = [] + for start in tqdm( + range(0, len(patient_trial_pairs), self.batch_size), + desc="CPU reranking batches", + ): + batch = patient_trial_pairs[start : start + self.batch_size] + prompts = [self._build_prompt(patient, trial) for patient, trial in batch] + encoded = self.tokenizer( + prompts, + padding=True, + truncation=True, + return_tensors="pt", + ).to(self.device) + with self.torch.inference_mode(): + outputs = self.model(**encoded) + next_logits = outputs.logits[:, -1, :] + for row in next_logits: + yes_logit = float(row[self.yes_token_id]) + no_logit = float(row[self.no_token_id]) + highest = max(yes_logit, no_logit) + yes = math.exp(yes_logit - highest) + no = math.exp(no_logit - highest) + prob = yes / (yes + no) + results.append( + {"llm_score": prob, "answer": "Yes" if prob > 0.5 else "No"} + ) + return results + + def _build_prompt(self, patient_text: str, trial_text: str) -> str: + messages = LLMReranker.create_messages(patient_text, trial_text) + if getattr(self.tokenizer, "chat_template", None): + return self.tokenizer.apply_chat_template( + messages, tokenize=False, add_generation_prompt=True + ) + return ( + f"{messages[0]['content']}\n\n" + f"{messages[2]['content']}\nAnswer Yes or No:" + ) diff --git a/source/Matcher/models/llm/vllm_loader.py b/src/trialmatchai/models/llm/vllm_loader.py similarity index 75% rename from source/Matcher/models/llm/vllm_loader.py rename to src/trialmatchai/models/llm/vllm_loader.py index 2889d06c..7f4a6ea4 100644 --- a/source/Matcher/models/llm/vllm_loader.py +++ b/src/trialmatchai/models/llm/vllm_loader.py @@ -1,10 +1,10 @@ -# Matcher/models/llm/vllm_loader.py +# trialmatchai/models/llm/vllm_loader.py from __future__ import annotations import os from typing import Optional, Tuple -from Matcher.utils.logging_config import setup_logging +from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) @@ -16,7 +16,7 @@ def _infer_max_ctx_len(model_path: str) -> Optional[int]: try: from transformers import AutoConfig # type: ignore - cfg = AutoConfig.from_pretrained(str(model_path), trust_remote_code=True) + cfg = AutoConfig.from_pretrained(str(model_path), trust_remote_code=False) for k in ( "max_position_embeddings", "max_sequence_length", @@ -61,6 +61,50 @@ def _as_float(x, name: str) -> Optional[float]: raise TypeError(f"{name} must be float-compatible, got {type(x)}: {x!r}") from e +# Process-level cache of built vLLM engines, keyed by the resolved model/adapter +# and engine parameters. The RAG eligibility path builds an engine per patient and +# the query expander builds one too — without this they would each rebuild the +# (multi-GB) CoT engine repeatedly, wasting minutes and risking GPU OOM. With the +# cache, identical (model, adapter, params) requests share a single engine. +_ENGINE_CACHE: dict = {} + + +def free_vllm_engines() -> None: + """Tear down all cached vLLM engines and release GPU memory. + + Call once at the end of a top-level run (after all patients/tracks). Idempotent. + """ + global _ENGINE_CACHE + engines = list(_ENGINE_CACHE.values()) + _ENGINE_CACHE = {} + for engine, _tok, _lora in engines: + try: + del engine + except Exception: + logger.debug("vLLM teardown: engine del failed (ignored)", exc_info=True) + try: + import gc + + gc.collect() + except Exception: + logger.debug("vLLM teardown: gc.collect failed (ignored)", exc_info=True) + try: + from vllm.distributed.parallel_state import ( # type: ignore + destroy_model_parallel, + ) + + destroy_model_parallel() + except Exception: + logger.debug("vLLM teardown: destroy_model_parallel failed (ignored)", exc_info=True) + try: + import torch + + if torch.cuda.is_available(): + torch.cuda.empty_cache() + except Exception: + logger.debug("vLLM teardown: cuda.empty_cache failed (ignored)", exc_info=True) + + def load_vllm_engine( model_config: dict, vllm_cfg: dict | None = None ) -> Tuple[object, Optional[object], Optional[object]]: @@ -124,10 +168,33 @@ def load_vllm_engine( gpu_memory_utilization=gmu, enable_lora=True, # allows dynamic LoRA loading max_lora_rank=max_lora_rank, + trust_remote_code=bool(model_config.get("trust_remote_code", False)), ) + revision = vllm_cfg.get("revision") or model_config.get("base_model_revision") + if revision: + engine_kwargs["revision"] = _as_str(revision, "revision") if requested_len is not None: engine_kwargs["max_model_len"] = requested_len + # Return a cached engine when the same model/adapter/params were already built. + cache_adapter = _as_str( + vllm_cfg.get("adapter_path") or model_config.get("cot_adapter_path"), + "adapter_path", + ) or "" + cache_key = ( + model_path, + cache_adapter, + dtype, + tp, + round(gmu, 4), + str(engine_kwargs.get("max_model_len", "default")), + str(engine_kwargs.get("revision", "")), + ) + cached = _ENGINE_CACHE.get(cache_key) + if cached is not None: + logger.info("[vLLM] Reusing cached engine for model=%s", model_path) + return cached + logger.info( "[vLLM] Initializing engine: model=%s dtype=%s tp=%s max_len=%s gmu=%.2f", model_path, @@ -199,14 +266,13 @@ def load_vllm_engine( logger.debug(f"[vLLM] Second LoRA signature failed: {e2}") try: - # Older versions might have different parameter names - # Some versions might use just name and path + # Some vLLM releases use just name and path. lora_request = LoRARequest(name, adapter_path) # type: ignore # Manually set the ID if the object allows it if hasattr(lora_request, "lora_int_id"): setattr(lora_request, "lora_int_id", adapter_id) logger.info( - "[vLLM] Created LoRA request (legacy): name=%s path=%s", + "[vLLM] Created LoRA request with fallback signature: name=%s path=%s", name, adapter_path, ) @@ -237,4 +303,6 @@ def load_vllm_engine( f"[vLLM] Preload adapter failed (safe to ignore): {e}" ) - return engine, tokenizer, lora_request + result = (engine, tokenizer, lora_request) + _ENGINE_CACHE[cache_key] = result + return result diff --git a/src/trialmatchai/orchestration.py b/src/trialmatchai/orchestration.py new file mode 100644 index 00000000..f2fd4964 --- /dev/null +++ b/src/trialmatchai/orchestration.py @@ -0,0 +1,539 @@ +"""Idempotent end-to-end orchestration for TrialMatchAI. + +Chains the three pipeline stages — ingest patient inputs, build the search +index, run matching — and skips work that is already done: + + * ingest: a patient is skipped if its canonical profile already exists. + * index: a stage is skipped if the search tables already exist. + * match: a patient is skipped if it already has a non-empty ranked_trials.json. + +Both the general ``trialmatchai e2e`` command and the TREC preset are thin +wrappers over these stages, so idempotency behaves identically everywhere. +""" + +from __future__ import annotations + +import json +from pathlib import Path +from typing import Any, Dict, Iterable, Iterator, Sequence + +from trialmatchai.search import LanceDBSearchBackend +from trialmatchai.utils.file_utils import is_valid_json_file, write_json_file +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +# --------------------------------------------------------------------------- # +# Ingest stage +# --------------------------------------------------------------------------- # +def ingest_inputs( + config: Dict[str, Any], + inputs: Sequence[str | Path], + *, + input_format: str = "auto", + with_entities: bool = True, + force: bool = False, +) -> int: + """Import patient inputs (any supported format) into canonical profiles. + + Skips a patient whose profile already exists unless ``force``. Returns the + number of profiles available afterwards. + """ + from trialmatchai.interop.exporters import profile_to_matching_summary + from trialmatchai.interop.importers import import_patient_path + + patient_cfg = config.get("patient_inputs", {}) + profile_dir = Path(patient_cfg.get("profile_dir", "data/patients/profiles")) + summary_dir = Path(patient_cfg.get("summary_dir", "data/patients/summaries")) + profile_dir.mkdir(parents=True, exist_ok=True) + summary_dir.mkdir(parents=True, exist_ok=True) + + entity_annotator = _maybe_entity_annotator(config) if with_entities else None + strict = bool(patient_cfg.get("strict_validation", False)) + + imported = 0 + for raw in inputs: + profiles = import_patient_path( + raw, + input_format=input_format, + entity_annotator=entity_annotator, + strict=strict, + ) + for profile in profiles: + profile_path = profile_dir / f"{profile.patient_id}.json" + if not force and is_valid_json_file(str(profile_path)): + logger.info("Ingest skipped (exists): %s", profile.patient_id) + continue + # Summary first; the profile JSON is written last (atomically) as the + # completion marker, so a crash between them re-imports rather than + # leaving a profile with no summary. + write_json_file( + profile_to_matching_summary(profile), + str(summary_dir / f"{profile.patient_id}.json"), + ) + write_json_file( + profile.model_dump(mode="json", exclude_none=True), + str(profile_path), + ) + imported += 1 + logger.info("Ingested patient %s", profile.patient_id) + + total = len(list(profile_dir.glob("*.json"))) + logger.info("Ingest stage: %s new, %s profiles total", imported, total) + return total + + +def _maybe_entity_annotator(config: Dict[str, Any]): + try: + from trialmatchai.entities import build_entity_annotator + from trialmatchai.models.embedding import build_embedder + + embedder = build_embedder(config) + return build_entity_annotator(config, embedder=embedder) + except Exception as exc: # pragma: no cover - optional model stack + logger.warning("Entity annotation unavailable; ingesting without it: %s", exc) + return None + + +# --------------------------------------------------------------------------- # +# Query-expansion stage (runtime CoT, faithful to legacy keywords.json) +# --------------------------------------------------------------------------- # +def expand_queries(config: Dict[str, Any], *, force: bool = False) -> int: + """Enrich each patient's matching summary via the CoT query expander. + + No-op unless ``query_expansion.enabled``. Loads the model once, enriches + every summary, then frees it before the match stage loads its own model. + Idempotent: a summary already marked ``query_expanded`` is skipped. + """ + from trialmatchai.matching.query_expansion import build_query_expander, enrich_summary + + expander = build_query_expander(config) + if expander is None: + logger.info("Query expansion disabled; using deterministic summaries.") + return 0 + + patient_cfg = config.get("patient_inputs", {}) + profile_dir = Path(patient_cfg.get("profile_dir", "data/patients/profiles")) + summary_dir = Path(patient_cfg.get("summary_dir", "data/patients/summaries")) + enriched = 0 + for profile_path in sorted(profile_dir.glob("*.json")): + pid = profile_path.stem + summary_path = summary_dir / f"{pid}.json" + if not summary_path.exists(): + continue + summary = _read_json(summary_path) + if not force and summary.get("query_expanded"): + continue + profile = _read_json(profile_path) + narrative = [n.get("text", "") for n in profile.get("notes", []) if n.get("text")] + if not narrative: + narrative = list(summary.get("patient_narrative", [])) + expansion = expander.expand(narrative) + merged = enrich_summary(summary, expansion) + merged["query_expanded"] = True + write_json_file(merged, str(summary_path)) + enriched += 1 + logger.info("Query-expanded %s", pid) + + # Release the expander wrapper; its CoT engine stays in the vLLM engine cache + # and is reused by the match stage (shared — a single load, not two). + del expander + logger.info("Query-expansion stage: enriched %s summaries.", enriched) + return enriched + + +# --------------------------------------------------------------------------- # +# Index stage +# --------------------------------------------------------------------------- # +def _read_json(path: Path) -> dict: + return json.loads(path.read_text(encoding="utf-8")) + + +def _iter_trial_docs(folder: Path, nct_filter: set[str] | None) -> Iterator[dict]: + if not folder.exists(): + return + for path in sorted(folder.glob("*.json")): + if nct_filter is not None and path.stem not in nct_filter: + continue + yield _read_json(path) + + +def _iter_criteria_docs(folder: Path, nct_filter: set[str] | None) -> Iterator[dict]: + if not folder.exists(): + return + for subdir in sorted(p for p in folder.iterdir() if p.is_dir()): + if nct_filter is not None and subdir.name not in nct_filter: + continue + for path in sorted(subdir.glob("*.json")): + yield _read_json(path) + + +def build_index( + config: Dict[str, Any], + *, + processed_trials_folder: str | Path = "data/processed_trials", + processed_criteria_folder: str | Path = "data/processed_criteria", + nct_filter: Iterable[str] | None = None, + force: bool = False, +) -> dict[str, Any]: + """Build the LanceDB search tables, optionally restricted to ``nct_filter``. + + Skips when both tables already exist unless ``force``. The backend (and thus + the target db path) comes from ``config['search_backend']``. + """ + backend = LanceDBSearchBackend.from_config(config) + search_cfg = config.get("search_backend", {}) + trials_table = search_cfg.get("trials_table", "trials") + criteria_table = search_cfg.get("criteria_table", "criteria") + + if ( + not force + and backend.table_exists(trials_table) + and backend.table_exists(criteria_table) + ): + logger.info("Index stage skipped: tables already present at %s", backend.db_path) + return {"skipped": True, "db_path": str(backend.db_path)} + + nct_set = set(nct_filter) if nct_filter is not None else None + trial_docs = list(_iter_trial_docs(Path(processed_trials_folder), nct_set)) + if not trial_docs: + raise RuntimeError( + f"No prepared trial documents found in {processed_trials_folder}" + + (f" for {len(nct_set)} filtered NCT ids" if nct_set else "") + ) + n_trials = backend.index_trials(trial_docs, recreate=True) + logger.info("Indexed %s trial documents.", n_trials) + + criteria_docs = list(_iter_criteria_docs(Path(processed_criteria_folder), nct_set)) + if not criteria_docs: + # Refuse to leave an inconsistent index (trials table but no criteria + # table) where `ready_to_match` can never become true. An empty corpus is + # a data error — the corpus is unprepared. + raise RuntimeError( + f"No criteria documents found in {processed_criteria_folder}" + + (f" for the {len(nct_set)} filtered NCT ids" if nct_set else "") + + ". The corpus appears unprepared — run `trialmatchai build` (prepare) first." + ) + n_criteria = backend.index_criteria(criteria_docs, recreate=True) + logger.info("Indexed %s criteria documents.", n_criteria) + + return { + "skipped": False, + "db_path": str(backend.db_path), + "trials": n_trials, + "criteria": n_criteria, + } + + +# --------------------------------------------------------------------------- # +# Match stage +# --------------------------------------------------------------------------- # +def count_pending(config: Dict[str, Any]) -> tuple[int, int]: + """Return (pending, done) patient counts for the configured dirs.""" + patient_cfg = config.get("patient_inputs", {}) + profile_dir = Path(patient_cfg.get("profile_dir", "data/patients/profiles")) + output_dir = Path(config["paths"]["output_dir"]) + pending = done = 0 + for profile_path in sorted(profile_dir.glob("*.json")): + ranked = output_dir / profile_path.stem / "ranked_trials.json" + if is_valid_json_file(str(ranked)): + done += 1 + else: + pending += 1 + return pending, done + + +def run_matching( + config: Dict[str, Any], + *, + resume: bool = True, + force: bool = False, +) -> int: + """Run the matching pipeline with per-patient resume. + + When resuming, the expensive model stack is not even loaded if every patient + is already done. + """ + use_resume = resume and not force + if use_resume: + pending, done = count_pending(config) + if pending == 0: + logger.info("Match stage skipped: all %s patient(s) already matched.", done) + return 0 + logger.info("Match stage: %s pending, %s already done.", pending, done) + # Imported lazily so the convert/index stages (and the CPU-only --index-only + # path) do not pull in the heavy model stack that main.py imports. + from trialmatchai.main import main_pipeline + + return main_pipeline(config=config, resume=use_resume) + + +# --------------------------------------------------------------------------- # +# Full e2e +# --------------------------------------------------------------------------- # +def free_models() -> None: + """Release cached GPU model engines. Call at the end of a top-level run.""" + try: + from trialmatchai.models.llm.vllm_loader import free_vllm_engines + + free_vllm_engines() + except Exception as exc: # pragma: no cover - teardown is best-effort + logger.debug("free_models: %s", exc) + + +def run_e2e( + config: Dict[str, Any], + inputs: Sequence[str | Path], + *, + input_format: str = "auto", + with_entities: bool = True, + processed_trials_folder: str | Path = "data/processed_trials", + processed_criteria_folder: str | Path = "data/processed_criteria", + nct_filter: Iterable[str] | None = None, + force_reingest: bool = False, + force_reindex: bool = False, + force_rematch: bool = False, +) -> int: + """Run-half of the unified pipeline (slice index -> ingest -> expand -> match). + + A thin preset over ``run_pipeline`` (index..match): index/ingest/expand/match + are idempotent so this resumes from any state, and GPU models are freed once. + """ + from trialmatchai.pipeline import StageContext, run_pipeline + + force: set[str] = set() + if force_reingest: + force.add("ingest") + if force_reindex: + force.add("index") + if force_rematch: + force.update({"expand", "match"}) + ctx = StageContext( + config=config, + processed_trials_folder=Path(processed_trials_folder), + processed_criteria_folder=Path(processed_criteria_folder), + inputs=list(inputs), + input_format=input_format, + with_entities=with_entities, + nct_filter=set(nct_filter) if nct_filter is not None else None, + force=force, + ) + return run_pipeline(ctx, from_stage="index", to_stage="match") + + +# --------------------------------------------------------------------------- # +# Build (setup half): prepare -> index, resumable, with a build manifest +# --------------------------------------------------------------------------- # +def _now_iso() -> str: + from datetime import datetime, timezone + + return datetime.now(timezone.utc).isoformat() + + +def _manifest_path(processed_trials_folder: str | Path) -> Path: + return Path(processed_trials_folder).parent / ".trialmatchai_build.json" + + +def _load_manifest(path: Path) -> dict: + try: + return json.loads(Path(path).read_text(encoding="utf-8")) + except Exception: + return {} + + +def _save_manifest(path: Path, manifest: dict) -> None: + write_json_file(manifest, str(path)) + + +def _count_json(folder: Path) -> int: + return len(list(folder.glob("*.json"))) if folder.exists() else 0 + + +def _count_subdirs(folder: Path) -> int: + return sum(1 for p in folder.iterdir() if p.is_dir()) if folder.exists() else 0 + + +def prepare_corpus( + config: Dict[str, Any], + *, + trials_json_folder: str | Path, + processed_trials_folder: str | Path, + processed_criteria_folder: str | Path, + force: bool = False, + log_every: int = 500, +) -> dict[str, int]: + """Embed + annotate normalized trial JSONs into processed_*; resumable. + + Streams one trial at a time (bounded memory), skips trials already prepared + so an interrupted build picks up where it left off, and isolates per-trial + failures so one bad document cannot abort the whole corpus. + """ + trials_json_folder = Path(trials_json_folder) + processed_trials_folder = Path(processed_trials_folder) + processed_criteria_folder = Path(processed_criteria_folder) + + all_paths = sorted(trials_json_folder.glob("*.json")) + if not all_paths: + raise RuntimeError(f"No trial JSON files found to prepare in {trials_json_folder}") + + pending = [ + p + for p in all_paths + if force + or not is_valid_json_file(str(processed_trials_folder / f"{p.stem}.json")) + ] + skipped = len(all_paths) - len(pending) + logger.info( + "Prepare: %s trials total, %s already prepared, %s to process.", + len(all_paths), + skipped, + len(pending), + ) + if not pending: + return {"total": len(all_paths), "prepared": 0, "skipped": skipped, "failed": 0} + + from trialmatchai.entities import build_entity_annotator + from trialmatchai.models.embedding import build_embedder + from trialmatchai.registry.preparation import ( + prepare_criteria_documents, + prepare_trial_document, + write_prepared_criteria, + write_prepared_trial, + ) + + processed_trials_folder.mkdir(parents=True, exist_ok=True) + processed_criteria_folder.mkdir(parents=True, exist_ok=True) + embedder = build_embedder(config) + entity_annotator = build_entity_annotator(config, embedder=embedder) + + prepared = failed = 0 + for i, path in enumerate(pending, start=1): + try: + doc = _read_json(path) + trial_row = prepare_trial_document(doc, embedder) + criteria_rows = prepare_criteria_documents( + doc, embedder, entity_annotator=entity_annotator + ) + # Write criteria first; the trial JSON is written last and is the + # per-trial completion marker the resume check keys on — so an + # interrupted trial (criteria written, trial not) is re-processed + # rather than wrongly skipped. + write_prepared_criteria(criteria_rows, processed_criteria_folder) + write_prepared_trial(trial_row, processed_trials_folder) + prepared += 1 + except Exception: + failed += 1 + logger.exception("Prepare failed for %s (continuing)", path.name) + if i % log_every == 0: + logger.info("Prepare progress: %s/%s done, %s failed.", i, len(pending), failed) + + logger.info( + "Prepare complete: %s prepared, %s skipped, %s failed.", prepared, skipped, failed + ) + return {"total": len(all_paths), "prepared": prepared, "skipped": skipped, "failed": failed} + + +def build_state( + config: Dict[str, Any], + *, + processed_trials_folder: str | Path = "data/processed_trials", + processed_criteria_folder: str | Path = "data/processed_criteria", +) -> dict: + """Report what the build half has produced — used by `build --status`.""" + pt = Path(processed_trials_folder) + pc = Path(processed_criteria_folder) + search_cfg = config.get("search_backend", {}) + backend = LanceDBSearchBackend.from_config(config) + trials_table = backend.table_exists(search_cfg.get("trials_table", "trials")) + criteria_table = backend.table_exists(search_cfg.get("criteria_table", "criteria")) + linker = config.get("concept_linker", {}) + concepts_path = Path(linker.get("db_path", "data/concepts")) + concepts_present = concepts_path.exists() and any(concepts_path.iterdir()) + return { + "processed_trials": {"folder": str(pt), "count": _count_json(pt)}, + "processed_criteria": {"folder": str(pc), "count": _count_subdirs(pc)}, + "index": { + "db_path": str(backend.db_path), + "trials_table": trials_table, + "criteria_table": criteria_table, + }, + "concepts": {"db_path": str(concepts_path), "present": bool(concepts_present)}, + "ready_to_match": bool(trials_table and criteria_table), + } + + +def build_system( + config: Dict[str, Any], + *, + trials_json_folder: str | Path | None = None, + processed_trials_folder: str | Path = "data/processed_trials", + processed_criteria_folder: str | Path = "data/processed_criteria", + force_prepare: bool = False, + force_reindex: bool = False, +) -> dict: + """Run the setup half (prepare -> index), idempotent, with a manifest. + + Each stage is resumable and recorded in ``.trialmatchai_build.json`` next to + the processed data, so a disrupted build can be re-run and continues from the + last completed work. + """ + paths = config.get("paths", {}) + trials_json_folder = Path(trials_json_folder or paths.get("trials_json_folder", "data/trials_jsons")) + pt = Path(processed_trials_folder) + pc = Path(processed_criteria_folder) + manifest_path = _manifest_path(pt) + manifest = _load_manifest(manifest_path) + manifest["started_at"] = _now_iso() + + # Stage 1 — prepare embeddings/entities (resumable, GPU). + have_prepared = _count_json(pt) > 0 + have_source = trials_json_folder.exists() and any(trials_json_folder.glob("*.json")) + logger.info("=== build: prepare stage ===") + if have_source: + # prepare_corpus internally skips already-prepared trials, so calling it + # whenever source exists safely resumes without redoing finished work. + stats = prepare_corpus( + config, + trials_json_folder=trials_json_folder, + processed_trials_folder=pt, + processed_criteria_folder=pc, + force=force_prepare, + ) + manifest["prepare"] = {**stats, "completed_at": _now_iso()} + elif have_prepared: + logger.info("Prepare skipped: %s already populated (no trials_jsons source).", pt) + manifest["prepare"] = {"skipped_existing": True, "completed_at": _now_iso()} + else: + raise RuntimeError( + f"Nothing to prepare: {pt} is empty and no trial JSONs at " + f"{trials_json_folder}. Run `trialmatchai bootstrap-data` or provide " + "normalized trial JSONs." + ) + _save_manifest(manifest_path, manifest) + + # Stage 2 — build the LanceDB search index (idempotent). + logger.info("=== build: index stage ===") + index_info = build_index( + config, + processed_trials_folder=pt, + processed_criteria_folder=pc, + force=force_reindex, + ) + manifest["index"] = {**index_info, "completed_at": _now_iso()} + _save_manifest(manifest_path, manifest) + + state = build_state( + config, + processed_trials_folder=pt, + processed_criteria_folder=pc, + ) + manifest["state"] = state + manifest["completed_at"] = _now_iso() + _save_manifest(manifest_path, manifest) + logger.info( + "Build complete — ready_to_match=%s. Manifest: %s", + state["ready_to_match"], + manifest_path, + ) + return manifest diff --git a/src/trialmatchai/pipeline.py b/src/trialmatchai/pipeline.py new file mode 100644 index 00000000..d11786ad --- /dev/null +++ b/src/trialmatchai/pipeline.py @@ -0,0 +1,211 @@ +"""The single TrialMatchAI pipeline: an ordered registry of idempotent stages. + +Every command is a *slice* of this one pipeline. Each stage wraps an +already-idempotent orchestration function (it internally skips work that is done), +so the driver only decides **which** stages to run from the user's selection +(`--only` / `--skip` / `--from` / `--to`) and which to **force** (`--force`). + +Because each stage is idempotent, running the whole pipeline from any starting +state "just works": finished stages are cheap no-ops, unfinished ones run. That is +the "one e2e workflow, maximally modular, never redo finished work" contract — a +stage is the unit of modularity, and the e2e run is simply "run every stage". +""" + +from __future__ import annotations + +from dataclasses import dataclass, field +from pathlib import Path +from typing import Any, Callable, Iterable, Sequence + +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +@dataclass +class StageContext: + """Everything the stages need, resolved once and threaded through the run.""" + + config: dict[str, Any] + trials_json_folder: Path | None = None + processed_trials_folder: Path = Path("data/processed_trials") + processed_criteria_folder: Path = Path("data/processed_criteria") + inputs: list[str] = field(default_factory=list) + input_format: str = "auto" + with_entities: bool = True + nct_filter: set[str] | None = None + concepts: str | None = None # "open" -> build the open concept store + concept_csv: str | None = None + synonym_csv: str | None = None + qrels: dict | None = None # provided by the TREC preset -> enables eval + results_dir: Path | None = None + force: set[str] = field(default_factory=set) + + def forced(self, name: str) -> bool: + return name in self.force or "all" in self.force + + +# --------------------------------------------------------------------------- # +# Stage run wrappers — each delegates to an existing idempotent function. +# --------------------------------------------------------------------------- # +def _run_prepare(ctx: StageContext) -> None: + from trialmatchai.orchestration import prepare_corpus + + trials_json = ctx.trials_json_folder or ctx.config["paths"]["trials_json_folder"] + prepare_corpus( + ctx.config, + trials_json_folder=trials_json, + processed_trials_folder=ctx.processed_trials_folder, + processed_criteria_folder=ctx.processed_criteria_folder, + force=ctx.forced("prepare"), + ) + + +def _run_concepts(ctx: StageContext) -> None: + if not ctx.concepts and not ctx.concept_csv: + logger.info( + "concepts: not requested (pass concepts='open' and/or a concept_csv); skipping." + ) + return + from trialmatchai.cli.build_concepts import run_build_concepts + + run_build_concepts( + ctx.config, + sources=ctx.concepts, + concept_csv=ctx.concept_csv, + synonym_csv=ctx.synonym_csv, + force=ctx.forced("concepts"), + ) + + +def _run_index(ctx: StageContext) -> None: + from trialmatchai.orchestration import build_index + + build_index( + ctx.config, + processed_trials_folder=ctx.processed_trials_folder, + processed_criteria_folder=ctx.processed_criteria_folder, + nct_filter=ctx.nct_filter, + force=ctx.forced("index"), + ) + + +def _run_ingest(ctx: StageContext) -> None: + if not ctx.inputs: + logger.info("ingest: no inputs given; skipping (using already-imported profiles).") + return + from trialmatchai.orchestration import ingest_inputs + + ingest_inputs( + ctx.config, + ctx.inputs, + input_format=ctx.input_format, + with_entities=ctx.with_entities, + force=ctx.forced("ingest"), + ) + + +def _run_expand(ctx: StageContext) -> None: + from trialmatchai.orchestration import expand_queries + + expand_queries(ctx.config, force=ctx.forced("expand")) + + +def _run_match(ctx: StageContext) -> None: + from trialmatchai.orchestration import run_matching + + rc = run_matching(ctx.config, resume=True, force=ctx.forced("match")) + if rc != 0: + raise RuntimeError(f"match stage returned exit code {rc}") + + +def _run_eval(ctx: StageContext) -> None: + if ctx.qrels is None: + logger.info("eval: no qrels provided; skipping (not a benchmark run).") + return + from trialmatchai.trec import qrels as qrels_mod + from trialmatchai.utils.file_utils import write_json_file + + results_dir = Path(ctx.results_dir or ctx.config["paths"]["output_dir"]) + metrics = qrels_mod.evaluate(ctx.qrels, results_dir) + write_json_file(metrics, str(results_dir / "evaluation_metrics.json")) + logger.info("eval: %s", metrics.get("mean")) + + +@dataclass(frozen=True) +class Stage: + name: str + run: Callable[[StageContext], None] + help: str + + +# The canonical ordered pipeline. (acquire/fetch live in bootstrap-data / +# update-registry today; they will join this registry as `fetch` is unified.) +STAGES: tuple[Stage, ...] = ( + Stage("prepare", _run_prepare, "embed + entity-annotate the trial corpus"), + Stage("concepts", _run_concepts, "build the entity-linking concept store"), + Stage("index", _run_index, "build the LanceDB search tables"), + Stage("ingest", _run_ingest, "import patient inputs into canonical profiles"), + Stage("expand", _run_expand, "CoT query expansion of patient summaries"), + Stage("match", _run_match, "retrieval + reranking + CoT eligibility + ranking"), + Stage("eval", _run_eval, "score results against qrels (benchmark runs)"), +) +STAGE_NAMES: tuple[str, ...] = tuple(s.name for s in STAGES) + + +def _validate(names: Iterable[str]) -> None: + bad = sorted(set(names) - set(STAGE_NAMES)) + if bad: + raise ValueError(f"unknown stage(s) {bad}; valid stages: {list(STAGE_NAMES)}") + + +def select_stages( + *, + only: Sequence[str] | None = None, + skip: Sequence[str] = (), + from_stage: str | None = None, + to_stage: str | None = None, +) -> list[Stage]: + """Resolve the user's selection into an ordered list of stages to run.""" + if only: + _validate(only) + chosen = set(only) + return [s for s in STAGES if s.name in chosen] + + for endpoint in (from_stage, to_stage): + if endpoint is not None: + _validate([endpoint]) + _validate(skip) + + start = STAGE_NAMES.index(from_stage) if from_stage else 0 + end = STAGE_NAMES.index(to_stage) + 1 if to_stage else len(STAGES) + if start > end - 1: + raise ValueError(f"--from {from_stage} is after --to {to_stage}") + skipped = set(skip) + return [s for s in STAGES[start:end] if s.name not in skipped] + + +def run_pipeline( + ctx: StageContext, + *, + only: Sequence[str] | None = None, + skip: Sequence[str] = (), + from_stage: str | None = None, + to_stage: str | None = None, +) -> int: + """Run the selected pipeline slice, freeing GPU models once at the end.""" + stages = select_stages(only=only, skip=skip, from_stage=from_stage, to_stage=to_stage) + if not stages: + logger.warning("No stages selected; nothing to do.") + return 0 + logger.info("Pipeline: %s", " -> ".join(s.name for s in stages)) + try: + for stage in stages: + logger.info("================ stage: %s ================", stage.name) + stage.run(ctx) + finally: + from trialmatchai.orchestration import free_models + + free_models() + logger.info("Pipeline complete: %s", " -> ".join(s.name for s in stages)) + return 0 diff --git a/src/trialmatchai/registry/__init__.py b/src/trialmatchai/registry/__init__.py new file mode 100644 index 00000000..c15403f0 --- /dev/null +++ b/src/trialmatchai/registry/__init__.py @@ -0,0 +1,13 @@ +from trialmatchai.registry.clinicaltrials_gov import ClinicalTrialsGovClient +from trialmatchai.registry.defaults import DEFAULT_REGISTRY_KEYWORDS +from trialmatchai.registry.normalization import normalize_study +from trialmatchai.registry.updater import RegistryUpdateConfig, RegistryUpdateReport, RegistryUpdater + +__all__ = [ + "ClinicalTrialsGovClient", + "DEFAULT_REGISTRY_KEYWORDS", + "RegistryUpdateConfig", + "RegistryUpdateReport", + "RegistryUpdater", + "normalize_study", +] diff --git a/src/trialmatchai/registry/clinicaltrials_gov.py b/src/trialmatchai/registry/clinicaltrials_gov.py new file mode 100644 index 00000000..303cdba3 --- /dev/null +++ b/src/trialmatchai/registry/clinicaltrials_gov.py @@ -0,0 +1,187 @@ +from __future__ import annotations + +import time +from collections.abc import Iterator, Sequence +from dataclasses import dataclass, field +from datetime import date +from typing import Any + +import requests +from tenacity import ( + retry, + retry_if_exception_type, + stop_after_attempt, + wait_exponential_jitter, +) + +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +class RegistrySourceError(RuntimeError): + pass + + +class TransientRegistrySourceError(RegistrySourceError): + pass + + +@dataclass +class ClinicalTrialsGovClient: + base_url: str = "https://clinicaltrials.gov/api/v2/studies" + timeout: float = 30.0 + rate_limit_per_second: float = 2.0 + session: requests.Session = field(default_factory=requests.Session) + page_size: int = 100 + + def __post_init__(self) -> None: + if self.page_size < 1 or self.page_size > 1000: + raise ValueError("page_size must be between 1 and 1000.") + if self.rate_limit_per_second <= 0: + raise ValueError("rate_limit_per_second must be positive.") + self._last_request_at = 0.0 + + def iter_studies( + self, + *, + keyword: str, + statuses: Sequence[str] = (), + since: date | None = None, + max_studies: int | None = None, + ) -> Iterator[dict[str, Any]]: + """Yield studies for one ClinicalTrials.gov keyword query. + + The v2 API returns `studies` plus an optional `nextPageToken`. Date + filtering is intentionally post-fetch here because the upstream API has + changed filter names before; keeping it local makes the source client + easier to harden and test. + """ + yielded = 0 + page_token: str | None = None + status_filter = tuple(status for status in statuses if status) + while True: + payload = self._fetch_page( + keyword=keyword, + statuses=status_filter, + page_token=page_token, + ) + studies = payload.get("studies") or [] + if not isinstance(studies, list): + raise RegistrySourceError("ClinicalTrials.gov returned non-list studies.") + for study in studies: + if not isinstance(study, dict): + continue + if since is not None and not _study_updated_since(study, since): + continue + yield study + yielded += 1 + if max_studies is not None and yielded >= max_studies: + return + page_token = payload.get("nextPageToken") + if not page_token: + return + + def _fetch_page( + self, + *, + keyword: str, + statuses: Sequence[str], + page_token: str | None, + ) -> dict[str, Any]: + params: dict[str, Any] = { + "format": "json", + "pageSize": self.page_size, + "query.term": keyword, + } + if statuses: + params["filter.overallStatus"] = ",".join(statuses) + if page_token: + params["pageToken"] = page_token + return self._get_json(params) + + @retry( + retry=retry_if_exception_type( + (requests.Timeout, requests.ConnectionError, TransientRegistrySourceError) + ), + wait=wait_exponential_jitter(initial=0.5, max=8), + stop=stop_after_attempt(4), + reraise=True, + ) + def _get_json(self, params: dict[str, Any]) -> dict[str, Any]: + self._throttle() + try: + response = self.session.get( + self.base_url, + params=params, + timeout=self.timeout, + headers={"Accept": "application/json"}, + ) + except (requests.Timeout, requests.ConnectionError): + raise + except requests.RequestException as exc: + raise RegistrySourceError(f"ClinicalTrials.gov request failed: {exc}") from exc + + if response.status_code in {408, 425, 429, 500, 502, 503, 504}: + raise TransientRegistrySourceError( + f"ClinicalTrials.gov transient HTTP {response.status_code}" + ) + try: + response.raise_for_status() + except requests.HTTPError as exc: + raise RegistrySourceError( + f"ClinicalTrials.gov HTTP {response.status_code}: {response.text[:300]}" + ) from exc + payload = response.json() + if not isinstance(payload, dict): + raise RegistrySourceError("ClinicalTrials.gov returned non-object JSON.") + return payload + + def _throttle(self) -> None: + minimum_gap = 1.0 / self.rate_limit_per_second + now = time.monotonic() + elapsed = now - self._last_request_at + if elapsed < minimum_gap: + time.sleep(minimum_gap - elapsed) + self._last_request_at = time.monotonic() + + +def _study_updated_since(study: dict[str, Any], since: date) -> bool: + updated = _last_update_date(study) + return updated is None or updated >= since + + +def _last_update_date(study: dict[str, Any]) -> date | None: + protocol = study.get("protocolSection") if isinstance(study, dict) else None + if not isinstance(protocol, dict): + return None + status = protocol.get("statusModule") + if not isinstance(status, dict): + return None + for key in ( + "lastUpdatePostDateStruct", + "lastUpdateSubmitDateStruct", + "studyFirstPostDateStruct", + ): + value = status.get(key) + if isinstance(value, dict): + parsed = _parse_date(value.get("date")) + if parsed is not None: + return parsed + return None + + +def _parse_date(value: Any) -> date | None: + if not value: + return None + text = str(value) + try: + if len(text) == 4: + return date(int(text), 1, 1) + if len(text) == 7: + year, month = text.split("-", 1) + return date(int(year), int(month), 1) + return date.fromisoformat(text[:10]) + except ValueError: + logger.warning("Could not parse ClinicalTrials.gov date: %s", text) + return None diff --git a/src/trialmatchai/registry/criteria_chunking.py b/src/trialmatchai/registry/criteria_chunking.py new file mode 100644 index 00000000..5ce7f0a7 --- /dev/null +++ b/src/trialmatchai/registry/criteria_chunking.py @@ -0,0 +1,229 @@ +"""Eligibility-criteria chunking. + +Splits a free-text eligibility section into individual, typed criteria. This +folds the domain knowledge from the legacy regex preprocessor — multi-level +enumeration hierarchies, varied inclusion/exclusion headers, parenthetical +protection, semicolon splitting, long-criterion full-stop re-splitting, and +decimal/abbreviation split-exceptions — into one streamlined pass over the text, +so chunk boundaries match the legacy pipeline. + +Public API: ``split_eligibility_criteria(text) -> list[{"type", "criterion"}]`` +where ``type`` is "inclusion", "exclusion", or "unknown". +""" + +from __future__ import annotations + +import re + +# --- Header detection ------------------------------------------------------- +# A line is a section header when, reduced to alpha words, it is essentially the +# inclusion/exclusion label (with optional qualifiers / "for "), or it +# is a "...the following inclusion/exclusion criteria" lead-in. This is precise +# enough not to misfire on a real criterion that merely mentions "inclusion". +_HEADER_CORE = re.compile( + r"^(?:key|main|general|principal|primary|additional|specific|major)?\s*" + r"(inclusion|exclusion)(?:\s+criteria)?(?:\s+for\s+.+)?$" +) +_HEADER_FOLLOWING = re.compile(r"following\s+(inclusion|exclusion)\s+criteria") + +# A header that begins a line and may be followed (after a colon) by inline +# criteria, e.g. "Exclusion Criteria: 1. Pregnancy 2. Active infection". +_LEADING_HEADER = re.compile( + r"^\s*(?:key|main|general|principal|primary|additional|specific|major)?\s*" + r"(inclusion|exclusion)(?:\s+criteria)?\s*:\s*(.*)$", + re.IGNORECASE, +) + +# --- Enumeration markers ---------------------------------------------------- +# A leading list marker at the start of a line. Numeric markers REQUIRE a +# trailing "." or ")" so a bare "18 years" is not mistaken for item 18, and the +# mandatory trailing whitespace means "e.g." / "i.e." are not treated as markers. +_LEADING_MARKER = re.compile( + r"^\s*(?:" + r"[-–—*•·]" # - – — * • · + r"|\(?[0-9]{1,2}(?:\.[0-9]{1,2}){1,3}[.)]?" # multi-level: 1.2 1.2.3 1.2. + r"|\(?[0-9]{1,2}[.)]" # single: 1. 1) + r"|\([0-9]{1,2}\)" # (1) + r"|\([a-zA-Z]\)" # (a) + r"|\(?(?:i{1,3}|iv|v|vi{0,3}|ix|x)[.)]" # roman i. ii) (iv) + r"|[a-zA-Z][.)]" # a. b) + r")\s+" +) + +# Mid-line marker (preceded and followed by whitespace) — used to split several +# criteria packed onto one line. +_MIDLINE_MARKER = re.compile( + r"\s(" + r"[0-9]{1,2}(?:\.[0-9]{1,2}){0,3}[.)]" + r"|\([0-9a-zA-Z]{1,3}\)" + r"|[a-z][.)]" + r"|[-–—•*]" + r")\s" +) + + +def detect_header(line: str) -> str | None: + """Return 'inclusion'/'exclusion' if the line is a section header, else None.""" + stripped = line.strip().rstrip(":").strip() + core = re.sub(r"[^a-z ]+", " ", stripped.casefold()) + core = re.sub(r"\s+", " ", core).strip() + if not core: + return None + match = _HEADER_CORE.match(core) + if match: + return match.group(1) + match = _HEADER_FOLLOWING.search(core) + if match: + return match.group(1) + return None + + +def _mask_parens(text: str) -> str: + """Blank out parenthesized spans so markers inside them are not split points.""" + out = list(text) + depth = 0 + for i, char in enumerate(text): + if char in "([{": + depth += 1 + out[i] = " " + elif char in ")]}": + depth = max(0, depth - 1) + out[i] = " " + elif depth > 0: + out[i] = " " + return "".join(out) + + +def _split_inline(line: str) -> list[str]: + """Split a line into segments at mid-line enumeration markers (paren-safe).""" + masked = _mask_parens(line) + cut_points = [0] + for match in _MIDLINE_MARKER.finditer(masked): + start = match.start(1) + if start > 0: + cut_points.append(start) + cut_points = sorted(set(cut_points)) + segments = [ + line[cut_points[i] : cut_points[i + 1]] for i in range(len(cut_points) - 1) + ] + segments.append(line[cut_points[-1] :]) + return segments + + +def _starts_new_criterion(line: str) -> bool: + return bool(_LEADING_MARKER.match(line)) + + +def _strip_marker(line: str) -> str: + return _LEADING_MARKER.sub("", line, count=1) + + +def _clean(text: str) -> str: + cleaned = re.sub(r"\s+", " ", text).strip(" :-\t") + if detect_header(cleaned): + return "" + return cleaned + + +def _is_useful(text: str) -> bool: + return len(text) >= 3 and detect_header(text) is None + + +# --- Secondary splits (faithful to the legacy preprocessor) ----------------- +# Each assembled criterion is further split on semicolons that fall outside +# parentheses, and any resulting criterion longer than this many characters is +# split into sentences on real full stops (decimal- and abbreviation-aware) — +# matching the legacy split_lines_on_semicolon and split_large_sentences / +# split_on_full_stops, so chunk boundaries stay identical to main. +_LONG_CRITERION_CHARS = 200 +_FULLSTOP_SPLIT = re.compile(r"(? list[str]: + """Split on semicolons not enclosed in parentheses/brackets.""" + masked = _mask_parens(text) # in-paren chars (incl. ';') become spaces + parts: list[str] = [] + last = 0 + for i, char in enumerate(masked): + if char == ";": + parts.append(text[last:i]) + last = i + 1 + parts.append(text[last:]) + return [p.strip() for p in parts if p.strip()] + + +def _split_long_criterion(text: str) -> list[str]: + """Split a long (>200 char) criterion into sentences; short text passes through.""" + if len(text) <= _LONG_CRITERION_CHARS: + return [text] + sentences = [s.strip() for s in _FULLSTOP_SPLIT.split(text) if s.strip()] + return sentences or [text] + + +def _emit(text: str, criterion_type: str, entries: list[dict[str, str]]) -> None: + """Clean, semicolon-split, long-criterion-split, filter, and append criteria.""" + cleaned = _clean(text) + if not cleaned: + return + for part in _split_semicolons(cleaned): + for sentence in _split_long_criterion(part): + sentence = sentence.strip(" :-\t") + if _is_useful(sentence): + entries.append({"type": criterion_type, "criterion": sentence}) + + +def split_eligibility_criteria(text: str) -> list[dict[str, str]]: + if not text or not text.strip(): + return [] + + current_type = "unknown" + entries: list[dict[str, str]] = [] + buffered: list[str] = [] + + def flush() -> None: + if not buffered: + return + text = " ".join(buffered) + buffered.clear() + _emit(text, current_type, entries) + + for raw_line in text.splitlines(): + line = raw_line.strip() + if not line: + flush() + continue + + # A header at the start of the line sets the section type. If the colon + # form carries inline criteria after it, process the remainder below. + leading = _LEADING_HEADER.match(line) + if leading: + flush() + current_type = leading.group(1).lower() + remainder = leading.group(2).strip() + if not remainder: + continue + line = remainder + else: + header = detect_header(line) + if header: + flush() + current_type = header + continue + + for segment in _split_inline(line): + segment = segment.strip() + if not segment: + continue + if _starts_new_criterion(segment): + flush() + buffered.append(_strip_marker(segment)) + else: + buffered.append(segment) + + flush() + if entries: + return entries + + # Unstructured text (no markers/headers): still semicolon/long-split it. + _emit(text, "unknown", entries) + return entries diff --git a/src/trialmatchai/registry/defaults.py b/src/trialmatchai/registry/defaults.py new file mode 100644 index 00000000..6ee073f3 --- /dev/null +++ b/src/trialmatchai/registry/defaults.py @@ -0,0 +1,20 @@ +from __future__ import annotations + +DEFAULT_REGISTRY_KEYWORDS: tuple[str, ...] = ( + "cancer OR oncology OR neoplasm OR tumor", + "heart failure OR coronary artery disease OR atrial fibrillation", + "stroke OR Parkinson disease OR Alzheimer disease OR epilepsy", + "rare disease OR orphan disease", + "autoimmune disease OR immunotherapy OR inflammatory disease", + "COVID-19 OR HIV OR tuberculosis OR infectious disease", + "diabetes OR obesity OR metabolic syndrome", + "leukemia OR lymphoma OR anemia OR hematology", + "pediatric OR children OR adolescent", + "precision medicine OR genomic OR biomarker", +) + +DEFAULT_REGISTRY_STATUSES: tuple[str, ...] = ( + "RECRUITING", + "NOT_YET_RECRUITING", + "ACTIVE_NOT_RECRUITING", +) diff --git a/src/trialmatchai/registry/manifest.py b/src/trialmatchai/registry/manifest.py new file mode 100644 index 00000000..192f3eb0 --- /dev/null +++ b/src/trialmatchai/registry/manifest.py @@ -0,0 +1,55 @@ +from __future__ import annotations + +import hashlib +import json +from dataclasses import asdict, dataclass +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + + +@dataclass(frozen=True) +class ManifestRecord: + nct_id: str + source_url: str + source_hash: str + fetched_at: str + last_update_posted: str | None + processing_status: str + error_summary: str | None = None + + +class RegistryManifest: + def __init__(self, path: str | Path) -> None: + self.path = Path(path) + + def load_latest(self) -> dict[str, ManifestRecord]: + latest: dict[str, ManifestRecord] = {} + if not self.path.exists(): + return latest + with self.path.open("r", encoding="utf-8") as handle: + for line in handle: + line = line.strip() + if not line: + continue + try: + raw = json.loads(line) + record = ManifestRecord(**raw) + except (TypeError, ValueError, json.JSONDecodeError): + continue + latest[record.nct_id] = record + return latest + + def append(self, record: ManifestRecord) -> None: + self.path.parent.mkdir(parents=True, exist_ok=True) + with self.path.open("a", encoding="utf-8") as handle: + handle.write(json.dumps(asdict(record), sort_keys=True) + "\n") + + +def source_hash(payload: dict[str, Any]) -> str: + encoded = json.dumps(payload, sort_keys=True, separators=(",", ":"), default=str) + return hashlib.sha256(encoded.encode("utf-8")).hexdigest() + + +def utc_now_iso() -> str: + return datetime.now(timezone.utc).replace(microsecond=0).isoformat() diff --git a/src/trialmatchai/registry/normalization.py b/src/trialmatchai/registry/normalization.py new file mode 100644 index 00000000..95055ee0 --- /dev/null +++ b/src/trialmatchai/registry/normalization.py @@ -0,0 +1,140 @@ +from __future__ import annotations + +import re +from typing import Any + +from trialmatchai.registry.criteria_chunking import split_eligibility_criteria + +__all__ = ["normalize_study", "split_eligibility_criteria"] + + +def normalize_study(study: dict[str, Any]) -> dict[str, Any]: + """Normalize a ClinicalTrials.gov v2 study into TrialMatchAI trial JSON.""" + protocol = _mapping(study.get("protocolSection")) + identification = _mapping(protocol.get("identificationModule")) + status = _mapping(protocol.get("statusModule")) + description = _mapping(protocol.get("descriptionModule")) + conditions = _mapping(protocol.get("conditionsModule")) + design = _mapping(protocol.get("designModule")) + eligibility = _mapping(protocol.get("eligibilityModule")) + interventions = _mapping(protocol.get("armsInterventionsModule")) + contacts_locations = _mapping(protocol.get("contactsLocationsModule")) + references = _mapping(protocol.get("referencesModule")) + + nct_id = _text(identification.get("nctId")) + if not nct_id: + raise ValueError("ClinicalTrials.gov study is missing protocolSection.identificationModule.nctId") + + criteria_text = _multiline_text(eligibility.get("eligibilityCriteria")) + condition_values = _string_list(conditions.get("conditions")) + normalized = { + "nct_id": nct_id, + "source": "clinicaltrials.gov", + "source_url": f"https://clinicaltrials.gov/study/{nct_id}", + "brief_title": _text(identification.get("briefTitle")), + "official_title": _text(identification.get("officialTitle")), + "brief_summary": _text(description.get("briefSummary")), + "detailed_description": _text(description.get("detailedDescription")), + "condition": condition_values, + "eligibility_criteria": criteria_text, + "criteria": split_eligibility_criteria(criteria_text), + "overall_status": _text(status.get("overallStatus")), + "phase": _join(_string_list(design.get("phases"))), + "study_type": _text(design.get("studyType")), + "gender": _text(eligibility.get("sex")) or "All", + "minimum_age": _text(eligibility.get("minimumAge")), + "maximum_age": _text(eligibility.get("maximumAge")), + "start_date": _date_struct(status.get("startDateStruct")), + "completion_date": _date_struct(status.get("completionDateStruct")), + "last_update_posted": _date_struct(status.get("lastUpdatePostDateStruct")), + "intervention": _intervention_rows(interventions.get("interventions")), + "location": _location_rows(contacts_locations.get("locations")), + "reference": _reference_rows(references.get("references")), + } + return {key: value for key, value in normalized.items() if value not in (None, "", [])} + + + + +def _mapping(value: Any) -> dict[str, Any]: + return value if isinstance(value, dict) else {} + + +def _text(value: Any) -> str: + if value is None: + return "" + if isinstance(value, str): + return " ".join(value.split()) + return str(value) + + +def _multiline_text(value: Any) -> str: + if value is None: + return "" + if isinstance(value, str): + lines = [re.sub(r"[ \t]+", " ", line).strip() for line in value.splitlines()] + return "\n".join(lines).strip() + return _text(value) + + +def _string_list(value: Any) -> list[str]: + if isinstance(value, list): + return [_text(item) for item in value if _text(item)] + text = _text(value) + return [text] if text else [] + + +def _join(values: list[str]) -> str: + return ", ".join(values) + + +def _date_struct(value: Any) -> str: + if isinstance(value, dict): + return _text(value.get("date")) + return _text(value) + + +def _intervention_rows(value: Any) -> list[dict[str, str]]: + rows: list[dict[str, str]] = [] + for item in value if isinstance(value, list) else []: + if not isinstance(item, dict): + continue + row = { + "name": _text(item.get("name")), + "type": _text(item.get("type")), + "description": _text(item.get("description")), + } + rows.append({key: val for key, val in row.items() if val}) + return rows + + +def _location_rows(value: Any) -> list[dict[str, str]]: + rows: list[dict[str, str]] = [] + for item in value if isinstance(value, list) else []: + if not isinstance(item, dict): + continue + row = { + "facility": _text(item.get("facility")), + "city": _text(item.get("city")), + "state": _text(item.get("state")), + "country": _text(item.get("country")), + "status": _text(item.get("status")), + } + rows.append({key: val for key, val in row.items() if val}) + return rows + + +def _reference_rows(value: Any) -> list[dict[str, str]]: + rows: list[dict[str, str]] = [] + for item in value if isinstance(value, list) else []: + if not isinstance(item, dict): + continue + row = { + "pmid": _text(item.get("pmid")), + "type": _text(item.get("type")), + "citation": _text(item.get("citation")), + } + rows.append({key: val for key, val in row.items() if val}) + return rows + + diff --git a/src/trialmatchai/registry/preparation.py b/src/trialmatchai/registry/preparation.py new file mode 100644 index 00000000..8c8a864b --- /dev/null +++ b/src/trialmatchai/registry/preparation.py @@ -0,0 +1,305 @@ +from __future__ import annotations + +import hashlib +import json +import os +import re +import shutil +import tempfile +from collections.abc import Sequence +from pathlib import Path +from typing import Any, Protocol + +import dateutil.parser + +from trialmatchai.constraints import extract_constraint_set +from trialmatchai.registry.criteria_chunking import split_eligibility_criteria +from trialmatchai.utils.text import flatten_text + + +class TextEmbeddingBackend(Protocol): + def embed_texts(self, texts: Sequence[str]) -> list[list[float]]: + ... + + +class EntityAnnotationBackend(Protocol): + def annotate_texts_in_parallel( + self, + texts: Sequence[str], + max_workers: int = 1, + retries: int = 1, + delay: float = 0, + ) -> list[list[dict[str, Any]]]: + ... + + +TRIAL_TEXT_FIELDS: tuple[tuple[str, str], ...] = ( + ("brief_title", "brief_title_vector"), + ("brief_summary", "brief_summary_vector"), + ("condition", "condition_vector"), + ("eligibility_criteria", "eligibility_criteria_vector"), +) + + +def prepare_trial_document( + doc: dict[str, Any], + embedder: TextEmbeddingBackend, +) -> dict[str, Any]: + out: dict[str, Any] = {"nct_id": doc["nct_id"]} + texts = [_preprocess_text(flatten_text(doc.get(field))) for field, _ in TRIAL_TEXT_FIELDS] + vectors = _embed_texts(embedder, texts) + + for (field, vector_field), text, vector in zip(TRIAL_TEXT_FIELDS, texts, vectors): + out[field] = text + out[vector_field] = vector + + # Text-only fields the backend scores on (TRIAL_TEXT_WEIGHTS) but does not embed. + for text_field in ("detailed_description", "official_title"): + value = _preprocess_text(flatten_text(doc.get(text_field))) + out[text_field] = value + + for simple in ( + "overall_status", + "phase", + "study_type", + "gender", + "source", + "source_url", + "last_update_posted", + ): + out[simple] = str(doc.get(simple) or "") + + out["start_date"] = _to_iso_date(doc.get("start_date")) or "" + out["completion_date"] = _to_iso_date(doc.get("completion_date")) or "" + + out["minimum_age"] = _age_to_years(doc.get("minimum_age")) + if out["minimum_age"] is None: + out["minimum_age"] = 0.0 + out["maximum_age"] = _age_to_years(doc.get("maximum_age")) + if out["maximum_age"] is None: + out["maximum_age"] = 999.0 + + out["intervention"] = _stable_dict_list( + doc.get("intervention"), + keys=("name", "type", "description"), + ) + out["location"] = _stable_dict_list( + doc.get("location"), + keys=("facility", "city", "state", "country", "status"), + ) + out["reference"] = _stable_dict_list( + doc.get("reference"), + keys=("pmid", "citation", "type"), + ) + + return out + + +def prepare_criteria_documents( + doc: dict[str, Any], + embedder: TextEmbeddingBackend, + *, + entity_annotator: EntityAnnotationBackend | None = None, +) -> list[dict[str, Any]]: + nct_id = str(doc["nct_id"]) + entries: list[dict[str, Any]] = [] + texts: list[str] = [] + criteria = doc.get("criteria") + if not criteria: + # Trial doc carries only raw eligibility text (e.g. normalized JSON that + # predates in-normalizer chunking): chunk it here, on the unflattened + # text so line structure is preserved, keeping preparation self-sufficient. + raw = doc.get("eligibility_criteria") + criteria = split_eligibility_criteria(raw) if isinstance(raw, str) else [] + for criterion in criteria or []: + if not isinstance(criterion, dict): + continue + text = _preprocess_text( + flatten_text(criterion.get("criterion") or criterion.get("sentence")) + ) + if not text: + continue + entries.append( + { + "nct_id": nct_id, + "criterion": text, + "entities": criterion.get("entities") or [], + "eligibility_type": criterion.get("type") or "unknown", + } + ) + texts.append(text) + + if not entries: + return [] + + _annotate_missing_entities(entries, texts, entity_annotator) + vectors = _embed_texts(embedder, texts) + rows: list[dict[str, Any]] = [] + for entry, vector in zip(entries, vectors): + criteria_id = compute_criteria_id(entry["nct_id"], entry["criterion"]) + constraint_set = extract_constraint_set( + nct_id=entry["nct_id"], + criteria_id=criteria_id, + criterion=entry["criterion"], + eligibility_type=entry["eligibility_type"], + entities=entry.get("entities"), + ) + rows.append( + { + "criteria_id": criteria_id, + "nct_id": entry["nct_id"], + "criterion": entry["criterion"], + "entities": _entities_for_index(entry.get("entities")), + "eligibility_type": entry["eligibility_type"], + "criterion_vector": vector, + "constraints": json.dumps( + constraint_set.model_dump(mode="json"), + sort_keys=True, + ), + } + ) + return rows + + +def _atomic_write_text(path: Path, text: str) -> None: + """Write text via a temp file + os.replace so readers never see a partial file.""" + path.parent.mkdir(parents=True, exist_ok=True) + fd, tmp = tempfile.mkstemp(dir=str(path.parent), prefix=".tmp-", suffix=path.suffix) + try: + with os.fdopen(fd, "w", encoding="utf-8") as f: + f.write(text) + f.flush() + os.fsync(f.fileno()) + os.replace(tmp, path) + except Exception: + try: + os.unlink(tmp) + except OSError: + pass + raise + + +def write_prepared_trial(row: dict[str, Any], folder: str | Path) -> Path: + path = Path(folder) / f"{row['nct_id']}.json" + _atomic_write_text(path, json.dumps(row, indent=2, sort_keys=True)) + return path + + +def write_prepared_criteria(rows: Sequence[dict[str, Any]], folder: str | Path) -> int: + if not rows: + return 0 + trial_folder = Path(folder) / str(rows[0]["nct_id"]) + # Clear stale criteria from a prior prepare first: criteria_id = sha256(nct:text), + # so changed chunking/text yields new files while orphaning the old ones, which + # the index would then ingest as duplicates. The trial-completion marker is + # written only after this, so a crash here is simply re-prepared on resume. + if trial_folder.exists(): + shutil.rmtree(trial_folder, ignore_errors=True) + for row in rows: + _atomic_write_text( + trial_folder / f"{row['criteria_id']}.json", + json.dumps(row, indent=2, sort_keys=True), + ) + return len(rows) + + +def compute_criteria_id(nct_id: str, criterion: str) -> str: + return hashlib.sha256(f"{nct_id}:{criterion}".encode("utf-8")).hexdigest() + + +def _embed_texts(embedder: TextEmbeddingBackend, texts: Sequence[str]) -> list[list[float]]: + vectors_by_nonempty_text = iter( + embedder.embed_texts([text for text in texts if text.strip()]) + ) + vectors: list[list[float]] = [] + for text in texts: + if text.strip(): + vectors.append(list(next(vectors_by_nonempty_text))) + else: + vectors.append([]) + return vectors + + +def _annotate_missing_entities( + entries: list[dict[str, Any]], + texts: list[str], + entity_annotator: EntityAnnotationBackend | None, +) -> None: + if entity_annotator is None: + return + missing_indices = [ + index for index, entry in enumerate(entries) if not entry.get("entities") + ] + if not missing_indices: + return + missing_texts = [texts[index] for index in missing_indices] + annotations = entity_annotator.annotate_texts_in_parallel( + missing_texts, + max_workers=1, + ) + for index, entities in zip(missing_indices, annotations): + entries[index]["entities"] = entities + + +def _entities_for_index(entities: Any) -> list[dict[str, Any]]: + if not isinstance(entities, list): + return [] + indexed: list[dict[str, Any]] = [] + for entity in entities: + if not isinstance(entity, dict): + continue + normalized = dict(entity) + normalized.setdefault("entity", normalized.get("text", "")) + normalized.setdefault("class", normalized.get("entity_group", "")) + normalized.setdefault("normalized_id", ["CUI-less"]) + normalized.setdefault("synonyms", []) + normalized.setdefault("concept_candidates", []) + normalized.setdefault("linker_status", "not_linked") + indexed.append(normalized) + return indexed + + +def _preprocess_text(value: str) -> str: + return re.sub(r"\s+", " ", value).strip() + + +def _stable_dict_list(value: Any, *, keys: Sequence[str]) -> list[dict[str, str]]: + rows = value if isinstance(value, list) else [] + normalized: list[dict[str, str]] = [] + for row in rows: + if not isinstance(row, dict): + continue + normalized.append({key: str(row.get(key) or "") for key in keys}) + if normalized: + return normalized + return [{key: "" for key in keys}] + + +def _to_iso_date(value: Any) -> str | None: + if not value: + return None + try: + return dateutil.parser.parse(str(value)).date().isoformat() + except (TypeError, ValueError, dateutil.parser.ParserError): + return None + + +def _age_to_years(value: Any) -> float | None: + if not value: + return None + match = re.search(r"([\d.]+)", str(value)) + if not match: + return None + amount = float(match.group(1)) + unit = str(value).casefold() + if "year" in unit: + years = amount + elif "month" in unit: + years = amount / 12 + elif "week" in unit: + years = amount / 52 + elif "day" in unit: + years = amount / 365 + else: + return None + return round(years, 2) diff --git a/src/trialmatchai/registry/updater.py b/src/trialmatchai/registry/updater.py new file mode 100644 index 00000000..611c6a94 --- /dev/null +++ b/src/trialmatchai/registry/updater.py @@ -0,0 +1,250 @@ +from __future__ import annotations + +import json +from collections.abc import Sequence +from dataclasses import asdict, dataclass, field +from datetime import date +from pathlib import Path +from typing import Any + +from trialmatchai.registry.clinicaltrials_gov import ClinicalTrialsGovClient +from trialmatchai.registry.defaults import DEFAULT_REGISTRY_KEYWORDS, DEFAULT_REGISTRY_STATUSES +from trialmatchai.registry.manifest import ( + ManifestRecord, + RegistryManifest, + source_hash, + utc_now_iso, +) +from trialmatchai.registry.normalization import normalize_study +from trialmatchai.registry.preparation import ( + EntityAnnotationBackend, + TextEmbeddingBackend, + prepare_criteria_documents, + prepare_trial_document, +) +from trialmatchai.search import LanceDBSearchBackend +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +@dataclass(frozen=True) +class RegistryUpdateConfig: + raw_dir: Path + normalized_trials_dir: Path + manifest_path: Path + reports_dir: Path + keywords: tuple[str, ...] = DEFAULT_REGISTRY_KEYWORDS + statuses: tuple[str, ...] = DEFAULT_REGISTRY_STATUSES + since: date | None = None + max_studies: int | None = None + dry_run: bool = False + reindex_all_changed: bool = True + failure_threshold: float = 0.25 + + +@dataclass +class RegistryStudyFailure: + nct_id: str | None + error: str + + +@dataclass +class RegistryUpdateReport: + fetched: int = 0 + new: int = 0 + changed: int = 0 + unchanged: int = 0 + failed: int = 0 + duplicate: int = 0 + indexed: int = 0 + criteria_indexed: int = 0 + dry_run: bool = False + failures: list[RegistryStudyFailure] = field(default_factory=list) + + @property + def failure_rate(self) -> float: + denominator = max(1, self.fetched) + return self.failed / denominator + + def to_dict(self) -> dict[str, Any]: + data = asdict(self) + data["failure_rate"] = self.failure_rate + return data + + +class RegistryUpdater: + def __init__( + self, + *, + client: ClinicalTrialsGovClient, + backend: LanceDBSearchBackend, + embedder: TextEmbeddingBackend, + entity_annotator: EntityAnnotationBackend | None = None, + ) -> None: + self.client = client + self.backend = backend + self.embedder = embedder + self.entity_annotator = entity_annotator + + def run(self, config: RegistryUpdateConfig) -> RegistryUpdateReport: + report = RegistryUpdateReport(dry_run=config.dry_run) + manifest = RegistryManifest(config.manifest_path) + latest = manifest.load_latest() + seen: set[str] = set() + + for keyword in config.keywords: + remaining = _remaining(config.max_studies, report.fetched) + if remaining == 0: + break + logger.info("Fetching registry studies for keyword: %s", keyword) + try: + for study in self.client.iter_studies( + keyword=keyword, + statuses=config.statuses, + since=config.since, + max_studies=remaining, + ): + if ( + config.max_studies is not None + and report.fetched >= config.max_studies + ): + break + self._process_study( + study, + config=config, + manifest=manifest, + latest=latest, + seen=seen, + report=report, + ) + except Exception as exc: + logger.exception("Registry source fetch failed for keyword: %s", keyword) + report.failed += 1 + report.failures.append( + RegistryStudyFailure( + nct_id=None, + error=f"{keyword}: {exc}", + ) + ) + + if not config.dry_run: + self.write_run_report(config.reports_dir, report) + return report + + def _process_study( + self, + study: dict[str, Any], + *, + config: RegistryUpdateConfig, + manifest: RegistryManifest, + latest: dict[str, ManifestRecord], + seen: set[str], + report: RegistryUpdateReport, + ) -> None: + nct_id: str | None = None + try: + normalized = normalize_study(study) + nct_id = str(normalized["nct_id"]) + if nct_id in seen: + report.duplicate += 1 + return + seen.add(nct_id) + report.fetched += 1 + + digest = source_hash(study) + previous = latest.get(nct_id) + if previous and previous.source_hash == digest: + report.unchanged += 1 + return + + is_new = previous is None + if is_new: + report.new += 1 + else: + report.changed += 1 + + if config.dry_run: + return + + self._write_source_and_normalized(study, normalized, config=config) + if config.reindex_all_changed: + prepared_trial = prepare_trial_document(normalized, self.embedder) + prepared_criteria = prepare_criteria_documents( + normalized, + self.embedder, + entity_annotator=self.entity_annotator, + ) + report.indexed += self.backend.upsert_trials([prepared_trial]) + report.criteria_indexed += self.backend.replace_criteria_for_trials( + [nct_id], + prepared_criteria, + ) + + record = ManifestRecord( + nct_id=nct_id, + source_url=str(normalized.get("source_url", "")), + source_hash=digest, + fetched_at=utc_now_iso(), + last_update_posted=normalized.get("last_update_posted"), + processing_status="indexed" if config.reindex_all_changed else "fetched", + ) + manifest.append(record) + latest[nct_id] = record + except Exception as exc: + logger.exception("Registry update failed for study %s", nct_id or "") + report.failed += 1 + report.failures.append( + RegistryStudyFailure(nct_id=nct_id, error=str(exc)) + ) + if not config.dry_run and nct_id: + manifest.append( + ManifestRecord( + nct_id=nct_id, + source_url=f"https://clinicaltrials.gov/study/{nct_id}", + source_hash=source_hash(study), + fetched_at=utc_now_iso(), + last_update_posted=None, + processing_status="failed", + error_summary=str(exc), + ) + ) + + def _write_source_and_normalized( + self, + study: dict[str, Any], + normalized: dict[str, Any], + *, + config: RegistryUpdateConfig, + ) -> None: + nct_id = str(normalized["nct_id"]) + _write_json(config.raw_dir / f"{nct_id}.json", study) + _write_json(config.normalized_trials_dir / f"{nct_id}.json", normalized) + + @staticmethod + def write_run_report( + reports_dir: str | Path, + report: RegistryUpdateReport, + ) -> Path: + reports_path = Path(reports_dir) + reports_path.mkdir(parents=True, exist_ok=True) + path = reports_path / f"registry-update-{utc_now_iso().replace(':', '')}.json" + _write_json(path, report.to_dict()) + return path + + +def _remaining(max_studies: int | None, fetched: int) -> int | None: + if max_studies is None: + return None + return max(0, max_studies - fetched) + + +def _write_json(path: str | Path, payload: dict[str, Any]) -> None: + path = Path(path) + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(json.dumps(payload, indent=2, sort_keys=True), encoding="utf-8") + + +def normalize_keywords(keywords: Sequence[str]) -> tuple[str, ...]: + values = tuple(dict.fromkeys(keyword.strip() for keyword in keywords if keyword.strip())) + return values or DEFAULT_REGISTRY_KEYWORDS diff --git a/src/trialmatchai/schemas/__init__.py b/src/trialmatchai/schemas/__init__.py new file mode 100644 index 00000000..680f9076 --- /dev/null +++ b/src/trialmatchai/schemas/__init__.py @@ -0,0 +1,3 @@ +from trialmatchai.schemas.phenopacket import Keywords, Phenopacket + +__all__ = ["Keywords", "Phenopacket"] diff --git a/source/Matcher/schemas/phenopacket.py b/src/trialmatchai/schemas/phenopacket.py similarity index 89% rename from source/Matcher/schemas/phenopacket.py rename to src/trialmatchai/schemas/phenopacket.py index b7fccc07..2c0177d7 100644 --- a/source/Matcher/schemas/phenopacket.py +++ b/src/trialmatchai/schemas/phenopacket.py @@ -16,7 +16,7 @@ class Phenopacket(BaseModel): class Keywords(BaseModel): main_conditions: List[str] = Field(default_factory=list) other_conditions: List[str] = Field(default_factory=list) - expanded_sentences: List[str] = Field(default_factory=list) + patient_narrative: List[str] = Field(default_factory=list) error: Optional[str] = None model_config = ConfigDict(extra="allow") diff --git a/src/trialmatchai/search/__init__.py b/src/trialmatchai/search/__init__.py new file mode 100644 index 00000000..a6c2648c --- /dev/null +++ b/src/trialmatchai/search/__init__.py @@ -0,0 +1,15 @@ +from trialmatchai.search.lancedb_backend import ( + InMemorySearchBackend, + LanceDBSearchBackend, + SearchBackendUnavailable, + build_criteria_record, + build_trial_record, +) + +__all__ = [ + "InMemorySearchBackend", + "LanceDBSearchBackend", + "SearchBackendUnavailable", + "build_criteria_record", + "build_trial_record", +] diff --git a/src/trialmatchai/search/lancedb_backend.py b/src/trialmatchai/search/lancedb_backend.py new file mode 100644 index 00000000..33b87fc0 --- /dev/null +++ b/src/trialmatchai/search/lancedb_backend.py @@ -0,0 +1,855 @@ +from __future__ import annotations + +import json +import math +import re +from dataclasses import dataclass +from pathlib import Path +from typing import Any, Iterable, Mapping, Protocol, Sequence + +from trialmatchai.utils.logging_config import setup_logging +from trialmatchai.utils.text import flatten_text + +logger = setup_logging(__name__) + + +TRIAL_TEXT_WEIGHTS: tuple[tuple[str, float], ...] = ( + ("condition", 6.0), + ("eligibility_criteria", 4.0), + ("brief_title", 3.0), + ("brief_summary", 2.0), + ("detailed_description", 1.5), + ("official_title", 1.0), +) +TRIAL_VECTOR_WEIGHTS: tuple[tuple[str, float], ...] = ( + ("condition_vector", 0.3), + ("brief_title_vector", 0.1), + ("brief_summary_vector", 0.1), + ("eligibility_criteria_vector", 0.3), +) +CRITERIA_TEXT_WEIGHTS: tuple[tuple[str, float], ...] = ( + ("criterion", 1.0), + ("entity_synonyms_text", 1.2), + ("entity_text", 0.8), +) + + +@dataclass(frozen=True) +class SearchHit: + source: dict[str, Any] + score: float + + def to_es_like_hit(self) -> dict[str, Any]: + return {"_source": self.source, "_score": self.score} + + +class SearchBackendUnavailable(RuntimeError): + pass + + +class TrialSearchBackend(Protocol): + def search_trials( + self, + *, + primary_terms: Sequence[str], + other_terms: Sequence[str] = (), + embeddings: Mapping[str, Sequence[float]] | None = None, + age: int | None = None, + sex: str = "ALL", + overall_status: str | None = None, + pre_selected_nct_ids: Sequence[str] | None = None, + size: int = 10, + vector_score_threshold: float = 0.0, + search_mode: str = "hybrid", + ) -> tuple[list[dict[str, Any]], list[float]]: + ... + + def search_criteria( + self, + *, + query: str, + nct_ids: Sequence[str], + query_vector: Sequence[float] | None = None, + size: int = 250, + search_mode: str = "hybrid", + use_entity_synonyms: bool = True, + vector_score_threshold: float = 0.5, + ) -> list[dict[str, Any]]: + ... + + +class InMemorySearchBackend: + """Deterministic backend used for tests and small fixture smoke runs.""" + + def __init__( + self, + *, + trials: Sequence[Mapping[str, Any]] = (), + criteria: Sequence[Mapping[str, Any]] = (), + ) -> None: + self.trials = [build_trial_record(row) for row in trials] + self.criteria = [build_criteria_record(row) for row in criteria] + + def health(self, *, require_tables: bool = False) -> list[str]: + return [] + + def upsert_trials(self, docs: Sequence[Mapping[str, Any]]) -> int: + rows = [build_trial_record(row) for row in docs] + updated_ids = {str(row.get("nct_id")) for row in rows if row.get("nct_id")} + self.trials = [ + row for row in self.trials if str(row.get("nct_id")) not in updated_ids + ] + self.trials.extend(rows) + return len(rows) + + def replace_criteria_for_trials( + self, + nct_ids: Sequence[str], + docs: Sequence[Mapping[str, Any]], + ) -> int: + updated_ids = {str(nct_id) for nct_id in nct_ids if nct_id} + self.criteria = [ + row for row in self.criteria if str(row.get("nct_id")) not in updated_ids + ] + rows = [build_criteria_record(row) for row in docs] + self.criteria.extend(rows) + return len(rows) + + def search_trials( + self, + *, + primary_terms: Sequence[str], + other_terms: Sequence[str] = (), + embeddings: Mapping[str, Sequence[float]] | None = None, + age: int | None = None, + sex: str = "ALL", + overall_status: str | None = None, + pre_selected_nct_ids: Sequence[str] | None = None, + size: int = 10, + vector_score_threshold: float = 0.0, + search_mode: str = "hybrid", + ) -> tuple[list[dict[str, Any]], list[float]]: + hits = _rank_trial_rows( + self.trials, + primary_terms=primary_terms, + other_terms=other_terms, + embeddings=embeddings or {}, + age=age, + sex=sex, + overall_status=overall_status, + pre_selected_nct_ids=pre_selected_nct_ids, + size=size, + vector_score_threshold=vector_score_threshold, + search_mode=search_mode, + ) + return [hit.source for hit in hits], [hit.score for hit in hits] + + def search_criteria( + self, + *, + query: str, + nct_ids: Sequence[str], + query_vector: Sequence[float] | None = None, + size: int = 250, + search_mode: str = "hybrid", + use_entity_synonyms: bool = True, + vector_score_threshold: float = 0.5, + ) -> list[dict[str, Any]]: + hits = _rank_criteria_rows( + self.criteria, + query=query, + nct_ids=nct_ids, + query_vector=query_vector, + size=size, + search_mode=search_mode, + use_entity_synonyms=use_entity_synonyms, + vector_score_threshold=vector_score_threshold, + ) + return [hit.to_es_like_hit() for hit in hits] + + +class LanceDBSearchBackend: + """Embedded LanceDB backend for TrialMatchAI trial and criteria retrieval.""" + + def __init__( + self, + db_path: str | Path, + *, + trials_table: str = "trials", + criteria_table: str = "criteria", + candidate_limit: int = 1000, + ) -> None: + try: + import lancedb # type: ignore + except Exception as exc: # pragma: no cover - optional dependency guard + raise SearchBackendUnavailable( + "LanceDB search requires the runtime dependency `lancedb`." + ) from exc + + self.db_path = Path(db_path) + self.trials_table = trials_table + self.criteria_table = criteria_table + self.candidate_limit = candidate_limit + self.db_path.mkdir(parents=True, exist_ok=True) + self.db = lancedb.connect(str(self.db_path)) + + @classmethod + def from_config(cls, config: Mapping[str, Any]) -> "LanceDBSearchBackend": + search_cfg = config.get("search_backend", {}) + backend = search_cfg.get("backend", "lancedb") + if backend != "lancedb": + raise ValueError(f"Unsupported search backend: {backend}") + return cls( + search_cfg.get("db_path", "data/search"), + trials_table=search_cfg.get("trials_table", "trials"), + criteria_table=search_cfg.get("criteria_table", "criteria"), + candidate_limit=int(search_cfg.get("candidate_limit", 1000)), + ) + + def health(self, *, require_tables: bool = False) -> list[str]: + issues: list[str] = [] + if not self.db_path.exists(): + issues.append(f"search_backend.db_path does not exist: {self.db_path}") + return issues + if require_tables: + names = set(self._table_names()) + missing = [ + name + for name in (self.trials_table, self.criteria_table) + if name not in names + ] + if missing: + issues.append("Missing LanceDB tables: " + ", ".join(missing)) + return issues + + def table_exists(self, table_name: str) -> bool: + return table_name in set(self._table_names()) + + def index_trials( + self, + docs: Sequence[Mapping[str, Any]], + *, + recreate: bool = True, + ) -> int: + rows = [build_trial_record(doc) for doc in docs] + table = self._write_rows(self.trials_table, rows, recreate=recreate) + _create_fts_index(table, "search_text") + _create_vector_index(table, "search_vector") + return len(rows) + + def index_criteria( + self, + docs: Sequence[Mapping[str, Any]], + *, + recreate: bool = True, + ) -> int: + rows = [build_criteria_record(doc) for doc in docs] + table = self._write_rows(self.criteria_table, rows, recreate=recreate) + _create_fts_index(table, "search_text") + _create_vector_index(table, "criterion_vector") + return len(rows) + + def upsert_trials(self, docs: Sequence[Mapping[str, Any]]) -> int: + rows = [build_trial_record(doc) for doc in docs] + if not rows: + return 0 + if self.table_exists(self.trials_table): + nct_ids = [str(row["nct_id"]) for row in rows if row.get("nct_id")] + if nct_ids: + self._delete_where(self.trials_table, _nct_where(nct_ids)) + table = self._write_rows(self.trials_table, rows, recreate=False) + _create_fts_index(table, "search_text") + _create_vector_index(table, "search_vector") + return len(rows) + + def replace_criteria_for_trials( + self, + nct_ids: Sequence[str], + docs: Sequence[Mapping[str, Any]], + ) -> int: + rows = [build_criteria_record(doc) for doc in docs] + if self.table_exists(self.criteria_table): + where = _nct_where(nct_ids) + if where: + self._delete_where(self.criteria_table, where) + if not rows: + return 0 + table = self._write_rows(self.criteria_table, rows, recreate=False) + _create_fts_index(table, "search_text") + _create_vector_index(table, "criterion_vector") + return len(rows) + + def search_trials( + self, + *, + primary_terms: Sequence[str], + other_terms: Sequence[str] = (), + embeddings: Mapping[str, Sequence[float]] | None = None, + age: int | None = None, + sex: str = "ALL", + overall_status: str | None = None, + pre_selected_nct_ids: Sequence[str] | None = None, + size: int = 10, + vector_score_threshold: float = 0.0, + search_mode: str = "hybrid", + ) -> tuple[list[dict[str, Any]], list[float]]: + table = self._open_table(self.trials_table) + where = _nct_where(pre_selected_nct_ids) + vector = _mean_vectors( + [ + embeddings[term] + for term in primary_terms + if embeddings and term in embeddings + ] + ) + rows = self._candidate_rows( + table, + text_query=" ".join([*primary_terms, *other_terms]), + query_vector=vector, + vector_column="search_vector", + where=where, + mode=search_mode, + limit=max(size, self.candidate_limit), + ) + hits = _rank_trial_rows( + rows, + primary_terms=primary_terms, + other_terms=other_terms, + embeddings=embeddings or {}, + age=age, + sex=sex, + overall_status=overall_status, + pre_selected_nct_ids=pre_selected_nct_ids, + size=size, + vector_score_threshold=vector_score_threshold, + search_mode=search_mode, + ) + return [hit.source for hit in hits], [hit.score for hit in hits] + + def search_criteria( + self, + *, + query: str, + nct_ids: Sequence[str], + query_vector: Sequence[float] | None = None, + size: int = 250, + search_mode: str = "hybrid", + use_entity_synonyms: bool = True, + vector_score_threshold: float = 0.5, + ) -> list[dict[str, Any]]: + table = self._open_table(self.criteria_table) + where = _nct_where(nct_ids) + rows = self._candidate_rows( + table, + text_query=query, + query_vector=query_vector, + vector_column="criterion_vector", + where=where, + mode=search_mode, + limit=max(size, self.candidate_limit), + ) + hits = _rank_criteria_rows( + rows, + query=query, + nct_ids=nct_ids, + query_vector=query_vector, + size=size, + search_mode=search_mode, + use_entity_synonyms=use_entity_synonyms, + vector_score_threshold=vector_score_threshold, + ) + return [hit.to_es_like_hit() for hit in hits] + + def _write_rows( + self, + table_name: str, + rows: Sequence[dict[str, Any]], + *, + recreate: bool, + ) -> Any: + if not rows: + raise ValueError(f"No rows supplied for LanceDB table {table_name}.") + if recreate or not self.table_exists(table_name): + return self.db.create_table(table_name, data=list(rows), mode="overwrite") + table = self._open_table(table_name) + table.add(list(rows)) + return table + + def _delete_where(self, table_name: str, where: str) -> None: + if not where: + return + try: + table = self._open_table(table_name) + table.delete(where) + except Exception as exc: + raise SearchBackendUnavailable( + f"Could not delete existing rows from LanceDB table {table_name}: {exc}" + ) from exc + + def _candidate_rows( + self, + table: Any, + *, + text_query: str, + query_vector: Sequence[float] | None, + vector_column: str, + where: str, + mode: str, + limit: int, + ) -> list[dict[str, Any]]: + mode = (mode or "hybrid").lower() + rows_by_key: dict[str, dict[str, Any]] = {} + + if mode in {"bm25", "hybrid"} and text_query.strip(): + for row in self._search_fts(table, text_query, where=where, limit=limit): + rows_by_key[_row_key(row)] = row + + if mode in {"vector", "hybrid"} and query_vector: + for row in self._search_vector( + table, + query_vector, + vector_column=vector_column, + where=where, + limit=limit, + ): + rows_by_key[_row_key(row)] = row + + if not rows_by_key: + for row in self._scan_rows(table, where=where, limit=limit): + rows_by_key[_row_key(row)] = row + + return list(rows_by_key.values()) + + def _search_fts( + self, + table: Any, + query: str, + *, + where: str, + limit: int, + ) -> list[dict[str, Any]]: + try: + search = table.search(query, query_type="fts") + if where: + search = search.where(where) + return list(search.limit(limit).to_list()) + except Exception as exc: + logger.warning("LanceDB FTS search failed; falling back if possible: %s", exc) + return [] + + def _search_vector( + self, + table: Any, + vector: Sequence[float], + *, + vector_column: str, + where: str, + limit: int, + ) -> list[dict[str, Any]]: + try: + search = table.search(list(vector), vector_column_name=vector_column) + if where: + search = search.where(where) + return list(search.limit(limit).to_list()) + except Exception as exc: + logger.warning( + "LanceDB vector search failed; falling back if possible: %s", exc + ) + return [] + + def _scan_rows( + self, table: Any, *, where: str, limit: int + ) -> list[dict[str, Any]]: + try: + # Honor the nct_id filter on the fallback path; an unfiltered head + # slice could return rows that exclude the requested trials entirely. + if where: + return list(table.search().where(where).limit(limit).to_list()) + return list(table.to_arrow().to_pylist())[:limit] + except Exception as exc: + logger.warning("Could not scan LanceDB table rows: %s", exc) + return [] + + def _open_table(self, table_name: str) -> Any: + try: + return self.db.open_table(table_name) + except Exception as exc: + raise SearchBackendUnavailable( + f"LanceDB table is not available: {table_name}" + ) from exc + + def _table_names(self) -> list[str]: + try: + return list(self.db.table_names()) + except Exception as exc: + logger.warning("Could not list LanceDB tables: %s", exc) + return [] + + +def build_trial_record(doc: Mapping[str, Any]) -> dict[str, Any]: + row = dict(doc) + search_text = flatten_text( + [ + row.get("condition"), + row.get("eligibility_criteria"), + row.get("brief_title"), + row.get("brief_summary"), + row.get("detailed_description"), + row.get("official_title"), + ] + ) + row["search_text"] = search_text + row["search_vector"] = _mean_vectors( + _clean_vector(row.get(field)) for field, _ in TRIAL_VECTOR_WEIGHTS + ) + return row + + +def build_criteria_record(doc: Mapping[str, Any]) -> dict[str, Any]: + row = dict(doc) + entity_text, synonym_text = _flatten_entities(row.get("entities")) + row["entities"] = _json_payload(row.get("entities")) + row["entity_text"] = entity_text + row["entity_synonyms_text"] = synonym_text + row["search_text"] = flatten_text( + [row.get("criterion"), entity_text, synonym_text] + ) + return row + + +def _rank_trial_rows( + rows: Sequence[Mapping[str, Any]], + *, + primary_terms: Sequence[str], + other_terms: Sequence[str], + embeddings: Mapping[str, Sequence[float]], + age: int | None, + sex: str, + overall_status: str | None, + pre_selected_nct_ids: Sequence[str] | None, + size: int, + vector_score_threshold: float, + search_mode: str, +) -> list[SearchHit]: + mode = (search_mode or "hybrid").lower() + hits: list[SearchHit] = [] + for raw in rows: + # Candidate rows read from the index already carry the derived fields; + # only rebuild for callers (e.g. in-memory) that pass raw docs. + row = dict(raw) if "search_text" in raw else build_trial_record(raw) + if not _trial_passes_filters( + row, + age=age, + sex=sex, + overall_status=overall_status, + pre_selected_nct_ids=pre_selected_nct_ids, + ): + continue + text_score = _weighted_text_score(row, primary_terms, TRIAL_TEXT_WEIGHTS) + if other_terms: + text_score = max( + text_score, + 0.75 * _weighted_text_score(row, other_terms, TRIAL_TEXT_WEIGHTS), + ) + vector_score = _trial_vector_score(row, primary_terms, other_terms, embeddings) + if mode in {"vector", "hybrid"} and vector_score < vector_score_threshold: + continue + score = _combine_scores(mode, text_score, vector_score) + if score <= 0: + continue + hits.append(SearchHit(source=row, score=score)) + hits.sort(key=lambda hit: hit.score, reverse=True) + return hits[:size] + + +def _rank_criteria_rows( + rows: Sequence[Mapping[str, Any]], + *, + query: str, + nct_ids: Sequence[str], + query_vector: Sequence[float] | None, + size: int, + search_mode: str, + use_entity_synonyms: bool, + vector_score_threshold: float, +) -> list[SearchHit]: + allowed = {nct_id for nct_id in nct_ids if nct_id} + mode = (search_mode or "hybrid").lower() + fields = ( + CRITERIA_TEXT_WEIGHTS + if use_entity_synonyms + else tuple(item for item in CRITERIA_TEXT_WEIGHTS if item[0] == "criterion") + ) + hits: list[SearchHit] = [] + for raw in rows: + row = dict(raw) if "search_text" in raw else build_criteria_record(raw) + if allowed and row.get("nct_id") not in allowed: + continue + text_score = _weighted_text_score(row, [query], fields) + vector_score = _vector_score(query_vector, _clean_vector(row.get("criterion_vector"))) + if mode in {"vector", "hybrid"} and vector_score < vector_score_threshold: + continue + score = _combine_scores(mode, text_score, vector_score) + if score <= 0: + continue + hits.append(SearchHit(source=row, score=score)) + hits.sort(key=lambda hit: hit.score, reverse=True) + return hits[:size] + + +def _combine_scores(mode: str, text_score: float, vector_score: float) -> float: + if mode == "bm25": + return text_score + if mode == "vector": + return vector_score + return 0.5 * text_score + 0.5 * vector_score + + +def _weighted_text_score( + row: Mapping[str, Any], + terms: Sequence[str], + fields: Sequence[tuple[str, float]], +) -> float: + clean_terms = [term for term in terms if term and term.strip()] + if not clean_terms: + return 0.0 + max_weight = sum(weight for _, weight in fields) or 1.0 + best = 0.0 + for term in clean_terms: + field_score = 0.0 + for field, weight in fields: + field_score += weight * _lexical_score(term, flatten_text(row.get(field))) + best = max(best, field_score / max_weight) + return min(best, 1.0) + + +def _trial_vector_score( + row: Mapping[str, Any], + primary_terms: Sequence[str], + other_terms: Sequence[str], + embeddings: Mapping[str, Sequence[float]], +) -> float: + primary_vectors = [ + embeddings[term] for term in primary_terms if term in embeddings and embeddings[term] + ] + other_vectors = [ + embeddings[term] for term in other_terms if term in embeddings and embeddings[term] + ] + score = 0.0 + weight_total = 0.0 + for field, weight in TRIAL_VECTOR_WEIGHTS: + field_vector = _clean_vector(row.get(field)) + if not field_vector: + continue + score += weight * _max_vector_score(primary_vectors, field_vector) + weight_total += weight + if other_vectors: + other_field_scores: list[float] = [] + for field, _ in TRIAL_VECTOR_WEIGHTS: + field_vector = _clean_vector(row.get(field)) + if field_vector: + other_field_scores.append(_max_vector_score(other_vectors, field_vector)) + if other_field_scores: + score += 0.2 * (sum(other_field_scores) / len(other_field_scores)) + weight_total += 0.2 + if weight_total == 0: + return 0.0 + return min(score / weight_total, 1.0) + + +def _max_vector_score( + query_vectors: Sequence[Sequence[float]], + field_vector: Sequence[float], +) -> float: + if not query_vectors or not field_vector: + return 0.0 + return max(_vector_score(vector, field_vector) for vector in query_vectors) + + +def _vector_score( + left: Sequence[float] | None, + right: Sequence[float] | None, +) -> float: + if not left or not right: + return 0.0 + similarity = _cosine(left, right) + return max(0.0, min(1.0, (similarity + 1.0) / 2.0)) + + +def _cosine(left: Sequence[float], right: Sequence[float]) -> float: + size = min(len(left), len(right)) + if size == 0: + return 0.0 + dot = sum(float(left[i]) * float(right[i]) for i in range(size)) + left_norm = math.sqrt(sum(float(left[i]) ** 2 for i in range(size))) + right_norm = math.sqrt(sum(float(right[i]) ** 2 for i in range(size))) + if left_norm == 0 or right_norm == 0: + return 0.0 + return dot / (left_norm * right_norm) + + +def _lexical_score(query: str, text: str) -> float: + query_norm = _normalize_text(query) + text_norm = _normalize_text(text) + if not query_norm or not text_norm: + return 0.0 + if query_norm == text_norm: + return 1.0 + if query_norm in text_norm: + return 0.95 + query_tokens = set(query_norm.split()) + text_tokens = set(text_norm.split()) + if not query_tokens or not text_tokens: + return 0.0 + overlap = len(query_tokens & text_tokens) + if overlap == 0: + return 0.0 + coverage = overlap / len(query_tokens) + jaccard = overlap / len(query_tokens | text_tokens) + return min(1.0, 0.75 * coverage + 0.25 * jaccard) + + +def _trial_passes_filters( + row: Mapping[str, Any], + *, + age: int | None, + sex: str, + overall_status: str | None, + pre_selected_nct_ids: Sequence[str] | None, +) -> bool: + if pre_selected_nct_ids and row.get("nct_id") not in set(pre_selected_nct_ids): + return False + if overall_status and overall_status.casefold() != "all": + status = str(row.get("overall_status") or "") + if status.casefold() != overall_status.casefold(): + return False + if age is not None: + minimum = _as_float(row.get("minimum_age")) + maximum = _as_float(row.get("maximum_age")) + if minimum is not None and minimum > age: + return False + if maximum is not None and maximum < age: + return False + return _gender_matches(row.get("gender"), sex) + + +def _gender_matches(value: Any, sex: str) -> bool: + requested = (sex or "ALL").casefold() + raw = str(value or "All").casefold() + if requested in {"all", "both"}: + return True + if raw in {"", "all", "both"}: + return True + if requested == "male": + return raw in {"male", "m"} + if requested == "female": + return raw in {"female", "f"} + return True + + +def _flatten_entities(entities: Any) -> tuple[str, str]: + if isinstance(entities, str): + try: + entities = json.loads(entities) + except json.JSONDecodeError: + return "", "" + if not isinstance(entities, list): + return "", "" + texts: list[str] = [] + synonyms: list[str] = [] + for entity in entities: + if not isinstance(entity, Mapping): + continue + texts.append(flatten_text([entity.get("text"), entity.get("entity")])) + synonyms.append(flatten_text(entity.get("synonyms"))) + for candidate in entity.get("concept_candidates") or []: + if isinstance(candidate, Mapping): + synonyms.append(flatten_text(candidate.get("concept_name"))) + return flatten_text(texts), flatten_text(synonyms) + + +def _json_payload(value: Any) -> str: + try: + return json.dumps(value or [], sort_keys=True) + except TypeError: + return "[]" + + +def _normalize_text(value: str) -> str: + return " ".join(re.findall(r"[a-z0-9]+", value.casefold())) + + +def _clean_vector(value: Any) -> list[float]: + if value is None: + return [] + if hasattr(value, "tolist"): + value = value.tolist() + if not isinstance(value, Sequence) or isinstance(value, (str, bytes, bytearray)): + return [] + try: + return [float(item) for item in value] + except (TypeError, ValueError): + return [] + + +def _mean_vectors(vectors: Iterable[Sequence[float] | None]) -> list[float]: + cleaned = [_clean_vector(vector) for vector in vectors] + cleaned = [vector for vector in cleaned if vector] + if not cleaned: + return [] + width = min(len(vector) for vector in cleaned) + if width == 0: + return [] + return [ + sum(vector[index] for vector in cleaned) / len(cleaned) + for index in range(width) + ] + + +def _as_float(value: Any) -> float | None: + if value is None or value == "": + return None + try: + return float(value) + except (TypeError, ValueError): + return None + + +def _nct_where(nct_ids: Sequence[str] | None) -> str: + values = [str(item) for item in (nct_ids or []) if item] + if not values: + return "" + quoted = ", ".join(f"'{_sql_escape(value)}'" for value in values) + return f"nct_id IN ({quoted})" + + +def _sql_escape(value: str) -> str: + return value.replace("'", "''") + + +def _row_key(row: Mapping[str, Any]) -> str: + return str(row.get("criteria_id") or row.get("nct_id") or id(row)) + + +def _create_fts_index(table: Any, column: str) -> None: + try: + table.create_fts_index(column, replace=True) + except TypeError: + try: + table.create_fts_index(column) + except Exception as exc: + logger.warning("Could not create LanceDB FTS index on %s: %s", column, exc) + except Exception as exc: + logger.warning("Could not create LanceDB FTS index on %s: %s", column, exc) + + +def _create_vector_index(table: Any, column: str) -> None: + try: + table.create_index(vector_column_name=column, metric="cosine") + except TypeError: + try: + table.create_index(column) + except Exception as exc: + logger.warning("Could not create LanceDB vector index on %s: %s", column, exc) + except Exception as exc: + logger.warning("Could not create LanceDB vector index on %s: %s", column, exc) diff --git a/source/Matcher/pipeline/trial_search/__init__.py b/src/trialmatchai/services/__init__.py similarity index 100% rename from source/Matcher/pipeline/trial_search/__init__.py rename to src/trialmatchai/services/__init__.py diff --git a/src/trialmatchai/services/preflight.py b/src/trialmatchai/services/preflight.py new file mode 100644 index 00000000..903c9142 --- /dev/null +++ b/src/trialmatchai/services/preflight.py @@ -0,0 +1,292 @@ +from __future__ import annotations + +import importlib.util +from pathlib import Path +from typing import Any, Dict, List + +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def run_preflight_checks( + config: Dict[str, Any], + *, + search_backend: Any | None = None, + require_patient_inputs: bool = False, + require_trials_json: bool = False, + require_models: bool = False, + require_search_tables: bool = False, +) -> List[str]: + """Return blocking deployment/runtime issues discovered before heavy startup.""" + issues: List[str] = [] + paths = config.get("paths", {}) + + if require_patient_inputs: + _require_patient_inputs(issues, config) + else: + patient_cfg = config.get("patient_inputs", {}) + _require_path( + issues, + "patient_inputs.profile_dir", + patient_cfg.get("profile_dir"), + required=False, + ) + _require_path( + issues, + "paths.trials_json_folder", + paths.get("trials_json_folder"), + required=require_trials_json, + ) + _require_output_dir(issues, paths.get("output_dir")) + + entity_cfg = config.get("entity_extraction") + if entity_cfg: + _require_path( + issues, + "entity_extraction.schema_path", + entity_cfg.get("schema_path"), + required=True, + ) + + if require_models: + reranker_enabled = _reranker_enabled(config) + rag_enabled = _rag_enabled(config) + reranker_backend = _reranker_backend(config) + rag_backend = _rag_backend(config) + if entity_cfg: + backend = entity_cfg.get("backend", "gliner2") + if backend == "gliner2" and importlib.util.find_spec("gliner2") is None: + issues.append( + "entity_extraction.backend=gliner2 requires the entity extra " + "(`uv sync --extra entity`)." + ) + + linker_cfg = config.get("concept_linker") + if linker_cfg and linker_cfg.get("enabled", True): + _require_path( + issues, + "concept_linker.db_path", + linker_cfg.get("db_path"), + required=False, + ) + + model_cfg = config.get("model", {}) + if rag_enabled and rag_backend == "vllm": + _require_path( + issues, + "model.cot_adapter_path", + model_cfg.get("cot_adapter_path"), + required=True, + ) + if reranker_enabled and reranker_backend == "vllm": + _require_path( + issues, + "model.reranker_adapter_path", + model_cfg.get("reranker_adapter_path"), + required=True, + ) + needs_vllm = (rag_enabled and rag_backend == "vllm") or ( + reranker_enabled and reranker_backend == "vllm" + ) + needs_transformers = (rag_enabled and rag_backend == "transformers") or ( + reranker_enabled and reranker_backend == "transformers" + ) + # vLLM is the production LLM backend. CPU smoke configs may use the + # Transformers backend to exercise model calls without CUDA. + if needs_vllm: + vllm_available = importlib.util.find_spec("vllm") is not None + if not vllm_available: + issues.append( + "vLLM is required (`uv sync --extra llm --extra gpu`)." + ) + else: + try: + import torch + except Exception: + issues.append( + "vLLM requires PyTorch (`uv sync --extra llm --extra gpu`)." + ) + else: + if not torch.cuda.is_available(): + issues.append("vLLM requires a CUDA-capable runtime.") + if needs_transformers: + if importlib.util.find_spec("torch") is None: + issues.append( + "Transformers CPU backend requires PyTorch (`uv sync --extra llm`)." + ) + if importlib.util.find_spec("transformers") is None: + issues.append( + "Transformers CPU backend requires transformers (`uv sync --extra llm`)." + ) + + # Verify gated base models (phi-4 / gemma-2) are authorized up front, so + # an HF auth failure surfaces here rather than after first-level search. + issues.extend( + check_hf_access( + [model_cfg.get("base_model"), model_cfg.get("reranker_model_path")] + ) + ) + + search_cfg = config.get("search_backend", {}) + if search_cfg: + _require_path( + issues, + "search_backend.db_path", + search_cfg.get("db_path"), + required=require_search_tables, + ) + if require_search_tables: + if search_backend is None: + try: + from trialmatchai.search import LanceDBSearchBackend + + search_backend = LanceDBSearchBackend.from_config(config) + except Exception as exc: + issues.append(f"Search backend is not available: {exc}") + search_backend = None + if search_backend is not None: + if hasattr(search_backend, "health"): + issues.extend(search_backend.health(require_tables=True)) + else: + issues.append("Search backend does not expose a healthcheck.") + + for issue in issues: + logger.error("Preflight: %s", issue) + return issues + + +def check_cuda(config: Dict[str, Any], *, required: bool) -> List[str]: + """Verify a CUDA GPU is present when the build/match needs one.""" + issues: List[str] = [] + if importlib.util.find_spec("torch") is None: + if required: + issues.append("PyTorch is not installed (`uv sync --extra gpu`).") + return issues + try: + import torch + + available = bool(torch.cuda.is_available()) + except Exception as exc: # pragma: no cover - torch import edge cases + if required: + issues.append(f"Could not initialize PyTorch/CUDA: {exc}") + return issues + if not available: + message = "No CUDA GPU detected; embeddings/LLMs need a GPU host." + if required: + issues.append(message) + else: + logger.warning("Preflight: %s", message) + return issues + + +def check_hf_access(model_ids: List[str | None]) -> List[str]: + """Fast pre-download check that HuggingFace models are reachable/authorized. + + Calls the metadata API (no weight download). Local paths and non-hub ids are + skipped. Gated models without a token produce a clear, actionable error so + auth fails in seconds rather than after hours of other work; network/transient + errors only warn. + """ + issues: List[str] = [] + if importlib.util.find_spec("huggingface_hub") is None: + return issues # dependency checks elsewhere cover a missing stack + import os + + from huggingface_hub import HfApi + from huggingface_hub.utils import GatedRepoError, RepositoryNotFoundError + + token = os.environ.get("HF_TOKEN") or os.environ.get("HUGGING_FACE_HUB_TOKEN") + api = HfApi(token=token) + for model_id in model_ids: + if not model_id or Path(model_id).exists() or "/" not in str(model_id): + continue # local model dir or not a hub repo id + try: + api.model_info(model_id) + except GatedRepoError: + issues.append( + f"HuggingFace model '{model_id}' is gated/unauthorized — accept its " + "license on huggingface.co and export HF_TOKEN." + ) + except RepositoryNotFoundError: + issues.append( + f"HuggingFace model '{model_id}' was not found (check the id or your token)." + ) + except Exception as exc: + logger.warning("Preflight: could not verify HF model '%s': %s", model_id, exc) + return issues + + +def run_build_preflight(config: Dict[str, Any]) -> List[str]: + """Fail-fast checks for the build (setup) half before any heavy work.""" + issues: List[str] = [] + embedder_cfg = config.get("embedder", {}) + issues += check_cuda(config, required=bool(embedder_cfg.get("use_gpu", True))) + + entity_cfg = config.get("entity_extraction", {}) + if ( + entity_cfg.get("backend", "gliner2") == "gliner2" + and importlib.util.find_spec("gliner2") is None + ): + issues.append("entity_extraction.backend=gliner2 requires `uv sync --extra entity`.") + + issues += check_hf_access([embedder_cfg.get("model_name"), entity_cfg.get("model_name")]) + for issue in issues: + logger.error("Build preflight: %s", issue) + return issues + + +def _require_path( + issues: List[str], + name: str, + value: str | None, + *, + required: bool, +) -> None: + if not value: + if required: + issues.append(f"{name} is not configured.") + return + path = Path(value) + if required and not path.exists(): + issues.append(f"{name} does not exist: {path}") + elif not path.exists(): + logger.warning("Preflight: optional path does not exist: %s=%s", name, path) + + +def _require_output_dir(issues: List[str], value: str | None) -> None: + if not value: + issues.append("paths.output_dir is not configured.") + return + path = Path(value) + try: + path.mkdir(parents=True, exist_ok=True) + except OSError as exc: + issues.append(f"paths.output_dir is not writable: {path} ({exc})") + + +def _require_patient_inputs(issues: List[str], config: Dict[str, Any]) -> None: + patient_cfg = config.get("patient_inputs", {}) + profile_dir = Path(patient_cfg.get("profile_dir", "")) + if profile_dir.exists(): + return + if profile_dir: + issues.append(f"patient_inputs.profile_dir does not exist: {profile_dir}") + + +def _reranker_enabled(config: Dict[str, Any]) -> bool: + return bool(config.get("LLM_reranker", {}).get("enabled", True)) + + +def _rag_enabled(config: Dict[str, Any]) -> bool: + if not bool(config.get("use_cot_reasoning", True)): + return False + return bool(config.get("rag", {}).get("enabled", True)) + + +def _reranker_backend(config: Dict[str, Any]) -> str: + return str(config.get("LLM_reranker", {}).get("backend", "vllm")) + + +def _rag_backend(config: Dict[str, Any]) -> str: + return str(config.get("rag", {}).get("backend", "vllm")) diff --git a/src/trialmatchai/trec/__init__.py b/src/trialmatchai/trec/__init__.py new file mode 100644 index 00000000..d367c4dc --- /dev/null +++ b/src/trialmatchai/trec/__init__.py @@ -0,0 +1,17 @@ +"""TREC Clinical Trials evaluation harness for TrialMatchAI. + +Provides an idempotent, end-to-end runner over the TREC 2021/2022 and SIGIR +patient-topic tracks: it converts the legacy patient topics into canonical +profiles, builds a per-track LanceDB search index restricted to the track's +document collection, and runs the matching pipeline with per-patient resume. + +Exposed via the ``trialmatchai trec`` console command (see +``trialmatchai.cli.trec``). +""" + +from __future__ import annotations + +from trialmatchai.trec.corpus import TRACK_KEYS, TrackSpec, resolve_tracks +from trialmatchai.trec.runner import run_tracks + +__all__ = ["TRACK_KEYS", "TrackSpec", "resolve_tracks", "run_tracks"] diff --git a/src/trialmatchai/trec/corpus.py b/src/trialmatchai/trec/corpus.py new file mode 100644 index 00000000..f6cc2f97 --- /dev/null +++ b/src/trialmatchai/trec/corpus.py @@ -0,0 +1,71 @@ +"""TREC track definitions and per-track corpus resolution. + +The per-track corpus (the set of trials the index is restricted to) is derived +at run time from the official qrels — see ``trialmatchai.trec.qrels`` — not from +any checked-in NCT list. +""" + +from __future__ import annotations + +from dataclasses import dataclass +from pathlib import Path + +# Officially supported via NIST download. "sigir" is defined but has no official +# direct source (CSIRO portal), so it is not in the default run set. +TRACK_KEYS = ("21", "22", "sigir") +DEFAULT_TRACKS = ("21", "22") + +# Topic id prefix (topic N becomes "N", matching the qrels query ids). +_ID_PREFIX = {"21": "trec-2021", "22": "trec-2022", "sigir": "sigir-2014"} + + +@dataclass(frozen=True) +class TrackSpec: + """Everything needed to run one TREC track end-to-end.""" + + key: str + id_prefix: str + trec_dir: Path + profile_dir: Path + summary_dir: Path + db_path: Path + output_dir: Path + + @property + def name(self) -> str: + return f"trec{self.key}" + + +def resolve_tracks( + keys: list[str], + *, + data_dir: Path, + results_root: Path, +) -> list[TrackSpec]: + """Build :class:`TrackSpec` objects for the requested track keys. + + Layout (relative to ``data_dir`` / ``results_root``): + trec dir : /trec (downloaded topics + qrels cache) + profiles : /patients/trec/profiles + summaries : /patients/trec/summaries + index : /search_ + results : /results_trec + """ + data_dir = Path(data_dir) + results_root = Path(results_root) + specs: list[TrackSpec] = [] + for key in keys: + if key not in TRACK_KEYS: + raise ValueError(f"Unknown TREC track '{key}' (expected one of {TRACK_KEYS})") + specs.append( + TrackSpec( + key=key, + id_prefix=_ID_PREFIX[key], + trec_dir=data_dir / "trec", + profile_dir=data_dir / "patients" / f"trec{key}" / "profiles", + summary_dir=data_dir / "patients" / f"trec{key}" / "summaries", + db_path=data_dir / f"search_{key}", + output_dir=results_root / f"results_trec{key}", + ) + ) + return specs diff --git a/src/trialmatchai/trec/metrics.py b/src/trialmatchai/trec/metrics.py new file mode 100644 index 00000000..9040994e --- /dev/null +++ b/src/trialmatchai/trec/metrics.py @@ -0,0 +1,102 @@ +"""Ranking-quality metrics for TREC evaluation. + +These complement recall@k (the retrieval-side metric in ``qrels``). nDCG here is: + + * **tie-aware** (McSherry & Najork, 2008): trials sharing the same ranking + score form a tie group, and each member is given the AVERAGE positional + discount over the ranks the group spans (truncated at k). The result is the + EXPECTED nDCG over all random orderings of the tied trials, so it is + invariant to arbitrary tie-breaking — it rewards only genuinely ordering a + more-relevant trial above a less-relevant one. + * **condensed**: computed over the labeled-and-retrieved trials only, with the + IDCG normalized to that same set. It measures the quality of the final + ranking of the trials the model actually evaluated, decoupled from recall. + +Gain is linear (gain = relevance grade), matching trec_eval's default and the +legacy evaluation. +""" + +from __future__ import annotations + +import math +from typing import Dict, Mapping, Sequence, Set + + +def _discount(rank: int) -> float: + """Log2 positional discount for a 1-indexed rank: 1 / log2(rank + 1).""" + return 1.0 / math.log2(rank + 1) + + +def tie_aware_dcg_at_k( + ordered_ids: Sequence[str], + score_of: Mapping[str, float], + gain_of: Mapping[str, float], + k: int, +) -> float: + """Expected DCG@k over random orderings of tied scores (McSherry-Najork). + + ``ordered_ids`` must already be sorted by descending ranking score, so equal + scores are contiguous. Each tie group spanning 1-indexed ranks [a..b] gives + every member the mean discount over ranks a..min(b, k). + """ + n = len(ordered_ids) + total = 0.0 + i = 0 + while i < n: + j = i + while j + 1 < n and score_of[ordered_ids[j + 1]] == score_of[ordered_ids[i]]: + j += 1 + a, b = i + 1, j + 1 # 1-indexed ranks spanned by this tie group + hi = min(b, k) + if hi >= a: + avg_discount = sum(_discount(r) for r in range(a, hi + 1)) / (b - a + 1) + for d in ordered_ids[i : j + 1]: + total += float(gain_of.get(d, 0.0)) * avg_discount + i = j + 1 + return total + + +def idcg_at_k(gains: Sequence[float], k: int) -> float: + """Ideal DCG@k — gains sorted descending (tie order is irrelevant: equal gains).""" + ideal = sorted((float(g) for g in gains), reverse=True)[:k] + return sum(g * _discount(r + 1) for r, g in enumerate(ideal)) + + +def ndcg_at_k( + ordered_ids: Sequence[str], + score_of: Mapping[str, float], + gain_of: Mapping[str, float], + k: int, +) -> float: + """Tie-aware nDCG@k. ``ordered_ids`` should be the condensed (labeled) list.""" + if k <= 0 or not ordered_ids: + return 0.0 + idcg = idcg_at_k([gain_of.get(d, 0.0) for d in ordered_ids], k) + if idcg <= 0: + return 0.0 + return tie_aware_dcg_at_k(ordered_ids, score_of, gain_of, k) / idcg + + +def precision_at_k(ordered_ids: Sequence[str], relevant: Set[str], k: int) -> float: + """Standard binary P@k over the final ranked list (hard cutoff k).""" + if k <= 0: + return 0.0 + topk = ordered_ids[:k] + if not topk: + return 0.0 + return sum(1 for d in topk if d in relevant) / float(k) + + +def condensed_ndcg( + ranked_ids: Sequence[str], + score_of: Mapping[str, float], + grade_of: Mapping[str, int], + cutoffs: Sequence[int], +) -> Dict[int, float]: + """Tie-aware nDCG@k for each cutoff, condensed to labeled-and-retrieved trials. + + ``ranked_ids`` is the final ranking order; ``grade_of`` is the qrels grade for + judged trials. Only trials present in ``grade_of`` are kept (condensed). + """ + condensed = [nid for nid in ranked_ids if nid in grade_of] + return {k: ndcg_at_k(condensed, score_of, grade_of, k) for k in cutoffs} diff --git a/src/trialmatchai/trec/qrels.py b/src/trialmatchai/trec/qrels.py new file mode 100644 index 00000000..92db16e0 --- /dev/null +++ b/src/trialmatchai/trec/qrels.py @@ -0,0 +1,223 @@ +"""Official TREC relevance judgments (qrels): download, parse, corpus, metrics. + +The per-track NCT corpus pool is derived directly from the qrels (the set of +judged trials) — replacing the previously-checked-in ``Unique_NCT_IDs`` lists. +Evaluation computes recall@k of the retrieval against the same qrels. + +TREC Clinical Trials relevance grades: 0 = not relevant, 1 = excluded (the trial +matches the condition but the patient is excluded), 2 = eligible. By default a +trial counts as relevant at grade >= 1 (matching the legacy recall evaluation); +pass ``threshold=2`` to score eligible-only. +""" + +from __future__ import annotations + +import json +from pathlib import Path + +import requests +from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_exponential + +from trialmatchai.trec.metrics import condensed_ndcg, precision_at_k +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + +QRELS_URLS: dict[str, str] = { + "21": "https://trec.nist.gov/data/trials/qrels2021.txt", + "22": "https://trec.nist.gov/data/trials/qrels2022.txt", +} + +DEFAULT_CUTOFFS = (10, 50, 100, 200, 300, 500, 1000) +NDCG_CUTOFFS = (5, 10, 20) +P_CUTOFF = 10 + + +@retry( + retry=retry_if_exception_type(requests.RequestException), + stop=stop_after_attempt(4), + wait=wait_exponential(multiplier=1, min=1, max=20), + reraise=True, +) +def _http_get(url: str, timeout: float = 60.0) -> bytes: + response = requests.get(url, timeout=timeout) + response.raise_for_status() + return response.content + + +def download_qrels(track: str, dest_dir: Path) -> Path: + """Fetch (and cache) the official qrels file for a track.""" + if track not in QRELS_URLS: + raise FileNotFoundError( + f"No official qrels URL for track '{track}'. Provide the qrels file " + f"manually at {Path(dest_dir) / f'qrels_{track}.txt'}." + ) + dest_dir = Path(dest_dir) + dest_dir.mkdir(parents=True, exist_ok=True) + dest = dest_dir / f"qrels_{track}.txt" + if dest.exists() and dest.stat().st_size > 0: + logger.info("Qrels for track %s already present: %s", track, dest) + return dest + logger.info("Downloading official qrels for track %s from %s", track, QRELS_URLS[track]) + dest.write_bytes(_http_get(QRELS_URLS[track])) + return dest + + +def parse_qrels(path: Path, id_prefix: str) -> dict[str, dict[str, int]]: + """Parse a TREC qrels file into {query_id: {nct_id: relevance}}. + + Lines are `` `` (whitespace + separated). The query id is ``f"{id_prefix}{topic}"`` to match the imported + topic ids and the per-patient results folders. + """ + qrels: dict[str, dict[str, int]] = {} + for raw in Path(path).read_text(encoding="utf-8", errors="ignore").splitlines(): + parts = raw.split() + if len(parts) < 4: + continue + topic, _iteration, nct_id, relevance = parts[0], parts[1], parts[2], parts[3] + try: + rel = int(relevance) + except ValueError: + continue + query_id = f"{id_prefix}{topic.strip()}" + qrels.setdefault(query_id, {})[nct_id.strip()] = rel + if not qrels: + raise ValueError(f"No judgments parsed from qrels file {path}") + return qrels + + +def corpus_ncts(qrels: dict[str, dict[str, int]]) -> set[str]: + """The judged-trial pool across all queries (used to restrict the index).""" + pool: set[str] = set() + for judgments in qrels.values(): + pool.update(judgments) + return pool + + +def relevant_ncts(qrels: dict[str, dict[str, int]], *, threshold: int = 1) -> dict[str, set[str]]: + return { + query_id: {nct for nct, rel in judgments.items() if rel >= threshold} + for query_id, judgments in qrels.items() + } + + +def _retrieved_for_patient(patient_dir: Path) -> list[str]: + """Ordered retrieved NCT ids for one patient. + + Prefers the first-level candidate list (nct_ids.txt, up to ~1000) so recall + at large cutoffs is meaningful; falls back to the final ranked_trials.json. + """ + nct_ids = patient_dir / "nct_ids.txt" + if nct_ids.exists(): + return [line.strip() for line in nct_ids.read_text().splitlines() if line.strip()] + ranked = patient_dir / "ranked_trials.json" + if ranked.exists(): + data = json.loads(ranked.read_text()) + return [str(item.get("TrialID")) for item in data if item.get("TrialID")] + return [] + + +def recall_at_k(retrieved: list[str], relevant: set[str], k: int) -> float | None: + if not relevant: + return None + hits = sum(1 for nct in retrieved[:k] if nct in relevant) + return hits / len(relevant) + + +def _ranked_with_scores(patient_dir: Path) -> tuple[list[str], dict[str, float]]: + """Final ranked NCT ids (in order) + their eligibility scores from ranked_trials.json.""" + ranked = patient_dir / "ranked_trials.json" + if not ranked.exists(): + return [], {} + try: + data = json.loads(ranked.read_text()) + except Exception: + return [], {} + items = data.get("RankedTrials", []) if isinstance(data, dict) else data + order: list[str] = [] + score_of: dict[str, float] = {} + for item in items or []: + if not isinstance(item, dict) or item.get("TrialID") is None: + continue + nid = str(item["TrialID"]) + order.append(nid) + score_of[nid] = float(item.get("Score", 0.0)) + return order, score_of + + +def _mean(sums: dict, counts: dict) -> dict: + return {key: (sums[key] / counts[key] if counts[key] else None) for key in sums} + + +def evaluate( + qrels: dict[str, dict[str, int]], + results_dir: Path, + *, + cutoffs: tuple[int, ...] = DEFAULT_CUTOFFS, + threshold: int = 1, +) -> dict: + """Per-query and mean metrics over the patients in ``results_dir``. + + Two complementary families: + * recall@k — retrieval quality (first-level candidate list). + * tie-aware nDCG@{5,10,20} + P@10 — ranking quality of the final + ranked_trials.json, condensed to labeled-and-retrieved trials. nDCG is + order-invariant on ties (McSherry-Najork); P@10 is reported for both + "relevant" (grade>=1) and "eligible" (grade==2). + """ + results_dir = Path(results_dir) + relevant = relevant_ncts(qrels, threshold=threshold) + eligible = relevant_ncts(qrels, threshold=2) + per_query: dict[str, dict] = {} + + rec_sums = {f"recall@{k}": 0.0 for k in cutoffs} + rec_counts = {f"recall@{k}": 0 for k in cutoffs} + rank_sums = {f"ndcg@{k}": 0.0 for k in NDCG_CUTOFFS} + rank_sums[f"P@{P_CUTOFF}(rel>=1)"] = 0.0 + rank_sums[f"P@{P_CUTOFF}(eligible)"] = 0.0 + rank_counts = {key: 0 for key in rank_sums} + + for query_id, judgments in qrels.items(): + patient_dir = results_dir / query_id + rel_set = relevant.get(query_id, set()) + if not patient_dir.is_dir() or not rel_set: + continue + retrieved = _retrieved_for_patient(patient_dir) + ranked, score_of = _ranked_with_scores(patient_dir) + row = { + "num_relevant": len(rel_set), + "num_retrieved": len(retrieved), + "num_ranked": len(ranked), + } + for k in cutoffs: + r = recall_at_k(retrieved, rel_set, k) + row[f"recall@{k}"] = r + if r is not None: + rec_sums[f"recall@{k}"] += r + rec_counts[f"recall@{k}"] += 1 + + if ranked: + ndcg = condensed_ndcg(ranked, score_of, judgments, NDCG_CUTOFFS) + for k in NDCG_CUTOFFS: + row[f"ndcg@{k}"] = ndcg[k] + rank_sums[f"ndcg@{k}"] += ndcg[k] + rank_counts[f"ndcg@{k}"] += 1 + p_rel = precision_at_k(ranked, rel_set, P_CUTOFF) + p_elig = precision_at_k(ranked, eligible.get(query_id, set()), P_CUTOFF) + row[f"P@{P_CUTOFF}(rel>=1)"] = p_rel + row[f"P@{P_CUTOFF}(eligible)"] = p_elig + rank_sums[f"P@{P_CUTOFF}(rel>=1)"] += p_rel + rank_sums[f"P@{P_CUTOFF}(eligible)"] += p_elig + rank_counts[f"P@{P_CUTOFF}(rel>=1)"] += 1 + rank_counts[f"P@{P_CUTOFF}(eligible)"] += 1 + per_query[query_id] = row + + mean = {**_mean(rec_sums, rec_counts), **_mean(rank_sums, rank_counts)} + return { + "recall_relevance_threshold": threshold, + "num_queries_scored": len(per_query), + "num_queries_ranked": rank_counts[f"ndcg@{NDCG_CUTOFFS[0]}"], + "mean": mean, + "per_query": per_query, + } diff --git a/src/trialmatchai/trec/runner.py b/src/trialmatchai/trec/runner.py new file mode 100644 index 00000000..2aacd9b3 --- /dev/null +++ b/src/trialmatchai/trec/runner.py @@ -0,0 +1,154 @@ +"""End-to-end TREC runner — a preset over the core orchestration stages. + +For each requested track it converts the TREC patient topics, builds a search +index restricted to the track's NCT collection, and runs matching with +per-patient resume. Every step is idempotent (skips already-done work). +""" + +from __future__ import annotations + +from copy import deepcopy +from pathlib import Path +from typing import Any, Dict + +from trialmatchai.config.config_loader import load_config +from trialmatchai.orchestration import ( + build_index, + count_pending, + expand_queries, + free_models, + run_matching, +) +from trialmatchai.trec import qrels as qrels_mod +from trialmatchai.trec.corpus import TrackSpec, resolve_tracks +from trialmatchai.trec.topics import import_topics +from trialmatchai.utils.file_utils import write_json_file +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def _track_config(base_config: Dict[str, Any], spec: TrackSpec) -> Dict[str, Any]: + """Clone the base config with this track's paths swapped in. + + Faithful to the legacy pipeline, the TREC preset enables runtime CoT query + expansion (which produced the original keywords.json from raw topic text). + """ + cfg = deepcopy(base_config) + cfg.setdefault("search_backend", {})["db_path"] = str(spec.db_path) + cfg.setdefault("patient_inputs", {})["profile_dir"] = str(spec.profile_dir) + cfg["patient_inputs"]["summary_dir"] = str(spec.summary_dir) + cfg.setdefault("paths", {})["output_dir"] = str(spec.output_dir) + cfg.setdefault("query_expansion", {})["enabled"] = True + return cfg + + +def run_tracks( + track_keys: list[str], + *, + config_path: str | None = None, + data_dir: str | Path = "data", + results_root: str | Path = ".", + processed_trials_folder: str | Path | None = None, + processed_criteria_folder: str | Path | None = None, + index_only: bool = False, + evaluate: bool = True, + force_reindex: bool = False, + force_rematch: bool = False, +) -> int: + """Run the TREC e2e for each track. Returns a process exit code. + + ``processed_trials_folder`` / ``processed_criteria_folder`` default to + ``/processed_*`` but can point elsewhere (e.g. the prepared data + on /nfs/scratch) while the index and all run outputs live under ``data_dir`` + on /nfs/home. The per-track corpus is derived from the official qrels. + """ + base_config = load_config(config_path) + data_dir = Path(data_dir) + processed_trials = Path(processed_trials_folder or data_dir / "processed_trials") + processed_criteria = Path(processed_criteria_folder or data_dir / "processed_criteria") + + specs = resolve_tracks(track_keys, data_dir=data_dir, results_root=Path(results_root)) + failures = 0 + + for spec in specs: + logger.info("================ TREC track %s ================", spec.key) + cfg = _track_config(base_config, spec) + + # 1) Acquire official topics -> canonical profiles + summaries (idempotent). + try: + import_topics( + spec.key, + trec_dir=spec.trec_dir, + profile_dir=spec.profile_dir, + summary_dir=spec.summary_dir, + ) + except Exception: + logger.exception("Topic import failed for track %s", spec.key) + failures += 1 + continue + + # 2) Official qrels -> per-track corpus pool (replaces the removed lists). + try: + qrels_path = qrels_mod.download_qrels(spec.key, spec.trec_dir / "qrels") + qrels = qrels_mod.parse_qrels(qrels_path, spec.id_prefix) + nct_filter = qrels_mod.corpus_ncts(qrels) + logger.info("Track %s corpus pool from qrels: %s trials", spec.key, len(nct_filter)) + except Exception: + logger.exception("Qrels acquisition failed for track %s", spec.key) + failures += 1 + continue + + # 3) Runtime CoT query expansion -> enriched keywords.json (idempotent). + if not index_only: + expand_queries(cfg, force=force_rematch) + + # 4) Build the per-track index, restricted to the qrels corpus pool. + try: + build_index( + cfg, + processed_trials_folder=processed_trials, + processed_criteria_folder=processed_criteria, + nct_filter=nct_filter, + force=force_reindex, + ) + except Exception: + logger.exception("Indexing failed for track %s", spec.key) + failures += 1 + continue + + if index_only: + pending, done = count_pending(cfg) + logger.info("Track %s indexed (%s patients pending, %s done).", spec.key, pending, done) + continue + + # 5) Match with per-patient resume. + rc = run_matching(cfg, resume=True, force=force_rematch) + if rc != 0: + logger.error("Matching returned %s for track %s", rc, spec.key) + failures += 1 + continue + + # 6) Evaluate recall@k against the same qrels. + if evaluate: + try: + metrics = qrels_mod.evaluate(qrels, spec.output_dir) + metrics_path = Path(spec.output_dir) / "evaluation_metrics.json" + write_json_file(metrics, str(metrics_path)) + logger.info( + "Track %s metrics: %s -> %s", + spec.key, + metrics["mean"], + metrics_path, + ) + except Exception: + logger.exception("Evaluation failed for track %s", spec.key) + logger.info("Track %s done -> %s", spec.key, spec.output_dir) + + # All tracks done — release the shared GPU engines once. + free_models() + if failures: + logger.warning("TREC run completed with %s track failure(s).", failures) + return 1 + logger.info("All requested TREC tracks complete: %s", " ".join(track_keys)) + return 0 diff --git a/src/trialmatchai/trec/topics.py b/src/trialmatchai/trec/topics.py new file mode 100644 index 00000000..004611c4 --- /dev/null +++ b/src/trialmatchai/trec/topics.py @@ -0,0 +1,275 @@ +"""Official TREC topic acquisition and import. + +Downloads the authoritative patient topics for each track straight from the +source (NIST for 2021/2022, the CSIRO/SIGIR-2016 collection for sigir), parses +the topic XML, and builds canonical :class:`PatientProfile` objects from the +RAW topic text only — no LLM-preprocessed fields. Demographics (age/sex) are +extracted deterministically from the narrative, so nothing here depends on the +old gpt-generated ``processed_patients*.json`` content. + +The runtime CoT query-expansion (see ``trialmatchai.matching.query_expansion``) +is what turns this raw text into the expanded ``keywords.json`` consumed by +first-level retrieval — faithfully reproducing the legacy pipeline. +""" + +from __future__ import annotations + +import re +from dataclasses import dataclass +from pathlib import Path +from xml.etree import ElementTree as ET + +import requests +from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_exponential + +from trialmatchai.interop.models import Demographics, PatientNote, PatientProfile, Provenance +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + +SOURCE_FORMAT = "trec_topic" + + +@dataclass(frozen=True) +class TopicSource: + """Where a track's official topics live and how to label them. + + kind == "nist_xml": download topic XML from ``topics_url`` and parse + ```` (ids get ``id_prefix``). + kind == "local_raw": read verbatim raw patient text from an on-disk JSON + (``raw_json``); keys are already full patient ids. + """ + + track: str + id_prefix: str + kind: str + topics_url: str | None = None # nist_xml + raw_json: str | None = None # local_raw (filename under /trec/) + collection_url: str | None = None + note: str = "" + + +TOPIC_SOURCES: dict[str, TopicSource] = { + "21": TopicSource( + track="21", + id_prefix="trec-2021", + kind="nist_xml", + topics_url="https://trec.nist.gov/data/trials/topics2021.xml", + ), + "22": TopicSource( + track="22", + id_prefix="trec-2022", + kind="nist_xml", + topics_url="https://trec.nist.gov/data/trials/topics2022.xml", + ), + # The SIGIR-2016 collection (Koopman & Zuccon) is hosted on the CSIRO Data + # Access Portal (no stable direct-download URL), so sigir topics are sourced + # from the verbatim on-disk raw patient text — the same official admission + # statements, with none of the gpt-generated fields. + "sigir": TopicSource( + track="sigir", + id_prefix="sigir-2014", + kind="local_raw", + raw_json="processed_sigir_patients.json", + collection_url="https://data.csiro.au/collection/csiro:17152", + note="sigir raw text is read verbatim from data/trec/processed_sigir_patients.json " + "(raw_description only; no gpt-generated fields).", + ), +} + + +@retry( + retry=retry_if_exception_type(requests.RequestException), + stop=stop_after_attempt(4), + wait=wait_exponential(multiplier=1, min=1, max=20), + reraise=True, +) +def _http_get(url: str, timeout: float = 60.0) -> bytes: + response = requests.get(url, timeout=timeout) + response.raise_for_status() + return response.content + + +def download_topics(track: str, dest_dir: Path) -> Path: + """Fetch (and cache) the official topic XML for a track. + + Returns the local path. For portal-only sources (sigir) the file must be + placed manually; a clear error explains where to get it. + """ + source = TOPIC_SOURCES[track] + dest_dir = Path(dest_dir) + dest_dir.mkdir(parents=True, exist_ok=True) + dest = dest_dir / f"topics_{track}.xml" + + if dest.exists() and dest.stat().st_size > 0: + logger.info("Topics for track %s already present: %s", track, dest) + return dest + + if not source.topics_url: + raise FileNotFoundError( + f"No direct download for track '{track}'. {source.note} " + f"Source: {source.collection_url}" + ) + + logger.info("Downloading official topics for track %s from %s", track, source.topics_url) + dest.write_bytes(_http_get(source.topics_url)) + return dest + + +# --------------------------------------------------------------------------- # +# Parsing +# --------------------------------------------------------------------------- # +def parse_topics(path: Path, id_prefix: str) -> dict[str, str]: + """Parse a TREC/TREC-CDS topic XML into {patient_id: raw_text}. + + Handles both the flat ``free text`` form + (2021/2022) and the TREC-CDS form where a topic wraps ```` / + ```` children (sigir) — preferring the summary, then the + description, then the element's own text. + """ + root = ET.parse(path).getroot() + topics: dict[str, str] = {} + for topic in root.iter("topic"): + number = topic.get("number") or topic.get("id") + if number is None: + continue + text = _topic_text(topic) + if not text: + continue + topics[f"{id_prefix}{number.strip()}"] = text + if not topics: + raise ValueError(f"No elements parsed from {path}") + return topics + + +def _topic_text(topic: ET.Element) -> str: + for child_tag in ("summary", "description"): + child = topic.find(child_tag) + if child is not None and (child.text or "").strip(): + return _clean(child.text) + return _clean("".join(topic.itertext())) + + +def _clean(text: str | None) -> str: + return re.sub(r"\s+", " ", (text or "")).strip() + + +# --------------------------------------------------------------------------- # +# Deterministic demographics (no LLM, no gpt-preprocessed fields) +# --------------------------------------------------------------------------- # +_AGE_PATTERNS = [ + re.compile(r"(\d{1,3})\s*[- ]?\s*year[\s-]*old", re.I), + re.compile(r"(\d{1,3})\s*[- ]?\s*(?:yo|y/o|yr)\b", re.I), + re.compile(r"\b(\d{1,3})\s*[- ]?\s*(?:M|F|male|female|man|woman)\b"), +] +_FEMALE = re.compile(r"\b(?:female|woman|girl|lady|\d{1,3}\s*F)\b", re.I) +_MALE = re.compile(r"\b(?:male|man|boy|gentleman|\d{1,3}\s*M)\b", re.I) + + +def extract_demographics(text: str) -> tuple[float | None, str | None]: + """Best-effort (age_years, sex) from the topic narrative; None if unknown.""" + age: float | None = None + for pattern in _AGE_PATTERNS: + m = pattern.search(text) + if m: + value = int(m.group(1)) + if 0 < value <= 120: + age = float(value) + break + # Female check first: "male" is a substring concern handled by word bounds. + sex: str | None = None + if _FEMALE.search(text): + sex = "Female" + elif _MALE.search(text): + sex = "Male" + return age, sex + + +def build_profile_from_topic(patient_id: str, raw_text: str) -> PatientProfile: + """Build a canonical profile from raw topic text only (no derived terms).""" + provenance = Provenance(source_format=SOURCE_FORMAT, source_id=patient_id) + age, sex = extract_demographics(raw_text) + return PatientProfile( + patient_id=patient_id, + demographics=Demographics(sex=sex, age_years=age), + notes=[ + PatientNote( + note_id=f"{patient_id}-note", + text=raw_text, + note_type="trec-topic", + provenance=provenance, + ) + ], + provenance=[provenance], + ) + + +def _load_local_raw(path: Path) -> dict[str, str]: + """Read {patient_id: verbatim raw text} from an on-disk topic JSON. + + Uses only the ``raw_description`` field (the official admission statement); + every gpt-generated field is ignored. Keys are already full patient ids. + """ + import json + + records = json.loads(Path(path).read_text(encoding="utf-8")) + topics = { + pid: _clean(rec.get("raw_description")) + for pid, rec in records.items() + if _clean(rec.get("raw_description")) + } + if not topics: + raise ValueError(f"No raw_description text found in {path}") + return topics + + +def load_track_topics(track: str, trec_dir: Path) -> dict[str, str]: + """Resolve a track's topics to {patient_id: raw_text} per its source kind.""" + source = TOPIC_SOURCES[track] + if source.kind == "nist_xml": + path = download_topics(track, Path(trec_dir) / "raw_topics") + return parse_topics(path, source.id_prefix) + if source.kind == "local_raw": + return _load_local_raw(Path(trec_dir) / source.raw_json) + raise ValueError(f"Unknown topic source kind: {source.kind}") + + +def import_topics( + track: str, + *, + trec_dir: Path, + profile_dir: Path, + summary_dir: Path, + force: bool = False, +) -> int: + """Acquire a track's official topics and write canonical inputs. + + Writes one PatientProfile per topic (raw text + demographics only) plus a + deterministic matching summary (later enriched by CoT query expansion). + Idempotent: skips when profiles already exist. Returns the patient count. + """ + import json + + from trialmatchai.interop.exporters import profile_to_matching_summary + + profile_dir = Path(profile_dir) + summary_dir = Path(summary_dir) + if not force and profile_dir.exists() and any(profile_dir.glob("*.json")): + have = len(list(profile_dir.glob("*.json"))) + logger.info("Topic import skipped for track %s: %s profiles present", track, have) + return have + + topics = load_track_topics(track, Path(trec_dir)) + + profile_dir.mkdir(parents=True, exist_ok=True) + summary_dir.mkdir(parents=True, exist_ok=True) + for patient_id, raw_text in topics.items(): + profile = build_profile_from_topic(patient_id, raw_text) + (profile_dir / f"{patient_id}.json").write_text( + profile.model_dump_json(indent=2, exclude_none=True), encoding="utf-8" + ) + (summary_dir / f"{patient_id}.json").write_text( + json.dumps(profile_to_matching_summary(profile), indent=2), encoding="utf-8" + ) + logger.info("Imported %s official topics for track %s", len(topics), track) + return len(topics) diff --git a/source/Matcher/services/__init__.py b/src/trialmatchai/utils/__init__.py similarity index 100% rename from source/Matcher/services/__init__.py rename to src/trialmatchai/utils/__init__.py diff --git a/src/trialmatchai/utils/file_utils.py b/src/trialmatchai/utils/file_utils.py new file mode 100644 index 00000000..b59698a1 --- /dev/null +++ b/src/trialmatchai/utils/file_utils.py @@ -0,0 +1,78 @@ +import json +import os +import tempfile +from typing import Dict, List + + +def read_json_file(file_path: str) -> Dict: + """Read a JSON file and return its contents.""" + try: + with open(file_path, "r", encoding="utf-8") as f: + return json.load(f) + except Exception as e: + raise ValueError(f"Failed to read {file_path}: {str(e)}") + + +def write_json_file(data: Dict, file_path: str): + """Atomically write data to a JSON file. + + Writes to a temp file in the same directory, fsyncs, then os.replace()s it + into place — so a crash mid-write can never leave a truncated/partial file + that resume logic would mistake for a completed artifact. + """ + try: + path = str(file_path) + directory = os.path.dirname(path) or "." + os.makedirs(directory, exist_ok=True) + fd, tmp = tempfile.mkstemp(dir=directory, prefix=".tmp-", suffix=".json") + try: + with os.fdopen(fd, "w", encoding="utf-8") as f: + json.dump(data, f, indent=4, ensure_ascii=False) + f.flush() + os.fsync(f.fileno()) + os.replace(tmp, path) + except Exception: + try: + os.unlink(tmp) + except OSError: + pass + raise + except Exception as e: + raise ValueError(f"Failed to write {file_path}: {str(e)}") + + +def is_valid_json_file(file_path: str) -> bool: + """True only if the path exists and contains parseable JSON. + + Used by resume gates so a present-but-corrupt/partial marker is treated as + incomplete (re-run) rather than done. + """ + try: + with open(file_path, "r", encoding="utf-8") as f: + json.load(f) + return True + except Exception: + return False + + +def read_text_file(file_path: str) -> List[str]: + """Read lines from a text file.""" + try: + with open(file_path, "r", encoding="utf-8") as f: + return [line.strip() for line in f if line.strip()] + except Exception as e: + raise ValueError(f"Failed to read {file_path}: {str(e)}") + + +def write_text_file(lines: List[str], file_path: str): + """Write lines to a text file.""" + try: + with open(file_path, "w", encoding="utf-8") as f: + f.write("\n".join(lines)) + except Exception as e: + raise ValueError(f"Failed to write {file_path}: {str(e)}") + + +def create_directory(path: str): + """Create a directory if it doesn't exist.""" + os.makedirs(path, exist_ok=True) diff --git a/src/trialmatchai/utils/json_utils.py b/src/trialmatchai/utils/json_utils.py new file mode 100644 index 00000000..f684a3d7 --- /dev/null +++ b/src/trialmatchai/utils/json_utils.py @@ -0,0 +1,35 @@ +from __future__ import annotations + +import json +from typing import Any + + +def extract_json_object(text: str) -> dict[str, Any]: + """Extract and decode the first balanced JSON object from model output.""" + start = text.find("{") + if start == -1: + raise ValueError("No JSON object found") + + depth = 0 + in_string = False + escape = False + for index, char in enumerate(text[start:], start=start): + if escape: + escape = False + continue + if char == "\\" and in_string: + escape = True + continue + if char == '"': + in_string = not in_string + continue + if in_string: + continue + if char == "{": + depth += 1 + elif char == "}": + depth -= 1 + if depth == 0: + return json.loads(text[start : index + 1]) + + raise ValueError("Unbalanced JSON object") diff --git a/source/Matcher/utils/logging_config.py b/src/trialmatchai/utils/logging_config.py similarity index 82% rename from source/Matcher/utils/logging_config.py rename to src/trialmatchai/utils/logging_config.py index 04eaedb0..8c44f8e6 100644 --- a/source/Matcher/utils/logging_config.py +++ b/src/trialmatchai/utils/logging_config.py @@ -39,8 +39,14 @@ def reset_request_id(token: contextvars.Token) -> None: _request_id_var.reset(token) -def setup_logging(name: Optional[str] = None) -> logging.Logger: - """Configure logging for the application.""" +_root_configured = False + + +def _configure_root_once() -> None: + """Install the root stream handler exactly once (imported by ~all modules).""" + global _root_configured + if _root_configured: + return level = os.getenv("TRIALMATCHAI_LOG_LEVEL", "INFO").upper() use_json = os.getenv("TRIALMATCHAI_LOG_JSON", "0") in {"1", "true", "TRUE"} handler = logging.StreamHandler(sys.stdout) @@ -54,6 +60,13 @@ def setup_logging(name: Optional[str] = None) -> logging.Logger: ) ) logging.basicConfig(level=level, handlers=[handler]) + _root_configured = True + + +def setup_logging(name: Optional[str] = None) -> logging.Logger: + """Return a named logger with request-id context; configures root once.""" + _configure_root_once() + level = os.getenv("TRIALMATCHAI_LOG_LEVEL", "INFO").upper() logger = logging.getLogger(name if name else __name__) logger.setLevel(level) if not any(isinstance(f, ContextFilter) for f in logger.filters): diff --git a/source/Matcher/utils/temporal_utils.py b/src/trialmatchai/utils/temporal_utils.py similarity index 100% rename from source/Matcher/utils/temporal_utils.py rename to src/trialmatchai/utils/temporal_utils.py diff --git a/src/trialmatchai/utils/text.py b/src/trialmatchai/utils/text.py new file mode 100644 index 00000000..f4f2ed09 --- /dev/null +++ b/src/trialmatchai/utils/text.py @@ -0,0 +1,21 @@ +"""Shared text helpers.""" + +from __future__ import annotations + +from collections.abc import Iterable, Mapping +from typing import Any + + +def flatten_text(value: Any) -> str: + """Flatten a possibly-nested value (str/mapping/sequence) into whitespace- + normalized text. Used for both trial indexing and backend search-text building. + """ + if value is None: + return "" + if isinstance(value, str): + return " ".join(value.split()) + if isinstance(value, Mapping): + return " ".join(flatten_text(item) for item in value.values()).strip() + if isinstance(value, Iterable) and not isinstance(value, (bytes, bytearray)): + return " ".join(flatten_text(item) for item in value).strip() + return str(value) diff --git a/source/Matcher/utils/timing.py b/src/trialmatchai/utils/timing.py similarity index 100% rename from source/Matcher/utils/timing.py rename to src/trialmatchai/utils/timing.py diff --git a/tests/conftest.py b/tests/conftest.py index b4c383e1..17d198bf 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -2,4 +2,4 @@ from pathlib import Path ROOT = Path(__file__).resolve().parents[1] -sys.path.append(str(ROOT / "source")) +sys.path.append(str(ROOT / "src")) diff --git a/tests/test_bootstrap_data.py b/tests/test_bootstrap_data.py new file mode 100644 index 00000000..f4653f25 --- /dev/null +++ b/tests/test_bootstrap_data.py @@ -0,0 +1,124 @@ +from __future__ import annotations + +import hashlib +import io +import tarfile +import zipfile +from pathlib import Path + +import pytest + +from trialmatchai.cli.bootstrap_data import ( + MODELS_ARCHIVE, + PROCESSED_TRIALS_ARCHIVE, + bootstrap_data, + _safe_extract_tar_gz, + _safe_extract_zip, + _verify_sha256, +) + + +def test_bootstrap_data_uses_existing_archives_and_removes_them(tmp_path, monkeypatch): + data_dir = tmp_path / "data" + data_dir.mkdir() + + processed_archive = data_dir / PROCESSED_TRIALS_ARCHIVE + models_archive = data_dir / MODELS_ARCHIVE + criteria_archive = data_dir / "criteria_part_0.zip" + + _write_tar_gz( + processed_archive, + {"processed_trials/NCT000001.json": b'{"nct_id": "NCT000001"}'}, + ) + _write_tar_gz(models_archive, {"demo-model/config.json": b"{}"}) + _write_zip(criteria_archive, {"criterion.txt": "Age >= 18"}) + + monkeypatch.setenv( + "TRIALMATCHAI_PROCESSED_TRIALS_SHA256", _sha256(processed_archive) + ) + monkeypatch.setenv("TRIALMATCHAI_MODELS_SHA256", _sha256(models_archive)) + monkeypatch.setenv("TRIALMATCHAI_CRITERIA_PART_0_SHA256", _sha256(criteria_archive)) + + bootstrap_data( + root=tmp_path, + data_url="https://example.invalid/processed_trials.tar.gz", + models_url="https://example.invalid/models.tar.gz", + criteria_base_url="https://example.invalid", + criteria_chunks=1, + ) + + assert (tmp_path / "data/processed_trials/NCT000001.json").exists() + assert (tmp_path / "data/processed_criteria/criterion.txt").exists() + assert (tmp_path / "models/demo-model/config.json").exists() + assert not processed_archive.exists() + assert not models_archive.exists() + assert not criteria_archive.exists() + + bootstrap_data( + root=tmp_path, + data_url="https://example.invalid/missing-processed_trials.tar.gz", + models_url="https://example.invalid/missing-models.tar.gz", + criteria_base_url="https://example.invalid/missing", + criteria_chunks=1, + ) + + +def test_verify_sha256_rejects_mismatches(tmp_path): + path = tmp_path / "artifact.txt" + path.write_text("contents") + + with pytest.raises(ValueError, match="Checksum mismatch"): + _verify_sha256(path, "0" * 64) + + +def test_tar_extraction_rejects_path_traversal(tmp_path): + archive = tmp_path / "unsafe.tar.gz" + with tarfile.open(archive, "w:gz") as tar: + data = b"bad" + info = tarfile.TarInfo("../escape.txt") + info.size = len(data) + tar.addfile(info, io.BytesIO(data)) + + with pytest.raises(ValueError, match="unsafe path"): + _safe_extract_tar_gz(archive, tmp_path / "target") + + +def test_tar_extraction_rejects_links(tmp_path): + archive = tmp_path / "unsafe-link.tar.gz" + with tarfile.open(archive, "w:gz") as tar: + info = tarfile.TarInfo("link") + info.type = tarfile.SYMTYPE + info.linkname = "/etc/passwd" + tar.addfile(info) + + with pytest.raises(ValueError, match="unsafe member"): + _safe_extract_tar_gz(archive, tmp_path / "target") + + +def test_zip_extraction_rejects_symlinks(tmp_path): + archive = tmp_path / "unsafe-link.zip" + with zipfile.ZipFile(archive, "w") as zip_file: + info = zipfile.ZipInfo("link") + info.external_attr = 0o120777 << 16 + zip_file.writestr(info, "/etc/passwd") + + with pytest.raises(ValueError, match="unsafe member"): + _safe_extract_zip(archive, tmp_path / "target") + + +def _write_tar_gz(path: Path, files: dict[str, bytes]) -> None: + with tarfile.open(path, "w:gz") as tar: + for name, data in files.items(): + info = tarfile.TarInfo(name) + info.size = len(data) + tar.addfile(info, io.BytesIO(data)) + + +def _write_zip(path: Path, files: dict[str, str]) -> None: + with zipfile.ZipFile(path, "w") as zip_file: + for name, data in files.items(): + zip_file.writestr(name, data) + + +def _sha256(path: Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() diff --git a/tests/test_concept_sources.py b/tests/test_concept_sources.py new file mode 100644 index 00000000..89f10662 --- /dev/null +++ b/tests/test_concept_sources.py @@ -0,0 +1,51 @@ +"""Open-vocabulary parsers for the concept store (entities/concept_sources.py).""" + +from trialmatchai.entities.concept_sources import ( + OPEN_SOURCES, + _clean_names, + parse_gene_info, + parse_obo, +) + + +def test_parse_obo_filters_obsolete_and_prefix(tmp_path): + obo = tmp_path / "t.obo" + obo.write_text( + '[Term]\nid: CL:0001\nname: T cell\nsynonym: "T-cell" EXACT []\n\n' + "[Term]\nid: CL:0002\nname: dead cell\nis_obsolete: true\n\n" + "[Term]\nid: HP:0001\nname: seizure\n" + ) + rows = list(parse_obo(obo, "CL:")) + assert rows == [("CL:0001", ["T cell", "T-cell"])] # obsolete + non-CL dropped + + +def test_parse_gene_info_one_row(tmp_path): + tsv = tmp_path / "g.tsv" + tsv.write_text( + "#header\n" + "9606\t7157\tTP53\t-\tP53|LFS1\t-\t17\t17p13\t" + "tumor protein p53\tprotein-coding\tTP53\ttumor protein p53\tO\tp53\t-\n" + ) + rows = list(parse_gene_info(tsv)) + assert len(rows) == 1 + gene_id, names = rows[0] + assert gene_id == "7157" + assert names[0] == "TP53" and "P53" in names + + +def test_parse_gene_info_skips_short_lines(tmp_path): + tsv = tmp_path / "g.tsv" + tsv.write_text("9606\t7157\tTP53\n") # < 14 columns + assert list(parse_gene_info(tsv)) == [] + + +def test_clean_names_dedupes_casefold_and_strips_whitespace(): + assert _clean_names(["T cell", "t CELL", " ", "T-cell"]) == ["T cell", "T-cell"] + + +def test_open_sources_registry_well_formed(): + assert {"genes", "diseases", "chemicals", "cell_lines"} <= set(OPEN_SOURCES) + for src in OPEN_SOURCES.values(): + assert src.kind in {"obo", "gene_info"} + assert src.url.startswith("http") + assert src.dict_filename.startswith("dict_") diff --git a/tests/test_config_pytest.py b/tests/test_config_pytest.py index 5d723e2a..7e5f90bf 100644 --- a/tests/test_config_pytest.py +++ b/tests/test_config_pytest.py @@ -1,11 +1,39 @@ from pathlib import Path -from Matcher.config.config_loader import load_config +import pytest + +from trialmatchai.config.config_loader import load_config +from trialmatchai.config.settings import EntityExtractionSettings +from trialmatchai.entities.schemas import default_schema_path def test_load_config_from_repo(): - config_path = Path(__file__).resolve().parents[1] / "source/Matcher/config/config.json" + config_path = Path(__file__).resolve().parents[1] / "src/trialmatchai/config/config.json" cfg = load_config(str(config_path)) - assert "elasticsearch" in cfg + assert cfg["search_backend"]["backend"] == "lancedb" assert "embedder" in cfg assert "paths" in cfg + + +def test_packaged_schema_path_resolves_outside_repo(tmp_path, monkeypatch): + source_config = ( + Path(__file__).resolve().parents[1] / "src/trialmatchai/config/config.json" + ) + installed_config = tmp_path / "site-packages/trialmatchai/config/config.json" + installed_config.parent.mkdir(parents=True) + installed_config.write_text(source_config.read_text(encoding="utf-8"), encoding="utf-8") + monkeypatch.chdir(tmp_path) + + cfg = load_config(installed_config) + + assert cfg["entity_extraction"]["schema_path"] == str(default_schema_path().resolve()) + assert Path(cfg["entity_extraction"]["schema_path"]).exists() + assert cfg["paths"]["output_dir"] == str((tmp_path / "results").resolve()) + + +def test_legacy_gliner_backend_and_fallback_key_are_rejected(): + with pytest.raises(ValueError): + EntityExtractionSettings.model_validate({"backend": "gliner"}) + + with pytest.raises(ValueError): + EntityExtractionSettings.model_validate({"fallback_model_name": "old-model"}) diff --git a/tests/test_constraints.py b/tests/test_constraints.py new file mode 100644 index 00000000..6aa8f671 --- /dev/null +++ b/tests/test_constraints.py @@ -0,0 +1,317 @@ +import json + +from trialmatchai.constraints import ( + build_patient_constraint_context, + evaluate_constraint_set, + extract_constraint_set, + write_constraint_reports, +) +from trialmatchai.constraints.models import Constraint, ConstraintSet +from trialmatchai.interop.models import ClinicalFact, Demographics, PatientProfile, Provenance + + +def test_extracts_common_deterministic_constraints(): + parsed = extract_constraint_set( + nct_id="N1", + criteria_id="C1", + criterion=( + "Adults aged 18-75 years with ANC >= 1500/mm3, ECOG 0-1, " + "EGFR mutated disease, and treatment within 6 months." + ), + eligibility_type="Inclusion Criteria", + ) + + kinds = {constraint.kind for constraint in parsed.constraints} + assert {"age", "lab", "performance_status", "biomarker", "temporal"} <= kinds + assert any( + constraint.kind == "age" + and constraint.comparator == "between" + and constraint.min_value == 18 + and constraint.max_value == 75 + for constraint in parsed.constraints + ) + assert any( + constraint.kind == "lab" + and constraint.label == "absolute neutrophil count" + and constraint.comparator == "ge" + and constraint.value == 1500 + for constraint in parsed.constraints + ) + + +def test_extracts_age_lower_bound_and_sex(): + parsed = extract_constraint_set( + nct_id="N1", + criteria_id="C2", + criterion="Female participants 18 years or older.", + eligibility_type="Inclusion Criteria", + ) + + assert any( + constraint.kind == "age" + and constraint.comparator == "ge" + and constraint.value == 18 + for constraint in parsed.constraints + ) + assert any( + constraint.kind == "sex" and constraint.value == "female" + for constraint in parsed.constraints + ) + + +def test_patient_context_evaluates_matches_and_exclusion_violations(): + profile = PatientProfile( + patient_id="P1", + demographics=Demographics(age_years=64, sex="female"), + conditions=[ + _fact( + "condition-1", + "condition", + "non-small cell lung cancer", + evidence_text="Patient has metastatic non-small cell lung cancer.", + ) + ], + observations=[ + _fact( + "obs-1", + "observation", + "absolute neutrophil count", + description="1800 /mm3", + evidence_text="ANC 1800/mm3.", + ) + ], + genomic_findings=[ + _fact( + "gene-1", + "genomic_finding", + "EGFR mutated", + evidence_text="EGFR exon 19 deletion detected.", + ) + ], + medications=[ + _fact( + "med-1", + "medication", + "osimertinib", + evidence_text="Prior osimertinib documented.", + temporality="prior", + ) + ], + ) + context = build_patient_constraint_context(profile) + inclusion = ConstraintSet( + nct_id="N1", + criteria_id="C1", + polarity="inclusion", + source_text="Adults with NSCLC, EGFR mutation, and ANC >= 1500/mm3.", + constraints=[ + Constraint( + kind="age", + label="age", + comparator="between", + min_value=18, + max_value=75, + ), + Constraint(kind="condition", label="non-small cell lung cancer"), + Constraint(kind="biomarker", label="EGFR", comparator="mutated"), + Constraint( + kind="lab", + label="absolute neutrophil count", + comparator="ge", + value=1500, + unit="/mm3", + ), + ], + ) + exclusion = ConstraintSet( + nct_id="N1", + criteria_id="C2", + polarity="exclusion", + source_text="Prior osimertinib is excluded.", + constraints=[ + Constraint(kind="medication", label="osimertinib", comparator="prior") + ], + ) + + inclusion_eval = evaluate_constraint_set(inclusion, context) + exclusion_eval = evaluate_constraint_set(exclusion, context) + + assert inclusion_eval.violated_count == 0 + assert inclusion_eval.matched_count == 4 + assert inclusion_eval.constraint_signal > 0 + assert exclusion_eval.violated_count == 1 + assert exclusion_eval.constraint_signal < 0 + + +def test_unknown_constraints_are_neutral(): + context = build_patient_constraint_context( + PatientProfile(patient_id="P1", demographics=Demographics(age_years=42)) + ) + parsed = ConstraintSet( + nct_id="N1", + criteria_id="C1", + polarity="inclusion", + source_text="Documented diabetes mellitus.", + constraints=[Constraint(kind="condition", label="diabetes mellitus")], + ) + + evaluation = evaluate_constraint_set(parsed, context) + + assert evaluation.unknown_count == 1 + assert evaluation.constraint_signal == 0 + + +def test_constraint_reports_are_written(tmp_path): + context = build_patient_constraint_context( + PatientProfile( + patient_id="P1", + conditions=[ + _fact( + "condition-1", + "condition", + "lung cancer", + evidence_text="Patient has lung cancer.", + ) + ], + ) + ) + evaluation = evaluate_constraint_set( + ConstraintSet( + nct_id="N1", + criteria_id="C1", + polarity="inclusion", + source_text="Patients with lung cancer.", + constraints=[Constraint(kind="condition", label="lung cancer")], + ), + context, + ) + + write_constraint_reports( + output_folder=tmp_path, + evaluations=[evaluation], + top_trials=[{"nct_id": "N1", "score": 0.91}], + ) + + payload = json.loads((tmp_path / "constraint_evaluations.json").read_text()) + explained = json.loads((tmp_path / "top_trials_explained.json").read_text()) + summary = (tmp_path / "constraint_summary.md").read_text() + assert payload["criteria"][0]["nct_id"] == "N1" + assert explained["top_trials"][0]["constraint_effect"] == "boosted" + assert "Matched" in summary + + +def test_exclusion_clean_pass_is_rewarded(): + # Patient does NOT have the excluded item -> not excluded -> should reward. + context = build_patient_constraint_context( + PatientProfile(patient_id="P1", demographics=Demographics(age_years=60)) + ) + exclusion = ConstraintSet( + nct_id="N1", + criteria_id="C1", + polarity="exclusion", + source_text="Prior chemotherapy is excluded.", + constraints=[ + Constraint(kind="medication", label="chemotherapy", comparator="prior") + ], + ) + evaluation = evaluate_constraint_set(exclusion, context) + assert evaluation.matched_count == 1 + assert evaluation.violated_count == 0 + assert evaluation.constraint_signal > 0 + + +def test_dosing_and_unit_numbers_are_not_ages(): + for criterion in ( + "Administer 100 to 200 mg daily.", + "Give at least 100 mg of the study drug.", + "Up to 3 cycles of therapy.", + ): + parsed = extract_constraint_set( + nct_id="N1", + criteria_id="C1", + criterion=criterion, + eligibility_type="Inclusion Criteria", + ) + assert not any(c.kind == "age" for c in parsed.constraints), criterion + + +def test_comparator_less_lab_is_skipped(): + parsed = extract_constraint_set( + nct_id="N1", + criteria_id="C1", + criterion="Creatinine 1.5 at screening.", + eligibility_type="Exclusion Criteria", + ) + assert not any(c.kind == "lab" for c in parsed.constraints) + # An explicit comparator is still extracted. + parsed2 = extract_constraint_set( + nct_id="N1", + criteria_id="C2", + criterion="Creatinine <= 1.5 mg/dL.", + eligibility_type="Exclusion Criteria", + ) + assert any(c.kind == "lab" and c.comparator == "le" for c in parsed2.constraints) + + +def test_biomarker_wildtype_patient_is_not_a_false_positive(): + context = build_patient_constraint_context( + PatientProfile( + patient_id="P1", + genomic_findings=[ + _fact( + "g1", + "genomic_finding", + "EGFR wild-type", + evidence_text="EGFR wild-type, no mutation detected.", + ) + ], + ) + ) + # Exclusion "EGFR mutation" against a wild-type patient -> not excluded -> reward. + exclusion = ConstraintSet( + nct_id="N1", + criteria_id="C1", + polarity="exclusion", + source_text="EGFR mutation excluded.", + constraints=[Constraint(kind="biomarker", label="EGFR", comparator="mutated")], + ) + evaluation = evaluate_constraint_set(exclusion, context) + assert evaluation.violated_count == 0 + assert evaluation.constraint_signal > 0 + + +def test_unknown_is_neutral_false_penalizes_unconfirmable_inclusion(): + context = build_patient_constraint_context( + PatientProfile(patient_id="P1", demographics=Demographics(age_years=42)) + ) + inclusion = ConstraintSet( + nct_id="N1", + criteria_id="C1", + polarity="inclusion", + source_text="Documented diabetes mellitus.", + constraints=[Constraint(kind="condition", label="diabetes mellitus")], + ) + neutral = evaluate_constraint_set(inclusion, context, unknown_is_neutral=True) + penalized = evaluate_constraint_set(inclusion, context, unknown_is_neutral=False) + assert neutral.constraint_signal == 0 + assert penalized.constraint_signal < 0 + + +def _fact( + fact_id: str, + category: str, + label: str, + *, + description: str | None = None, + evidence_text: str | None = None, + temporality: str | None = None, +) -> ClinicalFact: + return ClinicalFact( + fact_id=fact_id, + category=category, + label=label, + description=description, + evidence_text=evidence_text, + temporality=temporality, + provenance=Provenance(source_format="test"), + ) diff --git a/tests/test_criteria_chunking.py b/tests/test_criteria_chunking.py new file mode 100644 index 00000000..5533309d --- /dev/null +++ b/tests/test_criteria_chunking.py @@ -0,0 +1,105 @@ +"""Tests for the eligibility-criteria chunker (registry/criteria_chunking.py).""" + +from __future__ import annotations + +from trialmatchai.registry.criteria_chunking import ( + detect_header, + split_eligibility_criteria, +) + + +def _criteria(text): + return [(c["type"], c["criterion"]) for c in split_eligibility_criteria(text)] + + +def test_simple_dashed_inclusion_exclusion(): + text = "\n".join( + [ + "Inclusion Criteria:", + "- Age 18 years or older", + "- Histologically confirmed lung cancer", + "Exclusion Criteria:", + "- Prior investigational therapy", + ] + ) + assert _criteria(text) == [ + ("inclusion", "Age 18 years or older"), + ("inclusion", "Histologically confirmed lung cancer"), + ("exclusion", "Prior investigational therapy"), + ] + + +def test_unknown_fallback_for_unheadered_single_line(): + assert split_eligibility_criteria("Able to consent.") == [ + {"type": "unknown", "criterion": "Able to consent."} + ] + + +def test_varied_headers_are_detected(): + assert detect_header("Key Inclusion Criteria:") == "inclusion" + assert detect_header("EXCLUSION CRITERIA") == "exclusion" + assert detect_header("Inclusion criteria for Cohort A:") == "inclusion" + assert detect_header("Patients must meet the following exclusion criteria:") == "exclusion" + # Not headers: + assert detect_header("- Age 18 years or older") is None + assert detect_header("No prior chemotherapy (inclusion in another study allowed)") is None + + +def test_numbered_and_multilevel_markers(): + text = "\n".join( + [ + "Inclusion Criteria", + "1. Adults aged 18 or older", + "2. ECOG performance status 0-1", + "2.1 No prior systemic therapy", + "Exclusion Criteria", + "a) Pregnancy", + "(b) Active infection", + ] + ) + assert _criteria(text) == [ + ("inclusion", "Adults aged 18 or older"), + ("inclusion", "ECOG performance status 0-1"), + ("inclusion", "No prior systemic therapy"), + ("exclusion", "Pregnancy"), + ("exclusion", "Active infection"), + ] + + +def test_continuation_lines_are_joined(): + text = "\n".join( + [ + "Inclusion Criteria:", + "- Measurable disease per RECIST 1.1 with at least one", + " lesion not previously irradiated", + ] + ) + assert _criteria(text) == [ + ( + "inclusion", + "Measurable disease per RECIST 1.1 with at least one lesion not previously irradiated", + ) + ] + + +def test_decimal_values_do_not_trigger_false_splits(): + text = "Inclusion Criteria:\n- Hemoglobin 9.5 g/dL or higher at screening" + assert _criteria(text) == [ + ("inclusion", "Hemoglobin 9.5 g/dL or higher at screening") + ] + + +def test_parenthetical_markers_are_not_split_points(): + text = "Inclusion Criteria:\n- Adequate organ function (see section 2.3 for details)" + assert _criteria(text) == [ + ("inclusion", "Adequate organ function (see section 2.3 for details)") + ] + + +def test_multiple_criteria_packed_on_one_line(): + text = "Exclusion Criteria: 1. Pregnancy 2. Active infection 3. Prior therapy" + # The header is on the same line as the first marker; types resolve to exclusion. + result = _criteria(text) + assert ("exclusion", "Pregnancy") in result + assert ("exclusion", "Active infection") in result + assert ("exclusion", "Prior therapy") in result diff --git a/tests/test_deployment_readiness.py b/tests/test_deployment_readiness.py new file mode 100644 index 00000000..898abfa9 --- /dev/null +++ b/tests/test_deployment_readiness.py @@ -0,0 +1,112 @@ +from __future__ import annotations + +from trialmatchai.config.config_loader import load_config, resolve_config_path +from trialmatchai.matching.eligibility_base import BaseTrialProcessor +from trialmatchai.matching.eligibility_reasoning_transformers import _max_input_tokens +from trialmatchai.utils.json_utils import extract_json_object + + +def test_default_config_resolution_from_repo_root(): + path = resolve_config_path() + assert path.name == "config.json" + assert path.as_posix().endswith("src/trialmatchai/config/config.json") + + +def test_config_env_overrides_and_search_tables(monkeypatch): + monkeypatch.setenv("TRIALMATCHAI_SEARCH_DB_PATH", "data/search-test") + monkeypatch.setenv("TRIALMATCHAI_SEARCH_TRIALS_TABLE", "trials-test") + monkeypatch.setenv("TRIALMATCHAI_SEARCH_CRITERIA_TABLE", "criteria-test") + monkeypatch.setenv("TRIALMATCHAI_SEARCH_MODE", "bm25") + monkeypatch.setenv("TRIALMATCHAI_ENTITY_BACKEND", "regex") + monkeypatch.setenv("TRIALMATCHAI_CONCEPT_DB_PATH", "data/concepts-test") + monkeypatch.setenv("TRIALMATCHAI_LINK_ACCEPT", "0.9") + monkeypatch.setenv("TRIALMATCHAI_REGISTRY_SINCE_DAYS", "14") + monkeypatch.setenv("TRIALMATCHAI_REGISTRY_RAW_DIR", "data/registry/raw-test") + + cfg = load_config() + + assert cfg["search_backend"]["backend"] == "lancedb" + assert cfg["search_backend"]["db_path"].endswith("data/search-test") + assert cfg["search_backend"]["trials_table"] == "trials-test" + assert cfg["search_backend"]["criteria_table"] == "criteria-test" + assert cfg["search"]["mode"] == "bm25" + assert cfg["entity_extraction"]["backend"] == "regex" + assert cfg["concept_linker"]["db_path"].endswith("data/concepts-test") + assert cfg["concept_linker"]["accept_threshold"] == 0.9 + assert cfg["registry"]["since_days"] == 14 + assert cfg["registry"]["raw_dir"].endswith("data/registry/raw-test") + + +def test_cot_prompt_does_not_inject_consent(): + processor = BaseTrialProcessor.__new__(BaseTrialProcessor) + processor.use_cot = True + processor.tokenizer = None + + prompt = processor._format_prompt("Age >= 18", "Patient has lung cancer.") + + assert "Written informed consent has been obtained" not in prompt + + +def test_cot_prompt_falls_back_for_tokenizer_without_chat_template(): + class _TokenizerWithoutTemplate: + def apply_chat_template(self, *args, **kwargs): + raise ValueError("tokenizer.chat_template is not set") + + processor = BaseTrialProcessor.__new__(BaseTrialProcessor) + processor.use_cot = True + processor.tokenizer = _TokenizerWithoutTemplate() + + prompt = processor._format_prompt("Age >= 18", "Patient has lung cancer.") + + assert "Age >= 18" in prompt + assert "Patient has lung cancer." in prompt + assert prompt.endswith("Answer: ") + + +def test_transformers_rag_reserves_generation_context(): + class _Config: + max_position_embeddings = 1024 + + class _Model: + config = _Config() + + class _Tokenizer: + model_max_length = 2048 + + assert _max_input_tokens(_Tokenizer(), _Model(), 64) == 960 + + +def test_token_length_uses_generation_budget_when_available(): + class _Tokenizer: + def __init__(self): + self.kwargs = None + + def __call__(self, prompt, **kwargs): + self.kwargs = kwargs + return {"input_ids": [1, 2, 3]} + + tokenizer = _Tokenizer() + processor = BaseTrialProcessor.__new__(BaseTrialProcessor) + processor.tokenizer = tokenizer + processor.max_input_tokens = 128 + + assert processor._token_length("prompt") == 3 + assert tokenizer.kwargs["truncation"] is True + assert tokenizer.kwargs["max_length"] == 128 + + +def test_json_extraction_uses_balanced_object(): + output = 'prefix {"outer": {"inner": "value"}, "items": [1, 2]} suffix {"bad": true}' + + parsed = extract_json_object(output) + + assert parsed == {"outer": {"inner": "value"}, "items": [1, 2]} + + +def test_json_extraction_rejects_malformed_output(): + try: + extract_json_object('prefix {"outer": {"inner": "value"}') + except ValueError as exc: + assert "Unbalanced JSON object" in str(exc) + else: + raise AssertionError("Malformed output should fail JSON extraction") diff --git a/tests/test_embedding.py b/tests/test_embedding.py new file mode 100644 index 00000000..f910e789 --- /dev/null +++ b/tests/test_embedding.py @@ -0,0 +1,22 @@ +from __future__ import annotations + +from trialmatchai.models.embedding import HashingTextEmbedder, build_embedder + + +def test_hashing_embedder_is_deterministic_and_normalized(): + embedder = HashingTextEmbedder(dimensions=16) + first = embedder.embed_text("EGFR lung cancer") + second = embedder.embed_text("EGFR lung cancer") + + assert first == second + assert len(first) == 16 + assert round(sum(value * value for value in first), 6) == 1.0 + + +def test_build_embedder_supports_hashing_backend(): + embedder = build_embedder( + {"embedder": {"backend": "hashing", "hashing_dimensions": 8}} + ) + + assert isinstance(embedder, HashingTextEmbedder) + assert len(embedder.embed_text("melanoma")) == 8 diff --git a/tests/test_entities.py b/tests/test_entities.py new file mode 100644 index 00000000..968d5fc0 --- /dev/null +++ b/tests/test_entities.py @@ -0,0 +1,247 @@ +from __future__ import annotations + +import csv +from pathlib import Path + +from trialmatchai.entities.annotator import SchemaEntityAnnotator +from trialmatchai.entities.builder import ( + build_dictionary_rows, + build_omop_concept_rows, + write_lancedb_table, +) +from trialmatchai.entities.linker import ConceptLinker, InMemoryConceptStore +from trialmatchai.entities.recognizers import ( + RegexSchemaRecognizer, + _parse_model_entities, + resolve_overlaps, +) +from trialmatchai.entities.schemas import load_entity_schemas +from trialmatchai.entities.types import ConceptCandidate, EntityAnnotation, NO_ENTITY_ID + +ROOT = Path(__file__).resolve().parents[1] + + +def test_default_schema_validates_vocab_routing(): + schemas = load_entity_schemas() + by_id = {schema.id: schema for schema in schemas} + + assert by_id["disease"].target_vocabularies == ("SNOMED", "ICD10", "ICD10CM") + assert by_id["laboratory_test"].target_vocabularies == ("LOINC",) + assert by_id["medication"].target_vocabularies == ("RxNorm", "ATC") + assert by_id["disease"].query_expansion is True + + +def test_regex_backend_returns_current_output_shape(): + schemas = [schema for schema in load_entity_schemas() if schema.id == "disease"] + annotator = SchemaEntityAnnotator(RegexSchemaRecognizer(), schemas) + + result = annotator.annotate_texts_in_parallel(["metastatic cancer"], max_workers=1) + + assert result[0][0]["entity_group"] == "disease" + assert result[0][0]["text"] == "cancer" + assert result[0][0]["normalized_id"] == [NO_ENTITY_ID] + assert "concept_candidates" in result[0][0] + + +def test_gliner2_entity_mapping_response_parses_to_annotations(): + schemas = [ + schema for schema in load_entity_schemas() if schema.id in {"disease", "gene"} + ] + label_map = { + label.casefold(): schema + for schema in schemas + for label in schema.recognizer_labels + } + text = "Patient has lung cancer with EGFR mutation." + + annotations = _parse_model_entities( + { + "entities": { + "disease": [ + { + "text": "lung cancer", + "start": 12, + "end": 23, + "confidence": 0.99, + } + ], + "gene": [{"text": "EGFR", "start": 29, "end": 33, "confidence": 0.99}], + } + }, + text, + label_map, + ) + + assert [annotation.text for annotation in annotations] == ["lung cancer", "EGFR"] + + +def test_overlap_resolution_keeps_higher_confidence_span(): + annotations = [ + EntityAnnotation("disease", "lung cancer", 0, 11, 0.91, schema_id="disease"), + EntityAnnotation("disease", "cancer", 5, 11, 0.95, schema_id="disease"), + ] + + resolved = resolve_overlaps(annotations) + + assert len(resolved) == 1 + assert resolved[0].text == "cancer" + + +def test_concept_linker_accepts_rejects_and_marks_ambiguous(): + schemas = [schema for schema in load_entity_schemas() if schema.id == "disease"] + store = InMemoryConceptStore( + [ + ConceptCandidate( + concept_id="1", + vocabulary_id="SNOMED", + concept_code="363346000", + concept_name="Malignant neoplastic disease", + domain_id="Condition", + synonyms=("cancer", "malignancy"), + ), + ConceptCandidate( + concept_id="2", + vocabulary_id="SNOMED", + concept_code="73211009", + concept_name="Diabetes mellitus", + domain_id="Condition", + ), + ] + ) + linker = ConceptLinker(store, schemas, accept_threshold=0.8, reject_threshold=0.3) + + accepted = linker.link_annotation( + EntityAnnotation("disease", "cancer", 0, 6, 0.95, schema_id="disease") + ) + ambiguous = linker.link_annotation( + EntityAnnotation( + "disease", + "neoplastic disorder", + 0, + 19, + 0.95, + schema_id="disease", + ) + ) + rejected = linker.link_annotation( + EntityAnnotation("disease", "unrelated words", 0, 15, 0.95, schema_id="disease") + ) + + assert accepted.linker_status == "accepted" + assert accepted.normalized_id == ("SNOMED:363346000",) + assert "malignancy" in accepted.synonyms + assert ambiguous.linker_status == "ambiguous" + assert ambiguous.normalized_id == (NO_ENTITY_ID,) + assert rejected.linker_status == "rejected" + + +def test_concept_builders_import_omop_and_dictionary_rows(tmp_path): + concept_csv = tmp_path / "CONCEPT.csv" + synonym_csv = tmp_path / "CONCEPT_SYNONYM.csv" + with concept_csv.open("w", newline="") as handle: + writer = csv.DictWriter( + handle, + fieldnames=[ + "concept_id", + "concept_name", + "domain_id", + "vocabulary_id", + "concept_class_id", + "standard_concept", + "concept_code", + ], + ) + writer.writeheader() + writer.writerow( + { + "concept_id": "1", + "concept_name": "Hemoglobin measurement", + "domain_id": "Measurement", + "vocabulary_id": "LOINC", + "concept_class_id": "Lab Test", + "standard_concept": "S", + "concept_code": "718-7", + } + ) + with synonym_csv.open("w", newline="") as handle: + writer = csv.DictWriter( + handle, + fieldnames=["concept_id", "concept_synonym_name"], + ) + writer.writeheader() + writer.writerow({"concept_id": "1", "concept_synonym_name": "Hgb"}) + + rows = build_omop_concept_rows(concept_csv, synonym_csv, vocabularies=("LOINC",)) + dictionary = tmp_path / "dict_Gene.txt" + dictionary.write_text("EntrezGene:1956||EGFR|ERBB1\n") + + dictionary_rows = build_dictionary_rows( + dictionary, + vocabulary_id="EntrezGene", + domain_id="Gene", + ) + + assert rows[0]["concept_code"] == "718-7" + assert rows[0]["synonyms"] == ["Hgb"] + assert dictionary_rows[0]["concept_code"] == "1956" + assert dictionary_rows[0]["synonyms"] == ["EGFR", "ERBB1"] + + +def test_concept_table_no_recreate_appends_rows(tmp_path): + db_path = tmp_path / "concepts" + first = [ + { + "concept_id": "SNOMED:1", + "vocabulary_id": "SNOMED", + "concept_code": "1", + "concept_name": "Melanoma", + "domain_id": "Condition", + "concept_class_id": "Clinical Finding", + "standard_concept": "S", + "synonyms": ["malignant melanoma"], + "fts_text": "Melanoma malignant melanoma", + } + ] + second = [ + { + "concept_id": "SNOMED:2", + "vocabulary_id": "SNOMED", + "concept_code": "2", + "concept_name": "Sarcoma", + "domain_id": "Condition", + "concept_class_id": "Clinical Finding", + "standard_concept": "S", + "synonyms": ["soft tissue sarcoma"], + "fts_text": "Sarcoma soft tissue sarcoma", + } + ] + + write_lancedb_table(first, db_path=db_path, table_name="concepts", recreate=True) + write_lancedb_table(second, db_path=db_path, table_name="concepts", recreate=False) + + import lancedb + + table = lancedb.connect(str(db_path)).open_table("concepts") + codes = {row["concept_code"] for row in table.to_arrow().to_pylist()} + assert codes == {"1", "2"} + + +def test_runtime_replacement_has_no_old_daemon_references(): + assert not (ROOT / "source/Parser").exists() + assert not (ROOT / "src/Matcher").exists() + runtime_files = sorted((ROOT / "src/trialmatchai").rglob("*.py")) + forbidden = [ + "18888", + "18892", + "18894", + "18783", + "BioMedNER", + "GNormPlus", + "disease_normalizer_21.jar", + "java -Xmx", + "import socket", + ] + for path in runtime_files: + content = path.read_text() + for term in forbidden: + assert term not in content diff --git a/tests/test_fhir_robustness.py b/tests/test_fhir_robustness.py new file mode 100644 index 00000000..00eb149d --- /dev/null +++ b/tests/test_fhir_robustness.py @@ -0,0 +1,211 @@ +"""Regression tests for the hardened FHIR importer (real-EHR edge cases).""" + +from __future__ import annotations + +import json + +from trialmatchai.interop.importers.fhir import ( + _medication_codes_label, + _resource_disposition, + _value_x, + import_fhir, +) +from trialmatchai.interop.utils import ( + code_from_fhir_codeable, + codes_from_fhir_codeable, + parse_date, +) + + +# --------------------------------------------------------------------- unit level + + +def test_status_disposition(): + cases = [ + ("Condition", {"clinicalStatus": {"coding": [{"code": "resolved"}]}}, ("keep", True)), + ("Condition", {"clinicalStatus": {"coding": [{"code": "inactive"}]}}, ("keep", True)), + ("Condition", {"verificationStatus": {"coding": [{"code": "refuted"}]}}, ("keep", True)), + ("Condition", {"verificationStatus": {"coding": [{"code": "entered-in-error"}]}}, ("drop", False)), + ("Observation", {"status": "entered-in-error"}, ("drop", False)), + ("Procedure", {"status": "not-done"}, ("drop", False)), + # Completed/stopped medications are real prior exposure -> kept, not negated. + ("MedicationStatement", {"status": "completed"}, ("keep", False)), + ("MedicationStatement", {"status": "stopped"}, ("keep", False)), + ("Condition", {"clinicalStatus": {"coding": [{"code": "active"}]}}, ("keep", False)), + ] + for rtype, resource, expected in cases: + assert _resource_disposition(rtype, resource) == expected, (rtype, resource) + + +def test_partial_fhir_dates(): + assert parse_date("1980") is not None and parse_date("1980").year == 1980 + assert parse_date("1980-03").month == 3 + assert parse_date("1980-03-15").day == 15 + assert parse_date("1980-03-15T09:00:00Z").year == 1980 + assert parse_date("garbage") is None + + +def test_multi_coding_prefers_known_vocabulary_and_keeps_all(): + cc = { + "coding": [ + {"system": "urn:oid:1.2.840.114350", "code": "EPIC1"}, + {"system": "http://snomed.info/sct", "code": "254637007", "display": "NSCLC"}, + ] + } + best = code_from_fhir_codeable(cc) + assert best.vocabulary == "SNOMED" and best.code == "254637007" + all_codes = codes_from_fhir_codeable(cc) + assert {c.vocabulary for c in all_codes} == {"SNOMED", "urn:oid:1.2.840.114350"} + + +def test_value_x_variants_and_comparator(): + assert _value_x({"valueQuantity": {"value": 9.5, "unit": "g/dL"}}) == "9.5 g/dL" + assert _value_x({"valueQuantity": {"comparator": "<", "value": 0.01, "unit": "ng/mL"}}) == "<0.01 ng/mL" + assert _value_x({"valueString": "positive"}) == "positive" + assert _value_x({"valueCodeableConcept": {"text": "detected"}}) == "detected" + assert _value_x({"valueRange": {"low": {"value": 1}, "high": {"value": 5}}}) == "1-5" + + +def test_medication_reference_and_contained(): + # medicationReference with display only + codes, label = _medication_codes_label( + {"medicationReference": {"reference": "Medication/123", "display": "osimertinib"}} + ) + assert label == "osimertinib" + + # contained Medication resolved by #ref + codes, label = _medication_codes_label( + { + "medicationReference": {"reference": "#med1"}, + "contained": [ + { + "resourceType": "Medication", + "id": "med1", + "code": {"coding": [{"system": "http://www.nlm.nih.gov/research/umls/rxnorm", "code": "1", "display": "pembrolizumab"}]}, + } + ], + } + ) + assert label == "pembrolizumab" + assert codes and codes[0].vocabulary == "RxNorm" + + +# -------------------------------------------------------------------- integration + + +def _import_bundle(tmp_path, entries): + path = tmp_path / "bundle.json" + path.write_text( + json.dumps( + { + "resourceType": "Bundle", + "entry": [{"resource": r} for r in entries], + } + ) + ) + return import_fhir(path, input_format="fhir") + + +def test_resolved_condition_is_negated_and_error_is_dropped(tmp_path): + profiles = _import_bundle( + tmp_path, + [ + {"resourceType": "Patient", "id": "p1", "birthDate": "1975"}, + { + "resourceType": "Condition", + "id": "c-active", + "subject": {"reference": "Patient/p1"}, + "clinicalStatus": {"coding": [{"code": "active"}]}, + "code": {"text": "lung cancer"}, + }, + { + "resourceType": "Condition", + "id": "c-resolved", + "subject": {"reference": "Patient/p1"}, + "clinicalStatus": {"coding": [{"code": "resolved"}]}, + "verificationStatus": {"coding": [{"code": "confirmed"}]}, + "code": {"text": "pneumonia"}, + }, + { + "resourceType": "Condition", + "id": "c-error", + "subject": {"reference": "Patient/p1"}, + "verificationStatus": {"coding": [{"code": "entered-in-error"}]}, + "code": {"text": "typo diagnosis"}, + }, + ], + ) + profile = profiles[0] + # Partial birthDate populated age. + assert profile.demographics.age_years is not None + by_label = {c.label: c for c in profile.conditions} + assert by_label["lung cancer"].negated is False + assert by_label["pneumonia"].negated is True # resolved -> not currently present + assert "typo diagnosis" not in by_label # entered-in-error dropped + assert any(u.get("id") == "c-error" for u in profile.unsupported) + + +def test_observation_component_and_interpretation_captured(tmp_path): + profiles = _import_bundle( + tmp_path, + [ + {"resourceType": "Patient", "id": "p1"}, + { + "resourceType": "Observation", + "id": "bp", + "subject": {"reference": "Patient/p1"}, + "status": "final", + "code": {"text": "Blood pressure"}, + "interpretation": [{"coding": [{"code": "H", "display": "High"}]}], + "component": [ + {"code": {"text": "Systolic"}, "valueQuantity": {"value": 160, "unit": "mmHg"}}, + {"code": {"text": "Diastolic"}, "valueQuantity": {"value": 95, "unit": "mmHg"}}, + ], + }, + ], + ) + obs = profiles[0].observations[0] + assert "Systolic: 160 mmHg" in obs.description + assert "Diastolic: 95 mmHg" in obs.description + assert "High" in obs.description + + +def test_ndjson_skips_malformed_lines(tmp_path): + path = tmp_path / "export.ndjson" + path.write_text( + "\n".join( + [ + json.dumps({"resourceType": "Patient", "id": "p1"}), + "{ this is not valid json", + json.dumps( + { + "resourceType": "Condition", + "subject": {"reference": "Patient/p1"}, + "code": {"text": "diabetes"}, + } + ), + ] + ) + ) + profiles = import_fhir(path, input_format="fhir-ndjson") + assert len(profiles) == 1 + assert any(c.label == "diabetes" for c in profiles[0].conditions) + + +def test_reference_resolution_urn_uuid_and_absolute_url(tmp_path): + path = tmp_path / "bundle.json" + path.write_text( + json.dumps( + { + "resourceType": "Bundle", + "entry": [ + {"fullUrl": "urn:uuid:abc-123", "resource": {"resourceType": "Patient", "id": "p1"}}, + {"resource": {"resourceType": "Condition", "subject": {"reference": "urn:uuid:abc-123"}, "code": {"text": "asthma"}}}, + {"resource": {"resourceType": "Condition", "subject": {"reference": "http://ehr.example.org/fhir/Patient/p1"}, "code": {"text": "eczema"}}}, + ], + } + ) + ) + profile = import_fhir(path, input_format="fhir")[0] + labels = {c.label for c in profile.conditions} + assert {"asthma", "eczema"} <= labels # both reference styles resolved diff --git a/tests/test_file_utils_pytest.py b/tests/test_file_utils_pytest.py index 7533d38d..2dfbdfff 100644 --- a/tests/test_file_utils_pytest.py +++ b/tests/test_file_utils_pytest.py @@ -1,6 +1,4 @@ -import json - -from Matcher.utils.file_utils import read_json_file, read_text_file, write_json_file, write_text_file +from trialmatchai.utils.file_utils import read_json_file, read_text_file, write_json_file, write_text_file def test_write_and_read_json(tmp_path): diff --git a/tests/test_finetuning.py b/tests/test_finetuning.py new file mode 100644 index 00000000..38b49800 --- /dev/null +++ b/tests/test_finetuning.py @@ -0,0 +1,220 @@ +"""Tests for the fine-tuning data/CLI layer (no heavy deps or model loads).""" + +from __future__ import annotations + +import json + +import pytest + +from trialmatchai.finetuning.cli import _lora_config_from_args, build_parser +from trialmatchai.finetuning.config import FinetuneConfig +from trialmatchai.finetuning.data import ( + cot_row_to_messages, + gliner2_row_to_training_record, + ner_row_to_entities, + read_jsonl, + reranker_row_to_messages, +) + + +def test_cot_row_messages_passthrough_and_instruct(): + msgs = cot_row_to_messages({"messages": [{"role": "user", "content": "hi"}]}) + assert msgs == [{"role": "user", "content": "hi"}] + + converted = cot_row_to_messages( + {"instruction": "sys", "input": "q", "output": "a"} + ) + assert converted[0] == {"role": "system", "content": "sys"} + assert converted[-1] == {"role": "assistant", "content": "a"} + + +def test_reranker_row_messages_and_label(): + messages, label = reranker_row_to_messages( + {"patient_text": "P", "criterion": "C", "label": "relevant"} + ) + assert label == "Yes" # normalized from "relevant" + # Reuses the runtime reranker prompt (Statement A / Statement B). + assert any("Statement A: P" in m["content"] for m in messages) + assert any("Statement B: C" in m["content"] for m in messages) + + +def test_ner_char_spans_convert_to_surface_forms(): + out = ner_row_to_entities( + {"text": "EGFR mutation in NSCLC", "ner": [[0, 4, "gene"], [17, 22, "disease"]]} + ) + assert out["text"] == "EGFR mutation in NSCLC" + assert out["entities"] == {"gene": ["EGFR"], "disease": ["NSCLC"]} + + +def test_ner_entities_mapping_passthrough(): + out = ner_row_to_entities( + {"text": "EGFR positive", "entities": {"gene": ["EGFR"]}} + ) + assert out["entities"] == {"gene": ["EGFR"]} + + +def test_ner_native_gliner2_format(): + out = ner_row_to_entities( + {"input": "EGFR positive", "output": {"entities": {"gene": ["EGFR"]}}} + ) + assert out["text"] == "EGFR positive" + assert out["entities"] == {"gene": ["EGFR"]} + + +def test_ner_native_gliner2_text_schema_format_and_negative_entities(): + out = ner_row_to_entities( + { + "text": "No reportable biomarker", + "schema": { + "entities": {"gene": []}, + "entity_descriptions": {"gene": "Gene symbols"}, + }, + } + ) + assert out["text"] == "No reportable biomarker" + assert out["entities"] == {"gene": []} + assert out["entity_descriptions"] == {"gene": "Gene symbols"} + + +def test_gliner2_schema_record_preserves_json_structures(): + record = gliner2_row_to_training_record( + { + "text": "Patient has EGFR exon 19 deletion and stage IV NSCLC.", + "schema": { + "entities": {"gene": ["EGFR"]}, + "json_structures": [ + { + "biomarker": { + "gene": "EGFR", + "variant": "exon 19 deletion", + "disease_stage": "stage IV", + } + } + ], + "json_descriptions": { + "biomarker": { + "gene": "Gene symbol", + "variant": "Observed alteration", + } + }, + }, + } + ) + assert record == { + "input": "Patient has EGFR exon 19 deletion and stage IV NSCLC.", + "output": { + "entities": {"gene": ["EGFR"]}, + "json_structures": [ + { + "biomarker": { + "gene": "EGFR", + "variant": "exon 19 deletion", + "disease_stage": "stage IV", + } + } + ], + "json_descriptions": { + "biomarker": { + "gene": "Gene symbol", + "variant": "Observed alteration", + } + }, + }, + } + + +def test_gliner2_record_preserves_classifications_and_relations(): + row = { + "input": "Erlotinib targets EGFR.", + "output": { + "classifications": [ + { + "task": "actionability", + "labels": ["actionable", "not_actionable"], + "true_label": "actionable", + } + ], + "relations": [{"targets": {"head": "Erlotinib", "tail": "EGFR"}}], + }, + } + assert gliner2_row_to_training_record(row) == row + + +def test_gliner2_top_level_structures_alias_normalizes_to_json_structures(): + record = gliner2_row_to_training_record( + { + "text": "Trial requires ECOG 0-1.", + "structures": {"eligibility": {"performance_status": "ECOG 0-1"}}, + } + ) + assert record["output"]["json_structures"] == [ + {"eligibility": {"performance_status": "ECOG 0-1"}} + ] + + +def test_read_jsonl_respects_max(tmp_path): + path = tmp_path / "d.jsonl" + path.write_text("\n".join(json.dumps({"i": i}) for i in range(5))) + assert len(read_jsonl(str(path), max_examples=2)) == 2 + assert read_jsonl(str(path), max_examples=0) == [] + + +def test_read_jsonl_reports_invalid_line(tmp_path): + path = tmp_path / "bad.jsonl" + path.write_text('{"ok": true}\nnot-json\n') + with pytest.raises(ValueError, match="bad.jsonl:2"): + read_jsonl(str(path)) + + +def test_cli_parses_each_subcommand(): + parser = build_parser() + for component in ("cot", "reranker", "ner"): + args = parser.parse_args( + [component, "--base-model", "m", "--train-data", "t", "--output-dir", "o"] + ) + assert args.component == component + + merge_args = parser.parse_args( + ["merge", "--base-model", "b", "--adapter", "a", "--output-dir", "o"] + ) + assert merge_args.component == "merge" and merge_args.adapter == "a" + + with pytest.raises(SystemExit): + parser.parse_args(["cot"]) # missing required args + + +def test_lora_cli_maps_training_controls(): + parser = build_parser() + args = parser.parse_args( + [ + "cot", + "--base-model", + "m", + "--train-data", + "t", + "--output-dir", + "o", + "--eval-data", + "e", + "--target-modules", + "q_proj,v_proj", + "--eval-steps", + "100", + "--save-steps", + "500", + "--device-map", + "none", + ] + ) + cfg = _lora_config_from_args(args) + assert cfg.eval_data == "e" + assert cfg.target_modules == ["q_proj", "v_proj"] + assert cfg.eval_steps == 100 + assert cfg.save_steps == 500 + assert cfg.device_map is None + + +def test_finetune_config_training_args_lazy(): + cfg = FinetuneConfig(base_model="m", train_data="t", output_dir="o") + assert cfg.lora_rank == 32 and cfg.bf16 is True + assert cfg.target_modules == "all-linear" diff --git a/tests/test_first_level_planner.py b/tests/test_first_level_planner.py new file mode 100644 index 00000000..e1025bf6 --- /dev/null +++ b/tests/test_first_level_planner.py @@ -0,0 +1,327 @@ +import json + +import pytest + +from trialmatchai.interop.models import ClinicalFact, PatientProfile, Provenance +from trialmatchai.main import run_first_level_search +from trialmatchai.matching.retrieval.first_level_planner import ( + FirstLevelQueryPlanner, + parse_llm_query_expansion, +) +from trialmatchai.matching.retrieval.trial_retrieval import ClinicalTrialSearch +from trialmatchai.search import InMemorySearchBackend + + +def test_planner_builds_deterministic_channels_and_skips_negated_facts(): + planner = FirstLevelQueryPlanner(entity_annotator=FakeAnnotator()) + profile = PatientProfile( + patient_id="P1", + conditions=[ + _fact("condition-1", "condition", "lung cancer"), + _fact("condition-2", "condition", "asthma", negated=True), + ], + genomic_findings=[_fact("gene-1", "genomic_finding", "EGFR mutation")], + medications=[ + _fact("med-1", "medication", "osimertinib", temporality="prior") + ], + ) + + plan = planner.build( + profile=profile, + matching_summary={ + "main_conditions": ["lung cancer"], + "other_conditions": [], + "patient_narrative": ["Patient has EGFR-mutated lung cancer."], + }, + config={"llm_expansion_enabled": False}, + age=64, + sex="female", + overall_status="All", + ) + + assert plan.terms_for("primary_condition") == ["lung cancer"] + assert "lung carcinoma" in plan.terms_for("concept_synonym") + assert "solid tumor" in plan.terms_for("broader_disease") + assert "EGFR mutation" in plan.terms_for("biomarker") + assert "prior osimertinib" in plan.terms_for("therapy") + assert "asthma" not in plan.terms_for("primary_condition", "broader_disease") + + +def test_llm_query_expansion_is_strict_and_capped(): + parsed = parse_llm_query_expansion( + { + "primary_queries": ["lung cancer", "lung cancer"], + "disease_aliases": ["NSCLC"], + "broader_queries": ["solid tumor"], + "biomarker_queries": ["EGFR mutation"], + "treatment_queries": ["osimertinib"], + "discarded_or_uncertain": ["random drift"], + }, + max_terms=3, + ) + + assert parsed.primary_queries == ["lung cancer"] + assert parsed.disease_aliases == ["NSCLC"] + assert parsed.broader_queries == ["solid tumor"] + assert parsed.biomarker_queries == [] + assert parsed.treatment_queries == [] + with pytest.raises(Exception): + parse_llm_query_expansion("{bad json", max_terms=3) + with pytest.raises(Exception): + parse_llm_query_expansion({"primary_queries": [], "extra": []}, max_terms=3) + + +def test_planned_search_fuses_multi_channel_hits_above_single_channel_hits(): + backend = InMemorySearchBackend( + trials=[ + { + "nct_id": "N1", + "condition": "lung cancer", + "brief_title": "EGFR lung cancer osimertinib trial", + "brief_summary": "Study for EGFR mutation after prior osimertinib.", + "eligibility_criteria": "Adults with lung cancer or solid tumor.", + "overall_status": "Recruiting", + "gender": "All", + }, + { + "nct_id": "N2", + "condition": "lung cancer", + "brief_title": "General lung cancer trial", + "eligibility_criteria": "Adults with lung cancer.", + "overall_status": "Recruiting", + "gender": "All", + }, + { + "nct_id": "N3", + "condition": "solid tumor", + "brief_title": "Advanced solid tumor study", + "eligibility_criteria": "Adults with solid tumor.", + "overall_status": "Recruiting", + "gender": "All", + }, + ] + ) + search = ClinicalTrialSearch( + search_backend=backend, + embedder=None, + entity_annotator=FakeAnnotator(), + ) + profile = PatientProfile( + patient_id="P1", + conditions=[_fact("condition-1", "condition", "lung cancer")], + genomic_findings=[_fact("gene-1", "genomic_finding", "EGFR mutation")], + medications=[ + _fact("med-1", "medication", "osimertinib", temporality="prior") + ], + ) + plan = search.build_query_plan( + profile=profile, + matching_summary={ + "main_conditions": ["lung cancer"], + "other_conditions": [], + "patient_narrative": ["Patient has lung cancer with EGFR mutation."], + }, + config={}, + age="all", + sex="ALL", + overall_status="All", + ) + + trials, scores, evidence = search.search_trials_with_plan( + query_plan=plan, + age_input="all", + sex="ALL", + overall_status="All", + size=3, + per_channel_size=3, + search_mode="bm25", + ) + + assert trials[0]["nct_id"] == "N1" + assert scores[0] > scores[-1] + assert "N3" in {trial["nct_id"] for trial in trials} + n1 = next(item for item in evidence if item.nct_id == "N1") + assert len({channel["channel"] for channel in n1.channels}) > 1 + + +def test_run_first_level_search_uses_narrative_channel_and_writes_artifacts(tmp_path): + backend = InMemorySearchBackend( + trials=[ + { + "nct_id": "N1", + "condition": "rare sarcoma", + "brief_title": "Rare sarcoma trial", + "eligibility_criteria": "Adults with rare sarcoma.", + "overall_status": "Recruiting", + "gender": "All", + } + ] + ) + profile = PatientProfile( + patient_id="P1", + conditions=[_fact("condition-1", "condition", "unknown condition")], + ) + + result = run_first_level_search( + { + "main_conditions": ["unknown condition"], + "other_conditions": [], + "patient_narrative": ["Patient has rare sarcoma."], + }, + str(tmp_path), + {"age": "all", "gender": "ALL"}, + None, + None, + _config(enabled=True), + backend, + patient_profile=profile, + ) + + assert result is not None + nct_ids, *_ = result + assert nct_ids == ["N1"] + assert (tmp_path / "first_level_query_plan.json").exists() + candidates = json.loads((tmp_path / "first_level_candidates.json").read_text()) + assert candidates["candidates"][0]["nct_id"] == "N1" + assert (tmp_path / "nct_ids.txt").read_text().strip() == "N1" + + +def test_run_first_level_search_disabled_uses_single_query_path(tmp_path): + backend = InMemorySearchBackend( + trials=[ + { + "nct_id": "N1", + "condition": "lung cancer", + "brief_title": "Lung cancer trial", + "eligibility_criteria": "Adults with lung cancer.", + "overall_status": "Recruiting", + "gender": "All", + } + ] + ) + + result = run_first_level_search( + { + "main_conditions": ["lung cancer"], + "other_conditions": [], + "patient_narrative": ["Patient has lung cancer."], + }, + str(tmp_path), + {"age": "all", "gender": "ALL"}, + None, + None, + _config(enabled=False), + backend, + patient_profile=PatientProfile(patient_id="P1"), + ) + + assert result is not None + nct_ids, *_ = result + assert nct_ids == ["N1"] + assert not (tmp_path / "first_level_query_plan.json").exists() + + +class _RecordingBackend: + def __init__(self): + self.calls = [] + + def search_trials(self, **kwargs): + self.calls.append(kwargs) + return [], [] + + +def test_hard_filters_config_controls_applied_filters(): + profile = PatientProfile( + patient_id="P1", conditions=[_fact("c1", "condition", "lung cancer")] + ) + summary = {"main_conditions": ["lung cancer"], "other_conditions": [], "patient_narrative": []} + + # hard_filters=[] disables age/sex/status filtering entirely. + backend = _RecordingBackend() + search = ClinicalTrialSearch( + search_backend=backend, embedder=None, entity_annotator=FakeAnnotator() + ) + plan = search.build_query_plan( + profile=profile, matching_summary=summary, config={"hard_filters": []}, + age=64, sex="female", overall_status="Recruiting", + ) + search.search_trials_with_plan( + query_plan=plan, age_input=64, sex="female", overall_status="Recruiting", + size=10, per_channel_size=10, search_mode="bm25", + ) + assert backend.calls + for call in backend.calls: + assert call["age"] is None + assert call["sex"] == "all" + assert call["overall_status"] is None + + # hard_filters=["overall_status"] applies only the recruitment-status filter. + backend2 = _RecordingBackend() + search2 = ClinicalTrialSearch( + search_backend=backend2, embedder=None, entity_annotator=FakeAnnotator() + ) + plan2 = search2.build_query_plan( + profile=profile, matching_summary=summary, + config={"hard_filters": ["overall_status"]}, + age=64, sex="female", overall_status="Recruiting", + ) + search2.search_trials_with_plan( + query_plan=plan2, age_input=64, sex="female", overall_status="Recruiting", + size=10, per_channel_size=10, search_mode="bm25", + ) + assert backend2.calls + for call in backend2.calls: + assert call["age"] is None + assert call["sex"] == "all" + assert call["overall_status"] == "Recruiting" + + +class FakeAnnotator: + def annotate_texts_in_parallel(self, texts, max_workers=1, retries=1, delay=0): + return [ + [ + { + "entity_group": "disease", + "text": text, + "synonyms": ["NSCLC", "lung carcinoma"], + } + ] + for text in texts + ] + + +def _fact( + fact_id: str, + category: str, + label: str, + *, + negated: bool = False, + temporality: str | None = None, +) -> ClinicalFact: + return ClinicalFact( + fact_id=fact_id, + category=category, + label=label, + negated=negated, + temporality=temporality, + provenance=Provenance(source_format="test"), + ) + + +def _config(*, enabled: bool) -> dict: + return { + "search": { + "mode": "bm25", + "vector_score_threshold": 0.5, + "max_trials_first_level": 1000, + "first_level": { + "enabled": enabled, + "max_trials": 1000, + "per_channel_size": 300, + "rrf_k": 60, + "vector_score_threshold": 0.0, + "llm_expansion_enabled": False, + "write_reports": True, + }, + } + } diff --git a/tests/test_first_level_search_pytest.py b/tests/test_first_level_search_pytest.py index f03593c9..69c5d708 100644 --- a/tests/test_first_level_search_pytest.py +++ b/tests/test_first_level_search_pytest.py @@ -1,19 +1,33 @@ -from Matcher.pipeline.trial_search.first_level_search import ClinicalTrialSearch - - -class DummyES: - def search(self, index, body): - if body.get("track_total_hits") is False: - return {"hits": {"max_score": 2.0}} - return {"hits": {"hits": [{"_source": {"nct_id": "N1"}, "_score": 1.0}]}} +from trialmatchai.matching.retrieval.trial_retrieval import ClinicalTrialSearch +from trialmatchai.search import InMemorySearchBackend def test_search_trials_bm25_returns_hits(): + backend = InMemorySearchBackend( + trials=[ + { + "nct_id": "N1", + "condition": "lung cancer", + "brief_title": "Lung carcinoma treatment", + "eligibility_criteria": "Adults with lung cancer", + "minimum_age": 18, + "maximum_age": 80, + "gender": "All", + "overall_status": "Recruiting", + }, + { + "nct_id": "N2", + "condition": "diabetes mellitus", + "brief_title": "Diabetes lifestyle trial", + "eligibility_criteria": "Adults with diabetes", + "overall_status": "Recruiting", + }, + ] + ) search = ClinicalTrialSearch( - es_client=DummyES(), + search_backend=backend, embedder=None, - index_name="index", - bio_med_ner=None, + entity_annotator=None, ) trials, scores = search.search_trials( condition="lung cancer", @@ -24,4 +38,5 @@ def test_search_trials_bm25_returns_hits(): search_mode="bm25", ) assert len(trials) == 1 - assert scores == [1.0] + assert trials[0]["nct_id"] == "N1" + assert scores[0] > 0 diff --git a/tests/test_import_patient_cli.py b/tests/test_import_patient_cli.py new file mode 100644 index 00000000..b3af2efa --- /dev/null +++ b/tests/test_import_patient_cli.py @@ -0,0 +1,37 @@ +from __future__ import annotations + +import json + +from trialmatchai.cli.import_patient import main + + +def test_import_patient_cli_writes_profile_and_summary(tmp_path, monkeypatch): + note = tmp_path / "patient.txt" + note.write_text("Patient has breast cancer.", encoding="utf-8") + profile_dir = tmp_path / "profiles" + summary_dir = tmp_path / "summaries" + + monkeypatch.setattr( + "sys.argv", + [ + "trialmatchai import-patient", + "--input", + str(note), + "--format", + "text", + "--output-dir", + str(profile_dir), + "--summary-dir", + str(summary_dir), + "--no-entities", + ], + ) + + assert main() == 0 + + profile = json.loads((profile_dir / "patient.json").read_text(encoding="utf-8")) + summary = json.loads((summary_dir / "patient.json").read_text(encoding="utf-8")) + assert profile["patient_id"] == "patient" + assert summary["patient_id"] == "patient" + assert summary["main_conditions"] == ["Patient has breast cancer."] + assert summary["patient_narrative"] diff --git a/tests/test_integration_es_pytest.py b/tests/test_integration_es_pytest.py deleted file mode 100644 index 97d72300..00000000 --- a/tests/test_integration_es_pytest.py +++ /dev/null @@ -1,23 +0,0 @@ -import os - -import pytest -from elasticsearch import Elasticsearch - -from Matcher.config.config_loader import load_config - - -@pytest.mark.integration -def test_elasticsearch_ping(): - if os.getenv("TRIALMATCHAI_RUN_INTEGRATION") != "1": - pytest.skip("Set TRIALMATCHAI_RUN_INTEGRATION=1 to enable integration tests.") - - cfg = load_config("Matcher/config/config.json") - es_cfg = cfg["elasticsearch"] - client = Elasticsearch( - hosts=[es_cfg["host"]], - ca_certs=cfg["paths"]["docker_certs"], - basic_auth=(es_cfg["username"], es_cfg["password"]), - request_timeout=es_cfg["request_timeout"], - retry_on_timeout=es_cfg["retry_on_timeout"], - ) - assert client.ping() diff --git a/tests/test_lancedb_search_backend.py b/tests/test_lancedb_search_backend.py new file mode 100644 index 00000000..978d6398 --- /dev/null +++ b/tests/test_lancedb_search_backend.py @@ -0,0 +1,183 @@ +from __future__ import annotations + +import json + +import pytest + +from trialmatchai.search import LanceDBSearchBackend +from trialmatchai.search.lancedb_backend import _nct_where + + +pytest.importorskip("lancedb") + + +def test_lancedb_backend_indexes_and_searches_trials_and_criteria(tmp_path): + backend = LanceDBSearchBackend( + tmp_path / "search", + trials_table="trials", + criteria_table="criteria", + candidate_limit=25, + ) + + backend.index_trials( + [ + { + "nct_id": "N1", + "condition": "lung cancer", + "brief_title": "Targeted therapy for lung carcinoma", + "eligibility_criteria": "Adults with lung cancer", + "condition_vector": [1.0, 0.0], + "eligibility_criteria_vector": [1.0, 0.0], + "gender": "All", + "overall_status": "Recruiting", + }, + { + "nct_id": "N2", + "condition": "diabetes mellitus", + "brief_title": "Diabetes prevention", + "eligibility_criteria": "Adults with diabetes", + "condition_vector": [0.0, 1.0], + "eligibility_criteria_vector": [0.0, 1.0], + "gender": "All", + "overall_status": "Recruiting", + }, + ] + ) + backend.index_criteria( + [ + { + "criteria_id": "C1", + "nct_id": "N1", + "criterion": "Confirmed malignant neoplasm", + "criterion_vector": [1.0, 0.0], + "entities": [{"text": "malignant neoplasm", "synonyms": ["cancer"]}], + "eligibility_type": "Inclusion Criteria", + } + ] + ) + + issues = backend.health(require_tables=True) + trials, scores = backend.search_trials( + primary_terms=["lung cancer"], + embeddings={"lung cancer": [1.0, 0.0]}, + sex="ALL", + overall_status="Recruiting", + search_mode="hybrid", + vector_score_threshold=0.0, + ) + criteria_hits = backend.search_criteria( + query="cancer", + nct_ids=["N1"], + search_mode="bm25", + use_entity_synonyms=True, + ) + + assert issues == [] + assert trials[0]["nct_id"] == "N1" + assert scores[0] > 0 + assert criteria_hits[0]["_source"]["criteria_id"] == "C1" + + +def test_scan_rows_fallback_applies_nct_filter(tmp_path): + # The fallback scan (used when FTS and vector both return nothing) must honor + # the nct_id filter; otherwise it returns arbitrary rows that may exclude the + # requested trials entirely. + backend = LanceDBSearchBackend( + tmp_path / "search", + trials_table="trials", + criteria_table="criteria", + candidate_limit=25, + ) + backend.index_criteria( + [ + { + "criteria_id": "C1", + "nct_id": "N1", + "criterion": "alpha", + "criterion_vector": [1.0, 0.0], + "entities": [], + "eligibility_type": "Inclusion Criteria", + }, + { + "criteria_id": "C2", + "nct_id": "N2", + "criterion": "beta", + "criterion_vector": [0.0, 1.0], + "entities": [], + "eligibility_type": "Inclusion Criteria", + }, + ] + ) + table = backend._open_table("criteria") + + rows = backend._scan_rows(table, where=_nct_where(["N1"]), limit=25) + + assert rows + assert {row["nct_id"] for row in rows} == {"N1"} + + +def test_lancedb_backend_serializes_variable_entity_payloads(tmp_path): + backend = LanceDBSearchBackend( + tmp_path / "search", + trials_table="trials", + criteria_table="criteria", + candidate_limit=25, + ) + + backend.index_criteria( + [ + { + "criteria_id": "C1", + "nct_id": "N1", + "criterion": "Confirmed EGFR mutation", + "criterion_vector": [1.0, 0.0], + "entities": [ + { + "entity_group": "gene", + "text": "EGFR", + "start": 10, + "end": 14, + "score": 0.99, + "normalized_id": ["CUI-less"], + "synonyms": ["ERBB1"], + "concept_candidates": [ + { + "concept_id": "EntrezGene:1956", + "concept_name": "epidermal growth factor receptor", + "source_scores": {"fts": 1.0}, + } + ], + "linker_score": None, + "linker_status": "not_linked", + } + ], + "eligibility_type": "Inclusion Criteria", + }, + { + "criteria_id": "C2", + "nct_id": "N1", + "criterion": "No active autoimmune disease", + "criterion_vector": [0.0, 1.0], + "entities": [ + { + "entity_group": "disease", + "text": "autoimmune disease", + "start": 10, + "end": 28, + "score": 0.95, + } + ], + "eligibility_type": "Exclusion Criteria", + }, + ] + ) + + hits = backend.search_criteria( + query="ERBB1", + nct_ids=["N1"], + search_mode="bm25", + use_entity_synonyms=True, + ) + + assert hits[0]["_source"]["criteria_id"] == "C1" + assert json.loads(hits[0]["_source"]["entities"])[0]["text"] == "EGFR" diff --git a/tests/test_location_filter.py b/tests/test_location_filter.py new file mode 100644 index 00000000..05a30743 --- /dev/null +++ b/tests/test_location_filter.py @@ -0,0 +1,165 @@ +"""Tests for the optional country-level, site-aware trial location filter.""" + +from __future__ import annotations + +import json + +from trialmatchai.interop import import_patient_path +from trialmatchai.interop.models import ( + ClinicalFact, + Location, + PatientProfile, + Provenance, +) +from trialmatchai.main import run_first_level_search +from trialmatchai.matching.retrieval.location import ( + filter_trials_by_country, + patient_country, + trial_in_country, +) +from trialmatchai.search import InMemorySearchBackend + + +def _trial(nct_id, countries): + return { + "nct_id": nct_id, + "condition": "lung cancer", + "brief_title": "Lung cancer trial", + "eligibility_criteria": "Adults with lung cancer.", + "overall_status": "Recruiting", + "gender": "All", + "location": [{"country": c} for c in countries], + } + + +def test_filter_is_recall_safe(): + us = _trial("N_US", ["United States", "Germany"]) + fr = _trial("N_FR", ["France"]) + unknown = {"nct_id": "N_UNK"} # no location data + trials = [us, fr, unknown] + scores = [3.0, 2.0, 1.0] + + kept, kept_scores = filter_trials_by_country(trials, scores, "United States") + ids = {t["nct_id"] for t in kept} + assert ids == {"N_US", "N_UNK"} # multi-site US kept; unknown kept; France dropped + assert kept_scores == [3.0, 1.0] + + # No patient country -> no filtering. + assert filter_trials_by_country(trials, scores, None)[0] == trials + assert trial_in_country(unknown, "France") is True # unknown location never dropped + + +def test_patient_country_extraction(): + profile = PatientProfile(patient_id="P", location=Location(country=" France ")) + assert patient_country(profile) == "France" + assert patient_country(PatientProfile(patient_id="P")) is None + + +def _fl_config(*, hard_filters): + return { + "search": { + "mode": "bm25", + "vector_score_threshold": 0.5, + "max_trials_first_level": 1000, + "first_level": { + "enabled": True, + "max_trials": 1000, + "per_channel_size": 300, + "rrf_k": 60, + "vector_score_threshold": 0.0, + "llm_expansion_enabled": False, + "write_reports": False, + "hard_filters": hard_filters, + }, + } + } + + +def _profile_us(): + return PatientProfile( + patient_id="P1", + location=Location(country="United States"), + conditions=[ + ClinicalFact( + fact_id="c1", + category="condition", + label="lung cancer", + provenance=Provenance(source_format="test"), + ) + ], + ) + + +def test_location_hard_filter_drops_out_of_country_trials(tmp_path): + backend = InMemorySearchBackend( + trials=[_trial("N_US", ["United States"]), _trial("N_FR", ["France"])] + ) + result = run_first_level_search( + {"main_conditions": ["lung cancer"], "other_conditions": [], "patient_narrative": []}, + str(tmp_path), + {"age": "all", "gender": "ALL"}, + None, + None, + _fl_config(hard_filters=["age", "sex", "overall_status", "location"]), + backend, + patient_profile=_profile_us(), + ) + nct_ids, *_ = result + assert "N_US" in nct_ids + assert "N_FR" not in nct_ids + + +def test_location_filter_off_by_default_keeps_all_countries(tmp_path): + backend = InMemorySearchBackend( + trials=[_trial("N_US", ["United States"]), _trial("N_FR", ["France"])] + ) + result = run_first_level_search( + {"main_conditions": ["lung cancer"], "other_conditions": [], "patient_narrative": []}, + str(tmp_path), + {"age": "all", "gender": "ALL"}, + None, + None, + _fl_config(hard_filters=["age", "sex", "overall_status"]), + backend, + patient_profile=_profile_us(), + ) + nct_ids, *_ = result + assert {"N_US", "N_FR"} <= set(nct_ids) + + +def test_omop_importer_extracts_patient_location(tmp_path): + import pandas as pd + + omop = tmp_path / "omop" + omop.mkdir() + pd.DataFrame( + [{"person_id": 1, "gender_source_value": "M", "year_of_birth": 1975, "location_id": 10}] + ).to_csv(omop / "PERSON.csv", index=False) + pd.DataFrame( + [{"location_id": 10, "city": "Lyon", "country_source_value": "France"}] + ).to_csv(omop / "LOCATION.csv", index=False) + + profiles = import_patient_path(omop) + assert len(profiles) == 1 + assert profiles[0].location is not None + assert profiles[0].location.country == "France" + assert profiles[0].location.city == "Lyon" + + +def test_fhir_importer_extracts_patient_location(tmp_path): + path = tmp_path / "patient.json" + path.write_text( + json.dumps( + { + "resourceType": "Patient", + "id": "pat-1", + "gender": "female", + "birthDate": "1980-01-01", + "address": [{"city": "Boston", "state": "MA", "country": "United States"}], + } + ) + ) + profiles = import_patient_path(path) + assert profiles[0].location is not None + assert profiles[0].location.country == "United States" + assert profiles[0].location.city == "Boston" diff --git a/tests/test_logging.py b/tests/test_logging.py index 1c07e2f4..b2314a4b 100644 --- a/tests/test_logging.py +++ b/tests/test_logging.py @@ -1,12 +1,7 @@ import logging -import sys import unittest -from pathlib import Path -ROOT = Path(__file__).resolve().parents[1] -sys.path.append(str(ROOT / "source")) - -from Matcher.utils.logging_config import reset_request_id, set_request_id, setup_logging +from trialmatchai.utils.logging_config import reset_request_id, set_request_id, setup_logging class CaptureHandler(logging.Handler): diff --git a/tests/test_logging_pytest.py b/tests/test_logging_pytest.py index c7694f31..90320107 100644 --- a/tests/test_logging_pytest.py +++ b/tests/test_logging_pytest.py @@ -1,6 +1,6 @@ import logging -from Matcher.utils.logging_config import reset_request_id, set_request_id, setup_logging +from trialmatchai.utils.logging_config import reset_request_id, set_request_id, setup_logging class _CaptureHandler(logging.Handler): diff --git a/tests/test_metrics.py b/tests/test_metrics.py new file mode 100644 index 00000000..5b95a3be --- /dev/null +++ b/tests/test_metrics.py @@ -0,0 +1,57 @@ +"""Tie-aware nDCG + precision (trec/metrics.py).""" + +from itertools import permutations + +from trialmatchai.trec.metrics import ( + condensed_ndcg, + idcg_at_k, + ndcg_at_k, + precision_at_k, +) + + +def test_perfect_ranking_scores_one(): + ids = ["a", "b", "c"] + score = {"a": 3.0, "b": 2.0, "c": 1.0} + gain = {"a": 2, "b": 1, "c": 0} + assert ndcg_at_k(ids, score, gain, 10) == 1.0 + + +def test_all_tied_is_order_invariant(): + # Every doc shares one score -> McSherry-Najork averaging must make nDCG + # identical across all orderings of the tie group. + gain = {"a": 2, "b": 1, "c": 0} + score = {k: 1.0 for k in gain} + values = {round(ndcg_at_k(list(p), score, gain, 10), 9) for p in permutations(gain)} + assert len(values) == 1 + + +def test_tie_group_straddling_cutoff_is_order_invariant(): + # Two tied docs straddling the k=1 boundary share the averaged discount, so + # swapping them cannot change nDCG@1. + gain = {"a": 1, "b": 0} + score = {"a": 0.5, "b": 0.5} + assert ndcg_at_k(["a", "b"], score, gain, 1) == ndcg_at_k(["b", "a"], score, gain, 1) + + +def test_zero_gain_gives_zero_ndcg(): + assert ndcg_at_k(["a", "b"], {"a": 1.0, "b": 0.5}, {"a": 0, "b": 0}, 10) == 0.0 + + +def test_idcg_uses_best_ordering(): + assert idcg_at_k([0, 2, 1], 10) == idcg_at_k([2, 1, 0], 10) + + +def test_precision_at_k_hard_cutoff(): + ordered = ["a", "x", "c", "y", "z"] + assert precision_at_k(ordered, {"a", "c"}, 10) == 2 / 10 # denominator is k + assert precision_at_k(ordered, {"a", "c"}, 2) == 1 / 2 # only 'a' in top-2 + + +def test_condensed_ndcg_drops_unjudged_and_grades_gains(): + ranked = ["a", "u", "b", "c"] # 'u' is unjudged + score = {"a": 1.0, "u": 0.9, "b": 0.5, "c": 0.0} + grade = {"a": 2, "b": 1, "c": 0} + out = condensed_ndcg(ranked, score, grade, (5, 10)) + assert set(out) == {5, 10} + assert out[10] == 1.0 # condensed order a,b,c is already ideal by grade diff --git a/tests/test_package_imports.py b/tests/test_package_imports.py new file mode 100644 index 00000000..5853ea03 --- /dev/null +++ b/tests/test_package_imports.py @@ -0,0 +1,43 @@ +from __future__ import annotations + +import importlib.util +import pkgutil + +import pytest + +import trialmatchai + + +def test_trialmatchai_imports_with_version(): + assert trialmatchai.__version__ == "0.2.0" + + +def test_matcher_namespace_is_removed(): + assert importlib.util.find_spec("Matcher") is None + + +def test_trialmatchai_modules_import_with_core_dependencies(): + failures = [] + for module in pkgutil.walk_packages( + trialmatchai.__path__, + prefix=f"{trialmatchai.__name__}.", + ): + try: + __import__(module.name) + except Exception as exc: # pragma: no cover - assertion path + failures.append(f"{module.name}: {type(exc).__name__}: {exc}") + + assert failures == [] + + +def test_command_group_includes_bootstrap_data(monkeypatch, capsys): + from trialmatchai.cli.main import main + + monkeypatch.setattr("sys.argv", ["trialmatchai", "--help"]) + with pytest.raises(SystemExit) as exc: + main() + + assert exc.value.code == 0 + output = capsys.readouterr().out + assert "bootstrap-data" in output + assert "import-patient" in output diff --git a/tests/test_patient_interop.py b/tests/test_patient_interop.py new file mode 100644 index 00000000..0b507508 --- /dev/null +++ b/tests/test_patient_interop.py @@ -0,0 +1,347 @@ +from __future__ import annotations + +import json + +import pandas as pd + +from trialmatchai.interop import detect_patient_input_format, import_patient_path +from trialmatchai.interop.exporters import ( + profile_to_fhir_bundle, + profile_to_matching_summary, + profile_to_phenopacket, +) +from trialmatchai.interop.models import PatientProfile +from trialmatchai.interop.narrative import render_patient_narrative + + +class FakeAnnotator: + def annotate_texts_in_parallel(self, texts, max_workers=1, retries=1, delay=0): + del max_workers, retries, delay + text = texts[0] + start = text.index("melanoma") + return [ + [ + { + "entity_group": "disease", + "text": "melanoma", + "start": start, + "end": start + len("melanoma"), + "score": 0.97, + "normalized_id": ["SNOMED:372244006"], + "synonyms": ["malignant melanoma"], + "linker_score": 0.91, + "linker_status": "linked", + } + ] + ] + + +def test_patient_profile_schema_and_summary(): + schema = PatientProfile.model_json_schema() + assert "patient_id" in schema["properties"] + + profile = PatientProfile(patient_id="p1") + summary = profile_to_matching_summary(profile) + assert summary["patient_id"] == "p1" + assert summary["age"] == "all" + assert summary["patient_narrative"] + + +def test_text_importer_preserves_offsets_and_entities(tmp_path): + note = tmp_path / "patient-note.txt" + note.write_text("Patient has metastatic melanoma.", encoding="utf-8") + + profile = import_patient_path( + note, + input_format="text", + entity_annotator=FakeAnnotator(), + )[0] + + assert detect_patient_input_format(note) == "text" + assert profile.conditions[0].label == "melanoma" + assert profile.conditions[0].evidence_start == 23 + assert profile.conditions[0].normalized_codes[0].vocabulary == "SNOMED" + assert profile.notes[0].entities[0]["linker_status"] == "linked" + + +def test_phenopacket_importer_maps_core_sections(tmp_path): + packet = { + "id": "patient-phen", + "metaData": {}, + "subject": { + "sex": "FEMALE", + "timeAtLastEncounter": {"age": {"iso8601duration": "P42Y"}}, + }, + "phenotypicFeatures": [ + {"type": {"id": "HP:0001250", "label": "Seizure"}} + ], + "diseases": [ + {"term": {"id": "MONDO:0007254", "label": "breast cancer"}} + ], + "measurements": [ + {"assay": {"id": "LOINC:718-7", "label": "Hemoglobin"}} + ], + "medicalActions": [ + {"treatment": {"agent": {"id": "RxNorm:123", "label": "trastuzumab"}}} + ], + } + path = tmp_path / "patient.json" + path.write_text(json.dumps(packet), encoding="utf-8") + + profile = import_patient_path(path)[0] + + assert detect_patient_input_format(path) == "phenopacket" + assert profile.demographics.sex == "Female" + assert profile.demographics.age_years == 42 + assert profile.conditions[0].label == "breast cancer" + assert profile.phenotypes[0].label == "Seizure" + assert profile.medications[0].label == "trastuzumab" + + +def test_fhir_bundle_importer_and_exporter(tmp_path): + bundle = { + "resourceType": "Bundle", + "type": "collection", + "entry": [ + {"resource": {"resourceType": "Patient", "id": "fhir-p1", "gender": "female"}}, + { + "resource": { + "resourceType": "Condition", + "id": "c1", + "code": { + "coding": [ + { + "system": "http://snomed.info/sct", + "code": "254637007", + "display": "Non-small cell lung cancer", + } + ] + }, + } + }, + { + "resource": { + "resourceType": "Observation", + "id": "o1", + "code": {"coding": [{"system": "http://loinc.org", "code": "718-7"}]}, + "valueQuantity": {"value": 12.5, "unit": "g/dL"}, + } + }, + ], + } + path = tmp_path / "bundle.json" + path.write_text(json.dumps(bundle), encoding="utf-8") + + profile = import_patient_path(path)[0] + exported = profile_to_fhir_bundle(profile) + + assert detect_patient_input_format(path) == "fhir" + assert profile.patient_id == "fhir-p1" + assert profile.conditions[0].normalized_codes[0].vocabulary == "SNOMED" + assert profile.observations[0].description == "12.5 g/dL" + assert exported["resourceType"] == "Bundle" + + +def test_fhir_bundle_groups_resources_by_patient_reference(tmp_path): + bundle = { + "resourceType": "Bundle", + "type": "collection", + "entry": [ + { + "fullUrl": "urn:uuid:patient-1", + "resource": {"resourceType": "Patient", "id": "p1"}, + }, + {"resource": {"resourceType": "Patient", "id": "p2"}}, + { + "resource": { + "resourceType": "Condition", + "id": "c1", + "subject": {"reference": "urn:uuid:patient-1"}, + "code": {"text": "melanoma"}, + } + }, + { + "resource": { + "resourceType": "Condition", + "id": "c2", + "subject": {"reference": "Patient/p2"}, + "code": {"text": "sarcoma"}, + } + }, + ], + } + path = tmp_path / "bundle.json" + path.write_text(json.dumps(bundle), encoding="utf-8") + + profiles = import_patient_path(path) + + by_id = {profile.patient_id: profile for profile in profiles} + assert sorted(by_id) == ["p1", "p2"] + assert by_id["p1"].conditions[0].label == "melanoma" + assert by_id["p2"].conditions[0].label == "sarcoma" + + +def test_fhir_ndjson_detection_and_import(tmp_path): + path = tmp_path / "patient.ndjson" + path.write_text( + "\n".join( + [ + json.dumps({"resourceType": "Patient", "id": "ndjson-p1"}), + json.dumps( + { + "resourceType": "Procedure", + "id": "p1", + "code": {"text": "bone marrow biopsy"}, + } + ), + ] + ), + encoding="utf-8", + ) + + profile = import_patient_path(path)[0] + + assert detect_patient_input_format(path) == "fhir-ndjson" + assert profile.procedures[0].label == "bone marrow biopsy" + + +def test_fhir_jsonl_detection_and_import(tmp_path): + path = tmp_path / "patient.jsonl" + path.write_text( + "\n".join( + [ + json.dumps({"resourceType": "Patient", "id": "jsonl-p1"}), + json.dumps( + { + "resourceType": "Condition", + "id": "c1", + "subject": {"reference": "Patient/jsonl-p1"}, + "code": {"text": "glioma"}, + } + ), + ] + ), + encoding="utf-8", + ) + + profile = import_patient_path(path)[0] + + assert detect_patient_input_format(path) == "fhir-ndjson" + assert profile.conditions[0].label == "glioma" + + +def test_omop_importer_from_csv_extract(tmp_path): + omop = tmp_path / "omop" + omop.mkdir() + pd.DataFrame( + [{"person_id": 1, "gender_source_value": "F", "year_of_birth": 1980}] + ).to_csv(omop / "PERSON.csv", index=False) + pd.DataFrame( + [ + { + "person_id": 1, + "condition_concept_id": 10, + "condition_start_date": "2026-01-01", + } + ] + ).to_csv(omop / "CONDITION_OCCURRENCE.csv", index=False) + pd.DataFrame( + [ + { + "concept_id": 10, + "vocabulary_id": "SNOMED", + "concept_code": "44054006", + "concept_name": "Diabetes mellitus", + "domain_id": "Condition", + } + ] + ).to_csv(omop / "CONCEPT.csv", index=False) + + profiles = import_patient_path(omop) + + assert detect_patient_input_format(omop) == "omop" + assert len(profiles) == 1 + assert profiles[0].conditions[0].label == "Diabetes mellitus" + assert profiles[0].conditions[0].normalized_codes[0].code == "44054006" + + +def test_omop_join_survives_null_person_id_float_promotion(tmp_path): + # A NULL person_id in a child table promotes the whole column to float64, so + # person_id 1 serializes as "1.0". The join must still match the PERSON row + # (previously every child record was silently dropped). + omop = tmp_path / "omop" + omop.mkdir() + pd.DataFrame( + [{"person_id": 1, "gender_source_value": "F", "year_of_birth": 1980}] + ).to_csv(omop / "PERSON.csv", index=False) + pd.DataFrame( + [ + {"person_id": 1, "condition_concept_id": 10}, + {"person_id": None, "condition_concept_id": 11}, + ] + ).to_csv(omop / "CONDITION_OCCURRENCE.csv", index=False) + pd.DataFrame( + [ + { + "concept_id": 10, + "vocabulary_id": "SNOMED", + "concept_code": "44054006", + "concept_name": "Diabetes mellitus", + "domain_id": "Condition", + } + ] + ).to_csv(omop / "CONCEPT.csv", index=False) + + profiles = import_patient_path(omop) + + assert len(profiles) == 1 + assert [c.label for c in profiles[0].conditions] == ["Diabetes mellitus"] + + +def test_omop_join_uses_raw_person_id_not_sanitized_profile_id(tmp_path): + # The profile id is sanitized ("pat 01" -> "pat-01"), but child-table joins + # must key off the raw person_id, not the sanitized profile id. + omop = tmp_path / "omop" + omop.mkdir() + pd.DataFrame( + [{"person_id": "pat 01", "gender_source_value": "M", "year_of_birth": 1970}] + ).to_csv(omop / "PERSON.csv", index=False) + pd.DataFrame( + [{"person_id": "pat 01", "condition_concept_id": 10}] + ).to_csv(omop / "CONDITION_OCCURRENCE.csv", index=False) + pd.DataFrame( + [ + { + "concept_id": 10, + "vocabulary_id": "SNOMED", + "concept_code": "44054006", + "concept_name": "Diabetes mellitus", + "domain_id": "Condition", + } + ] + ).to_csv(omop / "CONCEPT.csv", index=False) + + profiles = import_patient_path(omop) + + assert len(profiles) == 1 + assert profiles[0].patient_id == "pat-01" + assert [c.label for c in profiles[0].conditions] == ["Diabetes mellitus"] + + +def test_narrative_and_phenopacket_export_are_deterministic(tmp_path): + packet = { + "id": "patient-export", + "metaData": {}, + "subject": {}, + "diseases": [{"term": {"id": "MONDO:0004992", "label": "cancer"}}], + } + path = tmp_path / "patient.json" + path.write_text(json.dumps(packet), encoding="utf-8") + profile = import_patient_path(path)[0] + + narrative = render_patient_narrative(profile) + packet_out = profile_to_phenopacket(profile) + + assert narrative[0].startswith("Diagnoses:") + assert packet_out["id"] == "patient-export" + assert packet_out["diseases"][0]["term"]["label"] == "cancer" diff --git a/tests/test_patient_runtime_loading.py b/tests/test_patient_runtime_loading.py new file mode 100644 index 00000000..15f6d896 --- /dev/null +++ b/tests/test_patient_runtime_loading.py @@ -0,0 +1,112 @@ +from __future__ import annotations + +import json + +from trialmatchai.interop.models import PatientProfile +from trialmatchai.main import _load_patient_inputs + + +def test_runtime_loads_profiles_from_configured_directory(tmp_path): + profiles = tmp_path / "profiles" + profiles.mkdir() + summaries = tmp_path / "summaries" + summaries.mkdir() + (profiles / "p1.json").write_text( + json.dumps({"patient_id": "p1", "demographics": {}}), + encoding="utf-8", + ) + (summaries / "p1.json").write_text( + json.dumps( + { + "patient_id": "p1", + "main_conditions": ["melanoma"], + "other_conditions": [], + "patient_narrative": ["Patient has melanoma."], + "age": "all", + "gender": "all", + } + ), + encoding="utf-8", + ) + + loaded = _load_patient_inputs( + { + "patient_inputs": { + "profile_dir": str(profiles), + "summary_dir": str(summaries), + }, + } + ) + + assert loaded[0][0].patient_id == "p1" + assert loaded[0][1]["main_conditions"] == ["melanoma"] + + +def test_runtime_requires_canonical_profiles(tmp_path): + profiles = tmp_path / "profiles" + summaries = tmp_path / "summaries" + + loaded = _load_patient_inputs( + { + "patient_inputs": { + "profile_dir": str(profiles), + "summary_dir": str(summaries), + }, + } + ) + + assert loaded == [] + + +def test_main_pipeline_returns_nonzero_when_all_patients_fail(tmp_path, monkeypatch): + import trialmatchai.main as main_module + import trialmatchai.models.embedding as embedding_module + + class _Backend: + def health(self, *, require_tables=False): + return [] + + config = { + "paths": { + "output_dir": str(tmp_path / "results"), + "trials_json_folder": str(tmp_path / "trials"), + }, + "search_backend": {"backend": "lancedb"}, + "patient_inputs": {}, + "search": {"mode": "bm25"}, + "constraints": {"enabled": False}, + "LLM_reranker": {"enabled": False}, + "rag": {"enabled": False}, + "use_cot_reasoning": False, + } + profile = PatientProfile.model_validate({"patient_id": "p1", "demographics": {}}) + summary = { + "patient_id": "p1", + "main_conditions": ["lung cancer"], + "other_conditions": [], + "patient_narrative": ["Patient has lung cancer."], + "age": "all", + "gender": "all", + } + + monkeypatch.setattr(main_module, "load_config", lambda config_path=None: config) + monkeypatch.setattr(main_module, "run_preflight_checks", lambda *args, **kwargs: []) + monkeypatch.setattr( + main_module.LanceDBSearchBackend, + "from_config", + classmethod(lambda cls, cfg: _Backend()), + ) + monkeypatch.setattr(embedding_module, "build_embedder", lambda cfg: object()) + monkeypatch.setattr(main_module, "build_entity_annotator", lambda cfg, embedder: None) + monkeypatch.setattr( + main_module, + "_load_patient_inputs", + lambda cfg: [(profile, summary)], + ) + + def _fail_first_level(*args, **kwargs): + raise RuntimeError("forced patient failure") + + monkeypatch.setattr(main_module, "run_first_level_search", _fail_first_level) + + assert main_module.main_pipeline("config.json") == 1 diff --git a/tests/test_phenopacket_processor_pytest.py b/tests/test_phenopacket_processor_pytest.py deleted file mode 100644 index 3621e492..00000000 --- a/tests/test_phenopacket_processor_pytest.py +++ /dev/null @@ -1,13 +0,0 @@ -import json - -from Matcher.pipeline.phenopacket_processor import PhenopacketProcessor - - -def test_phenopacket_processor_minimal(tmp_path): - data = {"id": "patient-1", "metaData": {}, "subject": {}} - path = tmp_path / "patient.json" - path.write_text(json.dumps(data)) - - processor = PhenopacketProcessor(str(path)) - narrative = processor.generate_medical_narrative() - assert narrative diff --git a/tests/test_pipeline.py b/tests/test_pipeline.py new file mode 100644 index 00000000..29ff5986 --- /dev/null +++ b/tests/test_pipeline.py @@ -0,0 +1,96 @@ +"""The unified pipeline driver: stage selection, force semantics, teardown.""" + +import pytest + +from trialmatchai import pipeline +from trialmatchai.pipeline import StageContext, select_stages + + +def _names(stages): + return [s.name for s in stages] + + +def test_default_selection_is_every_stage_in_order(): + assert _names(select_stages()) == list(pipeline.STAGE_NAMES) + + +def test_only_selects_exactly_those_in_canonical_order(): + assert _names(select_stages(only=["match", "prepare"])) == ["prepare", "match"] + + +def test_from_to_slice(): + assert _names(select_stages(from_stage="index", to_stage="match")) == [ + "index", + "ingest", + "expand", + "match", + ] + + +def test_to_alone_runs_the_build_half(): + assert _names(select_stages(to_stage="index")) == ["prepare", "concepts", "index"] + + +def test_from_alone_runs_the_run_half(): + assert _names(select_stages(from_stage="ingest")) == ["ingest", "expand", "match", "eval"] + + +def test_skip_removes_a_stage(): + assert "expand" not in _names(select_stages(skip=["expand"])) + + +def test_unknown_stage_raises(): + with pytest.raises(ValueError): + select_stages(only=["nonsense"]) + with pytest.raises(ValueError): + select_stages(skip=["nope"]) + with pytest.raises(ValueError): + select_stages(from_stage="bogus") + + +def test_from_after_to_raises(): + with pytest.raises(ValueError): + select_stages(from_stage="match", to_stage="prepare") + + +def test_forced_semantics(): + ctx = StageContext(config={}, force={"match"}) + assert ctx.forced("match") is True + assert ctx.forced("prepare") is False + assert StageContext(config={}, force={"all"}).forced("anything") is True + + +def _fake_stages(record): + return tuple( + pipeline.Stage(n, (lambda name: lambda ctx: record.append(name))(n), "") + for n in ("a", "b", "c") + ) + + +def test_run_pipeline_runs_selected_in_order_and_frees_models(monkeypatch): + ran, freed = [], [] + fakes = _fake_stages(ran) + monkeypatch.setattr(pipeline, "STAGES", fakes) + monkeypatch.setattr(pipeline, "STAGE_NAMES", tuple(s.name for s in fakes)) + monkeypatch.setattr("trialmatchai.orchestration.free_models", lambda: freed.append(1)) + + rc = pipeline.run_pipeline(StageContext(config={}), only=["a", "c"]) + assert rc == 0 + assert ran == ["a", "c"] + assert freed == [1] # teardown ran once + + +def test_run_pipeline_frees_models_even_on_stage_error(monkeypatch): + freed = [] + + def boom(ctx): + raise RuntimeError("stage failed") + + fakes = (pipeline.Stage("a", boom, ""),) + monkeypatch.setattr(pipeline, "STAGES", fakes) + monkeypatch.setattr(pipeline, "STAGE_NAMES", ("a",)) + monkeypatch.setattr("trialmatchai.orchestration.free_models", lambda: freed.append(1)) + + with pytest.raises(RuntimeError): + pipeline.run_pipeline(StageContext(config={})) + assert freed == [1] # GPU freed despite the failure diff --git a/tests/test_preflight_and_indexer.py b/tests/test_preflight_and_indexer.py new file mode 100644 index 00000000..0e384265 --- /dev/null +++ b/tests/test_preflight_and_indexer.py @@ -0,0 +1,222 @@ +from __future__ import annotations + +import json +from pathlib import Path + +from trialmatchai.config.config_loader import load_config +from trialmatchai.search import InMemorySearchBackend +from trialmatchai.services import preflight +from trialmatchai.services.preflight import run_preflight_checks + + +def _base_config(tmp_path): + profiles = tmp_path / "profiles" + profiles.mkdir() + trials = tmp_path / "trials" + trials.mkdir() + search_db = tmp_path / "search" + search_db.mkdir() + return { + "paths": { + "trials_json_folder": str(trials), + "output_dir": str(tmp_path / "results"), + }, + "patient_inputs": { + "profile_dir": str(profiles), + "summary_dir": str(tmp_path / "summaries"), + }, + "search_backend": { + "backend": "lancedb", + "db_path": str(search_db), + "trials_table": "trials", + "criteria_table": "criteria", + }, + "model": { + "cot_adapter_path": str(tmp_path / "models" / "cot"), + "reranker_adapter_path": str(tmp_path / "models" / "reranker"), + }, + } + + +def _entity_config(tmp_path): + cfg = _base_config(tmp_path) + schema = tmp_path / "schema.yaml" + schema.write_text("version: 1\nentities: []\n") + cfg["entity_extraction"] = { + "backend": "gliner2", + "schema_path": str(schema), + } + cfg["concept_linker"] = { + "enabled": True, + "db_path": str(tmp_path / "missing-concepts"), + } + return cfg + + +class FakeSearchBackend: + def __init__(self, issues: list[str] | None = None): + self.issues = issues or [] + + def health(self, *, require_tables: bool = False): + return self.issues if require_tables else [] + + +def test_preflight_passes_for_required_paths_and_tables(tmp_path): + cfg = _base_config(tmp_path) + issues = run_preflight_checks( + cfg, + search_backend=FakeSearchBackend(), + require_patient_inputs=True, + require_trials_json=True, + require_search_tables=True, + ) + + assert issues == [] + + +def test_preflight_reports_missing_search_tables(tmp_path): + cfg = _base_config(tmp_path) + issues = run_preflight_checks( + cfg, + search_backend=FakeSearchBackend(["Missing LanceDB tables: criteria"]), + require_search_tables=True, + ) + + assert issues == ["Missing LanceDB tables: criteria"] + + +def test_preflight_reports_missing_search_db_path(tmp_path): + cfg = _base_config(tmp_path) + cfg["search_backend"]["db_path"] = str(tmp_path / "missing-search") + + issues = run_preflight_checks( + cfg, + search_backend=FakeSearchBackend(), + require_search_tables=True, + ) + + assert issues == [ + f"search_backend.db_path does not exist: {tmp_path / 'missing-search'}" + ] + + +def test_preflight_reports_missing_vllm_extra(tmp_path, monkeypatch): + cfg = _base_config(tmp_path) + Path(cfg["model"]["cot_adapter_path"]).mkdir(parents=True) + Path(cfg["model"]["reranker_adapter_path"]).mkdir(parents=True) + monkeypatch.setattr(preflight.importlib.util, "find_spec", lambda name: None) + + issues = run_preflight_checks(cfg, require_models=True) + + assert issues == ["vLLM is required (`uv sync --extra llm --extra gpu`)."] + + +def test_preflight_allows_cpu_smoke_when_llm_stages_disabled(tmp_path, monkeypatch): + cfg = _base_config(tmp_path) + cfg["LLM_reranker"] = {"enabled": False} + cfg["rag"] = {"enabled": False} + cfg["use_cot_reasoning"] = False + monkeypatch.setattr(preflight.importlib.util, "find_spec", lambda name: None) + + issues = run_preflight_checks(cfg, require_models=True) + + assert issues == [] + + +def test_preflight_allows_transformers_cpu_llm_backend(tmp_path, monkeypatch): + cfg = _base_config(tmp_path) + cfg["LLM_reranker"] = {"enabled": True, "backend": "transformers"} + cfg["rag"] = {"enabled": True, "backend": "transformers"} + cfg["use_cot_reasoning"] = True + monkeypatch.setattr( + preflight.importlib.util, + "find_spec", + lambda name: object() if name in {"torch", "transformers"} else None, + ) + + issues = run_preflight_checks(cfg, require_models=True) + + assert issues == [] + + +def test_preflight_reports_missing_entity_extra(tmp_path, monkeypatch): + cfg = _entity_config(tmp_path) + monkeypatch.setattr(preflight.importlib.util, "find_spec", lambda name: None) + + issues = run_preflight_checks(cfg, require_models=True) + + assert ( + "entity_extraction.backend=gliner2 requires the entity extra " + "(`uv sync --extra entity`)." + ) in issues + + +def test_main_config_resolves_search_paths(tmp_path, monkeypatch): + config_path = tmp_path / "config.json" + schema = tmp_path / "schema.yaml" + schema.write_text("version: 1\nentities: []\n") + config_path.write_text( + json.dumps( + { + "paths": { + "output_dir": "results", + "trials_json_folder": "trials", + }, + "patient_inputs": { + "profile_dir": "patients/profiles", + "summary_dir": "patients/summaries", + }, + "search_backend": { + "backend": "lancedb", + "db_path": "search", + "trials_table": "trials", + "criteria_table": "criteria", + }, + "entity_extraction": { + "backend": "regex", + "schema_path": str(schema), + }, + "concept_linker": { + "enabled": False, + "db_path": "concepts", + }, + "model": { + "base_model": "m", + "quantization": {}, + "cot_adapter_path": "models/cot", + "reranker_model_path": "r", + "reranker_adapter_path": "models/reranker", + }, + "tokenizer": {}, + "global": {"device": "cpu"}, + "embedder": {}, + "cot": {}, + "LLM_reranker": {}, + "search": {}, + "rag": {}, + "vllm": {}, + } + ) + ) + search_env = tmp_path / "search-env" + monkeypatch.setenv("TRIALMATCHAI_SEARCH_DB_PATH", str(search_env)) + + cfg = load_config(config_path) + + assert cfg["search_backend"]["db_path"] == str(search_env.resolve()) + + +def test_indexer_loads_prepared_criteria_docs(tmp_path): + processed = tmp_path / "processed_criteria" + trial_dir = processed / "N1" + trial_dir.mkdir(parents=True) + (trial_dir / "C1.json").write_text( + json.dumps({"criteria_id": "C1", "nct_id": "N1", "criterion": "cancer"}) + ) + docs = [json.loads(p.read_text()) for p in sorted(processed.glob("*/*.json"))] + backend = InMemorySearchBackend() + count = backend.replace_criteria_for_trials(["N1"], docs) + + assert docs[0]["criteria_id"] == "C1" + assert count == 1 + assert backend.criteria[0]["nct_id"] == "N1" diff --git a/tests/test_qrels_eval.py b/tests/test_qrels_eval.py new file mode 100644 index 00000000..48ef347d --- /dev/null +++ b/tests/test_qrels_eval.py @@ -0,0 +1,53 @@ +"""qrels parsing + evaluation (trec/qrels.py).""" + +import json + +import pytest + +from trialmatchai.trec.qrels import evaluate, parse_qrels, recall_at_k + + +def test_parse_qrels_prefixes_and_skips_malformed(tmp_path): + p = tmp_path / "q.txt" + p.write_text("1 0 NCT001 2\n1 0 NCT002 1\nbad line\n2 0 NCT003 0\n") + assert parse_qrels(p, "trec-") == { + "trec-1": {"NCT001": 2, "NCT002": 1}, + "trec-2": {"NCT003": 0}, + } + + +def test_parse_qrels_empty_raises(tmp_path): + p = tmp_path / "empty.txt" + p.write_text("\n# nothing parseable\n") + with pytest.raises(ValueError): + parse_qrels(p, "trec-") + + +def test_recall_at_k(): + assert recall_at_k(["a", "b", "c"], {"a", "c", "z"}, 3) == 2 / 3 + assert recall_at_k(["a"], set(), 3) is None # no relevant -> undefined + + +def test_evaluate_end_to_end(tmp_path): + q = "trec-1" + pdir = tmp_path / q + pdir.mkdir() + (pdir / "ranked_trials.json").write_text( + json.dumps( + { + "RankedTrials": [ + {"TrialID": "NCT1", "Score": 1.0}, + {"TrialID": "NCT2", "Score": 0.5}, + {"TrialID": "NCT3", "Score": 0.0}, + ] + } + ) + ) + (pdir / "nct_ids.txt").write_text("NCT1\nNCT2\nNCT3\n") + qrels = {q: {"NCT1": 2, "NCT2": 1, "NCT3": 0}} + res = evaluate(qrels, tmp_path, cutoffs=(10,)) + assert res["num_queries_scored"] == 1 + mean = res["mean"] + assert mean["recall@10"] == 1.0 # both relevant retrieved + assert mean["ndcg@10"] == 1.0 # ranking is the ideal grade order + assert mean["P@10(rel>=1)"] == 2 / 10 diff --git a/tests/test_registry_updater.py b/tests/test_registry_updater.py new file mode 100644 index 00000000..3b9c12d0 --- /dev/null +++ b/tests/test_registry_updater.py @@ -0,0 +1,347 @@ +from __future__ import annotations + +import json +from datetime import date +from pathlib import Path +from typing import Any + +from trialmatchai.registry.clinicaltrials_gov import ClinicalTrialsGovClient +from trialmatchai.registry.defaults import DEFAULT_REGISTRY_KEYWORDS +from trialmatchai.registry.manifest import RegistryManifest, source_hash +from trialmatchai.registry.normalization import normalize_study, split_eligibility_criteria +from trialmatchai.registry.updater import RegistryUpdateConfig, RegistryUpdater, normalize_keywords +from trialmatchai.search import InMemorySearchBackend + + +def test_client_paginates_and_filters_since(): + session = _FakeSession( + [ + { + "studies": [ + _study("NCT00000001", last_update="2026-06-01"), + _study("NCT00000002", last_update="2026-01-01"), + ], + "nextPageToken": "page-2", + }, + {"studies": [_study("NCT00000003", last_update="2026-06-02")]}, + ] + ) + client = ClinicalTrialsGovClient( + session=session, + rate_limit_per_second=1000, + timeout=1, + ) + + studies = list( + client.iter_studies( + keyword="cancer", + statuses=("RECRUITING",), + since=date(2026, 6, 1), + ) + ) + + assert [study["protocolSection"]["identificationModule"]["nctId"] for study in studies] == [ + "NCT00000001", + "NCT00000003", + ] + assert session.calls[0]["params"]["query.term"] == "cancer" + assert session.calls[0]["params"]["filter.overallStatus"] == "RECRUITING" + assert session.calls[1]["params"]["pageToken"] == "page-2" + + +def test_prepare_trial_document_preserves_detailed_description_and_official_title(): + # These two fields carry BM25 weight in the backend (TRIAL_TEXT_WEIGHTS) but + # were previously dropped before indexing, silently losing retrieval signal. + from trialmatchai.registry.preparation import prepare_trial_document + + class _StubEmbedder: + def embed_texts(self, texts): + return [[0.0, 0.0] for _ in texts] + + prepared = prepare_trial_document( + { + "nct_id": "NCT00000009", + "brief_title": "Brief", + "condition": ["Lung cancer"], + "eligibility_criteria": "Adults", + "detailed_description": "A longer detailed description of the study.", + "official_title": "The Official Long Title of the Study", + }, + _StubEmbedder(), + ) + + assert "description" in prepared["detailed_description"].lower() + assert "official" in prepared["official_title"].lower() + + +def test_prepare_documents_emit_lancedb_stable_fields(): + from trialmatchai.registry.preparation import ( + prepare_criteria_documents, + prepare_trial_document, + ) + + class _StubEmbedder: + def embed_texts(self, texts): + return [[0.0, 0.0] for _ in texts] + + trial = prepare_trial_document( + { + "nct_id": "NCT00000010", + "brief_title": "Brief", + "condition": ["Lung cancer"], + "eligibility_criteria": "Adults", + }, + _StubEmbedder(), + ) + criteria = prepare_criteria_documents( + { + "nct_id": "NCT00000010", + "criteria": [ + {"type": "inclusion", "criterion": "Female adults age 18 years or older"} + ], + }, + _StubEmbedder(), + ) + + assert trial["location"] == [ + {"facility": "", "city": "", "state": "", "country": "", "status": ""} + ] + assert trial["minimum_age"] == 0.0 + assert trial["maximum_age"] == 999.0 + assert isinstance(criteria[0]["constraints"], str) + assert json.loads(criteria[0]["constraints"])["nct_id"] == "NCT00000010" + + +def test_normalize_study_maps_v2_modules_and_splits_criteria(): + normalized = normalize_study(_study("NCT00000004")) + + assert normalized["nct_id"] == "NCT00000004" + assert normalized["brief_title"] == "Trial for NCT00000004" + assert normalized["condition"] == ["Lung cancer"] + assert normalized["source_url"] == "https://clinicaltrials.gov/study/NCT00000004" + assert normalized["criteria"] == [ + {"type": "inclusion", "criterion": "Age 18 years or older"}, + {"type": "inclusion", "criterion": "Histologically confirmed lung cancer"}, + {"type": "exclusion", "criterion": "Prior investigational therapy"}, + ] + + +def test_split_eligibility_criteria_has_unknown_fallback(): + assert split_eligibility_criteria("Able to consent.") == [ + {"type": "unknown", "criterion": "Able to consent."} + ] + + +def test_manifest_keeps_latest_record_by_nct_id(tmp_path): + manifest = RegistryManifest(tmp_path / "manifest.jsonl") + study = _study("NCT00000005") + record = _manifest_record("NCT00000005", source_hash(study), status="indexed") + changed = _manifest_record("NCT00000005", "changed", status="indexed") + + manifest.append(record) + manifest.append(changed) + + latest = manifest.load_latest() + assert latest["NCT00000005"].source_hash == "changed" + + +def test_updater_writes_new_trial_and_upserts_tables(tmp_path): + study = _study("NCT00000006") + backend = InMemorySearchBackend( + criteria=[ + { + "criteria_id": "old", + "nct_id": "NCT00000006", + "criterion": "old criterion", + "criterion_vector": [0.0, 0.0], + } + ] + ) + updater = RegistryUpdater( + client=_FakeRegistryClient([study]), + backend=backend, + embedder=_FakeEmbedder(), + ) + + report = updater.run(_update_config(tmp_path)) + + assert report.fetched == 1 + assert report.new == 1 + assert report.indexed == 1 + assert report.criteria_indexed == 3 + assert (tmp_path / "raw/NCT00000006.json").exists() + assert (tmp_path / "trials/NCT00000006.json").exists() + assert len(backend.trials) == 1 + assert all(row["nct_id"] == "NCT00000006" for row in backend.criteria) + assert {row["criterion"] for row in backend.criteria} == { + "Age 18 years or older", + "Histologically confirmed lung cancer", + "Prior investigational therapy", + } + + +def test_updater_skips_unchanged_hashes(tmp_path): + study = _study("NCT00000007") + config = _update_config(tmp_path) + RegistryManifest(config.manifest_path).append( + _manifest_record("NCT00000007", source_hash(study), status="indexed") + ) + backend = InMemorySearchBackend() + updater = RegistryUpdater( + client=_FakeRegistryClient([study]), + backend=backend, + embedder=_FakeEmbedder(), + ) + + report = updater.run(config) + + assert report.unchanged == 1 + assert report.indexed == 0 + assert backend.trials == [] + + +def test_updater_dry_run_does_not_write_files_or_tables(tmp_path): + backend = InMemorySearchBackend() + updater = RegistryUpdater( + client=_FakeRegistryClient([_study("NCT00000008")]), + backend=backend, + embedder=_FakeEmbedder(), + ) + + report = updater.run(_update_config(tmp_path, dry_run=True)) + + assert report.new == 1 + assert not (tmp_path / "raw").exists() + assert not (tmp_path / "trials").exists() + assert not (tmp_path / "manifest.jsonl").exists() + assert backend.trials == [] + + +def test_normalize_keywords_uses_defaults_when_empty(): + assert normalize_keywords([]) == DEFAULT_REGISTRY_KEYWORDS + assert normalize_keywords([" cancer ", "cancer", "diabetes"]) == ( + "cancer", + "diabetes", + ) + + +class _FakeResponse: + def __init__(self, payload: dict[str, Any], status_code: int = 200): + self.payload = payload + self.status_code = status_code + self.text = json.dumps(payload) + + def json(self): + return self.payload + + def raise_for_status(self): + if self.status_code >= 400: + raise RuntimeError(self.text) + + +class _FakeSession: + def __init__(self, payloads: list[dict[str, Any]]): + self.payloads = payloads + self.calls: list[dict[str, Any]] = [] + + def get(self, url, *, params, timeout, headers): + self.calls.append( + { + "url": url, + "params": dict(params), + "timeout": timeout, + "headers": dict(headers), + } + ) + return _FakeResponse(self.payloads.pop(0)) + + +class _FakeRegistryClient: + def __init__(self, studies: list[dict[str, Any]]): + self.studies = studies + + def iter_studies(self, *, keyword, statuses, since, max_studies): + del keyword, statuses, since + for study in self.studies[:max_studies]: + yield study + + +class _FakeEmbedder: + def embed_texts(self, texts): + return [[float(len(text)), 1.0] for text in texts] + + +def _update_config(tmp_path: Path, *, dry_run: bool = False) -> RegistryUpdateConfig: + return RegistryUpdateConfig( + raw_dir=tmp_path / "raw", + normalized_trials_dir=tmp_path / "trials", + manifest_path=tmp_path / "manifest.jsonl", + reports_dir=tmp_path / "runs", + keywords=("cancer",), + statuses=("RECRUITING",), + since=None, + dry_run=dry_run, + ) + + +def _manifest_record(nct_id: str, digest: str, *, status: str): + from trialmatchai.registry.manifest import ManifestRecord, utc_now_iso + + return ManifestRecord( + nct_id=nct_id, + source_url=f"https://clinicaltrials.gov/study/{nct_id}", + source_hash=digest, + fetched_at=utc_now_iso(), + last_update_posted="2026-06-01", + processing_status=status, + ) + + +def _study(nct_id: str, *, last_update: str = "2026-06-01") -> dict[str, Any]: + return { + "protocolSection": { + "identificationModule": { + "nctId": nct_id, + "briefTitle": f"Trial for {nct_id}", + "officialTitle": f"Official trial for {nct_id}", + }, + "statusModule": { + "overallStatus": "RECRUITING", + "startDateStruct": {"date": "2026-01-01"}, + "completionDateStruct": {"date": "2027-01-01"}, + "lastUpdatePostDateStruct": {"date": last_update}, + }, + "descriptionModule": { + "briefSummary": "A test trial.", + "detailedDescription": "A detailed test trial.", + }, + "conditionsModule": {"conditions": ["Lung cancer"]}, + "designModule": { + "phases": ["PHASE2"], + "studyType": "INTERVENTIONAL", + }, + "eligibilityModule": { + "sex": "ALL", + "minimumAge": "18 Years", + "maximumAge": "80 Years", + "eligibilityCriteria": "\n".join( + [ + "Inclusion Criteria:", + "- Age 18 years or older", + "- Histologically confirmed lung cancer", + "Exclusion Criteria:", + "- Prior investigational therapy", + ] + ), + }, + "armsInterventionsModule": { + "interventions": [{"name": "Drug A", "type": "DRUG"}] + }, + "contactsLocationsModule": { + "locations": [{"facility": "Site A", "country": "United States"}] + }, + "referencesModule": { + "references": [{"pmid": "123", "citation": "Reference"}] + }, + } + } diff --git a/tests/test_retry_pytest.py b/tests/test_retry_pytest.py deleted file mode 100644 index 6cc900c6..00000000 --- a/tests/test_retry_pytest.py +++ /dev/null @@ -1,13 +0,0 @@ -from Matcher.utils.retry import with_retries - - -def test_with_retries_succeeds_after_failures(): - calls = {"count": 0} - - def flaky(): - calls["count"] += 1 - if calls["count"] < 3: - raise RuntimeError("boom") - return "ok" - - assert with_retries(flaky, retries=3, base_delay=0.0, max_delay=0.0) == "ok" diff --git a/tests/test_schemas.py b/tests/test_schemas.py index 14587fad..c8747a6c 100644 --- a/tests/test_schemas.py +++ b/tests/test_schemas.py @@ -1,11 +1,6 @@ -import sys import unittest -from pathlib import Path -ROOT = Path(__file__).resolve().parents[1] -sys.path.append(str(ROOT / "source")) - -from Matcher.schemas.phenopacket import Keywords, Phenopacket +from trialmatchai.schemas.phenopacket import Keywords, Phenopacket class TestSchemas(unittest.TestCase): @@ -15,7 +10,7 @@ def test_phenopacket_minimal(self) -> None: self.assertEqual(obj.id, "patient-1") def test_keywords_default(self) -> None: - data = {"main_conditions": ["A"], "other_conditions": [], "expanded_sentences": []} + data = {"main_conditions": ["A"], "other_conditions": [], "patient_narrative": []} obj = Keywords.model_validate(data) self.assertEqual(obj.main_conditions, ["A"]) @@ -23,7 +18,7 @@ def test_keywords_allows_extra(self) -> None: data = { "main_conditions": [], "other_conditions": [], - "expanded_sentences": [], + "patient_narrative": [], "error": "bad", "extra": "ok", } diff --git a/tests/test_search_queries.py b/tests/test_search_queries.py deleted file mode 100644 index eb86ded8..00000000 --- a/tests/test_search_queries.py +++ /dev/null @@ -1,64 +0,0 @@ -import sys -import unittest -from pathlib import Path - -ROOT = Path(__file__).resolve().parents[1] -sys.path.append(str(ROOT / "source")) - -from Matcher.pipeline.trial_search.first_level_search import ClinicalTrialSearch - - -class DummyES: - def search(self, *args, **kwargs): - raise AssertionError("ES search should not be called in these tests.") - - -class TestFirstLevelQueryBuilding(unittest.TestCase): - def setUp(self) -> None: - self.search = ClinicalTrialSearch( - es_client=DummyES(), - embedder=None, - index_name="index", - bio_med_ner=None, - ) - - def test_create_query_bm25(self) -> None: - query = self.search.create_query( - synonyms=["lung cancer"], - embeddings={}, - age=45, - sex="ALL", - overall_status="Recruiting", - max_text_score=1.0, - vector_score_threshold=0.5, - pre_selected_nct_ids=None, - other_conditions=None, - search_mode="bm25", - ) - self.assertIn("bool", query) - self.assertIn("should", query["bool"]) - self.assertIn("filter", query["bool"]) - - def test_create_query_vector(self) -> None: - embeddings = {"lung cancer": [0.1, 0.2], "smoking": [0.3, 0.4]} - query = self.search.create_query( - synonyms=["lung cancer"], - embeddings=embeddings, - age=60, - sex="MALE", - overall_status=None, - max_text_score=1.0, - vector_score_threshold=0.2, - pre_selected_nct_ids=None, - other_conditions=["smoking"], - search_mode="vector", - ) - self.assertIn("script_score", query) - script = query["script_score"]["script"] - self.assertIn("params", script) - self.assertEqual(len(script["params"]["query_vectors"]), 1) - self.assertEqual(len(script["params"]["other_condition_vectors"]), 1) - - -if __name__ == "__main__": - unittest.main() diff --git a/tests/test_search_queries_pytest.py b/tests/test_search_queries_pytest.py index 2d376826..77b0f441 100644 --- a/tests/test_search_queries_pytest.py +++ b/tests/test_search_queries_pytest.py @@ -1,56 +1,55 @@ -from Matcher.pipeline.trial_search.first_level_search import ClinicalTrialSearch +from trialmatchai.matching.retrieval.trial_retrieval import ClinicalTrialSearch +from trialmatchai.search import InMemorySearchBackend, build_criteria_record, build_trial_record -class DummyES: - def search(self, *args, **kwargs): - return {"hits": {"hits": [], "max_score": 1.0}} - - -def test_first_level_query_bm25(): +def test_first_level_query_describes_backend_search(): search = ClinicalTrialSearch( - es_client=DummyES(), + search_backend=InMemorySearchBackend(), embedder=None, - index_name="index", - bio_med_ner=None, + entity_annotator=None, ) query = search.create_query( synonyms=["lung cancer"], embeddings={}, - age=45, - sex="ALL", - overall_status="Recruiting", - max_text_score=1.0, - vector_score_threshold=0.5, - pre_selected_nct_ids=None, - other_conditions=None, - search_mode="bm25", + other_conditions=["smoking"], ) - assert "bool" in query - assert "should" in query["bool"] - assert "filter" in query["bool"] + assert query["primary_terms"] == ["lung cancer"] + assert query["other_terms"] == ["smoking"] + assert query["embeddings"] == {} + # Filters are passed to the backend directly, not via the query dict. + assert set(query) == {"primary_terms", "other_terms", "embeddings"} -def test_first_level_query_vector(): - search = ClinicalTrialSearch( - es_client=DummyES(), - embedder=None, - index_name="index", - bio_med_ner=None, + +def test_build_trial_record_flattens_search_text_and_vector(): + record = build_trial_record( + { + "nct_id": "N1", + "condition": ["Lung cancer", "NSCLC"], + "brief_title": "Targeted therapy trial", + "condition_vector": [1.0, 0.0], + "brief_title_vector": [0.0, 1.0], + } ) - embeddings = {"lung cancer": [0.1, 0.2], "smoking": [0.3, 0.4]} - query = search.create_query( - synonyms=["lung cancer"], - embeddings=embeddings, - age=60, - sex="MALE", - overall_status=None, - max_text_score=1.0, - vector_score_threshold=0.2, - pre_selected_nct_ids=None, - other_conditions=["smoking"], - search_mode="vector", + + assert "Lung cancer" in record["search_text"] + assert record["search_vector"] == [0.5, 0.5] + + +def test_build_criteria_record_flattens_entity_synonyms(): + record = build_criteria_record( + { + "criteria_id": "C1", + "criterion": "Documented malignancy", + "entities": [ + { + "text": "malignancy", + "synonyms": ["cancer", "neoplasm"], + "concept_candidates": [{"concept_name": "Malignant neoplasm"}], + } + ], + } ) - assert "script_score" in query - params = query["script_score"]["script"]["params"] - assert len(params["query_vectors"]) == 1 - assert len(params["other_condition_vectors"]) == 1 + + assert "cancer" in record["entity_synonyms_text"] + assert "Malignant neoplasm" in record["search_text"] diff --git a/tests/test_second_level_search_pytest.py b/tests/test_second_level_search_pytest.py index 6c0717b0..45894b29 100644 --- a/tests/test_second_level_search_pytest.py +++ b/tests/test_second_level_search_pytest.py @@ -1,17 +1,18 @@ -from Matcher.pipeline.trial_search.second_level_search import SecondStageRetriever - - -class DummyES: - def search(self, *args, **kwargs): - return {"hits": {"hits": []}} +from trialmatchai.constraints.models import ( + Constraint, + ConstraintSet, + PatientConstraintContext, + PatientConstraintFact, +) +from trialmatchai.matching.retrieval.criteria_retrieval import SecondStageRetriever +from trialmatchai.search import InMemorySearchBackend def test_score_criteria_without_llm_weights(): retriever = SecondStageRetriever( - es_client=DummyES(), + search_backend=InMemorySearchBackend(), llm_reranker=None, embedder=None, - index_name="idx", inclusion_weight=1.0, exclusion_weight=0.25, ) @@ -26,10 +27,9 @@ def test_score_criteria_without_llm_weights(): def test_aggregate_to_trials_weighted(): retriever = SecondStageRetriever( - es_client=DummyES(), + search_backend=InMemorySearchBackend(), llm_reranker=None, embedder=None, - index_name="idx", ) criteria = [ {"llm_score": 0.6, "_source": {"nct_id": "N1"}}, @@ -38,3 +38,160 @@ def test_aggregate_to_trials_weighted(): ] trials = retriever.aggregate_to_trials(criteria, threshold=0.5, method="weighted") assert trials[0]["nct_id"] == "N2" + + +def test_retrieve_criteria_uses_entity_synonyms(): + backend = InMemorySearchBackend( + criteria=[ + { + "criteria_id": "C1", + "nct_id": "N1", + "criterion": "Documented malignant neoplasm", + "eligibility_type": "Inclusion Criteria", + "entities": [{"text": "malignant neoplasm", "synonyms": ["cancer"]}], + }, + { + "criteria_id": "C2", + "nct_id": "N2", + "criterion": "Documented diabetes mellitus", + "eligibility_type": "Inclusion Criteria", + "entities": [], + }, + ] + ) + retriever = SecondStageRetriever( + search_backend=backend, + llm_reranker=None, + embedder=None, + entity_annotator=object(), + search_mode="bm25", + ) + + hits = retriever.retrieve_criteria(["N1"], ["cancer"]) + + assert hits["cancer"][0]["_source"]["criteria_id"] == "C1" + + +def test_constraint_adjustments_penalize_without_hard_exclusion(): + backend = InMemorySearchBackend(criteria=_constraint_test_criteria()) + retriever = SecondStageRetriever( + search_backend=backend, + llm_reranker=None, + embedder=None, + inclusion_weight=1.0, + exclusion_weight=1.0, + search_mode="bm25", + ) + + trials = retriever.retrieve_and_rank( + ["lung cancer"], + ["N1", "N2"], + top_n=2, + patient_context=_constraint_context(), + constraints_config={"enabled": True, "score_weight": 1.0}, + ) + + scores = {trial["nct_id"]: trial["score"] for trial in trials} + assert trials[0]["nct_id"] == "N1" + assert "N2" in scores + assert scores["N2"] == 0 + assert any( + evaluation.nct_id == "N2" and evaluation.violated_count == 1 + for evaluation in retriever.last_constraint_evaluations + ) + + +def test_constraints_disabled_preserves_ranking_behavior(): + backend = InMemorySearchBackend(criteria=_constraint_test_criteria()) + retriever = SecondStageRetriever( + search_backend=backend, + llm_reranker=None, + embedder=None, + inclusion_weight=1.0, + exclusion_weight=1.0, + search_mode="bm25", + ) + + disabled = retriever.retrieve_and_rank( + ["lung cancer"], + ["N1", "N2"], + top_n=2, + patient_context=_constraint_context(), + constraints_config={"enabled": False, "score_weight": 1.0}, + ) + assert retriever.last_constraint_evaluations == [] + + baseline = retriever.retrieve_and_rank(["lung cancer"], ["N1", "N2"], top_n=2) + + assert disabled == baseline + + +def _constraint_test_criteria(): + return [ + { + "criteria_id": "C1", + "nct_id": "N1", + "criterion": "Adults with lung cancer.", + "eligibility_type": "Inclusion Criteria", + "entities": [], + "constraints": _constraint_payload( + "N1", + "C1", + "inclusion", + [Constraint(kind="condition", label="lung cancer")], + ), + }, + { + "criteria_id": "C2", + "nct_id": "N2", + "criterion": "Adults with lung cancer. Prior osimertinib is excluded.", + "eligibility_type": "Exclusion Criteria", + "entities": [], + "constraints": _constraint_payload( + "N2", + "C2", + "exclusion", + [ + Constraint( + kind="medication", + label="osimertinib", + comparator="prior", + ) + ], + ), + }, + ] + + +def _constraint_payload( + nct_id: str, + criteria_id: str, + polarity: str, + constraints: list[Constraint], +): + return ConstraintSet( + nct_id=nct_id, + criteria_id=criteria_id, + polarity=polarity, + source_text="constraint fixture", + constraints=constraints, + ).model_dump(mode="json") + + +def _constraint_context() -> PatientConstraintContext: + return PatientConstraintContext( + patient_id="P1", + facts=[ + PatientConstraintFact( + kind="condition", + label="lung cancer", + evidence_text="Patient has lung cancer.", + ), + PatientConstraintFact( + kind="medication", + label="osimertinib", + temporality="prior", + evidence_text="Prior osimertinib documented.", + ), + ], + ) diff --git a/tests/test_settings.py b/tests/test_settings.py index 5559475a..a963f1a6 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -1,45 +1,87 @@ import os -import sys import unittest from pathlib import Path -ROOT = Path(__file__).resolve().parents[1] -sys.path.append(str(ROOT / "source")) - -from Matcher.config.config_loader import load_config -from Matcher.config.settings import apply_env_overrides +from trialmatchai.config.config_loader import load_config +from trialmatchai.config.settings import apply_env_overrides class TestConfigLoading(unittest.TestCase): def test_load_config_from_repo(self) -> None: - config_path = Path(__file__).resolve().parents[1] / "source/Matcher/config/config.json" + config_path = Path(__file__).resolve().parents[1] / "src/trialmatchai/config/config.json" config = load_config(str(config_path)) - self.assertIn("elasticsearch", config) + self.assertIn("search_backend", config) self.assertIn("embedder", config) self.assertIn("paths", config) def test_env_overrides(self) -> None: raw = { - "elasticsearch": { - "host": "http://localhost:9200", - "username": "user", - "password": "pass", + "search_backend": { + "backend": "lancedb", + "db_path": "old-search", + "trials_table": "old-trials", + "criteria_table": "old-criteria", }, "embedder": {"model_name": "old"}, + "entity_extraction": {"backend": "gliner2"}, + "concept_linker": {"db_path": "old"}, + "patient_inputs": {"profile_dir": "old-profiles"}, + "registry": {"since_days": 7, "raw_dir": "old-raw"}, + "constraints": {"enabled": True, "score_weight": 0.25}, + "search": {"mode": "hybrid", "first_level": {"max_trials": 1000}}, } - os.environ["TRIALMATCHAI_ES_HOST"] = "http://override:9200" + os.environ["TRIALMATCHAI_SEARCH_DB_PATH"] = "data/search-test" + os.environ["TRIALMATCHAI_SEARCH_TRIALS_TABLE"] = "trials-test" + os.environ["TRIALMATCHAI_SEARCH_MODE"] = "bm25" os.environ["TRIALMATCHAI_EMBEDDER_MODEL_NAME"] = "new-model" - os.environ["TRIALMATCHAI_ES_AUTO_START"] = "true" + os.environ["TRIALMATCHAI_ENTITY_BACKEND"] = "regex" + os.environ["TRIALMATCHAI_CONCEPT_DB_PATH"] = "concepts" + os.environ["TRIALMATCHAI_PATIENT_PROFILE_DIR"] = "patients/profiles" + os.environ["TRIALMATCHAI_PATIENT_STRICT_VALIDATION"] = "true" + os.environ["TRIALMATCHAI_REGISTRY_SINCE_DAYS"] = "30" + os.environ["TRIALMATCHAI_REGISTRY_RAW_DIR"] = "registry/raw" + os.environ["TRIALMATCHAI_CONSTRAINTS_ENABLED"] = "false" + os.environ["TRIALMATCHAI_CONSTRAINTS_SCORE_WEIGHT"] = "0.4" + os.environ["TRIALMATCHAI_FIRST_LEVEL_ENABLED"] = "false" + os.environ["TRIALMATCHAI_FIRST_LEVEL_MAX_TRIALS"] = "700" + os.environ["TRIALMATCHAI_FIRST_LEVEL_PER_CHANNEL_SIZE"] = "250" + os.environ["TRIALMATCHAI_FIRST_LEVEL_VECTOR_SCORE_THRESHOLD"] = "0.1" try: updated = apply_env_overrides(raw) finally: - os.environ.pop("TRIALMATCHAI_ES_HOST", None) + os.environ.pop("TRIALMATCHAI_SEARCH_DB_PATH", None) + os.environ.pop("TRIALMATCHAI_SEARCH_TRIALS_TABLE", None) + os.environ.pop("TRIALMATCHAI_SEARCH_MODE", None) os.environ.pop("TRIALMATCHAI_EMBEDDER_MODEL_NAME", None) - os.environ.pop("TRIALMATCHAI_ES_AUTO_START", None) + os.environ.pop("TRIALMATCHAI_ENTITY_BACKEND", None) + os.environ.pop("TRIALMATCHAI_CONCEPT_DB_PATH", None) + os.environ.pop("TRIALMATCHAI_PATIENT_PROFILE_DIR", None) + os.environ.pop("TRIALMATCHAI_PATIENT_STRICT_VALIDATION", None) + os.environ.pop("TRIALMATCHAI_REGISTRY_SINCE_DAYS", None) + os.environ.pop("TRIALMATCHAI_REGISTRY_RAW_DIR", None) + os.environ.pop("TRIALMATCHAI_CONSTRAINTS_ENABLED", None) + os.environ.pop("TRIALMATCHAI_CONSTRAINTS_SCORE_WEIGHT", None) + os.environ.pop("TRIALMATCHAI_FIRST_LEVEL_ENABLED", None) + os.environ.pop("TRIALMATCHAI_FIRST_LEVEL_MAX_TRIALS", None) + os.environ.pop("TRIALMATCHAI_FIRST_LEVEL_PER_CHANNEL_SIZE", None) + os.environ.pop("TRIALMATCHAI_FIRST_LEVEL_VECTOR_SCORE_THRESHOLD", None) - self.assertEqual(updated["elasticsearch"]["host"], "http://override:9200") + self.assertEqual(updated["search_backend"]["db_path"], "data/search-test") + self.assertEqual(updated["search_backend"]["trials_table"], "trials-test") + self.assertEqual(updated["search"]["mode"], "bm25") self.assertEqual(updated["embedder"]["model_name"], "new-model") - self.assertTrue(updated["elasticsearch"]["auto_start"]) + self.assertEqual(updated["entity_extraction"]["backend"], "regex") + self.assertEqual(updated["concept_linker"]["db_path"], "concepts") + self.assertEqual(updated["patient_inputs"]["profile_dir"], "patients/profiles") + self.assertTrue(updated["patient_inputs"]["strict_validation"]) + self.assertEqual(updated["registry"]["since_days"], 30) + self.assertEqual(updated["registry"]["raw_dir"], "registry/raw") + self.assertFalse(updated["constraints"]["enabled"]) + self.assertEqual(updated["constraints"]["score_weight"], 0.4) + self.assertFalse(updated["search"]["first_level"]["enabled"]) + self.assertEqual(updated["search"]["first_level"]["max_trials"], 700) + self.assertEqual(updated["search"]["first_level"]["per_channel_size"], 250) + self.assertEqual(updated["search"]["first_level"]["vector_score_threshold"], 0.1) if __name__ == "__main__": diff --git a/tests/test_trec_reproduction.py b/tests/test_trec_reproduction.py new file mode 100644 index 00000000..b79b81cb --- /dev/null +++ b/tests/test_trec_reproduction.py @@ -0,0 +1,46 @@ +"""Regression guard for the TREC reproduction. + +Locks the reproduction-critical behavior — the tie-aware nDCG algorithm, the +corpus restriction, and the relevance thresholds — so the pipeline unification +(folding `trec` into a preset over the one e2e pipeline) cannot silently change a +benchmark number. If any of these change, that is a deliberate decision, not an +accident. +""" + +import math + +from trialmatchai.trec.metrics import ndcg_at_k +from trialmatchai.trec.qrels import corpus_ncts, relevant_ncts + + +def test_tie_aware_ndcg_matches_mcsherry_najork_closed_form(): + # Three docs tied at one score: each gets the MEAN discount over the ranks the + # tie group occupies (McSherry-Najork). Recompute the reference independently. + def d(r): + return 1.0 / math.log2(r + 1) + + mean_disc = (d(1) + d(2) + d(3)) / 3 + dcg = (2 + 1 + 0) * mean_disc + idcg = 2 * d(1) + 1 * d(2) + 0 * d(3) + expected = dcg / idcg + + got = ndcg_at_k( + ["a", "b", "c"], {"a": 1.0, "b": 1.0, "c": 1.0}, {"a": 2, "b": 1, "c": 0}, 10 + ) + assert abs(got - expected) < 1e-9 + assert round(got, 4) == 0.8100 # pinned: flags any drift in the averaging + + +def test_corpus_ncts_is_union_of_judged_trials(): + # The per-run index is restricted to this set (the qrels-judged pool). + qrels = { + "trec-1": {"NCT1": 2, "NCT2": 0}, + "trec-2": {"NCT2": 1, "NCT3": 2}, + } + assert corpus_ncts(qrels) == {"NCT1", "NCT2", "NCT3"} + + +def test_relevant_ncts_threshold(): + qrels = {"q": {"NCT1": 2, "NCT2": 1, "NCT3": 0}} + assert relevant_ncts(qrels, threshold=1) == {"q": {"NCT1", "NCT2"}} # relevant + assert relevant_ncts(qrels, threshold=2) == {"q": {"NCT1"}} # eligible-only diff --git a/tests/test_trial_ranker_pytest.py b/tests/test_trial_ranker_pytest.py index 5bc32d0e..45e279d5 100644 --- a/tests/test_trial_ranker_pytest.py +++ b/tests/test_trial_ranker_pytest.py @@ -1,6 +1,6 @@ import json -from Matcher.pipeline.trial_ranker import ( +from trialmatchai.matching.trial_ranker import ( load_trial_data, rank_trials, save_ranked_trials, @@ -9,19 +9,18 @@ def test_score_trial_basic(): + # A violated exclusion hard-disqualifies the trial regardless of inclusions. trial = { "Inclusion_Criteria_Evaluation": [ {"Classification": "Met"}, {"Classification": "Met"}, - {"Classification": "Violated"}, ], "Exclusion_Criteria_Evaluation": [ {"Classification": "Not Violated"}, {"Classification": "Violated"}, ], } - score = score_trial(trial) - assert score == ((2 - 1) / 3 + (1 - 1) / 2) / 2 + assert score_trial(trial) == -1.0 def test_rank_trials_orders_by_score(): @@ -40,12 +39,12 @@ def test_rank_trials_orders_by_score(): def test_load_and_save_ranked_trials(tmp_path): trial_folder = tmp_path / "trials" trial_folder.mkdir() - (trial_folder / "T1.json").write_text( + (trial_folder / "NCT0001.json").write_text( json.dumps( {"Inclusion_Criteria_Evaluation": [], "Exclusion_Criteria_Evaluation": []} ) ) - (trial_folder / "T2.json").write_text( + (trial_folder / "NCT0002.json").write_text( json.dumps( { "Inclusion_Criteria_Evaluation": [{"Classification": "Met"}], @@ -53,12 +52,17 @@ def test_load_and_save_ranked_trials(tmp_path): } ) ) + # Run sidecars in the same folder must NOT be loaded as trials. + (trial_folder / "keywords.json").write_text(json.dumps({"keywords": ["x"]})) + (trial_folder / "patient_profile.json").write_text(json.dumps({"id": "p1"})) trials = load_trial_data(str(trial_folder)) + assert {t["TrialID"] for t in trials} == {"NCT0001", "NCT0002"} + ranked = rank_trials(trials) out_file = tmp_path / "ranked.json" save_ranked_trials(ranked, str(out_file)) saved = json.loads(out_file.read_text()) assert "RankedTrials" in saved - assert saved["RankedTrials"][0]["TrialID"] == "T2" + assert saved["RankedTrials"][0]["TrialID"] == "NCT0002" diff --git a/tests/test_trial_ranker_scoring_contract.py b/tests/test_trial_ranker_scoring_contract.py new file mode 100644 index 00000000..ab25c7ed --- /dev/null +++ b/tests/test_trial_ranker_scoring_contract.py @@ -0,0 +1,84 @@ +"""Contract tests for trial_ranker.score_trial (audit finding C1, PR1). + +A Violated exclusion hard-disqualifies a trial: it must rank strictly below every +trial that violates no exclusion. Eligible trials are scored in [0, 1] by the +fraction of decided inclusion criteria (Met or Not Met) that are Met. +See REFACTOR_PLAN.md (PR1). +""" + +from trialmatchai.matching.trial_ranker import ( + DISQUALIFIED_SCORE, + rank_trials, + score_trial, +) + +# Ineligible: every inclusion is Met, but an exclusion criterion is Violated. +TRIAL_VIOLATED_EXCLUSION = { + "TrialID": "VIOLATED", + "Inclusion_Criteria_Evaluation": [ + {"Classification": "Met"}, + {"Classification": "Met"}, + ], + "Exclusion_Criteria_Evaluation": [ + {"Classification": "Not Violated"}, + {"Classification": "Violated"}, + ], +} + +# Eligible partial match: half the decided inclusions are Met, no violations. +TRIAL_PARTIAL_ELIGIBLE = { + "TrialID": "PARTIAL", + "Inclusion_Criteria_Evaluation": [ + {"Classification": "Met"}, + {"Classification": "Not Met"}, + ], + "Exclusion_Criteria_Evaluation": [], +} + +# Eligible but a poor match: all inclusions Not Met, still violates nothing. +TRIAL_ALL_NOT_MET = { + "TrialID": "NOT_MET", + "Inclusion_Criteria_Evaluation": [ + {"Classification": "Not Met"}, + {"Classification": "Not Met"}, + ], + "Exclusion_Criteria_Evaluation": [{"Classification": "Not Violated"}], +} + + +def test_violated_exclusion_is_disqualified(): + assert score_trial(TRIAL_VIOLATED_EXCLUSION) == DISQUALIFIED_SCORE + + +def test_eligible_scored_by_met_fraction(): + assert score_trial(TRIAL_PARTIAL_ELIGIBLE) == 0.5 + assert score_trial(TRIAL_ALL_NOT_MET) == 0.0 + assert score_trial( + {"Inclusion_Criteria_Evaluation": [{"Classification": "Met"}]} + ) == 1.0 + + +def test_unclear_and_irrelevant_inclusions_are_ignored(): + # Only Met/Not Met count toward the fraction; Unclear/Irrelevant are excluded. + trial = { + "Inclusion_Criteria_Evaluation": [ + {"Classification": "Met"}, + {"Classification": "Unclear"}, + {"Classification": "Irrelevant"}, + ], + "Exclusion_Criteria_Evaluation": [], + } + assert score_trial(trial) == 1.0 + + +def test_violated_exclusion_ranks_below_eligible(): + ranked = rank_trials([TRIAL_VIOLATED_EXCLUSION, TRIAL_PARTIAL_ELIGIBLE]) + assert ranked[0]["TrialID"] == "PARTIAL" + assert ranked[-1]["TrialID"] == "VIOLATED" + + +def test_disqualified_ranks_below_even_a_zero_score_eligible_trial(): + # An all-Not-Met eligible trial (0.0) still outranks a disqualified one (-1.0). + ranked = rank_trials([TRIAL_VIOLATED_EXCLUSION, TRIAL_ALL_NOT_MET]) + assert ranked[0]["TrialID"] == "NOT_MET" + assert ranked[-1]["TrialID"] == "VIOLATED" diff --git a/tests/test_trial_ranker_tiebreak.py b/tests/test_trial_ranker_tiebreak.py new file mode 100644 index 00000000..e12a75d2 --- /dev/null +++ b/tests/test_trial_ranker_tiebreak.py @@ -0,0 +1,47 @@ +"""Deterministic tie-break in rank_trials + shortlist scoping in load_trial_data.""" + +import json + +from trialmatchai.matching.trial_ranker import load_trial_data, rank_trials + + +def _eligible(): + # Identical eligibility -> identical Score, so the tie-break decides order. + return { + "Inclusion_Criteria_Evaluation": [{"Classification": "Met"}], + "Exclusion_Criteria_Evaluation": [], + } + + +def test_tiebreak_reranker_then_firstlevel_then_nctid(): + trials = [{"TrialID": f"NCT-{c}", **_eligible()} for c in "ABCDE"] + reranker = {"NCT-A": 0.9, "NCT-B": 0.9, "NCT-C": 0.5, "NCT-D": 0.5, "NCT-E": 0.5} + first = {"NCT-A": 0.1, "NCT-B": 0.5, "NCT-C": 0.9, "NCT-D": 0.5, "NCT-E": 0.5} + ranked = rank_trials( + trials, first_level_scores=first, second_level_scores=reranker + ) + order = [r["TrialID"] for r in ranked] + # equal Score: reranker 0.9 first (B>A by first-level), then 0.5 (C by first-level), + # then the full D/E tie resolves by ascending NCT id. + assert order == ["NCT-B", "NCT-A", "NCT-C", "NCT-D", "NCT-E"] + + +def test_tiebreak_is_deterministic_regardless_of_input_order(): + a = [{"TrialID": f"NCT-{c}", **_eligible()} for c in "ABC"] + reranker = {"NCT-A": 0.5, "NCT-B": 0.9, "NCT-C": 0.5} + out1 = [r["TrialID"] for r in rank_trials(a, second_level_scores=reranker)] + out2 = [r["TrialID"] for r in rank_trials(list(reversed(a)), second_level_scores=reranker)] + assert out1 == out2 == ["NCT-B", "NCT-A", "NCT-C"] + + +def test_load_trial_data_scopes_to_allowed_ids(tmp_path): + for nct in ["NCT1", "NCT2", "NCT3"]: + (tmp_path / f"{nct}.json").write_text( + json.dumps({"Inclusion_Criteria_Evaluation": []}) + ) + (tmp_path / "keywords.json").write_text("{}") # sidecar must be ignored + loaded = { + t["TrialID"] + for t in load_trial_data(str(tmp_path), allowed_ids={"NCT1", "NCT3"}) + } + assert loaded == {"NCT1", "NCT3"} # NCT2 (stale, off-shortlist) excluded diff --git a/tests/test_variant_recognizer.py b/tests/test_variant_recognizer.py new file mode 100644 index 00000000..72abc5d3 --- /dev/null +++ b/tests/test_variant_recognizer.py @@ -0,0 +1,51 @@ +"""Tests for the deterministic genetic-variant recognizer and compositing.""" + +from __future__ import annotations + +from trialmatchai.entities.recognizers import ( + CompositeRecognizer, + RegexSchemaRecognizer, + RegexVariantRecognizer, + _load_variant_patterns, +) +from trialmatchai.entities.schemas import load_entity_schemas + + +def test_variant_patterns_load(): + patterns = _load_variant_patterns() + assert len(patterns) > 10 # the curated table has dozens of patterns + assert all(hasattr(p, "finditer") for _, p in patterns) + + +def test_recognizes_hgvs_protein_and_dna_variants(): + recognizer = RegexVariantRecognizer() + text = "BRAF p.V600E and the c.1799T>A variant were detected." + spans = {ann.text for ann in recognizer.recognize([text], [])[0]} + assert any("V600E" in s for s in spans) + assert any("1799T>A" in s for s in spans) + + +def test_recognizes_gene_fusion(): + recognizer = RegexVariantRecognizer() + spans = {ann.text.lower() for ann in recognizer.recognize(["EGFR gene fusion"], [])[0]} + assert any("fusion" in s for s in spans) + + +def test_composite_merges_model_and_variant_spans(): + schemas = [s for s in load_entity_schemas() if s.id == "disease"] + composite = CompositeRecognizer( + RegexSchemaRecognizer(), RegexVariantRecognizer() + ) + text = "Patient with cancer harboring BRAF p.V600E" + annotations = composite.recognize([text], schemas)[0] + groups = {ann.entity_group for ann in annotations} + # Both the schema-recognized disease and the variant span are present. + assert "disease" in groups + assert any(ann.text.endswith("V600E") or "V600E" in ann.text for ann in annotations) + + +def test_no_zero_width_matches(): + recognizer = RegexVariantRecognizer() + for ann in recognizer.recognize(["plain text without variants"], [])[0]: + assert ann.end > ann.start + assert ann.text.strip() diff --git a/utils/DataLoader/__init__.py b/utils/DataLoader/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/utils/DataLoader/downloader.py b/utils/DataLoader/downloader.py deleted file mode 100644 index 79d0c55e..00000000 --- a/utils/DataLoader/downloader.py +++ /dev/null @@ -1,254 +0,0 @@ -import requests -import sys -import xml.etree.ElementTree as ET -import os -import time -import joblib -from tqdm.auto import tqdm -from tenacity import retry, wait_random_exponential, stop_after_attempt -import logging -from typing import List, Union - -# Configure logging for clear and timestamped output -logging.basicConfig( - level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s" -) - - -def normalize_whitespace(s: str) -> str: - """Normalize whitespace in a string.""" - return " ".join(s.split()) - - -@retry(wait=wait_random_exponential(min=1, max=20), stop=stop_after_attempt(10)) -def get_cancer_trials_list(max_trials: int = 15000) -> List[str]: - """ - Retrieve a list of cancer-related clinical trial NCT IDs from ClinicalTrials.gov. - - Args: - max_trials (int): Maximum number of trial IDs to fetch. - - Returns: - List[str]: List of unique NCT IDs. - """ - base_url = "https://clinicaltrials.gov/api/query/full_studies" - trials_set = set() - page_size = 100 # Number of trials per page - current_rank = 1 - trials_fetched = 0 - - while trials_fetched < max_trials: - search_params = { - "expr": "((cancer) OR (neoplasm)) AND ((interventional) OR (treatment)) AND ((mutation) OR (variant))", - "min_rnk": current_rank, - "max_rnk": current_rank + page_size - 1, - "fmt": "json", - "fields": "NCTId", - } - response = requests.get(base_url, params=search_params) - if response.status_code == 200: - trials_data = response.json() - if "FullStudiesResponse" in trials_data: - studies = trials_data["FullStudiesResponse"].get("FullStudies", []) - if not studies: - break # No more studies found, exit the loop - for study in studies: - nct_id = ( - study.get("Study", {}) - .get("ProtocolSection", {}) - .get("IdentificationModule", {}) - .get("NCTId") - ) - if nct_id: - trials_set.add(nct_id) - trials_fetched += 1 - if trials_fetched >= max_trials: - break - current_rank += page_size - else: - logging.error("No trials found matching the criteria.") - break - else: - logging.error( - "Failed to retrieve data. Status code: %s", response.status_code - ) - break - - return list(trials_set) - - -def download_study_info( - nct_id: str, delay: float = 1.0, session: Union[requests.Session, None] = None -) -> bool: - """ - Download and update the XML information for a given clinical trial (NCT ID). - - If a local copy exists, compare selected fields with the online version. - If differences are found (or the file doesn't exist), update or create the local file. - - Args: - nct_id (str): The clinical trial NCT ID. - delay (float): Delay between requests in seconds. - session (requests.Session, optional): Requests session for connection pooling. - - Returns: - bool: True if the file was downloaded or updated successfully; False otherwise. - """ - local_file_path = os.path.join("..", "..", "data", "trials_xmls", f"{nct_id}.xml") - os.makedirs(os.path.dirname(local_file_path), exist_ok=True) - - session = session or requests.Session() - online_url = f"https://clinicaltrials.gov/ct2/show/{nct_id}?displayxml=true" - - try: - response = session.get(online_url) - except requests.exceptions.RequestException as e: - logging.error("Error fetching XML for trial %s: %s", nct_id, e) - time.sleep(delay) - return False - - if response.status_code != 200: - logging.error( - "Error: received status code %s for trial %s", response.status_code, nct_id - ) - time.sleep(delay) - return False - - try: - online_root = ET.fromstring(response.text) - except ET.ParseError as e: - logging.error("Error parsing online XML for trial %s: %s", nct_id, e) - time.sleep(delay) - return False - - # Check if a local version exists and compare key fields - if os.path.exists(local_file_path): - try: - with open(local_file_path, "r", encoding="utf-8") as f: - local_xml_content = f.read() - local_root = ET.fromstring(local_xml_content) - except (ET.ParseError, IOError) as e: - logging.error("Error reading/parsing local XML for trial %s: %s", nct_id, e) - os.remove(local_file_path) - local_root = None - else: - local_root = None - - fields_to_check = ["eligibility", "brief_title", "overall_status", "location"] - needs_update = False - - if local_root is not None: - for field in fields_to_check: - local_elem = local_root.find(f".//{field}") - online_elem = online_root.find(f".//{field}") - if local_elem is not None and online_elem is not None: - local_text = normalize_whitespace( - ET.tostring(local_elem, encoding="unicode").strip() - ) - online_text = normalize_whitespace( - ET.tostring(online_elem, encoding="unicode").strip() - ) - if local_text != online_text: - needs_update = True - break - else: - needs_update = True - break - - if local_root is None or needs_update: - try: - with open(local_file_path, "w", encoding="utf-8") as f: - f.write(ET.tostring(online_root, encoding="unicode")) - if local_root is None: - logging.info("Downloaded study information for %s", nct_id) - else: - logging.info("Updated study information for %s", nct_id) - except IOError as e: - logging.error("Error writing XML for trial %s: %s", nct_id, e) - time.sleep(delay) - return False - else: - logging.info("No changes in study information for %s", nct_id) - - time.sleep(delay) - return True - - -def parallel_downloader( - nct_ids: List[str], n_jobs: int = 10, delay: float = 1.0 -) -> List[bool]: - """ - Download and update clinical trial XMLs in parallel using joblib. - - Args: - nct_ids (List[str]): List of clinical trial NCT IDs. - n_jobs (int): Number of parallel jobs. - delay (float): Delay between requests. - - Returns: - List[bool]: List indicating the success status of each download/update. - """ - session = requests.Session() - - def download_wrapper(nct_id: str) -> bool: - return download_study_info(nct_id, delay=delay, session=session) - - results = joblib.Parallel(n_jobs=n_jobs)( - joblib.delayed(download_wrapper)(nct_id) - for nct_id in tqdm(nct_ids, desc="Downloading trials") - ) - return results - - -class Downloader: - """ - A class to manage the downloading and updating of clinical trial XML files. - - Attributes: - id_list (List[str]): List of clinical trial NCT IDs. - n_jobs (int): Number of parallel jobs. - delay (float): Delay between requests. - """ - - def __init__(self, id_list: List[str], n_jobs: int = 10, delay: float = 1.0): - self.id_list = id_list - self.n_jobs = n_jobs - self.delay = delay - - def download_and_update_trials(self) -> List[bool]: - """ - Download and update XML files for all trials in the id_list. - - Returns: - List[bool]: List of boolean statuses for each download/update. - """ - start_time = time.time() - results = parallel_downloader( - self.id_list, n_jobs=self.n_jobs, delay=self.delay - ) - elapsed_time = time.time() - start_time - logging.info("Elapsed time: %.2f seconds", elapsed_time) - return results - - -def main(): - """Main function to run the downloader.""" - id_file = "nct_ids.txt" - if not os.path.exists(id_file): - logging.error("ID file '%s' does not exist.", id_file) - sys.exit(1) - - with open(id_file, "r", encoding="utf-8") as file: - id_list = [line.strip() for line in file if line.strip()] - - if not id_list: - logging.error("No NCT IDs found in the file.") - sys.exit(1) - - n_jobs = 10 - downloader = Downloader(id_list, n_jobs=n_jobs, delay=1.0) - downloader.download_and_update_trials() - - -if __name__ == "__main__": - main() diff --git a/utils/DataLoader/nct_ids.txt b/utils/DataLoader/nct_ids.txt deleted file mode 100644 index 986b18a5..00000000 --- a/utils/DataLoader/nct_ids.txt +++ /dev/null @@ -1 +0,0 @@ -NCT04127110 \ No newline at end of file diff --git a/utils/DataLoader/test/__init__.py b/utils/DataLoader/test/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/utils/DataLoader/test/test_downloader.py b/utils/DataLoader/test/test_downloader.py deleted file mode 100644 index c7a849cb..00000000 --- a/utils/DataLoader/test/test_downloader.py +++ /dev/null @@ -1,179 +0,0 @@ -import unittest -from unittest.mock import patch, mock_open, MagicMock -import os - -from src.DataLoader.downloader import ( - normalize_whitespace, - get_cancer_trials_list, - download_study_info, - parallel_downloader, - Downloader, -) - - -class TestDownloaderFunctions(unittest.TestCase): - def test_normalize_whitespace(self): - input_str = " This is a test string \n with extra spaces. " - expected = "This is a test string with extra spaces." - self.assertEqual(normalize_whitespace(input_str), expected) - - @patch("src.DataLoader.downloader.requests.get") - def test_get_cancer_trials_list(self, mock_get): - # Set up a fake study entry - fake_study = { - "Study": { - "ProtocolSection": {"IdentificationModule": {"NCTId": "NCT12345678"}} - } - } - fake_json_response = {"FullStudiesResponse": {"FullStudies": [fake_study]}} - # Create a fake response object for the first call - fake_response = MagicMock() - fake_response.status_code = 200 - fake_response.json.return_value = fake_json_response - - # Second call returns an empty list to stop the loop. - fake_response_empty = MagicMock() - fake_response_empty.status_code = 200 - fake_response_empty.json.return_value = { - "FullStudiesResponse": {"FullStudies": []} - } - - mock_get.side_effect = [fake_response, fake_response_empty] - - result = get_cancer_trials_list(max_trials=1) - self.assertIn("NCT12345678", result) - - @patch("src.DataLoader.downloader.time.sleep", return_value=None) # avoid delay - @patch("src.DataLoader.downloader.requests.Session") - @patch("src.DataLoader.downloader.os.path.exists") - @patch("src.DataLoader.downloader.os.makedirs") - @patch("src.DataLoader.downloader.open", new_callable=mock_open, read_data="") - def test_download_study_info_no_local_file( - self, mock_file, mock_makedirs, mock_exists, mock_session_cls, mock_sleep - ): - # Simulate that the local file does not exist - mock_exists.return_value = False - - # Prepare a fake online XML - online_xml = """ - Test Trial - Test Eligibility - Recruiting - Test Location -""" - fake_response = MagicMock() - fake_response.status_code = 200 - fake_response.text = online_xml - - # Create a fake session instance - fake_session = MagicMock() - fake_session.get.return_value = fake_response - mock_session_cls.return_value = fake_session - - result = download_study_info("NCTTEST1", delay=0, session=fake_session) - self.assertTrue(result) - # Check that the file was opened for writing. - expected_path = os.path.join("..", "..", "data", "trials_xmls", "NCTTEST1.xml") - mock_file.assert_called_with(expected_path, "w", encoding="utf-8") - - @patch("src.DataLoader.downloader.time.sleep", return_value=None) - @patch("src.DataLoader.downloader.requests.Session") - @patch("src.DataLoader.downloader.os.path.exists") - @patch("src.DataLoader.downloader.os.makedirs") - def test_download_study_info_with_local_file_update_needed( - self, mock_makedirs, mock_exists, mock_session_cls, mock_sleep - ): - # Simulate that the local file exists. - mock_exists.return_value = True - - # Fake local XML (with an old title) and online XML (with an updated title) - local_xml = """ - Old Title - Test Eligibility - Recruiting - Test Location -""" - online_xml = """ - New Title - Test Eligibility - Recruiting - Test Location -""" - - fake_response = MagicMock() - fake_response.status_code = 200 - fake_response.text = online_xml - - fake_session = MagicMock() - fake_session.get.return_value = fake_response - mock_session_cls.return_value = fake_session - - # Patch open to simulate reading the local XML and then writing an updated version. - m = mock_open(read_data=local_xml) - with patch("src.DataLoader.downloader.open", m): - result = download_study_info("NCTTEST2", delay=0, session=fake_session) - self.assertTrue(result) - expected_path = os.path.join( - "..", "..", "data", "trials_xmls", "NCTTEST2.xml" - ) - # Check that open was called with write mode to update the file. - m.assert_called_with(expected_path, "w", encoding="utf-8") - - @patch("src.DataLoader.downloader.time.sleep", return_value=None) - @patch("src.DataLoader.downloader.requests.Session") - @patch("src.DataLoader.downloader.os.path.exists") - @patch("src.DataLoader.downloader.os.makedirs") - def test_download_study_info_with_local_file_no_update( - self, mock_makedirs, mock_exists, mock_session_cls, mock_sleep - ): - # Simulate that the local file exists. - mock_exists.return_value = True - - # Fake XML where both local and online versions are identical. - identical_xml = """ - Test Trial - Test Eligibility - Recruiting - Test Location -""" - - fake_response = MagicMock() - fake_response.status_code = 200 - fake_response.text = identical_xml - - fake_session = MagicMock() - fake_session.get.return_value = fake_response - mock_session_cls.return_value = fake_session - - m = mock_open(read_data=identical_xml) - with patch("src.DataLoader.downloader.open", m): - result = download_study_info("NCTTEST3", delay=0, session=fake_session) - self.assertTrue(result) - expected_path = os.path.join( - "..", "..", "data", "trials_xmls", "NCTTEST3.xml" - ) - # Check that open was called only for reading (the file was not updated). - m.assert_called_with(expected_path, "r", encoding="utf-8") - - @patch("src.DataLoader.downloader.download_study_info", return_value=True) - @patch( - "src.DataLoader.downloader.tqdm", lambda x, **kwargs: x - ) # bypass tqdm for testing - def test_parallel_downloader(self, mock_download): - trial_ids = ["NCT1", "NCT2", "NCT3"] - # Use n_jobs=1 to avoid issues with multiprocessing and patching. - results = parallel_downloader(trial_ids, n_jobs=1, delay=0) - self.assertEqual(results, [True, True, True]) - self.assertEqual(mock_download.call_count, 3) - - @patch("src.DataLoader.downloader.parallel_downloader", return_value=[True, True]) - def test_downloader_class(self, mock_parallel): - trial_ids = ["NCT1", "NCT2"] - downloader_obj = Downloader(trial_ids, n_jobs=2, delay=0) - results = downloader_obj.download_and_update_trials() - self.assertEqual(results, [True, True]) - mock_parallel.assert_called_with(trial_ids, n_jobs=2, delay=0) - - -if __name__ == "__main__": - unittest.main() diff --git a/utils/Indexer/__init__.py b/utils/Indexer/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/utils/Indexer/config.json b/utils/Indexer/config.json deleted file mode 100644 index 18d62cf7..00000000 --- a/utils/Indexer/config.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "elasticsearch": { - "hosts": ["https://localhost:9200"], - "ca_certs": "../../elasticsearch/certs/ca.crt", - "username": "elastic", - "password": "QQ7wWoB_WnKe*L*X9tAW", - "request_timeout": 300, - "retry_on_timeout": true, - "max_retries": 3 - } - } \ No newline at end of file diff --git a/utils/Indexer/flatten.py b/utils/Indexer/flatten.py deleted file mode 100644 index 4c68d55e..00000000 --- a/utils/Indexer/flatten.py +++ /dev/null @@ -1,41 +0,0 @@ -import os -import shutil - - -def flatten_folder_structure( - root_dir, output_dir, separator="_", handle_duplicates=True -): - os.makedirs(output_dir, exist_ok=True) - filename_set = set() - - for subdir, dirs, files in os.walk(root_dir): - # Skip the root directory itself - if subdir == root_dir: - continue - - parent_folder = os.path.basename(subdir) - - for file in files: - old_path = os.path.join(subdir, file) - new_filename = f"{parent_folder}{separator}{file}" - new_path = os.path.join(output_dir, new_filename) - - if handle_duplicates: - base, ext = os.path.splitext(new_filename) - counter = 1 - while new_path in filename_set or os.path.exists(new_path): - new_filename = f"{base}_{counter}{ext}" - new_path = os.path.join(output_dir, new_filename) - counter += 1 - - filename_set.add(new_path) - shutil.copy2(old_path, new_path) - print(f"Copied: {old_path} → {new_path}") - - -# Example usage: -root_directory = "/home/mabdallah/scratch/TrialMatchAI/src/Indexer/processed_criteria" -output_directory = ( - "/home/mabdallah/scratch/TrialMatchAI/src/Indexer/processed_criteria_flattened" -) -flatten_folder_structure(root_directory, output_directory) diff --git a/utils/Indexer/index_criteria.py b/utils/Indexer/index_criteria.py deleted file mode 100644 index cc2f8208..00000000 --- a/utils/Indexer/index_criteria.py +++ /dev/null @@ -1,253 +0,0 @@ -#!/usr/bin/env python3 -import argparse -import json -import logging -from concurrent.futures import ThreadPoolExecutor, as_completed -from pathlib import Path - -from elasticsearch import Elasticsearch, NotFoundError -from elasticsearch.helpers import bulk - -logging.basicConfig( - format="%(asctime)s %(levelname)s %(name)s - %(message)s", - level=logging.INFO, -) -logger = logging.getLogger(__name__) - - -class CriteriaIndexer: - def __init__(self, es: Elasticsearch, index_name: str, processed_file: Path): - self.es = es - self.index_name = index_name - self.processed_file = processed_file - self.processed_file.parent.mkdir(parents=True, exist_ok=True) - self.processed_ids = self._load_processed_ids() - - def _load_processed_ids(self) -> set[str]: - if self.processed_file.exists(): - return set(self.processed_file.read_text().splitlines()) - return set() - - def _save_processed_ids(self): - self.processed_file.write_text("\n".join(sorted(self.processed_ids)) + "\n") - - def _trial_indexed(self, nct_id: str) -> bool: - try: - res = self.es.count( - index=self.index_name, body={"query": {"term": {"nct_id": nct_id}}} - ) - return res.get("count", 0) > 0 - except NotFoundError: - return False - - def _detect_dim(self, processed_folder: Path) -> int: - # find first JSON under any trial subfolder - for trial_dir in processed_folder.iterdir(): - if not trial_dir.is_dir(): - continue - for f in trial_dir.glob("*.json"): - doc = json.loads(f.read_text()) - vec = doc.get("criterion_vector", []) - if isinstance(vec, list): - return len(vec) - raise RuntimeError("No criterion_vector found in any processed JSON.") - - def create_index(self, dims: int): - mapping = { - "settings": { - "analysis": { - "analyzer": { - "standard_lowercase": { - "type": "custom", - "tokenizer": "standard", - "filter": ["lowercase"], - } - } - } - }, - "mappings": { - "properties": { - "criteria_id": {"type": "keyword"}, - "criterion": {"type": "text", "analyzer": "standard_lowercase"}, - "criterion_vector": { - "type": "dense_vector", - "dims": dims, - "index": True, - "similarity": "cosine", - "index_options": { - "type": "hnsw", - "m": 16, - "ef_construction": 100, - }, - }, - "entities": { - "type": "nested", - "properties": { - "normalized_id": {"type": "keyword"}, - "synonyms": { - "type": "text", - "analyzer": "standard_lowercase", - }, - "entity": { - "type": "text", - "analyzer": "standard_lowercase", - }, - "class": {"type": "keyword"}, - }, - }, - "nct_id": {"type": "keyword"}, - "eligibility_type": {"type": "keyword"}, - } - }, - } - self.es.indices.create( - index=self.index_name, body=mapping, timeout="60s", master_timeout="60s" - ) - logger.info(f"Created index {self.index_name} with dims={dims}") - - def _index_trial(self, trial_dir: Path, batch_size: int) -> tuple[str, int]: - nct_id = trial_dir.name - - # skip if already done or in ES - if nct_id in self.processed_ids or self._trial_indexed(nct_id): - logger.info(f"Skipping {nct_id}: already indexed") - return nct_id, 0 - - # load docs - docs = [] - for f in trial_dir.glob("*.json"): - try: - docs.append(json.loads(f.read_text())) - except Exception as e: - logger.warning(f"{nct_id}: failed to load {f.name}: {e}") - - if not docs: - logger.info(f"No JSONs for {nct_id}; marking done") - return nct_id, 0 - - # bulk‐index in sub‐batches - total = 0 - for i in range(0, len(docs), batch_size): - batch = docs[i : i + batch_size] - actions = [ - { - "_op_type": "index", - "_index": self.index_name, - "_id": doc["criteria_id"], - "_source": doc, - } - for doc in batch - ] - result = bulk( - client=self.es, - actions=actions, - raise_on_error=False, - chunk_size=batch_size, - ) - succ, fails = result if isinstance(result, tuple) else (result, []) - total += succ - logger.info( - f"{nct_id}: batch {i // batch_size + 1} → {succ} indexed, {len(fails) if isinstance(fails, list) else 0} failed" - ) - - return nct_id, total - - def index_all( - self, - processed_folder: Path, - batch_size: int = 100, - max_workers: int = 4, - refresh: bool = True, - ): - trials = [d for d in processed_folder.iterdir() if d.is_dir()] - if not trials: - logger.info("No trial subfolders found.") - return - - # 1) determine vector dims & create index if missing - if not self.es.indices.exists(index=self.index_name): - dims = self._detect_dim(processed_folder) - self.create_index(dims) - else: - logger.info(f"Index {self.index_name} exists; skipping creation") - - # 2) parallel indexing across trials - total_indexed = 0 - newly_done = [] - with ThreadPoolExecutor(max_workers=max_workers) as executor: - future_to_nct = { - executor.submit(self._index_trial, td, batch_size): td.name - for td in trials - } - for future in as_completed(future_to_nct): - nct = future_to_nct[future] - try: - nct_id, count = future.result() - total_indexed += count - newly_done.append(nct_id) - except Exception as e: - logger.error(f"{nct}: unexpected error: {e}") - newly_done.append(nct) - - # 3) optionally refresh & persist processed IDs - if refresh: - self.es.indices.refresh(index=self.index_name) - - self.processed_ids.update(newly_done) - self._save_processed_ids() - logger.info( - f"✅ Indexed {total_indexed} criteria across {len(newly_done)} trials (skipped: {len(self.processed_ids) - len(newly_done)})." - ) - - -def load_config(path: str) -> dict: - return json.loads(Path(path).read_text()) - - -def make_es_client(cfg: dict) -> Elasticsearch: - es_conf = cfg["elasticsearch"] - return Elasticsearch( - hosts=es_conf["hosts"], - basic_auth=(es_conf["username"], es_conf["password"]), - ca_certs=es_conf["ca_certs"], - verify_certs=True, - request_timeout=es_conf.get("request_timeout", 60), - max_retries=es_conf.get("max_retries", 3), - retry_on_timeout=True, - ) - - -def main(): - parser = argparse.ArgumentParser( - description="Bulk‑index prepared eligibility criteria in parallel" - ) - parser.add_argument("--config", required=True, help="Path to config.json") - parser.add_argument( - "--processed-folder", required=True, help="Root folder of trial subfolders" - ) - parser.add_argument( - "--index-name", default="trec_trials_eligibility_v3", help="ES index name" - ) - parser.add_argument( - "--batch-size", type=int, default=100, help="Docs per bulk request" - ) - parser.add_argument( - "--max-workers", type=int, default=4, help="Parallel trial threads" - ) - args = parser.parse_args() - - cfg = load_config(args.config) - es = make_es_client(cfg) - - indexer = CriteriaIndexer( - es=es, index_name=args.index_name, processed_file=Path("processed_ids.txt") - ) - indexer.index_all( - processed_folder=Path(args.processed_folder), - batch_size=args.batch_size, - max_workers=args.max_workers, - ) - - -if __name__ == "__main__": - main() diff --git a/utils/Indexer/index_trials.py b/utils/Indexer/index_trials.py deleted file mode 100644 index 6dbc5a06..00000000 --- a/utils/Indexer/index_trials.py +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env python3 -import os -import json -import argparse -from pathlib import Path - -from elasticsearch import Elasticsearch -from elasticsearch.helpers import bulk - - -def load_config(path: str) -> dict: - return json.loads(Path(path).read_text()) - - -def make_es_client(cfg: dict) -> Elasticsearch: - es_conf = cfg["elasticsearch"] - return Elasticsearch( - hosts=es_conf["hosts"], - basic_auth=(es_conf["username"], es_conf["password"]), - ca_certs=es_conf["ca_certs"], - verify_certs=True, - ) - - -def detect_vector_dim(sample: dict) -> int: - for k, v in sample.items(): - if k.endswith("_vector") and isinstance(v, list): - return len(v) - raise ValueError("No vector field found in sample") - - -def load_processed(folder: Path) -> list[dict]: - docs = [] - for fn in os.listdir(folder): - if fn.endswith(".json"): - docs.append(json.loads((folder / fn).read_text())) - return docs - - -def create_index(es: Elasticsearch, name: str, dims: int): - body = { - "settings": { - "analysis": { - "analyzer": { - "standard_lowercase": { - "type": "custom", - "tokenizer": "standard", - "filter": ["lowercase"], - } - } - } - }, - "mappings": { - "properties": { - "nct_id": {"type": "keyword"}, - "brief_title": {"type": "text", "analyzer": "standard_lowercase"}, - "brief_title_vector": {"type": "dense_vector", "dims": dims}, - "brief_summary": {"type": "text", "analyzer": "standard_lowercase"}, - "brief_summary_vector": {"type": "dense_vector", "dims": dims}, - "condition": {"type": "text", "analyzer": "standard_lowercase"}, - "condition_vector": {"type": "dense_vector", "dims": dims}, - "overall_status": {"type": "keyword"}, - "start_date": {"type": "date", "format": "yyyy-MM-dd"}, - "completion_date": {"type": "date", "format": "yyyy-MM-dd"}, - "phase": {"type": "keyword"}, - "study_type": {"type": "keyword"}, - "intervention": { - "properties": { - "intervention_type": {"type": "keyword"}, - "intervention_name": {"type": "text"}, - } - }, - "gender": {"type": "keyword"}, - "minimum_age": {"type": "float"}, - "maximum_age": {"type": "float"}, - "location": { - "properties": { - "location_name": {"type": "text"}, - "location_address": {"type": "text"}, - } - }, - "reference": { - "type": "nested", - "properties": { - "citation": {"type": "text"}, - "PMID": {"type": "keyword"}, - }, - }, - "eligibility_criteria": { - "type": "text", - "analyzer": "standard_lowercase", - }, - "eligibility_criteria_vector": {"type": "dense_vector", "dims": dims}, - } - }, - } - es.indices.create(index=name, body=body) - print(f"Created index `{name}` with vector dims={dims}") - - -def main(): - parser = argparse.ArgumentParser(description="Bulk‑index processed trial JSONs") - parser.add_argument( - "--config", - required=True, - help="Path to JSON config file with Elasticsearch credentials", - ) - parser.add_argument( - "--processed-folder", required=True, help="Folder of processed JSONs to index" - ) - parser.add_argument( - "--index-name", - default="clinical_trials", - help="Target Elasticsearch index name", - ) - parser.add_argument( - "--batch-size", type=int, default=100, help="Number of docs per bulk request" - ) - args = parser.parse_args() - - cfg = load_config(args.config) - es = make_es_client(cfg) - - processed_path = Path(args.processed_folder) - docs = load_processed(processed_path) - if not docs: - print("❌ No JSONs found to index.") - return - - dims = detect_vector_dim(docs[0]) - - # <-- FIXED: use keyword arg `index=` - if not es.indices.exists(index=args.index_name): - create_index(es, args.index_name, dims) - else: - print(f"Index `{args.index_name}` already exists; skipping creation.") - - actions = [ - { - "_op_type": "index", - "_index": args.index_name, - "_id": doc["nct_id"], - "_source": doc, - } - for doc in docs - ] - - success, failures = bulk( - client=es, - actions=actions, - chunk_size=args.batch_size, - stats_only=True, - raise_on_error=False, - ) - es.indices.refresh(index=args.index_name) - print(f"✅ Indexed {success} documents; {failures} failures.") - - -if __name__ == "__main__": - main() diff --git a/utils/Indexer/nct_ids.txt b/utils/Indexer/nct_ids.txt deleted file mode 100644 index 81ca4c2a..00000000 --- a/utils/Indexer/nct_ids.txt +++ /dev/null @@ -1,109282 +0,0 @@ -NCT00000411 -NCT00000102 -NCT00000419 -NCT00000105 -NCT00000413 -NCT00000108 -NCT00000424 -NCT00000110 -NCT00000425 -NCT00000113 -NCT00000427 -NCT00000114 -NCT00000479 -NCT00000115 -NCT00000487 -NCT00000117 -NCT00000501 -NCT00000119 -NCT00000502 -NCT00000120 -NCT00000513 -NCT00000121 -NCT00000515 -NCT00000123 -NCT00000518 -NCT00000124 -NCT00000519 -NCT00000125 -NCT00000520 -NCT00000126 -NCT00000521 -NCT00000127 -NCT00000522 -NCT00000129 -NCT00000524 -NCT00000133 -NCT00000525 -NCT00000137 -NCT00000526 -NCT00000144 -NCT00000528 -NCT00000150 -NCT00000531 -NCT00000151 -NCT00000539 -NCT00000152 -NCT00000546 -NCT00000153 -NCT00000548 -NCT00000154 -NCT00000555 -NCT00000155 -NCT00000559 -NCT00000156 -NCT00000560 -NCT00000158 -NCT00000562 -NCT00000159 -NCT00000567 -NCT00000160 -NCT00000568 -NCT00000161 -NCT00000570 -NCT00000167 -NCT00000572 -NCT00000171 -NCT00000574 -NCT00000173 -NCT00000575 -NCT00000176 -NCT00000576 -NCT00000179 -NCT00000577 -NCT00000292 -NCT00000580 -NCT00000359 -NCT00000582 -NCT00000361 -NCT00000583 -NCT00000362 -NCT00000585 -NCT00000377 -NCT00000586 -NCT00000390 -NCT00000588 -NCT00000396 -NCT00000592 -NCT00000402 -NCT00000598 -NCT00000403 -NCT00000599 -NCT00000406 -NCT00000602 -NCT00000408 -NCT00000606 -NCT00000409 -NCT00000619 -NCT00000410 -NCT00000430 -NCT00000620 -NCT00000432 -NCT00000621 -NCT00000437 -NCT00000633 -NCT00000461 -NCT00000636 -NCT00000468 -NCT00000638 -NCT00000469 -NCT00002492 -NCT00000641 -NCT00000642 -NCT00000644 -NCT00000653 -NCT00000654 -NCT00000672 -NCT00000678 -NCT00000682 -NCT00000706 -NCT00000707 -NCT00000714 -NCT00000715 -NCT00000717 -NCT00000722 -NCT00000724 -NCT00000727 -NCT00000730 -NCT00000732 -NCT00000734 -NCT00000739 -NCT00000740 -NCT00000748 -NCT00000749 -NCT00000755 -NCT00000768 -NCT00000769 - -NCT00000773 -NCT00000776 -NCT00000778 -NCT00000785 -NCT00000790 -NCT00000794 -NCT00000796 -NCT00000801 -NCT00000802 -NCT00000811 -NCT00000816 -NCT00000832 -NCT00000854 -NCT00000855 -NCT00000860 -NCT00000862 -NCT00000863 -NCT00000873 -NCT00000879 -NCT00000910 -NCT00000937 -NCT00000938 -NCT00000941 -NCT00000955 -NCT00000959 -NCT00000961 -NCT00000963 -NCT00000964 -NCT00000970 -NCT00000975 -NCT00000980 -NCT00000987 -NCT00000998 -NCT00001001 -NCT00001013 -NCT00001014 -NCT00001015 -NCT00001025 -NCT00001028 -NCT00001030 -NCT00001033 -NCT00001038 -NCT00001077 -NCT00001081 -NCT00001092 -NCT00001100 -NCT00001101 -NCT00001103 -NCT00001109 -NCT00001115 -NCT00001119 -NCT00001126 -NCT00001127 -NCT00001128 -NCT00001143 -NCT00001144 -NCT00001145 -NCT00001148 -NCT00001149 -NCT00001152 -NCT00001153 -NCT00001155 -NCT00001156 -NCT00001159 -NCT00001160 -NCT00001161 -NCT00001165 -NCT00001166 -NCT00001167 -NCT00001173 -NCT00001177 -NCT00001180 -NCT00001181 -NCT00001184 -NCT00001188 -NCT00001189 -NCT00001190 -NCT00001193 -NCT00001196 -NCT00001197 -NCT00001202 -NCT00001203 -NCT00001204 -NCT00001205 -NCT00001208 -NCT00001215 -NCT00001216 -NCT00001220 -NCT00001221 -NCT00001224 -NCT00001225 -NCT00001228 -NCT00001230 -NCT00001237 -NCT00001241 -NCT00001242 -NCT00001246 -NCT00001249 -NCT00001250 -NCT00001252 -NCT00001253 -NCT00001254 -NCT00001256 -NCT00001259 -NCT00001261 -NCT00001262 -NCT00001265 -NCT00001266 -NCT00001267 -NCT00001269 -NCT00001270 -NCT00001276 -NCT00001277 -NCT00001278 -NCT00001280 -NCT00001282 -NCT00001284 -NCT00001287 -NCT00001288 -NCT00001291 -NCT00001292 -NCT00001296 -NCT00001301 -NCT00001302 -NCT00001303 -NCT00001304 -NCT00001305 -NCT00001306 -NCT00001307 -NCT00001308 -NCT00001313 -NCT00001314 -NCT00001318 -NCT00001322 -NCT00001323 -NCT00001325 -NCT00001332 -NCT00001335 -NCT00001337 -NCT00001338 -NCT00001339 -NCT00001341 -NCT00001342 -NCT00001343 -NCT00001344 -NCT00001347 -NCT00001349 -NCT00001350 -NCT00001356 -NCT00001359 -NCT00001364 -NCT00001365 -NCT00001366 -NCT00001367 -NCT00001368 -NCT00001371 -NCT00001378 -NCT00001379 -NCT00001381 -NCT00001383 -NCT00001384 -NCT00001386 -NCT00001393 -NCT00001394 -NCT00001398 -NCT00001399 -NCT00001400 -NCT00001402 -NCT00001403 -NCT00001405 -NCT00001407 -NCT00001408 -NCT00001412 -NCT00001413 -NCT00001415 -NCT00001417 -NCT00001420 -NCT00001421 -NCT00001431 -NCT00001436 -NCT00001437 -NCT00001442 -NCT00001444 -NCT00001445 -NCT00001446 -NCT00001452 -NCT00001453 -NCT00001454 -NCT00001455 -NCT00001456 -NCT00001457 -NCT00001458 -NCT00001460 -NCT00001462 -NCT00001466 -NCT00001469 -NCT00001473 -NCT00001476 -NCT00001478 -NCT00001480 -NCT00001481 -NCT00001482 -NCT00001483 -NCT00001487 -NCT00001489 -NCT00001493 -NCT00001496 -NCT00001498 -NCT00001502 -NCT00001505 -NCT00001520 -NCT00001521 -NCT00001522 -NCT00001523 -NCT00001524 -NCT00001527 -NCT00001528 -NCT00001529 -NCT00001530 -NCT00001532 -NCT00001533 -NCT00001534 -NCT00001536 -NCT00001538 -NCT00001539 -NCT00001541 -NCT00001542 -NCT00001543 -NCT00001544 -NCT00001546 -NCT00001549 -NCT00001550 -NCT00001551 -NCT00001553 -NCT00001554 -NCT00001560 -NCT00001561 -NCT00001565 -NCT00001568 -NCT00001573 -NCT00001574 -NCT00001579 -NCT00001586 -NCT00001589 -NCT00001596 -NCT00001598 -NCT00001599 -NCT00001600 -NCT00001605 -NCT00001606 -NCT00001610 -NCT00001611 -NCT00001615 -NCT00001621 -NCT00001622 -NCT00001623 -NCT00001625 -NCT00001628 -NCT00001629 -NCT00001631 -NCT00001633 -NCT00001637 -NCT00001638 -NCT00001639 -NCT00001640 -NCT00001641 -NCT00001643 -NCT00001645 -NCT00001646 -NCT00001649 -NCT00001656 -NCT00001657 -NCT00001658 -NCT00001659 -NCT00001661 -NCT00001662 -NCT00001663 -NCT00001664 -NCT00001665 -NCT00001666 -NCT00001668 -NCT00001669 -NCT00001672 -NCT00001676 -NCT00001685 -NCT00001688 -NCT00001693 -NCT00001696 -NCT00001699 -NCT00001713 -NCT00001716 -NCT00001718 -NCT00001719 -NCT00001720 -NCT00001721 -NCT00001722 -NCT00001723 -NCT00001724 -NCT00001725 -NCT00001728 -NCT00001729 -NCT00001730 -NCT00001731 -NCT00001735 -NCT00001737 -NCT00001742 -NCT00001748 -NCT00001750 -NCT00001752 -NCT00001754 -NCT00001756 -NCT00001759 -NCT00001760 -NCT00001761 -NCT00001763 -NCT00001764 -NCT00001765 -NCT00001770 -NCT00001774 -NCT00001776 -NCT00001777 -NCT00001780 -NCT00001781 -NCT00001783 -NCT00001784 -NCT00001790 -NCT00001814 -NCT00001830 -NCT00001836 -NCT00001839 -NCT00001840 -NCT00001848 -NCT00001849 -NCT00001851 -NCT00001852 -NCT00001853 -NCT00001854 -NCT00001859 -NCT00001860 -NCT00001861 -NCT00001862 -NCT00001864 -NCT00001865 -NCT00001866 -NCT00001870 -NCT00001871 -NCT00001873 -NCT00001876 -NCT00001877 -NCT00001878 -NCT00001881 -NCT00001884 -NCT00001885 -NCT00001886 -NCT00001887 -NCT00001888 -NCT00001889 -NCT00001890 -NCT00001891 -NCT00001893 -NCT00001894 -NCT00001895 -NCT00001899 -NCT00001901 -NCT00001987 -NCT00001903 -NCT00001990 -NCT00001905 -NCT00001991 -NCT00001906 -NCT00002032 -NCT00001908 -NCT00002047 -NCT00001909 -NCT00002055 -NCT00001910 -NCT00002056 -NCT00001911 -NCT00002062 -NCT00001915 -NCT00002063 -NCT00001916 -NCT00002068 -NCT00001918 -NCT00002082 -NCT00001921 -NCT00002085 -NCT00001922 -NCT00002088 -NCT00001923 -NCT00002101 -NCT00001925 -NCT00002102 -NCT00001926 -NCT00002103 -NCT00001927 -NCT00002104 -NCT00001928 -NCT00002116 -NCT00001929 -NCT00002120 -NCT00001930 -NCT00002121 -NCT00001931 -NCT00002136 -NCT00001932 -NCT00002137 -NCT00001933 -NCT00002138 -NCT00001934 -NCT00002140 -NCT00001936 -NCT00002144 -NCT00001940 -NCT00002177 -NCT00001946 -NCT00002181 -NCT00001950 -NCT00002182 -NCT00001951 -NCT00002219 -NCT00001952 -NCT00002248 -NCT00001953 -NCT00002252 -NCT00001954 -NCT00002253 -NCT00001955 -NCT00002258 -NCT00001957 -NCT00002273 -NCT00001960 -NCT00002274 -NCT00001961 -NCT00002297 -NCT00001963 -NCT00002317 -NCT00001965 -NCT00002331 -NCT00001966 -NCT00002340 -NCT00001968 -NCT00002342 -NCT00001969 -NCT00002343 -NCT00001971 -NCT00002404 -NCT00001972 -NCT00002408 -NCT00001973 -NCT00002426 -NCT00001975 -NCT00002434 -NCT00001976 -NCT00002444 -NCT00001977 -NCT00002459 -NCT00001981 -NCT00002471 -NCT00001982 -NCT00002478 -NCT00001985 -NCT00002490 -NCT00001986 -NCT00003000 -NCT00002493 -NCT00002742 -NCT00002495 -NCT00002735 -NCT00002496 -NCT00002744 -NCT00002502 -NCT00002746 -NCT00002511 -NCT00002749 -NCT00002514 -NCT00002755 -NCT00002523 -NCT00002759 -NCT00002528 -NCT00002761 -NCT00002529 -NCT00002762 -NCT00002536 -NCT00002764 -NCT00002537 -NCT00002766 -NCT00002542 -NCT00002771 -NCT00002548 -NCT00002772 -NCT00002550 -NCT00002774 -NCT00002555 -NCT00002777 -NCT00002562 -NCT00002783 -NCT00002564 -NCT00002784 -NCT00002569 -NCT00002791 -NCT00002575 -NCT00002800 -NCT00002580 -NCT00002803 -NCT00002581 -NCT00002804 -NCT00002590 -NCT00002806 -NCT00002593 -NCT00002809 -NCT00002598 -NCT00002810 -NCT00002602 -NCT00002813 -NCT00002608 -NCT00002814 -NCT00002615 -NCT00002827 -NCT00002616 -NCT00002835 -NCT00002619 -NCT00002839 -NCT00002620 -NCT00002849 -NCT00002622 -NCT00002850 -NCT00002623 -NCT00002864 -NCT00002628 -NCT00002869 -NCT00002630 -NCT00002872 -NCT00002633 -NCT00002873 -NCT00002639 -NCT00002875 -NCT00002641 -NCT00002878 -NCT00002646 -NCT00002879 -NCT00002651 -NCT00002882 -NCT00002653 -NCT00002890 -NCT00002654 -NCT00002908 -NCT00002659 -NCT00002916 -NCT00002663 -NCT00002917 -NCT00002665 -NCT00002919 -NCT00002670 -NCT00002920 -NCT00002676 -NCT00002934 -NCT00002680 -NCT00002946 -NCT00002681 -NCT00002967 -NCT00002682 -NCT00002968 -NCT00002687 -NCT00002971 -NCT00002689 -NCT00002974 -NCT00002701 -NCT00002985 -NCT00002706 -NCT00002990 -NCT00002708 -NCT00002996 -NCT00002718 -NCT00002999 -NCT00002725 -NCT00003511 -NCT00003002 -NCT00003257 -NCT00003012 -NCT00003253 -NCT00003013 -NCT00003266 -NCT00003017 -NCT00003267 -NCT00003018 -NCT00003276 -NCT00003022 -NCT00003279 -NCT00003025 -NCT00003280 -NCT00003031 -NCT00003292 -NCT00003039 -NCT00003296 -NCT00003041 -NCT00003298 -NCT00003049 -NCT00003315 -NCT00003052 -NCT00003322 -NCT00003055 -NCT00003325 -NCT00003056 -NCT00003328 -NCT00003057 -NCT00003331 -NCT00003058 -NCT00003335 -NCT00003065 -NCT00003337 -NCT00003067 -NCT00003338 -NCT00003072 -NCT00003342 -NCT00003075 -NCT00003346 -NCT00003078 -NCT00003353 -NCT00003082 -NCT00003364 -NCT00003088 -NCT00003368 -NCT00003093 -NCT00003369 -NCT00003094 -NCT00003372 -NCT00003098 -NCT00003375 -NCT00003099 -NCT00003376 -NCT00003105 -NCT00003377 -NCT00003115 -NCT00003379 -NCT00003116 -NCT00003381 -NCT00003117 -NCT00003384 -NCT00003118 -NCT00003387 -NCT00003124 -NCT00003388 -NCT00003125 -NCT00003391 -NCT00003126 -NCT00003396 -NCT00003128 -NCT00003409 -NCT00003129 -NCT00003410 -NCT00003132 -NCT00003416 -NCT00003133 -NCT00003418 -NCT00003137 -NCT00003434 -NCT00003139 -NCT00003440 -NCT00003145 -NCT00003443 -NCT00003153 -NCT00003445 -NCT00003157 -NCT00003449 -NCT00003162 -NCT00003453 -NCT00003172 -NCT00003463 -NCT00003176 -NCT00003465 -NCT00003190 -NCT00003466 -NCT00003199 -NCT00003468 -NCT00003209 -NCT00003470 -NCT00003210 -NCT00003471 -NCT00003213 -NCT00003476 -NCT00003217 -NCT00003489 -NCT00003232 -NCT00003494 -NCT00003234 -NCT00003509 -NCT00003237 -NCT00004041 -NCT00003519 -NCT00003798 -NCT00003520 -NCT00003797 -NCT00003524 -NCT00003805 -NCT00003537 -NCT00003809 -NCT00003539 -NCT00003814 -NCT00003549 -NCT00003816 -NCT00003557 -NCT00003817 -NCT00003564 -NCT00003820 -NCT00003565 -NCT00003824 -NCT00003568 -NCT00003825 -NCT00003571 -NCT00003829 -NCT00003576 -NCT00003830 -NCT00003590 -NCT00003831 -NCT00003591 -NCT00003838 -NCT00003593 -NCT00003842 -NCT00003595 -NCT00003851 -NCT00003596 -NCT00003853 -NCT00003598 -NCT00003856 -NCT00003612 -NCT00003857 -NCT00003615 -NCT00003862 -NCT00003621 -NCT00003863 -NCT00003623 -NCT00003868 -NCT00003640 -NCT00003875 -NCT00003642 -NCT00003876 -NCT00003645 -NCT00003877 -NCT00003654 -NCT00003881 -NCT00003658 -NCT00003887 -NCT00003659 -NCT00003896 -NCT00003667 -NCT00003899 -NCT00003669 -NCT00003906 -NCT00003675 -NCT00003908 -NCT00003677 -NCT00003909 -NCT00003684 -NCT00003923 -NCT00003685 -NCT00003930 -NCT00003686 -NCT00003934 -NCT00003694 -NCT00003936 -NCT00003700 -NCT00003937 -NCT00003701 -NCT00003938 -NCT00003702 -NCT00003941 -NCT00003703 -NCT00003945 -NCT00003714 -NCT00003953 -NCT00003719 -NCT00003954 -NCT00003740 -NCT00003957 -NCT00003742 -NCT00003966 -NCT00003754 -NCT00003970 -NCT00003759 -NCT00003977 -NCT00003760 -NCT00003984 -NCT00003761 -NCT00003985 -NCT00003771 -NCT00003992 -NCT00003775 -NCT00003995 -NCT00003778 -NCT00004010 -NCT00003779 -NCT00004013 -NCT00003780 -NCT00004017 -NCT00003781 -NCT00004028 -NCT00003782 -NCT00004033 -NCT00003784 -NCT00004553 -NCT00004048 -NCT00004276 -NCT00004050 -NCT00004275 -NCT00004054 -NCT00004287 -NCT00004062 -NCT00004296 -NCT00004063 -NCT00004297 -NCT00004067 -NCT00004313 -NCT00004068 -NCT00004317 -NCT00004074 -NCT00004326 -NCT00004080 -NCT00004332 -NCT00004088 -NCT00004334 -NCT00004089 -NCT00004335 -NCT00004091 -NCT00004338 -NCT00004094 -NCT00004339 -NCT00004099 -NCT00004341 -NCT00004113 -NCT00004343 -NCT00004122 -NCT00004351 -NCT00004125 -NCT00004357 -NCT00004128 -NCT00004359 -NCT00004139 -NCT00004364 -NCT00004143 -NCT00004365 -NCT00004146 -NCT00004381 -NCT00004148 -NCT00004387 -NCT00004154 -NCT00004392 -NCT00004157 -NCT00004399 -NCT00004161 -NCT00004401 -NCT00004163 -NCT00004402 -NCT00004164 -NCT00004403 -NCT00004165 -NCT00004404 -NCT00004177 -NCT00004407 -NCT00004192 -NCT00004408 -NCT00004194 -NCT00004410 -NCT00004197 -NCT00004414 -NCT00004202 -NCT00004416 -NCT00004203 -NCT00004418 -NCT00004204 -NCT00004428 -NCT00004205 -NCT00004429 -NCT00004211 -NCT00004431 -NCT00004216 -NCT00004438 -NCT00004218 -NCT00004441 -NCT00004219 -NCT00004444 -NCT00004223 -NCT00004451 -NCT00004226 -NCT00004465 -NCT00004227 -NCT00004466 -NCT00004232 -NCT00004467 -NCT00004235 -NCT00004475 -NCT00004236 -NCT00004478 -NCT00004245 -NCT00004480 -NCT00004246 -NCT00004485 -NCT00004248 -NCT00004487 -NCT00004250 -NCT00004492 -NCT00004254 -NCT00004493 -NCT00004259 -NCT00004494 -NCT00004260 -NCT00004496 -NCT00004266 -NCT00004497 -NCT00004268 -NCT00004533 -NCT00004274 -NCT00005086 -NCT00004554 -NCT00004826 -NCT00004557 -NCT00004825 -NCT00004562 -NCT00004829 -NCT00004563 -NCT00004838 -NCT00004566 -NCT00004842 -NCT00004567 -NCT00004843 -NCT00004571 -NCT00004844 -NCT00004572 -NCT00004848 -NCT00004576 -NCT00004850 -NCT00004635 -NCT00004851 -NCT00004637 -NCT00004856 -NCT00004645 -NCT00004857 -NCT00004648 -NCT00004862 -NCT00004649 -NCT00004865 -NCT00004654 -NCT00004866 -NCT00004669 -NCT00004868 -NCT00004670 -NCT00004883 -NCT00004682 -NCT00004888 -NCT00004685 -NCT00004890 -NCT00004686 -NCT00004895 -NCT00004689 -NCT00004896 -NCT00004694 -NCT00004899 -NCT00004696 -NCT00004900 -NCT00004727 -NCT00004901 -NCT00004728 -NCT00004911 -NCT00004729 -NCT00004912 -NCT00004731 -NCT00004925 -NCT00004732 -NCT00004928 -NCT00004733 -NCT00004929 -NCT00004734 -NCT00004937 -NCT00004736 -NCT00004982 -NCT00004738 -NCT00004983 -NCT00004740 -NCT00004984 -NCT00004748 -NCT00004991 -NCT00004751 -NCT00004992 -NCT00004755 -NCT00005001 -NCT00004760 -NCT00005003 -NCT00004762 -NCT00005004 -NCT00004763 -NCT00005005 -NCT00004769 -NCT00005007 -NCT00004770 -NCT00005009 -NCT00004776 -NCT00005011 -NCT00004784 -NCT00005013 -NCT00004785 -NCT00005016 -NCT00004787 -NCT00005033 -NCT00004788 -NCT00005035 -NCT00004793 -NCT00005039 -NCT00004796 -NCT00005047 -NCT00004797 -NCT00005053 -NCT00004805 -NCT00005066 -NCT00004806 -NCT00005070 -NCT00004808 -NCT00005072 -NCT00004809 -NCT00005075 -NCT00004810 -NCT00005079 -NCT00004812 -NCT00005081 -NCT00004817 -NCT00005796 -NCT00005090 -NCT00005595 -NCT00005100 -NCT00005589 -NCT00005101 -NCT00005596 -NCT00005102 -NCT00005599 -NCT00005103 -NCT00005607 -NCT00005105 -NCT00005610 -NCT00005108 -NCT00005622 -NCT00005111 -NCT00005624 -NCT00005112 -NCT00005625 -NCT00005113 -NCT00005628 -NCT00005117 -NCT00005629 -NCT00005129 -NCT00005630 -NCT00005136 -NCT00005631 -NCT00005141 -NCT00005632 -NCT00005176 -NCT00005635 -NCT00005189 -NCT00005636 -NCT00005190 -NCT00005637 -NCT00005199 -NCT00005640 -NCT00005200 -NCT00005647 -NCT00005202 -NCT00005652 -NCT00005203 -NCT00005654 -NCT00005210 -NCT00005655 -NCT00005243 -NCT00005657 -NCT00005246 -NCT00005660 -NCT00005251 -NCT00005663 -NCT00005267 -NCT00005664 -NCT00005271 -NCT00005665 -NCT00005289 -NCT00005669 -NCT00005293 -NCT00005674 -NCT00005299 -NCT00005730 -NCT00005313 -NCT00005736 -NCT00005317 -NCT00005739 -NCT00005322 -NCT00005754 -NCT00005345 -NCT00005760 -NCT00005348 -NCT00005761 -NCT00005357 -NCT00005765 -NCT00005361 -NCT00005766 -NCT00005372 -NCT00005768 -NCT00005373 -NCT00005771 -NCT00005381 -NCT00005772 -NCT00005402 -NCT00005773 -NCT00005470 -NCT00005774 -NCT00005475 -NCT00005775 -NCT00005479 -NCT00005776 -NCT00005536 -NCT00005777 -NCT00005541 -NCT00005778 -NCT00005543 -NCT00005781 -NCT00005559 -NCT00005782 -NCT00005564 -NCT00005783 -NCT00005567 -NCT00005784 -NCT00005570 -NCT00005785 -NCT00005571 -NCT00005786 -NCT00005574 -NCT00005788 -NCT00005575 -NCT00005791 -NCT00005576 -NCT00005793 -NCT00005579 -NCT00006128 -NCT00005797 -NCT00005957 -NCT00005799 -NCT00005951 -NCT00005800 -NCT00005958 -NCT00005802 -NCT00005965 -NCT00005805 -NCT00005969 -NCT00005808 -NCT00005970 -NCT00005810 -NCT00005974 -NCT00005812 -NCT00005975 -NCT00005814 -NCT00005985 -NCT00005823 -NCT00005988 -NCT00005826 -NCT00005991 -NCT00005829 -NCT00005997 -NCT00005831 -NCT00005999 -NCT00005832 -NCT00006002 -NCT00005834 -NCT00006014 -NCT00005837 -NCT00006021 -NCT00005842 -NCT00006024 -NCT00005847 -NCT00006026 -NCT00005848 -NCT00006032 -NCT00005849 -NCT00006034 -NCT00005850 -NCT00006038 -NCT00005856 -NCT00006040 -NCT00005862 -NCT00006042 -NCT00005863 -NCT00006044 -NCT00005866 -NCT00006051 -NCT00005869 -NCT00006054 -NCT00005871 -NCT00006055 -NCT00005874 -NCT00006056 -NCT00005880 -NCT00006058 -NCT00005883 -NCT00006059 -NCT00005888 -NCT00006062 -NCT00005889 -NCT00006068 -NCT00005891 -NCT00006070 -NCT00005892 -NCT00006071 -NCT00005893 -NCT00006072 -NCT00005902 -NCT00006077 -NCT00005903 -NCT00006078 -NCT00005905 -NCT00006079 -NCT00005907 -NCT00006080 -NCT00005910 -NCT00006081 -NCT00005917 -NCT00006083 -NCT00005919 -NCT00006088 -NCT00005921 -NCT00006089 -NCT00005924 -NCT00006091 -NCT00005925 -NCT00006096 -NCT00005926 -NCT00006097 -NCT00005927 -NCT00006101 -NCT00005933 -NCT00006103 -NCT00005937 -NCT00006104 -NCT00005938 -NCT00006105 -NCT00005940 -NCT00006110 -NCT00005941 -NCT00006111 -NCT00005945 -NCT00006112 -NCT00005947 -NCT00006118 -NCT00005949 -NCT00006124 -NCT00005950 -NCT00006721 -NCT00006131 -NCT00006343 -NCT00006132 -NCT00006342 -NCT00006135 -NCT00006345 -NCT00006146 -NCT00006348 -NCT00006148 -NCT00006351 -NCT00006150 -NCT00006352 -NCT00006155 -NCT00006355 -NCT00006156 -NCT00006360 -NCT00006157 -NCT00006363 -NCT00006158 -NCT00006376 -NCT00006159 -NCT00006379 -NCT00006160 -NCT00006381 -NCT00006164 -NCT00006386 -NCT00006168 -NCT00006388 -NCT00006173 -NCT00006395 -NCT00006174 -NCT00006398 -NCT00006175 -NCT00006400 -NCT00006180 -NCT00006401 -NCT00006184 -NCT00006411 -NCT00006188 -NCT00006413 -NCT00006193 -NCT00006414 -NCT00006198 -NCT00006417 -NCT00006202 -NCT00006421 -NCT00006213 -NCT00006422 -NCT00006214 -NCT00006424 -NCT00006224 -NCT00006425 -NCT00006226 -NCT00006426 -NCT00006228 -NCT00006428 -NCT00006239 -NCT00006429 -NCT00006240 -NCT00006430 -NCT00006242 -NCT00006432 -NCT00006251 -NCT00006435 -NCT00006252 -NCT00006436 -NCT00006259 -NCT00006438 -NCT00006263 -NCT00006444 -NCT00006269 -NCT00006445 -NCT00006270 -NCT00006447 -NCT00006271 -NCT00006450 -NCT00006272 -NCT00006451 -NCT00006278 -NCT00006455 -NCT00006279 -NCT00006460 -NCT00006289 -NCT00006472 -NCT00006292 -NCT00006474 -NCT00006295 -NCT00006476 -NCT00006299 -NCT00006478 -NCT00006305 -NCT00006481 -NCT00006306 -NCT00006482 -NCT00006312 -NCT00006488 -NCT00006329 -NCT00006501 -NCT00006331 -NCT00006505 -NCT00006333 -NCT00006516 -NCT00006334 -NCT00006518 -NCT00006335 -NCT00006656 -NCT00006336 -NCT00006669 -NCT00006337 -NCT00006695 -NCT00006341 -NCT00016107 -NCT00006890 -NCT00010764 -NCT00006916 -NCT00010517 -NCT00007020 -NCT00010816 -NCT00007150 -NCT00010933 -NCT00007163 -NCT00010946 -NCT00007189 -NCT00011063 -NCT00007280 -NCT00011258 -NCT00007319 -NCT00011323 -NCT00007345 -NCT00011336 -NCT00007475 -NCT00011570 -NCT00007501 -NCT00011648 -NCT00007670 -NCT00011700 -NCT00007800 -NCT00011752 -NCT00007904 -NCT00011765 -NCT00007982 -NCT00011960 -NCT00007995 -NCT00011973 -NCT00008112 -NCT00012259 -NCT00008164 -NCT00012350 -NCT00008177 -NCT00012376 -NCT00008216 -NCT00012857 -NCT00008229 -NCT00013156 -NCT00008307 -NCT00013377 -NCT00008424 -NCT00013390 -NCT00008463 -NCT00013416 -NCT00008476 -NCT00013468 -NCT00008515 -NCT00013546 -NCT00008697 -NCT00013559 -NCT00008736 -NCT00013650 -NCT00008749 -NCT00013689 -NCT00008814 -NCT00013741 -NCT00008827 -NCT00013793 -NCT00009035 -NCT00013832 -NCT00009048 -NCT00013845 -NCT00009204 -NCT00013923 -NCT00009243 -NCT00014235 -NCT00009529 -NCT00014430 -NCT00009542 -NCT00014469 -NCT00009555 -NCT00014495 -NCT00009568 -NCT00014508 -NCT00009581 -NCT00014612 -NCT00009620 -NCT00014638 -NCT00009633 -NCT00014794 -NCT00009646 -NCT00014950 -NCT00009659 -NCT00014976 -NCT00009672 -NCT00015431 -NCT00009698 -NCT00015470 -NCT00009763 -NCT00015587 -NCT00009789 -NCT00015613 -NCT00009841 -NCT00015782 -NCT00009945 -NCT00015795 -NCT00009958 -NCT00015834 -NCT00009984 -NCT00015925 -NCT00009997 -NCT00015938 -NCT00010192 -NCT00016081 -NCT00010439 -NCT00016094 -NCT00010465 -NCT00025909 -NCT00016159 -NCT00021567 -NCT00016367 -NCT00021541 -NCT00016419 -NCT00021580 -NCT00016432 -NCT00021645 -NCT00016471 -NCT00021671 -NCT00016497 -NCT00021723 -NCT00016627 -NCT00021749 -NCT00016653 -NCT00021827 -NCT00016679 -NCT00021866 -NCT00016848 -NCT00021918 -NCT00016952 -NCT00022048 -NCT00017329 -NCT00022451 -NCT00017342 -NCT00022581 -NCT00017394 -NCT00022607 -NCT00017472 -NCT00022672 -NCT00017550 -NCT00022737 -NCT00017589 -NCT00022841 -NCT00017810 -NCT00022945 -NCT00017862 -NCT00023010 -NCT00017914 -NCT00023036 -NCT00017927 -NCT00023049 -NCT00017940 -NCT00023062 -NCT00017979 -NCT00023101 -NCT00018070 -NCT00023192 -NCT00018109 -NCT00023296 -NCT00018174 -NCT00023374 -NCT00018408 -NCT00023439 -NCT00018447 -NCT00023452 -NCT00018486 -NCT00023491 -NCT00018525 -NCT00023569 -NCT00018564 -NCT00023764 -NCT00018889 -NCT00023998 -NCT00019084 -NCT00024102 -NCT00019110 -NCT00024115 -NCT00019331 -NCT00024154 -NCT00019383 -NCT00024440 -NCT00019643 -NCT00024479 -NCT00019812 -NCT00024570 -NCT00019825 -NCT00024791 -NCT00019994 -NCT00024908 -NCT00020111 -NCT00024986 -NCT00020397 -NCT00024999 -NCT00020527 -NCT00025038 -NCT00020605 -NCT00025402 -NCT00020618 -NCT00025428 -NCT00020670 -NCT00025532 -NCT00020709 -NCT00025597 -NCT00020735 -NCT00025610 -NCT00020761 -NCT00025623 -NCT00020865 -NCT00025649 -NCT00020943 -NCT00025662 -NCT00021151 -NCT00025701 -NCT00021255 -NCT00025805 -NCT00021359 -NCT00025870 -NCT00021372 -NCT00025883 -NCT00021528 -NCT00034021 -NCT00025935 -NCT00029822 -NCT00026052 -NCT00029809 -NCT00026065 -NCT00029861 -NCT00026104 -NCT00029939 -NCT00026286 -NCT00029952 -NCT00026312 -NCT00030004 -NCT00026533 -NCT00030108 -NCT00026598 -NCT00030134 -NCT00026637 -NCT00030160 -NCT00026702 -NCT00030199 -NCT00026728 -NCT00030212 -NCT00026741 -NCT00030238 -NCT00026793 -NCT00030277 -NCT00026923 -NCT00030290 -NCT00026962 -NCT00030355 -NCT00027027 -NCT00030394 -NCT00027170 -NCT00030498 -NCT00027209 -NCT00030550 -NCT00027235 -NCT00030589 -NCT00027274 -NCT00030602 -NCT00027287 -NCT00030797 -NCT00027300 -NCT00030940 -NCT00027391 -NCT00030966 -NCT00027560 -NCT00031005 -NCT00027586 -NCT00031096 -NCT00027638 -NCT00031239 -NCT00027794 -NCT00031278 -NCT00027872 -NCT00031655 -NCT00027937 -NCT00031681 -NCT00028028 -NCT00031720 -NCT00028080 -NCT00031837 -NCT00028158 -NCT00032006 -NCT00028184 -NCT00032019 -NCT00028210 -NCT00032097 -NCT00028275 -NCT00032240 -NCT00028340 -NCT00032331 -NCT00028379 -NCT00032383 -NCT00028496 -NCT00032448 -NCT00028535 -NCT00032461 -NCT00028756 -NCT00032513 -NCT00028795 -NCT00032643 -NCT00028847 -NCT00032682 -NCT00028886 -NCT00032877 -NCT00028938 -NCT00032890 -NCT00029003 -NCT00033137 -NCT00029107 -NCT00033189 -NCT00029120 -NCT00033280 -NCT00029146 -NCT00033332 -NCT00029159 -NCT00033371 -NCT00029198 -NCT00033462 -NCT00029211 -NCT00033514 -NCT00029315 -NCT00033553 -NCT00029380 -NCT00033774 -NCT00029666 -NCT00033813 -NCT00029731 -NCT00033891 -NCT00029770 -NCT00043316 -NCT00034060 -NCT00039546 -NCT00034242 -NCT00039416 -NCT00034281 -NCT00039676 -NCT00034346 -NCT00039702 -NCT00034424 -NCT00039858 -NCT00034450 -NCT00039962 -NCT00034736 -NCT00040027 -NCT00034762 -NCT00040105 -NCT00034788 -NCT00040131 -NCT00034905 -NCT00040196 -NCT00035269 -NCT00040248 -NCT00035373 -NCT00040326 -NCT00035386 -NCT00040339 -NCT00035451 -NCT00040352 -NCT00035477 -NCT00040378 -NCT00035633 -NCT00040443 -NCT00035789 -NCT00040456 -NCT00035815 -NCT00040560 -NCT00035828 -NCT00040690 -NCT00035854 -NCT00040742 -NCT00036335 -NCT00040755 -NCT00036595 -NCT00040794 -NCT00036608 -NCT00040846 -NCT00036647 -NCT00040872 -NCT00036738 -NCT00040885 -NCT00036764 -NCT00040937 -NCT00036790 -NCT00041067 -NCT00037050 -NCT00041106 -NCT00037154 -NCT00041119 -NCT00037388 -NCT00041587 -NCT00037479 -NCT00041600 -NCT00037557 -NCT00041665 -NCT00037817 -NCT00041899 -NCT00037843 -NCT00041938 -NCT00037921 -NCT00041977 -NCT00037973 -NCT00042042 -NCT00038051 -NCT00042120 -NCT00038064 -NCT00042159 -NCT00038077 -NCT00042172 -NCT00038090 -NCT00042211 -NCT00038116 -NCT00042276 -NCT00038142 -NCT00042549 -NCT00038233 -NCT00042562 -NCT00038350 -NCT00042575 -NCT00038402 -NCT00042705 -NCT00038415 -NCT00042770 -NCT00038623 -NCT00042809 -NCT00038792 -NCT00042822 -NCT00038857 -NCT00042835 -NCT00039117 -NCT00042848 -NCT00039130 -NCT00042952 -NCT00039182 -NCT00042991 -NCT00039312 -NCT00043134 -NCT00039338 -NCT00043186 -NCT00039364 -NCT00043303 -NCT00039377 -NCT00051363 -NCT00043394 -NCT00047021 -NCT00043628 -NCT00046995 -NCT00043680 -NCT00047125 -NCT00043719 -NCT00047164 -NCT00043784 -NCT00047190 -NCT00043836 -NCT00047203 -NCT00043849 -NCT00047255 -NCT00043940 -NCT00047268 -NCT00043992 -NCT00047281 -NCT00044057 -NCT00047333 -NCT00044122 -NCT00047554 -NCT00044174 -NCT00047723 -NCT00044226 -NCT00047879 -NCT00044252 -NCT00047918 -NCT00044304 -NCT00047957 -NCT00044369 -NCT00048061 -NCT00044473 -NCT00048347 -NCT00044629 -NCT00048360 -NCT00044733 -NCT00048399 -NCT00044798 -NCT00048490 -NCT00044811 -NCT00048542 -NCT00044824 -NCT00048685 -NCT00044863 -NCT00048815 -NCT00044876 -NCT00048880 -NCT00044954 -NCT00049036 -NCT00045006 -NCT00049114 -NCT00045032 -NCT00049179 -NCT00045136 -NCT00049192 -NCT00045201 -NCT00049283 -NCT00045305 -NCT00049296 -NCT00045396 -NCT00049374 -NCT00045435 -NCT00049504 -NCT00045708 -NCT00049517 -NCT00045812 -NCT00049543 -NCT00045838 -NCT00049556 -NCT00045877 -NCT00049673 -NCT00045942 -NCT00049764 -NCT00045955 -NCT00049803 -NCT00045981 -NCT00049816 -NCT00045994 -NCT00049829 -NCT00046072 -NCT00049920 -NCT00046124 -NCT00050024 -NCT00046189 -NCT00050167 -NCT00046254 -NCT00050193 -NCT00046397 -NCT00050219 -NCT00046410 -NCT00050245 -NCT00046436 -NCT00050310 -NCT00046527 -NCT00050362 -NCT00046579 -NCT00050479 -NCT00046618 -NCT00050609 -NCT00046644 -NCT00050752 -NCT00046670 -NCT00050778 -NCT00046683 -NCT00050817 -NCT00046748 -NCT00051311 -NCT00046774 -NCT00051337 -NCT00046930 -NCT00060528 -NCT00051402 -NCT00055835 -NCT00051597 -NCT00055692 -NCT00051623 -NCT00055848 -NCT00051636 -NCT00055874 -NCT00051792 -NCT00055926 -NCT00051961 -NCT00055991 -NCT00052221 -NCT00056160 -NCT00052286 -NCT00056199 -NCT00052299 -NCT00056225 -NCT00052520 -NCT00056329 -NCT00052624 -NCT00056355 -NCT00052754 -NCT00056433 -NCT00052897 -NCT00056576 -NCT00052910 -NCT00056602 -NCT00052962 -NCT00056628 -NCT00053040 -NCT00056654 -NCT00053053 -NCT00056719 -NCT00053196 -NCT00056771 -NCT00053287 -NCT00056784 -NCT00053339 -NCT00056862 -NCT00053469 -NCT00057018 -NCT00053482 -NCT00057122 -NCT00053625 -NCT00057161 -NCT00053742 -NCT00057434 -NCT00053846 -NCT00057694 -NCT00053898 -NCT00057746 -NCT00053989 -NCT00057798 -NCT00054054 -NCT00057811 -NCT00054067 -NCT00057993 -NCT00054132 -NCT00058006 -NCT00054158 -NCT00058240 -NCT00054236 -NCT00058461 -NCT00054301 -NCT00058526 -NCT00054327 -NCT00058604 -NCT00054431 -NCT00058656 -NCT00054457 -NCT00058760 -NCT00054548 -NCT00058812 -NCT00054587 -NCT00059410 -NCT00054639 -NCT00059423 -NCT00054665 -NCT00059449 -NCT00054704 -NCT00059501 -NCT00054730 -NCT00059592 -NCT00054756 -NCT00059748 -NCT00054925 -NCT00059787 -NCT00055029 -NCT00059826 -NCT00055042 -NCT00059995 -NCT00055055 -NCT00060138 -NCT00055120 -NCT00060242 -NCT00055198 -NCT00060255 -NCT00055302 -NCT00060346 -NCT00055380 -NCT00060372 -NCT00055419 -NCT00060398 -NCT00055445 -NCT00060411 -NCT00055484 -NCT00060463 -NCT00055549 -NCT00060515 -NCT00055588 -NCT00069186 -NCT00060580 -NCT00065052 -NCT00060593 -NCT00065013 -NCT00060606 -NCT00065078 -NCT00060697 -NCT00065143 -NCT00060749 -NCT00065169 -NCT00060970 -NCT00065182 -NCT00060996 -NCT00065221 -NCT00061022 -NCT00065234 -NCT00061048 -NCT00065273 -NCT00061269 -NCT00065286 -NCT00061373 -NCT00065299 -NCT00061581 -NCT00065364 -NCT00061633 -NCT00065585 -NCT00061789 -NCT00065858 -NCT00061815 -NCT00065949 -NCT00061893 -NCT00065975 -NCT00061906 -NCT00066079 -NCT00061932 -NCT00066144 -NCT00061958 -NCT00066183 -NCT00062062 -NCT00066248 -NCT00062075 -NCT00066573 -NCT00062140 -NCT00066690 -NCT00062231 -NCT00066794 -NCT00062348 -NCT00066807 -NCT00062439 -NCT00066846 -NCT00062465 -NCT00066911 -NCT00062504 -NCT00067145 -NCT00062569 -NCT00067327 -NCT00062582 -NCT00067431 -NCT00062595 -NCT00067444 -NCT00062621 -NCT00067496 -NCT00062764 -NCT00067509 -NCT00062881 -NCT00067691 -NCT00062985 -NCT00067821 -NCT00063024 -NCT00067925 -NCT00063076 -NCT00068029 -NCT00063115 -NCT00068042 -NCT00063141 -NCT00068055 -NCT00063180 -NCT00068146 -NCT00063232 -NCT00068159 -NCT00063388 -NCT00068263 -NCT00063401 -NCT00068315 -NCT00063765 -NCT00068341 -NCT00063817 -NCT00068419 -NCT00063856 -NCT00068484 -NCT00063882 -NCT00068510 -NCT00063895 -NCT00068523 -NCT00064090 -NCT00068575 -NCT00064285 -NCT00068588 -NCT00064337 -NCT00068614 -NCT00064363 -NCT00068757 -NCT00064467 -NCT00068822 -NCT00064649 -NCT00068861 -NCT00064766 -NCT00068887 -NCT00064961 -NCT00069056 -NCT00064987 -NCT00077805 -NCT00069199 -NCT00073723 -NCT00069303 -NCT00073541 -NCT00069329 -NCT00073749 -NCT00069550 -NCT00073775 -NCT00069589 -NCT00073788 -NCT00069680 -NCT00073801 -NCT00069823 -NCT00073944 -NCT00069914 -NCT00074282 -NCT00069966 -NCT00074373 -NCT00070057 -NCT00074633 -NCT00070135 -NCT00074685 -NCT00070200 -NCT00074711 -NCT00070278 -NCT00074880 -NCT00070317 -NCT00074932 -NCT00070473 -NCT00075023 -NCT00070499 -NCT00075114 -NCT00070538 -NCT00075166 -NCT00070551 -NCT00075205 -NCT00070564 -NCT00075244 -NCT00070577 -NCT00075335 -NCT00070655 -NCT00075387 -NCT00070694 -NCT00075439 -NCT00070707 -NCT00075465 -NCT00070733 -NCT00075478 -NCT00070902 -NCT00075608 -NCT00070993 -NCT00075621 -NCT00071227 -NCT00075686 -NCT00071305 -NCT00075803 -NCT00071396 -NCT00075816 -NCT00071435 -NCT00076024 -NCT00071526 -NCT00076271 -NCT00071786 -NCT00076336 -NCT00071838 -NCT00076414 -NCT00071942 -NCT00076440 -NCT00071968 -NCT00076505 -NCT00071994 -NCT00076557 -NCT00072020 -NCT00076674 -NCT00072176 -NCT00076726 -NCT00072293 -NCT00076752 -NCT00072462 -NCT00076960 -NCT00072475 -NCT00077012 -NCT00072501 -NCT00077038 -NCT00072592 -NCT00077064 -NCT00072605 -NCT00077103 -NCT00072683 -NCT00077116 -NCT00072709 -NCT00077181 -NCT00072748 -NCT00077194 -NCT00072800 -NCT00077207 -NCT00072826 -NCT00077311 -NCT00072904 -NCT00077350 -NCT00072969 -NCT00077376 -NCT00073073 -NCT00077493 -NCT00073190 -NCT00077532 -NCT00073242 -NCT00077545 -NCT00073463 -NCT00077558 -NCT00073528 -NCT00085709 -NCT00077818 -NCT00081822 -NCT00077909 -NCT00081744 -NCT00077922 -NCT00081835 -NCT00078026 -NCT00081913 -NCT00078078 -NCT00081991 -NCT00078091 -NCT00082017 -NCT00078104 -NCT00082043 -NCT00078195 -NCT00082069 -NCT00078208 -NCT00082108 -NCT00078234 -NCT00082251 -NCT00078338 -NCT00082446 -NCT00078351 -NCT00082654 -NCT00078364 -NCT00082667 -NCT00078403 -NCT00082862 -NCT00078533 -NCT00082914 -NCT00078663 -NCT00082927 -NCT00078715 -NCT00083031 -NCT00078858 -NCT00083135 -NCT00079001 -NCT00083187 -NCT00079053 -NCT00083330 -NCT00079066 -NCT00083356 -NCT00079118 -NCT00083382 -NCT00079235 -NCT00083408 -NCT00079274 -NCT00083499 -NCT00079313 -NCT00083551 -NCT00079378 -NCT00083564 -NCT00079417 -NCT00083577 -NCT00079456 -NCT00083681 -NCT00079521 -NCT00083720 -NCT00079599 -NCT00083798 -NCT00079755 -NCT00083811 -NCT00079768 -NCT00083902 -NCT00079820 -NCT00084097 -NCT00080054 -NCT00084123 -NCT00080067 -NCT00084201 -NCT00080210 -NCT00084279 -NCT00080275 -NCT00084305 -NCT00080288 -NCT00084370 -NCT00080366 -NCT00084409 -NCT00080392 -NCT00084435 -NCT00080405 -NCT00084513 -NCT00080444 -NCT00084656 -NCT00080483 -NCT00084838 -NCT00080535 -NCT00084916 -NCT00080574 -NCT00084981 -NCT00080600 -NCT00085020 -NCT00080613 -NCT00085098 -NCT00080756 -NCT00085124 -NCT00080860 -NCT00085189 -NCT00080925 -NCT00085202 -NCT00081263 -NCT00085293 -NCT00081341 -NCT00085449 -NCT00081432 -NCT00085475 -NCT00081575 -NCT00085657 -NCT00081640 -NCT00085683 -NCT00081731 -NCT00095472 -NCT00085917 -NCT00091494 -NCT00085930 -NCT00091247 -NCT00085995 -NCT00091611 -NCT00086073 -NCT00091702 -NCT00086190 -NCT00091884 -NCT00086359 -NCT00091897 -NCT00086619 -NCT00092144 -NCT00086658 -NCT00092287 -NCT00086671 -NCT00092482 -NCT00086723 -NCT00092521 -NCT00086827 -NCT00092599 -NCT00086840 -NCT00092612 -NCT00086957 -NCT00092625 -NCT00086983 -NCT00092755 -NCT00087074 -NCT00092937 -NCT00087139 -NCT00092976 -NCT00087178 -NCT00093054 -NCT00087204 -NCT00093145 -NCT00087256 -NCT00093158 -NCT00088153 -NCT00093353 -NCT00088309 -NCT00093366 -NCT00088348 -NCT00093418 -NCT00088374 -NCT00093470 -NCT00088426 -NCT00093483 -NCT00088582 -NCT00093600 -NCT00088608 -NCT00093613 -NCT00088699 -NCT00093639 -NCT00088829 -NCT00093743 -NCT00088907 -NCT00093795 -NCT00088959 -NCT00093808 -NCT00089011 -NCT00093860 -NCT00089050 -NCT00093938 -NCT00089167 -NCT00094016 -NCT00089310 -NCT00094055 -NCT00089349 -NCT00094068 -NCT00089401 -NCT00094094 -NCT00089414 -NCT00094120 -NCT00089427 -NCT00094172 -NCT00089531 -NCT00094237 -NCT00089557 -NCT00094354 -NCT00089609 -NCT00094406 -NCT00089739 -NCT00094536 -NCT00089765 -NCT00094562 -NCT00089791 -NCT00094627 -NCT00089830 -NCT00094731 -NCT00090103 -NCT00094887 -NCT00090207 -NCT00094900 -NCT00090337 -NCT00094913 -NCT00090402 -NCT00094939 -NCT00090545 -NCT00094952 -NCT00090896 -NCT00094978 -NCT00091026 -NCT00095082 -NCT00091104 -NCT00095095 -NCT00091130 -NCT00095199 -NCT00091169 -NCT00095459 -NCT00091234 -NCT00174369 -NCT00095563 -NCT00099762 -NCT00095654 -NCT00099593 -NCT00095667 -NCT00099996 -NCT00095693 -NCT00100009 -NCT00095706 -NCT00100061 -NCT00095797 -NCT00100217 -NCT00095836 -NCT00100282 -NCT00095940 -NCT00100321 -NCT00096018 -NCT00100360 -NCT00096122 -NCT00100698 -NCT00096161 -NCT00100802 -NCT00096174 -NCT00100828 -NCT00096213 -NCT00100880 -NCT00096278 -NCT00100919 -NCT00096291 -NCT00100997 -NCT00096369 -NCT00101036 -NCT00096408 -NCT00101114 -NCT00096434 -NCT00171925 -NCT00096473 -NCT00171951 -NCT00096551 -NCT00171964 -NCT00096694 -NCT00172068 -NCT00096798 -NCT00172081 -NCT00096902 -NCT00172107 -NCT00096954 -NCT00172120 -NCT00097162 -NCT00172172 -NCT00097331 -NCT00172341 -NCT00097396 -NCT00172354 -NCT00097422 -NCT00172419 -NCT00097448 -NCT00172445 -NCT00097513 -NCT00172523 -NCT00097526 -NCT00172549 -NCT00097552 -NCT00172588 -NCT00097734 -NCT00172601 -NCT00097760 -NCT00172653 -NCT00097981 -NCT00172666 -NCT00098046 -NCT00172822 -NCT00098072 -NCT00172835 -NCT00098202 -NCT00172952 -NCT00098280 -NCT00173043 -NCT00098384 -NCT00173134 -NCT00098423 -NCT00173186 -NCT00098436 -NCT00173199 -NCT00098475 -NCT00173212 -NCT00098488 -NCT00173264 -NCT00098501 -NCT00173459 -NCT00098527 -NCT00173498 -NCT00098540 -NCT00173628 -NCT00098605 -NCT00173875 -NCT00098670 -NCT00174005 -NCT00098826 -NCT00174018 -NCT00098839 -NCT00174174 -NCT00099255 -NCT00174187 -NCT00099359 -NCT00174252 -NCT00099424 -NCT00174278 -NCT00099463 -NCT00174304 -NCT00099502 -NCT00174330 -NCT00101140 -NCT00171457 -NCT00101153 -NCT00171652 -NCT00101296 -NCT00171665 -NCT00101374 -NCT00171730 -NCT00101595 -NCT00159289 -NCT00159302 -NCT00159341 -NCT00159354 -NCT00159367 -NCT00159406 -NCT00159419 -NCT00159861 -NCT00159913 -NCT00159991 -NCT00160082 -NCT00160264 -NCT00160303 -NCT00160316 -NCT00160433 -NCT00160446 -NCT00160550 -NCT00160693 -NCT00160719 -NCT00160771 -NCT00160797 -NCT00160940 -NCT00161005 -NCT00161031 -NCT00161083 -NCT00161187 -NCT00161200 -NCT00161226 -NCT00161291 -NCT00161304 -NCT00161330 -NCT00161421 -NCT00161447 -NCT00161473 -NCT00161486 -NCT00161902 -NCT00161915 -NCT00161980 -NCT00162513 -NCT00162539 -NCT00162773 -NCT00162825 -NCT00162851 -NCT00162864 -NCT00163007 -NCT00163059 -NCT00163111 -NCT00163189 -NCT00163215 -NCT00163293 -NCT00163306 -NCT00163410 -NCT00163553 -NCT00163566 -NCT00163683 -NCT00163709 -NCT00163943 -NCT00164060 -NCT00164073 -NCT00164125 -NCT00164281 -NCT00164723 -NCT00164957 -NCT00165178 -NCT00165191 -NCT00165490 -NCT00165555 -NCT00165620 -NCT00165646 -NCT00165672 -NCT00165698 -NCT00165828 -NCT00165919 -NCT00165932 -NCT00166205 -NCT00166218 -NCT00166387 -NCT00166400 -NCT00166413 -NCT00166491 -NCT00166543 -NCT00166569 -NCT00166751 -NCT00166777 -NCT00166868 -NCT00166894 -NCT00167219 -NCT00167310 -NCT00167375 -NCT00167596 -NCT00167648 -NCT00167713 -NCT00168051 -NCT00168090 -NCT00168220 -NCT00168350 -NCT00168532 -NCT00168636 -NCT00168714 -NCT00168974 -NCT00169000 -NCT00169169 -NCT00169273 -NCT00169325 -NCT00169702 -NCT00169754 -NCT00169767 -NCT00169897 -NCT00170001 -NCT00170261 -NCT00170339 -NCT00170547 -NCT00170781 -NCT00171093 -NCT00171327 -NCT00171886 -NCT00101621 -NCT00159250 -NCT00101647 -NCT00147147 -NCT00147186 -NCT00147251 -NCT00147277 -NCT00147290 -NCT00147316 -NCT00147342 -NCT00147368 -NCT00147420 -NCT00147433 -NCT00147823 -NCT00148044 -NCT00148109 -NCT00148122 -NCT00148200 -NCT00148213 -NCT00148343 -NCT00148512 -NCT00148668 -NCT00148681 -NCT00148707 -NCT00148733 -NCT00148772 -NCT00148798 -NCT00148837 -NCT00148863 -NCT00148876 -NCT00148915 -NCT00149045 -NCT00149084 -NCT00149136 -NCT00149162 -NCT00149188 -NCT00149305 -NCT00149318 -NCT00149461 -NCT00149565 -NCT00149656 -NCT00149721 -NCT00149838 -NCT00149851 -NCT00149877 -NCT00150033 -NCT00150111 -NCT00150397 -NCT00150644 -NCT00150774 -NCT00150969 -NCT00151034 -NCT00151125 -NCT00151385 -NCT00151437 -NCT00151723 -NCT00151736 -NCT00151801 -NCT00152243 -NCT00152282 -NCT00152321 -NCT00152451 -NCT00152503 -NCT00152581 -NCT00152620 -NCT00152685 -NCT00153062 -NCT00153114 -NCT00153751 -NCT00153777 -NCT00153816 -NCT00153933 -NCT00153972 -NCT00153998 -NCT00154076 -NCT00154102 -NCT00154440 -NCT00154479 -NCT00154505 -NCT00154570 -NCT00154583 -NCT00154596 -NCT00154622 -NCT00154635 -NCT00154830 -NCT00154843 -NCT00154869 -NCT00154934 -NCT00155025 -NCT00155051 -NCT00155077 -NCT00155168 -NCT00155194 -NCT00155311 -NCT00155363 -NCT00155545 -NCT00155740 -NCT00155753 -NCT00155766 -NCT00155792 -NCT00155805 -NCT00155857 -NCT00155870 -NCT00155922 -NCT00156442 -NCT00156520 -NCT00156533 -NCT00156546 -NCT00156559 -NCT00156650 -NCT00156728 -NCT00156767 -NCT00156780 -NCT00156819 -NCT00157105 -NCT00157482 -NCT00157534 -NCT00157586 -NCT00157690 -NCT00158301 -NCT00158366 -NCT00158522 -NCT00158613 -NCT00158665 -NCT00158743 -NCT00101660 -NCT00146679 -NCT00101712 -NCT00146731 -NCT00101725 -NCT00147069 -NCT00101790 -NCT00147082 -NCT00101829 -NCT00136552 -NCT00136643 -NCT00136669 -NCT00136695 -NCT00136708 -NCT00136721 -NCT00136747 -NCT00136773 -NCT00136786 -NCT00136838 -NCT00136877 -NCT00136942 -NCT00136981 -NCT00137319 -NCT00137462 -NCT00137722 -NCT00137839 -NCT00137995 -NCT00138099 -NCT00138125 -NCT00138138 -NCT00138164 -NCT00138385 -NCT00138476 -NCT00138684 -NCT00138918 -NCT00139113 -NCT00139178 -NCT00139282 -NCT00139425 -NCT00139685 -NCT00139776 -NCT00139828 -NCT00139880 -NCT00139893 -NCT00140010 -NCT00140088 -NCT00140101 -NCT00140140 -NCT00140153 -NCT00140205 -NCT00140231 -NCT00140309 -NCT00140413 -NCT00140439 -NCT00140491 -NCT00140517 -NCT00140556 -NCT00140569 -NCT00140647 -NCT00140699 -NCT00140738 -NCT00140868 -NCT00140998 -NCT00141089 -NCT00141843 -NCT00141869 -NCT00141882 -NCT00141960 -NCT00141986 -NCT00142038 -NCT00142077 -NCT00142090 -NCT00142272 -NCT00142363 -NCT00142402 -NCT00142428 -NCT00142558 -NCT00142584 -NCT00142610 -NCT00142792 -NCT00142805 -NCT00142987 -NCT00143026 -NCT00143039 -NCT00143052 -NCT00143078 -NCT00143221 -NCT00143416 -NCT00143546 -NCT00143598 -NCT00143611 -NCT00143715 -NCT00143741 -NCT00143754 -NCT00143793 -NCT00143949 -NCT00143988 -NCT00144196 -NCT00144235 -NCT00144313 -NCT00144339 -NCT00144391 -NCT00144404 -NCT00144417 -NCT00144456 -NCT00145080 -NCT00145288 -NCT00145405 -NCT00145483 -NCT00145691 -NCT00145886 -NCT00145938 -NCT00145977 -NCT00146042 -NCT00146055 -NCT00146120 -NCT00146146 -NCT00146172 -NCT00146185 -NCT00146211 -NCT00146354 -NCT00146367 -NCT00146536 -NCT00146549 -NCT00147095 -NCT00101920 -NCT00132561 -NCT00101933 -NCT00132613 -NCT00102089 -NCT00132951 -NCT00102102 -NCT00133276 -NCT00102154 -NCT00133406 -NCT00102258 -NCT00133419 -NCT00102401 -NCT00133432 -NCT00102453 -NCT00133510 -NCT00102492 -NCT00133562 -NCT00102557 -NCT00133575 -NCT00102570 -NCT00133588 -NCT00102596 -NCT00133679 -NCT00102661 -NCT00133783 -NCT00102739 -NCT00133809 -NCT00102765 -NCT00133835 -NCT00102791 -NCT00133991 -NCT00102817 -NCT00134004 -NCT00102882 -NCT00134017 -NCT00102908 -NCT00134043 -NCT00102934 -NCT00134069 -NCT00103155 -NCT00134173 -NCT00103181 -NCT00134199 -NCT00103194 -NCT00134238 -NCT00103207 -NCT00134420 -NCT00103233 -NCT00134485 -NCT00103259 -NCT00134511 -NCT00103272 -NCT00134537 -NCT00103285 -NCT00134550 -NCT00103298 -NCT00134680 -NCT00103324 -NCT00134732 -NCT00103415 -NCT00134745 -NCT00103506 -NCT00134784 -NCT00103558 -NCT00134823 -NCT00103740 -NCT00135122 -NCT00103792 -NCT00135135 -NCT00103818 -NCT00135148 -NCT00103844 -NCT00135200 -NCT00104000 -NCT00135551 -NCT00104065 -NCT00135603 -NCT00104299 -NCT00135707 -NCT00104468 -NCT00135733 -NCT00104520 -NCT00135915 -NCT00104572 -NCT00136032 -NCT00104611 -NCT00136058 -NCT00104923 -NCT00136084 -NCT00104949 -NCT00136110 -NCT00104962 -NCT00136305 -NCT00104975 -NCT00131495 -NCT00131508 -NCT00131586 -NCT00131911 -NCT00131963 -NCT00131989 -NCT00132015 -NCT00132080 -NCT00132158 -NCT00132171 -NCT00132236 -NCT00132327 -NCT00132340 -NCT00132366 -NCT00132405 -NCT00132444 -NCT00132496 -NCT00132548 -NCT00136539 -NCT00105001 -NCT00130507 -NCT00105066 -NCT00130533 -NCT00105105 -NCT00130572 -NCT00105131 -NCT00130611 -NCT00105222 -NCT00130689 -NCT00105326 -NCT00130741 -NCT00105378 -NCT00130949 -NCT00105404 -NCT00131014 -NCT00105417 -NCT00131027 -NCT00105430 -NCT00131053 -NCT00105482 -NCT00131157 -NCT00105508 -NCT00131183 -NCT00105547 -NCT00131274 -NCT00105703 -NCT00131482 -NCT00105742 -NCT00124020 -NCT00124033 -NCT00124384 -NCT00124410 -NCT00124579 -NCT00124605 -NCT00124722 -NCT00124813 -NCT00124930 -NCT00125164 -NCT00125190 -NCT00125281 -NCT00125437 -NCT00125476 -NCT00125489 -NCT00125658 -NCT00125671 -NCT00125788 -NCT00125918 -NCT00125957 -NCT00126035 -NCT00126048 -NCT00126139 -NCT00126191 -NCT00126243 -NCT00126386 -NCT00126399 -NCT00126464 -NCT00126503 -NCT00126581 -NCT00126620 -NCT00126646 -NCT00126698 -NCT00126763 -NCT00126841 -NCT00126867 -NCT00126945 -NCT00126958 -NCT00127205 -NCT00127257 -NCT00127322 -NCT00127335 -NCT00127374 -NCT00127439 -NCT00127465 -NCT00127517 -NCT00127608 -NCT00127634 -NCT00127686 -NCT00127842 -NCT00127933 -NCT00127985 -NCT00128011 -NCT00128141 -NCT00128154 -NCT00128193 -NCT00128232 -NCT00128271 -NCT00128310 -NCT00128336 -NCT00128362 -NCT00128492 -NCT00128557 -NCT00128661 -NCT00128687 -NCT00128700 -NCT00128726 -NCT00128739 -NCT00128895 -NCT00128921 -NCT00128973 -NCT00129376 -NCT00129389 -NCT00129428 -NCT00129506 -NCT00129532 -NCT00129701 -NCT00129753 -NCT00129831 -NCT00129896 -NCT00129922 -NCT00129935 -NCT00130000 -NCT00130039 -NCT00130078 -NCT00130182 -NCT00130195 -NCT00130247 -NCT00130325 -NCT00130351 -NCT00130364 -NCT00130468 -NCT00130494 -NCT00105950 -NCT00123864 -NCT00105963 -NCT00113347 -NCT00113373 -NCT00113386 -NCT00113425 -NCT00113503 -NCT00113542 -NCT00113568 -NCT00113581 -NCT00113633 -NCT00113971 -NCT00113997 -NCT00114088 -NCT00114101 -NCT00114114 -NCT00114140 -NCT00114205 -NCT00114257 -NCT00114309 -NCT00114322 -NCT00114426 -NCT00114543 -NCT00114764 -NCT00114816 -NCT00114972 -NCT00115076 -NCT00115336 -NCT00115401 -NCT00115440 -NCT00115570 -NCT00115622 -NCT00115661 -NCT00115700 -NCT00115895 -NCT00116168 -NCT00116311 -NCT00116337 -NCT00116571 -NCT00116753 -NCT00116779 -NCT00116818 -NCT00116935 -NCT00116961 -NCT00117000 -NCT00117013 -NCT00117052 -NCT00117117 -NCT00117182 -NCT00117195 -NCT00117221 -NCT00117260 -NCT00117377 -NCT00117403 -NCT00117533 -NCT00117572 -NCT00117884 -NCT00117962 -NCT00117988 -NCT00118092 -NCT00118157 -NCT00118170 -NCT00118235 -NCT00118248 -NCT00118326 -NCT00118352 -NCT00118482 -NCT00118586 -NCT00118729 -NCT00118820 -NCT00119041 -NCT00119158 -NCT00119197 -NCT00119236 -NCT00119249 -NCT00119366 -NCT00119483 -NCT00119509 -NCT00119626 -NCT00119678 -NCT00119704 -NCT00119730 -NCT00119821 -NCT00120003 -NCT00120094 -NCT00120120 -NCT00120133 -NCT00120159 -NCT00120263 -NCT00120289 -NCT00120432 -NCT00120484 -NCT00120497 -NCT00120562 -NCT00120614 -NCT00120666 -NCT00120744 -NCT00120887 -NCT00120900 -NCT00120978 -NCT00121095 -NCT00121173 -NCT00121303 -NCT00121381 -NCT00121433 -NCT00121563 -NCT00121797 -NCT00121836 -NCT00121875 -NCT00121901 -NCT00121953 -NCT00121992 -NCT00122278 -NCT00122616 -NCT00122681 -NCT00122694 -NCT00122954 -NCT00123006 -NCT00123435 -NCT00123474 -NCT00123487 -NCT00123630 -NCT00123656 -NCT00123799 -NCT00106119 -NCT00110058 -NCT00106132 -NCT00110006 -NCT00106184 -NCT00110214 -NCT00106366 -NCT00110253 -NCT00106496 -NCT00110318 -NCT00106665 -NCT00110500 -NCT00106717 -NCT00110617 -NCT00106743 -NCT00110669 -NCT00106756 -NCT00110695 -NCT00106769 -NCT00110851 -NCT00106795 -NCT00110864 -NCT00106821 -NCT00110890 -NCT00106886 -NCT00110916 -NCT00106938 -NCT00110929 -NCT00106977 -NCT00110968 -NCT00107003 -NCT00111072 -NCT00107081 -NCT00111215 -NCT00107172 -NCT00111241 -NCT00107198 -NCT00111254 -NCT00107211 -NCT00111267 -NCT00107354 -NCT00111293 -NCT00107393 -NCT00111306 -NCT00107419 -NCT00111319 -NCT00107432 -NCT00111384 -NCT00107458 -NCT00111592 -NCT00107523 -NCT00111644 -NCT00107536 -NCT00111657 -NCT00107562 -NCT00111735 -NCT00107601 -NCT00111787 -NCT00107614 -NCT00111839 -NCT00107744 -NCT00111852 -NCT00107783 -NCT00111917 -NCT00107796 -NCT00112151 -NCT00107991 -NCT00112203 -NCT00108134 -NCT00112333 -NCT00108186 -NCT00112385 -NCT00108394 -NCT00112437 -NCT00108420 -NCT00112476 -NCT00108433 -NCT00112515 -NCT00108446 -NCT00112554 -NCT00108485 -NCT00112567 -NCT00108628 -NCT00112593 -NCT00108667 -NCT00112671 -NCT00108680 -NCT00112723 -NCT00108758 -NCT00112736 -NCT00108992 -NCT00112775 -NCT00109148 -NCT00112827 -NCT00109200 -NCT00112853 -NCT00109265 -NCT00112879 -NCT00109395 -NCT00112957 -NCT00109525 -NCT00113022 -NCT00109564 -NCT00113061 -NCT00109616 -NCT00113074 -NCT00109707 -NCT00113152 -NCT00109811 -NCT00113217 -NCT00109837 -NCT00185575 -NCT00174408 -NCT00178672 -NCT00174421 -NCT00178607 -NCT00174434 -NCT00178724 -NCT00174460 -NCT00178763 -NCT00174655 -NCT00178997 -NCT00174941 -NCT00179127 -NCT00174954 -NCT00179400 -NCT00174967 -NCT00179413 -NCT00175006 -NCT00179517 -NCT00175019 -NCT00179647 -NCT00175032 -NCT00179790 -NCT00175045 -NCT00179907 -NCT00175071 -NCT00179933 -NCT00175110 -NCT00180128 -NCT00175149 -NCT00180362 -NCT00175175 -NCT00180518 -NCT00175188 -NCT00180531 -NCT00175214 -NCT00180635 -NCT00175240 -NCT00180661 -NCT00175253 -NCT00180765 -NCT00175266 -NCT00180882 -NCT00175448 -NCT00180895 -NCT00175565 -NCT00180921 -NCT00175617 -NCT00181272 -NCT00175747 -NCT00181623 -NCT00175825 -NCT00182078 -NCT00175838 -NCT00182091 -NCT00175929 -NCT00182208 -NCT00176098 -NCT00182260 -NCT00176150 -NCT00182299 -NCT00176176 -NCT00182481 -NCT00176410 -NCT00182611 -NCT00176462 -NCT00182650 -NCT00176579 -NCT00182702 -NCT00176631 -NCT00182871 -NCT00176696 -NCT00183040 -NCT00176722 -NCT00183066 -NCT00176761 -NCT00183352 -NCT00176956 -NCT00183430 -NCT00177034 -NCT00183456 -NCT00177047 -NCT00183482 -NCT00177320 -NCT00183677 -NCT00177346 -NCT00183911 -NCT00177372 -NCT00183950 -NCT00177385 -NCT00184197 -NCT00177411 -NCT00184236 -NCT00177775 -NCT00184431 -NCT00177892 -NCT00184483 -NCT00177970 -NCT00184548 -NCT00178165 -NCT00184691 -NCT00178204 -NCT00184717 -NCT00178373 -NCT00184756 -NCT00178451 -NCT00184808 -NCT00178490 -NCT00184873 -NCT00178516 -NCT00185458 -NCT00178542 -NCT00199394 -NCT00185692 -NCT00194480 -NCT00185718 -NCT00194402 -NCT00185744 -NCT00194571 -NCT00186017 -NCT00194584 -NCT00186407 -NCT00194597 -NCT00186628 -NCT00194610 -NCT00186719 -NCT00194636 -NCT00186784 -NCT00194675 -NCT00186888 -NCT00194701 -NCT00186940 -NCT00194714 -NCT00187161 -NCT00194753 -NCT00187187 -NCT00194779 -NCT00187291 -NCT00194870 -NCT00187499 -NCT00194922 -NCT00187824 -NCT00194961 -NCT00187863 -NCT00194974 -NCT00188201 -NCT00195052 -NCT00188240 -NCT00195091 -NCT00188344 -NCT00195143 -NCT00188396 -NCT00195286 -NCT00188474 -NCT00195351 -NCT00188500 -NCT00195637 -NCT00188682 -NCT00195741 -NCT00188890 -NCT00195793 -NCT00189163 -NCT00195806 -NCT00189228 -NCT00195871 -NCT00189280 -NCT00195923 -NCT00189436 -NCT00195936 -NCT00189722 -NCT00195975 -NCT00189787 -NCT00195988 -NCT00189930 -NCT00196001 -NCT00190060 -NCT00196313 -NCT00190398 -NCT00196365 -NCT00190502 -NCT00196729 -NCT00190554 -NCT00196768 -NCT00190658 -NCT00196820 -NCT00191074 -NCT00196898 -NCT00191113 -NCT00196937 -NCT00191321 -NCT00196963 -NCT00191373 -NCT00196989 -NCT00191425 -NCT00197418 -NCT00191451 -NCT00197496 -NCT00191529 -NCT00197613 -NCT00192205 -NCT00197652 -NCT00192348 -NCT00197678 -NCT00192413 -NCT00198029 -NCT00192556 -NCT00198718 -NCT00192569 -NCT00198757 -NCT00193063 -NCT00198796 -NCT00193141 -NCT00199030 -NCT00193648 -NCT00199082 -NCT00193661 -NCT00199108 -NCT00194155 -NCT00199147 -NCT00194259 -NCT00199212 -NCT00194285 -NCT00199355 -NCT00194324 -NCT00209456 -NCT00199407 -NCT00204074 -NCT00199420 -NCT00203996 -NCT00199498 -NCT00204165 -NCT00199550 -NCT00204204 -NCT00199810 -NCT00204230 -NCT00200005 -NCT00204269 -NCT00200044 -NCT00204399 -NCT00200057 -NCT00204464 -NCT00200174 -NCT00204503 -NCT00200252 -NCT00204672 -NCT00200304 -NCT00205010 -NCT00200486 -NCT00205361 -NCT00200577 -NCT00205647 -NCT00200655 -NCT00205660 -NCT00200681 -NCT00205855 -NCT00200876 -NCT00205868 -NCT00200902 -NCT00205881 -NCT00200967 -NCT00205907 -NCT00200993 -NCT00205920 -NCT00201058 -NCT00206024 -NCT00201240 -NCT00206206 -NCT00201253 -NCT00206258 -NCT00201292 -NCT00206297 -NCT00201318 -NCT00206375 -NCT00201370 -NCT00206401 -NCT00201383 -NCT00206427 -NCT00201422 -NCT00206466 -NCT00201617 -NCT00206544 -NCT00201721 -NCT00206570 -NCT00201773 -NCT00206830 -NCT00201994 -NCT00206843 -NCT00202111 -NCT00206921 -NCT00202137 -NCT00207012 -NCT00202150 -NCT00207233 -NCT00202163 -NCT00207376 -NCT00202176 -NCT00207519 -NCT00202189 -NCT00207727 -NCT00202228 -NCT00207909 -NCT00202371 -NCT00207935 -NCT00202384 -NCT00207974 -NCT00202397 -NCT00208000 -NCT00202436 -NCT00208221 -NCT00202462 -NCT00208325 -NCT00202670 -NCT00208689 -NCT00202709 -NCT00208819 -NCT00202904 -NCT00208871 -NCT00203034 -NCT00208936 -NCT00203060 -NCT00209027 -NCT00203255 -NCT00209118 -NCT00203268 -NCT00209131 -NCT00203333 -NCT00209144 -NCT00203372 -NCT00209235 -NCT00203554 -NCT00209274 -NCT00203593 -NCT00209326 -NCT00203697 -NCT00209339 -NCT00203931 -NCT00219518 -NCT00209833 -NCT00215384 -NCT00209872 -NCT00215215 -NCT00209898 -NCT00215436 -NCT00210002 -NCT00215449 -NCT00210015 -NCT00215514 -NCT00210119 -NCT00215592 -NCT00210340 -NCT00215618 -NCT00210444 -NCT00215644 -NCT00210483 -NCT00215722 -NCT00210535 -NCT00215748 -NCT00210600 -NCT00215787 -NCT00210886 -NCT00215865 -NCT00210990 -NCT00215930 -NCT00211016 -NCT00215943 -NCT00211081 -NCT00215995 -NCT00211224 -NCT00216021 -NCT00211263 -NCT00216125 -NCT00211276 -NCT00216242 -NCT00211354 -NCT00216320 -NCT00211510 -NCT00216398 -NCT00211536 -NCT00216450 -NCT00211614 -NCT00216489 -NCT00211627 -NCT00216502 -NCT00211692 -NCT00216515 -NCT00211952 -NCT00216567 -NCT00212043 -NCT00216593 -NCT00212108 -NCT00216658 -NCT00212134 -NCT00216736 -NCT00212160 -NCT00216775 -NCT00212225 -NCT00217100 -NCT00212303 -NCT00217178 -NCT00212355 -NCT00217295 -NCT00212368 -NCT00217321 -NCT00212459 -NCT00217347 -NCT00212550 -NCT00217425 -NCT00212576 -NCT00217464 -NCT00212602 -NCT00217503 -NCT00212719 -NCT00217542 -NCT00213005 -NCT00217581 -NCT00213044 -NCT00217594 -NCT00213135 -NCT00217620 -NCT00213252 -NCT00217646 -NCT00213356 -NCT00217672 -NCT00213447 -NCT00217724 -NCT00213590 -NCT00217737 -NCT00213603 -NCT00217815 -NCT00213824 -NCT00217854 -NCT00213941 -NCT00217945 -NCT00214149 -NCT00218855 -NCT00214305 -NCT00218868 -NCT00214448 -NCT00219284 -NCT00214487 -NCT00219427 -NCT00214552 -NCT00219466 -NCT00214708 -NCT00219479 -NCT00214734 -NCT00219492 -NCT00215059 -NCT00230620 -NCT00219570 -NCT00224614 -NCT00219778 -NCT00224536 -NCT00219882 -NCT00224640 -NCT00219999 -NCT00224939 -NCT00220012 -NCT00224991 -NCT00220181 -NCT00225004 -NCT00220272 -NCT00225069 -NCT00220298 -NCT00225160 -NCT00220311 -NCT00225225 -NCT00220350 -NCT00225446 -NCT00220506 -NCT00225537 -NCT00220532 -NCT00225797 -NCT00220545 -NCT00225979 -NCT00220584 -NCT00226083 -NCT00220753 -NCT00226174 -NCT00220935 -NCT00226421 -NCT00220961 -NCT00226577 -NCT00220987 -NCT00226590 -NCT00221013 -NCT00226616 -NCT00221091 -NCT00226798 -NCT00221195 -NCT00227253 -NCT00221325 -NCT00227331 -NCT00221351 -NCT00227448 -NCT00221832 -NCT00227539 -NCT00221845 -NCT00227617 -NCT00221897 -NCT00227630 -NCT00221910 -NCT00227734 -NCT00222079 -NCT00227877 -NCT00222092 -NCT00227929 -NCT00222131 -NCT00227955 -NCT00222183 -NCT00227968 -NCT00222300 -NCT00228150 -NCT00222352 -NCT00228215 -NCT00222417 -NCT00228228 -NCT00222521 -NCT00228267 -NCT00222612 -NCT00228358 -NCT00222651 -NCT00228670 -NCT00222768 -NCT00228878 -NCT00222781 -NCT00228891 -NCT00222872 -NCT00228904 -NCT00222950 -NCT00229021 -NCT00222963 -NCT00229294 -NCT00223275 -NCT00229424 -NCT00223548 -NCT00229502 -NCT00223665 -NCT00229580 -NCT00223743 -NCT00229762 -NCT00223756 -NCT00229918 -NCT00223860 -NCT00229944 -NCT00224042 -NCT00229996 -NCT00224055 -NCT00230087 -NCT00224081 -NCT00230165 -NCT00224107 -NCT00230178 -NCT00224120 -NCT00230282 -NCT00224198 -NCT00230360 -NCT00224211 -NCT00230594 -NCT00224354 -NCT00240162 -NCT00230685 -NCT00235703 -NCT00230750 -NCT00235677 -NCT00230802 -NCT00235716 -NCT00230815 -NCT00235937 -NCT00230854 -NCT00236002 -NCT00230971 -NCT00236080 -NCT00231010 -NCT00236158 -NCT00231023 -NCT00236184 -NCT00231231 -NCT00236197 -NCT00231270 -NCT00236327 -NCT00231387 -NCT00236366 -NCT00231556 -NCT00236392 -NCT00231569 -NCT00236496 -NCT00231686 -NCT00236509 -NCT00231881 -NCT00236561 -NCT00231907 -NCT00236730 -NCT00232219 -NCT00236769 -NCT00232297 -NCT00236782 -NCT00232375 -NCT00236795 -NCT00232453 -NCT00236847 -NCT00232466 -NCT00236860 -NCT00232479 -NCT00236873 -NCT00232505 -NCT00237016 -NCT00232557 -NCT00237055 -NCT00232570 -NCT00237133 -NCT00232583 -NCT00237302 -NCT00232934 -NCT00237354 -NCT00233025 -NCT00237367 -NCT00233038 -NCT00237380 -NCT00233233 -NCT00237497 -NCT00233363 -NCT00237523 -NCT00233454 -NCT00237601 -NCT00233519 -NCT00237627 -NCT00233545 -NCT00237692 -NCT00233610 -NCT00237705 -NCT00233727 -NCT00238043 -NCT00233909 -NCT00238212 -NCT00233922 -NCT00238225 -NCT00233935 -NCT00238290 -NCT00233961 -NCT00238368 -NCT00233974 -NCT00238537 -NCT00233987 -NCT00238641 -NCT00234065 -NCT00238745 -NCT00234143 -NCT00238927 -NCT00234156 -NCT00239161 -NCT00234195 -NCT00239252 -NCT00234247 -NCT00239395 -NCT00234403 -NCT00239538 -NCT00234494 -NCT00239564 -NCT00234533 -NCT00239590 -NCT00234572 -NCT00239629 -NCT00234949 -NCT00239707 -NCT00235131 -NCT00239759 -NCT00235248 -NCT00240097 -NCT00235521 -NCT00240136 -NCT00235599 -NCT00251316 -NCT00240461 -NCT00245518 -NCT00240682 -NCT00245453 -NCT00240734 -NCT00245622 -NCT00240760 -NCT00245661 -NCT00240773 -NCT00245700 -NCT00240786 -NCT00245791 -NCT00240799 -NCT00245856 -NCT00240838 -NCT00245921 -NCT00240929 -NCT00246038 -NCT00240981 -NCT00246064 -NCT00241319 -NCT00246090 -NCT00241358 -NCT00246324 -NCT00241436 -NCT00246389 -NCT00241527 -NCT00246467 -NCT00241553 -NCT00246506 -NCT00241631 -NCT00246558 -NCT00241813 -NCT00246571 -NCT00241904 -NCT00246805 -NCT00242060 -NCT00246896 -NCT00242138 -NCT00246922 -NCT00242177 -NCT00247052 -NCT00242242 -NCT00247169 -NCT00242268 -NCT00247273 -NCT00242281 -NCT00247377 -NCT00242333 -NCT00247533 -NCT00242502 -NCT00247546 -NCT00242541 -NCT00247585 -NCT00242723 -NCT00248105 -NCT00242944 -NCT00248144 -NCT00243139 -NCT00248287 -NCT00243152 -NCT00248443 -NCT00243282 -NCT00248495 -NCT00243360 -NCT00248690 -NCT00243386 -NCT00248859 -NCT00243503 -NCT00249080 -NCT00243620 -NCT00249093 -NCT00243659 -NCT00249743 -NCT00243685 -NCT00250055 -NCT00243789 -NCT00250159 -NCT00243880 -NCT00250250 -NCT00243906 -NCT00250484 -NCT00243945 -NCT00250497 -NCT00243984 -NCT00250536 -NCT00244023 -NCT00250861 -NCT00244153 -NCT00250874 -NCT00244517 -NCT00250978 -NCT00244543 -NCT00250991 -NCT00244582 -NCT00251056 -NCT00244881 -NCT00251108 -NCT00244959 -NCT00251121 -NCT00244972 -NCT00251147 -NCT00245011 -NCT00251212 -NCT00245037 -NCT00251251 -NCT00245102 -NCT00251264 -NCT00245245 -NCT00251277 -NCT00245375 -NCT00261482 -NCT00251329 -NCT00256776 -NCT00251381 -NCT00256685 -NCT00251745 -NCT00256802 -NCT00251758 -NCT00256841 -NCT00251836 -NCT00256984 -NCT00251914 -NCT00257010 -NCT00252018 -NCT00257049 -NCT00252070 -NCT00257309 -NCT00252148 -NCT00257348 -NCT00252239 -NCT00257374 -NCT00252317 -NCT00257582 -NCT00252421 -NCT00257634 -NCT00252603 -NCT00257777 -NCT00252941 -NCT00257842 -NCT00252993 -NCT00257855 -NCT00253084 -NCT00257933 -NCT00253188 -NCT00257985 -NCT00253201 -NCT00257998 -NCT00253214 -NCT00258089 -NCT00253227 -NCT00258102 -NCT00253253 -NCT00258154 -NCT00253305 -NCT00258245 -NCT00253487 -NCT00258284 -NCT00253500 -NCT00258427 -NCT00253539 -NCT00258466 -NCT00253734 -NCT00258518 -NCT00253786 -NCT00258544 -NCT00253981 -NCT00258570 -NCT00254111 -NCT00258661 -NCT00254150 -NCT00258960 -NCT00254371 -NCT00258973 -NCT00254384 -NCT00259610 -NCT00254397 -NCT00259649 -NCT00254423 -NCT00259688 -NCT00254449 -NCT00259779 -NCT00254553 -NCT00259857 -NCT00254566 -NCT00260000 -NCT00254579 -NCT00260039 -NCT00254592 -NCT00260091 -NCT00255073 -NCT00260104 -NCT00255086 -NCT00260143 -NCT00255177 -NCT00260182 -NCT00255242 -NCT00260364 -NCT00255294 -NCT00260572 -NCT00255307 -NCT00260585 -NCT00255346 -NCT00260624 -NCT00255372 -NCT00260663 -NCT00255385 -NCT00260702 -NCT00255398 -NCT00260897 -NCT00256165 -NCT00261001 -NCT00256178 -NCT00261014 -NCT00256217 -NCT00261248 -NCT00256308 -NCT00261300 -NCT00256503 -NCT00261339 -NCT00256529 -NCT00261391 -NCT00256581 -NCT00271310 -NCT00261495 -NCT00266383 -NCT00261508 -NCT00266370 -NCT00261768 -NCT00266487 -NCT00261807 -NCT00266578 -NCT00261846 -NCT00266604 -NCT00261898 -NCT00266656 -NCT00262067 -NCT00266721 -NCT00262080 -NCT00266734 -NCT00262132 -NCT00266864 -NCT00262197 -NCT00266877 -NCT00262210 -NCT00267033 -NCT00262249 -NCT00267085 -NCT00262340 -NCT00267176 -NCT00262626 -NCT00267293 -NCT00262652 -NCT00267618 -NCT00262743 -NCT00267826 -NCT00262808 -NCT00267982 -NCT00263094 -NCT00268060 -NCT00263185 -NCT00268086 -NCT00263198 -NCT00268203 -NCT00263237 -NCT00268229 -NCT00263250 -NCT00268372 -NCT00263289 -NCT00268489 -NCT00263341 -NCT00268580 -NCT00263445 -NCT00268697 -NCT00263536 -NCT00268762 -NCT00263562 -NCT00268814 -NCT00263588 -NCT00268866 -NCT00263744 -NCT00268879 -NCT00263952 -NCT00268931 -NCT00264017 -NCT00269048 -NCT00264121 -NCT00269113 -NCT00264407 -NCT00269165 -NCT00264732 -NCT00269282 -NCT00264810 -NCT00269347 -NCT00264888 -NCT00269399 -NCT00265096 -NCT00269412 -NCT00265148 -NCT00269529 -NCT00265226 -NCT00269568 -NCT00265304 -NCT00270010 -NCT00265447 -NCT00270270 -NCT00265525 -NCT00270309 -NCT00265590 -NCT00270348 -NCT00265707 -NCT00270374 -NCT00265733 -NCT00270478 -NCT00265759 -NCT00270491 -NCT00265798 -NCT00270504 -NCT00265837 -NCT00270608 -NCT00265915 -NCT00270686 -NCT00265941 -NCT00270894 -NCT00266097 -NCT00270920 -NCT00266110 -NCT00271076 -NCT00266214 -NCT00271115 -NCT00266266 -NCT00271128 -NCT00266318 -NCT00271206 -NCT00266357 -NCT00280605 -NCT00271427 -NCT00276640 -NCT00271518 -NCT00276601 -NCT00271583 -NCT00276783 -NCT00271973 -NCT00276926 -NCT00272090 -NCT00277147 -NCT00272116 -NCT00277238 -NCT00272285 -NCT00277277 -NCT00272363 -NCT00277368 -NCT00272376 -NCT00277433 -NCT00272389 -NCT00277472 -NCT00272545 -NCT00277550 -NCT00272610 -NCT00277654 -NCT00272714 -NCT00277680 -NCT00272818 -NCT00277784 -NCT00272883 -NCT00277875 -NCT00273130 -NCT00277966 -NCT00273195 -NCT00278083 -NCT00273208 -NCT00278148 -NCT00273377 -NCT00278408 -NCT00273559 -NCT00278486 -NCT00273572 -NCT00278512 -NCT00273676 -NCT00278551 -NCT00273741 -NCT00278564 -NCT00273962 -NCT00278629 -NCT00274027 -NCT00278798 -NCT00274131 -NCT00278824 -NCT00274170 -NCT00278863 -NCT00274196 -NCT00278876 -NCT00274248 -NCT00279032 -NCT00274261 -NCT00279123 -NCT00274287 -NCT00279136 -NCT00274352 -NCT00279149 -NCT00274378 -NCT00279279 -NCT00274391 -NCT00279344 -NCT00274690 -NCT00279370 -NCT00274781 -NCT00279500 -NCT00274807 -NCT00279526 -NCT00274820 -NCT00279552 -NCT00274846 -NCT00279578 -NCT00274885 -NCT00279643 -NCT00274937 -NCT00279708 -NCT00275028 -NCT00279747 -NCT00275041 -NCT00279825 -NCT00275080 -NCT00279890 -NCT00275145 -NCT00279903 -NCT00275392 -NCT00279916 -NCT00275561 -NCT00280202 -NCT00275691 -NCT00280254 -NCT00275743 -NCT00280267 -NCT00275938 -NCT00280371 -NCT00276068 -NCT00280410 -NCT00276146 -NCT00280423 -NCT00276328 -NCT00280436 -NCT00276393 -NCT00280514 -NCT00276406 -NCT00280592 -NCT00276510 -NCT00289978 -NCT00280657 -NCT00285779 -NCT00280683 -NCT00285649 -NCT00281034 -NCT00285870 -NCT00281138 -NCT00285961 -NCT00281333 -NCT00286052 -NCT00281346 -NCT00286065 -NCT00281398 -NCT00286130 -NCT00281502 -NCT00286208 -NCT00281645 -NCT00286312 -NCT00281684 -NCT00286364 -NCT00281697 -NCT00286429 -NCT00281801 -NCT00286442 -NCT00281814 -NCT00286468 -NCT00281840 -NCT00286507 -NCT00281918 -NCT00286520 -NCT00281931 -NCT00286650 -NCT00282035 -NCT00286663 -NCT00282061 -NCT00286689 -NCT00282074 -NCT00286767 -NCT00282100 -NCT00286884 -NCT00282152 -NCT00286962 -NCT00282191 -NCT00286988 -NCT00282412 -NCT00287001 -NCT00282438 -NCT00287144 -NCT00282607 -NCT00287248 -NCT00282776 -NCT00287339 -NCT00282815 -NCT00287378 -NCT00282854 -NCT00287391 -NCT00283088 -NCT00287456 -NCT00283101 -NCT00287508 -NCT00283153 -NCT00287586 -NCT00283166 -NCT00287625 -NCT00283218 -NCT00288002 -NCT00283283 -NCT00288080 -NCT00283309 -NCT00288171 -NCT00283335 -NCT00288470 -NCT00283361 -NCT00288600 -NCT00283712 -NCT00288652 -NCT00283881 -NCT00288691 -NCT00283894 -NCT00288704 -NCT00284063 -NCT00288821 -NCT00284128 -NCT00288912 -NCT00284180 -NCT00289120 -NCT00284245 -NCT00289159 -NCT00284310 -NCT00289224 -NCT00284440 -NCT00289484 -NCT00284557 -NCT00289536 -NCT00284583 -NCT00289549 -NCT00284622 -NCT00289666 -NCT00284661 -NCT00289718 -NCT00285168 -NCT00289744 -NCT00285194 -NCT00289770 -NCT00285207 -NCT00289796 -NCT00285350 -NCT00289900 -NCT00285467 -NCT00289926 -NCT00285584 -NCT00299494 -NCT00290030 -NCT00294775 -NCT00290134 -NCT00294762 -NCT00290251 -NCT00295022 -NCT00290329 -NCT00295087 -NCT00290498 -NCT00295178 -NCT00290589 -NCT00295204 -NCT00290602 -NCT00295308 -NCT00290641 -NCT00295464 -NCT00290732 -NCT00295490 -NCT00290745 -NCT00295503 -NCT00290810 -NCT00295516 -NCT00290862 -NCT00295581 -NCT00290940 -NCT00295711 -NCT00290992 -NCT00295724 -NCT00291122 -NCT00295828 -NCT00291148 -NCT00295841 -NCT00291161 -NCT00295867 -NCT00291265 -NCT00295893 -NCT00291395 -NCT00295919 -NCT00291421 -NCT00295997 -NCT00291577 -NCT00296010 -NCT00291642 -NCT00296023 -NCT00291733 -NCT00296244 -NCT00291980 -NCT00296296 -NCT00292032 -NCT00296491 -NCT00292045 -NCT00296621 -NCT00292344 -NCT00296699 -NCT00292448 -NCT00296764 -NCT00292552 -NCT00296868 -NCT00292695 -NCT00296907 -NCT00292760 -NCT00296933 -NCT00292825 -NCT00296959 -NCT00292838 -NCT00297037 -NCT00292903 -NCT00297154 -NCT00293059 -NCT00297349 -NCT00293072 -NCT00297401 -NCT00293150 -NCT00297492 -NCT00293371 -NCT00297596 -NCT00293410 -NCT00297895 -NCT00293436 -NCT00297908 -NCT00293631 -NCT00297921 -NCT00293657 -NCT00298038 -NCT00293735 -NCT00298116 -NCT00293748 -NCT00298233 -NCT00293852 -NCT00298246 -NCT00294047 -NCT00298337 -NCT00294125 -NCT00298389 -NCT00294229 -NCT00298402 -NCT00294398 -NCT00298454 -NCT00294463 -NCT00298818 -NCT00294593 -NCT00298870 -NCT00294619 -NCT00299039 -NCT00294632 -NCT00299182 -NCT00294658 -NCT00299195 -NCT00294684 -NCT00299312 -NCT00294697 -NCT00306839 -NCT00299949 -NCT00303849 -NCT00299975 -NCT00303823 -NCT00300326 -NCT00303940 -NCT00300378 -NCT00303953 -NCT00300417 -NCT00303966 -NCT00300586 -NCT00303992 -NCT00300625 -NCT00304018 -NCT00300768 -NCT00304070 -NCT00300781 -NCT00304213 -NCT00300807 -NCT00304265 -NCT00300833 -NCT00304278 -NCT00300898 -NCT00304291 -NCT00301119 -NCT00304330 -NCT00301171 -NCT00304356 -NCT00301184 -NCT00304369 -NCT00301249 -NCT00304408 -NCT00301392 -NCT00304447 -NCT00301405 -NCT00304460 -NCT00301418 -NCT00304642 -NCT00301509 -NCT00304668 -NCT00301587 -NCT00304863 -NCT00301639 -NCT00304876 -NCT00301652 -NCT00304889 -NCT00301730 -NCT00304954 -NCT00301808 -NCT00304967 -NCT00301886 -NCT00305032 -NCT00301899 -NCT00305071 -NCT00301912 -NCT00305110 -NCT00301938 -NCT00305149 -NCT00301951 -NCT00305214 -NCT00302068 -NCT00305227 -NCT00302107 -NCT00305344 -NCT00302172 -NCT00305539 -NCT00302211 -NCT00305552 -NCT00302224 -NCT00305604 -NCT00302263 -NCT00305682 -NCT00302315 -NCT00305695 -NCT00302328 -NCT00305734 -NCT00302341 -NCT00305760 -NCT00302367 -NCT00305773 -NCT00302380 -NCT00305786 -NCT00302393 -NCT00305799 -NCT00302406 -NCT00305812 -NCT00302432 -NCT00305825 -NCT00302588 -NCT00305851 -NCT00302874 -NCT00305890 -NCT00302900 -NCT00306033 -NCT00302926 -NCT00306046 -NCT00302991 -NCT00306124 -NCT00303004 -NCT00306189 -NCT00303108 -NCT00306449 -NCT00303355 -NCT00306501 -NCT00303459 -NCT00306748 -NCT00303511 -NCT00306774 -NCT00303732 -NCT00306813 -NCT00303784 -NCT00315770 -NCT00306917 -NCT00311714 -NCT00306995 -NCT00311675 -NCT00307125 -NCT00311831 -NCT00307164 -NCT00311883 -NCT00307190 -NCT00311935 -NCT00307281 -NCT00311987 -NCT00307307 -NCT00312026 -NCT00307346 -NCT00312169 -NCT00307450 -NCT00312208 -NCT00307476 -NCT00312247 -NCT00307593 -NCT00312286 -NCT00307632 -NCT00312390 -NCT00307645 -NCT00312598 -NCT00307658 -NCT00312689 -NCT00307801 -NCT00312832 -NCT00308074 -NCT00312910 -NCT00308113 -NCT00313066 -NCT00308178 -NCT00313092 -NCT00308412 -NCT00313209 -NCT00308490 -NCT00313365 -NCT00309088 -NCT00313404 -NCT00309101 -NCT00313521 -NCT00309114 -NCT00313573 -NCT00309166 -NCT00313586 -NCT00309205 -NCT00313703 -NCT00309257 -NCT00313742 -NCT00309322 -NCT00313963 -NCT00309439 -NCT00314002 -NCT00309478 -NCT00314301 -NCT00309556 -NCT00314405 -NCT00309712 -NCT00314431 -NCT00309790 -NCT00314548 -NCT00309842 -NCT00314652 -NCT00309881 -NCT00314691 -NCT00309959 -NCT00314743 -NCT00309985 -NCT00314795 -NCT00310037 -NCT00314899 -NCT00310089 -NCT00314951 -NCT00310128 -NCT00315081 -NCT00310245 -NCT00315120 -NCT00310258 -NCT00315133 -NCT00310310 -NCT00315159 -NCT00310323 -NCT00315315 -NCT00310349 -NCT00315354 -NCT00310388 -NCT00315380 -NCT00310414 -NCT00315393 -NCT00310531 -NCT00315406 -NCT00310765 -NCT00315432 -NCT00310869 -NCT00315458 -NCT00310882 -NCT00315497 -NCT00311129 -NCT00315523 -NCT00311207 -NCT00315575 -NCT00311246 -NCT00315627 -NCT00311571 -NCT00315666 -NCT00311623 -NCT00315679 -NCT00311649 -NCT00326521 -NCT00315822 -NCT00321477 -NCT00315952 -NCT00321360 -NCT00316108 -NCT00321503 -NCT00316134 -NCT00321555 -NCT00316160 -NCT00321620 -NCT00316342 -NCT00321633 -NCT00316485 -NCT00321724 -NCT00316524 -NCT00321750 -NCT00316576 -NCT00321815 -NCT00316589 -NCT00321828 -NCT00316602 -NCT00322101 -NCT00316732 -NCT00322231 -NCT00316849 -NCT00322751 -NCT00316953 -NCT00322881 -NCT00317057 -NCT00323427 -NCT00317083 -NCT00323479 -NCT00317122 -NCT00323570 -NCT00317252 -NCT00323609 -NCT00317265 -NCT00323635 -NCT00317421 -NCT00323674 -NCT00317447 -NCT00323752 -NCT00317486 -NCT00323804 -NCT00317551 -NCT00323830 -NCT00317564 -NCT00323856 -NCT00317629 -NCT00323960 -NCT00317720 -NCT00323973 -NCT00317733 -NCT00324077 -NCT00317785 -NCT00324090 -NCT00317811 -NCT00324259 -NCT00318097 -NCT00324285 -NCT00318500 -NCT00324389 -NCT00318591 -NCT00324402 -NCT00318708 -NCT00324428 -NCT00318773 -NCT00324610 -NCT00319124 -NCT00324714 -NCT00319137 -NCT00324896 -NCT00319202 -NCT00325078 -NCT00319241 -NCT00325195 -NCT00319358 -NCT00325273 -NCT00319449 -NCT00325416 -NCT00319670 -NCT00325507 -NCT00319748 -NCT00325546 -NCT00319839 -NCT00325572 -NCT00319865 -NCT00325598 -NCT00320385 -NCT00325624 -NCT00320424 -NCT00325650 -NCT00320476 -NCT00325819 -NCT00320580 -NCT00325845 -NCT00320619 -NCT00325897 -NCT00320632 -NCT00325936 -NCT00320840 -NCT00326027 -NCT00321061 -NCT00326170 -NCT00321074 -NCT00326183 -NCT00321087 -NCT00326443 -NCT00321295 -NCT00326495 -NCT00321347 -NCT00338312 -NCT00326560 -NCT00333775 -NCT00326703 -NCT00333749 -NCT00326742 -NCT00333957 -NCT00326820 -NCT00334100 -NCT00326950 -NCT00334139 -NCT00327080 -NCT00334152 -NCT00327132 -NCT00334204 -NCT00327262 -NCT00334542 -NCT00327366 -NCT00334568 -NCT00327548 -NCT00334672 -NCT00327678 -NCT00334685 -NCT00327873 -NCT00334815 -NCT00327951 -NCT00334828 -NCT00327990 -NCT00334932 -NCT00328198 -NCT00334945 -NCT00328250 -NCT00334971 -NCT00328380 -NCT00335023 -NCT00328484 -NCT00335049 -NCT00328549 -NCT00335075 -NCT00328835 -NCT00335348 -NCT00328848 -NCT00335361 -NCT00328926 -NCT00335491 -NCT00329017 -NCT00335543 -NCT00329056 -NCT00335556 -NCT00329069 -NCT00335569 -NCT00329277 -NCT00335738 -NCT00329524 -NCT00335803 -NCT00329602 -NCT00335868 -NCT00329706 -NCT00335920 -NCT00329797 -NCT00335933 -NCT00329901 -NCT00336024 -NCT00330122 -NCT00336076 -NCT00330161 -NCT00336570 -NCT00330252 -NCT00336648 -NCT00330434 -NCT00336895 -NCT00330447 -NCT00336921 -NCT00330707 -NCT00336960 -NCT00330850 -NCT00337064 -NCT00330876 -NCT00337103 -NCT00330993 -NCT00337194 -NCT00331006 -NCT00337259 -NCT00331188 -NCT00337402 -NCT00331474 -NCT00337454 -NCT00331487 -NCT00337558 -NCT00331513 -NCT00337597 -NCT00331552 -NCT00337649 -NCT00331708 -NCT00337766 -NCT00331747 -NCT00337883 -NCT00331812 -NCT00337909 -NCT00332150 -NCT00337974 -NCT00332254 -NCT00338104 -NCT00332449 -NCT00338182 -NCT00332631 -NCT00338208 -NCT00333307 -NCT00338221 -NCT00333333 -NCT00338286 -NCT00333684 -NCT00347815 -NCT00338520 -NCT00342771 -NCT00338624 -NCT00342706 -NCT00338715 -NCT00342862 -NCT00338728 -NCT00343005 -NCT00339105 -NCT00343083 -NCT00339196 -NCT00343148 -NCT00339430 -NCT00343187 -NCT00339560 -NCT00343213 -NCT00339586 -NCT00343252 -NCT00339742 -NCT00343304 -NCT00339846 -NCT00343655 -NCT00339989 -NCT00343798 -NCT00340106 -NCT00344097 -NCT00340158 -NCT00344123 -NCT00340171 -NCT00344266 -NCT00340184 -NCT00344383 -NCT00340275 -NCT00344448 -NCT00340288 -NCT00344487 -NCT00340301 -NCT00344643 -NCT00340509 -NCT00344721 -NCT00340652 -NCT00344773 -NCT00340665 -NCT00344851 -NCT00340678 -NCT00344877 -NCT00340808 -NCT00344994 -NCT00340834 -NCT00345111 -NCT00340899 -NCT00345267 -NCT00340964 -NCT00345345 -NCT00340990 -NCT00345514 -NCT00341003 -NCT00345553 -NCT00341120 -NCT00345579 -NCT00341159 -NCT00345748 -NCT00341250 -NCT00345774 -NCT00341276 -NCT00345826 -NCT00341328 -NCT00345839 -NCT00341367 -NCT00345917 -NCT00341432 -NCT00345969 -NCT00341497 -NCT00346060 -NCT00341549 -NCT00346099 -NCT00341601 -NCT00346255 -NCT00341744 -NCT00346359 -NCT00341822 -NCT00346372 -NCT00341874 -NCT00346775 -NCT00341965 -NCT00346801 -NCT00342043 -NCT00346853 -NCT00342069 -NCT00346905 -NCT00342082 -NCT00346983 -NCT00342121 -NCT00347061 -NCT00342173 -NCT00347139 -NCT00342199 -NCT00347152 -NCT00342290 -NCT00347308 -NCT00342433 -NCT00347451 -NCT00342446 -NCT00347464 -NCT00342511 -NCT00347490 -NCT00342524 -NCT00347516 -NCT00342537 -NCT00347529 -NCT00342589 -NCT00356512 -NCT00348075 -NCT00352664 -NCT00348140 -NCT00352651 -NCT00348166 -NCT00352846 -NCT00348218 -NCT00352872 -NCT00348270 -NCT00352976 -NCT00348309 -NCT00353093 -NCT00348478 -NCT00353158 -NCT00348647 -NCT00353171 -NCT00348660 -NCT00353301 -NCT00348686 -NCT00353340 -NCT00348777 -NCT00353379 -NCT00348816 -NCT00353405 -NCT00348946 -NCT00353431 -NCT00348985 -NCT00353444 -NCT00349037 -NCT00353470 -NCT00349050 -NCT00353548 -NCT00349063 -NCT00353600 -NCT00349453 -NCT00353665 -NCT00349596 -NCT00353717 -NCT00349622 -NCT00353730 -NCT00349635 -NCT00353743 -NCT00349674 -NCT00353782 -NCT00349791 -NCT00353860 -NCT00349843 -NCT00353951 -NCT00349856 -NCT00354068 -NCT00349882 -NCT00354081 -NCT00349895 -NCT00354159 -NCT00349921 -NCT00354276 -NCT00349999 -NCT00354302 -NCT00350194 -NCT00354354 -NCT00350298 -NCT00354575 -NCT00350337 -NCT00354653 -NCT00350753 -NCT00354757 -NCT00350818 -NCT00354809 -NCT00350831 -NCT00354835 -NCT00350896 -NCT00354887 -NCT00350987 -NCT00354939 -NCT00351065 -NCT00354978 -NCT00351208 -NCT00355030 -NCT00351221 -NCT00355108 -NCT00351273 -NCT00355134 -NCT00351403 -NCT00355160 -NCT00351520 -NCT00355394 -NCT00351819 -NCT00355459 -NCT00351858 -NCT00355472 -NCT00351975 -NCT00355576 -NCT00352170 -NCT00355667 -NCT00352313 -NCT00355706 -NCT00352365 -NCT00355823 -NCT00352391 -NCT00355836 -NCT00352430 -NCT00355914 -NCT00352443 -NCT00355927 -NCT00352482 -NCT00356265 -NCT00352495 -NCT00356369 -NCT00352599 -NCT00356382 -NCT00352625 -NCT00365651 -NCT00356603 -NCT00360945 -NCT00356889 -NCT00360932 -NCT00357006 -NCT00361049 -NCT00357019 -NCT00361127 -NCT00357032 -NCT00361179 -NCT00357201 -NCT00361192 -NCT00357292 -NCT00361205 -NCT00357305 -NCT00361218 -NCT00357331 -NCT00361296 -NCT00357383 -NCT00361387 -NCT00357435 -NCT00361439 -NCT00357461 -NCT00361465 -NCT00357539 -NCT00361504 -NCT00357565 -NCT00361582 -NCT00357591 -NCT00361777 -NCT00357656 -NCT00361816 -NCT00357708 -NCT00361920 -NCT00357851 -NCT00361933 -NCT00357864 -NCT00361972 -NCT00357981 -NCT00362063 -NCT00358020 -NCT00362297 -NCT00358072 -NCT00362518 -NCT00358189 -NCT00362570 -NCT00358241 -NCT00362739 -NCT00358371 -NCT00362752 -NCT00358501 -NCT00362843 -NCT00358618 -NCT00362869 -NCT00358631 -NCT00362908 -NCT00358761 -NCT00362986 -NCT00358774 -NCT00363220 -NCT00358813 -NCT00363233 -NCT00358839 -NCT00363662 -NCT00359073 -NCT00363727 -NCT00359177 -NCT00363740 -NCT00359203 -NCT00363857 -NCT00359229 -NCT00364065 -NCT00359268 -NCT00364286 -NCT00359320 -NCT00364481 -NCT00359333 -NCT00364611 -NCT00359411 -NCT00364689 -NCT00359515 -NCT00364780 -NCT00359645 -NCT00364949 -NCT00359710 -NCT00364988 -NCT00359723 -NCT00365092 -NCT00359840 -NCT00365131 -NCT00359853 -NCT00365144 -NCT00359931 -NCT00365157 -NCT00359970 -NCT00365274 -NCT00360373 -NCT00365287 -NCT00360399 -NCT00365365 -NCT00360425 -NCT00365391 -NCT00360607 -NCT00365417 -NCT00360633 -NCT00365456 -NCT00360789 -NCT00365586 -NCT00360828 -NCT00365625 -NCT00360906 -NCT00375180 -NCT00365716 -NCT00370344 -NCT00365846 -NCT00370214 -NCT00365859 -NCT00370383 -NCT00365976 -NCT00370604 -NCT00366132 -NCT00370695 -NCT00366158 -NCT00370799 -NCT00366236 -NCT00370877 -NCT00366392 -NCT00370968 -NCT00366405 -NCT00371033 -NCT00366418 -NCT00371124 -NCT00366496 -NCT00371150 -NCT00366587 -NCT00371163 -NCT00366730 -NCT00371293 -NCT00366782 -NCT00371449 -NCT00366847 -NCT00371462 -NCT00366964 -NCT00371527 -NCT00367003 -NCT00371631 -NCT00367185 -NCT00371657 -NCT00367198 -NCT00371670 -NCT00367250 -NCT00371683 -NCT00367315 -NCT00371943 -NCT00367367 -NCT00372008 -NCT00367432 -NCT00372021 -NCT00367588 -NCT00372177 -NCT00367627 -NCT00372203 -NCT00367796 -NCT00372333 -NCT00367848 -NCT00372424 -NCT00367913 -NCT00372450 -NCT00367952 -NCT00372515 -NCT00368004 -NCT00372580 -NCT00368043 -NCT00372593 -NCT00368173 -NCT00372710 -NCT00368225 -NCT00372801 -NCT00368277 -NCT00372918 -NCT00368303 -NCT00372931 -NCT00368381 -NCT00373139 -NCT00368394 -NCT00373256 -NCT00368446 -NCT00373334 -NCT00368459 -NCT00373425 -NCT00368628 -NCT00373529 -NCT00368693 -NCT00373555 -NCT00368758 -NCT00373594 -NCT00369057 -NCT00373867 -NCT00369096 -NCT00373997 -NCT00369304 -NCT00374036 -NCT00369317 -NCT00374114 -NCT00369590 -NCT00374530 -NCT00369655 -NCT00374543 -NCT00369668 -NCT00374608 -NCT00369707 -NCT00374699 -NCT00369889 -NCT00374751 -NCT00369967 -NCT00375050 -NCT00369980 -NCT00375076 -NCT00370019 -NCT00375115 -NCT00370071 -NCT00375141 -NCT00370084 -NCT00385281 -NCT00375206 -NCT00380029 -NCT00375271 -NCT00379951 -NCT00375323 -NCT00380055 -NCT00375336 -NCT00380068 -NCT00375375 -NCT00380185 -NCT00375388 -NCT00380250 -NCT00375622 -NCT00380289 -NCT00375700 -NCT00380315 -NCT00375778 -NCT00380419 -NCT00375921 -NCT00380614 -NCT00375947 -NCT00381004 -NCT00375973 -NCT00381108 -NCT00376064 -NCT00381134 -NCT00376090 -NCT00381147 -NCT00376181 -NCT00381251 -NCT00376194 -NCT00381433 -NCT00376311 -NCT00381550 -NCT00376441 -NCT00381563 -NCT00376467 -NCT00381641 -NCT00376480 -NCT00381680 -NCT00376506 -NCT00381706 -NCT00376688 -NCT00381888 -NCT00376727 -NCT00381914 -NCT00376766 -NCT00381966 -NCT00376870 -NCT00382057 -NCT00376948 -NCT00382070 -NCT00377208 -NCT00382109 -NCT00377247 -NCT00382343 -NCT00377260 -NCT00382447 -NCT00377312 -NCT00382590 -NCT00377364 -NCT00382629 -NCT00377559 -NCT00382681 -NCT00377754 -NCT00382915 -NCT00377949 -NCT00382928 -NCT00378196 -NCT00382941 -NCT00378235 -NCT00382967 -NCT00378365 -NCT00383084 -NCT00378456 -NCT00383097 -NCT00378469 -NCT00383110 -NCT00378534 -NCT00383227 -NCT00378573 -NCT00383357 -NCT00378638 -NCT00383409 -NCT00378664 -NCT00383474 -NCT00378677 -NCT00383591 -NCT00378690 -NCT00383643 -NCT00378755 -NCT00383669 -NCT00378846 -NCT00383708 -NCT00378898 -NCT00383799 -NCT00378937 -NCT00383916 -NCT00379015 -NCT00384046 -NCT00379184 -NCT00384267 -NCT00379223 -NCT00384527 -NCT00379275 -NCT00384618 -NCT00379288 -NCT00384761 -NCT00379340 -NCT00384878 -NCT00379821 -NCT00394290 -NCT00385346 -NCT00390143 -NCT00385385 -NCT00390104 -NCT00385749 -NCT00390195 -NCT00385788 -NCT00390221 -NCT00386113 -NCT00390299 -NCT00386178 -NCT00390390 -NCT00386282 -NCT00390429 -NCT00386308 -NCT00390455 -NCT00386360 -NCT00390663 -NCT00386620 -NCT00390741 -NCT00386633 -NCT00390793 -NCT00386672 -NCT00391066 -NCT00386685 -NCT00391092 -NCT00386737 -NCT00391157 -NCT00386776 -NCT00391300 -NCT00386880 -NCT00391417 -NCT00386906 -NCT00391664 -NCT00386958 -NCT00391690 -NCT00387179 -NCT00391703 -NCT00387192 -NCT00391781 -NCT00387244 -NCT00391794 -NCT00387283 -NCT00391976 -NCT00387374 -NCT00391989 -NCT00387582 -NCT00392067 -NCT00387842 -NCT00392080 -NCT00387907 -NCT00392093 -NCT00388089 -NCT00392171 -NCT00388141 -NCT00392327 -NCT00388258 -NCT00392392 -NCT00388297 -NCT00392457 -NCT00388401 -NCT00392496 -NCT00388479 -NCT00392652 -NCT00388505 -NCT00392756 -NCT00388531 -NCT00392769 -NCT00388609 -NCT00392808 -NCT00388661 -NCT00392834 -NCT00388726 -NCT00392873 -NCT00388921 -NCT00392912 -NCT00389038 -NCT00392938 -NCT00389090 -NCT00392951 -NCT00389142 -NCT00392990 -NCT00389272 -NCT00393159 -NCT00389376 -NCT00393172 -NCT00389428 -NCT00393250 -NCT00389467 -NCT00393263 -NCT00389649 -NCT00393380 -NCT00389714 -NCT00393874 -NCT00389805 -NCT00393900 -NCT00389818 -NCT00393913 -NCT00389870 -NCT00393939 -NCT00389922 -NCT00394043 -NCT00389935 -NCT00394082 -NCT00389948 -NCT00394147 -NCT00390039 -NCT00394225 -NCT00390065 -NCT00394251 -NCT00390091 -NCT00403975 -NCT00394316 -NCT00398333 -NCT00394329 -NCT00398151 -NCT00394407 -NCT00398437 -NCT00394472 -NCT00398489 -NCT00394524 -NCT00398541 -NCT00394537 -NCT00398567 -NCT00394784 -NCT00398580 -NCT00394888 -NCT00398775 -NCT00394901 -NCT00398866 -NCT00394940 -NCT00399048 -NCT00394966 -NCT00399165 -NCT00395135 -NCT00399269 -NCT00395161 -NCT00399373 -NCT00395226 -NCT00399399 -NCT00395291 -NCT00399516 -NCT00395304 -NCT00399529 -NCT00395330 -NCT00399542 -NCT00395369 -NCT00399646 -NCT00395408 -NCT00400140 -NCT00395538 -NCT00400465 -NCT00395590 -NCT00400530 -NCT00395616 -NCT00400816 -NCT00395629 -NCT00400946 -NCT00395694 -NCT00400998 -NCT00395967 -NCT00401011 -NCT00396084 -NCT00401193 -NCT00396097 -NCT00401219 -NCT00396188 -NCT00401245 -NCT00396305 -NCT00401271 -NCT00396370 -NCT00401297 -NCT00396396 -NCT00401427 -NCT00396435 -NCT00401518 -NCT00396474 -NCT00401934 -NCT00396513 -NCT00401999 -NCT00396604 -NCT00402077 -NCT00396643 -NCT00402545 -NCT00396773 -NCT00402623 -NCT00397215 -NCT00402688 -NCT00397267 -NCT00402727 -NCT00397345 -NCT00402896 -NCT00397358 -NCT00402935 -NCT00397384 -NCT00402974 -NCT00397423 -NCT00403039 -NCT00397462 -NCT00403104 -NCT00397475 -NCT00403273 -NCT00397501 -NCT00403338 -NCT00397579 -NCT00403390 -NCT00397657 -NCT00403507 -NCT00397670 -NCT00403520 -NCT00397683 -NCT00403572 -NCT00397787 -NCT00403598 -NCT00397813 -NCT00403819 -NCT00397839 -NCT00403884 -NCT00398034 -NCT00403897 -NCT00398112 -NCT00403949 -NCT00398138 -NCT00412971 -NCT00404066 -NCT00409331 -NCT00404079 -NCT00409214 -NCT00404118 -NCT00409357 -NCT00404222 -NCT00409383 -NCT00404586 -NCT00409435 -NCT00404625 -NCT00409500 -NCT00404664 -NCT00409630 -NCT00404859 -NCT00409721 -NCT00404937 -NCT00409747 -NCT00405119 -NCT00409864 -NCT00405145 -NCT00409968 -NCT00405236 -NCT00410059 -NCT00405340 -NCT00410189 -NCT00405366 -NCT00410228 -NCT00405509 -NCT00410293 -NCT00405587 -NCT00410306 -NCT00405613 -NCT00410540 -NCT00405639 -NCT00410579 -NCT00405756 -NCT00410592 -NCT00405782 -NCT00410605 -NCT00405847 -NCT00410618 -NCT00405860 -NCT00410670 -NCT00405938 -NCT00410761 -NCT00406198 -NCT00410774 -NCT00406770 -NCT00410852 -NCT00406874 -NCT00410995 -NCT00406926 -NCT00411034 -NCT00406978 -NCT00411047 -NCT00407329 -NCT00411112 -NCT00407355 -NCT00411151 -NCT00407381 -NCT00411216 -NCT00407446 -NCT00411255 -NCT00407472 -NCT00411281 -NCT00407537 -NCT00411307 -NCT00407576 -NCT00411346 -NCT00407602 -NCT00411372 -NCT00407680 -NCT00411450 -NCT00407706 -NCT00411567 -NCT00407797 -NCT00411619 -NCT00407888 -NCT00411632 -NCT00407966 -NCT00411671 -NCT00408005 -NCT00411684 -NCT00408031 -NCT00411788 -NCT00408057 -NCT00411801 -NCT00408109 -NCT00412100 -NCT00408148 -NCT00412152 -NCT00408226 -NCT00412360 -NCT00408278 -NCT00412386 -NCT00408408 -NCT00412412 -NCT00408447 -NCT00412542 -NCT00408473 -NCT00412607 -NCT00408499 -NCT00412815 -NCT00408902 -NCT00412867 -NCT00408954 -NCT00412880 -NCT00409032 -NCT00412906 -NCT00409149 -NCT00422643 -NCT00413088 -NCT00417781 -NCT00413166 -NCT00417768 -NCT00413244 -NCT00417872 -NCT00413309 -NCT00417898 -NCT00413348 -NCT00417911 -NCT00413387 -NCT00417937 -NCT00413465 -NCT00417963 -NCT00413595 -NCT00418002 -NCT00413621 -NCT00418028 -NCT00413751 -NCT00418054 -NCT00413855 -NCT00418080 -NCT00413920 -NCT00418275 -NCT00413959 -NCT00418301 -NCT00413998 -NCT00418340 -NCT00414024 -NCT00418470 -NCT00414128 -NCT00418639 -NCT00414271 -NCT00418678 -NCT00414336 -NCT00418782 -NCT00414375 -NCT00418925 -NCT00414531 -NCT00418938 -NCT00414557 -NCT00419094 -NCT00414583 -NCT00419133 -NCT00414830 -NCT00419172 -NCT00414843 -NCT00419185 -NCT00414960 -NCT00419263 -NCT00414973 -NCT00419276 -NCT00415077 -NCT00419549 -NCT00415233 -NCT00419562 -NCT00415350 -NCT00419627 -NCT00415376 -NCT00419692 -NCT00415545 -NCT00419731 -NCT00415584 -NCT00419796 -NCT00415610 -NCT00419874 -NCT00415714 -NCT00420147 -NCT00415909 -NCT00420199 -NCT00416143 -NCT00420251 -NCT00416234 -NCT00420394 -NCT00416325 -NCT00420459 -NCT00416364 -NCT00420641 -NCT00416442 -NCT00420654 -NCT00416468 -NCT00420810 -NCT00416585 -NCT00420875 -NCT00416598 -NCT00420992 -NCT00416702 -NCT00421096 -NCT00416728 -NCT00421239 -NCT00416897 -NCT00421369 -NCT00416949 -NCT00421421 -NCT00416962 -NCT00421434 -NCT00417053 -NCT00421460 -NCT00417313 -NCT00421694 -NCT00417352 -NCT00421967 -NCT00417404 -NCT00422188 -NCT00417456 -NCT00422201 -NCT00417547 -NCT00422487 -NCT00417573 -NCT00422630 -NCT00417612 -NCT00430794 -NCT00422695 -NCT00426725 -NCT00422708 -NCT00426686 -NCT00422760 -NCT00426764 -NCT00422773 -NCT00426777 -NCT00422812 -NCT00426842 -NCT00422851 -NCT00426933 -NCT00422903 -NCT00426959 -NCT00422994 -NCT00426985 -NCT00423072 -NCT00427024 -NCT00423085 -NCT00427219 -NCT00423215 -NCT00427323 -NCT00423267 -NCT00427427 -NCT00423319 -NCT00427700 -NCT00423514 -NCT00427726 -NCT00423579 -NCT00427791 -NCT00423735 -NCT00427830 -NCT00423839 -NCT00427947 -NCT00423878 -NCT00428012 -NCT00423917 -NCT00428025 -NCT00424008 -NCT00428038 -NCT00424099 -NCT00428090 -NCT00424242 -NCT00428103 -NCT00424346 -NCT00428142 -NCT00424398 -NCT00428168 -NCT00424489 -NCT00428220 -NCT00424580 -NCT00428558 -NCT00424606 -NCT00428753 -NCT00424619 -NCT00428831 -NCT00424658 -NCT00428922 -NCT00424671 -NCT00428935 -NCT00424736 -NCT00428987 -NCT00424827 -NCT00429104 -NCT00424905 -NCT00429117 -NCT00424996 -NCT00429156 -NCT00425061 -NCT00429182 -NCT00425113 -NCT00429247 -NCT00425165 -NCT00429260 -NCT00425321 -NCT00429299 -NCT00425347 -NCT00429325 -NCT00425477 -NCT00429364 -NCT00425607 -NCT00429533 -NCT00425854 -NCT00429689 -NCT00426127 -NCT00429754 -NCT00426244 -NCT00429832 -NCT00426283 -NCT00429949 -NCT00426374 -NCT00430001 -NCT00426413 -NCT00430014 -NCT00426465 -NCT00430105 -NCT00426478 -NCT00430118 -NCT00426491 -NCT00430287 -NCT00426517 -NCT00430495 -NCT00426530 -NCT00430521 -NCT00426556 -NCT00430599 -NCT00426595 -NCT00430664 -NCT00426621 -NCT00430755 -NCT00426647 -NCT00439673 -NCT00430807 -NCT00435591 -NCT00430859 -NCT00435552 -NCT00430872 -NCT00435604 -NCT00430911 -NCT00435708 -NCT00430937 -NCT00435773 -NCT00431067 -NCT00435942 -NCT00431080 -NCT00436137 -NCT00431197 -NCT00436215 -NCT00431366 -NCT00436488 -NCT00431457 -NCT00436527 -NCT00431496 -NCT00436566 -NCT00431561 -NCT00436579 -NCT00431600 -NCT00436618 -NCT00431626 -NCT00436644 -NCT00431704 -NCT00436683 -NCT00431717 -NCT00436787 -NCT00431756 -NCT00436904 -NCT00431925 -NCT00436956 -NCT00432068 -NCT00437021 -NCT00432146 -NCT00437060 -NCT00432172 -NCT00437086 -NCT00432276 -NCT00437346 -NCT00432393 -NCT00437658 -NCT00432458 -NCT00437684 -NCT00432484 -NCT00437762 -NCT00433056 -NCT00437827 -NCT00433095 -NCT00437840 -NCT00433108 -NCT00437983 -NCT00433160 -NCT00438048 -NCT00433173 -NCT00438061 -NCT00433199 -NCT00438178 -NCT00433329 -NCT00438191 -NCT00433368 -NCT00438243 -NCT00433407 -NCT00438308 -NCT00433498 -NCT00438321 -NCT00433537 -NCT00438334 -NCT00433550 -NCT00438451 -NCT00433589 -NCT00438464 -NCT00433628 -NCT00438568 -NCT00433654 -NCT00438581 -NCT00433680 -NCT00438633 -NCT00433732 -NCT00438672 -NCT00433862 -NCT00438763 -NCT00433901 -NCT00438841 -NCT00433927 -NCT00438854 -NCT00434031 -NCT00438958 -NCT00434096 -NCT00439127 -NCT00434122 -NCT00439231 -NCT00434473 -NCT00439244 -NCT00434551 -NCT00439270 -NCT00434564 -NCT00439387 -NCT00434824 -NCT00439543 -NCT00434876 -NCT00439621 -NCT00435123 -NCT00439647 -NCT00435214 -NCT00439660 -NCT00435526 -NCT00448981 -NCT00439699 -NCT00444691 -NCT00439803 -NCT00444678 -NCT00439816 -NCT00444769 -NCT00440180 -NCT00444873 -NCT00440362 -NCT00444899 -NCT00440440 -NCT00444912 -NCT00440583 -NCT00445003 -NCT00440635 -NCT00445055 -NCT00440661 -NCT00445198 -NCT00440986 -NCT00445224 -NCT00441090 -NCT00445393 -NCT00441103 -NCT00445432 -NCT00441168 -NCT00445458 -NCT00441194 -NCT00445575 -NCT00441415 -NCT00445627 -NCT00441480 -NCT00445744 -NCT00441701 -NCT00445887 -NCT00442000 -NCT00445900 -NCT00442013 -NCT00445913 -NCT00442078 -NCT00445952 -NCT00442117 -NCT00445965 -NCT00442130 -NCT00446030 -NCT00442182 -NCT00446082 -NCT00442195 -NCT00446134 -NCT00442351 -NCT00446225 -NCT00442364 -NCT00446316 -NCT00442390 -NCT00446329 -NCT00442468 -NCT00446355 -NCT00442481 -NCT00446433 -NCT00442767 -NCT00446563 -NCT00442936 -NCT00446823 -NCT00443144 -NCT00446940 -NCT00443170 -NCT00446979 -NCT00443222 -NCT00447018 -NCT00443287 -NCT00447304 -NCT00443313 -NCT00447356 -NCT00443482 -NCT00447395 -NCT00443768 -NCT00447499 -NCT00443781 -NCT00447681 -NCT00443820 -NCT00447915 -NCT00443872 -NCT00447928 -NCT00443898 -NCT00447980 -NCT00443963 -NCT00447993 -NCT00444041 -NCT00448019 -NCT00444119 -NCT00448071 -NCT00444210 -NCT00448201 -NCT00444236 -NCT00448279 -NCT00444275 -NCT00448292 -NCT00444288 -NCT00448357 -NCT00444353 -NCT00448422 -NCT00444392 -NCT00448474 -NCT00444405 -NCT00448591 -NCT00444535 -NCT00448682 -NCT00444561 -NCT00448851 -NCT00444587 -NCT00448955 -NCT00444639 -NCT00457145 -NCT00449072 -NCT00453206 -NCT00449124 -NCT00453128 -NCT00449462 -NCT00453245 -NCT00449514 -NCT00453427 -NCT00449540 -NCT00453453 -NCT00449670 -NCT00453635 -NCT00449748 -NCT00453765 -NCT00449787 -NCT00453791 -NCT00449865 -NCT00453830 -NCT00450164 -NCT00453843 -NCT00450203 -NCT00453908 -NCT00450281 -NCT00454051 -NCT00450294 -NCT00454142 -NCT00450437 -NCT00454168 -NCT00450463 -NCT00454194 -NCT00450541 -NCT00454207 -NCT00450619 -NCT00454220 -NCT00450697 -NCT00454259 -NCT00450853 -NCT00454285 -NCT00450892 -NCT00454441 -NCT00450996 -NCT00454480 -NCT00451061 -NCT00454571 -NCT00451074 -NCT00454623 -NCT00451204 -NCT00455039 -NCT00451321 -NCT00455078 -NCT00451373 -NCT00455091 -NCT00451490 -NCT00455156 -NCT00451503 -NCT00455234 -NCT00451529 -NCT00455247 -NCT00451555 -NCT00455286 -NCT00451568 -NCT00455312 -NCT00451620 -NCT00455325 -NCT00451789 -NCT00455403 -NCT00451841 -NCT00455429 -NCT00451880 -NCT00455455 -NCT00451893 -NCT00455507 -NCT00451919 -NCT00455598 -NCT00451997 -NCT00455728 -NCT00452036 -NCT00456118 -NCT00452062 -NCT00456157 -NCT00452101 -NCT00456222 -NCT00452140 -NCT00456300 -NCT00452322 -NCT00456313 -NCT00452335 -NCT00456378 -NCT00452348 -NCT00456404 -NCT00452374 -NCT00456508 -NCT00452530 -NCT00456664 -NCT00452543 -NCT00456846 -NCT00452556 -NCT00456885 -NCT00452582 -NCT00456924 -NCT00452699 -NCT00456963 -NCT00452712 -NCT00457002 -NCT00452725 -NCT00457015 -NCT00452855 -NCT00457067 -NCT00452894 -NCT00457132 -NCT00453102 -NCT00465699 -NCT00457184 -NCT00461669 -NCT00457236 -NCT00461591 -NCT00457275 -NCT00461747 -NCT00457288 -NCT00461760 -NCT00457340 -NCT00461864 -NCT00457366 -NCT00461916 -NCT00457509 -NCT00461968 -NCT00457613 -NCT00461994 -NCT00457717 -NCT00462020 -NCT00457951 -NCT00462046 -NCT00458237 -NCT00462098 -NCT00458263 -NCT00462137 -NCT00458276 -NCT00462241 -NCT00458406 -NCT00462267 -NCT00458419 -NCT00462397 -NCT00458458 -NCT00462449 -NCT00458471 -NCT00462475 -NCT00458523 -NCT00462605 -NCT00458562 -NCT00462644 -NCT00458575 -NCT00462657 -NCT00458627 -NCT00462670 -NCT00458705 -NCT00462683 -NCT00458731 -NCT00462735 -NCT00458770 -NCT00462761 -NCT00458796 -NCT00462813 -NCT00458822 -NCT00462865 -NCT00458926 -NCT00462891 -NCT00458991 -NCT00463073 -NCT00459056 -NCT00463112 -NCT00459212 -NCT00463125 -NCT00459329 -NCT00463242 -NCT00459342 -NCT00463294 -NCT00459368 -NCT00463450 -NCT00459433 -NCT00463580 -NCT00459459 -NCT00463762 -NCT00459498 -NCT00463788 -NCT00459537 -NCT00463814 -NCT00459914 -NCT00463853 -NCT00459979 -NCT00463879 -NCT00459992 -NCT00464074 -NCT00460031 -NCT00464295 -NCT00460109 -NCT00464308 -NCT00460174 -NCT00464555 -NCT00460408 -NCT00464581 -NCT00460447 -NCT00464594 -NCT00460538 -NCT00464646 -NCT00460928 -NCT00464711 -NCT00461149 -NCT00464919 -NCT00461162 -NCT00464984 -NCT00461188 -NCT00465101 -NCT00461240 -NCT00465361 -NCT00461370 -NCT00465387 -NCT00461396 -NCT00465426 -NCT00461448 -NCT00465452 -NCT00461526 -NCT00465517 -NCT00461578 -NCT00474669 -NCT00465790 -NCT00469859 -NCT00465907 -NCT00469456 -NCT00465933 -NCT00470119 -NCT00465972 -NCT00470171 -NCT00466102 -NCT00470197 -NCT00466167 -NCT00470353 -NCT00466193 -NCT00470392 -NCT00466271 -NCT00470652 -NCT00466336 -NCT00470704 -NCT00466349 -NCT00470782 -NCT00466375 -NCT00470847 -NCT00466505 -NCT00470977 -NCT00466518 -NCT00470990 -NCT00466635 -NCT00471159 -NCT00466674 -NCT00471237 -NCT00466713 -NCT00471250 -NCT00466739 -NCT00471315 -NCT00466817 -NCT00471497 -NCT00466869 -NCT00471523 -NCT00466921 -NCT00471536 -NCT00467194 -NCT00471627 -NCT00467246 -NCT00471692 -NCT00467350 -NCT00471731 -NCT00467363 -NCT00471796 -NCT00467376 -NCT00471809 -NCT00467597 -NCT00471835 -NCT00467636 -NCT00471861 -NCT00467675 -NCT00471887 -NCT00467701 -NCT00471900 -NCT00467792 -NCT00471952 -NCT00467818 -NCT00472030 -NCT00467831 -NCT00472069 -NCT00467844 -NCT00472186 -NCT00467870 -NCT00472303 -NCT00467896 -NCT00472355 -NCT00467922 -NCT00472485 -NCT00467961 -NCT00472550 -NCT00468013 -NCT00472628 -NCT00468026 -NCT00472680 -NCT00468052 -NCT00472823 -NCT00468065 -NCT00472849 -NCT00468078 -NCT00472901 -NCT00468208 -NCT00473083 -NCT00468299 -NCT00473161 -NCT00468325 -NCT00473291 -NCT00468338 -NCT00473356 -NCT00468403 -NCT00473369 -NCT00468585 -NCT00473408 -NCT00468624 -NCT00473460 -NCT00468715 -NCT00473655 -NCT00468832 -NCT00474162 -NCT00468858 -NCT00474175 -NCT00469079 -NCT00474396 -NCT00469118 -NCT00474409 -NCT00469144 -NCT00474474 -NCT00469196 -NCT00484484 -NCT00474721 -NCT00479830 -NCT00474773 -NCT00479739 -NCT00474838 -NCT00480038 -NCT00474942 -NCT00480272 -NCT00475046 -NCT00480311 -NCT00475150 -NCT00480519 -NCT00475176 -NCT00480545 -NCT00475306 -NCT00480662 -NCT00475436 -NCT00480870 -NCT00475462 -NCT00481052 -NCT00475501 -NCT00481208 -NCT00475514 -NCT00481260 -NCT00475592 -NCT00481403 -NCT00475670 -NCT00481416 -NCT00475683 -NCT00481429 -NCT00475761 -NCT00481598 -NCT00475943 -NCT00481676 -NCT00475982 -NCT00481689 -NCT00476138 -NCT00481754 -NCT00476190 -NCT00481780 -NCT00476203 -NCT00481845 -NCT00476255 -NCT00481871 -NCT00476333 -NCT00481949 -NCT00476398 -NCT00482053 -NCT00476450 -NCT00482066 -NCT00476476 -NCT00482105 -NCT00476489 -NCT00482209 -NCT00476645 -NCT00482248 -NCT00476736 -NCT00482378 -NCT00476775 -NCT00482391 -NCT00476814 -NCT00482612 -NCT00477256 -NCT00482677 -NCT00477399 -NCT00482703 -NCT00477477 -NCT00482833 -NCT00477516 -NCT00482885 -NCT00477620 -NCT00483067 -NCT00477711 -NCT00483119 -NCT00477724 -NCT00483145 -NCT00477750 -NCT00483184 -NCT00477789 -NCT00483236 -NCT00477841 -NCT00483288 -NCT00477971 -NCT00483379 -NCT00478296 -NCT00483418 -NCT00478491 -NCT00483457 -NCT00478504 -NCT00483600 -NCT00478699 -NCT00483704 -NCT00478712 -NCT00483834 -NCT00479011 -NCT00483886 -NCT00479037 -NCT00483912 -NCT00479063 -NCT00483925 -NCT00479154 -NCT00484042 -NCT00479193 -NCT00484068 -NCT00479336 -NCT00484081 -NCT00479479 -NCT00484263 -NCT00479518 -NCT00484458 -NCT00479531 -NCT00494260 -NCT00484679 -NCT00489346 -NCT00484705 -NCT00489333 -NCT00484718 -NCT00489385 -NCT00484783 -NCT00489437 -NCT00484848 -NCT00489463 -NCT00485069 -NCT00489476 -NCT00485277 -NCT00489502 -NCT00485290 -NCT00489918 -NCT00485303 -NCT00490022 -NCT00485316 -NCT00490100 -NCT00485368 -NCT00490139 -NCT00485446 -NCT00490165 -NCT00485576 -NCT00490243 -NCT00485836 -NCT00490386 -NCT00485940 -NCT00490555 -NCT00486109 -NCT00490750 -NCT00486148 -NCT00490789 -NCT00486239 -NCT00490906 -NCT00486278 -NCT00490932 -NCT00486460 -NCT00491218 -NCT00486486 -NCT00491283 -NCT00486603 -NCT00491335 -NCT00486642 -NCT00491400 -NCT00486668 -NCT00491478 -NCT00486759 -NCT00491582 -NCT00486876 -NCT00491816 -NCT00486941 -NCT00491881 -NCT00486980 -NCT00492011 -NCT00487162 -NCT00492154 -NCT00487201 -NCT00492219 -NCT00487279 -NCT00492388 -NCT00487370 -NCT00492401 -NCT00487396 -NCT00492531 -NCT00487422 -NCT00492622 -NCT00487578 -NCT00492726 -NCT00487643 -NCT00492856 -NCT00487695 -NCT00492973 -NCT00487760 -NCT00492999 -NCT00487825 -NCT00493103 -NCT00487838 -NCT00493116 -NCT00487916 -NCT00493129 -NCT00488007 -NCT00493389 -NCT00488033 -NCT00493571 -NCT00488124 -NCT00493636 -NCT00488137 -NCT00493649 -NCT00488267 -NCT00493870 -NCT00488306 -NCT00493935 -NCT00488332 -NCT00493948 -NCT00488410 -NCT00493961 -NCT00488514 -NCT00493974 -NCT00488527 -NCT00493987 -NCT00488540 -NCT00494065 -NCT00488644 -NCT00494169 -NCT00488826 -NCT00494208 -NCT00489281 -NCT00494234 -NCT00489307 -NCT00503750 -NCT00494364 -NCT00499174 -NCT00494442 -NCT00499122 -NCT00494507 -NCT00499291 -NCT00494585 -NCT00499330 -NCT00494624 -NCT00499603 -NCT00494689 -NCT00499616 -NCT00495079 -NCT00499655 -NCT00495157 -NCT00499785 -NCT00495235 -NCT00499837 -NCT00495287 -NCT00499967 -NCT00495365 -NCT00499993 -NCT00495586 -NCT00500175 -NCT00495638 -NCT00500331 -NCT00495690 -NCT00500344 -NCT00495781 -NCT00500435 -NCT00495846 -NCT00500474 -NCT00495872 -NCT00500526 -NCT00496106 -NCT00500552 -NCT00496834 -NCT00500617 -NCT00497094 -NCT00500734 -NCT00497146 -NCT00500747 -NCT00497224 -NCT00500799 -NCT00497263 -NCT00500994 -NCT00497276 -NCT00501059 -NCT00497484 -NCT00501215 -NCT00497523 -NCT00501358 -NCT00497549 -NCT00501371 -NCT00497575 -NCT00501410 -NCT00497653 -NCT00501462 -NCT00497666 -NCT00501748 -NCT00497705 -NCT00501826 -NCT00497809 -NCT00501943 -NCT00497835 -NCT00502047 -NCT00497861 -NCT00502073 -NCT00497913 -NCT00502177 -NCT00497939 -NCT00502320 -NCT00498082 -NCT00502450 -NCT00498095 -NCT00502554 -NCT00498147 -NCT00502593 -NCT00498238 -NCT00502632 -NCT00498394 -NCT00502658 -NCT00498433 -NCT00502684 -NCT00498446 -NCT00502697 -NCT00498485 -NCT00502840 -NCT00498511 -NCT00502905 -NCT00498537 -NCT00502957 -NCT00498667 -NCT00502970 -NCT00498719 -NCT00502983 -NCT00498875 -NCT00503035 -NCT00498901 -NCT00503100 -NCT00498953 -NCT00503152 -NCT00498992 -NCT00503165 -NCT00499005 -NCT00503256 -NCT00499070 -NCT00503347 -NCT00499083 -NCT00503399 -NCT00499109 -NCT00513617 -NCT00503854 -NCT00508989 -NCT00503906 -NCT00508924 -NCT00503919 -NCT00509041 -NCT00504010 -NCT00509080 -NCT00504101 -NCT00509093 -NCT00504153 -NCT00509145 -NCT00504387 -NCT00509197 -NCT00504556 -NCT00509275 -NCT00504634 -NCT00509288 -NCT00504660 -NCT00509431 -NCT00504738 -NCT00509483 -NCT00504764 -NCT00509535 -NCT00505011 -NCT00509652 -NCT00505297 -NCT00509678 -NCT00505414 -NCT00509769 -NCT00505609 -NCT00509782 -NCT00505648 -NCT00510042 -NCT00505752 -NCT00510133 -NCT00505791 -NCT00510172 -NCT00505804 -NCT00510406 -NCT00505882 -NCT00510536 -NCT00506103 -NCT00510549 -NCT00506116 -NCT00510575 -NCT00506194 -NCT00510757 -NCT00506324 -NCT00510783 -NCT00506376 -NCT00510939 -NCT00506532 -NCT00511069 -NCT00506597 -NCT00511316 -NCT00506636 -NCT00511459 -NCT00506831 -NCT00511654 -NCT00506870 -NCT00511693 -NCT00506883 -NCT00511771 -NCT00506922 -NCT00511797 -NCT00506961 -NCT00512070 -NCT00507117 -NCT00512096 -NCT00507195 -NCT00512252 -NCT00507338 -NCT00512304 -NCT00507377 -NCT00512343 -NCT00507416 -NCT00512499 -NCT00507455 -NCT00512564 -NCT00507611 -NCT00512694 -NCT00507728 -NCT00512707 -NCT00507767 -NCT00512746 -NCT00507780 -NCT00512837 -NCT00507806 -NCT00512850 -NCT00507832 -NCT00512941 -NCT00507858 -NCT00512954 -NCT00507871 -NCT00513058 -NCT00507962 -NCT00513071 -NCT00508027 -NCT00513123 -NCT00508066 -NCT00513292 -NCT00508209 -NCT00513370 -NCT00508287 -NCT00513396 -NCT00508326 -NCT00513422 -NCT00508404 -NCT00513461 -NCT00508677 -NCT00524056 -NCT00513656 -NCT00518817 -NCT00513903 -NCT00518635 -NCT00513929 -NCT00518895 -NCT00514020 -NCT00519051 -NCT00514046 -NCT00519077 -NCT00514150 -NCT00519155 -NCT00514462 -NCT00519298 -NCT00514475 -NCT00519311 -NCT00514540 -NCT00519597 -NCT00514592 -NCT00519857 -NCT00514787 -NCT00519935 -NCT00514865 -NCT00520104 -NCT00514982 -NCT00520156 -NCT00515008 -NCT00520182 -NCT00515021 -NCT00520481 -NCT00515034 -NCT00520520 -NCT00515411 -NCT00520611 -NCT00515450 -NCT00520689 -NCT00515476 -NCT00520741 -NCT00515619 -NCT00520884 -NCT00515632 -NCT00520988 -NCT00515710 -NCT00521092 -NCT00515775 -NCT00521118 -NCT00515866 -NCT00521144 -NCT00515892 -NCT00521222 -NCT00516035 -NCT00521300 -NCT00516048 -NCT00521430 -NCT00516074 -NCT00521638 -NCT00516191 -NCT00521729 -NCT00516373 -NCT00521846 -NCT00516399 -NCT00522002 -NCT00516581 -NCT00522093 -NCT00516828 -NCT00522145 -NCT00517023 -NCT00522158 -NCT00517062 -NCT00522288 -NCT00517231 -NCT00522353 -NCT00517257 -NCT00522392 -NCT00517361 -NCT00522431 -NCT00517491 -NCT00522665 -NCT00517712 -NCT00522743 -NCT00517751 -NCT00522847 -NCT00517842 -NCT00522860 -NCT00517881 -NCT00523068 -NCT00517933 -NCT00523107 -NCT00517946 -NCT00523549 -NCT00517959 -NCT00523588 -NCT00518050 -NCT00523666 -NCT00518154 -NCT00523718 -NCT00518310 -NCT00523796 -NCT00518414 -NCT00523835 -NCT00518427 -NCT00523848 -NCT00518466 -NCT00523874 -NCT00518479 -NCT00523926 -NCT00518531 -NCT00523939 -NCT00518570 -NCT00524017 -NCT00518609 -NCT00533871 -NCT00524134 -NCT00528541 -NCT00524147 -NCT00528528 -NCT00524225 -NCT00528762 -NCT00524238 -NCT00528801 -NCT00524251 -NCT00528853 -NCT00524303 -NCT00528866 -NCT00524342 -NCT00529061 -NCT00524381 -NCT00529464 -NCT00524719 -NCT00529529 -NCT00524862 -NCT00529737 -NCT00524888 -NCT00529854 -NCT00524914 -NCT00529997 -NCT00524992 -NCT00530049 -NCT00525044 -NCT00530075 -NCT00525148 -NCT00530179 -NCT00525265 -NCT00530894 -NCT00525551 -NCT00530907 -NCT00525668 -NCT00530946 -NCT00525785 -NCT00530972 -NCT00525967 -NCT00530998 -NCT00526032 -NCT00531024 -NCT00526045 -NCT00531089 -NCT00526084 -NCT00531141 -NCT00526097 -NCT00531219 -NCT00526110 -NCT00531310 -NCT00526214 -NCT00531453 -NCT00526292 -NCT00531505 -NCT00526318 -NCT00531713 -NCT00526357 -NCT00531765 -NCT00526370 -NCT00531791 -NCT00526604 -NCT00531804 -NCT00526630 -NCT00531895 -NCT00526656 -NCT00532077 -NCT00526734 -NCT00532116 -NCT00526812 -NCT00532207 -NCT00526864 -NCT00532259 -NCT00526903 -NCT00532272 -NCT00527228 -NCT00532285 -NCT00527293 -NCT00532337 -NCT00527306 -NCT00532545 -NCT00527371 -NCT00532727 -NCT00527397 -NCT00532740 -NCT00527488 -NCT00532779 -NCT00527514 -NCT00532857 -NCT00527527 -NCT00532883 -NCT00527540 -NCT00533000 -NCT00527605 -NCT00533234 -NCT00527709 -NCT00533364 -NCT00527878 -NCT00533390 -NCT00528008 -NCT00533455 -NCT00528112 -NCT00533611 -NCT00528138 -NCT00533637 -NCT00528216 -NCT00533650 -NCT00528307 -NCT00533676 -NCT00528398 -NCT00533702 -NCT00528476 -NCT00544167 -NCT00533910 -NCT00538824 -NCT00533923 -NCT00538811 -NCT00533949 -NCT00538850 -NCT00533975 -NCT00538876 -NCT00534066 -NCT00539149 -NCT00534118 -NCT00539240 -NCT00534157 -NCT00539409 -NCT00534417 -NCT00539448 -NCT00534430 -NCT00539643 -NCT00534443 -NCT00539656 -NCT00534469 -NCT00540033 -NCT00534508 -NCT00540072 -NCT00534534 -NCT00540189 -NCT00534638 -NCT00540358 -NCT00534677 -NCT00540410 -NCT00534703 -NCT00540475 -NCT00534859 -NCT00540527 -NCT00534937 -NCT00540891 -NCT00535054 -NCT00540956 -NCT00535119 -NCT00541086 -NCT00535158 -NCT00541164 -NCT00535379 -NCT00541177 -NCT00535522 -NCT00541216 -NCT00535561 -NCT00541255 -NCT00535600 -NCT00541554 -NCT00535717 -NCT00541658 -NCT00535899 -NCT00541671 -NCT00536016 -NCT00541723 -NCT00536081 -NCT00541736 -NCT00536146 -NCT00541931 -NCT00536237 -NCT00541957 -NCT00536328 -NCT00542022 -NCT00536367 -NCT00542035 -NCT00536471 -NCT00542100 -NCT00536601 -NCT00542152 -NCT00536718 -NCT00542178 -NCT00536796 -NCT00542191 -NCT00536809 -NCT00542230 -NCT00536965 -NCT00542256 -NCT00537095 -NCT00542412 -NCT00537108 -NCT00542425 -NCT00537173 -NCT00542451 -NCT00537316 -NCT00542503 -NCT00537420 -NCT00542646 -NCT00537524 -NCT00542763 -NCT00537589 -NCT00542867 -NCT00537628 -NCT00542984 -NCT00537654 -NCT00543023 -NCT00537849 -NCT00543218 -NCT00537901 -NCT00543257 -NCT00537940 -NCT00543829 -NCT00537953 -NCT00543959 -NCT00538018 -NCT00543998 -NCT00538694 -NCT00544089 -NCT00538733 -NCT00544115 -NCT00538759 -NCT00555087 -NCT00544219 -NCT00549549 -NCT00544232 -NCT00549445 -NCT00544245 -NCT00549679 -NCT00544466 -NCT00549848 -NCT00544544 -NCT00549926 -NCT00544804 -NCT00550173 -NCT00544869 -NCT00550368 -NCT00544999 -NCT00550459 -NCT00545025 -NCT00550511 -NCT00545064 -NCT00550537 -NCT00545077 -NCT00550771 -NCT00545311 -NCT00550784 -NCT00545454 -NCT00550836 -NCT00545597 -NCT00550862 -NCT00545688 -NCT00550992 -NCT00546026 -NCT00551070 -NCT00546104 -NCT00551161 -NCT00546117 -NCT00551187 -NCT00546156 -NCT00551252 -NCT00546234 -NCT00551304 -NCT00546286 -NCT00551369 -NCT00546377 -NCT00551421 -NCT00546468 -NCT00551460 -NCT00546494 -NCT00551499 -NCT00546507 -NCT00551941 -NCT00546520 -NCT00552045 -NCT00546585 -NCT00552071 -NCT00546715 -NCT00552084 -NCT00546728 -NCT00552097 -NCT00546754 -NCT00552149 -NCT00546832 -NCT00552162 -NCT00546897 -NCT00552253 -NCT00546949 -NCT00552487 -NCT00546988 -NCT00552981 -NCT00547001 -NCT00553150 -NCT00547053 -NCT00553254 -NCT00547131 -NCT00553332 -NCT00547196 -NCT00553358 -NCT00547391 -NCT00553410 -NCT00547456 -NCT00553423 -NCT00547469 -NCT00553449 -NCT00547534 -NCT00553462 -NCT00547625 -NCT00553514 -NCT00547638 -NCT00553605 -NCT00547768 -NCT00553644 -NCT00548041 -NCT00553800 -NCT00548054 -NCT00553917 -NCT00548184 -NCT00554008 -NCT00548301 -NCT00554281 -NCT00548483 -NCT00554476 -NCT00548522 -NCT00554645 -NCT00548821 -NCT00554788 -NCT00548899 -NCT00554814 -NCT00548977 -NCT00554827 -NCT00549172 -NCT00554996 -NCT00549185 -NCT00565864 -NCT00555139 -NCT00560794 -NCT00555152 -NCT00560625 -NCT00555321 -NCT00560833 -NCT00555347 -NCT00560859 -NCT00555529 -NCT00560989 -NCT00555555 -NCT00561106 -NCT00555607 -NCT00561119 -NCT00555620 -NCT00561262 -NCT00555672 -NCT00561431 -NCT00555880 -NCT00561522 -NCT00555919 -NCT00561574 -NCT00555971 -NCT00561652 -NCT00555997 -NCT00561691 -NCT00556114 -NCT00561808 -NCT00556335 -NCT00561821 -NCT00556400 -NCT00561834 -NCT00556413 -NCT00562068 -NCT00556439 -NCT00562276 -NCT00556647 -NCT00562328 -NCT00556686 -NCT00562354 -NCT00556777 -NCT00562640 -NCT00556842 -NCT00562705 -NCT00556907 -NCT00562731 -NCT00556933 -NCT00562796 -NCT00557115 -NCT00562978 -NCT00557141 -NCT00563264 -NCT00557219 -NCT00563290 -NCT00557310 -NCT00563329 -NCT00557336 -NCT00563394 -NCT00557427 -NCT00563433 -NCT00557492 -NCT00563615 -NCT00557544 -NCT00563758 -NCT00557609 -NCT00564005 -NCT00557817 -NCT00564018 -NCT00557908 -NCT00564096 -NCT00558012 -NCT00564135 -NCT00558038 -NCT00564252 -NCT00558103 -NCT00564395 -NCT00558129 -NCT00564460 -NCT00558220 -NCT00564512 -NCT00558480 -NCT00564525 -NCT00558558 -NCT00564629 -NCT00558636 -NCT00564759 -NCT00558896 -NCT00564850 -NCT00559299 -NCT00564889 -NCT00559312 -NCT00565214 -NCT00559390 -NCT00565266 -NCT00559416 -NCT00565513 -NCT00559507 -NCT00565526 -NCT00559754 -NCT00565539 -NCT00559845 -NCT00565552 -NCT00559949 -NCT00565604 -NCT00560053 -NCT00565669 -NCT00560352 -NCT00565760 -NCT00560521 -NCT00565851 -NCT00560586 -NCT00577226 -NCT00565955 -NCT00571246 -NCT00566020 -NCT00571090 -NCT00566033 -NCT00571337 -NCT00566046 -NCT00571415 -NCT00566098 -NCT00571792 -NCT00566137 -NCT00571818 -NCT00566215 -NCT00571844 -NCT00566267 -NCT00571948 -NCT00566280 -NCT00571987 -NCT00566358 -NCT00572000 -NCT00566384 -NCT00572065 -NCT00566579 -NCT00572156 -NCT00566657 -NCT00572299 -NCT00566696 -NCT00572481 -NCT00566995 -NCT00572858 -NCT00567151 -NCT00572936 -NCT00567190 -NCT00573378 -NCT00567333 -NCT00573573 -NCT00567359 -NCT00573586 -NCT00567476 -NCT00573599 -NCT00567554 -NCT00573755 -NCT00567567 -NCT00573807 -NCT00567606 -NCT00573924 -NCT00567645 -NCT00573937 -NCT00568035 -NCT00573989 -NCT00568048 -NCT00574041 -NCT00568126 -NCT00574184 -NCT00568243 -NCT00574301 -NCT00568269 -NCT00574366 -NCT00568295 -NCT00574392 -NCT00568321 -NCT00574535 -NCT00568347 -NCT00574587 -NCT00568386 -NCT00574717 -NCT00568750 -NCT00574795 -NCT00568789 -NCT00574808 -NCT00568802 -NCT00575159 -NCT00569023 -NCT00575276 -NCT00569049 -NCT00575341 -NCT00569062 -NCT00575367 -NCT00569192 -NCT00575588 -NCT00569244 -NCT00575822 -NCT00569283 -NCT00575887 -NCT00569504 -NCT00575913 -NCT00569582 -NCT00575939 -NCT00569751 -NCT00576069 -NCT00569972 -NCT00576082 -NCT00569998 -NCT00576407 -NCT00570154 -NCT00576485 -NCT00570180 -NCT00576498 -NCT00570401 -NCT00576654 -NCT00570544 -NCT00576693 -NCT00570661 -NCT00576810 -NCT00570739 -NCT00576927 -NCT00570804 -NCT00576992 -NCT00571025 -NCT00577018 -NCT00571051 -NCT00587119 -NCT00577330 -NCT00582309 -NCT00577343 -NCT00582049 -NCT00577369 -NCT00582569 -NCT00577499 -NCT00582647 -NCT00577590 -NCT00582660 -NCT00577668 -NCT00582868 -NCT00577707 -NCT00582920 -NCT00577772 -NCT00582946 -NCT00577798 -NCT00583024 -NCT00577876 -NCT00583180 -NCT00577889 -NCT00583284 -NCT00578071 -NCT00583453 -NCT00578240 -NCT00583518 -NCT00578344 -NCT00583570 -NCT00578461 -NCT00583648 -NCT00578474 -NCT00583778 -NCT00578578 -NCT00583895 -NCT00578669 -NCT00584168 -NCT00578773 -NCT00584246 -NCT00578864 -NCT00584259 -NCT00578877 -NCT00584311 -NCT00578942 -NCT00584376 -NCT00579189 -NCT00584389 -NCT00579371 -NCT00584441 -NCT00579410 -NCT00584571 -NCT00579488 -NCT00584610 -NCT00579527 -NCT00584623 -NCT00579540 -NCT00584636 -NCT00579709 -NCT00584727 -NCT00579787 -NCT00584870 -NCT00579865 -NCT00584948 -NCT00580034 -NCT00585039 -NCT00580112 -NCT00585104 -NCT00580138 -NCT00585195 -NCT00580177 -NCT00585494 -NCT00580281 -NCT00585650 -NCT00580307 -NCT00585702 -NCT00580333 -NCT00585715 -NCT00580346 -NCT00585741 -NCT00580372 -NCT00586014 -NCT00580502 -NCT00586092 -NCT00580723 -NCT00586131 -NCT00580749 -NCT00586209 -NCT00580892 -NCT00586313 -NCT00581061 -NCT00586365 -NCT00581087 -NCT00586391 -NCT00581126 -NCT00586404 -NCT00581230 -NCT00586443 -NCT00581308 -NCT00586521 -NCT00581321 -NCT00586651 -NCT00581490 -NCT00586755 -NCT00581529 -NCT00586794 -NCT00581568 -NCT00586924 -NCT00581737 -NCT00586963 -NCT00581867 -NCT00587054 -NCT00581906 -NCT00596115 -NCT00587132 -NCT00591669 -NCT00587171 -NCT00591643 -NCT00587197 -NCT00591838 -NCT00587275 -NCT00591851 -NCT00587314 -NCT00591903 -NCT00587470 -NCT00591942 -NCT00587535 -NCT00591968 -NCT00587691 -NCT00592072 -NCT00587795 -NCT00592540 -NCT00587847 -NCT00592553 -NCT00587873 -NCT00592566 -NCT00587899 -NCT00592618 -NCT00587925 -NCT00592943 -NCT00587938 -NCT00593047 -NCT00588029 -NCT00593138 -NCT00588146 -NCT00593320 -NCT00588224 -NCT00593346 -NCT00588354 -NCT00593528 -NCT00588367 -NCT00593567 -NCT00588445 -NCT00593593 -NCT00588536 -NCT00593697 -NCT00588627 -NCT00593710 -NCT00588809 -NCT00593723 -NCT00588822 -NCT00593736 -NCT00588926 -NCT00593827 -NCT00588939 -NCT00593853 -NCT00588991 -NCT00593892 -NCT00589368 -NCT00593944 -NCT00589472 -NCT00594022 -NCT00589498 -NCT00594061 -NCT00589888 -NCT00594074 -NCT00590005 -NCT00594100 -NCT00590044 -NCT00594126 -NCT00590096 -NCT00594139 -NCT00590135 -NCT00594217 -NCT00590200 -NCT00594425 -NCT00590226 -NCT00594685 -NCT00590252 -NCT00594763 -NCT00590304 -NCT00594867 -NCT00590369 -NCT00594984 -NCT00590408 -NCT00594997 -NCT00590421 -NCT00595101 -NCT00590512 -NCT00595114 -NCT00590525 -NCT00595127 -NCT00590603 -NCT00595140 -NCT00590629 -NCT00595153 -NCT00590655 -NCT00595205 -NCT00590811 -NCT00595387 -NCT00590915 -NCT00595439 -NCT00591019 -NCT00595491 -NCT00591227 -NCT00595530 -NCT00591240 -NCT00595660 -NCT00591344 -NCT00595725 -NCT00591357 -NCT00596011 -NCT00591461 -NCT00596063 -NCT00591526 -NCT00606008 -NCT00596219 -NCT00601471 -NCT00596336 -NCT00601432 -NCT00596362 -NCT00601692 -NCT00596596 -NCT00601705 -NCT00596687 -NCT00601900 -NCT00596752 -NCT00601991 -NCT00596908 -NCT00602056 -NCT00597012 -NCT00602108 -NCT00597051 -NCT00602147 -NCT00597064 -NCT00602225 -NCT00597194 -NCT00602264 -NCT00597376 -NCT00602316 -NCT00597415 -NCT00602355 -NCT00597519 -NCT00602433 -NCT00597623 -NCT00602459 -NCT00597909 -NCT00602511 -NCT00597948 -NCT00602589 -NCT00597987 -NCT00602602 -NCT00598078 -NCT00602641 -NCT00598234 -NCT00602667 -NCT00598338 -NCT00602680 -NCT00598364 -NCT00602771 -NCT00598403 -NCT00602784 -NCT00598494 -NCT00602836 -NCT00598598 -NCT00602862 -NCT00598624 -NCT00602901 -NCT00598754 -NCT00603109 -NCT00598832 -NCT00603187 -NCT00598923 -NCT00603278 -NCT00598949 -NCT00603304 -NCT00598975 -NCT00603382 -NCT00599092 -NCT00603434 -NCT00599209 -NCT00603447 -NCT00599248 -NCT00603655 -NCT00599365 -NCT00603681 -NCT00599482 -NCT00603707 -NCT00599521 -NCT00603746 -NCT00599560 -NCT00603759 -NCT00599716 -NCT00603902 -NCT00599729 -NCT00603967 -NCT00599937 -NCT00604305 -NCT00599989 -NCT00604318 -NCT00600028 -NCT00604370 -NCT00600106 -NCT00604448 -NCT00600275 -NCT00604474 -NCT00600340 -NCT00604539 -NCT00600353 -NCT00604578 -NCT00600431 -NCT00604864 -NCT00600587 -NCT00604916 -NCT00600665 -NCT00604942 -NCT00600808 -NCT00605163 -NCT00600886 -NCT00605319 -NCT00601159 -NCT00605657 -NCT00601289 -NCT00605878 -NCT00601341 -NCT00605891 -NCT00601393 -NCT00616902 -NCT00606060 -NCT00612352 -NCT00606437 -NCT00612248 -NCT00606502 -NCT00612417 -NCT00606684 -NCT00612456 -NCT00606697 -NCT00612560 -NCT00606749 -NCT00612573 -NCT00606840 -NCT00612729 -NCT00606918 -NCT00613054 -NCT00606931 -NCT00613093 -NCT00607087 -NCT00613444 -NCT00607204 -NCT00613457 -NCT00607451 -NCT00613548 -NCT00607685 -NCT00613600 -NCT00607763 -NCT00613717 -NCT00608101 -NCT00613743 -NCT00608140 -NCT00613847 -NCT00608361 -NCT00613886 -NCT00608400 -NCT00613912 -NCT00608452 -NCT00613977 -NCT00608556 -NCT00614042 -NCT00608764 -NCT00614198 -NCT00608777 -NCT00614211 -NCT00608790 -NCT00614354 -NCT00608842 -NCT00614393 -NCT00608868 -NCT00614406 -NCT00608894 -NCT00614653 -NCT00608972 -NCT00614666 -NCT00609063 -NCT00614744 -NCT00609128 -NCT00614809 -NCT00609141 -NCT00614822 -NCT00609609 -NCT00614887 -NCT00609726 -NCT00614900 -NCT00609869 -NCT00614926 -NCT00610025 -NCT00614952 -NCT00610077 -NCT00614978 -NCT00610103 -NCT00615004 -NCT00610363 -NCT00615017 -NCT00610402 -NCT00615147 -NCT00610558 -NCT00615381 -NCT00610597 -NCT00615498 -NCT00610662 -NCT00615537 -NCT00610818 -NCT00615589 -NCT00610909 -NCT00615602 -NCT00610935 -NCT00615628 -NCT00611104 -NCT00615641 -NCT00611182 -NCT00615758 -NCT00611351 -NCT00615836 -NCT00611624 -NCT00616005 -NCT00611650 -NCT00616187 -NCT00611715 -NCT00616278 -NCT00611754 -NCT00616343 -NCT00611767 -NCT00616408 -NCT00612001 -NCT00616499 -NCT00612014 -NCT00616512 -NCT00612066 -NCT00616642 -NCT00612183 -NCT00627497 -NCT00616928 -NCT00622622 -NCT00616967 -NCT00622544 -NCT00617058 -NCT00622674 -NCT00617110 -NCT00622765 -NCT00617227 -NCT00623129 -NCT00617240 -NCT00623220 -NCT00617292 -NCT00623233 -NCT00617513 -NCT00623350 -NCT00617578 -NCT00623454 -NCT00617695 -NCT00623480 -NCT00617721 -NCT00623714 -NCT00617760 -NCT00623727 -NCT00617799 -NCT00623740 -NCT00617825 -NCT00623896 -NCT00617903 -NCT00623961 -NCT00618150 -NCT00624000 -NCT00618293 -NCT00624078 -NCT00618553 -NCT00624169 -NCT00618566 -NCT00624182 -NCT00618644 -NCT00624416 -NCT00618657 -NCT00624481 -NCT00618813 -NCT00624676 -NCT00618826 -NCT00624884 -NCT00618904 -NCT00624936 -NCT00619125 -NCT00624949 -NCT00619190 -NCT00624975 -NCT00619463 -NCT00625001 -NCT00619645 -NCT00625027 -NCT00619671 -NCT00625040 -NCT00619684 -NCT00625053 -NCT00619775 -NCT00625079 -NCT00619957 -NCT00625092 -NCT00619970 -NCT00625118 -NCT00620087 -NCT00625196 -NCT00620113 -NCT00625274 -NCT00620165 -NCT00625404 -NCT00620191 -NCT00625469 -NCT00620269 -NCT00625495 -NCT00620412 -NCT00625534 -NCT00620477 -NCT00625573 -NCT00620594 -NCT00625690 -NCT00620698 -NCT00625742 -NCT00620737 -NCT00625846 -NCT00620828 -NCT00626015 -NCT00620906 -NCT00626080 -NCT00620919 -NCT00626223 -NCT00621205 -NCT00626418 -NCT00621218 -NCT00626483 -NCT00621387 -NCT00626587 -NCT00621439 -NCT00626769 -NCT00621517 -NCT00626938 -NCT00621530 -NCT00626990 -NCT00621673 -NCT00627016 -NCT00621790 -NCT00627211 -NCT00622089 -NCT00627289 -NCT00622115 -NCT00635960 -NCT00627523 -NCT00631657 -NCT00627627 -NCT00631644 -NCT00627640 -NCT00631670 -NCT00627666 -NCT00631735 -NCT00627796 -NCT00631813 -NCT00627965 -NCT00632190 -NCT00628056 -NCT00632242 -NCT00628082 -NCT00632333 -NCT00628108 -NCT00632359 -NCT00628238 -NCT00632593 -NCT00628251 -NCT00632606 -NCT00628329 -NCT00632736 -NCT00628342 -NCT00632801 -NCT00628355 -NCT00632814 -NCT00628498 -NCT00632866 -NCT00628511 -NCT00632892 -NCT00628537 -NCT00633022 -NCT00628602 -NCT00633035 -NCT00628615 -NCT00633191 -NCT00628719 -NCT00633217 -NCT00628745 -NCT00633295 -NCT00628784 -NCT00633386 -NCT00628823 -NCT00633464 -NCT00629005 -NCT00633776 -NCT00629135 -NCT00633828 -NCT00629226 -NCT00633841 -NCT00629239 -NCT00634010 -NCT00629265 -NCT00634140 -NCT00629278 -NCT00634244 -NCT00629486 -NCT00634270 -NCT00629499 -NCT00634296 -NCT00629538 -NCT00634426 -NCT00629564 -NCT00634478 -NCT00629616 -NCT00634517 -NCT00629642 -NCT00634569 -NCT00629668 -NCT00634647 -NCT00629837 -NCT00634777 -NCT00629902 -NCT00635024 -NCT00630006 -NCT00635050 -NCT00630032 -NCT00635063 -NCT00630071 -NCT00635115 -NCT00630084 -NCT00635141 -NCT00630214 -NCT00635271 -NCT00630448 -NCT00635297 -NCT00630461 -NCT00635310 -NCT00630513 -NCT00635349 -NCT00630565 -NCT00635375 -NCT00630591 -NCT00635414 -NCT00630604 -NCT00635583 -NCT00630786 -NCT00635609 -NCT00630838 -NCT00635622 -NCT00631137 -NCT00635804 -NCT00631241 -NCT00635817 -NCT00631267 -NCT00635843 -NCT00631501 -NCT00635934 -NCT00631618 -NCT00647374 -NCT00636103 -NCT00641251 -NCT00636155 -NCT00641108 -NCT00636181 -NCT00641277 -NCT00636298 -NCT00641602 -NCT00636402 -NCT00641667 -NCT00636415 -NCT00641914 -NCT00636597 -NCT00642148 -NCT00636662 -NCT00642161 -NCT00636857 -NCT00642187 -NCT00636935 -NCT00642200 -NCT00637078 -NCT00642421 -NCT00637091 -NCT00642473 -NCT00637182 -NCT00642564 -NCT00637195 -NCT00642616 -NCT00637221 -NCT00642720 -NCT00637260 -NCT00642772 -NCT00637325 -NCT00642863 -NCT00637572 -NCT00643071 -NCT00637676 -NCT00643110 -NCT00637715 -NCT00643149 -NCT00637793 -NCT00643487 -NCT00637845 -NCT00643552 -NCT00637858 -NCT00643591 -NCT00637910 -NCT00644046 -NCT00637962 -NCT00644059 -NCT00638092 -NCT00644319 -NCT00638131 -NCT00644527 -NCT00638144 -NCT00644605 -NCT00638170 -NCT00644657 -NCT00638378 -NCT00644696 -NCT00638443 -NCT00644774 -NCT00638521 -NCT00644839 -NCT00638534 -NCT00644891 -NCT00638677 -NCT00644943 -NCT00639041 -NCT00645112 -NCT00639054 -NCT00645125 -NCT00639067 -NCT00645177 -NCT00639080 -NCT00645203 -NCT00639223 -NCT00645424 -NCT00639392 -NCT00645489 -NCT00639431 -NCT00645541 -NCT00639470 -NCT00645606 -NCT00639808 -NCT00645619 -NCT00640120 -NCT00645749 -NCT00640172 -NCT00645996 -NCT00640237 -NCT00646204 -NCT00640289 -NCT00646282 -NCT00640315 -NCT00646295 -NCT00640328 -NCT00646308 -NCT00640471 -NCT00646347 -NCT00640549 -NCT00646451 -NCT00640744 -NCT00646490 -NCT00640757 -NCT00646958 -NCT00640926 -NCT00647088 -NCT00640939 -NCT00647283 -NCT00641030 -NCT00659672 -NCT00647530 -NCT00654498 -NCT00647790 -NCT00654485 -NCT00647855 -NCT00654563 -NCT00647868 -NCT00654615 -NCT00648245 -NCT00654628 -NCT00648258 -NCT00654745 -NCT00648323 -NCT00654784 -NCT00648700 -NCT00654927 -NCT00648739 -NCT00655057 -NCT00648882 -NCT00655109 -NCT00649025 -NCT00655278 -NCT00649142 -NCT00655369 -NCT00649337 -NCT00655499 -NCT00649415 -NCT00655616 -NCT00649766 -NCT00655915 -NCT00649961 -NCT00655967 -NCT00650403 -NCT00655993 -NCT00650689 -NCT00656058 -NCT00650728 -NCT00656227 -NCT00650806 -NCT00656279 -NCT00650858 -NCT00656318 -NCT00650910 -NCT00656370 -NCT00650923 -NCT00656747 -NCT00651040 -NCT00656786 -NCT00651079 -NCT00656877 -NCT00651235 -NCT00656981 -NCT00651261 -NCT00657046 -NCT00651313 -NCT00657072 -NCT00651326 -NCT00657085 -NCT00651352 -NCT00657111 -NCT00651378 -NCT00657228 -NCT00651469 -NCT00657410 -NCT00651768 -NCT00657449 -NCT00651807 -NCT00657618 -NCT00651937 -NCT00657670 -NCT00652093 -NCT00657774 -NCT00652184 -NCT00657826 -NCT00652366 -NCT00657917 -NCT00652379 -NCT00657969 -NCT00652964 -NCT00657982 -NCT00653068 -NCT00658060 -NCT00653185 -NCT00658086 -NCT00653250 -NCT00658099 -NCT00653393 -NCT00658151 -NCT00653471 -NCT00658164 -NCT00653614 -NCT00658190 -NCT00653627 -NCT00658593 -NCT00653874 -NCT00658619 -NCT00654056 -NCT00658736 -NCT00654108 -NCT00658749 -NCT00654121 -NCT00658814 -NCT00654160 -NCT00659087 -NCT00654212 -NCT00659425 -NCT00654264 -NCT00659542 -NCT00654407 -NCT00659646 -NCT00654472 -NCT00670501 -NCT00659906 -NCT00665184 -NCT00659958 -NCT00665171 -NCT00660010 -NCT00665210 -NCT00660166 -NCT00665236 -NCT00660244 -NCT00665470 -NCT00660582 -NCT00665548 -NCT00660660 -NCT00666276 -NCT00660829 -NCT00666328 -NCT00660894 -NCT00666471 -NCT00661440 -NCT00666562 -NCT00661466 -NCT00666588 -NCT00661557 -NCT00666640 -NCT00661817 -NCT00666653 -NCT00661882 -NCT00666887 -NCT00661999 -NCT00667121 -NCT00662012 -NCT00667251 -NCT00662064 -NCT00667329 -NCT00662129 -NCT00667394 -NCT00662194 -NCT00667407 -NCT00662259 -NCT00667420 -NCT00662298 -NCT00667498 -NCT00662350 -NCT00667524 -NCT00662363 -NCT00667602 -NCT00662454 -NCT00667667 -NCT00662506 -NCT00667810 -NCT00662610 -NCT00667836 -NCT00662675 -NCT00667901 -NCT00662753 -NCT00668109 -NCT00662896 -NCT00668122 -NCT00662961 -NCT00668200 -NCT00663026 -NCT00668330 -NCT00663143 -NCT00668343 -NCT00663169 -NCT00668369 -NCT00663182 -NCT00668408 -NCT00663208 -NCT00668421 -NCT00663247 -NCT00668434 -NCT00663338 -NCT00668980 -NCT00663481 -NCT00669019 -NCT00663507 -NCT00669032 -NCT00663546 -NCT00669188 -NCT00663624 -NCT00669305 -NCT00663689 -NCT00669318 -NCT00663858 -NCT00669409 -NCT00663897 -NCT00669461 -NCT00663910 -NCT00669604 -NCT00663988 -NCT00669669 -NCT00664066 -NCT00669786 -NCT00664131 -NCT00669877 -NCT00664209 -NCT00669968 -NCT00664430 -NCT00669994 -NCT00664508 -NCT00670059 -NCT00664742 -NCT00670150 -NCT00664781 -NCT00670202 -NCT00664859 -NCT00670280 -NCT00664937 -NCT00670306 -NCT00665015 -NCT00682994 -NCT00670800 -NCT00676975 -NCT00670865 -NCT00676871 -NCT00670878 -NCT00677157 -NCT00670982 -NCT00677261 -NCT00671021 -NCT00677339 -NCT00671138 -NCT00677417 -NCT00671203 -NCT00677469 -NCT00671450 -NCT00677495 -NCT00671528 -NCT00677508 -NCT00671580 -NCT00677755 -NCT00671619 -NCT00677963 -NCT00671658 -NCT00677976 -NCT00671736 -NCT00677989 -NCT00671892 -NCT00678028 -NCT00671931 -NCT00678366 -NCT00671970 -NCT00678535 -NCT00671983 -NCT00678574 -NCT00672308 -NCT00678626 -NCT00672360 -NCT00678639 -NCT00672529 -NCT00678782 -NCT00672607 -NCT00678821 -NCT00672789 -NCT00678873 -NCT00673114 -NCT00678899 -NCT00673283 -NCT00679146 -NCT00673335 -NCT00679211 -NCT00673374 -NCT00679315 -NCT00673595 -NCT00679341 -NCT00673816 -NCT00679549 -NCT00673972 -NCT00679679 -NCT00674154 -NCT00679692 -NCT00674167 -NCT00679718 -NCT00674245 -NCT00679783 -NCT00674336 -NCT00680030 -NCT00674401 -NCT00680160 -NCT00674479 -NCT00680199 -NCT00674557 -NCT00680264 -NCT00674622 -NCT00680680 -NCT00674843 -NCT00680758 -NCT00674895 -NCT00680797 -NCT00675090 -NCT00680901 -NCT00675103 -NCT00680979 -NCT00675155 -NCT00681291 -NCT00675259 -NCT00681382 -NCT00675298 -NCT00681434 -NCT00675337 -NCT00681616 -NCT00675623 -NCT00681629 -NCT00675727 -NCT00682084 -NCT00675753 -NCT00682188 -NCT00675818 -NCT00682214 -NCT00675870 -NCT00682435 -NCT00675883 -NCT00682552 -NCT00676026 -NCT00682565 -NCT00676052 -NCT00682591 -NCT00676247 -NCT00682630 -NCT00676533 -NCT00682955 -NCT00676715 -NCT00693329 -NCT00683124 -NCT00688129 -NCT00683254 -NCT00688077 -NCT00683449 -NCT00688168 -NCT00683722 -NCT00688220 -NCT00683761 -NCT00688467 -NCT00683904 -NCT00688740 -NCT00683917 -NCT00688987 -NCT00683943 -NCT00689169 -NCT00683969 -NCT00689182 -NCT00684021 -NCT00689221 -NCT00684112 -NCT00689273 -NCT00684125 -NCT00689377 -NCT00684164 -NCT00689429 -NCT00684528 -NCT00689533 -NCT00684593 -NCT00689715 -NCT00684879 -NCT00689741 -NCT00684905 -NCT00689793 -NCT00684957 -NCT00689845 -NCT00684983 -NCT00689936 -NCT00685009 -NCT00689988 -NCT00685074 -NCT00690105 -NCT00685230 -NCT00690118 -NCT00685360 -NCT00690261 -NCT00685464 -NCT00690326 -NCT00685503 -NCT00690378 -NCT00685607 -NCT00690469 -NCT00685633 -NCT00690508 -NCT00685698 -NCT00690885 -NCT00685789 -NCT00690898 -NCT00685880 -NCT00690911 -NCT00685971 -NCT00691132 -NCT00686010 -NCT00691184 -NCT00686218 -NCT00691210 -NCT00686348 -NCT00691223 -NCT00686439 -NCT00691379 -NCT00686530 -NCT00691600 -NCT00686556 -NCT00691678 -NCT00686699 -NCT00691704 -NCT00686751 -NCT00691782 -NCT00686777 -NCT00691808 -NCT00686920 -NCT00691938 -NCT00687115 -NCT00692068 -NCT00687180 -NCT00692224 -NCT00687219 -NCT00692276 -NCT00687258 -NCT00692328 -NCT00687297 -NCT00692367 -NCT00687375 -NCT00692458 -NCT00687388 -NCT00692484 -NCT00687440 -NCT00692497 -NCT00687479 -NCT00692848 -NCT00687531 -NCT00692913 -NCT00687544 -NCT00693082 -NCT00687648 -NCT00693225 -NCT00687947 -NCT00693264 -NCT00687999 -NCT00693303 -NCT00688064 -NCT00704080 -NCT00693407 -NCT00698347 -NCT00693433 -NCT00698191 -NCT00693589 -NCT00698412 -NCT00693784 -NCT00698425 -NCT00693940 -NCT00698451 -NCT00694018 -NCT00698581 -NCT00694122 -NCT00698815 -NCT00694252 -NCT00698867 -NCT00694265 -NCT00698984 -NCT00694486 -NCT00699140 -NCT00694525 -NCT00699166 -NCT00694551 -NCT00699231 -NCT00694564 -NCT00699283 -NCT00694577 -NCT00699452 -NCT00694733 -NCT00699907 -NCT00694759 -NCT00699933 -NCT00694785 -NCT00700128 -NCT00694850 -NCT00700505 -NCT00694941 -NCT00700882 -NCT00695071 -NCT00701012 -NCT00695097 -NCT00701194 -NCT00695110 -NCT00701259 -NCT00695136 -NCT00701311 -NCT00695227 -NCT00701363 -NCT00695422 -NCT00701506 -NCT00695500 -NCT00701584 -NCT00695526 -NCT00701740 -NCT00695552 -NCT00701779 -NCT00695669 -NCT00701883 -NCT00695695 -NCT00702195 -NCT00696072 -NCT00702403 -NCT00696111 -NCT00702455 -NCT00696475 -NCT00702481 -NCT00696527 -NCT00702507 -NCT00696540 -NCT00702533 -NCT00696644 -NCT00702585 -NCT00696683 -NCT00702650 -NCT00696917 -NCT00702832 -NCT00697177 -NCT00702897 -NCT00697216 -NCT00703079 -NCT00697346 -NCT00703092 -NCT00697385 -NCT00703196 -NCT00697411 -NCT00703209 -NCT00697463 -NCT00703300 -NCT00697632 -NCT00703326 -NCT00697684 -NCT00703339 -NCT00697749 -NCT00703443 -NCT00697762 -NCT00703716 -NCT00697775 -NCT00703820 -NCT00697814 -NCT00703846 -NCT00697957 -NCT00703911 -NCT00698009 -NCT00703937 -NCT00698022 -NCT00703989 -NCT00698035 -NCT00704015 -NCT00698165 -NCT00704028 -NCT00698178 -NCT00713193 -NCT00704158 -NCT00708799 -NCT00704197 -NCT00708786 -NCT00704262 -NCT00708877 -NCT00704522 -NCT00708981 -NCT00704626 -NCT00709124 -NCT00704717 -NCT00709150 -NCT00704743 -NCT00709228 -NCT00704899 -NCT00709410 -NCT00704912 -NCT00709423 -NCT00705055 -NCT00709488 -NCT00705120 -NCT00709501 -NCT00705198 -NCT00709514 -NCT00705250 -NCT00709566 -NCT00705315 -NCT00709631 -NCT00705341 -NCT00709826 -NCT00705406 -NCT00709839 -NCT00705601 -NCT00709878 -NCT00705666 -NCT00709891 -NCT00705796 -NCT00710047 -NCT00705952 -NCT00710138 -NCT00705965 -NCT00710151 -NCT00706056 -NCT00710177 -NCT00706160 -NCT00710255 -NCT00706238 -NCT00710307 -NCT00706355 -NCT00710346 -NCT00706433 -NCT00710450 -NCT00706446 -NCT00710606 -NCT00706576 -NCT00710619 -NCT00706602 -NCT00710840 -NCT00706641 -NCT00711087 -NCT00706667 -NCT00711204 -NCT00706719 -NCT00711347 -NCT00706771 -NCT00711399 -NCT00706784 -NCT00711516 -NCT00706914 -NCT00711698 -NCT00706953 -NCT00711711 -NCT00707122 -NCT00711750 -NCT00707148 -NCT00711776 -NCT00707187 -NCT00711815 -NCT00707213 -NCT00711828 -NCT00707408 -NCT00711984 -NCT00707473 -NCT00712140 -NCT00707486 -NCT00712166 -NCT00707564 -NCT00712296 -NCT00707590 -NCT00712387 -NCT00707642 -NCT00712621 -NCT00707707 -NCT00712647 -NCT00707746 -NCT00712712 -NCT00707772 -NCT00712738 -NCT00707811 -NCT00712881 -NCT00707850 -NCT00712972 -NCT00707941 -NCT00712985 -NCT00708227 -NCT00713050 -NCT00708448 -NCT00713115 -NCT00708617 -NCT00713128 -NCT00708630 -NCT00723567 -NCT00713219 -NCT00718939 -NCT00713258 -NCT00718913 -NCT00713414 -NCT00719043 -NCT00713492 -NCT00719082 -NCT00713609 -NCT00719108 -NCT00713635 -NCT00719186 -NCT00714012 -NCT00719290 -NCT00714064 -NCT00719303 -NCT00714103 -NCT00719342 -NCT00714116 -NCT00719563 -NCT00714181 -NCT00719719 -NCT00714220 -NCT00719849 -NCT00714350 -NCT00719862 -NCT00714558 -NCT00719888 -NCT00714597 -NCT00720070 -NCT00714701 -NCT00720083 -NCT00714714 -NCT00720109 -NCT00714753 -NCT00720135 -NCT00714805 -NCT00720239 -NCT00714870 -NCT00720304 -NCT00714935 -NCT00720317 -NCT00715078 -NCT00720356 -NCT00715273 -NCT00720434 -NCT00715533 -NCT00720564 -NCT00715572 -NCT00720577 -NCT00715611 -NCT00720616 -NCT00715715 -NCT00720642 -NCT00715819 -NCT00720785 -NCT00715845 -NCT00720902 -NCT00716027 -NCT00720954 -NCT00716066 -NCT00720980 -NCT00716131 -NCT00721032 -NCT00716378 -NCT00721201 -NCT00716456 -NCT00721396 -NCT00716729 -NCT00721409 -NCT00716781 -NCT00721487 -NCT00716872 -NCT00721617 -NCT00717106 -NCT00721630 -NCT00717210 -NCT00721643 -NCT00717405 -NCT00721721 -NCT00717431 -NCT00721747 -NCT00717587 -NCT00721760 -NCT00717626 -NCT00721916 -NCT00717691 -NCT00722137 -NCT00717860 -NCT00722189 -NCT00717886 -NCT00722254 -NCT00717925 -NCT00722553 -NCT00718172 -NCT00722683 -NCT00718315 -NCT00722735 -NCT00718341 -NCT00722748 -NCT00718458 -NCT00722761 -NCT00718497 -NCT00723125 -NCT00718549 -NCT00723242 -NCT00718601 -NCT00723294 -NCT00718809 -NCT00723502 -NCT00718874 -NCT00735020 -NCT00723762 -NCT00730028 -NCT00723788 -NCT00730015 -NCT00723801 -NCT00730067 -NCT00723827 -NCT00730106 -NCT00724178 -NCT00730132 -NCT00724217 -NCT00730158 -NCT00724282 -NCT00730184 -NCT00724347 -NCT00730210 -NCT00724555 -NCT00730652 -NCT00724646 -NCT00730925 -NCT00724659 -NCT00731081 -NCT00724815 -NCT00731198 -NCT00724971 -NCT00731289 -NCT00725023 -NCT00731302 -NCT00725114 -NCT00731419 -NCT00725205 -NCT00731575 -NCT00725686 -NCT00731757 -NCT00725712 -NCT00731809 -NCT00725764 -NCT00731822 -NCT00725842 -NCT00732056 -NCT00726310 -NCT00732108 -NCT00726375 -NCT00732147 -NCT00726492 -NCT00732160 -NCT00726544 -NCT00732238 -NCT00726830 -NCT00732394 -NCT00727168 -NCT00732407 -NCT00727194 -NCT00732524 -NCT00727233 -NCT00732732 -NCT00727259 -NCT00732797 -NCT00727324 -NCT00732810 -NCT00727337 -NCT00733265 -NCT00727844 -NCT00733382 -NCT00727909 -NCT00733408 -NCT00728026 -NCT00733538 -NCT00728104 -NCT00733590 -NCT00728195 -NCT00733629 -NCT00728208 -NCT00733655 -NCT00728520 -NCT00733746 -NCT00728533 -NCT00733759 -NCT00728871 -NCT00733889 -NCT00728910 -NCT00733980 -NCT00728975 -NCT00734123 -NCT00729040 -NCT00734201 -NCT00729157 -NCT00734227 -NCT00729183 -NCT00734279 -NCT00729313 -NCT00734526 -NCT00729339 -NCT00734656 -NCT00729456 -NCT00734682 -NCT00729586 -NCT00734812 -NCT00729612 -NCT00734825 -NCT00729625 -NCT00734838 -NCT00729664 -NCT00734864 -NCT00729742 -NCT00734877 -NCT00729859 -NCT00734942 -NCT00729911 -NCT00734955 -NCT00729937 -NCT00747500 -NCT00735033 -NCT00741091 -NCT00735189 -NCT00741052 -NCT00735215 -NCT00741260 -NCT00735254 -NCT00741312 -NCT00735319 -NCT00741533 -NCT00735423 -NCT00741637 -NCT00735462 -NCT00741676 -NCT00735566 -NCT00741741 -NCT00735787 -NCT00741767 -NCT00735826 -NCT00741780 -NCT00735917 -NCT00741832 -NCT00736086 -NCT00741910 -NCT00736112 -NCT00741936 -NCT00736203 -NCT00742092 -NCT00736281 -NCT00742144 -NCT00736567 -NCT00742235 -NCT00736671 -NCT00742365 -NCT00736723 -NCT00742404 -NCT00736801 -NCT00742469 -NCT00736814 -NCT00742625 -NCT00736853 -NCT00742664 -NCT00736944 -NCT00742677 -NCT00736970 -NCT00742820 -NCT00736996 -NCT00742872 -NCT00737048 -NCT00742976 -NCT00737191 -NCT00743184 -NCT00737334 -NCT00743626 -NCT00737412 -NCT00743730 -NCT00737451 -NCT00743990 -NCT00737607 -NCT00744172 -NCT00737698 -NCT00744185 -NCT00737802 -NCT00744393 -NCT00737854 -NCT00744445 -NCT00737971 -NCT00744523 -NCT00737997 -NCT00744731 -NCT00738036 -NCT00744887 -NCT00738127 -NCT00745030 -NCT00738205 -NCT00745069 -NCT00738244 -NCT00745251 -NCT00738621 -NCT00745407 -NCT00738673 -NCT00745420 -NCT00738751 -NCT00745537 -NCT00738972 -NCT00745550 -NCT00739141 -NCT00745563 -NCT00739388 -NCT00745732 -NCT00739479 -NCT00745901 -NCT00739492 -NCT00746317 -NCT00739674 -NCT00746564 -NCT00740129 -NCT00746668 -NCT00740142 -NCT00746772 -NCT00740467 -NCT00746902 -NCT00740623 -NCT00747071 -NCT00740844 -NCT00747162 -NCT00740948 -NCT00747227 -NCT00740987 -NCT00747435 -NCT00741013 -NCT00758316 -NCT00747539 -NCT00752674 -NCT00747591 -NCT00752609 -NCT00747682 -NCT00752765 -NCT00747760 -NCT00752778 -NCT00747864 -NCT00752869 -NCT00747929 -NCT00752921 -NCT00747994 -NCT00753064 -NCT00748007 -NCT00753090 -NCT00748072 -NCT00753103 -NCT00748098 -NCT00753142 -NCT00748501 -NCT00753168 -NCT00748540 -NCT00753233 -NCT00748553 -NCT00753571 -NCT00748579 -NCT00753597 -NCT00748592 -NCT00753714 -NCT00748605 -NCT00753870 -NCT00748631 -NCT00754013 -NCT00748644 -NCT00754065 -NCT00748657 -NCT00754312 -NCT00748696 -NCT00754351 -NCT00748852 -NCT00754481 -NCT00748904 -NCT00754585 -NCT00748969 -NCT00754611 -NCT00749086 -NCT00754676 -NCT00749294 -NCT00754806 -NCT00749359 -NCT00754832 -NCT00749411 -NCT00754923 -NCT00749502 -NCT00754975 -NCT00749645 -NCT00755027 -NCT00749788 -NCT00755040 -NCT00749814 -NCT00755430 -NCT00750009 -NCT00755482 -NCT00750139 -NCT00755495 -NCT00750152 -NCT00755508 -NCT00750256 -NCT00755573 -NCT00750269 -NCT00755599 -NCT00750451 -NCT00755781 -NCT00750477 -NCT00755885 -NCT00750594 -NCT00755950 -NCT00750659 -NCT00756002 -NCT00750698 -NCT00756366 -NCT00750724 -NCT00756379 -NCT00750789 -NCT00756522 -NCT00750828 -NCT00756561 -NCT00750867 -NCT00757003 -NCT00751036 -NCT00757120 -NCT00751140 -NCT00757289 -NCT00751296 -NCT00757302 -NCT00751426 -NCT00757315 -NCT00751660 -NCT00757393 -NCT00751699 -NCT00757484 -NCT00751868 -NCT00757549 -NCT00752076 -NCT00757757 -NCT00752102 -NCT00757848 -NCT00752193 -NCT00758108 -NCT00752245 -NCT00769002 -NCT00758368 -NCT00763893 -NCT00758381 -NCT00763880 -NCT00758459 -NCT00764309 -NCT00758498 -NCT00764322 -NCT00758706 -NCT00764673 -NCT00758927 -NCT00764699 -NCT00758992 -NCT00764751 -NCT00759044 -NCT00764764 -NCT00759109 -NCT00764816 -NCT00759174 -NCT00764972 -NCT00759525 -NCT00764985 -NCT00759603 -NCT00765193 -NCT00759655 -NCT00765297 -NCT00759707 -NCT00765323 -NCT00759733 -NCT00765388 -NCT00759772 -NCT00765401 -NCT00759785 -NCT00765505 -NCT00759798 -NCT00765635 -NCT00759863 -NCT00765648 -NCT00759876 -NCT00765700 -NCT00759928 -NCT00765713 -NCT00760006 -NCT00765726 -NCT00760097 -NCT00765882 -NCT00760149 -NCT00766090 -NCT00760240 -NCT00766168 -NCT00760344 -NCT00766220 -NCT00760513 -NCT00766298 -NCT00760786 -NCT00766649 -NCT00760825 -NCT00766870 -NCT00760864 -NCT00767013 -NCT00760903 -NCT00767091 -NCT00761085 -NCT00767117 -NCT00761280 -NCT00767130 -NCT00761332 -NCT00767234 -NCT00761358 -NCT00767299 -NCT00761397 -NCT00767403 -NCT00761449 -NCT00767429 -NCT00761501 -NCT00767546 -NCT00761527 -NCT00767559 -NCT00761956 -NCT00767793 -NCT00762034 -NCT00767897 -NCT00762307 -NCT00767988 -NCT00762541 -NCT00768131 -NCT00762619 -NCT00768157 -NCT00762723 -NCT00768170 -NCT00762749 -NCT00768313 -NCT00762788 -NCT00768365 -NCT00762866 -NCT00768599 -NCT00762905 -NCT00768612 -NCT00762970 -NCT00768742 -NCT00763113 -NCT00768781 -NCT00763399 -NCT00768807 -NCT00763594 -NCT00768820 -NCT00763633 -NCT00768859 -NCT00763763 -NCT00768911 -NCT00763867 -NCT00779922 -NCT00769197 -NCT00773227 -NCT00769262 -NCT00773175 -NCT00769327 -NCT00773266 -NCT00769353 -NCT00773279 -NCT00769379 -NCT00773344 -NCT00769470 -NCT00773682 -NCT00769483 -NCT00773695 -NCT00769522 -NCT00773890 -NCT00769535 -NCT00774020 -NCT00769587 -NCT00774241 -NCT00769626 -NCT00774449 -NCT00769730 -NCT00774462 -NCT00769756 -NCT00774566 -NCT00769834 -NCT00774631 -NCT00770094 -NCT00774657 -NCT00770185 -NCT00774930 -NCT00770198 -NCT00775138 -NCT00770263 -NCT00775151 -NCT00770276 -NCT00775190 -NCT00770419 -NCT00775242 -NCT00770432 -NCT00775463 -NCT00770510 -NCT00775489 -NCT00770588 -NCT00775593 -NCT00770640 -NCT00775619 -NCT00770653 -NCT00775723 -NCT00770809 -NCT00775749 -NCT00770887 -NCT00775905 -NCT00771043 -NCT00776087 -NCT00771095 -NCT00776113 -NCT00771290 -NCT00776295 -NCT00771316 -NCT00776607 -NCT00771342 -NCT00776789 -NCT00771355 -NCT00776919 -NCT00771498 -NCT00776997 -NCT00771589 -NCT00777049 -NCT00771602 -NCT00777088 -NCT00771615 -NCT00777101 -NCT00771706 -NCT00777569 -NCT00771758 -NCT00777673 -NCT00771771 -NCT00777777 -NCT00772057 -NCT00777894 -NCT00772122 -NCT00777998 -NCT00772278 -NCT00778011 -NCT00772408 -NCT00778037 -NCT00772447 -NCT00778167 -NCT00772486 -NCT00778609 -NCT00772525 -NCT00778765 -NCT00772629 -NCT00778830 -NCT00772694 -NCT00778843 -NCT00772850 -NCT00778999 -NCT00772876 -NCT00779402 -NCT00772915 -NCT00779454 -NCT00772954 -NCT00779584 -NCT00772967 -NCT00779688 -NCT00773136 -NCT00779857 -NCT00773149 -NCT00791297 -NCT00779961 -NCT00787163 -NCT00780117 -NCT00786929 -NCT00780247 -NCT00787189 -NCT00780351 -NCT00787319 -NCT00780780 -NCT00787358 -NCT00780988 -NCT00787384 -NCT00781170 -NCT00787527 -NCT00781261 -NCT00787540 -NCT00781378 -NCT00787644 -NCT00781469 -NCT00787657 -NCT00781495 -NCT00787670 -NCT00782067 -NCT00787696 -NCT00782158 -NCT00787722 -NCT00782236 -NCT00787761 -NCT00782327 -NCT00787878 -NCT00782379 -NCT00787943 -NCT00782639 -NCT00787969 -NCT00782652 -NCT00788073 -NCT00782782 -NCT00788112 -NCT00782795 -NCT00788125 -NCT00782860 -NCT00788164 -NCT00783016 -NCT00788307 -NCT00783315 -NCT00788528 -NCT00783393 -NCT00788554 -NCT00783419 -NCT00788775 -NCT00783523 -NCT00788866 -NCT00783575 -NCT00788892 -NCT00783627 -NCT00788918 -NCT00783653 -NCT00788931 -NCT00783926 -NCT00788957 -NCT00783965 -NCT00789061 -NCT00784043 -NCT00789087 -NCT00784082 -NCT00789126 -NCT00784134 -NCT00789243 -NCT00784173 -NCT00789451 -NCT00784394 -NCT00789529 -NCT00784485 -NCT00789581 -NCT00784511 -NCT00789685 -NCT00784563 -NCT00789776 -NCT00784615 -NCT00789802 -NCT00784706 -NCT00789919 -NCT00784758 -NCT00789945 -NCT00784810 -NCT00789997 -NCT00784914 -NCT00790075 -NCT00785122 -NCT00790101 -NCT00785135 -NCT00790179 -NCT00785187 -NCT00790231 -NCT00785291 -NCT00790283 -NCT00785304 -NCT00790530 -NCT00785343 -NCT00790582 -NCT00785824 -NCT00790647 -NCT00786084 -NCT00790777 -NCT00786188 -NCT00790790 -NCT00786279 -NCT00791141 -NCT00786500 -NCT00791193 -NCT00786604 -NCT00802425 -NCT00791492 -NCT00796731 -NCT00791960 -NCT00796692 -NCT00792077 -NCT00796783 -NCT00792090 -NCT00796887 -NCT00792103 -NCT00796926 -NCT00792142 -NCT00796952 -NCT00792194 -NCT00796978 -NCT00792337 -NCT00797069 -NCT00792363 -NCT00797121 -NCT00792597 -NCT00797186 -NCT00792701 -NCT00797277 -NCT00792727 -NCT00797316 -NCT00792740 -NCT00797407 -NCT00792766 -NCT00797420 -NCT00792948 -NCT00797433 -NCT00792961 -NCT00797615 -NCT00793065 -NCT00797693 -NCT00793143 -NCT00797758 -NCT00793208 -NCT00797810 -NCT00793247 -NCT00797836 -NCT00793286 -NCT00798057 -NCT00793338 -NCT00798226 -NCT00793715 -NCT00798369 -NCT00793845 -NCT00798382 -NCT00794040 -NCT00798512 -NCT00794053 -NCT00798603 -NCT00794105 -NCT00798655 -NCT00794118 -NCT00799136 -NCT00794235 -NCT00799214 -NCT00794274 -NCT00799240 -NCT00794313 -NCT00799266 -NCT00794352 -NCT00799565 -NCT00794430 -NCT00799617 -NCT00794677 -NCT00799760 -NCT00794820 -NCT00799773 -NCT00794924 -NCT00799916 -NCT00794976 -NCT00799955 -NCT00795002 -NCT00800033 -NCT00795015 -NCT00800098 -NCT00795028 -NCT00800358 -NCT00795158 -NCT00800436 -NCT00795184 -NCT00800579 -NCT00795301 -NCT00800943 -NCT00795483 -NCT00801021 -NCT00795496 -NCT00801307 -NCT00795639 -NCT00801385 -NCT00795756 -NCT00801489 -NCT00795782 -NCT00801619 -NCT00795886 -NCT00801788 -NCT00795899 -NCT00801853 -NCT00796042 -NCT00802009 -NCT00796068 -NCT00802139 -NCT00796133 -NCT00802191 -NCT00796185 -NCT00802230 -NCT00796549 -NCT00802308 -NCT00796679 -NCT00813605 -NCT00802438 -NCT00808197 -NCT00802529 -NCT00808158 -NCT00802581 -NCT00808613 -NCT00802646 -NCT00808743 -NCT00802672 -NCT00808938 -NCT00802698 -NCT00808990 -NCT00802815 -NCT00809003 -NCT00802841 -NCT00809094 -NCT00802867 -NCT00809211 -NCT00802932 -NCT00809237 -NCT00802997 -NCT00809354 -NCT00803426 -NCT00809562 -NCT00803504 -NCT00809601 -NCT00803647 -NCT00809640 -NCT00803842 -NCT00809861 -NCT00803972 -NCT00809913 -NCT00803985 -NCT00809952 -NCT00804089 -NCT00810095 -NCT00804128 -NCT00810485 -NCT00804193 -NCT00810550 -NCT00804336 -NCT00810563 -NCT00804349 -NCT00810719 -NCT00804466 -NCT00810797 -NCT00804557 -NCT00810849 -NCT00804830 -NCT00810888 -NCT00805142 -NCT00811135 -NCT00805181 -NCT00811330 -NCT00805207 -NCT00811486 -NCT00805311 -NCT00811538 -NCT00805324 -NCT00811681 -NCT00805428 -NCT00811759 -NCT00805493 -NCT00811785 -NCT00805649 -NCT00811967 -NCT00805844 -NCT00812045 -NCT00806065 -NCT00812149 -NCT00806117 -NCT00812162 -NCT00806299 -NCT00812188 -NCT00806637 -NCT00812370 -NCT00806767 -NCT00812383 -NCT00806871 -NCT00812409 -NCT00806962 -NCT00812422 -NCT00807040 -NCT00812617 -NCT00807066 -NCT00812630 -NCT00807183 -NCT00812669 -NCT00807326 -NCT00812708 -NCT00807560 -NCT00812838 -NCT00807599 -NCT00812851 -NCT00807651 -NCT00812968 -NCT00807664 -NCT00813007 -NCT00807729 -NCT00813033 -NCT00807820 -NCT00813241 -NCT00807859 -NCT00813384 -NCT00807872 -NCT00813423 -NCT00807885 -NCT00813475 -NCT00807963 -NCT00813527 -NCT00808106 -NCT00824668 -NCT00813683 -NCT00819780 -NCT00813761 -NCT00819676 -NCT00813826 -NCT00819832 -NCT00813917 -NCT00820040 -NCT00813943 -NCT00820079 -NCT00814073 -NCT00820170 -NCT00814138 -NCT00820235 -NCT00814177 -NCT00820287 -NCT00814307 -NCT00820352 -NCT00814346 -NCT00820378 -NCT00814385 -NCT00820417 -NCT00814580 -NCT00820547 -NCT00815126 -NCT00820638 -NCT00815191 -NCT00820664 -NCT00815282 -NCT00820742 -NCT00815308 -NCT00820781 -NCT00815425 -NCT00820807 -NCT00815438 -NCT00820820 -NCT00815490 -NCT00820846 -NCT00815503 -NCT00820924 -NCT00815529 -NCT00820989 -NCT00815698 -NCT00821054 -NCT00815711 -NCT00821132 -NCT00815724 -NCT00821236 -NCT00816127 -NCT00821470 -NCT00816179 -NCT00821509 -NCT00816218 -NCT00821626 -NCT00816244 -NCT00821821 -NCT00816257 -NCT00821886 -NCT00816283 -NCT00822094 -NCT00816335 -NCT00822198 -NCT00816387 -NCT00822276 -NCT00816413 -NCT00822393 -NCT00816504 -NCT00822432 -NCT00816530 -NCT00822523 -NCT00816595 -NCT00822575 -NCT00816660 -NCT00822627 -NCT00816829 -NCT00822653 -NCT00816868 -NCT00822679 -NCT00816998 -NCT00822757 -NCT00817180 -NCT00822861 -NCT00817232 -NCT00822900 -NCT00817661 -NCT00823004 -NCT00817726 -NCT00823394 -NCT00817765 -NCT00823459 -NCT00817843 -NCT00823511 -NCT00817882 -NCT00823524 -NCT00818311 -NCT00823537 -NCT00818389 -NCT00823550 -NCT00818441 -NCT00823901 -NCT00818870 -NCT00824122 -NCT00818896 -NCT00824135 -NCT00819130 -NCT00824252 -NCT00819208 -NCT00824408 -NCT00819299 -NCT00824473 -NCT00819585 -NCT00835445 -NCT00824863 -NCT00829829 -NCT00824941 -NCT00829712 -NCT00825019 -NCT00829855 -NCT00825071 -NCT00830089 -NCT00825175 -NCT00830141 -NCT00825344 -NCT00830232 -NCT00825396 -NCT00830284 -NCT00825435 -NCT00830297 -NCT00825591 -NCT00830323 -NCT00825617 -NCT00830388 -NCT00825734 -NCT00830583 -NCT00825916 -NCT00830596 -NCT00826007 -NCT00830726 -NCT00826020 -NCT00830739 -NCT00826267 -NCT00830830 -NCT00826306 -NCT00830934 -NCT00826423 -NCT00831103 -NCT00826449 -NCT00831194 -NCT00826462 -NCT00831441 -NCT00826527 -NCT00831675 -NCT00826540 -NCT00831740 -NCT00826579 -NCT00831766 -NCT00826605 -NCT00831844 -NCT00826709 -NCT00831974 -NCT00826774 -NCT00832065 -NCT00826813 -NCT00832234 -NCT00826904 -NCT00832312 -NCT00827034 -NCT00832377 -NCT00827138 -NCT00832416 -NCT00827177 -NCT00832429 -NCT00827398 -NCT00832520 -NCT00827502 -NCT00832585 -NCT00827658 -NCT00832611 -NCT00827684 -NCT00832767 -NCT00827814 -NCT00832806 -NCT00827892 -NCT00832871 -NCT00828048 -NCT00833144 -NCT00828100 -NCT00833222 -NCT00828347 -NCT00833274 -NCT00828568 -NCT00833534 -NCT00828685 -NCT00833625 -NCT00828750 -NCT00833690 -NCT00828763 -NCT00833794 -NCT00828828 -NCT00833846 -NCT00828919 -NCT00833911 -NCT00828945 -NCT00833989 -NCT00828971 -NCT00834210 -NCT00829049 -NCT00834236 -NCT00829101 -NCT00834366 -NCT00829114 -NCT00834678 -NCT00829153 -NCT00834886 -NCT00829166 -NCT00834899 -NCT00829361 -NCT00835198 -NCT00829387 -NCT00835211 -NCT00829543 -NCT00835302 -NCT00829673 -NCT00846924 -NCT00835510 -NCT00842205 -NCT00835770 -NCT00842140 -NCT00835861 -NCT00842218 -NCT00836043 -NCT00842244 -NCT00836160 -NCT00842257 -NCT00836277 -NCT00842426 -NCT00836316 -NCT00842621 -NCT00836368 -NCT00842712 -NCT00836771 -NCT00842751 -NCT00836797 -NCT00842777 -NCT00836810 -NCT00842998 -NCT00836823 -NCT00843024 -NCT00836953 -NCT00843167 -NCT00837044 -NCT00843310 -NCT00837395 -NCT00843401 -NCT00837486 -NCT00843505 -NCT00837616 -NCT00843518 -NCT00837785 -NCT00843570 -NCT00837850 -NCT00843726 -NCT00838032 -NCT00843817 -NCT00838240 -NCT00843882 -NCT00838370 -NCT00843986 -NCT00838513 -NCT00844038 -NCT00838526 -NCT00844194 -NCT00838552 -NCT00844259 -NCT00838591 -NCT00844311 -NCT00838682 -NCT00844428 -NCT00838851 -NCT00844441 -NCT00838864 -NCT00844532 -NCT00838942 -NCT00844545 -NCT00839124 -NCT00844597 -NCT00839137 -NCT00844649 -NCT00839189 -NCT00844662 -NCT00839202 -NCT00844844 -NCT00839228 -NCT00844870 -NCT00839306 -NCT00845117 -NCT00839319 -NCT00845156 -NCT00839488 -NCT00845221 -NCT00839787 -NCT00845299 -NCT00839969 -NCT00845351 -NCT00839982 -NCT00845520 -NCT00840047 -NCT00845559 -NCT00840086 -NCT00845572 -NCT00840177 -NCT00845676 -NCT00840190 -NCT00845754 -NCT00840294 -NCT00845832 -NCT00840463 -NCT00845936 -NCT00840528 -NCT00845962 -NCT00840931 -NCT00845975 -NCT00840944 -NCT00846027 -NCT00841113 -NCT00846040 -NCT00841152 -NCT00846248 -NCT00841191 -NCT00846534 -NCT00841555 -NCT00846703 -NCT00841828 -NCT00846898 -NCT00841919 -NCT00858143 -NCT00847002 -NCT00852566 -NCT00847106 -NCT00852345 -NCT00847171 -NCT00852631 -NCT00847236 -NCT00852748 -NCT00847340 -NCT00852839 -NCT00847379 -NCT00852917 -NCT00847431 -NCT00853008 -NCT00847457 -NCT00853138 -NCT00847522 -NCT00853489 -NCT00847847 -NCT00853502 -NCT00847899 -NCT00853515 -NCT00847990 -NCT00853541 -NCT00848172 -NCT00853697 -NCT00848263 -NCT00853723 -NCT00848289 -NCT00853931 -NCT00848315 -NCT00854139 -NCT00848406 -NCT00854204 -NCT00848666 -NCT00854373 -NCT00848731 -NCT00854412 -NCT00848744 -NCT00854672 -NCT00849095 -NCT00854815 -NCT00849329 -NCT00855114 -NCT00849342 -NCT00855192 -NCT00849394 -NCT00855296 -NCT00849472 -NCT00855374 -NCT00849524 -NCT00855426 -NCT00849615 -NCT00855530 -NCT00849745 -NCT00855595 -NCT00849849 -NCT00855712 -NCT00849888 -NCT00855764 -NCT00849927 -NCT00855829 -NCT00850018 -NCT00855894 -NCT00850031 -NCT00855920 -NCT00850057 -NCT00855972 -NCT00850382 -NCT00856232 -NCT00850408 -NCT00856297 -NCT00850577 -NCT00856375 -NCT00850993 -NCT00856388 -NCT00851162 -NCT00856492 -NCT00851188 -NCT00856544 -NCT00851331 -NCT00856596 -NCT00851461 -NCT00856609 -NCT00851487 -NCT00856648 -NCT00851747 -NCT00856973 -NCT00851799 -NCT00857051 -NCT00851838 -NCT00857194 -NCT00851942 -NCT00857363 -NCT00851981 -NCT00857376 -NCT00852020 -NCT00857389 -NCT00852072 -NCT00857454 -NCT00852098 -NCT00857532 -NCT00852124 -NCT00857662 -NCT00852150 -NCT00857701 -NCT00852202 -NCT00857766 -NCT00852228 -NCT00858117 -NCT00852293 -NCT00868478 -NCT00858169 -NCT00863356 -NCT00858351 -NCT00863343 -NCT00858494 -NCT00863616 -NCT00858520 -NCT00863642 -NCT00858611 -NCT00863785 -NCT00858624 -NCT00863941 -NCT00858650 -NCT00864058 -NCT00858689 -NCT00864136 -NCT00858793 -NCT00864175 -NCT00858806 -NCT00864305 -NCT00858819 -NCT00864383 -NCT00858845 -NCT00864422 -NCT00859053 -NCT00864461 -NCT00859105 -NCT00864552 -NCT00859274 -NCT00864760 -NCT00859287 -NCT00864929 -NCT00859339 -NCT00865046 -NCT00859690 -NCT00865098 -NCT00859794 -NCT00865111 -NCT00859872 -NCT00865358 -NCT00859911 -NCT00865371 -NCT00859937 -NCT00865410 -NCT00860067 -NCT00865449 -NCT00860145 -NCT00865462 -NCT00860184 -NCT00865631 -NCT00860327 -NCT00865644 -NCT00860366 -NCT00866008 -NCT00860457 -NCT00866099 -NCT00860535 -NCT00866138 -NCT00860574 -NCT00866177 -NCT00860587 -NCT00866294 -NCT00860639 -NCT00866346 -NCT00860678 -NCT00866437 -NCT00860691 -NCT00866476 -NCT00860743 -NCT00866554 -NCT00860808 -NCT00866645 -NCT00861029 -NCT00866736 -NCT00861120 -NCT00866749 -NCT00861159 -NCT00866775 -NCT00861523 -NCT00866840 -NCT00861588 -NCT00866905 -NCT00861627 -NCT00866918 -NCT00861705 -NCT00867087 -NCT00861731 -NCT00867243 -NCT00861861 -NCT00867334 -NCT00861887 -NCT00867698 -NCT00862004 -NCT00867763 -NCT00862095 -NCT00867828 -NCT00862277 -NCT00867867 -NCT00862433 -NCT00867919 -NCT00862628 -NCT00867932 -NCT00862758 -NCT00868075 -NCT00862810 -NCT00868153 -NCT00862940 -NCT00868166 -NCT00863122 -NCT00868218 -NCT00863278 -NCT00879060 -NCT00868530 -NCT00873782 -NCT00868608 -NCT00873769 -NCT00868634 -NCT00874029 -NCT00868738 -NCT00874172 -NCT00868985 -NCT00874419 -NCT00869037 -NCT00874653 -NCT00869063 -NCT00874900 -NCT00869206 -NCT00874926 -NCT00869336 -NCT00874978 -NCT00869544 -NCT00875121 -NCT00869674 -NCT00875251 -NCT00869739 -NCT00875355 -NCT00869804 -NCT00875433 -NCT00869934 -NCT00875446 -NCT00869960 -NCT00875537 -NCT00869986 -NCT00875576 -NCT00870220 -NCT00875771 -NCT00870246 -NCT00875875 -NCT00870272 -NCT00875979 -NCT00870519 -NCT00876161 -NCT00870753 -NCT00876291 -NCT00870766 -NCT00876356 -NCT00870896 -NCT00876395 -NCT00870922 -NCT00876499 -NCT00871130 -NCT00876655 -NCT00871299 -NCT00876694 -NCT00871377 -NCT00876759 -NCT00871494 -NCT00876772 -NCT00871572 -NCT00876798 -NCT00871611 -NCT00877097 -NCT00871650 -NCT00877110 -NCT00871780 -NCT00877292 -NCT00871962 -NCT00877383 -NCT00872001 -NCT00877409 -NCT00872092 -NCT00877448 -NCT00872157 -NCT00877500 -NCT00872209 -NCT00877604 -NCT00872274 -NCT00877682 -NCT00872287 -NCT00877708 -NCT00872365 -NCT00877838 -NCT00872495 -NCT00877968 -NCT00872612 -NCT00878059 -NCT00872664 -NCT00878098 -NCT00872755 -NCT00878163 -NCT00872781 -NCT00878176 -NCT00872924 -NCT00878228 -NCT00872937 -NCT00878423 -NCT00873093 -NCT00878475 -NCT00873145 -NCT00878514 -NCT00873262 -NCT00878553 -NCT00873314 -NCT00878592 -NCT00873405 -NCT00878709 -NCT00873457 -NCT00878826 -NCT00873522 -NCT00878904 -NCT00873600 -NCT00879034 -NCT00873678 -NCT00889200 -NCT00879125 -NCT00884416 -NCT00879216 -NCT00884403 -NCT00879359 -NCT00884494 -NCT00879385 -NCT00884507 -NCT00879437 -NCT00884624 -NCT00879502 -NCT00884936 -NCT00879515 -NCT00885001 -NCT00879541 -NCT00885365 -NCT00879658 -NCT00885469 -NCT00879710 -NCT00885560 -NCT00879775 -NCT00885703 -NCT00879814 -NCT00885755 -NCT00880022 -NCT00885885 -NCT00880048 -NCT00885924 -NCT00880087 -NCT00886080 -NCT00880282 -NCT00886197 -NCT00880321 -NCT00886210 -NCT00880347 -NCT00886327 -NCT00880386 -NCT00886496 -NCT00880399 -NCT00886522 -NCT00880412 -NCT00886652 -NCT00880425 -NCT00886769 -NCT00880451 -NCT00886834 -NCT00880477 -NCT00886847 -NCT00880490 -NCT00886925 -NCT00880594 -NCT00887068 -NCT00880763 -NCT00887081 -NCT00880802 -NCT00887146 -NCT00880906 -NCT00887172 -NCT00881049 -NCT00887185 -NCT00881283 -NCT00887224 -NCT00881322 -NCT00887250 -NCT00881361 -NCT00887276 -NCT00881595 -NCT00887315 -NCT00881660 -NCT00887328 -NCT00881920 -NCT00887354 -NCT00882089 -NCT00887484 -NCT00882193 -NCT00887510 -NCT00882440 -NCT00887536 -NCT00882726 -NCT00887575 -NCT00882869 -NCT00887705 -NCT00882999 -NCT00887744 -NCT00883129 -NCT00887835 -NCT00883220 -NCT00887939 -NCT00883272 -NCT00888017 -NCT00883350 -NCT00888134 -NCT00883402 -NCT00888173 -NCT00883493 -NCT00888225 -NCT00883519 -NCT00888342 -NCT00883571 -NCT00888563 -NCT00883584 -NCT00888589 -NCT00883701 -NCT00889018 -NCT00884000 -NCT00889031 -NCT00884221 -NCT00889174 -NCT00884260 -NCT00889187 -NCT00884273 -NCT00899379 -NCT00889226 -NCT00894764 -NCT00889408 -NCT00894608 -NCT00889434 -NCT00894803 -NCT00889512 -NCT00894907 -NCT00889707 -NCT00895089 -NCT00889837 -NCT00895128 -NCT00890058 -NCT00895362 -NCT00890071 -NCT00895544 -NCT00890162 -NCT00895687 -NCT00890201 -NCT00895752 -NCT00890435 -NCT00895817 -NCT00890552 -NCT00895934 -NCT00890747 -NCT00895960 -NCT00890812 -NCT00896077 -NCT00890825 -NCT00896272 -NCT00890877 -NCT00896285 -NCT00891124 -NCT00896376 -NCT00891189 -NCT00896402 -NCT00891228 -NCT00896441 -NCT00891267 -NCT00896519 -NCT00891319 -NCT00896701 -NCT00891579 -NCT00896753 -NCT00891592 -NCT00896766 -NCT00891722 -NCT00896818 -NCT00891813 -NCT00896831 -NCT00891852 -NCT00896857 -NCT00891904 -NCT00897039 -NCT00891917 -NCT00897091 -NCT00891930 -NCT00897143 -NCT00891969 -NCT00897182 -NCT00892073 -NCT00897208 -NCT00892268 -NCT00897247 -NCT00892346 -NCT00897442 -NCT00892359 -NCT00897455 -NCT00892619 -NCT00897767 -NCT00892697 -NCT00897806 -NCT00892723 -NCT00897923 -NCT00892736 -NCT00897936 -NCT00892879 -NCT00897975 -NCT00893009 -NCT00898014 -NCT00893217 -NCT00898144 -NCT00893347 -NCT00898274 -NCT00893373 -NCT00898326 -NCT00893399 -NCT00898365 -NCT00893425 -NCT00898443 -NCT00893477 -NCT00898456 -NCT00893633 -NCT00898508 -NCT00893646 -NCT00898573 -NCT00893789 -NCT00898612 -NCT00893880 -NCT00898677 -NCT00893932 -NCT00898937 -NCT00894075 -NCT00899041 -NCT00894192 -NCT00899080 -NCT00894205 -NCT00899132 -NCT00894504 -NCT00899171 -NCT00894569 -NCT00912015 -NCT00899431 -NCT00904969 -NCT00899613 -NCT00904956 -NCT00899743 -NCT00904982 -NCT00899795 -NCT00905320 -NCT00899873 -NCT00905632 -NCT00899964 -NCT00905736 -NCT00900081 -NCT00905970 -NCT00900094 -NCT00906243 -NCT00900120 -NCT00906399 -NCT00900211 -NCT00906412 -NCT00900224 -NCT00906438 -NCT00900380 -NCT00906945 -NCT00900432 -NCT00906971 -NCT00900575 -NCT00907205 -NCT00900601 -NCT00907257 -NCT00900627 -NCT00907348 -NCT00900874 -NCT00907452 -NCT00900965 -NCT00907517 -NCT00901004 -NCT00907595 -NCT00901147 -NCT00907660 -NCT00901342 -NCT00907751 -NCT00901459 -NCT00907790 -NCT00901524 -NCT00908076 -NCT00901615 -NCT00908089 -NCT00901940 -NCT00908427 -NCT00902031 -NCT00908531 -NCT00902057 -NCT00908804 -NCT00902109 -NCT00909103 -NCT00902135 -NCT00909116 -NCT00902174 -NCT00909168 -NCT00902226 -NCT00909220 -NCT00902564 -NCT00909259 -NCT00902629 -NCT00909350 -NCT00902837 -NCT00909389 -NCT00902902 -NCT00909766 -NCT00902954 -NCT00909857 -NCT00903071 -NCT00909909 -NCT00903136 -NCT00909961 -NCT00903201 -NCT00910065 -NCT00903214 -NCT00910208 -NCT00903227 -NCT00910325 -NCT00903422 -NCT00910533 -NCT00903721 -NCT00910598 -NCT00903734 -NCT00910637 -NCT00903877 -NCT00910650 -NCT00903903 -NCT00910715 -NCT00903994 -NCT00910897 -NCT00904098 -NCT00911131 -NCT00904137 -NCT00911300 -NCT00904202 -NCT00911586 -NCT00904540 -NCT00911625 -NCT00904696 -NCT00911716 -NCT00904709 -NCT00911742 -NCT00904748 -NCT00911859 -NCT00904826 -NCT00911898 -NCT00904865 -NCT00922155 -NCT00912132 -NCT00917124 -NCT00912158 -NCT00917007 -NCT00912184 -NCT00917241 -NCT00912197 -NCT00917410 -NCT00912223 -NCT00917618 -NCT00912275 -NCT00917683 -NCT00912327 -NCT00917709 -NCT00912340 -NCT00917943 -NCT00912444 -NCT00918255 -NCT00912665 -NCT00918333 -NCT00912717 -NCT00918411 -NCT00912782 -NCT00918437 -NCT00912808 -NCT00918450 -NCT00912977 -NCT00918476 -NCT00913042 -NCT00918528 -NCT00913055 -NCT00918723 -NCT00913081 -NCT00918736 -NCT00913146 -NCT00918892 -NCT00913172 -NCT00918931 -NCT00913263 -NCT00918983 -NCT00913380 -NCT00919074 -NCT00913445 -NCT00919165 -NCT00913497 -NCT00919204 -NCT00913978 -NCT00919217 -NCT00914056 -NCT00919243 -NCT00914095 -NCT00919269 -NCT00914134 -NCT00919334 -NCT00914147 -NCT00919360 -NCT00914173 -NCT00919373 -NCT00914407 -NCT00919412 -NCT00914433 -NCT00919425 -NCT00914459 -NCT00919516 -NCT00914524 -NCT00919633 -NCT00914602 -NCT00919672 -NCT00914823 -NCT00920075 -NCT00914862 -NCT00920127 -NCT00914966 -NCT00920140 -NCT00915018 -NCT00920179 -NCT00915330 -NCT00920413 -NCT00915343 -NCT00920478 -NCT00915603 -NCT00920621 -NCT00915681 -NCT00920725 -NCT00915798 -NCT00920790 -NCT00915954 -NCT00920985 -NCT00915980 -NCT00921024 -NCT00916032 -NCT00921115 -NCT00916058 -NCT00921206 -NCT00916240 -NCT00921414 -NCT00916292 -NCT00921427 -NCT00916305 -NCT00921492 -NCT00916383 -NCT00921518 -NCT00916396 -NCT00921544 -NCT00916643 -NCT00921609 -NCT00916747 -NCT00921648 -NCT00916903 -NCT00921856 -NCT00916916 -NCT00932880 -NCT00922194 -NCT00927589 -NCT00922233 -NCT00927511 -NCT00922597 -NCT00927901 -NCT00922805 -NCT00927953 -NCT00922870 -NCT00928044 -NCT00922883 -NCT00928161 -NCT00923013 -NCT00928330 -NCT00923052 -NCT00928564 -NCT00923195 -NCT00928629 -NCT00923247 -NCT00928707 -NCT00923364 -NCT00928759 -NCT00923429 -NCT00928837 -NCT00923559 -NCT00928993 -NCT00923780 -NCT00929006 -NCT00924040 -NCT00929188 -NCT00924170 -NCT00929240 -NCT00924183 -NCT00929305 -NCT00924196 -NCT00929318 -NCT00924261 -NCT00929591 -NCT00924287 -NCT00929643 -NCT00924326 -NCT00929903 -NCT00924352 -NCT00929981 -NCT00924508 -NCT00930007 -NCT00924612 -NCT00930124 -NCT00924638 -NCT00930202 -NCT00924755 -NCT00930228 -NCT00924768 -NCT00930332 -NCT00924872 -NCT00930423 -NCT00924950 -NCT00930709 -NCT00925041 -NCT00930852 -NCT00925067 -NCT00930930 -NCT00925145 -NCT00931099 -NCT00925158 -NCT00931164 -NCT00925210 -NCT00931190 -NCT00925236 -NCT00931450 -NCT00925522 -NCT00931528 -NCT00925652 -NCT00931593 -NCT00925691 -NCT00931619 -NCT00925847 -NCT00931645 -NCT00925977 -NCT00931788 -NCT00926120 -NCT00931840 -NCT00926237 -NCT00931866 -NCT00926380 -NCT00931970 -NCT00926419 -NCT00932022 -NCT00926471 -NCT00932256 -NCT00926601 -NCT00932373 -NCT00926640 -NCT00932412 -NCT00926835 -NCT00932425 -NCT00926913 -NCT00932451 -NCT00927030 -NCT00932555 -NCT00927056 -NCT00932698 -NCT00927069 -NCT00932737 -NCT00927108 -NCT00932763 -NCT00927186 -NCT00932841 -NCT00927212 -NCT00932854 -NCT00927303 -NCT00942019 -NCT00932893 -NCT00937638 -NCT00932919 -NCT00937547 -NCT00932971 -NCT00937690 -NCT00933036 -NCT00937898 -NCT00933140 -NCT00938184 -NCT00933244 -NCT00938301 -NCT00933296 -NCT00938483 -NCT00933322 -NCT00938535 -NCT00933361 -NCT00938626 -NCT00933465 -NCT00938652 -NCT00933478 -NCT00938860 -NCT00933543 -NCT00938925 -NCT00933608 -NCT00938977 -NCT00933660 -NCT00939107 -NCT00933686 -NCT00939120 -NCT00933777 -NCT00939211 -NCT00933829 -NCT00939419 -NCT00933894 -NCT00939523 -NCT00934102 -NCT00939536 -NCT00934258 -NCT00939549 -NCT00934271 -NCT00939627 -NCT00934388 -NCT00939640 -NCT00934479 -NCT00939653 -NCT00934596 -NCT00939679 -NCT00934713 -NCT00939692 -NCT00934752 -NCT00939770 -NCT00934830 -NCT00939822 -NCT00934856 -NCT00940082 -NCT00934960 -NCT00940225 -NCT00935090 -NCT00940238 -NCT00935129 -NCT00940316 -NCT00935311 -NCT00940342 -NCT00935584 -NCT00940381 -NCT00935649 -NCT00940433 -NCT00935779 -NCT00940524 -NCT00935792 -NCT00940563 -NCT00935896 -NCT00940654 -NCT00936156 -NCT00940784 -NCT00936221 -NCT00940810 -NCT00936273 -NCT00940836 -NCT00936312 -NCT00940927 -NCT00936325 -NCT00941070 -NCT00936338 -NCT00941174 -NCT00936429 -NCT00941330 -NCT00936585 -NCT00941343 -NCT00936728 -NCT00941369 -NCT00936741 -NCT00941499 -NCT00936767 -NCT00941551 -NCT00936793 -NCT00941616 -NCT00936806 -NCT00941681 -NCT00936845 -NCT00941746 -NCT00937092 -NCT00941928 -NCT00937131 -NCT00941941 -NCT00937144 -NCT00941993 -NCT00937274 -NCT00942006 -NCT00937287 -NCT00951730 -NCT00942227 -NCT00947219 -NCT00942409 -NCT00947193 -NCT00942591 -NCT00947271 -NCT00942630 -NCT00947453 -NCT00942812 -NCT00947479 -NCT00942851 -NCT00947505 -NCT00942955 -NCT00947765 -NCT00943033 -NCT00947882 -NCT00943059 -NCT00947960 -NCT00943267 -NCT00947986 -NCT00943280 -NCT00948012 -NCT00943358 -NCT00948064 -NCT00943410 -NCT00948142 -NCT00943514 -NCT00948220 -NCT00943527 -NCT00948259 -NCT00943553 -NCT00948376 -NCT00943631 -NCT00948402 -NCT00943644 -NCT00948467 -NCT00943657 -NCT00948506 -NCT00943670 -NCT00948766 -NCT00943722 -NCT00948779 -NCT00943748 -NCT00948922 -NCT00943774 -NCT00949169 -NCT00943839 -NCT00949208 -NCT00943865 -NCT00949247 -NCT00943878 -NCT00949416 -NCT00943943 -NCT00949455 -NCT00944047 -NCT00949598 -NCT00944216 -NCT00949637 -NCT00944567 -NCT00949650 -NCT00944671 -NCT00949702 -NCT00944801 -NCT00949741 -NCT00944879 -NCT00949975 -NCT00945009 -NCT00950170 -NCT00945022 -NCT00950183 -NCT00945061 -NCT00950261 -NCT00945334 -NCT00950300 -NCT00945373 -NCT00950326 -NCT00945412 -NCT00950482 -NCT00945581 -NCT00950625 -NCT00945685 -NCT00950651 -NCT00945750 -NCT00950677 -NCT00945880 -NCT00950690 -NCT00945919 -NCT00950742 -NCT00946010 -NCT00950755 -NCT00946023 -NCT00950768 -NCT00946101 -NCT00950781 -NCT00946114 -NCT00950989 -NCT00946192 -NCT00951119 -NCT00946335 -NCT00951145 -NCT00946374 -NCT00951223 -NCT00946400 -NCT00951405 -NCT00946712 -NCT00951431 -NCT00946816 -NCT00951522 -NCT00946842 -NCT00951665 -NCT00947037 -NCT00962312 -NCT00952146 -NCT00956839 -NCT00952185 -NCT00956748 -NCT00952354 -NCT00956982 -NCT00952692 -NCT00957086 -NCT00952731 -NCT00957125 -NCT00952744 -NCT00957281 -NCT00952770 -NCT00957359 -NCT00952965 -NCT00957411 -NCT00953043 -NCT00957645 -NCT00953316 -NCT00957788 -NCT00953394 -NCT00957840 -NCT00953420 -NCT00957866 -NCT00953511 -NCT00957879 -NCT00953667 -NCT00957892 -NCT00953771 -NCT00957918 -NCT00953914 -NCT00958113 -NCT00954005 -NCT00958139 -NCT00954031 -NCT00958204 -NCT00954070 -NCT00958256 -NCT00954135 -NCT00958360 -NCT00954174 -NCT00958386 -NCT00954226 -NCT00958438 -NCT00954291 -NCT00958542 -NCT00954356 -NCT00958737 -NCT00954382 -NCT00958750 -NCT00954421 -NCT00958763 -NCT00954434 -NCT00958776 -NCT00954629 -NCT00958802 -NCT00954707 -NCT00958919 -NCT00954798 -NCT00958971 -NCT00954850 -NCT00959049 -NCT00954876 -NCT00959127 -NCT00954889 -NCT00959283 -NCT00954928 -NCT00959491 -NCT00954993 -NCT00959621 -NCT00955019 -NCT00959751 -NCT00955045 -NCT00959764 -NCT00955149 -NCT00960011 -NCT00955370 -NCT00960167 -NCT00955422 -NCT00960245 -NCT00955500 -NCT00960336 -NCT00955669 -NCT00960635 -NCT00955773 -NCT00960661 -NCT00955838 -NCT00960934 -NCT00955981 -NCT00961012 -NCT00955994 -NCT00961220 -NCT00956007 -NCT00961467 -NCT00956033 -NCT00961558 -NCT00956150 -NCT00961623 -NCT00956215 -NCT00961701 -NCT00956306 -NCT00962039 -NCT00956358 -NCT00962065 -NCT00956397 -NCT00962169 -NCT00956475 -NCT00962221 -NCT00956501 -NCT00962299 -NCT00956696 -NCT00972101 -NCT00962338 -NCT00967330 -NCT00962390 -NCT00967317 -NCT00962637 -NCT00967473 -NCT00962767 -NCT00967499 -NCT00962845 -NCT00967759 -NCT00962936 -NCT00967785 -NCT00963001 -NCT00967811 -NCT00963027 -NCT00968214 -NCT00963040 -NCT00968240 -NCT00963157 -NCT00968357 -NCT00963274 -NCT00968370 -NCT00963339 -NCT00968396 -NCT00963417 -NCT00968500 -NCT00963521 -NCT00968682 -NCT00963690 -NCT00968695 -NCT00963729 -NCT00968747 -NCT00963755 -NCT00968760 -NCT00963807 -NCT00968786 -NCT00963937 -NCT00968890 -NCT00963950 -NCT00969020 -NCT00964210 -NCT00969072 -NCT00964223 -NCT00969085 -NCT00964457 -NCT00969124 -NCT00964535 -NCT00969280 -NCT00964704 -NCT00969319 -NCT00964821 -NCT00969462 -NCT00964951 -NCT00969501 -NCT00965276 -NCT00969579 -NCT00965289 -NCT00969969 -NCT00965315 -NCT00970047 -NCT00965341 -NCT00970086 -NCT00965354 -NCT00970190 -NCT00965575 -NCT00970359 -NCT00965627 -NCT00970502 -NCT00965679 -NCT00970541 -NCT00965770 -NCT00970567 -NCT00965835 -NCT00970658 -NCT00965848 -NCT00970697 -NCT00965913 -NCT00970801 -NCT00966004 -NCT00970866 -NCT00966017 -NCT00970983 -NCT00966264 -NCT00971035 -NCT00966342 -NCT00971074 -NCT00966381 -NCT00971165 -NCT00966459 -NCT00971334 -NCT00966472 -NCT00971438 -NCT00966498 -NCT00971555 -NCT00966576 -NCT00971737 -NCT00966589 -NCT00971750 -NCT00966693 -NCT00971763 -NCT00966719 -NCT00971776 -NCT00966901 -NCT00971789 -NCT00966940 -NCT00971932 -NCT00967031 -NCT00971958 -NCT00967070 -NCT00971971 -NCT00967174 -NCT00981461 -NCT00972218 -NCT00977080 -NCT00972231 -NCT00977054 -NCT00972296 -NCT00977093 -NCT00972309 -NCT00977236 -NCT00972530 -NCT00977353 -NCT00973063 -NCT00977366 -NCT00973154 -NCT00977392 -NCT00973219 -NCT00977431 -NCT00973336 -NCT00977470 -NCT00973362 -NCT00977574 -NCT00973661 -NCT00977730 -NCT00973674 -NCT00977821 -NCT00973739 -NCT00977847 -NCT00973752 -NCT00978042 -NCT00973895 -NCT00978159 -NCT00973908 -NCT00978237 -NCT00973999 -NCT00978354 -NCT00974363 -NCT00978419 -NCT00974389 -NCT00978458 -NCT00974480 -NCT00978549 -NCT00974532 -NCT00978627 -NCT00974558 -NCT00978679 -NCT00974636 -NCT00978861 -NCT00974727 -NCT00978939 -NCT00974831 -NCT00978991 -NCT00974883 -NCT00979043 -NCT00974935 -NCT00979108 -NCT00975013 -NCT00979160 -NCT00975078 -NCT00979212 -NCT00975130 -NCT00979589 -NCT00975143 -NCT00979602 -NCT00975156 -NCT00979628 -NCT00975208 -NCT00979719 -NCT00975403 -NCT00979758 -NCT00975442 -NCT00979836 -NCT00975546 -NCT00979914 -NCT00975585 -NCT00979979 -NCT00975650 -NCT00980018 -NCT00975728 -NCT00980161 -NCT00975741 -NCT00980174 -NCT00975793 -NCT00980187 -NCT00975819 -NCT00980239 -NCT00975884 -NCT00980395 -NCT00975897 -NCT00980603 -NCT00976040 -NCT00980785 -NCT00976313 -NCT00980798 -NCT00976443 -NCT00980954 -NCT00976547 -NCT00981032 -NCT00976560 -NCT00981045 -NCT00976573 -NCT00981058 -NCT00976586 -NCT00981071 -NCT00976599 -NCT00981136 -NCT00976625 -NCT00981201 -NCT00976677 -NCT00981305 -NCT00976781 -NCT00981370 -NCT00976989 -NCT00993356 -NCT00981552 -NCT00987831 -NCT00981604 -NCT00987805 -NCT00981656 -NCT00988065 -NCT00981695 -NCT00988078 -NCT00981708 -NCT00988143 -NCT00981734 -NCT00988260 -NCT00981851 -NCT00988351 -NCT00982007 -NCT00988442 -NCT00982124 -NCT00988468 -NCT00982228 -NCT00988559 -NCT00982332 -NCT00988572 -NCT00982540 -NCT00988715 -NCT00982579 -NCT00988741 -NCT00982605 -NCT00988949 -NCT00982787 -NCT00988975 -NCT00982800 -NCT00989196 -NCT00982839 -NCT00989222 -NCT00982852 -NCT00989261 -NCT00982891 -NCT00989443 -NCT00982904 -NCT00989469 -NCT00982969 -NCT00989508 -NCT00982995 -NCT00989547 -NCT00983138 -NCT00989612 -NCT00983307 -NCT00989625 -NCT00983437 -NCT00989651 -NCT00983489 -NCT00989677 -NCT00983502 -NCT00989690 -NCT00983554 -NCT00989716 -NCT00983697 -NCT00989742 -NCT00983749 -NCT00989794 -NCT00984100 -NCT00989859 -NCT00984191 -NCT00989898 -NCT00984217 -NCT00989976 -NCT00984243 -NCT00990054 -NCT00984334 -NCT00990132 -NCT00984659 -NCT00990223 -NCT00984828 -NCT00990379 -NCT00984893 -NCT00990652 -NCT00985010 -NCT00990808 -NCT00985088 -NCT00991146 -NCT00985309 -NCT00991159 -NCT00985413 -NCT00991406 -NCT00985504 -NCT00991562 -NCT00985803 -NCT00991601 -NCT00986180 -NCT00991731 -NCT00986284 -NCT00991874 -NCT00986674 -NCT00991952 -NCT00986765 -NCT00992017 -NCT00986882 -NCT00992277 -NCT00986973 -NCT00992433 -NCT00987012 -NCT00992693 -NCT00987077 -NCT00992836 -NCT00987116 -NCT00992992 -NCT00987194 -NCT00993252 -NCT00987350 -NCT00993265 -NCT00987389 -NCT01129349 -NCT00993408 -NCT00998465 -NCT00993447 -NCT00998335 -NCT00993499 -NCT00998621 -NCT00993551 -NCT00998725 -NCT00993642 -NCT00998868 -NCT00993707 -NCT00998920 -NCT00993902 -NCT00998985 -NCT00993915 -NCT00999050 -NCT00993928 -NCT00999219 -NCT00994045 -NCT00999284 -NCT00994175 -NCT00999310 -NCT00994214 -NCT00999427 -NCT00994552 -NCT00999518 -NCT00994656 -NCT00999557 -NCT00994851 -NCT00999700 -NCT00994929 -NCT00999804 -NCT00995007 -NCT01000025 -NCT00995020 -NCT01000090 -NCT00995059 -NCT01000116 -NCT00995098 -NCT01000129 -NCT00995150 -NCT01000181 -NCT00995163 -NCT01000246 -NCT00995215 -NCT01000272 -NCT00995306 -NCT01000285 -NCT00995527 -NCT01000376 -NCT00995722 -NCT01000415 -NCT00995774 -NCT01000480 -NCT00995813 -NCT01000636 -NCT00995826 -NCT01000662 -NCT00995891 -NCT01000701 -NCT00996047 -NCT01000740 -NCT00996112 -NCT01000779 -NCT00996424 -NCT01000857 -NCT00996567 -NCT01128257 -NCT00996593 -NCT01128296 -NCT00996632 -NCT01128387 -NCT00996697 -NCT01128517 -NCT00996710 -NCT01128543 -NCT00996762 -NCT01128556 -NCT00996801 -NCT01128608 -NCT00996996 -NCT01128660 -NCT00997009 -NCT01128712 -NCT00997100 -NCT01128803 -NCT00997269 -NCT01128842 -NCT00997334 -NCT01128881 -NCT00997412 -NCT01128998 -NCT00997425 -NCT01129037 -NCT00997490 -NCT01129063 -NCT00997516 -NCT01129128 -NCT00997581 -NCT01129154 -NCT00997828 -NCT01129167 -NCT00997854 -NCT01129180 -NCT00997867 -NCT01129193 -NCT00997958 -NCT01129206 -NCT00998244 -NCT01129310 -NCT00998322 -NCT01129336 -NCT01000896 -NCT01127698 -NCT01000948 -NCT01127737 -NCT01001143 -NCT01127763 -NCT01001221 -NCT01127841 -NCT01001299 -NCT01127867 -NCT01001377 -NCT01128010 -NCT01001390 -NCT01128101 -NCT01001442 -NCT01128192 -NCT01001598 -NCT01128218 -NCT01001728 -NCT01122888 -NCT01122901 -NCT01123005 -NCT01123044 -NCT01123096 -NCT01123109 -NCT01123161 -NCT01123304 -NCT01123356 -NCT01123369 -NCT01123473 -NCT01123486 -NCT01123512 -NCT01123603 -NCT01123811 -NCT01123876 -NCT01123902 -NCT01123928 -NCT01123941 -NCT01123954 -NCT01124136 -NCT01124240 -NCT01124253 -NCT01124357 -NCT01124409 -NCT01124435 -NCT01124500 -NCT01124526 -NCT01124539 -NCT01124591 -NCT01124630 -NCT01124656 -NCT01124669 -NCT01124682 -NCT01124695 -NCT01124734 -NCT01124786 -NCT01124812 -NCT01124864 -NCT01124994 -NCT01125020 -NCT01125046 -NCT01125085 -NCT01125124 -NCT01125176 -NCT01125215 -NCT01125241 -NCT01125267 -NCT01125293 -NCT01125345 -NCT01125449 -NCT01125488 -NCT01125566 -NCT01125683 -NCT01125709 -NCT01125774 -NCT01125787 -NCT01125800 -NCT01125813 -NCT01125865 -NCT01125891 -NCT01125930 -NCT01125943 -NCT01125969 -NCT01125995 -NCT01126008 -NCT01126060 -NCT01126112 -NCT01126138 -NCT01126177 -NCT01126216 -NCT01126281 -NCT01126307 -NCT01126346 -NCT01126450 -NCT01126463 -NCT01126476 -NCT01126502 -NCT01126645 -NCT01126671 -NCT01126684 -NCT01126736 -NCT01126749 -NCT01126814 -NCT01126866 -NCT01126879 -NCT01126892 -NCT01126905 -NCT01126931 -NCT01126944 -NCT01127009 -NCT01127061 -NCT01127074 -NCT01127178 -NCT01127295 -NCT01127373 -NCT01127386 -NCT01127425 -NCT01127451 -NCT01127464 -NCT01127542 -NCT01127555 -NCT01127594 -NCT01127659 -NCT01001793 -NCT01122875 -NCT01001858 -NCT01116336 -NCT01116362 -NCT01116414 -NCT01116466 -NCT01116479 -NCT01116622 -NCT01116635 -NCT01116648 -NCT01116661 -NCT01116687 -NCT01116791 -NCT01116804 -NCT01116843 -NCT01117012 -NCT01117025 -NCT01117051 -NCT01117142 -NCT01117246 -NCT01117337 -NCT01117402 -NCT01117428 -NCT01117441 -NCT01117506 -NCT01117558 -NCT01117623 -NCT01117714 -NCT01117818 -NCT01117831 -NCT01117844 -NCT01117935 -NCT01118013 -NCT01118026 -NCT01118039 -NCT01118052 -NCT01118065 -NCT01118091 -NCT01118221 -NCT01118234 -NCT01118338 -NCT01118351 -NCT01118377 -NCT01118507 -NCT01118585 -NCT01118611 -NCT01118624 -NCT01118676 -NCT01118689 -NCT01118741 -NCT01118819 -NCT01118845 -NCT01118897 -NCT01118975 -NCT01118988 -NCT01119066 -NCT01119105 -NCT01119118 -NCT01119443 -NCT01119456 -NCT01119482 -NCT01119508 -NCT01119521 -NCT01119547 -NCT01119599 -NCT01119664 -NCT01119742 -NCT01119794 -NCT01119833 -NCT01119898 -NCT01119976 -NCT01120158 -NCT01120171 -NCT01120184 -NCT01120197 -NCT01120236 -NCT01120249 -NCT01120275 -NCT01120288 -NCT01120340 -NCT01120457 -NCT01120470 -NCT01120574 -NCT01120600 -NCT01120626 -NCT01120639 -NCT01120795 -NCT01120821 -NCT01120834 -NCT01121107 -NCT01121120 -NCT01121133 -NCT01121263 -NCT01121393 -NCT01121406 -NCT01121432 -NCT01121484 -NCT01121497 -NCT01121562 -NCT01121575 -NCT01121588 -NCT01121601 -NCT01121640 -NCT01121718 -NCT01121731 -NCT01121757 -NCT01121848 -NCT01121900 -NCT01121926 -NCT01121939 -NCT01122121 -NCT01122147 -NCT01122160 -NCT01122199 -NCT01122303 -NCT01122342 -NCT01122381 -NCT01122459 -NCT01122472 -NCT01122485 -NCT01122524 -NCT01122615 -NCT01122732 -NCT01122797 -NCT01001910 -NCT01116167 -NCT01001936 -NCT01116193 -NCT01002014 -NCT01116206 -NCT01002066 -NCT01116219 -NCT01002092 -NCT01116232 -NCT01002248 -NCT01116245 -NCT01002417 -NCT01116271 -NCT01002443 -NCT01116297 -NCT01002664 -NCT01110941 -NCT01110954 -NCT01110980 -NCT01110993 -NCT01111019 -NCT01111058 -NCT01111097 -NCT01111188 -NCT01111253 -NCT01111292 -NCT01111448 -NCT01111461 -NCT01111526 -NCT01111591 -NCT01111604 -NCT01111656 -NCT01111812 -NCT01111825 -NCT01111838 -NCT01111903 -NCT01111929 -NCT01111942 -NCT01112007 -NCT01112046 -NCT01112098 -NCT01112189 -NCT01112215 -NCT01112228 -NCT01112254 -NCT01112280 -NCT01112293 -NCT01112345 -NCT01112384 -NCT01112514 -NCT01112527 -NCT01112540 -NCT01112592 -NCT01112618 -NCT01112631 -NCT01112657 -NCT01112683 -NCT01112826 -NCT01112839 -NCT01112891 -NCT01112982 -NCT01113034 -NCT01113255 -NCT01113268 -NCT01113320 -NCT01113333 -NCT01113385 -NCT01113398 -NCT01113463 -NCT01113476 -NCT01113502 -NCT01113554 -NCT01113632 -NCT01113710 -NCT01113736 -NCT01113905 -NCT01113918 -NCT01113957 -NCT01113970 -NCT01114048 -NCT01114087 -NCT01114113 -NCT01114139 -NCT01114165 -NCT01114191 -NCT01114230 -NCT01114243 -NCT01114269 -NCT01114282 -NCT01114360 -NCT01114373 -NCT01114386 -NCT01114555 -NCT01114581 -NCT01114633 -NCT01114698 -NCT01114711 -NCT01114802 -NCT01114815 -NCT01114828 -NCT01114867 -NCT01114932 -NCT01114958 -NCT01115036 -NCT01115244 -NCT01115270 -NCT01115283 -NCT01115335 -NCT01115361 -NCT01115452 -NCT01115491 -NCT01115686 -NCT01115751 -NCT01115790 -NCT01115803 -NCT01115985 -NCT01116037 -NCT01116063 -NCT01116102 -NCT01116115 -NCT01116128 -NCT01116154 -NCT01116323 -NCT01002703 -NCT01110928 -NCT01002755 -NCT01094184 -NCT01094288 -NCT01094301 -NCT01094379 -NCT01094405 -NCT01094431 -NCT01094470 -NCT01094496 -NCT01094535 -NCT01094548 -NCT01094561 -NCT01094600 -NCT01094626 -NCT01094665 -NCT01094704 -NCT01094808 -NCT01094860 -NCT01094912 -NCT01094964 -NCT01095003 -NCT01095094 -NCT01095120 -NCT01095133 -NCT01095198 -NCT01095302 -NCT01095328 -NCT01095367 -NCT01095458 -NCT01095471 -NCT01095523 -NCT01095627 -NCT01095744 -NCT01095757 -NCT01095822 -NCT01095848 -NCT01095913 -NCT01095926 -NCT01096030 -NCT01096134 -NCT01096199 -NCT01096238 -NCT01096290 -NCT01096316 -NCT01096342 -NCT01096355 -NCT01096368 -NCT01096446 -NCT01096472 -NCT01096524 -NCT01096602 -NCT01096615 -NCT01096641 -NCT01096719 -NCT01096732 -NCT01096745 -NCT01101646 -NCT01101659 -NCT01101672 -NCT01101724 -NCT01101750 -NCT01101841 -NCT01101880 -NCT01101906 -NCT01102023 -NCT01102088 -NCT01102179 -NCT01102192 -NCT01102205 -NCT01102231 -NCT01102309 -NCT01102335 -NCT01102361 -NCT01102426 -NCT01102517 -NCT01102595 -NCT01108666 -NCT01108705 -NCT01108783 -NCT01108835 -NCT01108991 -NCT01109004 -NCT01109069 -NCT01109095 -NCT01109121 -NCT01109199 -NCT01109212 -NCT01109264 -NCT01109277 -NCT01109329 -NCT01109420 -NCT01109446 -NCT01109472 -NCT01109524 -NCT01109537 -NCT01109576 -NCT01109602 -NCT01109615 -NCT01109667 -NCT01109771 -NCT01109849 -NCT01109901 -NCT01110083 -NCT01110135 -NCT01110174 -NCT01110200 -NCT01110226 -NCT01110265 -NCT01110330 -NCT01110421 -NCT01110447 -NCT01110473 -NCT01110486 -NCT01110603 -NCT01110668 -NCT01110694 -NCT01110733 -NCT01110785 -NCT01110798 -NCT01110824 -NCT01110837 -NCT01110850 -NCT01110876 -NCT01002781 -NCT01094132 -NCT01002924 -NCT01070628 -NCT01070706 -NCT01070862 -NCT01070875 -NCT01070927 -NCT01071018 -NCT01071109 -NCT01071161 -NCT01071200 -NCT01071226 -NCT01071239 -NCT01071304 -NCT01071447 -NCT01071564 -NCT01071655 -NCT01071694 -NCT01071733 -NCT01071824 -NCT01071837 -NCT01071915 -NCT01071928 -NCT01071941 -NCT01072045 -NCT01072084 -NCT01072149 -NCT01072175 -NCT01072266 -NCT01072318 -NCT01072409 -NCT01072513 -NCT01072526 -NCT01072630 -NCT01072682 -NCT01072773 -NCT01072838 -NCT01072851 -NCT01072890 -NCT01072929 -NCT01072981 -NCT01073163 -NCT01073241 -NCT01073267 -NCT01073319 -NCT01073358 -NCT01073527 -NCT01073605 -NCT01073683 -NCT01073709 -NCT01073722 -NCT01073839 -NCT01073865 -NCT01073982 -NCT01074008 -NCT01074021 -NCT01074047 -NCT01074060 -NCT01074086 -NCT01074138 -NCT01074177 -NCT01074203 -NCT01074216 -NCT01074307 -NCT01074359 -NCT01074385 -NCT01074411 -NCT01074437 -NCT01074476 -NCT01074502 -NCT01074528 -NCT01074554 -NCT01074645 -NCT01074658 -NCT01074671 -NCT01074697 -NCT01074736 -NCT01074775 -NCT01074801 -NCT01074814 -NCT01074827 -NCT01074853 -NCT01074957 -NCT01074970 -NCT01074996 -NCT01075048 -NCT01075087 -NCT01091974 -NCT01091987 -NCT01092052 -NCT01092078 -NCT01092091 -NCT01092182 -NCT01092247 -NCT01092351 -NCT01092468 -NCT01092481 -NCT01092546 -NCT01092585 -NCT01092624 -NCT01092689 -NCT01092728 -NCT01092741 -NCT01092780 -NCT01092897 -NCT01092910 -NCT01093027 -NCT01093066 -NCT01093092 -NCT01093183 -NCT01093196 -NCT01093222 -NCT01093235 -NCT01093365 -NCT01093378 -NCT01093521 -NCT01093573 -NCT01093586 -NCT01093612 -NCT01093690 -NCT01093755 -NCT01093768 -NCT01093859 -NCT01093950 -NCT01003002 -NCT01068938 -NCT01003015 -NCT01068964 -NCT01003054 -NCT01068977 -NCT01003106 -NCT01069055 -NCT01003145 -NCT01069081 -NCT01003158 -NCT01069172 -NCT01003223 -NCT01069289 -NCT01003249 -NCT01069328 -NCT01003262 -NCT01069536 -NCT01003379 -NCT01069575 -NCT01003509 -NCT01069627 -NCT01003522 -NCT01069640 -NCT01003548 -NCT01069653 -NCT01003574 -NCT01069757 -NCT01003626 -NCT01069770 -NCT01003639 -NCT01069796 -NCT01003678 -NCT01069887 -NCT01003769 -NCT01069900 -NCT01003808 -NCT01069991 -NCT01003886 -NCT01070056 -NCT01003899 -NCT01070160 -NCT01003938 -NCT01070173 -NCT01003951 -NCT01070186 -NCT01003964 -NCT01070277 -NCT01004003 -NCT01070290 -NCT01004081 -NCT01070316 -NCT01004094 -NCT01070355 -NCT01004159 -NCT01070485 -NCT01004172 -NCT01065935 -NCT01066013 -NCT01066052 -NCT01066091 -NCT01066169 -NCT01066195 -NCT01066208 -NCT01066221 -NCT01066234 -NCT01066338 -NCT01066390 -NCT01066429 -NCT01066468 -NCT01066494 -NCT01066507 -NCT01066572 -NCT01066624 -NCT01066663 -NCT01066676 -NCT01066741 -NCT01066871 -NCT01066884 -NCT01066936 -NCT01067014 -NCT01067053 -NCT01067066 -NCT01067144 -NCT01067274 -NCT01067287 -NCT01067300 -NCT01067352 -NCT01067365 -NCT01067456 -NCT01067469 -NCT01067508 -NCT01067690 -NCT01067755 -NCT01067768 -NCT01067937 -NCT01067976 -NCT01067989 -NCT01068054 -NCT01068132 -NCT01068184 -NCT01068210 -NCT01068236 -NCT01068249 -NCT01068288 -NCT01068301 -NCT01068314 -NCT01068327 -NCT01068366 -NCT01068392 -NCT01068405 -NCT01068444 -NCT01068483 -NCT01068509 -NCT01068587 -NCT01068704 -NCT01068769 -NCT01068782 -NCT01070537 -NCT01004211 -NCT01065818 -NCT01004224 -NCT01065831 -NCT01004250 -NCT01065844 -NCT01004380 -NCT01026051 -NCT01026116 -NCT01026142 -NCT01026181 -NCT01026207 -NCT01026220 -NCT01026233 -NCT01026324 -NCT01026415 -NCT01026493 -NCT01026532 -NCT01026571 -NCT01026584 -NCT01026623 -NCT01026675 -NCT01026753 -NCT01026792 -NCT01026844 -NCT01026870 -NCT01026935 -NCT01027000 -NCT01027039 -NCT01027156 -NCT01027182 -NCT01027195 -NCT01027208 -NCT01027221 -NCT01027286 -NCT01027325 -NCT01027416 -NCT01027429 -NCT01027494 -NCT01027559 -NCT01027598 -NCT01027637 -NCT01027663 -NCT01027676 -NCT01027741 -NCT01027793 -NCT01027819 -NCT01027884 -NCT01027910 -NCT01027923 -NCT01027975 -NCT01028040 -NCT01028222 -NCT01028235 -NCT01028287 -NCT01028352 -NCT01028365 -NCT01028378 -NCT01028417 -NCT01028456 -NCT01028469 -NCT01028495 -NCT01028612 -NCT01028651 -NCT01028677 -NCT01028716 -NCT01028729 -NCT01028755 -NCT01028859 -NCT01028885 -NCT01028989 -NCT01029054 -NCT01029093 -NCT01029275 -NCT01063517 -NCT01063530 -NCT01063556 -NCT01063569 -NCT01063660 -NCT01063673 -NCT01063790 -NCT01063816 -NCT01063868 -NCT01063907 -NCT01063920 -NCT01063946 -NCT01064011 -NCT01064050 -NCT01064089 -NCT01064128 -NCT01064245 -NCT01064284 -NCT01064310 -NCT01064375 -NCT01064401 -NCT01064466 -NCT01064479 -NCT01064557 -NCT01064570 -NCT01064622 -NCT01064635 -NCT01064648 -NCT01064661 -NCT01064713 -NCT01064726 -NCT01064921 -NCT01064999 -NCT01065025 -NCT01065038 -NCT01065090 -NCT01065129 -NCT01065233 -NCT01065246 -NCT01065441 -NCT01065454 -NCT01065467 -NCT01065545 -NCT01065623 -NCT01065649 -NCT01065662 -NCT01065675 -NCT01065688 -NCT01065753 -NCT01065805 -NCT01065870 -NCT01004393 -NCT01026025 -NCT01004419 -NCT01019486 -NCT01019499 -NCT01019512 -NCT01019577 -NCT01019616 -NCT01019798 -NCT01019850 -NCT01019863 -NCT01019876 -NCT01019889 -NCT01019928 -NCT01019941 -NCT01019980 -NCT01020006 -NCT01020071 -NCT01020097 -NCT01020136 -NCT01020175 -NCT01020279 -NCT01020292 -NCT01020305 -NCT01020331 -NCT01020370 -NCT01020448 -NCT01020513 -NCT01020539 -NCT01020630 -NCT01020682 -NCT01020721 -NCT01020734 -NCT01020786 -NCT01020812 -NCT01020864 -NCT01020916 -NCT01021059 -NCT01021072 -NCT01021137 -NCT01021150 -NCT01021267 -NCT01021280 -NCT01021358 -NCT01021423 -NCT01021579 -NCT01021748 -NCT01021800 -NCT01021852 -NCT01021891 -NCT01021904 -NCT01021982 -NCT01022021 -NCT01022099 -NCT01022138 -NCT01022255 -NCT01022268 -NCT01022333 -NCT01022346 -NCT01022385 -NCT01022398 -NCT01022476 -NCT01022541 -NCT01022619 -NCT01022632 -NCT01022645 -NCT01022671 -NCT01022827 -NCT01022853 -NCT01022905 -NCT01022918 -NCT01022996 -NCT01023061 -NCT01023113 -NCT01023191 -NCT01023204 -NCT01023217 -NCT01023308 -NCT01023347 -NCT01023386 -NCT01023412 -NCT01023477 -NCT01023490 -NCT01023516 -NCT01023633 -NCT01023867 -NCT01023880 -NCT01023958 -NCT01023971 -NCT01023984 -NCT01024010 -NCT01024062 -NCT01024088 -NCT01024101 -NCT01024205 -NCT01024231 -NCT01024270 -NCT01024387 -NCT01024413 -NCT01024504 -NCT01024582 -NCT01024712 -NCT01024829 -NCT01024907 -NCT01024920 -NCT01024946 -NCT01024959 -NCT01025076 -NCT01025089 -NCT01025128 -NCT01025154 -NCT01025206 -NCT01025284 -NCT01025349 -NCT01025453 -NCT01025505 -NCT01025518 -NCT01025570 -NCT01025583 -NCT01025622 -NCT01025635 -NCT01025778 -NCT01025882 -NCT01025960 -NCT01026012 -NCT01004484 -NCT01019109 -NCT01004497 -NCT01019122 -NCT01004510 -NCT01019161 -NCT01004601 -NCT01019174 -NCT01004718 -NCT01019187 -NCT01004731 -NCT01019213 -NCT01004744 -NCT01019226 -NCT01004822 -NCT01019239 -NCT01004835 -NCT01019278 -NCT01004861 -NCT01019317 -NCT01004874 -NCT01019343 -NCT01004887 -NCT01019382 -NCT01004965 -NCT01019434 -NCT01004978 -NCT01015261 -NCT01015300 -NCT01015339 -NCT01015352 -NCT01015378 -NCT01015417 -NCT01015430 -NCT01015443 -NCT01015521 -NCT01015534 -NCT01015560 -NCT01015625 -NCT01015664 -NCT01015677 -NCT01015690 -NCT01015742 -NCT01015755 -NCT01015820 -NCT01015833 -NCT01015898 -NCT01015911 -NCT01016002 -NCT01016015 -NCT01016054 -NCT01016093 -NCT01016106 -NCT01016327 -NCT01016353 -NCT01016366 -NCT01016418 -NCT01016483 -NCT01016548 -NCT01016561 -NCT01016574 -NCT01016600 -NCT01016639 -NCT01016652 -NCT01016665 -NCT01016678 -NCT01016691 -NCT01016730 -NCT01016743 -NCT01016769 -NCT01016782 -NCT01016795 -NCT01016860 -NCT01016886 -NCT01016964 -NCT01016977 -NCT01016990 -NCT01017120 -NCT01017133 -NCT01017146 -NCT01017172 -NCT01017185 -NCT01017198 -NCT01017250 -NCT01017354 -NCT01017497 -NCT01017510 -NCT01017549 -NCT01017601 -NCT01017640 -NCT01017653 -NCT01017679 -NCT01017731 -NCT01017809 -NCT01017822 -NCT01017874 -NCT01017939 -NCT01017952 -NCT01017965 -NCT01017978 -NCT01018069 -NCT01018108 -NCT01018147 -NCT01018160 -NCT01018173 -NCT01018251 -NCT01018329 -NCT01018381 -NCT01018485 -NCT01018511 -NCT01018563 -NCT01018680 -NCT01018706 -NCT01018745 -NCT01018758 -NCT01018784 -NCT01018836 -NCT01018901 -NCT01018966 -NCT01018979 -NCT01019070 -NCT01019083 -NCT01004991 -NCT01013883 -NCT01005017 -NCT01013909 -NCT01005043 -NCT01013948 -NCT01005095 -NCT01013961 -NCT01005147 -NCT01014013 -NCT01005199 -NCT01014026 -NCT01005277 -NCT01014039 -NCT01005303 -NCT01014130 -NCT01005329 -NCT01014156 -NCT01005355 -NCT01014169 -NCT01005381 -NCT01014208 -NCT01005433 -NCT01014221 -NCT01005472 -NCT01014312 -NCT01005563 -NCT01014351 -NCT01005589 -NCT01014390 -NCT01005641 -NCT01014429 -NCT01005680 -NCT01014507 -NCT01005693 -NCT01014520 -NCT01005745 -NCT01014546 -NCT01005758 -NCT01014559 -NCT01005797 -NCT01014598 -NCT01005849 -NCT01014624 -NCT01005875 -NCT01014715 -NCT01005914 -NCT01014767 -NCT01005979 -NCT01014819 -NCT01006044 -NCT01014871 -NCT01006226 -NCT01014897 -NCT01006252 -NCT01014936 -NCT01006265 -NCT01015118 -NCT01006330 -NCT01015131 -NCT01006343 -NCT01015196 -NCT01006356 -NCT01015222 -NCT01006369 -NCT01015248 -NCT01006395 -NCT01011751 -NCT01011777 -NCT01011803 -NCT01011816 -NCT01011842 -NCT01011894 -NCT01011920 -NCT01011933 -NCT01011946 -NCT01011972 -NCT01011998 -NCT01012037 -NCT01012102 -NCT01012141 -NCT01012154 -NCT01012258 -NCT01012271 -NCT01012297 -NCT01012336 -NCT01012349 -NCT01012362 -NCT01012401 -NCT01012427 -NCT01012440 -NCT01012492 -NCT01012609 -NCT01012739 -NCT01012804 -NCT01012817 -NCT01012882 -NCT01013168 -NCT01013207 -NCT01013285 -NCT01013324 -NCT01013337 -NCT01013441 -NCT01013480 -NCT01013493 -NCT01013506 -NCT01013597 -NCT01013623 -NCT01013636 -NCT01013649 -NCT01013714 -NCT01013740 -NCT01013779 -NCT01013792 -NCT01013805 -NCT01013831 -NCT01013844 -NCT01006408 -NCT01009463 -NCT01006447 -NCT01009450 -NCT01006564 -NCT01009502 -NCT01006577 -NCT01009515 -NCT01006785 -NCT01009593 -NCT01006941 -NCT01009723 -NCT01006980 -NCT01009736 -NCT01006993 -NCT01009775 -NCT01007032 -NCT01009788 -NCT01007162 -NCT01009801 -NCT01007214 -NCT01009840 -NCT01007240 -NCT01009866 -NCT01007266 -NCT01009918 -NCT01007292 -NCT01009931 -NCT01007318 -NCT01009970 -NCT01007331 -NCT01009983 -NCT01007448 -NCT01010061 -NCT01007474 -NCT01010074 -NCT01007526 -NCT01010113 -NCT01007552 -NCT01010126 -NCT01007565 -NCT01010152 -NCT01007656 -NCT01010165 -NCT01007695 -NCT01010217 -NCT01007942 -NCT01010243 -NCT01007968 -NCT01010295 -NCT01008007 -NCT01010308 -NCT01008150 -NCT01010321 -NCT01008163 -NCT01010334 -NCT01008358 -NCT01010373 -NCT01008397 -NCT01010451 -NCT01008462 -NCT01010568 -NCT01008475 -NCT01010672 -NCT01008488 -NCT01010711 -NCT01008501 -NCT01010802 -NCT01008514 -NCT01010841 -NCT01008527 -NCT01010854 -NCT01008566 -NCT01010880 -NCT01008657 -NCT01010945 -NCT01008696 -NCT01010958 -NCT01008774 -NCT01010984 -NCT01008787 -NCT01011010 -NCT01008865 -NCT01011075 -NCT01008904 -NCT01011231 -NCT01008917 -NCT01011257 -NCT01008930 -NCT01011270 -NCT01008969 -NCT01011283 -NCT01009008 -NCT01011322 -NCT01009073 -NCT01011426 -NCT01009099 -NCT01011439 -NCT01009177 -NCT01011478 -NCT01009190 -NCT01011517 -NCT01009203 -NCT01011530 -NCT01009255 -NCT01011543 -NCT01009294 -NCT01011595 -NCT01009346 -NCT01011647 -NCT01009437 -NCT01063478 -NCT01029301 -NCT01031654 -NCT01029340 -NCT01031641 -NCT01029366 -NCT01031680 -NCT01029392 -NCT01031719 -NCT01029418 -NCT01031732 -NCT01029444 -NCT01031784 -NCT01029509 -NCT01031875 -NCT01029561 -NCT01038609 -NCT01029587 -NCT01038635 -NCT01029626 -NCT01038661 -NCT01029639 -NCT01038713 -NCT01029652 -NCT01038752 -NCT01029678 -NCT01038778 -NCT01029691 -NCT01038804 -NCT01029704 -NCT01038856 -NCT01029730 -NCT01038869 -NCT01029834 -NCT01038908 -NCT01029860 -NCT01038960 -NCT01029873 -NCT01039025 -NCT01029912 -NCT01039038 -NCT01029925 -NCT01039103 -NCT01029990 -NCT01039155 -NCT01030042 -NCT01039181 -NCT01030055 -NCT01039207 -NCT01030081 -NCT01039298 -NCT01030107 -NCT01039350 -NCT01030211 -NCT01039363 -NCT01030263 -NCT01039519 -NCT01030380 -NCT01039545 -NCT01030393 -NCT01039675 -NCT01030445 -NCT01039688 -NCT01030536 -NCT01039844 -NCT01030614 -NCT01039909 -NCT01030653 -NCT01039948 -NCT01030718 -NCT01062334 -NCT01030757 -NCT01062373 -NCT01030783 -NCT01062399 -NCT01030861 -NCT01062425 -NCT01030887 -NCT01062451 -NCT01030900 -NCT01062490 -NCT01031030 -NCT01062568 -NCT01031043 -NCT01062620 -NCT01031121 -NCT01062659 -NCT01031212 -NCT01062789 -NCT01031225 -NCT01062893 -NCT01031238 -NCT01062919 -NCT01031342 -NCT01062945 -NCT01031368 -NCT01063075 -NCT01031381 -NCT01063114 -NCT01031407 -NCT01063179 -NCT01031420 -NCT01063192 -NCT01031446 -NCT01063205 -NCT01031498 -NCT01063257 -NCT01031576 -NCT01063283 -NCT01031589 -NCT01063387 -NCT01031628 -NCT01063439 -NCT01031901 -NCT01034683 -NCT01031953 -NCT01034670 -NCT01031992 -NCT01034748 -NCT01032031 -NCT01034787 -NCT01032044 -NCT01034878 -NCT01032057 -NCT01034995 -NCT01032122 -NCT01035099 -NCT01032148 -NCT01035112 -NCT01032200 -NCT01035177 -NCT01032213 -NCT01035216 -NCT01032252 -NCT01035229 -NCT01032278 -NCT01035268 -NCT01032291 -NCT01035385 -NCT01032343 -NCT01035437 -NCT01032434 -NCT01035463 -NCT01032512 -NCT01035502 -NCT01032590 -NCT01035567 -NCT01032603 -NCT01035658 -NCT01032681 -NCT01035775 -NCT01032694 -NCT01035983 -NCT01032746 -NCT01036009 -NCT01032850 -NCT01036087 -NCT01032928 -NCT01036113 -NCT01032967 -NCT01036230 -NCT01033019 -NCT01036321 -NCT01033032 -NCT01036399 -NCT01033123 -NCT01036412 -NCT01033162 -NCT01036594 -NCT01033175 -NCT01036841 -NCT01033227 -NCT01037049 -NCT01033240 -NCT01037127 -NCT01033266 -NCT01037309 -NCT01033292 -NCT01037335 -NCT01033578 -NCT01037400 -NCT01033643 -NCT01037452 -NCT01033773 -NCT01037478 -NCT01033838 -NCT01037517 -NCT01033903 -NCT01037530 -NCT01033916 -NCT01037556 -NCT01034046 -NCT01037764 -NCT01034163 -NCT01037790 -NCT01034189 -NCT01037933 -NCT01034215 -NCT01037998 -NCT01034280 -NCT01038024 -NCT01034306 -NCT01038037 -NCT01034332 -NCT01038154 -NCT01034371 -NCT01038219 -NCT01034384 -NCT01038245 -NCT01034397 -NCT01038258 -NCT01034410 -NCT01038271 -NCT01034514 -NCT01038388 -NCT01034553 -NCT01038427 -NCT01034566 -NCT01038492 -NCT01034592 -NCT01038518 -NCT01034631 -NCT01038544 -NCT01034657 -NCT01062308 -NCT01040000 -NCT01061645 -NCT01040026 -NCT01061749 -NCT01040039 -NCT01061788 -NCT01040052 -NCT01061801 -NCT01040065 -NCT01061840 -NCT01040286 -NCT01061918 -NCT01040299 -NCT01061957 -NCT01040338 -NCT01062087 -NCT01040377 -NCT01062100 -NCT01040416 -NCT01062126 -NCT01040455 -NCT01062152 -NCT01040481 -NCT01062178 -NCT01040533 -NCT01062230 -NCT01040559 -NCT01062256 -NCT01040598 -NCT01056692 -NCT01056718 -NCT01056757 -NCT01056796 -NCT01056809 -NCT01056913 -NCT01057017 -NCT01057069 -NCT01057095 -NCT01057121 -NCT01057173 -NCT01057199 -NCT01057212 -NCT01057225 -NCT01057264 -NCT01057277 -NCT01057342 -NCT01057355 -NCT01057589 -NCT01057641 -NCT01057732 -NCT01057771 -NCT01057810 -NCT01057836 -NCT01057953 -NCT01058044 -NCT01058070 -NCT01058161 -NCT01058239 -NCT01058330 -NCT01058369 -NCT01058408 -NCT01058434 -NCT01058460 -NCT01058616 -NCT01058629 -NCT01058655 -NCT01058681 -NCT01058733 -NCT01058746 -NCT01058759 -NCT01058785 -NCT01058824 -NCT01058850 -NCT01058863 -NCT01058876 -NCT01058902 -NCT01058941 -NCT01059071 -NCT01059097 -NCT01059123 -NCT01059188 -NCT01059227 -NCT01059279 -NCT01059305 -NCT01059318 -NCT01059357 -NCT01059396 -NCT01059422 -NCT01059526 -NCT01059552 -NCT01059630 -NCT01059643 -NCT01059656 -NCT01059682 -NCT01059708 -NCT01059734 -NCT01059786 -NCT01059968 -NCT01060007 -NCT01060033 -NCT01060046 -NCT01060124 -NCT01060137 -NCT01060215 -NCT01060228 -NCT01060293 -NCT01060345 -NCT01060384 -NCT01060423 -NCT01060436 -NCT01060501 -NCT01060514 -NCT01060722 -NCT01060761 -NCT01060956 -NCT01061268 -NCT01061281 -NCT01061294 -NCT01061411 -NCT01061476 -NCT01061515 -NCT01061606 -NCT01040611 -NCT01056367 -NCT01040624 -NCT01056406 -NCT01040650 -NCT01056419 -NCT01040663 -NCT01056445 -NCT01040780 -NCT01056510 -NCT01040832 -NCT01056523 -NCT01040845 -NCT01056601 -NCT01040871 -NCT01056614 -NCT01040884 -NCT01046552 -NCT01046591 -NCT01046643 -NCT01046656 -NCT01046734 -NCT01046812 -NCT01046825 -NCT01046838 -NCT01046864 -NCT01046877 -NCT01046916 -NCT01046929 -NCT01046981 -NCT01047007 -NCT01047059 -NCT01047085 -NCT01047111 -NCT01047163 -NCT01047293 -NCT01047332 -NCT01047345 -NCT01047358 -NCT01047397 -NCT01047462 -NCT01047475 -NCT01047501 -NCT01047553 -NCT01047683 -NCT01047709 -NCT01047761 -NCT01047774 -NCT01047787 -NCT01047800 -NCT01047826 -NCT01047878 -NCT01047891 -NCT01047930 -NCT01047956 -NCT01047969 -NCT01048008 -NCT01048021 -NCT01048034 -NCT01048086 -NCT01048099 -NCT01048112 -NCT01048151 -NCT01048177 -NCT01048216 -NCT01048320 -NCT01048385 -NCT01048450 -NCT01048463 -NCT01048502 -NCT01048528 -NCT01048541 -NCT01048554 -NCT01048580 -NCT01048619 -NCT01048632 -NCT01048645 -NCT01048684 -NCT01048697 -NCT01048723 -NCT01048749 -NCT01048762 -NCT01048788 -NCT01048827 -NCT01048853 -NCT01048892 -NCT01048931 -NCT01048970 -NCT01048983 -NCT01049061 -NCT01049074 -NCT01054482 -NCT01054599 -NCT01054625 -NCT01054690 -NCT01054781 -NCT01054911 -NCT01054937 -NCT01055028 -NCT01055041 -NCT01055067 -NCT01055197 -NCT01055249 -NCT01055301 -NCT01055314 -NCT01055405 -NCT01055483 -NCT01055496 -NCT01055522 -NCT01055548 -NCT01055678 -NCT01055743 -NCT01055795 -NCT01055821 -NCT01056003 -NCT01056029 -NCT01056055 -NCT01056107 -NCT01056172 -NCT01056198 -NCT01056276 -NCT01056315 -NCT01056341 -NCT01056679 -NCT01041001 -NCT01043913 -NCT01041027 -NCT01043874 -NCT01041040 -NCT01043978 -NCT01041079 -NCT01044004 -NCT01041105 -NCT01044043 -NCT01041222 -NCT01044069 -NCT01041235 -NCT01044173 -NCT01041261 -NCT01044225 -NCT01041326 -NCT01044264 -NCT01041404 -NCT01044290 -NCT01041430 -NCT01044420 -NCT01041443 -NCT01044433 -NCT01041482 -NCT01044485 -NCT01041508 -NCT01044511 -NCT01041612 -NCT01044628 -NCT01041625 -NCT01044732 -NCT01041638 -NCT01044745 -NCT01041755 -NCT01044797 -NCT01041781 -NCT01044953 -NCT01041833 -NCT01044966 -NCT01041950 -NCT01044992 -NCT01042028 -NCT01045057 -NCT01042041 -NCT01045109 -NCT01042171 -NCT01045148 -NCT01042288 -NCT01045187 -NCT01042366 -NCT01045226 -NCT01042379 -NCT01045304 -NCT01042522 -NCT01045382 -NCT01042535 -NCT01045421 -NCT01042548 -NCT01045460 -NCT01042613 -NCT01045499 -NCT01042691 -NCT01045525 -NCT01042704 -NCT01045538 -NCT01042717 -NCT01045551 -NCT01042743 -NCT01045616 -NCT01042782 -NCT01045655 -NCT01042795 -NCT01045668 -NCT01042860 -NCT01045681 -NCT01042912 -NCT01045694 -NCT01042925 -NCT01045759 -NCT01042938 -NCT01045824 -NCT01042951 -NCT01045876 -NCT01043003 -NCT01045889 -NCT01043016 -NCT01045902 -NCT01043068 -NCT01045915 -NCT01043172 -NCT01045928 -NCT01043198 -NCT01045941 -NCT01043367 -NCT01046006 -NCT01043484 -NCT01046032 -NCT01043536 -NCT01046123 -NCT01043588 -NCT01046266 -NCT01043601 -NCT01046279 -NCT01043627 -NCT01046331 -NCT01043822 -NCT01046383 -NCT01043835 -NCT01046487 -NCT01043848 -NCT01054443 -NCT01049100 -NCT01051869 -NCT01049113 -NCT01051817 -NCT01049191 -NCT01051895 -NCT01049230 -NCT01051934 -NCT01049295 -NCT01052051 -NCT01049412 -NCT01052142 -NCT01049425 -NCT01052207 -NCT01049464 -NCT01052272 -NCT01049620 -NCT01052285 -NCT01049672 -NCT01052311 -NCT01049750 -NCT01052363 -NCT01049776 -NCT01052428 -NCT01049841 -NCT01052532 -NCT01049854 -NCT01052597 -NCT01049880 -NCT01052623 -NCT01049893 -NCT01052636 -NCT01049945 -NCT01052766 -NCT01050036 -NCT01052792 -NCT01050075 -NCT01052870 -NCT01050088 -NCT01052922 -NCT01050114 -NCT01053013 -NCT01050283 -NCT01053026 -NCT01050361 -NCT01053065 -NCT01050426 -NCT01053156 -NCT01050439 -NCT01053182 -NCT01050465 -NCT01053286 -NCT01050478 -NCT01053312 -NCT01050530 -NCT01053364 -NCT01050582 -NCT01053390 -NCT01050621 -NCT01053416 -NCT01050764 -NCT01053442 -NCT01050790 -NCT01053468 -NCT01050842 -NCT01053481 -NCT01050946 -NCT01053494 -NCT01050985 -NCT01053533 -NCT01050998 -NCT01053546 -NCT01051037 -NCT01053572 -NCT01051076 -NCT01053598 -NCT01051115 -NCT01053624 -NCT01051154 -NCT01053754 -NCT01051167 -NCT01053806 -NCT01051284 -NCT01053819 -NCT01051297 -NCT01053923 -NCT01051310 -NCT01053949 -NCT01051362 -NCT01054001 -NCT01051401 -NCT01054079 -NCT01051427 -NCT01054105 -NCT01051479 -NCT01054131 -NCT01051544 -NCT01054144 -NCT01051557 -NCT01054157 -NCT01051570 -NCT01054196 -NCT01051596 -NCT01054274 -NCT01051635 -NCT01054313 -NCT01051726 -NCT01054378 -NCT01051765 -NCT01054417 -NCT01051791 -NCT01091883 -NCT01075100 -NCT01091064 -NCT01075113 -NCT01091077 -NCT01075269 -NCT01091103 -NCT01075282 -NCT01091142 -NCT01075295 -NCT01091168 -NCT01075308 -NCT01091207 -NCT01075321 -NCT01091259 -NCT01075334 -NCT01091376 -NCT01075399 -NCT01091428 -NCT01075412 -NCT01091454 -NCT01075425 -NCT01091493 -NCT01075438 -NCT01091545 -NCT01075464 -NCT01091558 -NCT01075555 -NCT01091584 -NCT01075633 -NCT01091597 -NCT01075672 -NCT01091636 -NCT01075711 -NCT01091662 -NCT01075802 -NCT01091714 -NCT01075815 -NCT01091792 -NCT01075828 -NCT01091805 -NCT01075841 -NCT01091831 -NCT01075880 -NCT01081899 -NCT01081912 -NCT01081951 -NCT01081964 -NCT01081977 -NCT01082029 -NCT01082068 -NCT01082094 -NCT01082107 -NCT01082198 -NCT01087697 -NCT01087892 -NCT01087957 -NCT01087970 -NCT01087983 -NCT01088035 -NCT01088048 -NCT01088061 -NCT01088204 -NCT01088230 -NCT01088308 -NCT01088347 -NCT01088373 -NCT01088412 -NCT01088438 -NCT01088464 -NCT01088529 -NCT01088581 -NCT01088620 -NCT01088737 -NCT01088750 -NCT01088763 -NCT01088789 -NCT01088802 -NCT01088815 -NCT01088893 -NCT01088906 -NCT01088971 -NCT01088984 -NCT01089049 -NCT01089088 -NCT01089101 -NCT01089140 -NCT01089218 -NCT01089335 -NCT01089374 -NCT01089387 -NCT01089491 -NCT01089595 -NCT01089686 -NCT01089699 -NCT01089764 -NCT01089816 -NCT01089881 -NCT01089933 -NCT01090011 -NCT01090050 -NCT01090089 -NCT01090128 -NCT01090167 -NCT01090193 -NCT01090219 -NCT01090284 -NCT01090375 -NCT01090414 -NCT01090466 -NCT01090505 -NCT01090596 -NCT01090674 -NCT01090765 -NCT01090830 -NCT01090882 -NCT01090921 -NCT01090934 -NCT01090960 -NCT01090973 -NCT01091051 -NCT01076010 -NCT01079078 -NCT01076179 -NCT01079013 -NCT01076231 -NCT01079130 -NCT01076270 -NCT01079143 -NCT01076335 -NCT01079286 -NCT01076387 -NCT01079481 -NCT01076400 -NCT01079494 -NCT01076426 -NCT01079520 -NCT01076439 -NCT01079533 -NCT01076504 -NCT01079546 -NCT01076530 -NCT01079559 -NCT01076543 -NCT01079572 -NCT01076556 -NCT01079650 -NCT01076699 -NCT01079676 -NCT01076712 -NCT01079741 -NCT01076842 -NCT01079767 -NCT01077050 -NCT01079780 -NCT01077076 -NCT01079793 -NCT01077115 -NCT01079832 -NCT01077154 -NCT01079845 -NCT01077193 -NCT01079871 -NCT01077245 -NCT01079936 -NCT01077336 -NCT01079949 -NCT01077401 -NCT01080131 -NCT01077427 -NCT01080196 -NCT01077453 -NCT01080248 -NCT01077518 -NCT01080352 -NCT01077544 -NCT01080391 -NCT01077583 -NCT01080404 -NCT01077713 -NCT01080456 -NCT01077726 -NCT01080469 -NCT01077739 -NCT01080482 -NCT01077856 -NCT01080534 -NCT01077895 -NCT01080560 -NCT01077921 -NCT01080586 -NCT01077986 -NCT01080690 -NCT01077999 -NCT01080703 -NCT01078103 -NCT01080781 -NCT01078142 -NCT01080807 -NCT01078246 -NCT01080924 -NCT01078298 -NCT01080950 -NCT01078324 -NCT01081015 -NCT01078389 -NCT01081041 -NCT01078415 -NCT01081093 -NCT01078441 -NCT01081106 -NCT01078454 -NCT01081223 -NCT01078467 -NCT01081262 -NCT01078545 -NCT01081288 -NCT01078636 -NCT01081301 -NCT01078649 -NCT01081431 -NCT01078857 -NCT01081600 -NCT01078883 -NCT01081704 -NCT01078922 -NCT01081756 -NCT01078961 -NCT01081782 -NCT01078974 -NCT01081808 -NCT01079000 -NCT01087658 -NCT01082211 -NCT01085253 -NCT01082224 -NCT01085214 -NCT01082302 -NCT01085318 -NCT01082315 -NCT01085331 -NCT01082354 -NCT01085409 -NCT01082419 -NCT01085422 -NCT01082510 -NCT01085448 -NCT01082549 -NCT01085474 -NCT01082627 -NCT01085487 -NCT01082770 -NCT01085500 -NCT01082809 -NCT01085513 -NCT01082887 -NCT01085565 -NCT01082900 -NCT01085591 -NCT01082913 -NCT01085604 -NCT01082926 -NCT01085617 -NCT01082939 -NCT01085630 -NCT01082965 -NCT01085656 -NCT01082978 -NCT01085721 -NCT01083199 -NCT01085799 -NCT01083316 -NCT01085825 -NCT01083342 -NCT01085838 -NCT01083368 -NCT01085864 -NCT01083485 -NCT01085903 -NCT01083537 -NCT01086007 -NCT01083550 -NCT01086046 -NCT01083589 -NCT01086254 -NCT01083602 -NCT01086267 -NCT01083615 -NCT01086332 -NCT01083641 -NCT01086345 -NCT01083667 -NCT01086384 -NCT01083693 -NCT01086488 -NCT01083706 -NCT01086514 -NCT01083719 -NCT01086540 -NCT01083745 -NCT01086605 -NCT01083771 -NCT01086618 -NCT01083888 -NCT01086683 -NCT01083966 -NCT01086696 -NCT01083979 -NCT01086748 -NCT01084057 -NCT01086826 -NCT01084083 -NCT01086878 -NCT01084239 -NCT01086956 -NCT01084330 -NCT01086982 -NCT01084343 -NCT01087008 -NCT01084369 -NCT01087021 -NCT01084525 -NCT01087034 -NCT01084655 -NCT01087151 -NCT01084746 -NCT01087203 -NCT01084759 -NCT01087268 -NCT01084837 -NCT01087294 -NCT01084863 -NCT01087320 -NCT01084876 -NCT01087333 -NCT01084941 -NCT01087424 -NCT01085058 -NCT01087554 -NCT01085110 -NCT01087580 -NCT01085136 -NCT01087619 -NCT01085201 -NCT01101594 -NCT01096810 -NCT01099423 -NCT01096914 -NCT01099358 -NCT01096927 -NCT01099436 -NCT01096992 -NCT01099449 -NCT01097018 -NCT01099514 -NCT01097057 -NCT01099527 -NCT01097083 -NCT01099540 -NCT01097109 -NCT01099592 -NCT01097239 -NCT01099618 -NCT01097252 -NCT01099631 -NCT01097265 -NCT01099644 -NCT01097278 -NCT01099657 -NCT01097304 -NCT01099696 -NCT01097317 -NCT01099709 -NCT01097330 -NCT01099761 -NCT01097356 -NCT01099826 -NCT01097369 -NCT01099852 -NCT01097460 -NCT01099917 -NCT01097512 -NCT01100021 -NCT01097525 -NCT01100073 -NCT01097616 -NCT01100086 -NCT01097629 -NCT01100177 -NCT01097642 -NCT01100242 -NCT01097707 -NCT01100320 -NCT01097746 -NCT01100359 -NCT01097798 -NCT01100372 -NCT01097811 -NCT01100398 -NCT01097993 -NCT01100424 -NCT01098084 -NCT01100463 -NCT01098162 -NCT01100489 -NCT01098188 -NCT01100528 -NCT01098201 -NCT01100619 -NCT01098240 -NCT01100632 -NCT01098266 -NCT01100645 -NCT01098331 -NCT01100658 -NCT01098344 -NCT01100684 -NCT01098383 -NCT01100801 -NCT01098422 -NCT01100866 -NCT01098643 -NCT01100931 -NCT01098656 -NCT01100944 -NCT01098708 -NCT01101035 -NCT01098747 -NCT01101048 -NCT01098760 -NCT01101087 -NCT01098838 -NCT01101113 -NCT01098890 -NCT01101165 -NCT01098942 -NCT01101204 -NCT01098955 -NCT01101282 -NCT01098981 -NCT01101308 -NCT01099033 -NCT01101321 -NCT01099046 -NCT01101334 -NCT01099085 -NCT01101412 -NCT01099124 -NCT01101438 -NCT01099163 -NCT01101451 -NCT01099202 -NCT01101503 -NCT01099228 -NCT01101581 -NCT01099241 -NCT01108588 -NCT01102608 -NCT01105858 -NCT01102621 -NCT01105702 -NCT01102907 -NCT01105923 -NCT01102985 -NCT01105988 -NCT01103024 -NCT01106040 -NCT01103037 -NCT01106235 -NCT01103206 -NCT01106248 -NCT01103232 -NCT01106261 -NCT01103284 -NCT01106313 -NCT01103310 -NCT01106352 -NCT01103323 -NCT01106443 -NCT01103375 -NCT01106508 -NCT01103388 -NCT01106521 -NCT01103479 -NCT01106599 -NCT01103492 -NCT01106820 -NCT01103557 -NCT01106859 -NCT01103635 -NCT01106872 -NCT01104051 -NCT01106885 -NCT01104116 -NCT01106898 -NCT01104155 -NCT01106924 -NCT01104181 -NCT01106950 -NCT01104259 -NCT01106976 -NCT01104298 -NCT01107067 -NCT01104350 -NCT01107093 -NCT01104389 -NCT01107119 -NCT01104428 -NCT01107197 -NCT01104571 -NCT01107418 -NCT01104584 -NCT01107444 -NCT01104610 -NCT01107509 -NCT01104649 -NCT01107522 -NCT01104675 -NCT01107626 -NCT01104727 -NCT01107639 -NCT01104805 -NCT01107665 -NCT01104922 -NCT01107743 -NCT01104935 -NCT01107756 -NCT01104987 -NCT01107769 -NCT01105013 -NCT01107860 -NCT01105039 -NCT01108003 -NCT01105052 -NCT01108016 -NCT01105065 -NCT01108029 -NCT01105130 -NCT01108042 -NCT01105156 -NCT01108055 -NCT01105169 -NCT01108068 -NCT01105221 -NCT01108094 -NCT01105247 -NCT01108107 -NCT01105312 -NCT01108185 -NCT01105338 -NCT01108211 -NCT01105364 -NCT01108224 -NCT01105377 -NCT01108315 -NCT01105390 -NCT01108341 -NCT01105403 -NCT01108380 -NCT01105520 -NCT01108406 -NCT01105533 -NCT01108445 -NCT01105546 -NCT01108458 -NCT01105650 -NCT01108484 -NCT01105676 -NCT01134536 -NCT01129375 -NCT01132170 -NCT01129453 -NCT01132144 -NCT01129492 -NCT01132378 -NCT01129518 -NCT01132404 -NCT01129544 -NCT01132469 -NCT01129570 -NCT01132534 -NCT01129622 -NCT01132547 -NCT01129700 -NCT01132573 -NCT01129726 -NCT01132586 -NCT01129739 -NCT01132599 -NCT01129765 -NCT01132625 -NCT01129778 -NCT01132664 -NCT01129934 -NCT01132677 -NCT01130012 -NCT01132703 -NCT01130038 -NCT01132755 -NCT01130077 -NCT01132807 -NCT01130142 -NCT01132820 -NCT01130181 -NCT01132846 -NCT01130194 -NCT01132859 -NCT01130233 -NCT01132911 -NCT01130311 -NCT01132989 -NCT01130337 -NCT01133132 -NCT01130402 -NCT01133158 -NCT01130506 -NCT01133275 -NCT01130519 -NCT01133327 -NCT01130597 -NCT01133340 -NCT01130623 -NCT01133509 -NCT01130662 -NCT01133522 -NCT01130688 -NCT01133535 -NCT01130701 -NCT01133548 -NCT01130714 -NCT01133665 -NCT01130753 -NCT01133678 -NCT01130766 -NCT01133704 -NCT01130779 -NCT01133743 -NCT01130805 -NCT01133756 -NCT01130857 -NCT01133795 -NCT01131039 -NCT01133834 -NCT01131052 -NCT01133873 -NCT01131078 -NCT01133886 -NCT01131104 -NCT01133912 -NCT01131117 -NCT01133951 -NCT01131169 -NCT01133977 -NCT01131195 -NCT01133990 -NCT01131234 -NCT01134016 -NCT01131247 -NCT01134120 -NCT01131312 -NCT01134146 -NCT01131325 -NCT01134198 -NCT01131364 -NCT01134237 -NCT01131403 -NCT01134250 -NCT01131429 -NCT01134276 -NCT01131468 -NCT01134341 -NCT01131494 -NCT01134432 -NCT01131689 -NCT01134484 -NCT01132014 -NCT01134497 -NCT01132092 -NCT01134523 -NCT01132105 -NCT01140945 -NCT01134575 -NCT01137994 -NCT01134601 -NCT01137968 -NCT01134614 -NCT01138007 -NCT01134627 -NCT01138033 -NCT01134692 -NCT01138046 -NCT01134796 -NCT01138085 -NCT01134848 -NCT01138137 -NCT01134861 -NCT01138163 -NCT01134991 -NCT01138241 -NCT01135004 -NCT01138384 -NCT01135030 -NCT01138410 -NCT01135056 -NCT01138423 -NCT01135069 -NCT01138449 -NCT01135199 -NCT01138501 -NCT01135329 -NCT01138553 -NCT01135342 -NCT01138566 -NCT01135368 -NCT01138579 -NCT01135498 -NCT01138592 -NCT01135537 -NCT01138644 -NCT01135563 -NCT01138722 -NCT01135615 -NCT01138748 -NCT01135628 -NCT01138761 -NCT01135836 -NCT01138904 -NCT01135849 -NCT01139138 -NCT01135979 -NCT01139151 -NCT01136005 -NCT01139229 -NCT01136031 -NCT01139242 -NCT01136083 -NCT01139294 -NCT01136226 -NCT01139346 -NCT01136291 -NCT01139359 -NCT01136304 -NCT01139437 -NCT01136369 -NCT01139580 -NCT01136421 -NCT01139710 -NCT01136460 -NCT01139723 -NCT01136499 -NCT01139736 -NCT01136577 -NCT01139775 -NCT01136733 -NCT01139788 -NCT01136967 -NCT01139970 -NCT01136980 -NCT01140074 -NCT01137006 -NCT01140178 -NCT01137071 -NCT01140217 -NCT01137084 -NCT01140282 -NCT01137097 -NCT01140347 -NCT01137123 -NCT01140360 -NCT01137149 -NCT01140373 -NCT01137162 -NCT01140516 -NCT01137552 -NCT01140568 -NCT01137591 -NCT01140581 -NCT01137604 -NCT01140607 -NCT01137643 -NCT01140685 -NCT01137682 -NCT01140737 -NCT01137747 -NCT01140789 -NCT01137825 -NCT01140841 -NCT01137916 -NCT01140867 -NCT01137929 -NCT01140906 -NCT01137955 -NCT01146704 -NCT01141023 -NCT01143974 -NCT01141114 -NCT01143818 -NCT01141244 -NCT01144039 -NCT01141257 -NCT01144052 -NCT01141309 -NCT01144078 -NCT01141465 -NCT01144169 -NCT01141478 -NCT01144195 -NCT01141491 -NCT01144247 -NCT01141543 -NCT01144260 -NCT01141569 -NCT01144325 -NCT01141712 -NCT01144351 -NCT01141725 -NCT01144364 -NCT01141751 -NCT01144377 -NCT01141816 -NCT01144403 -NCT01141842 -NCT01144442 -NCT01141868 -NCT01144455 -NCT01141881 -NCT01144650 -NCT01141933 -NCT01144702 -NCT01141946 -NCT01144897 -NCT01142011 -NCT01144910 -NCT01142037 -NCT01144936 -NCT01142089 -NCT01144988 -NCT01142102 -NCT01145040 -NCT01142141 -NCT01145066 -NCT01142219 -NCT01145170 -NCT01142232 -NCT01145209 -NCT01142245 -NCT01145248 -NCT01142336 -NCT01145274 -NCT01142388 -NCT01145300 -NCT01142401 -NCT01145404 -NCT01142414 -NCT01145430 -NCT01142466 -NCT01145456 -NCT01142479 -NCT01145482 -NCT01142505 -NCT01145495 -NCT01142531 -NCT01145508 -NCT01142661 -NCT01145612 -NCT01142713 -NCT01145716 -NCT01142778 -NCT01145781 -NCT01142973 -NCT01145833 -NCT01143012 -NCT01145846 -NCT01143142 -NCT01145885 -NCT01143285 -NCT01145924 -NCT01143311 -NCT01145989 -NCT01143363 -NCT01146002 -NCT01143389 -NCT01146054 -NCT01143402 -NCT01146132 -NCT01143428 -NCT01146171 -NCT01143441 -NCT01146223 -NCT01143480 -NCT01146262 -NCT01143493 -NCT01146340 -NCT01143545 -NCT01146483 -NCT01143558 -NCT01146535 -NCT01143584 -NCT01146587 -NCT01143740 -NCT01146613 -NCT01143753 -NCT01146678 -NCT01143779 -NCT01151761 -NCT01146756 -NCT01149434 -NCT01146769 -NCT01149421 -NCT01146782 -NCT01149447 -NCT01146795 -NCT01149577 -NCT01146834 -NCT01149629 -NCT01146977 -NCT01149642 -NCT01147016 -NCT01149668 -NCT01147029 -NCT01149694 -NCT01147042 -NCT01149707 -NCT01147107 -NCT01149720 -NCT01147211 -NCT01149733 -NCT01147263 -NCT01149746 -NCT01147328 -NCT01149798 -NCT01147367 -NCT01149811 -NCT01147380 -NCT01149850 -NCT01147393 -NCT01149876 -NCT01147432 -NCT01149902 -NCT01147445 -NCT01149915 -NCT01147458 -NCT01150006 -NCT01147484 -NCT01150045 -NCT01147536 -NCT01150058 -NCT01147562 -NCT01150071 -NCT01147601 -NCT01150084 -NCT01147822 -NCT01150149 -NCT01147926 -NCT01150162 -NCT01147939 -NCT01150175 -NCT01147965 -NCT01150266 -NCT01147991 -NCT01150292 -NCT01148056 -NCT01150305 -NCT01148069 -NCT01150318 -NCT01148108 -NCT01150513 -NCT01148121 -NCT01150539 -NCT01148173 -NCT01150591 -NCT01148199 -NCT01150630 -NCT01148420 -NCT01150721 -NCT01148433 -NCT01150786 -NCT01148446 -NCT01150877 -NCT01148472 -NCT01150916 -NCT01148615 -NCT01151046 -NCT01148628 -NCT01151111 -NCT01148654 -NCT01151124 -NCT01148758 -NCT01151150 -NCT01148849 -NCT01151163 -NCT01148888 -NCT01151202 -NCT01148966 -NCT01151215 -NCT01148979 -NCT01151280 -NCT01149083 -NCT01151384 -NCT01149109 -NCT01151449 -NCT01149122 -NCT01151488 -NCT01149161 -NCT01151566 -NCT01149174 -NCT01151605 -NCT01149304 -NCT01151631 -NCT01149343 -NCT01151670 -NCT01149356 -NCT01151709 -NCT01149395 -NCT01151748 -NCT01149408 -NCT01157728 -NCT01151787 -NCT01155115 -NCT01151839 -NCT01155102 -NCT01151852 -NCT01155180 -NCT01152073 -NCT01155232 -NCT01152203 -NCT01155245 -NCT01152346 -NCT01155258 -NCT01152398 -NCT01155271 -NCT01152437 -NCT01155323 -NCT01152476 -NCT01155440 -NCT01152580 -NCT01155453 -NCT01152606 -NCT01155492 -NCT01152645 -NCT01155505 -NCT01152710 -NCT01155518 -NCT01152775 -NCT01155557 -NCT01152788 -NCT01155583 -NCT01152801 -NCT01155609 -NCT01152827 -NCT01155713 -NCT01152840 -NCT01155791 -NCT01152853 -NCT01155817 -NCT01152892 -NCT01156142 -NCT01152970 -NCT01156259 -NCT01153035 -NCT01156311 -NCT01153113 -NCT01156350 -NCT01153126 -NCT01156441 -NCT01153204 -NCT01156454 -NCT01153243 -NCT01156519 -NCT01153256 -NCT01156545 -NCT01153373 -NCT01156558 -NCT01153386 -NCT01156584 -NCT01153425 -NCT01156610 -NCT01153568 -NCT01156623 -NCT01153672 -NCT01156636 -NCT01153685 -NCT01156675 -NCT01153750 -NCT01156688 -NCT01153763 -NCT01156753 -NCT01153971 -NCT01156818 -NCT01153984 -NCT01156844 -NCT01154140 -NCT01156870 -NCT01154166 -NCT01156883 -NCT01154270 -NCT01156935 -NCT01154335 -NCT01156961 -NCT01154361 -NCT01156987 -NCT01154413 -NCT01157013 -NCT01154426 -NCT01157026 -NCT01154439 -NCT01157039 -NCT01154452 -NCT01157052 -NCT01154517 -NCT01157091 -NCT01154712 -NCT01157130 -NCT01154764 -NCT01157156 -NCT01154790 -NCT01157325 -NCT01154816 -NCT01157338 -NCT01154842 -NCT01157390 -NCT01154920 -NCT01157572 -NCT01154972 -NCT01157598 -NCT01154998 -NCT01157676 -NCT01155089 -NCT01163032 -NCT01157806 -NCT01160107 -NCT01157819 -NCT01159964 -NCT01157832 -NCT01160146 -NCT01157923 -NCT01160211 -NCT01157962 -NCT01160263 -NCT01157975 -NCT01160302 -NCT01157988 -NCT01160315 -NCT01158053 -NCT01160328 -NCT01158079 -NCT01160341 -NCT01158092 -NCT01160354 -NCT01158118 -NCT01160367 -NCT01158144 -NCT01160380 -NCT01158157 -NCT01160419 -NCT01158170 -NCT01160445 -NCT01158222 -NCT01160458 -NCT01158248 -NCT01160484 -NCT01158274 -NCT01160536 -NCT01158287 -NCT01160601 -NCT01158300 -NCT01160627 -NCT01158313 -NCT01160718 -NCT01158326 -NCT01160731 -NCT01158352 -NCT01160744 -NCT01158378 -NCT01160822 -NCT01158404 -NCT01160848 -NCT01158456 -NCT01160926 -NCT01158495 -NCT01161108 -NCT01158508 -NCT01161186 -NCT01158521 -NCT01161316 -NCT01158534 -NCT01161368 -NCT01158573 -NCT01161498 -NCT01158625 -NCT01161511 -NCT01158651 -NCT01161550 -NCT01158742 -NCT01161563 -NCT01158794 -NCT01161641 -NCT01158807 -NCT01161823 -NCT01158885 -NCT01161836 -NCT01159028 -NCT01161888 -NCT01159067 -NCT01161966 -NCT01159093 -NCT01161979 -NCT01159119 -NCT01162018 -NCT01159171 -NCT01162031 -NCT01159236 -NCT01162057 -NCT01159288 -NCT01162135 -NCT01159301 -NCT01162200 -NCT01159327 -NCT01162278 -NCT01159405 -NCT01162304 -NCT01159418 -NCT01162395 -NCT01159431 -NCT01162447 -NCT01159470 -NCT01162460 -NCT01159522 -NCT01162551 -NCT01159574 -NCT01162642 -NCT01159587 -NCT01162785 -NCT01159613 -NCT01162863 -NCT01159678 -NCT01162915 -NCT01159808 -NCT01163019 -NCT01159860 -NCT01167738 -NCT01163071 -NCT01165476 -NCT01163084 -NCT01165385 -NCT01163110 -NCT01165489 -NCT01163201 -NCT01165528 -NCT01163214 -NCT01165619 -NCT01163240 -NCT01165632 -NCT01163253 -NCT01165645 -NCT01163357 -NCT01165658 -NCT01163396 -NCT01165671 -NCT01163435 -NCT01165697 -NCT01163448 -NCT01165749 -NCT01163487 -NCT01165827 -NCT01163552 -NCT01165905 -NCT01163617 -NCT01165983 -NCT01163682 -NCT01165996 -NCT01163760 -NCT01166035 -NCT01163773 -NCT01166113 -NCT01163812 -NCT01166126 -NCT01163851 -NCT01166152 -NCT01163929 -NCT01166178 -NCT01163955 -NCT01166191 -NCT01163994 -NCT01166204 -NCT01164007 -NCT01166308 -NCT01164033 -NCT01166321 -NCT01164046 -NCT01166412 -NCT01164150 -NCT01166451 -NCT01164163 -NCT01166490 -NCT01164176 -NCT01166529 -NCT01164189 -NCT01166542 -NCT01164202 -NCT01166737 -NCT01164215 -NCT01166763 -NCT01164228 -NCT01166854 -NCT01164241 -NCT01166906 -NCT01164267 -NCT01166932 -NCT01164345 -NCT01166958 -NCT01164384 -NCT01167049 -NCT01164475 -NCT01167101 -NCT01164553 -NCT01167114 -NCT01164566 -NCT01167166 -NCT01164683 -NCT01167179 -NCT01164709 -NCT01167192 -NCT01164722 -NCT01167218 -NCT01164748 -NCT01167244 -NCT01164891 -NCT01167270 -NCT01164930 -NCT01167322 -NCT01164956 -NCT01167361 -NCT01164995 -NCT01167374 -NCT01165008 -NCT01167426 -NCT01165021 -NCT01167465 -NCT01165112 -NCT01167491 -NCT01165216 -NCT01167530 -NCT01165268 -NCT01167673 -NCT01165281 -NCT01167686 -NCT01165307 -NCT01167712 -NCT01165333 -NCT01167725 -NCT01165346 -NCT01172561 -NCT01167790 -NCT01170039 -NCT01167816 -NCT01169961 -NCT01167829 -NCT01170052 -NCT01167894 -NCT01170104 -NCT01167907 -NCT01170143 -NCT01167933 -NCT01170169 -NCT01168011 -NCT01170182 -NCT01168050 -NCT01170234 -NCT01168141 -NCT01170299 -NCT01168154 -NCT01170364 -NCT01168180 -NCT01170390 -NCT01168206 -NCT01170429 -NCT01168219 -NCT01170494 -NCT01168232 -NCT01170559 -NCT01168323 -NCT01170598 -NCT01168388 -NCT01170650 -NCT01168401 -NCT01170663 -NCT01168440 -NCT01170754 -NCT01168479 -NCT01170780 -NCT01168505 -NCT01170845 -NCT01168544 -NCT01170871 -NCT01168674 -NCT01170884 -NCT01168713 -NCT01170897 -NCT01168752 -NCT01170923 -NCT01168791 -NCT01170962 -NCT01168804 -NCT01170975 -NCT01168895 -NCT01171092 -NCT01168908 -NCT01171170 -NCT01168921 -NCT01171196 -NCT01168973 -NCT01171222 -NCT01169012 -NCT01171300 -NCT01169038 -NCT01171378 -NCT01169077 -NCT01171430 -NCT01169103 -NCT01171469 -NCT01169116 -NCT01171482 -NCT01169129 -NCT01171638 -NCT01169155 -NCT01171651 -NCT01169181 -NCT01171729 -NCT01169220 -NCT01171755 -NCT01169259 -NCT01171781 -NCT01169298 -NCT01171846 -NCT01169337 -NCT01171898 -NCT01169350 -NCT01171924 -NCT01169363 -NCT01171976 -NCT01169415 -NCT01171989 -NCT01169532 -NCT01172028 -NCT01169558 -NCT01172184 -NCT01169584 -NCT01172223 -NCT01169597 -NCT01172249 -NCT01169636 -NCT01172314 -NCT01169649 -NCT01172379 -NCT01169675 -NCT01172470 -NCT01169714 -NCT01172509 -NCT01169740 -NCT01172535 -NCT01169753 -NCT01172548 -NCT01169870 -NCT01178411 -NCT01172587 -NCT01175460 -NCT01172600 -NCT01175447 -NCT01172769 -NCT01175499 -NCT01172860 -NCT01175538 -NCT01172912 -NCT01175655 -NCT01172925 -NCT01175694 -NCT01172964 -NCT01175733 -NCT01173003 -NCT01175772 -NCT01173068 -NCT01175785 -NCT01173172 -NCT01175798 -NCT01173198 -NCT01175837 -NCT01173224 -NCT01175876 -NCT01173289 -NCT01175980 -NCT01173432 -NCT01175993 -NCT01173497 -NCT01176240 -NCT01173523 -NCT01176435 -NCT01173575 -NCT01176461 -NCT01173679 -NCT01176474 -NCT01173692 -NCT01176487 -NCT01173861 -NCT01176500 -NCT01173887 -NCT01176513 -NCT01173900 -NCT01176552 -NCT01173913 -NCT01176565 -NCT01174017 -NCT01176604 -NCT01174043 -NCT01176669 -NCT01174056 -NCT01176708 -NCT01174082 -NCT01176747 -NCT01174121 -NCT01176760 -NCT01174186 -NCT01176773 -NCT01174199 -NCT01176799 -NCT01174238 -NCT01176916 -NCT01174264 -NCT01176981 -NCT01174368 -NCT01176994 -NCT01174381 -NCT01177007 -NCT01174446 -NCT01177124 -NCT01174537 -NCT01177163 -NCT01174550 -NCT01177371 -NCT01174563 -NCT01177397 -NCT01174836 -NCT01177436 -NCT01174888 -NCT01177501 -NCT01174901 -NCT01177540 -NCT01174940 -NCT01177631 -NCT01174953 -NCT01177683 -NCT01175005 -NCT01177735 -NCT01175031 -NCT01177800 -NCT01175096 -NCT01177865 -NCT01175109 -NCT01177891 -NCT01175174 -NCT01177956 -NCT01175239 -NCT01177969 -NCT01175278 -NCT01178008 -NCT01175291 -NCT01178086 -NCT01175317 -NCT01178112 -NCT01175343 -NCT01178151 -NCT01175356 -NCT01178294 -NCT01175382 -NCT01178372 -NCT01175395 -NCT01183884 -NCT01178463 -NCT01181401 -NCT01178645 -NCT01181375 -NCT01178658 -NCT01181440 -NCT01178736 -NCT01181453 -NCT01178775 -NCT01181479 -NCT01178788 -NCT01181570 -NCT01178814 -NCT01181596 -NCT01178853 -NCT01181609 -NCT01178892 -NCT01181804 -NCT01178918 -NCT01181830 -NCT01178944 -NCT01181869 -NCT01178957 -NCT01181999 -NCT01178996 -NCT01182051 -NCT01179074 -NCT01182116 -NCT01179139 -NCT01182129 -NCT01179152 -NCT01182142 -NCT01179217 -NCT01182168 -NCT01179269 -NCT01182233 -NCT01179295 -NCT01182246 -NCT01179308 -NCT01182272 -NCT01179334 -NCT01182285 -NCT01179464 -NCT01182298 -NCT01179490 -NCT01182350 -NCT01179672 -NCT01182415 -NCT01179685 -NCT01182506 -NCT01179698 -NCT01182584 -NCT01179750 -NCT01182610 -NCT01179893 -NCT01182688 -NCT01180049 -NCT01182753 -NCT01180088 -NCT01182779 -NCT01180153 -NCT01182805 -NCT01180166 -NCT01182831 -NCT01180322 -NCT01182844 -NCT01180335 -NCT01182883 -NCT01180426 -NCT01182922 -NCT01180478 -NCT01182974 -NCT01180504 -NCT01182987 -NCT01180569 -NCT01183065 -NCT01180660 -NCT01183156 -NCT01180686 -NCT01183299 -NCT01180725 -NCT01183364 -NCT01180751 -NCT01183416 -NCT01180790 -NCT01183429 -NCT01180803 -NCT01183494 -NCT01180816 -NCT01183533 -NCT01180855 -NCT01183559 -NCT01180946 -NCT01183611 -NCT01180959 -NCT01183624 -NCT01180998 -NCT01183650 -NCT01181128 -NCT01183663 -NCT01181193 -NCT01183741 -NCT01181245 -NCT01183767 -NCT01181258 -NCT01183780 -NCT01181271 -NCT01183806 -NCT01181323 -NCT01183858 -NCT01181336 -NCT01189734 -NCT01183897 -NCT01186731 -NCT01183936 -NCT01186705 -NCT01183949 -NCT01186822 -NCT01184027 -NCT01186835 -NCT01184053 -NCT01186861 -NCT01184066 -NCT01186913 -NCT01184144 -NCT01186939 -NCT01184196 -NCT01186978 -NCT01184209 -NCT01186991 -NCT01184248 -NCT01187043 -NCT01184274 -NCT01187199 -NCT01184287 -NCT01187212 -NCT01184326 -NCT01187238 -NCT01184378 -NCT01187290 -NCT01184417 -NCT01187446 -NCT01184456 -NCT01187485 -NCT01184482 -NCT01187524 -NCT01184651 -NCT01187550 -NCT01184703 -NCT01187615 -NCT01184781 -NCT01187784 -NCT01184885 -NCT01187810 -NCT01184898 -NCT01187927 -NCT01184989 -NCT01188096 -NCT01185028 -NCT01188109 -NCT01185054 -NCT01188161 -NCT01185132 -NCT01188174 -NCT01185145 -NCT01188187 -NCT01185158 -NCT01188252 -NCT01185171 -NCT01188330 -NCT01185262 -NCT01188408 -NCT01185314 -NCT01188473 -NCT01185366 -NCT01188486 -NCT01185444 -NCT01188499 -NCT01185470 -NCT01188681 -NCT01185509 -NCT01188707 -NCT01185548 -NCT01188733 -NCT01185626 -NCT01188785 -NCT01185639 -NCT01188798 -NCT01185665 -NCT01188837 -NCT01185704 -NCT01188876 -NCT01185730 -NCT01188889 -NCT01185847 -NCT01188915 -NCT01185964 -NCT01189123 -NCT01186068 -NCT01189227 -NCT01186081 -NCT01189240 -NCT01186185 -NCT01189253 -NCT01186224 -NCT01189266 -NCT01186237 -NCT01189331 -NCT01186263 -NCT01189344 -NCT01186328 -NCT01189370 -NCT01186367 -NCT01189383 -NCT01186406 -NCT01189409 -NCT01186458 -NCT01189435 -NCT01186484 -NCT01189513 -NCT01186601 -NCT01189643 -NCT01186640 -NCT01195181 -NCT01189786 -NCT01192438 -NCT01189851 -NCT01192399 -NCT01189877 -NCT01192464 -NCT01189903 -NCT01192555 -NCT01189929 -NCT01192633 -NCT01189942 -NCT01192763 -NCT01189968 -NCT01192815 -NCT01190007 -NCT01192958 -NCT01190098 -NCT01192971 -NCT01190150 -NCT01192984 -NCT01190241 -NCT01193140 -NCT01190280 -NCT01193244 -NCT01190332 -NCT01193257 -NCT01190345 -NCT01193270 -NCT01190449 -NCT01193348 -NCT01190462 -NCT01193361 -NCT01190527 -NCT01193400 -NCT01190644 -NCT01193439 -NCT01190657 -NCT01193452 -NCT01190787 -NCT01193478 -NCT01190904 -NCT01193517 -NCT01190930 -NCT01193530 -NCT01190982 -NCT01193595 -NCT01191034 -NCT01193673 -NCT01191060 -NCT01193699 -NCT01191164 -NCT01193803 -NCT01191190 -NCT01193842 -NCT01191216 -NCT01193855 -NCT01191229 -NCT01193868 -NCT01191294 -NCT01193881 -NCT01191411 -NCT01193933 -NCT01191502 -NCT01193998 -NCT01191528 -NCT01194089 -NCT01191541 -NCT01194193 -NCT01191632 -NCT01194206 -NCT01191671 -NCT01194271 -NCT01191684 -NCT01194362 -NCT01191697 -NCT01194427 -NCT01191749 -NCT01194440 -NCT01191775 -NCT01194453 -NCT01191801 -NCT01194466 -NCT01191814 -NCT01194609 -NCT01191853 -NCT01194648 -NCT01191892 -NCT01194661 -NCT01191957 -NCT01194687 -NCT01192048 -NCT01194791 -NCT01192087 -NCT01194843 -NCT01192100 -NCT01194869 -NCT01192113 -NCT01194908 -NCT01192165 -NCT01194960 -NCT01192204 -NCT01194973 -NCT01192230 -NCT01194986 -NCT01192243 -NCT01195064 -NCT01192269 -NCT01195090 -NCT01192308 -NCT01195142 -NCT01192373 -NCT01200485 -NCT01195220 -NCT01198028 -NCT01195285 -NCT01197885 -NCT01195298 -NCT01198054 -NCT01195311 -NCT01198067 -NCT01195376 -NCT01198119 -NCT01195415 -NCT01198145 -NCT01195428 -NCT01198158 -NCT01195454 -NCT01198184 -NCT01195480 -NCT01198392 -NCT01195532 -NCT01198509 -NCT01195545 -NCT01198522 -NCT01195610 -NCT01198535 -NCT01195701 -NCT01198548 -NCT01195714 -NCT01198587 -NCT01195766 -NCT01198626 -NCT01195922 -NCT01198665 -NCT01196000 -NCT01198782 -NCT01196013 -NCT01198821 -NCT01196052 -NCT01198834 -NCT01196078 -NCT01198899 -NCT01196117 -NCT01199055 -NCT01196156 -NCT01199068 -NCT01196221 -NCT01199146 -NCT01196234 -NCT01199198 -NCT01196247 -NCT01199224 -NCT01196260 -NCT01199250 -NCT01196273 -NCT01199263 -NCT01196390 -NCT01199354 -NCT01196403 -NCT01199367 -NCT01196416 -NCT01199406 -NCT01196429 -NCT01199432 -NCT01196442 -NCT01199562 -NCT01196455 -NCT01199575 -NCT01196494 -NCT01199614 -NCT01196507 -NCT01199640 -NCT01196559 -NCT01199666 -NCT01196572 -NCT01199718 -NCT01196585 -NCT01199757 -NCT01196650 -NCT01199822 -NCT01196663 -NCT01199835 -NCT01196715 -NCT01199978 -NCT01196741 -NCT01200004 -NCT01196845 -NCT01200017 -NCT01196936 -NCT01200069 -NCT01197040 -NCT01200082 -NCT01197118 -NCT01200121 -NCT01197170 -NCT01200134 -NCT01197183 -NCT01200147 -NCT01197196 -NCT01200212 -NCT01197209 -NCT01200238 -NCT01197287 -NCT01200277 -NCT01197560 -NCT01200316 -NCT01197625 -NCT01200329 -NCT01197664 -NCT01200342 -NCT01197794 -NCT01200355 -NCT01197820 -NCT01275287 -NCT01200537 -NCT01275183 -NCT01200576 -NCT01275196 -NCT01200589 -NCT01275209 -NCT01200706 -NCT01275222 -NCT01200732 -NCT01275235 -NCT01200758 -NCT01275274 -NCT01200797 -NCT01249820 -NCT01249859 -NCT01254903 -NCT01254929 -NCT01254994 -NCT01255007 -NCT01255137 -NCT01255163 -NCT01255228 -NCT01255397 -NCT01255410 -NCT01255514 -NCT01255527 -NCT01255553 -NCT01255644 -NCT01255657 -NCT01255761 -NCT01255800 -NCT01255852 -NCT01255891 -NCT01256008 -NCT01256034 -NCT01256047 -NCT01256073 -NCT01256112 -NCT01256177 -NCT01256203 -NCT01256229 -NCT01256268 -NCT01256281 -NCT01256359 -NCT01256385 -NCT01256398 -NCT01256424 -NCT01256528 -NCT01256554 -NCT01256567 -NCT01256619 -NCT01256762 -NCT01256853 -NCT01256944 -NCT01257048 -NCT01257126 -NCT01257139 -NCT01257152 -NCT01257178 -NCT01257191 -NCT01257243 -NCT01257269 -NCT01257295 -NCT01257308 -NCT01257360 -NCT01257425 -NCT01257438 -NCT01257451 -NCT01257503 -NCT01257542 -NCT01257594 -NCT01257607 -NCT01257711 -NCT01257763 -NCT01257828 -NCT01257867 -NCT01257880 -NCT01257945 -NCT01273090 -NCT01273103 -NCT01273129 -NCT01273155 -NCT01273168 -NCT01273181 -NCT01273207 -NCT01273272 -NCT01273350 -NCT01273402 -NCT01273480 -NCT01273493 -NCT01273584 -NCT01273610 -NCT01273662 -NCT01273688 -NCT01273766 -NCT01273805 -NCT01273818 -NCT01273844 -NCT01273883 -NCT01273896 -NCT01273948 -NCT01273974 -NCT01273987 -NCT01274000 -NCT01274013 -NCT01274104 -NCT01274143 -NCT01274260 -NCT01274273 -NCT01274312 -NCT01274338 -NCT01274351 -NCT01274364 -NCT01274403 -NCT01274455 -NCT01274507 -NCT01274533 -NCT01274624 -NCT01274637 -NCT01274676 -NCT01274793 -NCT01274806 -NCT01274962 -NCT01275118 -NCT01200810 -NCT01249040 -NCT01200823 -NCT01249105 -NCT01200862 -NCT01249157 -NCT01200940 -NCT01249222 -NCT01200966 -NCT01249235 -NCT01200992 -NCT01249300 -NCT01201018 -NCT01249352 -NCT01201044 -NCT01249391 -NCT01201213 -NCT01249430 -NCT01201265 -NCT01249443 -NCT01201343 -NCT01249482 -NCT01201551 -NCT01249521 -NCT01201603 -NCT01249547 -NCT01201616 -NCT01249638 -NCT01201629 -NCT01249651 -NCT01201642 -NCT01249677 -NCT01201694 -NCT01249690 -NCT01201733 -NCT01239485 -NCT01239550 -NCT01239641 -NCT01239732 -NCT01239797 -NCT01239810 -NCT01239823 -NCT01239875 -NCT01239966 -NCT01240005 -NCT01240070 -NCT01240083 -NCT01240213 -NCT01240304 -NCT01240356 -NCT01240408 -NCT01240434 -NCT01240447 -NCT01240460 -NCT01240499 -NCT01240525 -NCT01240538 -NCT01240551 -NCT01240577 -NCT01240590 -NCT01240616 -NCT01240629 -NCT01240642 -NCT01240655 -NCT01240681 -NCT01240694 -NCT01240707 -NCT01240720 -NCT01246141 -NCT01246219 -NCT01246297 -NCT01246336 -NCT01246427 -NCT01246440 -NCT01246544 -NCT01246557 -NCT01246622 -NCT01246726 -NCT01246739 -NCT01246752 -NCT01246817 -NCT01246869 -NCT01246947 -NCT01246960 -NCT01246986 -NCT01247129 -NCT01247168 -NCT01247194 -NCT01247233 -NCT01247298 -NCT01247337 -NCT01247415 -NCT01247493 -NCT01247532 -NCT01247571 -NCT01247623 -NCT01247779 -NCT01247857 -NCT01247922 -NCT01247961 -NCT01248208 -NCT01248247 -NCT01248273 -NCT01248299 -NCT01248403 -NCT01248416 -NCT01248455 -NCT01248494 -NCT01248585 -NCT01248611 -NCT01248624 -NCT01248663 -NCT01248676 -NCT01248741 -NCT01248754 -NCT01248819 -NCT01248858 -NCT01248923 -NCT01248936 -NCT01248949 -NCT01248962 -NCT01201811 -NCT01204593 -NCT01201824 -NCT01204476 -NCT01201863 -NCT01204684 -NCT01201915 -NCT01204697 -NCT01201941 -NCT01204710 -NCT01201993 -NCT01204736 -NCT01202032 -NCT01204749 -NCT01202227 -NCT01204775 -NCT01202409 -NCT01204788 -NCT01202448 -NCT01237808 -NCT01202487 -NCT01237860 -NCT01202513 -NCT01237912 -NCT01202591 -NCT01237938 -NCT01202630 -NCT01237951 -NCT01202643 -NCT01238003 -NCT01202721 -NCT01238029 -NCT01202760 -NCT01238042 -NCT01202851 -NCT01238055 -NCT01202864 -NCT01238081 -NCT01202877 -NCT01238094 -NCT01202890 -NCT01238107 -NCT01202981 -NCT01238120 -NCT01203020 -NCT01238133 -NCT01203046 -NCT01238146 -NCT01203228 -NCT01238159 -NCT01203267 -NCT01238172 -NCT01203306 -NCT01238185 -NCT01203410 -NCT01238211 -NCT01203423 -NCT01238237 -NCT01203436 -NCT01238354 -NCT01203449 -NCT01238419 -NCT01203462 -NCT01238471 -NCT01203566 -NCT01238536 -NCT01203579 -NCT01238692 -NCT01203618 -NCT01238731 -NCT01203722 -NCT01238770 -NCT01203735 -NCT01238835 -NCT01203787 -NCT01238900 -NCT01203839 -NCT01238939 -NCT01203878 -NCT01238952 -NCT01203930 -NCT01238965 -NCT01203969 -NCT01239004 -NCT01204060 -NCT01239082 -NCT01204073 -NCT01239095 -NCT01204099 -NCT01239108 -NCT01204125 -NCT01239134 -NCT01204151 -NCT01239147 -NCT01204164 -NCT01239251 -NCT01204177 -NCT01239316 -NCT01204203 -NCT01239342 -NCT01204242 -NCT01239355 -NCT01204255 -NCT01239368 -NCT01204307 -NCT01239381 -NCT01204372 -NCT01239394 -NCT01204437 -NCT01239407 -NCT01204450 -NCT01239446 -NCT01204801 -NCT01236989 -NCT01204931 -NCT01237041 -NCT01204957 -NCT01237054 -NCT01204996 -NCT01237067 -NCT01205022 -NCT01237106 -NCT01205217 -NCT01237236 -NCT01205230 -NCT01237249 -NCT01205256 -NCT01237262 -NCT01205308 -NCT01237327 -NCT01205334 -NCT01237457 -NCT01205490 -NCT01237470 -NCT01205503 -NCT01237483 -NCT01205581 -NCT01237665 -NCT01205646 -NCT01237678 -NCT01205672 -NCT01237704 -NCT01205685 -NCT01221077 -NCT01221103 -NCT01221181 -NCT01221233 -NCT01221376 -NCT01221441 -NCT01221467 -NCT01221493 -NCT01221506 -NCT01221571 -NCT01221675 -NCT01221688 -NCT01221753 -NCT01221857 -NCT01221870 -NCT01221883 -NCT01221935 -NCT01222013 -NCT01222026 -NCT01222052 -NCT01222065 -NCT01222130 -NCT01222143 -NCT01222195 -NCT01222208 -NCT01222221 -NCT01222260 -NCT01222286 -NCT01222312 -NCT01222338 -NCT01222377 -NCT01222416 -NCT01222546 -NCT01222572 -NCT01222624 -NCT01222637 -NCT01222650 -NCT01222676 -NCT01222689 -NCT01222702 -NCT01222715 -NCT01222754 -NCT01222767 -NCT01222780 -NCT01222819 -NCT01222884 -NCT01222897 -NCT01222910 -NCT01222936 -NCT01223027 -NCT01223092 -NCT01223105 -NCT01223144 -NCT01223209 -NCT01223235 -NCT01223248 -NCT01223261 -NCT01223287 -NCT01223300 -NCT01223313 -NCT01223560 -NCT01223638 -NCT01223716 -NCT01223807 -NCT01223885 -NCT01223898 -NCT01223924 -NCT01224041 -NCT01224145 -NCT01224288 -NCT01236352 -NCT01236365 -NCT01236391 -NCT01236417 -NCT01236443 -NCT01236508 -NCT01236534 -NCT01236547 -NCT01236560 -NCT01236573 -NCT01236586 -NCT01236690 -NCT01236716 -NCT01236742 -NCT01236755 -NCT01236768 -NCT01236781 -NCT01236833 -NCT01236885 -NCT01236937 -NCT01237756 -NCT01205711 -NCT01208220 -NCT01205737 -NCT01208194 -NCT01205828 -NCT01208259 -NCT01205880 -NCT01208272 -NCT01206010 -NCT01208441 -NCT01206036 -NCT01208454 -NCT01206049 -NCT01208480 -NCT01206062 -NCT01208519 -NCT01206088 -NCT01208662 -NCT01206140 -NCT01208766 -NCT01206205 -NCT01208792 -NCT01206218 -NCT01208818 -NCT01206270 -NCT01208831 -NCT01206296 -NCT01208883 -NCT01206335 -NCT01208896 -NCT01206413 -NCT01208922 -NCT01206465 -NCT01208974 -NCT01206491 -NCT01219673 -NCT01206530 -NCT01219699 -NCT01206543 -NCT01219751 -NCT01206556 -NCT01219777 -NCT01206621 -NCT01219790 -NCT01206686 -NCT01219816 -NCT01206764 -NCT01219907 -NCT01206816 -NCT01219920 -NCT01206881 -NCT01219985 -NCT01206894 -NCT01220024 -NCT01207011 -NCT01220050 -NCT01207050 -NCT01220063 -NCT01207063 -NCT01220076 -NCT01207076 -NCT01220128 -NCT01207102 -NCT01220141 -NCT01207193 -NCT01220154 -NCT01207206 -NCT01220167 -NCT01207258 -NCT01220271 -NCT01207323 -NCT01220284 -NCT01207388 -NCT01220297 -NCT01207440 -NCT01220336 -NCT01207492 -NCT01220349 -NCT01207609 -NCT01220362 -NCT01207661 -NCT01220375 -NCT01207687 -NCT01220505 -NCT01207726 -NCT01220544 -NCT01207739 -NCT01220570 -NCT01207765 -NCT01220583 -NCT01207778 -NCT01220609 -NCT01207895 -NCT01220635 -NCT01207908 -NCT01220648 -NCT01207921 -NCT01220739 -NCT01207986 -NCT01220752 -NCT01208025 -NCT01220817 -NCT01208038 -NCT01220869 -NCT01208051 -NCT01220960 -NCT01208064 -NCT01220973 -NCT01208077 -NCT01220999 -NCT01208103 -NCT01221064 -NCT01209000 -NCT01211938 -NCT01209013 -NCT01211691 -NCT01209130 -NCT01211977 -NCT01209143 -NCT01211990 -NCT01209182 -NCT01212016 -NCT01209195 -NCT01212068 -NCT01209273 -NCT01212107 -NCT01209286 -NCT01212276 -NCT01209325 -NCT01212341 -NCT01209338 -NCT01212354 -NCT01209364 -NCT01212367 -NCT01209442 -NCT01212380 -NCT01209507 -NCT01212484 -NCT01209520 -NCT01217424 -NCT01209572 -NCT01217437 -NCT01209585 -NCT01217450 -NCT01209598 -NCT01217567 -NCT01209676 -NCT01217593 -NCT01209832 -NCT01217619 -NCT01209871 -NCT01217658 -NCT01209988 -NCT01217749 -NCT01210014 -NCT01217801 -NCT01210053 -NCT01217931 -NCT01210066 -NCT01217957 -NCT01210131 -NCT01217996 -NCT01210144 -NCT01218048 -NCT01210222 -NCT01218087 -NCT01210235 -NCT01218139 -NCT01210248 -NCT01218178 -NCT01210287 -NCT01218217 -NCT01210326 -NCT01218386 -NCT01210365 -NCT01218477 -NCT01210378 -NCT01218490 -NCT01210430 -NCT01218516 -NCT01210495 -NCT01218529 -NCT01210534 -NCT01218542 -NCT01210599 -NCT01218555 -NCT01210742 -NCT01218568 -NCT01210768 -NCT01218581 -NCT01210846 -NCT01218594 -NCT01210911 -NCT01218607 -NCT01210937 -NCT01218620 -NCT01211002 -NCT01218646 -NCT01211054 -NCT01218672 -NCT01211132 -NCT01218737 -NCT01211145 -NCT01218789 -NCT01211158 -NCT01218854 -NCT01211210 -NCT01218867 -NCT01211262 -NCT01218880 -NCT01211275 -NCT01218919 -NCT01211379 -NCT01219010 -NCT01211392 -NCT01219075 -NCT01211457 -NCT01219192 -NCT01211483 -NCT01219348 -NCT01211561 -NCT01219361 -NCT01211613 -NCT01219543 -NCT01212510 -NCT01215318 -NCT01212549 -NCT01215292 -NCT01212614 -NCT01215344 -NCT01212627 -NCT01215383 -NCT01212718 -NCT01215422 -NCT01212809 -NCT01215448 -NCT01212822 -NCT01215500 -NCT01212887 -NCT01215513 -NCT01212900 -NCT01215539 -NCT01212926 -NCT01215565 -NCT01212952 -NCT01215578 -NCT01212991 -NCT01215617 -NCT01213004 -NCT01215747 -NCT01213017 -NCT01215799 -NCT01213030 -NCT01215864 -NCT01213056 -NCT01215877 -NCT01213095 -NCT01215890 -NCT01213147 -NCT01215916 -NCT01213160 -NCT01215981 -NCT01213238 -NCT01216020 -NCT01213277 -NCT01216033 -NCT01213290 -NCT01216085 -NCT01213381 -NCT01216111 -NCT01213407 -NCT01216163 -NCT01213446 -NCT01216176 -NCT01213459 -NCT01216215 -NCT01213472 -NCT01216254 -NCT01213732 -NCT01216267 -NCT01213745 -NCT01216319 -NCT01213771 -NCT01216332 -NCT01213875 -NCT01216371 -NCT01213888 -NCT01216436 -NCT01213927 -NCT01216514 -NCT01214031 -NCT01216527 -NCT01214070 -NCT01216631 -NCT01214109 -NCT01216644 -NCT01214200 -NCT01216657 -NCT01214330 -NCT01216683 -NCT01214343 -NCT01216696 -NCT01214408 -NCT01216787 -NCT01214564 -NCT01216800 -NCT01214603 -NCT01216826 -NCT01214616 -NCT01216839 -NCT01214629 -NCT01216956 -NCT01214642 -NCT01217034 -NCT01214655 -NCT01217060 -NCT01214668 -NCT01217125 -NCT01214681 -NCT01217177 -NCT01214707 -NCT01217203 -NCT01214720 -NCT01217216 -NCT01215032 -NCT01217229 -NCT01215071 -NCT01217333 -NCT01215123 -NCT01217385 -NCT01215136 -NCT01217398 -NCT01215162 -NCT01217411 -NCT01215266 -NCT01236144 -NCT01224301 -NCT01234467 -NCT01224392 -NCT01234480 -NCT01224405 -NCT01234519 -NCT01224418 -NCT01234532 -NCT01224483 -NCT01234545 -NCT01224496 -NCT01234740 -NCT01224652 -NCT01234753 -NCT01224665 -NCT01234766 -NCT01224678 -NCT01234805 -NCT01224691 -NCT01234857 -NCT01224704 -NCT01234883 -NCT01224730 -NCT01234922 -NCT01224795 -NCT01234935 -NCT01224808 -NCT01234974 -NCT01224821 -NCT01235052 -NCT01224912 -NCT01235091 -NCT01224990 -NCT01235117 -NCT01225029 -NCT01235182 -NCT01225172 -NCT01235416 -NCT01225211 -NCT01235572 -NCT01225237 -NCT01235741 -NCT01225263 -NCT01235793 -NCT01225289 -NCT01235832 -NCT01225302 -NCT01235845 -NCT01225328 -NCT01235897 -NCT01225354 -NCT01235910 -NCT01225419 -NCT01235962 -NCT01225445 -NCT01236027 -NCT01225471 -NCT01231074 -NCT01231113 -NCT01231204 -NCT01231230 -NCT01231269 -NCT01231347 -NCT01231399 -NCT01231412 -NCT01231568 -NCT01231581 -NCT01231594 -NCT01231659 -NCT01231724 -NCT01231737 -NCT01231802 -NCT01231906 -NCT01231919 -NCT01231945 -NCT01231971 -NCT01232075 -NCT01232101 -NCT01232140 -NCT01232296 -NCT01232374 -NCT01232452 -NCT01232504 -NCT01232556 -NCT01232582 -NCT01232595 -NCT01232634 -NCT01232712 -NCT01232738 -NCT01232829 -NCT01232842 -NCT01232855 -NCT01232868 -NCT01232959 -NCT01233258 -NCT01233362 -NCT01233375 -NCT01233427 -NCT01233479 -NCT01233492 -NCT01233505 -NCT01233544 -NCT01233687 -NCT01233713 -NCT01233778 -NCT01233843 -NCT01233895 -NCT01233921 -NCT01233947 -NCT01234012 -NCT01234025 -NCT01234038 -NCT01234051 -NCT01234272 -NCT01234311 -NCT01234324 -NCT01234337 -NCT01234402 -NCT01236040 -NCT01225510 -NCT01227928 -NCT01225523 -NCT01227889 -NCT01225536 -NCT01227941 -NCT01225640 -NCT01227954 -NCT01225679 -NCT01227980 -NCT01225744 -NCT01228045 -NCT01225757 -NCT01228071 -NCT01225822 -NCT01228084 -NCT01225874 -NCT01228240 -NCT01225887 -NCT01228331 -NCT01225913 -NCT01228435 -NCT01226030 -NCT01228448 -NCT01226056 -NCT01228565 -NCT01226186 -NCT01228734 -NCT01226264 -NCT01228760 -NCT01226277 -NCT01228773 -NCT01226290 -NCT01228929 -NCT01226303 -NCT01228942 -NCT01226316 -NCT01229007 -NCT01226342 -NCT01229111 -NCT01226368 -NCT01229150 -NCT01226381 -NCT01229319 -NCT01226394 -NCT01229566 -NCT01226472 -NCT01229605 -NCT01226485 -NCT01229618 -NCT01226498 -NCT01229644 -NCT01226524 -NCT01229683 -NCT01226537 -NCT01229774 -NCT01226576 -NCT01229813 -NCT01226654 -NCT01229839 -NCT01226693 -NCT01229865 -NCT01226719 -NCT01229930 -NCT01226732 -NCT01229943 -NCT01226758 -NCT01229995 -NCT01226797 -NCT01230177 -NCT01226849 -NCT01230346 -NCT01226901 -NCT01230424 -NCT01226914 -NCT01230476 -NCT01226979 -NCT01230554 -NCT01226992 -NCT01230593 -NCT01227018 -NCT01230619 -NCT01227083 -NCT01230658 -NCT01227109 -NCT01230671 -NCT01227135 -NCT01230710 -NCT01227187 -NCT01230775 -NCT01227239 -NCT01230788 -NCT01227317 -NCT01230866 -NCT01227408 -NCT01230879 -NCT01227434 -NCT01230905 -NCT01227499 -NCT01230918 -NCT01227551 -NCT01230957 -NCT01227577 -NCT01230970 -NCT01227642 -NCT01230983 -NCT01227707 -NCT01230996 -NCT01227772 -NCT01231061 -NCT01227863 -NCT01246128 -NCT01240811 -NCT01243359 -NCT01240824 -NCT01243333 -NCT01240876 -NCT01243385 -NCT01240902 -NCT01243398 -NCT01240928 -NCT01243476 -NCT01240941 -NCT01243489 -NCT01240954 -NCT01243515 -NCT01241019 -NCT01243541 -NCT01241110 -NCT01243619 -NCT01241149 -NCT01243632 -NCT01241162 -NCT01243645 -NCT01241227 -NCT01243762 -NCT01241292 -NCT01243775 -NCT01241305 -NCT01243853 -NCT01241448 -NCT01243892 -NCT01241461 -NCT01243944 -NCT01241500 -NCT01243996 -NCT01241552 -NCT01244009 -NCT01241565 -NCT01244152 -NCT01241604 -NCT01244191 -NCT01241682 -NCT01244230 -NCT01241708 -NCT01244243 -NCT01241721 -NCT01244347 -NCT01241734 -NCT01244438 -NCT01241786 -NCT01244503 -NCT01241799 -NCT01244516 -NCT01241825 -NCT01244529 -NCT01241929 -NCT01244568 -NCT01241968 -NCT01244711 -NCT01241994 -NCT01244724 -NCT01242007 -NCT01244737 -NCT01242033 -NCT01244789 -NCT01242046 -NCT01244906 -NCT01242072 -NCT01244945 -NCT01242124 -NCT01245023 -NCT01242267 -NCT01245036 -NCT01242397 -NCT01245062 -NCT01242436 -NCT01245179 -NCT01242449 -NCT01245205 -NCT01242540 -NCT01245296 -NCT01242553 -NCT01245543 -NCT01242566 -NCT01245556 -NCT01242605 -NCT01245582 -NCT01242618 -NCT01245608 -NCT01242631 -NCT01245621 -NCT01242748 -NCT01245660 -NCT01242774 -NCT01245673 -NCT01242800 -NCT01245712 -NCT01242878 -NCT01245751 -NCT01242930 -NCT01245959 -NCT01242943 -NCT01245972 -NCT01243047 -NCT01245985 -NCT01243060 -NCT01246063 -NCT01243073 -NCT01246076 -NCT01243125 -NCT01246102 -NCT01243190 -NCT01254890 -NCT01249911 -NCT01252693 -NCT01250067 -NCT01252667 -NCT01250119 -NCT01252719 -NCT01250158 -NCT01252732 -NCT01250288 -NCT01252745 -NCT01250314 -NCT01252771 -NCT01250340 -NCT01252797 -NCT01250379 -NCT01252823 -NCT01250405 -NCT01252875 -NCT01250470 -NCT01253018 -NCT01250509 -NCT01253070 -NCT01250535 -NCT01253096 -NCT01250574 -NCT01253135 -NCT01250613 -NCT01253148 -NCT01250717 -NCT01253161 -NCT01250756 -NCT01253213 -NCT01250912 -NCT01253278 -NCT01250951 -NCT01253356 -NCT01251107 -NCT01253369 -NCT01251120 -NCT01253408 -NCT01251159 -NCT01253447 -NCT01251172 -NCT01253460 -NCT01251237 -NCT01253512 -NCT01251250 -NCT01253525 -NCT01251263 -NCT01253564 -NCT01251328 -NCT01253590 -NCT01251354 -NCT01253629 -NCT01251432 -NCT01253642 -NCT01251484 -NCT01253668 -NCT01251536 -NCT01253681 -NCT01251562 -NCT01253707 -NCT01251575 -NCT01253720 -NCT01251627 -NCT01253733 -NCT01251640 -NCT01253837 -NCT01251666 -NCT01254019 -NCT01251796 -NCT01254032 -NCT01251809 -NCT01254045 -NCT01251822 -NCT01254071 -NCT01251861 -NCT01254136 -NCT01251874 -NCT01254162 -NCT01251900 -NCT01254175 -NCT01251926 -NCT01254188 -NCT01251952 -NCT01254201 -NCT01251965 -NCT01254279 -NCT01251978 -NCT01254513 -NCT01252108 -NCT01254526 -NCT01252199 -NCT01254578 -NCT01252225 -NCT01254591 -NCT01252251 -NCT01254617 -NCT01252277 -NCT01254669 -NCT01252290 -NCT01254682 -NCT01252329 -NCT01254734 -NCT01252459 -NCT01254838 -NCT01252472 -NCT01254851 -NCT01252602 -NCT01254864 -NCT01252628 -NCT01273064 -NCT01258101 -NCT01265940 -NCT01258114 -NCT01265927 -NCT01258192 -NCT01265953 -NCT01258257 -NCT01265966 -NCT01258322 -NCT01266018 -NCT01258348 -NCT01266031 -NCT01258413 -NCT01266044 -NCT01258478 -NCT01266057 -NCT01258543 -NCT01266070 -NCT01258608 -NCT01266083 -NCT01258634 -NCT01266096 -NCT01258829 -NCT01266148 -NCT01258855 -NCT01266187 -NCT01258868 -NCT01266213 -NCT01258933 -NCT01266317 -NCT01258985 -NCT01266369 -NCT01258998 -NCT01266447 -NCT01259024 -NCT01266460 -NCT01259037 -NCT01266486 -NCT01259063 -NCT01266512 -NCT01259089 -NCT01266525 -NCT01259141 -NCT01266603 -NCT01259167 -NCT01266642 -NCT01259180 -NCT01266694 -NCT01259193 -NCT01266707 -NCT01259219 -NCT01266720 -NCT01259245 -NCT01266759 -NCT01259284 -NCT01266811 -NCT01259336 -NCT01266824 -NCT01259375 -NCT01266837 -NCT01259414 -NCT01266902 -NCT01259440 -NCT01266915 -NCT01259479 -NCT01266967 -NCT01259505 -NCT01267084 -NCT01259518 -NCT01271972 -NCT01259531 -NCT01272011 -NCT01259674 -NCT01272024 -NCT01259765 -NCT01272037 -NCT01259856 -NCT01272050 -NCT01259869 -NCT01272141 -NCT01259934 -NCT01272245 -NCT01260064 -NCT01272310 -NCT01260077 -NCT01272388 -NCT01260103 -NCT01272414 -NCT01260116 -NCT01272466 -NCT01260129 -NCT01272505 -NCT01260181 -NCT01272557 -NCT01260194 -NCT01272609 -NCT01260389 -NCT01272622 -NCT01260415 -NCT01272674 -NCT01260467 -NCT01272713 -NCT01260480 -NCT01272778 -NCT01260506 -NCT01272791 -NCT01260532 -NCT01272817 -NCT01260623 -NCT01273025 -NCT01260688 -NCT01273051 -NCT01260701 -NCT01263418 -NCT01260714 -NCT01263392 -NCT01260727 -NCT01263613 -NCT01260740 -NCT01263626 -NCT01260805 -NCT01263639 -NCT01260883 -NCT01263665 -NCT01260987 -NCT01263691 -NCT01261000 -NCT01263704 -NCT01261026 -NCT01263769 -NCT01261039 -NCT01263782 -NCT01261234 -NCT01263821 -NCT01261247 -NCT01263886 -NCT01261260 -NCT01263899 -NCT01261299 -NCT01263951 -NCT01261312 -NCT01264003 -NCT01261325 -NCT01264055 -NCT01261377 -NCT01264081 -NCT01261429 -NCT01264120 -NCT01261442 -NCT01264172 -NCT01261520 -NCT01264315 -NCT01261546 -NCT01264328 -NCT01261572 -NCT01264341 -NCT01261598 -NCT01264380 -NCT01261728 -NCT01264406 -NCT01261754 -NCT01264419 -NCT01261884 -NCT01264432 -NCT01261936 -NCT01264510 -NCT01261962 -NCT01264705 -NCT01262014 -NCT01264731 -NCT01262027 -NCT01264874 -NCT01262040 -NCT01264887 -NCT01262183 -NCT01264926 -NCT01262209 -NCT01264952 -NCT01262235 -NCT01264991 -NCT01262274 -NCT01265030 -NCT01262417 -NCT01265082 -NCT01262469 -NCT01265147 -NCT01262482 -NCT01265160 -NCT01262560 -NCT01265186 -NCT01262612 -NCT01265199 -NCT01262651 -NCT01265264 -NCT01262664 -NCT01265290 -NCT01262820 -NCT01265342 -NCT01262859 -NCT01265355 -NCT01262963 -NCT01265368 -NCT01263002 -NCT01265381 -NCT01263119 -NCT01265433 -NCT01263132 -NCT01265459 -NCT01263145 -NCT01265550 -NCT01263171 -NCT01265576 -NCT01263301 -NCT01265602 -NCT01263314 -NCT01265628 -NCT01263327 -NCT01265810 -NCT01263340 -NCT01265849 -NCT01263353 -NCT01265901 -NCT01263366 -NCT01271920 -NCT01267110 -NCT01269528 -NCT01267240 -NCT01269437 -NCT01267253 -NCT01269554 -NCT01267266 -NCT01269567 -NCT01267305 -NCT01269593 -NCT01267344 -NCT01269645 -NCT01267383 -NCT01269697 -NCT01267396 -NCT01269749 -NCT01267448 -NCT01269775 -NCT01267461 -NCT01269788 -NCT01267513 -NCT01269853 -NCT01267539 -NCT01269879 -NCT01267552 -NCT01269892 -NCT01267578 -NCT01269918 -NCT01267643 -NCT01269931 -NCT01267669 -NCT01269996 -NCT01267695 -NCT01270139 -NCT01267812 -NCT01270191 -NCT01267864 -NCT01270204 -NCT01267877 -NCT01270321 -NCT01267903 -NCT01270373 -NCT01267955 -NCT01270386 -NCT01267994 -NCT01270425 -NCT01268007 -NCT01270438 -NCT01268059 -NCT01270516 -NCT01268072 -NCT01270581 -NCT01268150 -NCT01270698 -NCT01268163 -NCT01270724 -NCT01268280 -NCT01270750 -NCT01268293 -NCT01270841 -NCT01268384 -NCT01270880 -NCT01268410 -NCT01270893 -NCT01268501 -NCT01270906 -NCT01268566 -NCT01270919 -NCT01268579 -NCT01270932 -NCT01268709 -NCT01270984 -NCT01268735 -NCT01271010 -NCT01268748 -NCT01271088 -NCT01268774 -NCT01271127 -NCT01268891 -NCT01271166 -NCT01268943 -NCT01271192 -NCT01268969 -NCT01271283 -NCT01269008 -NCT01271296 -NCT01269047 -NCT01271322 -NCT01269060 -NCT01271335 -NCT01269138 -NCT01271439 -NCT01269190 -NCT01271504 -NCT01269203 -NCT01271530 -NCT01269216 -NCT01271582 -NCT01269229 -NCT01271712 -NCT01269255 -NCT01271725 -NCT01269320 -NCT01271738 -NCT01269346 -NCT01271764 -NCT01269385 -NCT01271803 -NCT01269411 -NCT01271907 -NCT01269424 -NCT01321008 -NCT01275339 -NCT01320059 -NCT01275404 -NCT01320085 -NCT01275586 -NCT01320111 -NCT01275612 -NCT01320176 -NCT01275664 -NCT01320189 -NCT01275677 -NCT01320241 -NCT01275690 -NCT01320254 -NCT01275859 -NCT01320267 -NCT01275872 -NCT01320280 -NCT01276041 -NCT01320319 -NCT01276054 -NCT01320384 -NCT01276093 -NCT01320488 -NCT01276106 -NCT01320501 -NCT01276171 -NCT01320527 -NCT01276210 -NCT01320592 -NCT01276236 -NCT01320670 -NCT01276249 -NCT01320683 -NCT01276379 -NCT01320787 -NCT01276392 -NCT01320852 -NCT01276496 -NCT01320891 -NCT01276548 -NCT01315678 -NCT01315743 -NCT01315769 -NCT01315873 -NCT01315938 -NCT01315990 -NCT01316029 -NCT01316042 -NCT01316146 -NCT01316211 -NCT01316250 -NCT01316263 -NCT01316276 -NCT01316458 -NCT01316471 -NCT01316523 -NCT01316614 -NCT01316692 -NCT01316744 -NCT01316757 -NCT01316796 -NCT01316809 -NCT01316822 -NCT01316874 -NCT01317004 -NCT01317069 -NCT01317108 -NCT01317173 -NCT01317199 -NCT01317212 -NCT01317420 -NCT01317433 -NCT01317550 -NCT01317589 -NCT01317615 -NCT01317641 -NCT01317745 -NCT01317758 -NCT01317888 -NCT01317901 -NCT01317927 -NCT01317940 -NCT01318070 -NCT01318083 -NCT01318109 -NCT01318161 -NCT01318200 -NCT01318239 -NCT01318317 -NCT01318369 -NCT01318434 -NCT01318447 -NCT01318473 -NCT01318564 -NCT01318590 -NCT01318616 -NCT01318642 -NCT01318707 -NCT01318733 -NCT01318902 -NCT01318980 -NCT01319123 -NCT01319266 -NCT01319422 -NCT01319448 -NCT01319461 -NCT01319539 -NCT01319552 -NCT01319565 -NCT01319669 -NCT01319838 -NCT01319851 -NCT01319864 -NCT01319929 -NCT01319981 -NCT01320007 -NCT01320020 -NCT01320033 -NCT01320046 -NCT01320904 -NCT01276600 -NCT01313650 -NCT01276613 -NCT01313663 -NCT01276639 -NCT01313676 -NCT01276665 -NCT01313689 -NCT01276678 -NCT01313780 -NCT01276704 -NCT01313884 -NCT01276717 -NCT01313897 -NCT01276730 -NCT01313936 -NCT01276769 -NCT01313962 -NCT01276782 -NCT01314014 -NCT01276795 -NCT01314027 -NCT01276886 -NCT01314053 -NCT01276938 -NCT01314105 -NCT01276964 -NCT01314118 -NCT01276977 -NCT01314144 -NCT01277016 -NCT01314183 -NCT01277107 -NCT01314261 -NCT01277146 -NCT01314274 -NCT01277159 -NCT01314300 -NCT01277172 -NCT01314313 -NCT01277198 -NCT01314339 -NCT01277315 -NCT01314352 -NCT01277380 -NCT01314456 -NCT01277406 -NCT01314508 -NCT01277484 -NCT01314586 -NCT01277510 -NCT01314599 -NCT01277731 -NCT01314638 -NCT01277744 -NCT01314677 -NCT01277757 -NCT01314716 -NCT01277796 -NCT01314755 -NCT01277861 -NCT01314807 -NCT01277939 -NCT01314820 -NCT01278004 -NCT01314833 -NCT01278017 -NCT01314963 -NCT01278056 -NCT01315015 -NCT01278212 -NCT01315132 -NCT01278329 -NCT01315223 -NCT01278342 -NCT01315366 -NCT01278368 -NCT01315431 -NCT01278394 -NCT01315470 -NCT01278420 -NCT01315483 -NCT01278446 -NCT01315522 -NCT01278537 -NCT01315548 -NCT01278602 -NCT01315561 -NCT01278615 -NCT01315639 -NCT01278758 -NCT01312922 -NCT01313026 -NCT01313039 -NCT01313065 -NCT01313078 -NCT01313104 -NCT01313208 -NCT01313234 -NCT01313247 -NCT01313273 -NCT01313312 -NCT01313377 -NCT01313390 -NCT01313416 -NCT01313429 -NCT01313442 -NCT01313455 -NCT01313546 -NCT01313559 -NCT01313598 -NCT01313611 -NCT01313624 -NCT01313637 -NCT01278810 -NCT01311440 -NCT01278849 -NCT01311466 -NCT01278888 -NCT01311648 -NCT01278914 -NCT01311687 -NCT01278940 -NCT01311713 -NCT01279096 -NCT01311752 -NCT01279122 -NCT01311869 -NCT01279135 -NCT01311895 -NCT01279252 -NCT01311960 -NCT01279278 -NCT01311973 -NCT01279291 -NCT01311986 -NCT01279330 -NCT01312012 -NCT01279369 -NCT01312025 -NCT01279421 -NCT01312038 -NCT01279473 -NCT01312090 -NCT01279590 -NCT01312246 -NCT01279603 -NCT01312285 -NCT01279616 -NCT01312311 -NCT01279668 -NCT01312324 -NCT01279681 -NCT01312337 -NCT01279694 -NCT01312350 -NCT01279733 -NCT01312376 -NCT01279811 -NCT01312389 -NCT01279863 -NCT01312467 -NCT01279876 -NCT01312493 -NCT01279902 -NCT01312506 -NCT01279941 -NCT01312662 -NCT01279967 -NCT01312675 -NCT01280032 -NCT01312818 -NCT01280045 -NCT01312857 -NCT01280058 -NCT01290783 -NCT01290822 -NCT01290835 -NCT01290887 -NCT01290926 -NCT01290939 -NCT01291017 -NCT01291095 -NCT01291225 -NCT01291238 -NCT01291407 -NCT01291420 -NCT01291615 -NCT01291628 -NCT01291680 -NCT01291823 -NCT01291849 -NCT01309516 -NCT01309529 -NCT01309568 -NCT01309607 -NCT01309633 -NCT01309672 -NCT01309737 -NCT01309750 -NCT01309789 -NCT01309919 -NCT01310010 -NCT01310036 -NCT01310075 -NCT01310101 -NCT01310140 -NCT01310166 -NCT01310179 -NCT01310192 -NCT01310231 -NCT01310244 -NCT01310322 -NCT01310387 -NCT01310478 -NCT01310491 -NCT01310530 -NCT01310556 -NCT01310673 -NCT01310699 -NCT01310803 -NCT01310816 -NCT01310855 -NCT01310868 -NCT01310894 -NCT01311089 -NCT01311102 -NCT01311219 -NCT01311232 -NCT01311271 -NCT01311323 -NCT01311375 -NCT01280201 -NCT01289210 -NCT01280227 -NCT01289223 -NCT01280292 -NCT01289288 -NCT01280318 -NCT01289314 -NCT01280461 -NCT01289327 -NCT01280474 -NCT01289353 -NCT01280487 -NCT01289457 -NCT01280500 -NCT01289470 -NCT01280526 -NCT01289522 -NCT01280552 -NCT01289574 -NCT01280565 -NCT01289613 -NCT01280643 -NCT01289652 -NCT01280695 -NCT01289678 -NCT01280786 -NCT01289808 -NCT01280864 -NCT01289821 -NCT01280877 -NCT01289834 -NCT01280981 -NCT01289860 -NCT01280994 -NCT01289912 -NCT01281033 -NCT01290120 -NCT01281059 -NCT01290250 -NCT01281124 -NCT01290263 -NCT01281150 -NCT01290302 -NCT01281163 -NCT01290341 -NCT01281176 -NCT01290354 -NCT01281189 -NCT01290380 -NCT01281254 -NCT01290406 -NCT01281358 -NCT01290471 -NCT01281488 -NCT01290523 -NCT01281514 -NCT01290536 -NCT01281592 -NCT01290549 -NCT01281696 -NCT01290562 -NCT01281709 -NCT01290588 -NCT01281722 -NCT01290640 -NCT01281748 -NCT01290692 -NCT01281761 -NCT01290718 -NCT01281787 -NCT01287078 -NCT01287104 -NCT01287130 -NCT01287143 -NCT01287286 -NCT01287351 -NCT01287390 -NCT01287429 -NCT01287520 -NCT01287546 -NCT01287585 -NCT01287598 -NCT01287624 -NCT01287637 -NCT01287663 -NCT01287702 -NCT01287728 -NCT01287741 -NCT01287754 -NCT01287962 -NCT01288053 -NCT01288092 -NCT01288222 -NCT01288235 -NCT01288261 -NCT01288287 -NCT01288339 -NCT01288352 -NCT01288378 -NCT01288430 -NCT01288443 -NCT01288534 -NCT01288573 -NCT01288612 -NCT01288651 -NCT01288742 -NCT01288768 -NCT01288833 -NCT01288911 -NCT01288989 -NCT01289015 -NCT01289028 -NCT01289041 -NCT01289067 -NCT01289093 -NCT01290757 -NCT01281800 -NCT01284556 -NCT01281826 -NCT01284504 -NCT01281852 -NCT01284647 -NCT01281865 -NCT01284673 -NCT01281904 -NCT01284829 -NCT01281917 -NCT01284855 -NCT01281943 -NCT01284894 -NCT01281956 -NCT01284920 -NCT01282151 -NCT01284933 -NCT01282164 -NCT01284946 -NCT01282216 -NCT01284985 -NCT01282268 -NCT01285037 -NCT01282333 -NCT01285063 -NCT01282398 -NCT01285089 -NCT01282424 -NCT01285102 -NCT01282437 -NCT01285193 -NCT01282450 -NCT01285219 -NCT01282463 -NCT01285245 -NCT01282476 -NCT01285310 -NCT01282502 -NCT01285349 -NCT01282580 -NCT01285414 -NCT01282593 -NCT01285427 -NCT01282697 -NCT01285440 -NCT01283009 -NCT01285453 -NCT01283035 -NCT01285466 -NCT01283048 -NCT01285557 -NCT01283061 -NCT01285583 -NCT01283152 -NCT01285609 -NCT01283178 -NCT01285635 -NCT01283204 -NCT01285648 -NCT01283217 -NCT01285674 -NCT01283269 -NCT01285765 -NCT01283321 -NCT01285778 -NCT01283334 -NCT01286012 -NCT01283373 -NCT01286064 -NCT01283386 -NCT01286077 -NCT01283503 -NCT01286168 -NCT01283516 -NCT01286181 -NCT01283542 -NCT01286194 -NCT01283646 -NCT01286272 -NCT01283698 -NCT01286324 -NCT01283763 -NCT01286389 -NCT01283776 -NCT01286467 -NCT01283789 -NCT01286480 -NCT01283815 -NCT01286610 -NCT01283945 -NCT01286675 -NCT01283958 -NCT01286727 -NCT01283997 -NCT01286753 -NCT01284075 -NCT01286766 -NCT01284192 -NCT01286818 -NCT01284205 -NCT01286883 -NCT01284231 -NCT01286974 -NCT01284335 -NCT01286987 -NCT01284348 -NCT01287013 -NCT01284413 -NCT01287052 -NCT01284426 -NCT01309477 -NCT01291901 -NCT01306942 -NCT01291927 -NCT01307007 -NCT01292031 -NCT01307020 -NCT01292044 -NCT01307085 -NCT01292057 -NCT01307267 -NCT01292083 -NCT01307397 -NCT01292135 -NCT01307449 -NCT01292161 -NCT01307462 -NCT01292187 -NCT01307501 -NCT01292200 -NCT01307540 -NCT01292213 -NCT01307579 -NCT01292291 -NCT01307592 -NCT01292330 -NCT01307605 -NCT01292356 -NCT01307618 -NCT01292408 -NCT01307631 -NCT01292486 -NCT01307722 -NCT01292603 -NCT01307813 -NCT01292655 -NCT01307878 -NCT01292668 -NCT01307891 -NCT01292681 -NCT01307904 -NCT01292733 -NCT01307930 -NCT01292863 -NCT01307956 -NCT01292889 -NCT01307982 -NCT01293006 -NCT01308034 -NCT01293032 -NCT01308086 -NCT01293045 -NCT01308112 -NCT01293084 -NCT01308190 -NCT01293110 -NCT01308294 -NCT01293162 -NCT01308320 -NCT01293279 -NCT01308346 -NCT01293292 -NCT01308463 -NCT01293318 -NCT01308489 -NCT01293448 -NCT01308567 -NCT01293539 -NCT01308580 -NCT01293552 -NCT01308632 -NCT01293630 -NCT01308645 -NCT01293682 -NCT01308684 -NCT01293721 -NCT01308723 -NCT01293942 -NCT01308762 -NCT01293968 -NCT01308775 -NCT01294046 -NCT01308827 -NCT01294072 -NCT01308840 -NCT01294150 -NCT01308905 -NCT01294202 -NCT01308944 -NCT01294293 -NCT01309048 -NCT01294306 -NCT01309126 -NCT01294319 -NCT01309230 -NCT01294579 -NCT01309334 -NCT01294618 -NCT01309386 -NCT01294670 -NCT01309399 -NCT01294735 -NCT01309412 -NCT01294787 -NCT01306383 -NCT01306448 -NCT01306500 -NCT01306591 -NCT01306604 -NCT01306630 -NCT01306643 -NCT01306656 -NCT01306721 -NCT01309425 -NCT01294800 -NCT01297647 -NCT01294826 -NCT01297543 -NCT01294852 -NCT01297725 -NCT01294865 -NCT01297764 -NCT01294917 -NCT01297777 -NCT01295047 -NCT01297790 -NCT01295060 -NCT01297881 -NCT01295086 -NCT01297946 -NCT01295138 -NCT01297998 -NCT01295229 -NCT01298011 -NCT01295307 -NCT01298167 -NCT01295385 -NCT01298193 -NCT01295463 -NCT01298284 -NCT01295502 -NCT01298323 -NCT01295593 -NCT01298336 -NCT01295632 -NCT01298375 -NCT01295645 -NCT01304407 -NCT01295697 -NCT01304446 -NCT01295710 -NCT01304459 -NCT01295723 -NCT01304485 -NCT01295762 -NCT01304524 -NCT01295801 -NCT01304602 -NCT01295827 -NCT01304745 -NCT01295905 -NCT01304758 -NCT01295918 -NCT01304784 -NCT01295931 -NCT01304797 -NCT01295944 -NCT01304849 -NCT01295957 -NCT01304875 -NCT01295970 -NCT01304927 -NCT01296022 -NCT01304940 -NCT01296035 -NCT01305044 -NCT01296087 -NCT01305122 -NCT01296113 -NCT01305148 -NCT01296139 -NCT01305200 -NCT01296178 -NCT01305213 -NCT01296204 -NCT01305447 -NCT01296217 -NCT01305460 -NCT01296243 -NCT01305499 -NCT01296256 -NCT01305512 -NCT01296503 -NCT01305655 -NCT01296529 -NCT01305681 -NCT01296555 -NCT01305759 -NCT01296568 -NCT01305772 -NCT01296581 -NCT01305915 -NCT01296659 -NCT01305941 -NCT01296672 -NCT01305967 -NCT01296763 -NCT01305980 -NCT01296815 -NCT01305993 -NCT01296893 -NCT01306019 -NCT01296932 -NCT01306032 -NCT01297023 -NCT01306045 -NCT01297244 -NCT01306058 -NCT01297270 -NCT01306084 -NCT01297452 -NCT01306266 -NCT01297491 -NCT01306331 -NCT01297530 -NCT01306370 -NCT01298401 -NCT01301716 -NCT01298570 -NCT01301703 -NCT01298596 -NCT01301729 -NCT01298713 -NCT01301755 -NCT01298765 -NCT01301781 -NCT01298882 -NCT01301807 -NCT01298921 -NCT01301820 -NCT01298999 -NCT01301911 -NCT01299012 -NCT01301963 -NCT01299038 -NCT01302002 -NCT01299090 -NCT01302041 -NCT01299220 -NCT01302106 -NCT01299415 -NCT01302353 -NCT01299493 -NCT01302366 -NCT01299623 -NCT01302379 -NCT01299636 -NCT01302392 -NCT01299701 -NCT01302405 -NCT01299714 -NCT01302496 -NCT01299883 -NCT01302509 -NCT01299948 -NCT01302535 -NCT01299987 -NCT01302561 -NCT01300026 -NCT01302613 -NCT01300104 -NCT01302756 -NCT01300143 -NCT01302769 -NCT01300156 -NCT01302808 -NCT01300182 -NCT01302821 -NCT01300221 -NCT01302834 -NCT01300247 -NCT01302886 -NCT01300299 -NCT01302925 -NCT01300351 -NCT01303029 -NCT01300533 -NCT01303094 -NCT01300546 -NCT01303159 -NCT01300572 -NCT01303172 -NCT01300585 -NCT01303211 -NCT01300611 -NCT01303224 -NCT01300637 -NCT01303328 -NCT01300793 -NCT01303341 -NCT01300858 -NCT01303380 -NCT01300923 -NCT01303419 -NCT01300949 -NCT01303497 -NCT01300962 -NCT01303679 -NCT01300975 -NCT01303705 -NCT01301040 -NCT01303757 -NCT01301144 -NCT01303796 -NCT01301183 -NCT01303822 -NCT01301235 -NCT01303835 -NCT01301248 -NCT01303887 -NCT01301391 -NCT01303926 -NCT01301417 -NCT01303965 -NCT01301430 -NCT01303991 -NCT01301469 -NCT01304017 -NCT01301495 -NCT01304121 -NCT01301560 -NCT01304160 -NCT01301612 -NCT01304251 -NCT01301677 -NCT01304303 -NCT01301690 -NCT01326260 -NCT01321034 -NCT01323920 -NCT01321242 -NCT01323855 -NCT01321281 -NCT01323933 -NCT01321346 -NCT01323985 -NCT01321424 -NCT01324037 -NCT01321437 -NCT01324063 -NCT01321541 -NCT01324076 -NCT01321554 -NCT01324102 -NCT01321619 -NCT01324115 -NCT01321658 -NCT01324141 -NCT01321684 -NCT01324180 -NCT01321697 -NCT01324284 -NCT01321736 -NCT01324310 -NCT01321775 -NCT01324323 -NCT01321827 -NCT01324479 -NCT01321879 -NCT01324492 -NCT01321957 -NCT01324570 -NCT01321970 -NCT01324583 -NCT01321996 -NCT01324596 -NCT01322022 -NCT01324635 -NCT01322100 -NCT01324739 -NCT01322126 -NCT01324791 -NCT01322152 -NCT01324830 -NCT01322165 -NCT01324856 -NCT01322178 -NCT01324882 -NCT01322191 -NCT01324921 -NCT01322243 -NCT01324947 -NCT01322269 -NCT01324960 -NCT01322334 -NCT01324986 -NCT01322386 -NCT01325155 -NCT01322438 -NCT01325207 -NCT01322490 -NCT01325233 -NCT01322672 -NCT01325259 -NCT01322763 -NCT01325311 -NCT01322776 -NCT01325428 -NCT01322789 -NCT01325441 -NCT01322802 -NCT01325454 -NCT01322815 -NCT01325480 -NCT01322854 -NCT01325558 -NCT01322867 -NCT01325571 -NCT01323010 -NCT01325584 -NCT01323062 -NCT01325688 -NCT01323140 -NCT01325701 -NCT01323218 -NCT01325740 -NCT01323231 -NCT01325753 -NCT01323335 -NCT01325818 -NCT01323361 -NCT01325844 -NCT01323400 -NCT01325857 -NCT01323517 -NCT01325909 -NCT01323530 -NCT01325961 -NCT01323543 -NCT01326000 -NCT01323608 -NCT01326065 -NCT01323660 -NCT01326078 -NCT01323673 -NCT01326104 -NCT01323712 -NCT01326195 -NCT01323751 -NCT01332344 -NCT01326312 -NCT01329549 -NCT01326468 -NCT01329484 -NCT01326481 -NCT01329562 -NCT01326559 -NCT01329627 -NCT01326637 -NCT01329640 -NCT01326663 -NCT01329653 -NCT01326676 -NCT01329692 -NCT01326689 -NCT01329718 -NCT01326702 -NCT01329731 -NCT01326728 -NCT01329770 -NCT01326741 -NCT01329809 -NCT01326767 -NCT01329900 -NCT01326845 -NCT01329926 -NCT01326871 -NCT01330173 -NCT01326923 -NCT01330381 -NCT01326936 -NCT01330446 -NCT01326949 -NCT01330459 -NCT01327053 -NCT01330511 -NCT01327066 -NCT01330550 -NCT01327222 -NCT01330667 -NCT01327300 -NCT01330732 -NCT01327313 -NCT01330823 -NCT01327521 -NCT01330966 -NCT01327599 -NCT01331018 -NCT01327612 -NCT01331083 -NCT01327742 -NCT01331135 -NCT01327768 -NCT01331187 -NCT01327781 -NCT01331200 -NCT01327807 -NCT01331213 -NCT01327885 -NCT01331239 -NCT01327976 -NCT01331291 -NCT01327989 -NCT01331421 -NCT01328028 -NCT01331434 -NCT01328054 -NCT01331447 -NCT01328106 -NCT01331525 -NCT01328171 -NCT01331590 -NCT01328197 -NCT01331603 -NCT01328236 -NCT01331616 -NCT01328418 -NCT01331629 -NCT01328444 -NCT01331642 -NCT01328457 -NCT01331746 -NCT01328483 -NCT01331772 -NCT01328535 -NCT01331824 -NCT01328574 -NCT01331863 -NCT01328613 -NCT01331915 -NCT01328626 -NCT01331928 -NCT01328769 -NCT01331941 -NCT01328782 -NCT01331954 -NCT01328860 -NCT01332006 -NCT01328951 -NCT01332032 -NCT01328990 -NCT01332110 -NCT01329068 -NCT01332240 -NCT01329107 -NCT01332266 -NCT01329250 -NCT01332279 -NCT01329289 -NCT01332331 -NCT01329354 -NCT01337050 -NCT01332357 -NCT01334242 -NCT01332396 -NCT01334177 -NCT01332526 -NCT01334320 -NCT01332539 -NCT01334476 -NCT01332552 -NCT01334502 -NCT01332578 -NCT01334515 -NCT01332604 -NCT01334697 -NCT01332617 -NCT01334710 -NCT01332630 -NCT01334723 -NCT01332656 -NCT01334801 -NCT01332669 -NCT01334814 -NCT01332682 -NCT01334983 -NCT01332695 -NCT01334996 -NCT01332721 -NCT01335009 -NCT01332760 -NCT01335074 -NCT01332773 -NCT01335152 -NCT01332786 -NCT01335204 -NCT01332825 -NCT01335256 -NCT01332864 -NCT01335269 -NCT01332916 -NCT01335386 -NCT01332929 -NCT01335399 -NCT01332968 -NCT01335490 -NCT01333033 -NCT01335503 -NCT01333046 -NCT01335646 -NCT01333085 -NCT01335685 -NCT01333124 -NCT01335763 -NCT01333137 -NCT01335776 -NCT01333189 -NCT01335802 -NCT01333254 -NCT01335893 -NCT01333267 -NCT01335906 -NCT01333293 -NCT01335945 -NCT01333332 -NCT01335958 -NCT01333384 -NCT01335997 -NCT01333423 -NCT01336010 -NCT01333449 -NCT01336049 -NCT01333462 -NCT01336062 -NCT01333475 -NCT01336140 -NCT01333527 -NCT01336192 -NCT01333605 -NCT01336257 -NCT01333631 -NCT01336283 -NCT01333696 -NCT01336452 -NCT01333709 -NCT01336543 -NCT01333748 -NCT01336582 -NCT01333800 -NCT01336634 -NCT01333826 -NCT01336647 -NCT01333852 -NCT01336660 -NCT01333917 -NCT01336699 -NCT01333995 -NCT01336712 -NCT01334008 -NCT01336764 -NCT01334021 -NCT01336803 -NCT01334047 -NCT01336842 -NCT01334073 -NCT01336894 -NCT01334086 -NCT01336920 -NCT01334099 -NCT01336933 -NCT01334112 -NCT01336985 -NCT01334138 -NCT01342965 -NCT01337076 -NCT01339988 -NCT01337089 -NCT01339910 -NCT01337102 -NCT01340040 -NCT01337115 -NCT01340105 -NCT01337154 -NCT01340300 -NCT01337297 -NCT01340326 -NCT01337310 -NCT01340417 -NCT01337401 -NCT01340430 -NCT01337479 -NCT01340482 -NCT01337492 -NCT01340495 -NCT01337518 -NCT01340508 -NCT01337544 -NCT01340547 -NCT01337752 -NCT01340599 -NCT01337765 -NCT01340729 -NCT01337778 -NCT01340755 -NCT01337804 -NCT01340794 -NCT01337999 -NCT01340833 -NCT01338012 -NCT01340846 -NCT01338051 -NCT01341080 -NCT01338077 -NCT01341158 -NCT01338298 -NCT01341262 -NCT01338389 -NCT01341288 -NCT01338402 -NCT01341301 -NCT01338519 -NCT01341314 -NCT01338558 -NCT01341366 -NCT01338584 -NCT01341405 -NCT01338597 -NCT01341457 -NCT01338649 -NCT01341483 -NCT01338688 -NCT01341496 -NCT01338753 -NCT01341535 -NCT01338766 -NCT01341652 -NCT01338792 -NCT01341756 -NCT01338831 -NCT01341834 -NCT01338857 -NCT01341847 -NCT01338948 -NCT01341886 -NCT01338974 -NCT01342068 -NCT01338987 -NCT01342120 -NCT01339000 -NCT01342146 -NCT01339039 -NCT01342172 -NCT01339052 -NCT01342224 -NCT01339104 -NCT01342237 -NCT01339143 -NCT01342289 -NCT01339156 -NCT01342302 -NCT01339273 -NCT01342315 -NCT01339325 -NCT01342354 -NCT01339338 -NCT01342367 -NCT01339351 -NCT01342510 -NCT01339442 -NCT01342627 -NCT01339572 -NCT01342653 -NCT01339611 -NCT01342679 -NCT01339650 -NCT01342692 -NCT01339663 -NCT01342705 -NCT01339754 -NCT01342757 -NCT01339780 -NCT01342770 -NCT01339845 -NCT01342887 -NCT01339871 -NCT01349322 -NCT01343004 -NCT01346475 -NCT01343043 -NCT01346410 -NCT01343121 -NCT01346527 -NCT01343173 -NCT01346540 -NCT01343277 -NCT01346618 -NCT01343303 -NCT01346670 -NCT01343368 -NCT01346761 -NCT01343459 -NCT01346787 -NCT01343680 -NCT01346839 -NCT01343940 -NCT01346852 -NCT01343966 -NCT01346904 -NCT01344005 -NCT01346917 -NCT01344018 -NCT01347034 -NCT01344031 -NCT01347060 -NCT01344096 -NCT01347229 -NCT01344304 -NCT01347281 -NCT01344317 -NCT01347307 -NCT01344356 -NCT01347320 -NCT01344408 -NCT01347333 -NCT01344421 -NCT01347424 -NCT01344538 -NCT01347567 -NCT01344564 -NCT01347645 -NCT01344798 -NCT01347697 -NCT01344824 -NCT01347736 -NCT01344876 -NCT01347788 -NCT01344902 -NCT01347866 -NCT01344967 -NCT01347905 -NCT01344993 -NCT01347918 -NCT01345006 -NCT01347970 -NCT01345019 -NCT01347996 -NCT01345084 -NCT01348009 -NCT01345136 -NCT01348048 -NCT01345175 -NCT01348113 -NCT01345188 -NCT01348126 -NCT01345201 -NCT01348217 -NCT01345266 -NCT01348256 -NCT01345357 -NCT01348347 -NCT01345383 -NCT01348412 -NCT01345448 -NCT01348451 -NCT01345526 -NCT01348477 -NCT01345539 -NCT01348490 -NCT01345552 -NCT01348503 -NCT01345643 -NCT01348607 -NCT01345669 -NCT01348620 -NCT01345682 -NCT01348633 -NCT01345838 -NCT01348646 -NCT01345851 -NCT01348672 -NCT01345903 -NCT01348919 -NCT01345929 -NCT01348997 -NCT01346020 -NCT01349036 -NCT01346059 -NCT01349049 -NCT01346085 -NCT01349088 -NCT01346124 -NCT01349205 -NCT01346150 -NCT01349283 -NCT01346267 -NCT01349296 -NCT01346358 -NCT01355445 -NCT01349361 -NCT01352117 -NCT01349413 -NCT01352091 -NCT01349517 -NCT01352208 -NCT01349543 -NCT01352273 -NCT01349556 -NCT01352286 -NCT01349569 -NCT01352312 -NCT01349634 -NCT01352338 -NCT01349647 -NCT01352390 -NCT01349660 -NCT01352494 -NCT01349738 -NCT01352520 -NCT01349842 -NCT01352572 -NCT01349881 -NCT01352598 -NCT01349933 -NCT01352650 -NCT01349959 -NCT01352676 -NCT01349972 -NCT01352728 -NCT01349998 -NCT01352819 -NCT01350089 -NCT01352884 -NCT01350115 -NCT01352949 -NCT01350206 -NCT01352962 -NCT01350232 -NCT01353209 -NCT01350245 -NCT01353222 -NCT01350258 -NCT01353235 -NCT01350336 -NCT01353352 -NCT01350401 -NCT01353430 -NCT01350505 -NCT01353482 -NCT01350557 -NCT01353573 -NCT01350583 -NCT01353625 -NCT01350648 -NCT01353664 -NCT01350674 -NCT01353781 -NCT01350817 -NCT01353820 -NCT01350830 -NCT01353976 -NCT01350908 -NCT01354041 -NCT01350947 -NCT01354119 -NCT01351038 -NCT01354145 -NCT01351103 -NCT01354171 -NCT01351116 -NCT01354249 -NCT01351194 -NCT01354262 -NCT01351220 -NCT01354314 -NCT01351337 -NCT01354379 -NCT01351376 -NCT01354392 -NCT01351389 -NCT01354431 -NCT01351415 -NCT01354457 -NCT01351519 -NCT01354522 -NCT01351532 -NCT01354613 -NCT01351597 -NCT01354639 -NCT01351623 -NCT01354795 -NCT01351688 -NCT01354860 -NCT01351714 -NCT01354912 -NCT01351831 -NCT01354951 -NCT01351844 -NCT01355107 -NCT01351870 -NCT01355120 -NCT01351883 -NCT01355159 -NCT01351896 -NCT01355172 -NCT01351909 -NCT01355302 -NCT01351935 -NCT01355393 -NCT01351987 -NCT01360125 -NCT01355458 -NCT01357772 -NCT01355471 -NCT01357733 -NCT01355484 -NCT01357837 -NCT01355497 -NCT01358019 -NCT01355523 -NCT01358032 -NCT01355562 -NCT01358045 -NCT01355679 -NCT01358058 -NCT01355705 -NCT01358071 -NCT01355744 -NCT01358084 -NCT01355783 -NCT01358110 -NCT01355796 -NCT01358136 -NCT01355913 -NCT01358149 -NCT01355926 -NCT01358201 -NCT01355965 -NCT01358227 -NCT01356017 -NCT01358240 -NCT01356030 -NCT01358253 -NCT01356043 -NCT01358331 -NCT01356056 -NCT01358474 -NCT01356121 -NCT01358500 -NCT01356173 -NCT01358526 -NCT01356212 -NCT01358539 -NCT01356251 -NCT01358708 -NCT01356264 -NCT01358721 -NCT01356290 -NCT01358734 -NCT01356303 -NCT01358747 -NCT01356316 -NCT01358799 -NCT01356329 -NCT01358812 -NCT01356342 -NCT01358851 -NCT01356368 -NCT01358877 -NCT01356433 -NCT01358903 -NCT01356485 -NCT01358968 -NCT01356602 -NCT01359007 -NCT01356628 -NCT01359046 -NCT01356641 -NCT01359072 -NCT01356680 -NCT01359098 -NCT01356693 -NCT01359124 -NCT01356771 -NCT01359189 -NCT01356823 -NCT01359267 -NCT01356862 -NCT01359397 -NCT01356875 -NCT01359410 -NCT01357018 -NCT01359436 -NCT01357161 -NCT01359501 -NCT01357239 -NCT01359592 -NCT01357278 -NCT01359644 -NCT01357317 -NCT01359657 -NCT01357330 -NCT01359670 -NCT01357343 -NCT01359696 -NCT01357382 -NCT01359735 -NCT01357395 -NCT01359839 -NCT01357447 -NCT01359891 -NCT01357473 -NCT01359917 -NCT01357486 -NCT01359956 -NCT01357512 -NCT01359982 -NCT01357525 -NCT01360086 -NCT01357564 -NCT01360099 -NCT01357655 -NCT01366677 -NCT01360177 -NCT01362790 -NCT01360268 -NCT01362777 -NCT01360450 -NCT01362803 -NCT01360515 -NCT01363024 -NCT01360541 -NCT01363128 -NCT01360554 -NCT01363193 -NCT01360593 -NCT01363206 -NCT01360606 -NCT01363232 -NCT01360619 -NCT01363297 -NCT01360684 -NCT01363388 -NCT01360697 -NCT01363466 -NCT01360827 -NCT01363557 -NCT01360840 -NCT01363570 -NCT01360853 -NCT01363596 -NCT01360892 -NCT01363817 -NCT01360905 -NCT01363843 -NCT01360918 -NCT01363947 -NCT01360944 -NCT01363986 -NCT01360957 -NCT01364012 -NCT01360970 -NCT01364051 -NCT01360996 -NCT01364064 -NCT01361035 -NCT01364077 -NCT01361087 -NCT01364090 -NCT01361100 -NCT01364324 -NCT01361113 -NCT01364337 -NCT01361139 -NCT01364363 -NCT01361178 -NCT01364376 -NCT01361191 -NCT01364389 -NCT01361334 -NCT01364415 -NCT01361464 -NCT01364454 -NCT01361529 -NCT01364493 -NCT01361581 -NCT01364636 -NCT01361607 -NCT01364727 -NCT01361711 -NCT01364805 -NCT01361724 -NCT01364844 -NCT01361750 -NCT01364909 -NCT01361880 -NCT01365130 -NCT01361932 -NCT01365143 -NCT01361945 -NCT01365156 -NCT01362010 -NCT01365169 -NCT01362101 -NCT01365260 -NCT01362127 -NCT01365351 -NCT01362140 -NCT01365442 -NCT01362296 -NCT01365559 -NCT01362348 -NCT01365585 -NCT01362361 -NCT01365611 -NCT01362374 -NCT01365715 -NCT01362400 -NCT01365845 -NCT01362413 -NCT01365910 -NCT01362452 -NCT01366014 -NCT01362530 -NCT01366027 -NCT01362569 -NCT01366118 -NCT01362582 -NCT01366131 -NCT01362608 -NCT01366144 -NCT01362660 -NCT01366612 -NCT01362712 -NCT01372904 -NCT01366833 -NCT01370239 -NCT01366898 -NCT01370213 -NCT01367002 -NCT01370278 -NCT01367015 -NCT01370369 -NCT01367028 -NCT01370434 -NCT01367106 -NCT01370512 -NCT01367275 -NCT01370525 -NCT01367288 -NCT01370538 -NCT01367301 -NCT01370642 -NCT01367353 -NCT01370694 -NCT01367366 -NCT01370772 -NCT01367418 -NCT01370876 -NCT01367626 -NCT01370928 -NCT01367639 -NCT01370954 -NCT01367652 -NCT01371071 -NCT01367665 -NCT01371149 -NCT01367782 -NCT01371201 -NCT01367834 -NCT01371227 -NCT01367886 -NCT01371240 -NCT01367990 -NCT01371305 -NCT01368003 -NCT01371487 -NCT01368055 -NCT01371513 -NCT01368094 -NCT01371526 -NCT01368107 -NCT01371552 -NCT01368133 -NCT01371565 -NCT01368263 -NCT01371591 -NCT01368276 -NCT01371630 -NCT01368341 -NCT01371643 -NCT01368380 -NCT01371656 -NCT01368419 -NCT01371773 -NCT01368523 -NCT01371825 -NCT01368575 -NCT01371838 -NCT01368588 -NCT01371877 -NCT01368601 -NCT01371981 -NCT01368614 -NCT01372007 -NCT01368731 -NCT01372111 -NCT01368757 -NCT01372202 -NCT01368835 -NCT01372241 -NCT01368848 -NCT01372319 -NCT01369121 -NCT01372332 -NCT01369303 -NCT01372384 -NCT01369368 -NCT01372423 -NCT01369407 -NCT01372436 -NCT01369420 -NCT01372475 -NCT01369433 -NCT01372527 -NCT01369576 -NCT01372540 -NCT01369641 -NCT01372566 -NCT01369849 -NCT01372579 -NCT01369875 -NCT01372618 -NCT01369888 -NCT01372631 -NCT01369966 -NCT01372644 -NCT01370057 -NCT01372696 -NCT01370070 -NCT01372735 -NCT01370083 -NCT01372774 -NCT01370096 -NCT01372813 -NCT01370161 -NCT01378481 -NCT01372943 -NCT01375816 -NCT01373021 -NCT01375803 -NCT01373034 -NCT01375829 -NCT01373047 -NCT01375842 -NCT01373125 -NCT01375920 -NCT01373164 -NCT01375959 -NCT01373229 -NCT01375972 -NCT01373294 -NCT01376024 -NCT01373320 -NCT01376076 -NCT01373346 -NCT01376115 -NCT01373372 -NCT01376193 -NCT01373398 -NCT01376232 -NCT01373411 -NCT01376310 -NCT01373450 -NCT01376349 -NCT01373463 -NCT01376401 -NCT01373515 -NCT01376414 -NCT01373528 -NCT01376427 -NCT01373580 -NCT01376453 -NCT01373671 -NCT01376466 -NCT01373710 -NCT01376505 -NCT01373723 -NCT01376700 -NCT01373736 -NCT01376713 -NCT01373970 -NCT01376752 -NCT01374087 -NCT01376817 -NCT01374100 -NCT01376830 -NCT01374139 -NCT01376856 -NCT01374152 -NCT01376934 -NCT01374165 -NCT01376960 -NCT01374191 -NCT01377025 -NCT01374204 -NCT01377103 -NCT01374217 -NCT01377181 -NCT01374269 -NCT01377194 -NCT01374334 -NCT01377220 -NCT01374412 -NCT01377298 -NCT01374425 -NCT01377324 -NCT01374451 -NCT01377350 -NCT01374477 -NCT01377376 -NCT01374620 -NCT01377389 -NCT01374659 -NCT01377415 -NCT01374750 -NCT01377467 -NCT01374776 -NCT01377584 -NCT01374789 -NCT01377701 -NCT01374841 -NCT01377753 -NCT01374880 -NCT01377766 -NCT01374906 -NCT01378026 -NCT01375023 -NCT01378039 -NCT01375062 -NCT01378091 -NCT01375075 -NCT01378117 -NCT01375114 -NCT01378143 -NCT01375322 -NCT01378169 -NCT01375543 -NCT01378182 -NCT01375569 -NCT01378195 -NCT01375608 -NCT01378299 -NCT01375660 -NCT01378377 -NCT01375699 -NCT01378416 -NCT01375738 -NCT01384708 -NCT01378520 -NCT01381861 -NCT01378533 -NCT01381822 -NCT01378598 -NCT01381874 -NCT01378676 -NCT01381978 -NCT01378819 -NCT01382030 -NCT01378871 -NCT01382095 -NCT01378962 -NCT01382134 -NCT01378975 -NCT01382147 -NCT01379092 -NCT01382212 -NCT01379170 -NCT01382225 -NCT01379183 -NCT01382407 -NCT01379274 -NCT01382420 -NCT01379287 -NCT01382537 -NCT01379339 -NCT01382615 -NCT01379482 -NCT01382641 -NCT01379521 -NCT01382667 -NCT01379534 -NCT01382706 -NCT01379690 -NCT01382745 -NCT01379742 -NCT01382862 -NCT01379807 -NCT01382953 -NCT01379976 -NCT01383044 -NCT01379989 -NCT01383109 -NCT01380015 -NCT01383135 -NCT01380067 -NCT01383148 -NCT01380106 -NCT01383174 -NCT01380119 -NCT01383226 -NCT01380145 -NCT01383343 -NCT01380171 -NCT01383408 -NCT01380184 -NCT01383447 -NCT01380223 -NCT01383460 -NCT01380275 -NCT01383538 -NCT01380301 -NCT01383564 -NCT01380314 -NCT01383668 -NCT01380353 -NCT01383707 -NCT01380600 -NCT01383733 -NCT01380730 -NCT01383759 -NCT01380756 -NCT01383772 -NCT01380769 -NCT01383902 -NCT01380782 -NCT01383928 -NCT01380795 -NCT01383941 -NCT01380808 -NCT01383954 -NCT01380899 -NCT01384201 -NCT01380964 -NCT01384227 -NCT01381094 -NCT01384253 -NCT01381211 -NCT01384266 -NCT01381263 -NCT01384331 -NCT01381315 -NCT01384357 -NCT01381341 -NCT01384370 -NCT01381354 -NCT01384396 -NCT01381510 -NCT01384409 -NCT01381549 -NCT01384513 -NCT01381627 -NCT01384565 -NCT01381692 -NCT01384617 -NCT01381718 -NCT01384669 -NCT01381757 -NCT01384695 -NCT01381809 -NCT01390207 -NCT01384721 -NCT01387061 -NCT01384799 -NCT01386996 -NCT01384851 -NCT01387204 -NCT01384864 -NCT01387230 -NCT01384877 -NCT01387256 -NCT01384890 -NCT01387269 -NCT01384994 -NCT01387282 -NCT01385007 -NCT01387295 -NCT01385020 -NCT01387321 -NCT01385059 -NCT01387373 -NCT01385072 -NCT01387399 -NCT01385098 -NCT01387425 -NCT01385111 -NCT01387503 -NCT01385137 -NCT01387555 -NCT01385150 -NCT01387711 -NCT01385176 -NCT01387750 -NCT01385215 -NCT01387763 -NCT01385228 -NCT01387841 -NCT01385280 -NCT01387880 -NCT01385293 -NCT01387906 -NCT01385319 -NCT01387919 -NCT01385410 -NCT01387932 -NCT01385423 -NCT01387971 -NCT01385436 -NCT01387997 -NCT01385501 -NCT01388101 -NCT01385579 -NCT01388192 -NCT01385605 -NCT01388335 -NCT01385683 -NCT01388348 -NCT01385774 -NCT01388413 -NCT01385787 -NCT01388595 -NCT01385826 -NCT01388621 -NCT01385852 -NCT01388647 -NCT01385891 -NCT01388660 -NCT01385917 -NCT01388712 -NCT01385930 -NCT01388764 -NCT01385956 -NCT01388777 -NCT01386242 -NCT01388790 -NCT01386346 -NCT01388933 -NCT01386372 -NCT01388959 -NCT01386385 -NCT01388985 -NCT01386398 -NCT01389050 -NCT01386411 -NCT01389076 -NCT01386437 -NCT01389349 -NCT01386502 -NCT01389414 -NCT01386515 -NCT01389427 -NCT01386567 -NCT01389440 -NCT01386580 -NCT01389583 -NCT01386606 -NCT01389726 -NCT01386619 -NCT01389739 -NCT01386632 -NCT01389765 -NCT01386710 -NCT01389869 -NCT01386853 -NCT01389999 -NCT01386866 -NCT01390012 -NCT01386905 -NCT01390064 -NCT01386957 -NCT01390181 -NCT01386983 -NCT01395407 -NCT01390311 -NCT01392963 -NCT01390324 -NCT01392924 -NCT01390337 -NCT01392976 -NCT01390402 -NCT01392989 -NCT01390454 -NCT01393080 -NCT01390532 -NCT01393093 -NCT01390571 -NCT01393106 -NCT01390584 -NCT01393119 -NCT01390818 -NCT01393184 -NCT01390935 -NCT01393197 -NCT01390948 -NCT01393366 -NCT01391039 -NCT01393509 -NCT01391052 -NCT01393717 -NCT01391065 -NCT01393730 -NCT01391078 -NCT01393743 -NCT01391091 -NCT01393756 -NCT01391117 -NCT01393769 -NCT01391130 -NCT01393808 -NCT01391143 -NCT01393821 -NCT01391182 -NCT01393847 -NCT01391208 -NCT01393886 -NCT01391234 -NCT01393912 -NCT01391260 -NCT01393964 -NCT01391325 -NCT01393990 -NCT01391351 -NCT01394003 -NCT01391455 -NCT01394016 -NCT01391533 -NCT01394042 -NCT01391572 -NCT01394120 -NCT01391611 -NCT01394133 -NCT01391689 -NCT01394146 -NCT01391702 -NCT01394159 -NCT01391715 -NCT01394172 -NCT01391767 -NCT01394211 -NCT01391806 -NCT01394263 -NCT01391962 -NCT01394354 -NCT01392027 -NCT01394393 -NCT01392053 -NCT01394471 -NCT01392079 -NCT01394497 -NCT01392131 -NCT01394510 -NCT01392170 -NCT01394536 -NCT01392183 -NCT01394575 -NCT01392209 -NCT01394614 -NCT01392235 -NCT01394679 -NCT01392339 -NCT01394692 -NCT01392352 -NCT01394926 -NCT01392365 -NCT01394939 -NCT01392456 -NCT01394965 -NCT01392521 -NCT01394978 -NCT01392586 -NCT01394991 -NCT01392612 -NCT01395004 -NCT01392716 -NCT01395017 -NCT01392768 -NCT01395030 -NCT01392859 -NCT01395121 -NCT01392885 -NCT01395134 -NCT01392898 -NCT01395251 -NCT01392911 -NCT01401660 -NCT01395459 -NCT01398371 -NCT01395537 -NCT01398124 -NCT01395550 -NCT01398423 -NCT01395563 -NCT01398449 -NCT01395628 -NCT01398462 -NCT01395667 -NCT01398501 -NCT01395706 -NCT01398579 -NCT01395758 -NCT01398618 -NCT01395914 -NCT01398644 -NCT01396005 -NCT01398657 -NCT01396070 -NCT01399008 -NCT01396148 -NCT01399216 -NCT01396161 -NCT01399372 -NCT01396174 -NCT01399658 -NCT01396200 -NCT01399684 -NCT01396226 -NCT01399788 -NCT01396252 -NCT01399814 -NCT01396317 -NCT01399840 -NCT01396369 -NCT01399892 -NCT01396382 -NCT01399905 -NCT01396499 -NCT01399918 -NCT01396525 -NCT01399983 -NCT01396551 -NCT01400074 -NCT01396642 -NCT01400113 -NCT01396655 -NCT01400334 -NCT01396668 -NCT01400438 -NCT01396681 -NCT01400451 -NCT01396707 -NCT01400464 -NCT01396733 -NCT01400477 -NCT01396785 -NCT01400542 -NCT01396811 -NCT01400555 -NCT01396954 -NCT01400646 -NCT01397019 -NCT01400672 -NCT01397045 -NCT01400685 -NCT01397084 -NCT01400698 -NCT01397149 -NCT01400828 -NCT01397162 -NCT01400893 -NCT01397201 -NCT01400906 -NCT01397253 -NCT01400945 -NCT01397305 -NCT01400958 -NCT01397409 -NCT01401010 -NCT01397552 -NCT01401023 -NCT01397565 -NCT01401062 -NCT01397591 -NCT01401075 -NCT01397604 -NCT01401166 -NCT01397643 -NCT01401192 -NCT01397695 -NCT01401257 -NCT01397708 -NCT01401322 -NCT01397721 -NCT01401387 -NCT01397734 -NCT01401413 -NCT01397799 -NCT01401439 -NCT01397825 -NCT01401504 -NCT01397877 -NCT01401530 -NCT01397916 -NCT01401582 -NCT01397929 -NCT01401647 -NCT01398085 -NCT01418118 -NCT01401699 -NCT01416480 -NCT01401829 -NCT01416493 -NCT01401868 -NCT01416558 -NCT01401907 -NCT01416571 -NCT01401933 -NCT01416597 -NCT01401946 -NCT01416623 -NCT01401959 -NCT01416662 -NCT01402011 -NCT01416831 -NCT01402063 -NCT01416844 -NCT01402089 -NCT01416922 -NCT01402115 -NCT01416961 -NCT01402180 -NCT01416974 -NCT01402193 -NCT01417000 -NCT01402219 -NCT01417065 -NCT01402271 -NCT01417130 -NCT01402284 -NCT01417143 -NCT01402401 -NCT01417182 -NCT01402440 -NCT01417208 -NCT01402453 -NCT01417286 -NCT01402531 -NCT01417377 -NCT01402570 -NCT01417390 -NCT01402583 -NCT01417403 -NCT01402648 -NCT01417442 -NCT01402752 -NCT01417494 -NCT01402804 -NCT01417520 -NCT01402817 -NCT01417533 -NCT01402843 -NCT01417546 -NCT01402895 -NCT01417598 -NCT01402908 -NCT01417611 -NCT01402934 -NCT01417676 -NCT01403103 -NCT01417767 -NCT01403116 -NCT01417806 -NCT01403168 -NCT01417923 -NCT01403181 -NCT01417936 -NCT01403246 -NCT01417975 -NCT01403259 -NCT01418001 -NCT01403285 -NCT01414608 -NCT01414673 -NCT01414686 -NCT01414738 -NCT01414790 -NCT01414803 -NCT01414855 -NCT01414868 -NCT01415011 -NCT01415050 -NCT01415063 -NCT01415089 -NCT01415115 -NCT01415193 -NCT01415297 -NCT01415336 -NCT01415375 -NCT01415427 -NCT01415479 -NCT01415648 -NCT01415674 -NCT01415700 -NCT01415713 -NCT01415752 -NCT01415765 -NCT01415817 -NCT01415830 -NCT01415856 -NCT01415869 -NCT01415882 -NCT01415908 -NCT01415921 -NCT01415947 -NCT01415960 -NCT01415986 -NCT01416038 -NCT01416077 -NCT01416168 -NCT01416181 -NCT01416246 -NCT01416337 -NCT01416389 -NCT01416428 -NCT01418079 -NCT01403311 -NCT01406210 -NCT01403324 -NCT01406119 -NCT01403402 -NCT01406249 -NCT01403415 -NCT01406275 -NCT01403532 -NCT01406288 -NCT01403571 -NCT01406314 -NCT01403610 -NCT01406353 -NCT01403636 -NCT01406509 -NCT01403675 -NCT01406548 -NCT01403740 -NCT01406574 -NCT01403779 -NCT01406613 -NCT01403870 -NCT01406639 -NCT01403883 -NCT01406769 -NCT01403896 -NCT01406951 -NCT01403948 -NCT01406990 -NCT01403974 -NCT01407107 -NCT01404091 -NCT01407120 -NCT01404104 -NCT01407198 -NCT01404156 -NCT01407263 -NCT01404247 -NCT01407341 -NCT01404260 -NCT01407432 -NCT01404312 -NCT01407562 -NCT01404377 -NCT01407692 -NCT01404390 -NCT01407757 -NCT01404520 -NCT01407796 -NCT01404533 -NCT01407822 -NCT01404611 -NCT01407848 -NCT01404650 -NCT01407978 -NCT01404702 -NCT01408004 -NCT01404741 -NCT01408030 -NCT01404754 -NCT01408043 -NCT01404832 -NCT01408108 -NCT01404884 -NCT01408121 -NCT01404897 -NCT01408160 -NCT01404936 -NCT01408212 -NCT01404949 -NCT01408407 -NCT01405079 -NCT01408472 -NCT01405144 -NCT01408498 -NCT01405222 -NCT01408563 -NCT01405235 -NCT01408615 -NCT01405313 -NCT01408706 -NCT01405391 -NCT01408732 -NCT01405417 -NCT01408784 -NCT01405430 -NCT01408836 -NCT01405469 -NCT01408966 -NCT01405560 -NCT01408992 -NCT01405573 -NCT01409005 -NCT01405586 -NCT01409018 -NCT01405638 -NCT01409031 -NCT01405768 -NCT01409122 -NCT01405781 -NCT01409135 -NCT01405807 -NCT01409148 -NCT01405820 -NCT01409161 -NCT01405846 -NCT01409174 -NCT01405937 -NCT01409187 -NCT01406106 -NCT01414556 -NCT01409200 -NCT01411995 -NCT01409226 -NCT01411904 -NCT01409343 -NCT01412047 -NCT01409356 -NCT01412177 -NCT01409382 -NCT01412229 -NCT01409460 -NCT01412242 -NCT01409473 -NCT01412294 -NCT01409499 -NCT01412307 -NCT01409551 -NCT01412424 -NCT01409720 -NCT01412489 -NCT01409733 -NCT01412515 -NCT01409746 -NCT01412788 -NCT01409811 -NCT01412853 -NCT01409837 -NCT01412879 -NCT01409876 -NCT01412892 -NCT01409902 -NCT01412918 -NCT01409915 -NCT01412957 -NCT01410045 -NCT01413022 -NCT01410097 -NCT01413074 -NCT01410214 -NCT01413087 -NCT01410227 -NCT01413113 -NCT01410344 -NCT01413152 -NCT01410370 -NCT01413178 -NCT01410409 -NCT01413191 -NCT01410513 -NCT01413256 -NCT01410526 -NCT01413269 -NCT01410565 -NCT01413295 -NCT01410578 -NCT01413386 -NCT01410656 -NCT01413438 -NCT01410708 -NCT01413451 -NCT01410734 -NCT01413503 -NCT01410760 -NCT01413555 -NCT01410825 -NCT01413568 -NCT01410916 -NCT01413581 -NCT01410929 -NCT01413607 -NCT01410942 -NCT01413633 -NCT01410955 -NCT01413646 -NCT01410968 -NCT01413698 -NCT01411072 -NCT01413711 -NCT01411098 -NCT01413750 -NCT01411176 -NCT01413763 -NCT01411189 -NCT01413828 -NCT01411202 -NCT01413893 -NCT01411267 -NCT01413906 -NCT01411306 -NCT01414062 -NCT01411319 -NCT01414205 -NCT01411332 -NCT01414231 -NCT01411345 -NCT01414244 -NCT01411358 -NCT01414257 -NCT01411410 -NCT01414283 -NCT01411527 -NCT01414296 -NCT01411657 -NCT01414322 -NCT01411722 -NCT01414387 -NCT01411787 -NCT01414426 -NCT01411826 -NCT01414530 -NCT01411878 -NCT01439633 -NCT01418131 -NCT01438476 -NCT01418157 -NCT01438554 -NCT01418222 -NCT01438567 -NCT01418235 -NCT01438593 -NCT01418287 -NCT01438645 -NCT01418391 -NCT01438710 -NCT01418430 -NCT01438762 -NCT01418534 -NCT01438853 -NCT01418547 -NCT01439100 -NCT01418677 -NCT01439191 -NCT01418729 -NCT01439256 -NCT01418742 -NCT01439269 -NCT01418924 -NCT01439282 -NCT01419002 -NCT01439347 -NCT01419015 -NCT01439360 -NCT01419028 -NCT01439490 -NCT01419067 -NCT01439516 -NCT01419119 -NCT01439542 -NCT01419145 -NCT01439568 -NCT01419184 -NCT01439581 -NCT01419197 -NCT01434524 -NCT01434550 -NCT01434602 -NCT01434758 -NCT01434810 -NCT01434849 -NCT01434862 -NCT01434992 -NCT01435005 -NCT01435070 -NCT01435122 -NCT01435200 -NCT01435252 -NCT01435343 -NCT01435356 -NCT01435369 -NCT01435395 -NCT01435499 -NCT01435551 -NCT01435590 -NCT01435603 -NCT01435616 -NCT01435629 -NCT01435720 -NCT01435733 -NCT01435863 -NCT01435902 -NCT01435941 -NCT01435954 -NCT01436071 -NCT01436084 -NCT01436110 -NCT01436214 -NCT01436227 -NCT01436253 -NCT01436266 -NCT01436318 -NCT01436370 -NCT01436565 -NCT01436604 -NCT01436656 -NCT01436669 -NCT01436721 -NCT01436747 -NCT01436877 -NCT01436890 -NCT01436955 -NCT01436968 -NCT01436994 -NCT01437007 -NCT01437098 -NCT01437254 -NCT01437280 -NCT01437345 -NCT01437410 -NCT01437436 -NCT01437449 -NCT01437488 -NCT01437514 -NCT01437566 -NCT01437605 -NCT01437618 -NCT01437631 -NCT01437709 -NCT01437735 -NCT01437787 -NCT01437865 -NCT01437956 -NCT01437969 -NCT01438021 -NCT01438034 -NCT01438073 -NCT01438112 -NCT01438177 -NCT01438203 -NCT01438307 -NCT01438398 -NCT01438437 -NCT01438450 -NCT01439594 -NCT01419210 -NCT01421680 -NCT01419236 -NCT01421667 -NCT01419249 -NCT01421693 -NCT01419483 -NCT01421758 -NCT01419496 -NCT01421784 -NCT01419535 -NCT01421797 -NCT01419548 -NCT01421810 -NCT01419561 -NCT01421836 -NCT01419574 -NCT01421862 -NCT01419587 -NCT01421875 -NCT01419613 -NCT01421888 -NCT01419639 -NCT01421927 -NCT01419665 -NCT01421940 -NCT01419691 -NCT01421953 -NCT01419704 -NCT01422057 -NCT01419717 -NCT01422226 -NCT01419795 -NCT01422239 -NCT01419821 -NCT01422408 -NCT01419834 -NCT01422499 -NCT01419860 -NCT01422551 -NCT01419886 -NCT01422603 -NCT01419938 -NCT01422616 -NCT01419977 -NCT01422629 -NCT01420003 -NCT01422668 -NCT01420055 -NCT01422707 -NCT01420081 -NCT01422746 -NCT01420133 -NCT01422759 -NCT01420146 -NCT01422798 -NCT01420250 -NCT01422850 -NCT01420354 -NCT01422928 -NCT01420367 -NCT01422993 -NCT01420419 -NCT01423006 -NCT01420523 -NCT01423032 -NCT01420679 -NCT01423071 -NCT01420744 -NCT01423123 -NCT01420770 -NCT01423175 -NCT01420783 -NCT01423214 -NCT01420861 -NCT01423266 -NCT01420874 -NCT01423331 -NCT01420887 -NCT01423344 -NCT01420913 -NCT01423396 -NCT01420926 -NCT01423474 -NCT01420939 -NCT01434199 -NCT01420965 -NCT01434251 -NCT01420991 -NCT01434264 -NCT01421004 -NCT01434290 -NCT01421017 -NCT01434303 -NCT01421095 -NCT01434316 -NCT01421160 -NCT01434342 -NCT01421173 -NCT01434355 -NCT01421186 -NCT01434368 -NCT01421316 -NCT01434394 -NCT01421355 -NCT01434420 -NCT01421368 -NCT01434446 -NCT01421472 -NCT01434459 -NCT01421524 -NCT01434472 -NCT01423500 -NCT01426269 -NCT01423539 -NCT01426126 -NCT01423591 -NCT01426334 -NCT01423604 -NCT01426490 -NCT01423695 -NCT01426620 -NCT01423708 -NCT01426633 -NCT01423734 -NCT01426646 -NCT01423747 -NCT01426672 -NCT01423760 -NCT01426724 -NCT01423799 -NCT01426750 -NCT01423890 -NCT01426828 -NCT01423903 -NCT01426841 -NCT01423942 -NCT01426880 -NCT01423994 -NCT01426932 -NCT01424046 -NCT01427010 -NCT01424176 -NCT01427114 -NCT01424241 -NCT01427166 -NCT01424254 -NCT01427179 -NCT01424293 -NCT01427192 -NCT01424306 -NCT01427205 -NCT01424358 -NCT01427244 -NCT01424423 -NCT01427270 -NCT01424475 -NCT01427283 -NCT01424514 -NCT01427322 -NCT01424527 -NCT01432821 -NCT01424566 -NCT01432847 -NCT01424631 -NCT01432860 -NCT01424709 -NCT01432873 -NCT01424748 -NCT01432886 -NCT01424761 -NCT01432938 -NCT01424839 -NCT01432951 -NCT01424904 -NCT01433003 -NCT01424930 -NCT01433016 -NCT01424982 -NCT01433068 -NCT01425008 -NCT01433107 -NCT01425034 -NCT01433172 -NCT01425177 -NCT01433263 -NCT01425268 -NCT01433354 -NCT01425463 -NCT01433562 -NCT01425476 -NCT01433601 -NCT01425528 -NCT01433614 -NCT01425541 -NCT01433731 -NCT01425606 -NCT01433744 -NCT01425619 -NCT01433809 -NCT01425736 -NCT01433848 -NCT01425749 -NCT01433861 -NCT01425775 -NCT01433874 -NCT01425788 -NCT01433913 -NCT01425827 -NCT01433965 -NCT01425879 -NCT01433991 -NCT01425892 -NCT01434004 -NCT01425957 -NCT01434069 -NCT01425970 -NCT01434108 -NCT01425996 -NCT01434121 -NCT01426074 -NCT01434134 -NCT01426087 -NCT01434147 -NCT01427400 -NCT01430013 -NCT01427478 -NCT01430000 -NCT01427491 -NCT01430052 -NCT01427556 -NCT01430091 -NCT01427595 -NCT01430286 -NCT01427608 -NCT01430351 -NCT01427647 -NCT01430390 -NCT01427673 -NCT01430403 -NCT01427842 -NCT01430416 -NCT01427855 -NCT01430442 -NCT01427881 -NCT01430520 -NCT01427894 -NCT01430572 -NCT01427933 -NCT01430585 -NCT01427946 -NCT01430689 -NCT01428089 -NCT01430754 -NCT01428128 -NCT01430793 -NCT01428141 -NCT01430845 -NCT01428167 -NCT01430897 -NCT01428193 -NCT01430988 -NCT01428219 -NCT01431053 -NCT01428245 -NCT01431196 -NCT01428336 -NCT01431209 -NCT01428414 -NCT01431222 -NCT01428440 -NCT01431313 -NCT01428492 -NCT01431326 -NCT01428531 -NCT01431365 -NCT01428544 -NCT01431391 -NCT01428583 -NCT01431534 -NCT01428635 -NCT01431547 -NCT01428648 -NCT01431586 -NCT01428713 -NCT01431599 -NCT01428726 -NCT01431638 -NCT01428739 -NCT01431651 -NCT01428895 -NCT01431664 -NCT01428908 -NCT01431755 -NCT01429025 -NCT01431794 -NCT01429051 -NCT01431924 -NCT01429064 -NCT01431963 -NCT01429090 -NCT01432015 -NCT01429155 -NCT01432067 -NCT01429168 -NCT01432093 -NCT01429207 -NCT01432119 -NCT01429259 -NCT01432145 -NCT01429298 -NCT01432171 -NCT01429376 -NCT01432223 -NCT01429389 -NCT01432314 -NCT01429402 -NCT01432353 -NCT01429480 -NCT01432392 -NCT01429493 -NCT01432431 -NCT01429597 -NCT01432470 -NCT01429610 -NCT01432600 -NCT01429766 -NCT01432613 -NCT01429844 -NCT01432626 -NCT01429909 -NCT01432769 -NCT01429935 -NCT01432782 -NCT01429961 -NCT01471405 -NCT01439659 -NCT01441648 -NCT01439672 -NCT01441635 -NCT01439711 -NCT01441674 -NCT01439724 -NCT01441687 -NCT01439750 -NCT01441752 -NCT01439815 -NCT01441765 -NCT01439854 -NCT01441882 -NCT01439919 -NCT01441895 -NCT01439945 -NCT01441934 -NCT01439971 -NCT01441947 -NCT01440036 -NCT01441973 -NCT01440088 -NCT01442051 -NCT01440127 -NCT01442090 -NCT01440140 -NCT01442181 -NCT01440179 -NCT01442220 -NCT01440205 -NCT01442233 -NCT01440244 -NCT01442246 -NCT01440270 -NCT01442259 -NCT01440283 -NCT01442285 -NCT01440361 -NCT01442324 -NCT01440413 -NCT01442350 -NCT01440439 -NCT01442441 -NCT01440491 -NCT01442454 -NCT01440517 -NCT01442519 -NCT01440582 -NCT01442623 -NCT01440621 -NCT01442649 -NCT01440764 -NCT01442662 -NCT01440777 -NCT01442701 -NCT01440816 -NCT01442714 -NCT01440855 -NCT01442727 -NCT01440920 -NCT01442779 -NCT01440959 -NCT01442870 -NCT01440998 -NCT01442909 -NCT01441011 -NCT01442935 -NCT01441024 -NCT01442974 -NCT01441037 -NCT01443026 -NCT01441089 -NCT01443065 -NCT01441102 -NCT01443078 -NCT01441115 -NCT01443260 -NCT01441128 -NCT01443377 -NCT01441141 -NCT01443481 -NCT01441154 -NCT01443494 -NCT01441284 -NCT01443624 -NCT01441297 -NCT01443676 -NCT01441310 -NCT01443832 -NCT01441323 -NCT01443845 -NCT01441336 -NCT01443923 -NCT01441349 -NCT01443936 -NCT01441375 -NCT01471132 -NCT01441388 -NCT01471184 -NCT01441414 -NCT01471197 -NCT01441453 -NCT01471210 -NCT01441466 -NCT01471288 -NCT01441479 -NCT01471314 -NCT01441492 -NCT01471353 -NCT01441596 -NCT01471379 -NCT01444001 -NCT01446666 -NCT01444014 -NCT01446562 -NCT01444066 -NCT01446731 -NCT01444118 -NCT01446744 -NCT01444157 -NCT01446809 -NCT01444209 -NCT01446822 -NCT01444365 -NCT01446848 -NCT01444404 -NCT01446874 -NCT01444495 -NCT01446887 -NCT01444521 -NCT01458457 -NCT01444534 -NCT01458613 -NCT01444547 -NCT01458704 -NCT01444625 -NCT01458717 -NCT01444716 -NCT01458730 -NCT01444742 -NCT01458808 -NCT01444768 -NCT01458847 -NCT01444807 -NCT01458860 -NCT01444820 -NCT01458886 -NCT01444846 -NCT01458925 -NCT01444924 -NCT01459003 -NCT01444989 -NCT01459016 -NCT01445041 -NCT01459081 -NCT01445054 -NCT01459172 -NCT01445080 -NCT01459185 -NCT01445106 -NCT01469715 -NCT01445119 -NCT01469793 -NCT01445132 -NCT01469819 -NCT01445171 -NCT01469832 -NCT01445301 -NCT01469975 -NCT01445340 -NCT01470040 -NCT01445379 -NCT01470131 -NCT01445392 -NCT01470196 -NCT01445405 -NCT01470209 -NCT01445418 -NCT01470248 -NCT01445509 -NCT01470365 -NCT01445522 -NCT01470417 -NCT01445535 -NCT01470443 -NCT01445587 -NCT01470456 -NCT01445613 -NCT01470495 -NCT01445691 -NCT01470534 -NCT01445821 -NCT01470586 -NCT01445977 -NCT01470638 -NCT01446016 -NCT01470677 -NCT01446042 -NCT01470729 -NCT01446081 -NCT01470742 -NCT01446133 -NCT01470794 -NCT01446159 -NCT01470807 -NCT01446185 -NCT01470820 -NCT01446211 -NCT01470885 -NCT01446237 -NCT01470937 -NCT01446276 -NCT01470989 -NCT01446315 -NCT01471002 -NCT01446393 -NCT01471054 -NCT01446458 -NCT01471067 -NCT01446471 -NCT01471106 -NCT01446549 -NCT01471119 -NCT01446900 -NCT01449539 -NCT01446939 -NCT01449513 -NCT01446952 -NCT01449591 -NCT01446991 -NCT01449604 -NCT01447056 -NCT01449864 -NCT01447069 -NCT01449916 -NCT01447199 -NCT01449942 -NCT01447225 -NCT01449994 -NCT01447329 -NCT01450020 -NCT01447355 -NCT01450046 -NCT01447381 -NCT01450137 -NCT01447589 -NCT01450150 -NCT01447667 -NCT01450202 -NCT01447693 -NCT01450215 -NCT01447706 -NCT01450319 -NCT01447732 -NCT01450384 -NCT01447745 -NCT01450449 -NCT01447771 -NCT01450501 -NCT01447810 -NCT01450566 -NCT01447823 -NCT01450683 -NCT01447888 -NCT01450696 -NCT01447914 -NCT01450748 -NCT01447927 -NCT01450761 -NCT01447979 -NCT01450826 -NCT01447992 -NCT01450930 -NCT01448005 -NCT01451008 -NCT01448044 -NCT01451034 -NCT01448096 -NCT01451086 -NCT01448161 -NCT01451268 -NCT01448395 -NCT01451281 -NCT01448434 -NCT01451359 -NCT01448447 -NCT01451372 -NCT01448473 -NCT01457118 -NCT01448733 -NCT01457131 -NCT01448759 -NCT01457144 -NCT01448772 -NCT01457196 -NCT01448798 -NCT01457313 -NCT01448850 -NCT01457417 -NCT01448980 -NCT01457443 -NCT01449019 -NCT01457469 -NCT01449058 -NCT01457573 -NCT01449084 -NCT01457625 -NCT01449110 -NCT01457703 -NCT01449149 -NCT01457846 -NCT01449162 -NCT01457885 -NCT01449201 -NCT01457924 -NCT01449253 -NCT01457950 -NCT01449266 -NCT01458002 -NCT01449279 -NCT01458067 -NCT01449292 -NCT01458106 -NCT01449305 -NCT01458249 -NCT01449344 -NCT01458288 -NCT01449357 -NCT01458301 -NCT01449370 -NCT01458366 -NCT01449409 -NCT01458392 -NCT01449461 -NCT01458418 -NCT01451411 -NCT01454661 -NCT01451437 -NCT01454635 -NCT01451515 -NCT01454739 -NCT01451580 -NCT01454804 -NCT01451593 -NCT01454934 -NCT01451619 -NCT01455025 -NCT01451632 -NCT01455051 -NCT01451658 -NCT01455077 -NCT01451749 -NCT01455090 -NCT01451853 -NCT01455103 -NCT01452061 -NCT01455259 -NCT01452165 -NCT01455272 -NCT01452334 -NCT01455298 -NCT01452399 -NCT01455363 -NCT01452477 -NCT01455376 -NCT01452490 -NCT01455389 -NCT01452516 -NCT01455402 -NCT01452607 -NCT01455454 -NCT01452646 -NCT01455493 -NCT01452659 -NCT01455506 -NCT01452672 -NCT01455532 -NCT01452815 -NCT01455571 -NCT01452893 -NCT01455753 -NCT01452932 -NCT01455792 -NCT01452945 -NCT01455805 -NCT01452997 -NCT01455831 -NCT01453062 -NCT01455935 -NCT01453075 -NCT01456039 -NCT01453088 -NCT01456065 -NCT01453101 -NCT01456078 -NCT01453114 -NCT01456104 -NCT01453153 -NCT01456143 -NCT01453179 -NCT01456156 -NCT01453205 -NCT01456182 -NCT01453244 -NCT01456325 -NCT01453283 -NCT01456351 -NCT01453335 -NCT01456377 -NCT01453361 -NCT01456416 -NCT01453387 -NCT01456429 -NCT01453452 -NCT01456481 -NCT01453504 -NCT01456585 -NCT01453595 -NCT01456598 -NCT01453738 -NCT01456637 -NCT01453777 -NCT01456650 -NCT01453894 -NCT01456676 -NCT01453985 -NCT01456689 -NCT01454076 -NCT01456741 -NCT01454089 -NCT01456845 -NCT01454102 -NCT01456858 -NCT01454180 -NCT01456923 -NCT01454284 -NCT01456975 -NCT01454349 -NCT01457014 -NCT01454375 -NCT01457040 -NCT01454479 -NCT01457053 -NCT01454505 -NCT01457092 -NCT01454596 -NCT01469702 -NCT01459211 -NCT01468441 -NCT01459237 -NCT01468467 -NCT01459328 -NCT01468493 -NCT01459380 -NCT01468532 -NCT01459393 -NCT01468623 -NCT01459484 -NCT01468636 -NCT01459497 -NCT01468649 -NCT01459614 -NCT01468675 -NCT01459627 -NCT01468740 -NCT01459640 -NCT01468766 -NCT01459770 -NCT01468779 -NCT01459783 -NCT01468818 -NCT01459887 -NCT01468831 -NCT01459913 -NCT01468844 -NCT01459965 -NCT01468883 -NCT01460017 -NCT01468896 -NCT01460030 -NCT01468909 -NCT01460043 -NCT01468922 -NCT01460082 -NCT01468948 -NCT01460108 -NCT01468987 -NCT01460121 -NCT01469000 -NCT01460134 -NCT01469026 -NCT01460160 -NCT01469052 -NCT01460186 -NCT01469117 -NCT01460199 -NCT01469130 -NCT01460368 -NCT01469221 -NCT01460420 -NCT01469247 -NCT01460472 -NCT01469338 -NCT01460498 -NCT01469364 -NCT01460537 -NCT01469429 -NCT01460589 -NCT01469455 -NCT01460602 -NCT01469533 -NCT01460693 -NCT01469546 -NCT01460706 -NCT01469572 -NCT01460758 -NCT01469598 -NCT01460797 -NCT01469611 -NCT01460810 -NCT01469663 -NCT01460875 -NCT01469676 -NCT01460888 -NCT01466036 -NCT01466114 -NCT01466153 -NCT01466179 -NCT01466231 -NCT01466257 -NCT01466270 -NCT01466348 -NCT01466504 -NCT01466569 -NCT01466647 -NCT01466660 -NCT01466686 -NCT01466712 -NCT01466777 -NCT01466855 -NCT01466868 -NCT01466881 -NCT01466972 -NCT01467037 -NCT01467102 -NCT01467115 -NCT01467219 -NCT01467297 -NCT01467310 -NCT01467479 -NCT01467505 -NCT01467635 -NCT01467700 -NCT01467869 -NCT01467882 -NCT01467921 -NCT01467986 -NCT01468025 -NCT01468038 -NCT01468220 -NCT01468311 -NCT01468324 -NCT01468389 -NCT01460901 -NCT01463592 -NCT01460940 -NCT01463540 -NCT01460966 -NCT01463605 -NCT01460979 -NCT01463631 -NCT01461005 -NCT01463644 -NCT01461057 -NCT01463670 -NCT01461148 -NCT01463696 -NCT01461174 -NCT01463709 -NCT01461200 -NCT01463761 -NCT01461252 -NCT01463787 -NCT01461265 -NCT01463813 -NCT01461330 -NCT01463852 -NCT01461369 -NCT01463982 -NCT01461408 -NCT01464021 -NCT01461473 -NCT01464034 -NCT01461525 -NCT01464086 -NCT01461538 -NCT01464112 -NCT01461616 -NCT01464177 -NCT01461746 -NCT01464203 -NCT01461759 -NCT01464359 -NCT01461772 -NCT01464593 -NCT01461850 -NCT01464606 -NCT01461915 -NCT01464762 -NCT01461928 -NCT01464775 -NCT01461954 -NCT01464788 -NCT01462006 -NCT01464879 -NCT01462149 -NCT01464905 -NCT01462175 -NCT01464918 -NCT01462214 -NCT01464944 -NCT01462253 -NCT01464957 -NCT01462292 -NCT01464970 -NCT01462396 -NCT01464983 -NCT01462474 -NCT01465022 -NCT01462513 -NCT01465230 -NCT01462526 -NCT01465243 -NCT01462578 -NCT01465295 -NCT01462630 -NCT01465308 -NCT01462695 -NCT01465334 -NCT01462773 -NCT01465347 -NCT01462838 -NCT01465386 -NCT01462877 -NCT01465399 -NCT01462890 -NCT01465451 -NCT01462903 -NCT01465464 -NCT01462994 -NCT01465516 -NCT01463007 -NCT01465568 -NCT01463046 -NCT01465594 -NCT01463072 -NCT01465633 -NCT01463085 -NCT01465646 -NCT01463098 -NCT01465659 -NCT01463189 -NCT01465672 -NCT01463280 -NCT01465776 -NCT01463358 -NCT01465802 -NCT01463423 -NCT01465815 -NCT01463462 -NCT01465841 -NCT01463488 -NCT01465867 -NCT01463501 -NCT01489241 -NCT01471444 -NCT01486849 -NCT01471470 -NCT01486927 -NCT01471522 -NCT01486979 -NCT01471548 -NCT01486992 -NCT01471600 -NCT01487031 -NCT01471639 -NCT01487174 -NCT01471652 -NCT01487226 -NCT01471678 -NCT01487239 -NCT01471756 -NCT01487252 -NCT01471782 -NCT01487265 -NCT01471847 -NCT01487486 -NCT01471899 -NCT01487499 -NCT01471964 -NCT01487525 -NCT01472003 -NCT01487538 -NCT01472016 -NCT01487590 -NCT01472029 -NCT01487694 -NCT01472055 -NCT01487720 -NCT01472081 -NCT01487785 -NCT01472133 -NCT01487837 -NCT01472146 -NCT01487863 -NCT01472198 -NCT01487902 -NCT01472432 -NCT01487915 -NCT01472445 -NCT01487954 -NCT01472523 -NCT01488045 -NCT01472562 -NCT01488123 -NCT01472653 -NCT01488136 -NCT01472692 -NCT01488175 -NCT01472731 -NCT01488253 -NCT01472770 -NCT01488318 -NCT01472783 -NCT01488344 -NCT01472874 -NCT01488487 -NCT01472887 -NCT01488500 -NCT01472913 -NCT01488513 -NCT01472978 -NCT01488552 -NCT01473004 -NCT01488565 -NCT01473095 -NCT01488591 -NCT01473290 -NCT01488669 -NCT01473303 -NCT01488682 -NCT01473342 -NCT01488773 -NCT01473472 -NCT01488838 -NCT01473485 -NCT01488968 -NCT01473524 -NCT01488981 -NCT01473563 -NCT01489059 -NCT01473628 -NCT01489137 -NCT01473784 -NCT01489215 -NCT01473849 -NCT01485848 -NCT01485861 -NCT01485874 -NCT01485913 -NCT01485926 -NCT01485978 -NCT01486043 -NCT01486134 -NCT01486225 -NCT01486251 -NCT01486277 -NCT01486329 -NCT01486368 -NCT01486381 -NCT01486394 -NCT01486459 -NCT01486550 -NCT01486563 -NCT01486602 -NCT01486667 -NCT01486745 -NCT01486784 -NCT01486797 -NCT01473901 -NCT01484080 -NCT01473940 -NCT01484093 -NCT01473979 -NCT01484106 -NCT01474005 -NCT01484171 -NCT01474187 -NCT01484275 -NCT01474239 -NCT01484314 -NCT01474356 -NCT01484405 -NCT01474369 -NCT01484483 -NCT01474447 -NCT01484574 -NCT01474499 -NCT01484626 -NCT01474551 -NCT01484665 -NCT01474564 -NCT01484678 -NCT01474642 -NCT01484847 -NCT01474681 -NCT01484860 -NCT01474746 -NCT01484873 -NCT01474811 -NCT01484925 -NCT01475006 -NCT01485042 -NCT01475019 -NCT01485055 -NCT01475058 -NCT01485094 -NCT01475214 -NCT01485172 -NCT01475227 -NCT01485198 -NCT01475240 -NCT01485224 -NCT01475266 -NCT01485263 -NCT01475292 -NCT01485276 -NCT01475318 -NCT01485471 -NCT01475344 -NCT01485536 -NCT01475370 -NCT01485627 -NCT01475708 -NCT01485679 -NCT01475890 -NCT01485692 -NCT01475955 -NCT01485731 -NCT01476085 -NCT01485744 -NCT01476137 -NCT01485809 -NCT01476150 -NCT01481909 -NCT01481948 -NCT01482104 -NCT01482130 -NCT01482143 -NCT01482156 -NCT01482208 -NCT01482286 -NCT01482299 -NCT01482312 -NCT01482338 -NCT01482377 -NCT01482442 -NCT01482481 -NCT01482494 -NCT01482520 -NCT01482559 -NCT01482702 -NCT01482715 -NCT01482728 -NCT01482754 -NCT01482767 -NCT01482858 -NCT01482897 -NCT01482949 -NCT01482962 -NCT01483001 -NCT01483014 -NCT01483027 -NCT01483040 -NCT01483118 -NCT01483144 -NCT01483196 -NCT01483274 -NCT01483287 -NCT01483300 -NCT01483365 -NCT01483443 -NCT01483560 -NCT01483573 -NCT01483586 -NCT01483625 -NCT01483638 -NCT01483690 -NCT01483716 -NCT01483742 -NCT01483768 -NCT01483820 -NCT01483911 -NCT01483989 -NCT01484015 -NCT01484041 -NCT01485835 -NCT01476410 -NCT01479179 -NCT01476423 -NCT01479075 -NCT01476501 -NCT01479192 -NCT01476527 -NCT01479244 -NCT01476553 -NCT01479283 -NCT01476592 -NCT01479348 -NCT01476605 -NCT01479426 -NCT01476644 -NCT01479465 -NCT01476683 -NCT01479504 -NCT01476787 -NCT01479569 -NCT01476839 -NCT01479582 -NCT01476878 -NCT01479608 -NCT01476891 -NCT01479686 -NCT01476930 -NCT01479803 -NCT01476956 -NCT01479842 -NCT01476995 -NCT01479855 -NCT01477021 -NCT01479907 -NCT01477060 -NCT01479920 -NCT01477073 -NCT01479946 -NCT01477138 -NCT01480050 -NCT01477177 -NCT01480141 -NCT01477190 -NCT01480154 -NCT01477333 -NCT01480167 -NCT01477346 -NCT01480323 -NCT01477437 -NCT01480349 -NCT01477463 -NCT01480375 -NCT01477476 -NCT01480427 -NCT01477489 -NCT01480479 -NCT01477606 -NCT01480583 -NCT01477749 -NCT01480596 -NCT01477814 -NCT01480674 -NCT01477827 -NCT01480778 -NCT01477866 -NCT01480817 -NCT01478009 -NCT01480843 -NCT01478048 -NCT01480869 -NCT01478074 -NCT01480908 -NCT01478178 -NCT01480973 -NCT01478204 -NCT01481129 -NCT01478308 -NCT01481155 -NCT01478321 -NCT01481168 -NCT01478347 -NCT01481194 -NCT01478373 -NCT01481220 -NCT01478438 -NCT01481233 -NCT01478477 -NCT01481259 -NCT01478542 -NCT01481272 -NCT01478581 -NCT01481324 -NCT01478594 -NCT01481376 -NCT01478620 -NCT01481441 -NCT01478685 -NCT01481532 -NCT01478724 -NCT01481545 -NCT01478802 -NCT01481701 -NCT01478828 -NCT01481779 -NCT01478854 -NCT01481792 -NCT01478932 -NCT01481831 -NCT01479023 -NCT01481870 -NCT01479036 -NCT01512069 -NCT01489254 -NCT01511874 -NCT01489332 -NCT01511939 -NCT01489371 -NCT01511952 -NCT01489397 -NCT01505517 -NCT01505530 -NCT01505569 -NCT01505582 -NCT01505595 -NCT01505608 -NCT01505686 -NCT01505751 -NCT01505764 -NCT01505842 -NCT01505868 -NCT01505946 -NCT01505972 -NCT01506037 -NCT01506050 -NCT01506115 -NCT01506128 -NCT01506336 -NCT01506427 -NCT01506453 -NCT01506466 -NCT01506479 -NCT01506518 -NCT01506557 -NCT01506596 -NCT01506609 -NCT01506661 -NCT01506687 -NCT01506700 -NCT01506791 -NCT01506856 -NCT01506908 -NCT01506934 -NCT01506947 -NCT01506960 -NCT01506973 -NCT01507064 -NCT01507103 -NCT01507168 -NCT01507207 -NCT01507285 -NCT01507428 -NCT01507467 -NCT01507480 -NCT01507506 -NCT01507545 -NCT01507571 -NCT01507610 -NCT01507662 -NCT01507792 -NCT01507974 -NCT01508000 -NCT01508013 -NCT01508104 -NCT01508117 -NCT01508221 -NCT01508260 -NCT01508273 -NCT01508312 -NCT01508390 -NCT01508520 -NCT01508546 -NCT01508572 -NCT01508702 -NCT01508741 -NCT01508767 -NCT01508819 -NCT01508884 -NCT01509014 -NCT01509066 -NCT01509079 -NCT01509183 -NCT01509300 -NCT01509430 -NCT01509482 -NCT01509534 -NCT01509599 -NCT01509612 -NCT01509781 -NCT01509911 -NCT01509924 -NCT01509963 -NCT01510002 -NCT01510041 -NCT01510119 -NCT01510158 -NCT01510184 -NCT01510236 -NCT01510288 -NCT01510392 -NCT01510418 -NCT01510457 -NCT01510561 -NCT01510730 -NCT01510743 -NCT01510756 -NCT01510769 -NCT01510847 -NCT01510912 -NCT01510964 -NCT01510990 -NCT01511042 -NCT01511055 -NCT01511081 -NCT01511146 -NCT01511211 -NCT01511276 -NCT01511289 -NCT01511302 -NCT01511328 -NCT01511419 -NCT01511458 -NCT01511536 -NCT01511562 -NCT01511575 -NCT01511588 -NCT01511601 -NCT01512056 -NCT01489410 -NCT01499628 -NCT01489436 -NCT01499667 -NCT01489527 -NCT01499784 -NCT01489566 -NCT01499823 -NCT01489592 -NCT01499888 -NCT01489722 -NCT01505426 -NCT01489787 -NCT01494714 -NCT01494883 -NCT01495000 -NCT01495026 -NCT01495065 -NCT01495130 -NCT01495247 -NCT01495325 -NCT01495351 -NCT01495455 -NCT01495572 -NCT01495585 -NCT01495598 -NCT01495650 -NCT01495663 -NCT01495676 -NCT01495806 -NCT01495884 -NCT01495897 -NCT01495923 -NCT01495988 -NCT01496001 -NCT01496066 -NCT01496079 -NCT01496118 -NCT01496131 -NCT01496157 -NCT01496248 -NCT01496313 -NCT01496326 -NCT01496404 -NCT01496482 -NCT01496495 -NCT01496521 -NCT01496534 -NCT01496547 -NCT01496599 -NCT01496612 -NCT01496651 -NCT01496742 -NCT01496807 -NCT01496872 -NCT01496885 -NCT01496963 -NCT01496976 -NCT01497002 -NCT01497015 -NCT01497041 -NCT01497093 -NCT01497145 -NCT01497158 -NCT01497184 -NCT01497197 -NCT01497262 -NCT01497275 -NCT01497392 -NCT01497431 -NCT01497444 -NCT01497457 -NCT01497470 -NCT01497496 -NCT01497548 -NCT01497626 -NCT01497665 -NCT01497691 -NCT01497704 -NCT01497808 -NCT01497821 -NCT01497860 -NCT01497873 -NCT01497925 -NCT01497964 -NCT01497977 -NCT01498016 -NCT01498068 -NCT01498081 -NCT01498172 -NCT01498211 -NCT01498237 -NCT01498289 -NCT01498328 -NCT01498406 -NCT01498419 -NCT01498432 -NCT01498445 -NCT01498458 -NCT01498471 -NCT01498484 -NCT01498536 -NCT01498562 -NCT01498588 -NCT01498653 -NCT01498666 -NCT01498679 -NCT01498705 -NCT01498783 -NCT01498835 -NCT01498952 -NCT01498978 -NCT01499043 -NCT01499056 -NCT01499121 -NCT01499134 -NCT01499147 -NCT01499160 -NCT01499212 -NCT01499251 -NCT01499303 -NCT01499446 -NCT01499485 -NCT01499576 -NCT01489800 -NCT01492413 -NCT01489813 -NCT01492387 -NCT01489839 -NCT01492517 -NCT01489865 -NCT01492543 -NCT01489969 -NCT01492556 -NCT01490047 -NCT01492569 -NCT01490060 -NCT01492582 -NCT01490164 -NCT01492673 -NCT01490190 -NCT01492790 -NCT01490203 -NCT01492855 -NCT01490320 -NCT01492881 -NCT01490437 -NCT01492907 -NCT01490476 -NCT01492920 -NCT01490502 -NCT01492972 -NCT01490723 -NCT01493011 -NCT01490749 -NCT01493050 -NCT01490775 -NCT01493089 -NCT01490866 -NCT01493128 -NCT01490892 -NCT01493154 -NCT01490905 -NCT01493206 -NCT01490983 -NCT01493284 -NCT01490996 -NCT01493310 -NCT01491048 -NCT01493336 -NCT01491100 -NCT01493349 -NCT01491139 -NCT01493453 -NCT01491165 -NCT01493479 -NCT01491204 -NCT01493505 -NCT01491217 -NCT01493531 -NCT01491360 -NCT01493635 -NCT01491490 -NCT01493687 -NCT01491516 -NCT01493713 -NCT01491542 -NCT01493791 -NCT01491555 -NCT01493843 -NCT01491568 -NCT01493921 -NCT01491594 -NCT01494012 -NCT01491633 -NCT01494025 -NCT01491672 -NCT01494103 -NCT01491698 -NCT01494155 -NCT01491711 -NCT01494168 -NCT01491737 -NCT01494181 -NCT01491763 -NCT01494285 -NCT01491828 -NCT01494324 -NCT01491841 -NCT01494337 -NCT01491893 -NCT01494363 -NCT01491958 -NCT01494415 -NCT01491971 -NCT01494467 -NCT01492049 -NCT01494506 -NCT01492062 -NCT01494532 -NCT01492088 -NCT01494558 -NCT01492101 -NCT01494571 -NCT01492127 -NCT01494610 -NCT01492179 -NCT01494636 -NCT01492192 -NCT01494649 -NCT01492270 -NCT01494662 -NCT01492296 -NCT01494688 -NCT01492374 -NCT01505413 -NCT01499901 -NCT01502670 -NCT01499914 -NCT01502605 -NCT01500057 -NCT01502696 -NCT01500083 -NCT01502748 -NCT01500122 -NCT01502800 -NCT01500148 -NCT01502917 -NCT01500161 -NCT01502982 -NCT01500200 -NCT01503086 -NCT01500304 -NCT01503099 -NCT01500356 -NCT01503125 -NCT01500447 -NCT01503164 -NCT01500512 -NCT01503177 -NCT01500525 -NCT01503229 -NCT01500538 -NCT01503242 -NCT01500577 -NCT01503294 -NCT01500616 -NCT01503307 -NCT01500629 -NCT01503346 -NCT01500720 -NCT01503372 -NCT01500733 -NCT01503385 -NCT01500824 -NCT01503476 -NCT01500876 -NCT01503502 -NCT01500889 -NCT01503515 -NCT01500915 -NCT01503541 -NCT01500993 -NCT01503632 -NCT01501136 -NCT01503749 -NCT01501149 -NCT01503775 -NCT01501162 -NCT01503827 -NCT01501279 -NCT01503905 -NCT01501370 -NCT01503983 -NCT01501409 -NCT01504009 -NCT01501487 -NCT01504048 -NCT01501500 -NCT01504126 -NCT01501578 -NCT01504256 -NCT01501604 -NCT01504360 -NCT01501643 -NCT01504399 -NCT01501669 -NCT01504464 -NCT01501708 -NCT01504477 -NCT01501903 -NCT01504490 -NCT01501942 -NCT01504542 -NCT01502059 -NCT01504555 -NCT01502072 -NCT01504711 -NCT01502085 -NCT01504776 -NCT01502124 -NCT01504789 -NCT01502137 -NCT01504802 -NCT01502176 -NCT01504815 -NCT01502189 -NCT01504880 -NCT01502202 -NCT01504932 -NCT01502228 -NCT01504945 -NCT01502241 -NCT01504958 -NCT01502254 -NCT01504997 -NCT01502280 -NCT01505010 -NCT01502293 -NCT01505075 -NCT01502410 -NCT01505153 -NCT01502514 -NCT01505166 -NCT01502527 -NCT01505400 -NCT01502592 -NCT01517399 -NCT01512147 -NCT01514890 -NCT01512173 -NCT01514877 -NCT01512199 -NCT01514955 -NCT01512212 -NCT01515046 -NCT01512251 -NCT01515137 -NCT01512277 -NCT01515150 -NCT01512342 -NCT01515176 -NCT01512407 -NCT01515189 -NCT01512472 -NCT01515215 -NCT01512537 -NCT01515254 -NCT01512563 -NCT01515293 -NCT01512589 -NCT01515306 -NCT01512654 -NCT01515527 -NCT01512719 -NCT01515566 -NCT01512745 -NCT01515683 -NCT01512758 -NCT01515696 -NCT01512810 -NCT01515748 -NCT01512927 -NCT01515787 -NCT01512940 -NCT01515800 -NCT01512992 -NCT01515865 -NCT01513083 -NCT01515969 -NCT01513109 -NCT01515995 -NCT01513161 -NCT01516008 -NCT01513174 -NCT01516190 -NCT01513187 -NCT01516203 -NCT01513239 -NCT01516216 -NCT01513317 -NCT01516229 -NCT01513356 -NCT01516307 -NCT01513408 -NCT01516320 -NCT01513421 -NCT01516489 -NCT01513447 -NCT01516515 -NCT01513603 -NCT01516528 -NCT01513616 -NCT01516567 -NCT01513655 -NCT01516580 -NCT01513707 -NCT01516593 -NCT01513733 -NCT01516606 -NCT01513928 -NCT01516619 -NCT01513980 -NCT01516684 -NCT01514071 -NCT01516710 -NCT01514110 -NCT01516736 -NCT01514123 -NCT01516801 -NCT01514188 -NCT01516840 -NCT01514201 -NCT01516931 -NCT01514214 -NCT01516944 -NCT01514253 -NCT01516983 -NCT01514279 -NCT01516996 -NCT01514344 -NCT01517009 -NCT01514448 -NCT01517035 -NCT01514526 -NCT01517048 -NCT01514552 -NCT01517126 -NCT01514630 -NCT01517165 -NCT01514643 -NCT01517191 -NCT01514734 -NCT01517217 -NCT01514760 -NCT01517243 -NCT01514786 -NCT01517347 -NCT01514864 -NCT01522768 -NCT01517451 -NCT01520220 -NCT01517464 -NCT01520194 -NCT01517529 -NCT01520272 -NCT01517646 -NCT01520389 -NCT01517659 -NCT01520441 -NCT01517698 -NCT01520454 -NCT01517724 -NCT01520467 -NCT01517776 -NCT01520519 -NCT01517802 -NCT01520558 -NCT01517828 -NCT01520584 -NCT01518036 -NCT01520675 -NCT01518049 -NCT01520701 -NCT01518062 -NCT01520740 -NCT01518075 -NCT01520805 -NCT01518140 -NCT01520870 -NCT01518153 -NCT01520909 -NCT01518192 -NCT01520922 -NCT01518218 -NCT01520948 -NCT01518231 -NCT01521000 -NCT01518283 -NCT01521013 -NCT01518322 -NCT01521117 -NCT01518374 -NCT01521143 -NCT01518413 -NCT01521221 -NCT01518465 -NCT01521299 -NCT01518517 -NCT01521325 -NCT01518556 -NCT01521351 -NCT01518621 -NCT01521468 -NCT01518686 -NCT01521481 -NCT01518920 -NCT01521533 -NCT01518946 -NCT01521546 -NCT01518959 -NCT01521611 -NCT01519011 -NCT01521676 -NCT01519050 -NCT01521689 -NCT01519076 -NCT01521702 -NCT01519141 -NCT01521715 -NCT01519193 -NCT01521754 -NCT01519271 -NCT01521780 -NCT01519323 -NCT01521936 -NCT01519349 -NCT01521949 -NCT01519388 -NCT01522118 -NCT01519414 -NCT01522170 -NCT01519427 -NCT01522183 -NCT01519596 -NCT01522196 -NCT01519609 -NCT01522209 -NCT01519700 -NCT01522300 -NCT01519752 -NCT01522326 -NCT01519778 -NCT01522443 -NCT01519804 -NCT01522469 -NCT01519817 -NCT01522521 -NCT01519869 -NCT01522534 -NCT01519882 -NCT01522547 -NCT01519999 -NCT01522573 -NCT01520038 -NCT01522612 -NCT01520051 -NCT01522664 -NCT01520103 -NCT01522677 -NCT01520181 -NCT01527214 -NCT01522794 -NCT01525082 -NCT01522820 -NCT01525069 -NCT01522859 -NCT01525121 -NCT01522872 -NCT01525134 -NCT01522937 -NCT01525173 -NCT01522950 -NCT01525264 -NCT01522976 -NCT01525329 -NCT01522989 -NCT01525394 -NCT01523002 -NCT01525407 -NCT01523015 -NCT01525433 -NCT01523171 -NCT01525446 -NCT01523197 -NCT01525550 -NCT01523223 -NCT01525563 -NCT01523353 -NCT01525589 -NCT01523431 -NCT01525602 -NCT01523457 -NCT01525706 -NCT01523561 -NCT01525719 -NCT01523587 -NCT01525732 -NCT01523639 -NCT01525745 -NCT01523678 -NCT01525771 -NCT01523782 -NCT01525875 -NCT01523808 -NCT01525927 -NCT01523834 -NCT01525940 -NCT01523847 -NCT01525966 -NCT01523860 -NCT01526096 -NCT01523912 -NCT01526135 -NCT01523964 -NCT01526161 -NCT01523977 -NCT01526174 -NCT01524003 -NCT01526239 -NCT01524016 -NCT01526278 -NCT01524081 -NCT01526304 -NCT01524094 -NCT01526356 -NCT01524159 -NCT01526369 -NCT01524198 -NCT01526408 -NCT01524224 -NCT01526473 -NCT01524432 -NCT01526486 -NCT01524458 -NCT01526499 -NCT01524471 -NCT01526512 -NCT01524536 -NCT01526590 -NCT01524562 -NCT01526603 -NCT01524575 -NCT01526655 -NCT01524640 -NCT01526694 -NCT01524653 -NCT01526707 -NCT01524692 -NCT01526772 -NCT01524705 -NCT01526811 -NCT01524731 -NCT01526837 -NCT01524757 -NCT01526889 -NCT01524783 -NCT01526902 -NCT01524848 -NCT01526915 -NCT01524926 -NCT01526928 -NCT01524978 -NCT01527032 -NCT01524991 -NCT01527045 -NCT01525004 -NCT01527058 -NCT01525017 -NCT01527136 -NCT01525043 -NCT01527149 -NCT01525056 -NCT01533090 -NCT01527292 -NCT01530061 -NCT01527331 -NCT01530035 -NCT01527409 -NCT01530178 -NCT01527422 -NCT01530217 -NCT01527487 -NCT01530256 -NCT01527669 -NCT01530269 -NCT01527812 -NCT01530295 -NCT01527838 -NCT01530334 -NCT01527864 -NCT01530373 -NCT01527877 -NCT01530503 -NCT01527929 -NCT01530568 -NCT01527955 -NCT01530594 -NCT01528046 -NCT01530607 -NCT01528059 -NCT01530698 -NCT01528085 -NCT01530724 -NCT01528137 -NCT01530802 -NCT01528163 -NCT01530880 -NCT01528176 -NCT01530971 -NCT01528345 -NCT01530984 -NCT01528462 -NCT01530997 -NCT01528488 -NCT01531023 -NCT01528501 -NCT01531205 -NCT01528540 -NCT01531218 -NCT01528566 -NCT01531244 -NCT01528618 -NCT01531361 -NCT01528683 -NCT01531374 -NCT01528722 -NCT01531439 -NCT01528735 -NCT01531452 -NCT01528748 -NCT01531478 -NCT01528826 -NCT01531504 -NCT01528865 -NCT01531595 -NCT01528878 -NCT01531673 -NCT01528930 -NCT01531699 -NCT01529073 -NCT01531712 -NCT01529099 -NCT01531764 -NCT01529112 -NCT01531777 -NCT01529138 -NCT01531790 -NCT01529164 -NCT01531829 -NCT01529177 -NCT01531868 -NCT01529242 -NCT01531894 -NCT01529307 -NCT01531998 -NCT01529333 -NCT01532011 -NCT01529359 -NCT01532089 -NCT01529385 -NCT01532362 -NCT01529411 -NCT01532401 -NCT01529437 -NCT01532453 -NCT01529450 -NCT01532635 -NCT01529593 -NCT01532687 -NCT01529645 -NCT01532700 -NCT01529658 -NCT01532765 -NCT01529684 -NCT01532804 -NCT01529788 -NCT01532830 -NCT01529827 -NCT01532856 -NCT01529840 -NCT01532960 -NCT01529944 -NCT01533012 -NCT01529996 -NCT01538628 -NCT01533129 -NCT01535391 -NCT01533181 -NCT01535352 -NCT01533194 -NCT01535456 -NCT01533207 -NCT01535560 -NCT01533233 -NCT01535599 -NCT01533246 -NCT01535612 -NCT01533285 -NCT01535664 -NCT01533324 -NCT01535846 -NCT01533571 -NCT01535911 -NCT01533636 -NCT01535924 -NCT01533649 -NCT01535950 -NCT01533727 -NCT01535989 -NCT01533753 -NCT01536054 -NCT01533948 -NCT01536067 -NCT01534052 -NCT01536080 -NCT01534065 -NCT01536145 -NCT01534078 -NCT01536223 -NCT01534104 -NCT01536262 -NCT01534117 -NCT01536288 -NCT01534130 -NCT01536301 -NCT01534143 -NCT01536392 -NCT01534182 -NCT01536444 -NCT01534208 -NCT01536561 -NCT01534260 -NCT01536678 -NCT01534273 -NCT01536691 -NCT01534286 -NCT01536717 -NCT01534351 -NCT01536743 -NCT01534377 -NCT01536782 -NCT01534429 -NCT01536795 -NCT01534455 -NCT01537029 -NCT01534507 -NCT01537081 -NCT01534546 -NCT01537107 -NCT01534585 -NCT01537211 -NCT01534598 -NCT01537536 -NCT01534637 -NCT01537666 -NCT01534650 -NCT01537744 -NCT01534702 -NCT01537770 -NCT01534715 -NCT01537861 -NCT01534754 -NCT01537900 -NCT01534793 -NCT01537926 -NCT01534806 -NCT01537991 -NCT01534819 -NCT01538017 -NCT01534832 -NCT01538095 -NCT01534845 -NCT01538238 -NCT01534897 -NCT01538316 -NCT01534949 -NCT01538329 -NCT01535001 -NCT01538355 -NCT01535027 -NCT01538381 -NCT01535040 -NCT01538407 -NCT01535053 -NCT01538420 -NCT01535066 -NCT01538459 -NCT01535131 -NCT01538472 -NCT01535157 -NCT01538537 -NCT01535183 -NCT01538550 -NCT01535209 -NCT01538563 -NCT01535326 -NCT01543698 -NCT01538641 -NCT01541280 -NCT01538706 -NCT01541241 -NCT01538745 -NCT01541306 -NCT01538849 -NCT01541332 -NCT01538862 -NCT01541358 -NCT01538966 -NCT01541423 -NCT01539018 -NCT01541553 -NCT01539044 -NCT01541618 -NCT01539083 -NCT01541644 -NCT01539161 -NCT01541683 -NCT01539174 -NCT01541709 -NCT01539187 -NCT01541722 -NCT01539291 -NCT01541813 -NCT01539317 -NCT01541878 -NCT01539356 -NCT01541943 -NCT01539395 -NCT01542021 -NCT01539447 -NCT01542047 -NCT01539512 -NCT01542138 -NCT01539525 -NCT01542177 -NCT01539655 -NCT01542216 -NCT01539681 -NCT01542255 -NCT01539733 -NCT01542281 -NCT01539772 -NCT01542294 -NCT01539785 -NCT01542437 -NCT01539824 -NCT01542515 -NCT01539876 -NCT01542567 -NCT01539980 -NCT01542606 -NCT01540019 -NCT01542632 -NCT01540058 -NCT01542684 -NCT01540071 -NCT01542736 -NCT01540110 -NCT01542879 -NCT01540136 -NCT01542892 -NCT01540201 -NCT01542918 -NCT01540253 -NCT01542931 -NCT01540344 -NCT01542944 -NCT01540396 -NCT01542957 -NCT01540435 -NCT01542983 -NCT01540461 -NCT01543022 -NCT01540513 -NCT01543048 -NCT01540526 -NCT01543100 -NCT01540565 -NCT01543113 -NCT01540617 -NCT01543204 -NCT01540682 -NCT01543282 -NCT01540708 -NCT01543334 -NCT01540747 -NCT01543347 -NCT01540799 -NCT01543399 -NCT01540812 -NCT01543412 -NCT01540955 -NCT01543438 -NCT01540968 -NCT01543464 -NCT01540994 -NCT01543542 -NCT01541007 -NCT01543581 -NCT01541020 -NCT01543594 -NCT01541072 -NCT01543607 -NCT01541111 -NCT01543659 -NCT01541124 -NCT01543672 -NCT01541228 -NCT01549951 -NCT01543763 -NCT01547260 -NCT01543776 -NCT01547208 -NCT01543802 -NCT01547299 -NCT01543997 -NCT01547364 -NCT01544101 -NCT01547416 -NCT01544179 -NCT01547442 -NCT01544205 -NCT01547481 -NCT01544322 -NCT01547494 -NCT01544374 -NCT01547546 -NCT01544413 -NCT01547676 -NCT01544452 -NCT01547715 -NCT01544478 -NCT01547741 -NCT01544647 -NCT01547793 -NCT01544738 -NCT01547806 -NCT01544790 -NCT01547845 -NCT01544920 -NCT01547871 -NCT01544959 -NCT01547923 -NCT01545011 -NCT01547949 -NCT01545037 -NCT01548105 -NCT01545141 -NCT01548118 -NCT01545193 -NCT01548144 -NCT01545297 -NCT01548170 -NCT01545518 -NCT01548209 -NCT01545648 -NCT01548222 -NCT01545674 -NCT01548313 -NCT01545687 -NCT01548339 -NCT01545804 -NCT01548352 -NCT01545817 -NCT01548482 -NCT01545830 -NCT01548534 -NCT01545869 -NCT01548573 -NCT01545882 -NCT01548651 -NCT01545921 -NCT01548677 -NCT01545947 -NCT01548690 -NCT01545986 -NCT01548807 -NCT01546012 -NCT01548846 -NCT01546038 -NCT01548911 -NCT01546116 -NCT01548924 -NCT01546207 -NCT01548950 -NCT01546298 -NCT01549015 -NCT01546363 -NCT01549093 -NCT01546428 -NCT01549184 -NCT01546454 -NCT01549210 -NCT01546519 -NCT01549327 -NCT01546571 -NCT01549379 -NCT01546623 -NCT01549392 -NCT01546649 -NCT01549431 -NCT01546675 -NCT01549535 -NCT01546701 -NCT01549730 -NCT01546740 -NCT01549756 -NCT01546766 -NCT01549782 -NCT01546844 -NCT01549795 -NCT01546922 -NCT01549847 -NCT01546987 -NCT01549873 -NCT01547078 -NCT01549886 -NCT01547130 -NCT01549925 -NCT01547169 -NCT01555489 -NCT01550055 -NCT01553149 -NCT01550094 -NCT01553071 -NCT01550185 -NCT01553188 -NCT01550224 -NCT01553227 -NCT01550237 -NCT01553240 -NCT01550250 -NCT01553253 -NCT01550276 -NCT01553318 -NCT01550367 -NCT01553357 -NCT01550380 -NCT01553396 -NCT01550484 -NCT01553461 -NCT01550497 -NCT01553487 -NCT01550510 -NCT01553539 -NCT01550523 -NCT01553565 -NCT01550627 -NCT01553578 -NCT01550783 -NCT01553643 -NCT01550848 -NCT01553656 -NCT01550913 -NCT01553747 -NCT01551030 -NCT01553786 -NCT01551043 -NCT01553838 -NCT01551407 -NCT01553851 -NCT01551446 -NCT01553890 -NCT01551459 -NCT01553903 -NCT01551498 -NCT01553916 -NCT01551511 -NCT01553942 -NCT01551589 -NCT01554020 -NCT01551628 -NCT01554059 -NCT01551641 -NCT01554163 -NCT01551654 -NCT01554254 -NCT01551680 -NCT01554267 -NCT01551693 -NCT01554371 -NCT01551706 -NCT01554384 -NCT01551719 -NCT01554397 -NCT01551745 -NCT01554410 -NCT01551914 -NCT01554514 -NCT01551966 -NCT01554553 -NCT01552005 -NCT01554579 -NCT01552031 -NCT01554592 -NCT01552083 -NCT01554683 -NCT01552161 -NCT01554774 -NCT01552200 -NCT01554852 -NCT01552226 -NCT01554943 -NCT01552239 -NCT01554969 -NCT01552291 -NCT01555021 -NCT01552356 -NCT01555047 -NCT01552421 -NCT01555086 -NCT01552434 -NCT01555138 -NCT01552655 -NCT01555216 -NCT01552681 -NCT01555242 -NCT01552694 -NCT01555268 -NCT01552811 -NCT01555281 -NCT01552824 -NCT01555333 -NCT01552967 -NCT01555346 -NCT01552980 -NCT01555437 -NCT01552993 -NCT01555450 -NCT01553019 -NCT01555463 -NCT01553032 -NCT01561482 -NCT01555515 -NCT01558167 -NCT01555541 -NCT01558141 -NCT01555580 -NCT01558219 -NCT01555606 -NCT01558245 -NCT01555632 -NCT01558258 -NCT01555645 -NCT01558427 -NCT01555710 -NCT01558453 -NCT01555801 -NCT01558479 -NCT01555840 -NCT01558492 -NCT01555853 -NCT01558544 -NCT01555892 -NCT01558583 -NCT01555905 -NCT01558661 -NCT01555957 -NCT01558778 -NCT01556009 -NCT01558869 -NCT01556035 -NCT01558921 -NCT01556191 -NCT01558947 -NCT01556230 -NCT01558960 -NCT01556243 -NCT01559025 -NCT01556256 -NCT01559116 -NCT01556282 -NCT01559181 -NCT01556360 -NCT01559194 -NCT01556438 -NCT01559220 -NCT01556477 -NCT01559545 -NCT01556490 -NCT01559636 -NCT01556581 -NCT01559714 -NCT01556646 -NCT01559740 -NCT01556711 -NCT01559818 -NCT01556776 -NCT01559844 -NCT01556789 -NCT01559935 -NCT01556815 -NCT01559987 -NCT01556841 -NCT01560104 -NCT01556958 -NCT01560117 -NCT01557075 -NCT01560195 -NCT01557101 -NCT01560260 -NCT01557114 -NCT01560325 -NCT01557140 -NCT01560377 -NCT01557361 -NCT01560416 -NCT01557400 -NCT01560533 -NCT01557439 -NCT01560559 -NCT01557465 -NCT01560663 -NCT01557478 -NCT01560676 -NCT01557556 -NCT01560741 -NCT01557595 -NCT01560832 -NCT01557686 -NCT01560845 -NCT01557738 -NCT01560923 -NCT01557764 -NCT01560949 -NCT01557777 -NCT01560962 -NCT01557790 -NCT01561014 -NCT01557842 -NCT01561040 -NCT01557855 -NCT01561118 -NCT01557868 -NCT01561248 -NCT01557881 -NCT01561287 -NCT01557959 -NCT01561326 -NCT01558011 -NCT01561430 -NCT01558050 -NCT01561456 -NCT01558115 -NCT01566838 -NCT01561495 -NCT01564056 -NCT01561586 -NCT01564004 -NCT01561664 -NCT01564121 -NCT01561755 -NCT01564251 -NCT01561833 -NCT01564264 -NCT01561885 -NCT01564277 -NCT01561911 -NCT01564290 -NCT01561924 -NCT01564329 -NCT01561989 -NCT01564368 -NCT01562015 -NCT01564394 -NCT01562028 -NCT01564537 -NCT01562093 -NCT01564602 -NCT01562106 -NCT01564784 -NCT01562184 -NCT01564810 -NCT01562197 -NCT01564836 -NCT01562210 -NCT01564849 -NCT01562223 -NCT01564914 -NCT01562275 -NCT01565083 -NCT01562301 -NCT01565109 -NCT01562405 -NCT01565135 -NCT01562418 -NCT01565200 -NCT01562431 -NCT01565239 -NCT01562457 -NCT01565486 -NCT01562496 -NCT01565499 -NCT01562509 -NCT01565512 -NCT01562522 -NCT01565538 -NCT01562535 -NCT01565616 -NCT01562548 -NCT01565668 -NCT01562626 -NCT01565746 -NCT01562678 -NCT01565772 -NCT01562717 -NCT01565837 -NCT01562756 -NCT01565889 -NCT01562782 -NCT01565928 -NCT01562847 -NCT01565980 -NCT01562873 -NCT01566019 -NCT01562899 -NCT01566045 -NCT01562977 -NCT01566071 -NCT01562990 -NCT01566123 -NCT01563055 -NCT01566240 -NCT01563094 -NCT01566279 -NCT01563133 -NCT01566292 -NCT01563172 -NCT01566383 -NCT01563289 -NCT01566409 -NCT01563302 -NCT01566435 -NCT01563354 -NCT01566448 -NCT01563536 -NCT01566474 -NCT01563588 -NCT01566500 -NCT01563601 -NCT01566604 -NCT01563614 -NCT01566669 -NCT01563627 -NCT01566695 -NCT01563757 -NCT01566721 -NCT01563796 -NCT01566734 -NCT01563822 -NCT01566747 -NCT01563900 -NCT01566799 -NCT01563926 -NCT01566812 -NCT01563991 -NCT01572545 -NCT01566890 -NCT01569815 -NCT01566903 -NCT01569763 -NCT01566942 -NCT01569919 -NCT01566968 -NCT01569958 -NCT01566994 -NCT01569984 -NCT01567059 -NCT01570010 -NCT01567072 -NCT01570023 -NCT01567137 -NCT01570036 -NCT01567163 -NCT01570049 -NCT01567202 -NCT01570075 -NCT01567345 -NCT01570166 -NCT01567384 -NCT01570192 -NCT01567462 -NCT01570218 -NCT01567475 -NCT01570231 -NCT01567488 -NCT01570257 -NCT01567501 -NCT01570296 -NCT01567618 -NCT01570309 -NCT01567631 -NCT01570361 -NCT01567709 -NCT01570387 -NCT01567735 -NCT01570582 -NCT01567787 -NCT01570621 -NCT01567800 -NCT01570634 -NCT01567891 -NCT01570647 -NCT01567930 -NCT01570816 -NCT01568034 -NCT01570868 -NCT01568138 -NCT01570998 -NCT01568151 -NCT01571024 -NCT01568294 -NCT01571141 -NCT01568307 -NCT01571180 -NCT01568346 -NCT01571271 -NCT01568359 -NCT01571284 -NCT01568450 -NCT01571362 -NCT01568476 -NCT01571453 -NCT01568580 -NCT01571544 -NCT01568632 -NCT01571596 -NCT01568658 -NCT01571622 -NCT01568684 -NCT01571648 -NCT01568697 -NCT01571726 -NCT01568710 -NCT01571739 -NCT01568853 -NCT01571934 -NCT01568866 -NCT01571960 -NCT01568879 -NCT01572012 -NCT01568918 -NCT01572038 -NCT01568996 -NCT01572051 -NCT01569074 -NCT01572064 -NCT01569204 -NCT01572090 -NCT01569282 -NCT01572103 -NCT01569295 -NCT01572116 -NCT01569321 -NCT01572181 -NCT01569412 -NCT01572233 -NCT01569425 -NCT01572324 -NCT01569620 -NCT01572428 -NCT01569633 -NCT01572480 -NCT01569672 -NCT01572493 -NCT01569724 -NCT01572519 -NCT01569750 -NCT01578499 -NCT01572571 -NCT01575782 -NCT01572623 -NCT01575730 -NCT01572662 -NCT01575821 -NCT01572688 -NCT01575834 -NCT01572701 -NCT01575860 -NCT01572727 -NCT01575873 -NCT01572818 -NCT01575925 -NCT01572857 -NCT01575951 -NCT01572935 -NCT01575990 -NCT01572987 -NCT01576029 -NCT01573000 -NCT01576055 -NCT01573156 -NCT01576107 -NCT01573169 -NCT01576172 -NCT01573247 -NCT01576354 -NCT01573260 -NCT01576380 -NCT01573286 -NCT01576393 -NCT01573338 -NCT01576406 -NCT01573416 -NCT01576419 -NCT01573442 -NCT01576458 -NCT01573468 -NCT01576549 -NCT01573494 -NCT01576562 -NCT01573546 -NCT01576588 -NCT01573611 -NCT01576666 -NCT01573702 -NCT01576692 -NCT01573754 -NCT01576705 -NCT01573780 -NCT01576718 -NCT01573793 -NCT01576796 -NCT01574001 -NCT01576900 -NCT01574027 -NCT01576939 -NCT01574066 -NCT01577017 -NCT01574092 -NCT01577173 -NCT01574170 -NCT01577212 -NCT01574209 -NCT01577316 -NCT01574222 -NCT01577355 -NCT01574274 -NCT01577407 -NCT01574339 -NCT01577420 -NCT01574365 -NCT01577459 -NCT01574456 -NCT01577602 -NCT01574495 -NCT01577654 -NCT01574716 -NCT01577745 -NCT01574729 -NCT01577771 -NCT01574781 -NCT01577784 -NCT01574859 -NCT01577862 -NCT01574937 -NCT01577914 -NCT01574989 -NCT01577953 -NCT01575249 -NCT01577966 -NCT01575275 -NCT01578018 -NCT01575314 -NCT01578031 -NCT01575340 -NCT01578109 -NCT01575444 -NCT01578213 -NCT01575522 -NCT01578239 -NCT01575535 -NCT01578252 -NCT01575548 -NCT01578265 -NCT01575574 -NCT01578317 -NCT01575678 -NCT01578343 -NCT01575717 -NCT01583517 -NCT01578551 -NCT01580969 -NCT01578564 -NCT01580891 -NCT01578577 -NCT01580982 -NCT01578642 -NCT01581008 -NCT01578655 -NCT01581034 -NCT01578668 -NCT01581125 -NCT01578681 -NCT01581281 -NCT01578694 -NCT01581294 -NCT01578707 -NCT01581307 -NCT01578733 -NCT01581346 -NCT01578811 -NCT01581463 -NCT01578824 -NCT01581541 -NCT01578889 -NCT01581580 -NCT01578902 -NCT01581619 -NCT01578954 -NCT01581645 -NCT01578967 -NCT01581723 -NCT01578980 -NCT01581749 -NCT01579058 -NCT01581775 -NCT01579071 -NCT01581801 -NCT01579084 -NCT01581840 -NCT01579110 -NCT01581905 -NCT01579188 -NCT01581944 -NCT01579227 -NCT01581970 -NCT01579318 -NCT01581996 -NCT01579357 -NCT01582009 -NCT01579435 -NCT01582035 -NCT01579487 -NCT01582061 -NCT01579539 -NCT01582100 -NCT01579552 -NCT01582139 -NCT01579578 -NCT01582152 -NCT01579591 -NCT01582178 -NCT01579630 -NCT01582191 -NCT01579721 -NCT01582204 -NCT01579734 -NCT01582269 -NCT01579747 -NCT01582295 -NCT01579812 -NCT01582516 -NCT01579929 -NCT01582529 -NCT01579942 -NCT01582659 -NCT01579994 -NCT01582672 -NCT01580033 -NCT01582685 -NCT01580085 -NCT01582724 -NCT01580137 -NCT01582776 -NCT01580202 -NCT01582841 -NCT01580228 -NCT01582971 -NCT01580293 -NCT01582984 -NCT01580345 -NCT01582997 -NCT01580358 -NCT01583205 -NCT01580371 -NCT01583283 -NCT01580397 -NCT01583296 -NCT01580410 -NCT01583309 -NCT01580462 -NCT01583322 -NCT01580501 -NCT01583348 -NCT01580696 -NCT01583361 -NCT01580735 -NCT01583426 -NCT01580787 -NCT01583478 -NCT01580878 -NCT01588873 -NCT01583543 -NCT01586273 -NCT01583621 -NCT01586260 -NCT01583660 -NCT01586299 -NCT01583686 -NCT01586403 -NCT01583699 -NCT01586416 -NCT01583712 -NCT01586455 -NCT01583777 -NCT01586520 -NCT01583816 -NCT01586546 -NCT01583842 -NCT01586611 -NCT01583881 -NCT01586624 -NCT01583920 -NCT01586728 -NCT01584011 -NCT01586767 -NCT01584076 -NCT01586858 -NCT01584115 -NCT01586884 -NCT01584141 -NCT01586910 -NCT01584258 -NCT01586988 -NCT01584271 -NCT01587014 -NCT01584284 -NCT01587040 -NCT01584297 -NCT01587144 -NCT01584336 -NCT01587248 -NCT01584388 -NCT01587313 -NCT01584440 -NCT01587352 -NCT01584531 -NCT01587430 -NCT01584544 -NCT01587443 -NCT01584648 -NCT01587534 -NCT01584674 -NCT01587586 -NCT01584830 -NCT01587677 -NCT01584960 -NCT01587703 -NCT01585012 -NCT01587807 -NCT01585051 -NCT01587820 -NCT01585194 -NCT01587846 -NCT01585246 -NCT01587859 -NCT01585311 -NCT01587872 -NCT01585350 -NCT01587885 -NCT01585415 -NCT01588015 -NCT01585428 -NCT01588132 -NCT01585454 -NCT01588145 -NCT01585532 -NCT01588184 -NCT01585597 -NCT01588236 -NCT01585623 -NCT01588249 -NCT01585649 -NCT01588262 -NCT01585662 -NCT01588301 -NCT01585688 -NCT01588340 -NCT01585727 -NCT01588379 -NCT01585805 -NCT01588418 -NCT01585831 -NCT01588431 -NCT01585870 -NCT01588483 -NCT01585883 -NCT01588509 -NCT01585987 -NCT01588522 -NCT01586000 -NCT01588548 -NCT01586104 -NCT01588678 -NCT01586117 -NCT01588704 -NCT01586169 -NCT01588769 -NCT01586182 -NCT01588821 -NCT01586195 -NCT01588847 -NCT01586234 -NCT01593995 -NCT01588951 -NCT01591681 -NCT01588964 -NCT01591590 -NCT01588990 -NCT01591733 -NCT01589003 -NCT01591746 -NCT01589016 -NCT01591798 -NCT01589094 -NCT01591811 -NCT01589146 -NCT01591863 -NCT01589159 -NCT01591902 -NCT01589172 -NCT01591915 -NCT01589289 -NCT01591967 -NCT01589302 -NCT01591980 -NCT01589328 -NCT01592019 -NCT01589367 -NCT01592045 -NCT01589380 -NCT01592240 -NCT01589419 -NCT01592370 -NCT01589471 -NCT01592383 -NCT01589497 -NCT01592396 -NCT01589601 -NCT01592422 -NCT01589627 -NCT01592500 -NCT01589796 -NCT01592578 -NCT01589848 -NCT01592617 -NCT01589861 -NCT01592669 -NCT01589926 -NCT01592708 -NCT01590017 -NCT01592721 -NCT01590069 -NCT01592734 -NCT01590082 -NCT01592747 -NCT01590095 -NCT01592929 -NCT01590147 -NCT01592968 -NCT01590160 -NCT01592981 -NCT01590199 -NCT01592994 -NCT01590316 -NCT01593007 -NCT01590355 -NCT01593020 -NCT01590394 -NCT01593111 -NCT01590719 -NCT01593124 -NCT01590732 -NCT01593189 -NCT01590745 -NCT01593228 -NCT01590758 -NCT01593241 -NCT01590784 -NCT01593254 -NCT01590862 -NCT01593280 -NCT01590940 -NCT01593293 -NCT01591005 -NCT01593306 -NCT01591018 -NCT01593410 -NCT01591031 -NCT01593449 -NCT01591096 -NCT01593475 -NCT01591122 -NCT01593488 -NCT01591135 -NCT01593514 -NCT01591174 -NCT01593527 -NCT01591226 -NCT01593618 -NCT01591317 -NCT01593644 -NCT01591356 -NCT01593670 -NCT01591395 -NCT01593696 -NCT01591421 -NCT01593748 -NCT01591473 -NCT01593761 -NCT01591486 -NCT01593852 -NCT01591499 -NCT01593943 -NCT01591577 -NCT01599520 -NCT01594099 -NCT01596816 -NCT01594112 -NCT01596790 -NCT01594125 -NCT01596829 -NCT01594177 -NCT01596868 -NCT01594216 -NCT01596907 -NCT01594229 -NCT01596933 -NCT01594242 -NCT01596972 -NCT01594346 -NCT01597063 -NCT01594372 -NCT01597076 -NCT01594398 -NCT01597193 -NCT01594567 -NCT01597219 -NCT01594593 -NCT01597232 -NCT01594658 -NCT01597258 -NCT01594723 -NCT01597336 -NCT01594762 -NCT01597349 -NCT01594879 -NCT01597375 -NCT01594892 -NCT01597388 -NCT01594918 -NCT01597401 -NCT01594996 -NCT01597414 -NCT01595009 -NCT01597505 -NCT01595061 -NCT01597518 -NCT01595087 -NCT01597687 -NCT01595178 -NCT01597778 -NCT01595204 -NCT01597791 -NCT01595217 -NCT01597804 -NCT01595243 -NCT01597817 -NCT01595256 -NCT01597830 -NCT01595321 -NCT01597908 -NCT01595438 -NCT01597973 -NCT01595451 -NCT01597999 -NCT01595503 -NCT01598025 -NCT01595529 -NCT01598038 -NCT01595542 -NCT01598077 -NCT01595607 -NCT01598090 -NCT01595646 -NCT01598194 -NCT01595672 -NCT01598298 -NCT01595763 -NCT01598311 -NCT01596049 -NCT01598402 -NCT01596088 -NCT01598415 -NCT01596101 -NCT01598454 -NCT01596114 -NCT01598558 -NCT01596127 -NCT01598584 -NCT01596140 -NCT01598649 -NCT01596153 -NCT01598792 -NCT01596166 -NCT01598857 -NCT01596244 -NCT01598935 -NCT01596257 -NCT01599013 -NCT01596270 -NCT01599026 -NCT01596283 -NCT01599039 -NCT01596530 -NCT01599143 -NCT01596582 -NCT01599156 -NCT01596621 -NCT01599195 -NCT01596634 -NCT01599208 -NCT01596647 -NCT01599273 -NCT01596699 -NCT01599416 -NCT01596751 -NCT01616199 -NCT01599533 -NCT01602289 -NCT01599546 -NCT01602224 -NCT01599559 -NCT01602315 -NCT01599754 -NCT01602380 -NCT01599780 -NCT01602406 -NCT01599793 -NCT01602471 -NCT01599806 -NCT01602588 -NCT01599832 -NCT01602601 -NCT01599884 -NCT01602627 -NCT01599897 -NCT01602666 -NCT01599910 -NCT01602783 -NCT01599923 -NCT01602809 -NCT01599936 -NCT01602926 -NCT01599949 -NCT01602939 -NCT01599975 -NCT01602952 -NCT01600014 -NCT01602965 -NCT01600040 -NCT01603017 -NCT01600053 -NCT01603095 -NCT01600105 -NCT01603134 -NCT01600196 -NCT01603160 -NCT01600339 -NCT01603173 -NCT01600417 -NCT01603186 -NCT01600521 -NCT01603212 -NCT01600573 -NCT01603303 -NCT01600638 -NCT01603316 -NCT01600742 -NCT01603407 -NCT01600781 -NCT01603420 -NCT01600807 -NCT01603459 -NCT01600833 -NCT01603576 -NCT01600859 -NCT01603693 -NCT01600898 -NCT01603745 -NCT01600963 -NCT01603849 -NCT01600976 -NCT01603888 -NCT01601015 -NCT01603979 -NCT01601041 -NCT01604005 -NCT01601184 -NCT01604031 -NCT01601197 -NCT01604070 -NCT01601262 -NCT01604148 -NCT01601275 -NCT01604161 -NCT01601288 -NCT01604174 -NCT01601314 -NCT01604239 -NCT01601327 -NCT01604356 -NCT01601340 -NCT01604382 -NCT01601366 -NCT01604395 -NCT01601379 -NCT01604408 -NCT01601444 -NCT01604460 -NCT01601535 -NCT01604512 -NCT01601548 -NCT01604642 -NCT01601678 -NCT01604655 -NCT01601691 -NCT01604759 -NCT01601808 -NCT01604772 -NCT01601977 -NCT01604785 -NCT01602042 -NCT01616056 -NCT01602055 -NCT01616134 -NCT01602068 -NCT01616160 -NCT01602211 -NCT01616186 -NCT01604811 -NCT01608009 -NCT01604863 -NCT01607996 -NCT01604889 -NCT01608022 -NCT01604980 -NCT01608074 -NCT01605032 -NCT01608139 -NCT01605097 -NCT01608165 -NCT01605162 -NCT01608360 -NCT01605227 -NCT01608399 -NCT01605240 -NCT01608451 -NCT01605305 -NCT01608464 -NCT01605318 -NCT01608529 -NCT01605331 -NCT01608594 -NCT01605344 -NCT01608620 -NCT01605396 -NCT01608646 -NCT01605513 -NCT01613924 -NCT01605526 -NCT01613950 -NCT01605630 -NCT01613976 -NCT01605669 -NCT01614132 -NCT01605734 -NCT01614171 -NCT01605916 -NCT01614184 -NCT01605929 -NCT01614197 -NCT01605981 -NCT01614210 -NCT01606033 -NCT01614301 -NCT01606072 -NCT01614379 -NCT01606085 -NCT01614392 -NCT01606098 -NCT01614418 -NCT01606124 -NCT01614522 -NCT01606228 -NCT01614561 -NCT01606241 -NCT01614652 -NCT01606345 -NCT01614717 -NCT01606384 -NCT01614743 -NCT01606397 -NCT01614795 -NCT01606449 -NCT01614821 -NCT01606566 -NCT01614847 -NCT01606579 -NCT01614886 -NCT01606631 -NCT01614938 -NCT01606748 -NCT01614990 -NCT01606774 -NCT01615029 -NCT01606787 -NCT01615042 -NCT01606878 -NCT01615120 -NCT01607008 -NCT01615146 -NCT01607047 -NCT01615224 -NCT01607151 -NCT01615367 -NCT01607216 -NCT01615380 -NCT01607255 -NCT01615406 -NCT01607294 -NCT01615510 -NCT01607554 -NCT01615562 -NCT01607580 -NCT01615653 -NCT01607645 -NCT01615666 -NCT01607658 -NCT01615705 -NCT01607684 -NCT01615757 -NCT01607827 -NCT01615783 -NCT01607866 -NCT01615809 -NCT01607879 -NCT01615913 -NCT01607905 -NCT01615926 -NCT01607957 -NCT01615965 -NCT01608711 -NCT01611584 -NCT01608841 -NCT01611571 -NCT01608867 -NCT01611597 -NCT01608971 -NCT01611623 -NCT01609010 -NCT01611649 -NCT01609062 -NCT01611662 -NCT01609127 -NCT01611675 -NCT01609140 -NCT01611727 -NCT01609179 -NCT01611766 -NCT01609231 -NCT01611857 -NCT01609257 -NCT01611961 -NCT01609309 -NCT01612091 -NCT01609361 -NCT01612182 -NCT01609504 -NCT01612221 -NCT01609543 -NCT01612247 -NCT01609556 -NCT01612286 -NCT01609582 -NCT01612325 -NCT01609608 -NCT01612338 -NCT01609660 -NCT01612351 -NCT01609790 -NCT01612416 -NCT01609816 -NCT01612481 -NCT01609894 -NCT01612546 -NCT01609920 -NCT01612598 -NCT01609933 -NCT01612624 -NCT01610050 -NCT01612650 -NCT01610180 -NCT01612728 -NCT01610193 -NCT01612793 -NCT01610206 -NCT01612871 -NCT01610219 -NCT01612910 -NCT01610284 -NCT01612988 -NCT01610336 -NCT01613131 -NCT01610375 -NCT01613222 -NCT01610440 -NCT01613248 -NCT01610479 -NCT01613300 -NCT01610531 -NCT01613313 -NCT01610544 -NCT01613352 -NCT01610570 -NCT01613430 -NCT01610648 -NCT01613443 -NCT01610843 -NCT01613469 -NCT01610869 -NCT01613482 -NCT01610895 -NCT01613521 -NCT01610908 -NCT01613534 -NCT01610934 -NCT01613560 -NCT01610999 -NCT01613573 -NCT01611025 -NCT01613586 -NCT01611038 -NCT01613599 -NCT01611051 -NCT01613638 -NCT01611090 -NCT01613651 -NCT01611116 -NCT01613677 -NCT01611142 -NCT01613729 -NCT01611259 -NCT01613768 -NCT01611298 -NCT01613807 -NCT01611480 -NCT01613833 -NCT01611506 -NCT01613846 -NCT01611532 -NCT01613885 -NCT01611558 -NCT01621685 -NCT01616238 -NCT01619358 -NCT01616303 -NCT01619293 -NCT01616316 -NCT01619423 -NCT01616381 -NCT01619475 -NCT01616537 -NCT01619514 -NCT01616589 -NCT01619553 -NCT01616602 -NCT01619605 -NCT01616641 -NCT01619631 -NCT01616758 -NCT01619683 -NCT01616849 -NCT01619696 -NCT01616862 -NCT01619761 -NCT01616875 -NCT01619774 -NCT01616901 -NCT01619813 -NCT01617031 -NCT01619839 -NCT01617057 -NCT01619865 -NCT01617161 -NCT01619943 -NCT01617213 -NCT01619969 -NCT01617226 -NCT01619995 -NCT01617278 -NCT01620034 -NCT01617473 -NCT01620138 -NCT01617603 -NCT01620164 -NCT01617616 -NCT01620190 -NCT01617629 -NCT01620216 -NCT01617642 -NCT01620229 -NCT01617668 -NCT01620242 -NCT01617694 -NCT01620281 -NCT01617733 -NCT01620359 -NCT01617915 -NCT01620398 -NCT01617928 -NCT01620411 -NCT01617980 -NCT01620515 -NCT01618136 -NCT01620580 -NCT01618149 -NCT01620593 -NCT01618227 -NCT01620645 -NCT01618253 -NCT01620684 -NCT01618357 -NCT01620710 -NCT01618370 -NCT01620736 -NCT01618422 -NCT01620749 -NCT01618448 -NCT01620801 -NCT01618474 -NCT01620970 -NCT01618487 -NCT01620996 -NCT01618513 -NCT01621061 -NCT01618591 -NCT01621100 -NCT01618617 -NCT01621217 -NCT01618721 -NCT01621243 -NCT01618760 -NCT01621256 -NCT01618838 -NCT01621282 -NCT01618851 -NCT01621308 -NCT01618890 -NCT01621451 -NCT01618929 -NCT01621477 -NCT01619033 -NCT01621490 -NCT01619046 -NCT01621529 -NCT01619098 -NCT01621542 -NCT01619111 -NCT01621568 -NCT01619150 -NCT01621659 -NCT01619163 -NCT01621672 -NCT01619228 -NCT01628380 -NCT01621698 -NCT01625013 -NCT01621724 -NCT01624805 -NCT01621789 -NCT01625156 -NCT01621854 -NCT01625234 -NCT01621880 -NCT01625260 -NCT01621906 -NCT01625286 -NCT01621971 -NCT01625338 -NCT01622114 -NCT01625351 -NCT01622218 -NCT01625390 -NCT01622257 -NCT01625429 -NCT01622322 -NCT01625442 -NCT01622361 -NCT01625455 -NCT01622439 -NCT01625520 -NCT01622543 -NCT01625533 -NCT01622582 -NCT01625546 -NCT01622621 -NCT01625702 -NCT01622660 -NCT01625741 -NCT01622699 -NCT01625936 -NCT01622712 -NCT01626001 -NCT01622751 -NCT01626014 -NCT01622764 -NCT01626066 -NCT01622803 -NCT01626079 -NCT01622868 -NCT01626105 -NCT01622894 -NCT01626209 -NCT01622933 -NCT01626222 -NCT01623037 -NCT01626235 -NCT01623102 -NCT01626352 -NCT01623115 -NCT01626391 -NCT01623141 -NCT01626417 -NCT01623154 -NCT01626495 -NCT01623206 -NCT01626638 -NCT01623336 -NCT01626664 -NCT01623349 -NCT01626820 -NCT01623440 -NCT01626833 -NCT01623596 -NCT01626963 -NCT01623739 -NCT01627028 -NCT01623765 -NCT01627041 -NCT01623804 -NCT01627054 -NCT01623817 -NCT01627067 -NCT01623869 -NCT01627132 -NCT01623908 -NCT01627197 -NCT01623921 -NCT01627288 -NCT01624025 -NCT01627366 -NCT01624051 -NCT01627379 -NCT01624090 -NCT01627522 -NCT01624155 -NCT01627535 -NCT01624220 -NCT01627704 -NCT01624272 -NCT01627717 -NCT01624285 -NCT01627795 -NCT01624441 -NCT01627951 -NCT01624467 -NCT01628029 -NCT01624493 -NCT01628211 -NCT01624610 -NCT01628250 -NCT01624701 -NCT01628263 -NCT01624753 -NCT01628315 -NCT01624766 -NCT01634113 -NCT01628432 -NCT01631318 -NCT01628458 -NCT01631305 -NCT01628471 -NCT01631331 -NCT01628484 -NCT01631357 -NCT01628497 -NCT01631409 -NCT01628510 -NCT01631422 -NCT01628536 -NCT01631435 -NCT01628549 -NCT01631474 -NCT01628640 -NCT01631513 -NCT01628653 -NCT01631526 -NCT01628887 -NCT01631539 -NCT01628900 -NCT01631552 -NCT01628913 -NCT01631565 -NCT01628978 -NCT01631591 -NCT01629082 -NCT01631708 -NCT01629095 -NCT01631760 -NCT01629147 -NCT01631890 -NCT01629160 -NCT01631903 -NCT01629251 -NCT01631968 -NCT01629303 -NCT01632020 -NCT01629329 -NCT01632137 -NCT01629381 -NCT01632150 -NCT01629498 -NCT01632228 -NCT01629511 -NCT01632241 -NCT01629563 -NCT01632306 -NCT01629615 -NCT01632332 -NCT01629667 -NCT01632436 -NCT01629758 -NCT01632696 -NCT01629797 -NCT01632709 -NCT01629823 -NCT01632722 -NCT01630018 -NCT01632787 -NCT01630083 -NCT01632800 -NCT01630096 -NCT01632852 -NCT01630226 -NCT01632904 -NCT01630239 -NCT01632956 -NCT01630265 -NCT01633008 -NCT01630291 -NCT01633021 -NCT01630408 -NCT01633060 -NCT01630421 -NCT01633099 -NCT01630499 -NCT01633203 -NCT01630525 -NCT01633255 -NCT01630564 -NCT01633333 -NCT01630590 -NCT01633372 -NCT01630603 -NCT01633437 -NCT01630655 -NCT01633463 -NCT01630681 -NCT01633476 -NCT01630733 -NCT01633515 -NCT01630746 -NCT01633541 -NCT01630772 -NCT01633645 -NCT01630798 -NCT01633762 -NCT01630889 -NCT01633918 -NCT01630954 -NCT01633931 -NCT01630967 -NCT01633970 -NCT01631136 -NCT01634009 -NCT01631214 -NCT01634061 -NCT01631279 -NCT01640665 -NCT01634126 -NCT01637701 -NCT01634217 -NCT01637649 -NCT01634269 -NCT01637714 -NCT01634282 -NCT01637753 -NCT01634555 -NCT01637766 -NCT01634620 -NCT01637805 -NCT01634685 -NCT01637857 -NCT01634750 -NCT01637961 -NCT01634763 -NCT01638039 -NCT01634893 -NCT01638052 -NCT01634984 -NCT01638091 -NCT01635088 -NCT01638156 -NCT01635140 -NCT01638247 -NCT01635244 -NCT01638390 -NCT01635270 -NCT01638533 -NCT01635283 -NCT01638546 -NCT01635296 -NCT01638611 -NCT01635374 -NCT01638676 -NCT01635400 -NCT01638923 -NCT01635413 -NCT01638936 -NCT01635504 -NCT01638962 -NCT01635530 -NCT01639001 -NCT01635647 -NCT01639118 -NCT01635699 -NCT01639131 -NCT01635712 -NCT01639170 -NCT01635868 -NCT01639248 -NCT01635907 -NCT01639274 -NCT01635946 -NCT01639287 -NCT01635959 -NCT01639326 -NCT01636128 -NCT01639352 -NCT01636219 -NCT01639365 -NCT01636245 -NCT01639391 -NCT01636388 -NCT01639430 -NCT01636427 -NCT01639443 -NCT01636479 -NCT01639456 -NCT01636492 -NCT01639508 -NCT01636544 -NCT01639521 -NCT01636609 -NCT01639612 -NCT01636622 -NCT01639625 -NCT01636674 -NCT01639677 -NCT01636882 -NCT01639703 -NCT01636908 -NCT01639846 -NCT01636934 -NCT01639859 -NCT01636960 -NCT01639885 -NCT01636973 -NCT01639911 -NCT01637090 -NCT01639924 -NCT01637103 -NCT01640015 -NCT01637129 -NCT01640119 -NCT01637194 -NCT01640301 -NCT01637220 -NCT01640340 -NCT01637376 -NCT01640353 -NCT01637402 -NCT01640405 -NCT01637532 -NCT01640444 -NCT01637558 -NCT01640509 -NCT01637584 -NCT01640522 -NCT01637623 -NCT01646034 -NCT01640678 -NCT01643460 -NCT01640717 -NCT01643447 -NCT01640782 -NCT01643499 -NCT01640808 -NCT01643577 -NCT01640847 -NCT01643603 -NCT01640886 -NCT01643668 -NCT01641029 -NCT01643707 -NCT01641068 -NCT01643759 -NCT01641107 -NCT01643811 -NCT01641172 -NCT01643824 -NCT01641185 -NCT01643837 -NCT01641250 -NCT01643850 -NCT01641276 -NCT01643902 -NCT01641406 -NCT01643954 -NCT01641419 -NCT01644097 -NCT01641458 -NCT01644136 -NCT01641484 -NCT01644253 -NCT01641497 -NCT01644305 -NCT01641575 -NCT01644448 -NCT01641653 -NCT01644565 -NCT01641679 -NCT01644591 -NCT01641705 -NCT01644669 -NCT01641718 -NCT01644682 -NCT01641757 -NCT01644708 -NCT01641783 -NCT01644773 -NCT01641835 -NCT01644799 -NCT01641939 -NCT01644825 -NCT01641952 -NCT01644864 -NCT01642004 -NCT01644890 -NCT01642017 -NCT01644916 -NCT01642082 -NCT01644955 -NCT01642121 -NCT01644968 -NCT01642147 -NCT01644994 -NCT01642186 -NCT01645046 -NCT01642251 -NCT01645098 -NCT01642342 -NCT01645111 -NCT01642446 -NCT01645124 -NCT01642511 -NCT01645150 -NCT01642563 -NCT01645176 -NCT01642615 -NCT01645215 -NCT01642732 -NCT01645293 -NCT01642771 -NCT01645306 -NCT01642797 -NCT01645332 -NCT01642849 -NCT01645371 -NCT01642875 -NCT01645384 -NCT01642888 -NCT01645436 -NCT01642914 -NCT01645449 -NCT01642953 -NCT01645696 -NCT01642979 -NCT01645709 -NCT01643005 -NCT01645748 -NCT01643070 -NCT01645774 -NCT01643109 -NCT01645826 -NCT01643239 -NCT01645839 -NCT01643278 -NCT01645930 -NCT01643291 -NCT01646021 -NCT01643408 -NCT01685125 -NCT01646086 -NCT01666977 -NCT01646125 -NCT01667042 -NCT01646203 -NCT01667068 -NCT01646242 -NCT01667081 -NCT01646268 -NCT01667133 -NCT01646346 -NCT01667172 -NCT01646437 -NCT01667198 -NCT01646450 -NCT01683864 -NCT01646476 -NCT01683877 -NCT01646541 -NCT01683968 -NCT01646554 -NCT01683994 -NCT01646684 -NCT01684072 -NCT01646697 -NCT01684098 -NCT01646762 -NCT01684111 -NCT01646775 -NCT01684150 -NCT01646853 -NCT01684202 -NCT01647165 -NCT01684215 -NCT01647334 -NCT01684241 -NCT01647477 -NCT01684384 -NCT01647594 -NCT01684397 -NCT01647607 -NCT01684449 -NCT01647620 -NCT01684579 -NCT01647646 -NCT01684605 -NCT01647659 -NCT01684670 -NCT01647672 -NCT01684696 -NCT01647711 -NCT01684839 -NCT01647737 -NCT01684878 -NCT01647750 -NCT01684904 -NCT01647789 -NCT01684943 -NCT01647828 -NCT01685008 -NCT01647867 -NCT01685021 -NCT01647958 -NCT01685047 -NCT01647971 -NCT01664000 -NCT01664026 -NCT01664091 -NCT01664130 -NCT01664182 -NCT01664195 -NCT01664221 -NCT01664273 -NCT01664546 -NCT01664663 -NCT01664728 -NCT01664754 -NCT01664897 -NCT01664910 -NCT01664923 -NCT01664975 -NCT01665001 -NCT01665014 -NCT01665118 -NCT01665183 -NCT01665274 -NCT01665417 -NCT01665495 -NCT01665521 -NCT01665547 -NCT01665586 -NCT01665599 -NCT01665625 -NCT01665703 -NCT01665768 -NCT01665781 -NCT01665794 -NCT01665820 -NCT01665859 -NCT01665937 -NCT01666015 -NCT01666145 -NCT01666158 -NCT01666314 -NCT01666353 -NCT01666418 -NCT01666431 -NCT01666444 -NCT01666509 -NCT01666548 -NCT01666600 -NCT01666730 -NCT01666756 -NCT01666782 -NCT01666808 -NCT01666873 -NCT01666899 -NCT01685060 -NCT01648010 -NCT01662960 -NCT01648023 -NCT01663012 -NCT01648140 -NCT01663090 -NCT01648218 -NCT01663103 -NCT01648322 -NCT01663155 -NCT01648348 -NCT01663207 -NCT01648452 -NCT01663246 -NCT01648465 -NCT01663259 -NCT01648504 -NCT01663272 -NCT01648517 -NCT01663285 -NCT01648530 -NCT01663350 -NCT01648608 -NCT01663415 -NCT01648764 -NCT01663493 -NCT01648803 -NCT01663545 -NCT01648894 -NCT01663584 -NCT01648972 -NCT01663597 -NCT01649024 -NCT01663623 -NCT01649089 -NCT01663675 -NCT01649180 -NCT01663701 -NCT01649258 -NCT01663714 -NCT01649271 -NCT01663727 -NCT01649336 -NCT01663753 -NCT01649349 -NCT01663766 -NCT01649505 -NCT01663857 -NCT01649583 -NCT01663909 -NCT01649622 -NCT01663935 -NCT01649635 -NCT01659788 -NCT01659853 -NCT01659879 -NCT01660009 -NCT01660048 -NCT01660087 -NCT01660152 -NCT01660347 -NCT01660360 -NCT01660399 -NCT01660451 -NCT01660529 -NCT01660542 -NCT01660607 -NCT01660633 -NCT01660672 -NCT01660711 -NCT01660750 -NCT01660906 -NCT01660971 -NCT01660997 -NCT01661010 -NCT01661062 -NCT01661088 -NCT01661114 -NCT01661127 -NCT01661166 -NCT01661179 -NCT01661270 -NCT01661283 -NCT01661322 -NCT01661335 -NCT01661387 -NCT01661400 -NCT01661439 -NCT01661465 -NCT01661595 -NCT01661621 -NCT01661686 -NCT01661712 -NCT01661777 -NCT01661842 -NCT01661868 -NCT01661881 -NCT01661959 -NCT01661972 -NCT01661998 -NCT01662050 -NCT01662076 -NCT01662102 -NCT01662128 -NCT01662427 -NCT01662453 -NCT01662505 -NCT01662531 -NCT01662596 -NCT01662609 -NCT01662713 -NCT01662726 -NCT01662739 -NCT01662752 -NCT01662804 -NCT01662843 -NCT01662869 -NCT01662921 -NCT01662947 -NCT01649700 -NCT01659112 -NCT01649791 -NCT01659151 -NCT01649804 -NCT01659203 -NCT01649830 -NCT01659255 -NCT01649843 -NCT01659346 -NCT01649856 -NCT01659372 -NCT01649947 -NCT01659411 -NCT01650090 -NCT01659424 -NCT01650194 -NCT01659463 -NCT01650207 -NCT01659476 -NCT01650285 -NCT01659502 -NCT01650350 -NCT01659541 -NCT01650376 -NCT01659554 -NCT01650389 -NCT01659567 -NCT01650402 -NCT01659606 -NCT01650428 -NCT01659619 -NCT01650506 -NCT01659632 -NCT01650597 -NCT01659645 -NCT01650688 -NCT01655472 -NCT01655537 -NCT01655550 -NCT01655589 -NCT01655628 -NCT01655641 -NCT01655693 -NCT01655719 -NCT01655745 -NCT01655797 -NCT01655836 -NCT01655875 -NCT01655888 -NCT01655927 -NCT01655966 -NCT01655992 -NCT01656031 -NCT01656044 -NCT01656161 -NCT01656226 -NCT01656252 -NCT01656265 -NCT01656278 -NCT01656304 -NCT01656460 -NCT01656538 -NCT01656551 -NCT01656629 -NCT01656642 -NCT01656668 -NCT01656746 -NCT01656772 -NCT01656863 -NCT01656980 -NCT01657123 -NCT01657175 -NCT01657188 -NCT01657214 -NCT01657331 -NCT01657370 -NCT01657409 -NCT01657448 -NCT01657461 -NCT01657487 -NCT01657591 -NCT01657604 -NCT01657617 -NCT01657656 -NCT01657682 -NCT01657695 -NCT01657747 -NCT01657786 -NCT01657799 -NCT01657955 -NCT01657981 -NCT01658007 -NCT01658020 -NCT01658033 -NCT01658124 -NCT01658176 -NCT01658228 -NCT01658241 -NCT01658280 -NCT01658319 -NCT01658332 -NCT01658345 -NCT01658358 -NCT01658423 -NCT01658436 -NCT01658462 -NCT01658527 -NCT01658553 -NCT01658670 -NCT01658800 -NCT01658813 -NCT01658878 -NCT01658904 -NCT01658930 -NCT01658943 -NCT01658956 -NCT01659008 -NCT01659021 -NCT01659047 -NCT01659099 -NCT01650701 -NCT01653106 -NCT01650727 -NCT01653093 -NCT01650805 -NCT01653145 -NCT01651039 -NCT01653171 -NCT01651078 -NCT01653249 -NCT01651182 -NCT01653301 -NCT01651312 -NCT01653327 -NCT01651377 -NCT01653366 -NCT01651468 -NCT01653418 -NCT01651494 -NCT01653470 -NCT01651520 -NCT01653496 -NCT01651624 -NCT01653522 -NCT01651663 -NCT01653561 -NCT01651754 -NCT01653574 -NCT01651767 -NCT01653639 -NCT01651793 -NCT01653717 -NCT01651832 -NCT01653834 -NCT01651871 -NCT01653873 -NCT01651949 -NCT01653886 -NCT01651975 -NCT01653899 -NCT01652014 -NCT01653912 -NCT01652027 -NCT01653925 -NCT01652066 -NCT01653964 -NCT01652079 -NCT01653990 -NCT01652092 -NCT01654068 -NCT01652144 -NCT01654081 -NCT01652157 -NCT01654120 -NCT01652170 -NCT01654146 -NCT01652183 -NCT01654159 -NCT01652196 -NCT01654185 -NCT01652222 -NCT01654198 -NCT01652261 -NCT01654224 -NCT01652456 -NCT01654289 -NCT01652469 -NCT01654367 -NCT01652482 -NCT01654445 -NCT01652521 -NCT01654458 -NCT01652547 -NCT01654497 -NCT01652560 -NCT01654588 -NCT01652573 -NCT01654666 -NCT01652625 -NCT01654692 -NCT01652651 -NCT01654809 -NCT01652768 -NCT01654861 -NCT01652781 -NCT01654874 -NCT01652794 -NCT01654965 -NCT01652820 -NCT01655004 -NCT01652859 -NCT01655043 -NCT01652898 -NCT01655056 -NCT01652911 -NCT01655121 -NCT01652963 -NCT01655212 -NCT01652976 -NCT01655225 -NCT01652989 -NCT01655238 -NCT01653002 -NCT01655251 -NCT01653028 -NCT01655264 -NCT01653054 -NCT01655329 -NCT01653067 -NCT01655446 -NCT01653080 -NCT01683825 -NCT01667211 -NCT01670097 -NCT01667237 -NCT01670084 -NCT01667250 -NCT01670175 -NCT01667289 -NCT01670292 -NCT01667302 -NCT01670370 -NCT01667328 -NCT01670409 -NCT01667367 -NCT01670422 -NCT01667419 -NCT01670435 -NCT01667536 -NCT01670448 -NCT01667562 -NCT01670461 -NCT01667627 -NCT01670474 -NCT01667640 -NCT01681563 -NCT01667718 -NCT01681615 -NCT01667744 -NCT01681641 -NCT01667770 -NCT01681654 -NCT01667848 -NCT01681667 -NCT01668017 -NCT01681823 -NCT01668134 -NCT01681836 -NCT01668173 -NCT01681875 -NCT01668251 -NCT01682031 -NCT01668290 -NCT01682044 -NCT01668381 -NCT01682083 -NCT01668459 -NCT01682122 -NCT01668472 -NCT01682135 -NCT01668498 -NCT01682187 -NCT01668654 -NCT01682200 -NCT01668680 -NCT01682213 -NCT01668719 -NCT01682226 -NCT01668784 -NCT01682317 -NCT01668823 -NCT01682460 -NCT01668849 -NCT01682473 -NCT01668862 -NCT01682616 -NCT01668875 -NCT01682720 -NCT01668914 -NCT01682733 -NCT01668953 -NCT01682746 -NCT01669109 -NCT01682772 -NCT01669148 -NCT01682798 -NCT01669161 -NCT01682837 -NCT01669174 -NCT01682850 -NCT01669187 -NCT01682941 -NCT01669226 -NCT01683019 -NCT01669239 -NCT01683149 -NCT01669252 -NCT01683162 -NCT01669304 -NCT01683175 -NCT01669317 -NCT01683188 -NCT01669343 -NCT01683240 -NCT01669356 -NCT01683279 -NCT01669369 -NCT01683422 -NCT01669499 -NCT01683435 -NCT01669655 -NCT01683487 -NCT01669668 -NCT01683565 -NCT01669707 -NCT01683682 -NCT01669720 -NCT01683708 -NCT01669798 -NCT01683786 -NCT01669928 -NCT01683799 -NCT01670006 -NCT01683812 -NCT01670500 -NCT01673334 -NCT01670539 -NCT01673308 -NCT01670617 -NCT01673347 -NCT01670643 -NCT01673373 -NCT01670721 -NCT01673386 -NCT01670786 -NCT01673438 -NCT01670799 -NCT01673490 -NCT01670812 -NCT01673568 -NCT01670877 -NCT01673607 -NCT01670890 -NCT01673633 -NCT01670994 -NCT01673646 -NCT01671150 -NCT01673698 -NCT01671267 -NCT01673737 -NCT01671319 -NCT01673789 -NCT01671332 -NCT01673802 -NCT01671371 -NCT01673854 -NCT01671384 -NCT01673867 -NCT01671397 -NCT01673919 -NCT01671423 -NCT01673932 -NCT01671436 -NCT01673945 -NCT01671449 -NCT01673984 -NCT01671462 -NCT01674049 -NCT01671488 -NCT01674062 -NCT01671592 -NCT01674101 -NCT01671774 -NCT01674140 -NCT01671813 -NCT01674205 -NCT01671826 -NCT01674270 -NCT01671878 -NCT01674309 -NCT01671904 -NCT01674374 -NCT01671943 -NCT01674530 -NCT01672021 -NCT01674556 -NCT01672151 -NCT01674582 -NCT01672216 -NCT01674608 -NCT01672242 -NCT01674621 -NCT01672268 -NCT01674725 -NCT01672294 -NCT01674738 -NCT01672307 -NCT01674842 -NCT01672333 -NCT01674881 -NCT01672411 -NCT01674959 -NCT01672450 -NCT01674985 -NCT01672463 -NCT01674998 -NCT01672658 -NCT01675037 -NCT01672671 -NCT01675128 -NCT01672684 -NCT01675141 -NCT01672736 -NCT01675219 -NCT01672749 -NCT01675310 -NCT01672775 -NCT01675323 -NCT01672892 -NCT01675362 -NCT01672918 -NCT01681004 -NCT01672944 -NCT01681212 -NCT01673009 -NCT01681303 -NCT01673022 -NCT01681368 -NCT01673152 -NCT01681433 -NCT01673217 -NCT01681446 -NCT01673269 -NCT01681472 -NCT01673282 -NCT01681537 -NCT01675401 -NCT01677988 -NCT01675440 -NCT01677975 -NCT01675466 -NCT01678027 -NCT01675531 -NCT01678053 -NCT01675622 -NCT01678105 -NCT01675635 -NCT01678131 -NCT01675713 -NCT01678144 -NCT01675765 -NCT01678157 -NCT01675778 -NCT01678261 -NCT01675856 -NCT01678274 -NCT01675908 -NCT01678352 -NCT01675921 -NCT01678365 -NCT01675934 -NCT01678391 -NCT01675999 -NCT01678404 -NCT01676090 -NCT01678417 -NCT01676194 -NCT01678430 -NCT01676259 -NCT01678443 -NCT01676363 -NCT01678664 -NCT01676428 -NCT01678690 -NCT01676480 -NCT01678729 -NCT01676493 -NCT01678859 -NCT01676558 -NCT01678963 -NCT01676649 -NCT01679041 -NCT01676714 -NCT01679119 -NCT01676753 -NCT01679158 -NCT01676779 -NCT01679210 -NCT01676792 -NCT01679327 -NCT01676818 -NCT01679340 -NCT01676831 -NCT01679405 -NCT01676909 -NCT01679431 -NCT01676948 -NCT01679470 -NCT01676961 -NCT01679483 -NCT01677091 -NCT01679522 -NCT01677234 -NCT01679548 -NCT01677260 -NCT01679574 -NCT01677286 -NCT01679691 -NCT01677312 -NCT01679717 -NCT01677390 -NCT01679743 -NCT01677416 -NCT01679756 -NCT01677455 -NCT01679860 -NCT01677468 -NCT01679925 -NCT01677481 -NCT01679951 -NCT01677559 -NCT01679977 -NCT01677572 -NCT01680029 -NCT01677624 -NCT01680172 -NCT01677637 -NCT01680198 -NCT01677689 -NCT01680211 -NCT01677715 -NCT01680380 -NCT01677741 -NCT01680432 -NCT01677780 -NCT01680523 -NCT01677845 -NCT01680640 -NCT01677858 -NCT01680796 -NCT01677884 -NCT01680822 -NCT01677897 -NCT01680874 -NCT01677949 -NCT01680991 -NCT01677962 -NCT01696032 -NCT01685138 -NCT01693939 -NCT01685190 -NCT01693991 -NCT01685255 -NCT01694043 -NCT01685268 -NCT01694056 -NCT01685333 -NCT01694225 -NCT01685346 -NCT01694238 -NCT01685359 -NCT01694251 -NCT01685385 -NCT01694277 -NCT01685398 -NCT01694472 -NCT01685411 -NCT01694511 -NCT01685489 -NCT01694576 -NCT01685515 -NCT01694589 -NCT01685567 -NCT01694654 -NCT01685580 -NCT01694771 -NCT01685606 -NCT01694784 -NCT01685632 -NCT01694875 -NCT01685723 -NCT01694953 -NCT01685749 -NCT01694966 -NCT01685814 -NCT01695005 -NCT01685827 -NCT01695031 -NCT01685892 -NCT01695044 -NCT01685983 -NCT01695057 -NCT01685996 -NCT01695122 -NCT01686126 -NCT01695135 -NCT01686152 -NCT01695187 -NCT01686165 -NCT01695226 -NCT01686256 -NCT01695265 -NCT01686282 -NCT01695330 -NCT01686321 -NCT01695369 -NCT01686334 -NCT01695382 -NCT01686360 -NCT01695434 -NCT01686386 -NCT01695447 -NCT01686412 -NCT01695473 -NCT01686568 -NCT01695525 -NCT01686594 -NCT01695577 -NCT01686672 -NCT01695590 -NCT01686698 -NCT01695733 -NCT01686737 -NCT01695772 -NCT01686776 -NCT01695850 -NCT01686828 -NCT01695863 -NCT01686880 -NCT01695902 -NCT01686958 -NCT01695915 -NCT01686971 -NCT01695941 -NCT01687049 -NCT01692379 -NCT01692405 -NCT01692496 -NCT01692587 -NCT01692626 -NCT01692678 -NCT01692691 -NCT01692704 -NCT01692834 -NCT01692873 -NCT01692964 -NCT01693068 -NCT01693172 -NCT01693237 -NCT01693276 -NCT01693419 -NCT01693432 -NCT01693445 -NCT01693510 -NCT01693523 -NCT01693549 -NCT01693562 -NCT01693575 -NCT01693614 -NCT01693770 -NCT01693783 -NCT01693822 -NCT01695993 -NCT01687101 -NCT01689636 -NCT01687179 -NCT01689623 -NCT01687192 -NCT01689662 -NCT01687205 -NCT01689714 -NCT01687244 -NCT01689727 -NCT01687257 -NCT01689766 -NCT01687283 -NCT01689792 -NCT01687387 -NCT01689870 -NCT01687400 -NCT01689883 -NCT01687413 -NCT01689896 -NCT01687439 -NCT01689948 -NCT01687543 -NCT01689961 -NCT01687608 -NCT01689974 -NCT01687647 -NCT01689987 -NCT01687673 -NCT01690013 -NCT01687738 -NCT01690065 -NCT01687790 -NCT01690143 -NCT01687842 -NCT01690182 -NCT01687959 -NCT01690325 -NCT01687972 -NCT01690364 -NCT01687998 -NCT01690377 -NCT01688076 -NCT01690390 -NCT01688128 -NCT01690468 -NCT01688206 -NCT01690507 -NCT01688336 -NCT01690520 -NCT01688349 -NCT01690559 -NCT01688388 -NCT01690598 -NCT01688401 -NCT01690624 -NCT01688414 -NCT01690702 -NCT01688453 -NCT01690741 -NCT01688466 -NCT01690767 -NCT01688479 -NCT01690871 -NCT01688492 -NCT01690936 -NCT01688531 -NCT01691040 -NCT01688557 -NCT01691196 -NCT01688609 -NCT01691248 -NCT01688700 -NCT01691300 -NCT01688713 -NCT01691339 -NCT01688791 -NCT01691352 -NCT01688817 -NCT01691391 -NCT01688908 -NCT01691508 -NCT01688934 -NCT01691521 -NCT01688960 -NCT01691547 -NCT01688973 -NCT01691625 -NCT01688999 -NCT01691664 -NCT01689064 -NCT01691781 -NCT01689194 -NCT01691807 -NCT01689220 -NCT01691898 -NCT01689350 -NCT01691976 -NCT01689402 -NCT01692015 -NCT01689467 -NCT01692106 -NCT01689519 -NCT01692132 -NCT01689532 -NCT01692197 -NCT01689558 -NCT01692223 -NCT01689584 -NCT01692262 -NCT01689610 -NCT01701284 -NCT01696045 -NCT01698658 -NCT01696084 -NCT01698489 -NCT01696123 -NCT01698697 -NCT01696136 -NCT01698801 -NCT01696227 -NCT01698840 -NCT01696266 -NCT01698879 -NCT01696461 -NCT01698905 -NCT01696539 -NCT01698918 -NCT01696552 -NCT01699009 -NCT01696565 -NCT01699022 -NCT01696630 -NCT01699061 -NCT01696669 -NCT01699074 -NCT01696734 -NCT01699139 -NCT01696760 -NCT01699152 -NCT01696799 -NCT01699269 -NCT01696864 -NCT01699399 -NCT01696877 -NCT01699542 -NCT01696955 -NCT01699555 -NCT01696968 -NCT01699581 -NCT01696981 -NCT01699607 -NCT01696994 -NCT01699672 -NCT01697020 -NCT01699698 -NCT01697059 -NCT01699906 -NCT01697072 -NCT01699919 -NCT01697150 -NCT01700010 -NCT01697228 -NCT01700049 -NCT01697267 -NCT01700062 -NCT01697293 -NCT01700244 -NCT01697306 -NCT01700257 -NCT01697332 -NCT01700270 -NCT01697345 -NCT01700283 -NCT01697358 -NCT01700309 -NCT01697371 -NCT01700335 -NCT01697384 -NCT01700400 -NCT01697514 -NCT01700413 -NCT01697527 -NCT01700426 -NCT01697540 -NCT01700439 -NCT01697605 -NCT01700517 -NCT01697800 -NCT01700530 -NCT01697891 -NCT01700569 -NCT01697917 -NCT01700634 -NCT01697930 -NCT01700673 -NCT01697943 -NCT01700686 -NCT01698047 -NCT01700738 -NCT01698073 -NCT01700751 -NCT01698086 -NCT01700829 -NCT01698099 -NCT01700881 -NCT01698164 -NCT01700946 -NCT01698190 -NCT01700959 -NCT01698203 -NCT01701037 -NCT01698268 -NCT01701076 -NCT01698281 -NCT01701089 -NCT01698398 -NCT01701232 -NCT01698411 -NCT01701245 -NCT01698424 -NCT01701258 -NCT01698437 -NCT01706120 -NCT01701310 -NCT01703845 -NCT01701323 -NCT01703806 -NCT01701349 -NCT01703910 -NCT01701375 -NCT01703949 -NCT01701388 -NCT01704027 -NCT01701427 -NCT01704157 -NCT01701466 -NCT01704274 -NCT01701479 -NCT01704287 -NCT01701622 -NCT01704313 -NCT01701674 -NCT01704339 -NCT01701687 -NCT01704430 -NCT01701804 -NCT01704469 -NCT01701843 -NCT01704495 -NCT01701869 -NCT01704586 -NCT01701947 -NCT01704651 -NCT01701986 -NCT01704664 -NCT01702012 -NCT01704690 -NCT01702064 -NCT01704703 -NCT01702116 -NCT01704716 -NCT01702129 -NCT01704729 -NCT01702155 -NCT01704742 -NCT01702246 -NCT01704807 -NCT01702285 -NCT01704820 -NCT01702337 -NCT01704872 -NCT01702376 -NCT01704885 -NCT01702519 -NCT01704963 -NCT01702558 -NCT01704976 -NCT01702571 -NCT01705002 -NCT01702610 -NCT01705054 -NCT01702636 -NCT01705106 -NCT01702714 -NCT01705158 -NCT01702740 -NCT01705184 -NCT01702792 -NCT01705288 -NCT01702831 -NCT01705340 -NCT01702844 -NCT01705366 -NCT01702870 -NCT01705379 -NCT01702896 -NCT01705392 -NCT01702909 -NCT01705405 -NCT01702961 -NCT01705444 -NCT01703065 -NCT01705496 -NCT01703078 -NCT01705548 -NCT01703091 -NCT01705587 -NCT01703195 -NCT01705600 -NCT01703351 -NCT01705652 -NCT01703364 -NCT01705691 -NCT01703390 -NCT01705795 -NCT01703403 -NCT01705834 -NCT01703455 -NCT01705847 -NCT01703481 -NCT01705886 -NCT01703494 -NCT01705899 -NCT01703507 -NCT01705964 -NCT01703559 -NCT01706016 -NCT01703676 -NCT01706068 -NCT01703728 -NCT01706081 -NCT01703754 -NCT01706094 -NCT01703780 -NCT01712204 -NCT01706237 -NCT01709331 -NCT01706250 -NCT01709292 -NCT01706263 -NCT01709344 -NCT01706393 -NCT01709370 -NCT01706445 -NCT01709396 -NCT01706458 -NCT01709435 -NCT01706562 -NCT01709487 -NCT01706627 -NCT01709513 -NCT01706666 -NCT01709539 -NCT01706705 -NCT01709734 -NCT01706822 -NCT01709812 -NCT01706835 -NCT01709864 -NCT01706900 -NCT01710072 -NCT01706939 -NCT01710085 -NCT01707004 -NCT01710176 -NCT01707056 -NCT01710215 -NCT01707121 -NCT01710254 -NCT01707173 -NCT01710293 -NCT01707212 -NCT01710501 -NCT01707225 -NCT01710592 -NCT01707238 -NCT01710605 -NCT01707251 -NCT01710618 -NCT01707264 -NCT01710683 -NCT01707290 -NCT01710696 -NCT01707329 -NCT01710722 -NCT01707472 -NCT01710956 -NCT01707524 -NCT01711034 -NCT01707563 -NCT01711099 -NCT01707615 -NCT01711112 -NCT01707628 -NCT01711229 -NCT01707771 -NCT01711242 -NCT01707823 -NCT01711398 -NCT01707966 -NCT01711450 -NCT01708005 -NCT01711515 -NCT01708109 -NCT01711528 -NCT01708161 -NCT01711541 -NCT01708174 -NCT01711554 -NCT01708265 -NCT01711580 -NCT01708317 -NCT01711606 -NCT01708564 -NCT01711632 -NCT01708798 -NCT01711658 -NCT01708824 -NCT01711671 -NCT01708850 -NCT01711684 -NCT01708941 -NCT01711697 -NCT01708954 -NCT01711710 -NCT01708993 -NCT01711749 -NCT01709006 -NCT01711879 -NCT01709058 -NCT01711892 -NCT01709071 -NCT01711918 -NCT01709110 -NCT01711944 -NCT01709149 -NCT01711970 -NCT01709162 -NCT01711983 -NCT01709175 -NCT01712009 -NCT01709214 -NCT01712048 -NCT01709227 -NCT01712178 -NCT01709253 -NCT01717729 -NCT01712217 -NCT01715207 -NCT01712230 -NCT01715168 -NCT01712243 -NCT01715220 -NCT01712269 -NCT01715233 -NCT01712308 -NCT01715285 -NCT01712360 -NCT01715363 -NCT01712438 -NCT01715376 -NCT01712490 -NCT01715415 -NCT01712646 -NCT01715441 -NCT01712659 -NCT01715532 -NCT01712685 -NCT01715597 -NCT01712789 -NCT01715727 -NCT01712815 -NCT01715935 -NCT01712841 -NCT01715948 -NCT01712893 -NCT01715961 -NCT01712919 -NCT01716000 -NCT01712984 -NCT01716104 -NCT01713023 -NCT01716156 -NCT01713036 -NCT01716195 -NCT01713049 -NCT01716208 -NCT01713218 -NCT01716247 -NCT01713244 -NCT01716364 -NCT01713296 -NCT01716416 -NCT01713361 -NCT01716468 -NCT01713387 -NCT01716520 -NCT01713439 -NCT01716546 -NCT01713452 -NCT01716611 -NCT01713582 -NCT01716689 -NCT01713699 -NCT01716702 -NCT01713842 -NCT01716715 -NCT01713972 -NCT01716754 -NCT01714037 -NCT01716767 -NCT01714089 -NCT01716780 -NCT01714102 -NCT01716793 -NCT01714128 -NCT01716806 -NCT01714167 -NCT01716897 -NCT01714219 -NCT01716949 -NCT01714271 -NCT01717014 -NCT01714466 -NCT01717053 -NCT01714505 -NCT01717066 -NCT01714557 -NCT01717079 -NCT01714635 -NCT01717118 -NCT01714648 -NCT01717131 -NCT01714661 -NCT01717196 -NCT01714739 -NCT01717261 -NCT01714765 -NCT01717326 -NCT01714791 -NCT01717391 -NCT01714843 -NCT01717404 -NCT01714908 -NCT01717430 -NCT01714934 -NCT01717482 -NCT01714947 -NCT01717599 -NCT01715025 -NCT01717664 -NCT01715064 -NCT01717677 -NCT01715077 -NCT01717703 -NCT01715129 -NCT01717716 -NCT01715142 -NCT01723124 -NCT01717768 -NCT01720264 -NCT01717781 -NCT01720225 -NCT01717794 -NCT01720342 -NCT01717898 -NCT01720407 -NCT01717911 -NCT01720433 -NCT01717924 -NCT01720459 -NCT01718067 -NCT01720550 -NCT01718119 -NCT01720563 -NCT01718171 -NCT01720602 -NCT01718223 -NCT01720693 -NCT01718275 -NCT01720745 -NCT01718327 -NCT01720771 -NCT01718353 -NCT01720836 -NCT01718366 -NCT01720875 -NCT01718379 -NCT01720901 -NCT01718444 -NCT01721018 -NCT01718496 -NCT01721083 -NCT01718561 -NCT01721174 -NCT01718574 -NCT01721265 -NCT01718626 -NCT01721291 -NCT01718639 -NCT01721343 -NCT01718691 -NCT01721369 -NCT01718743 -NCT01721525 -NCT01718808 -NCT01721577 -NCT01718873 -NCT01721603 -NCT01718886 -NCT01721668 -NCT01718899 -NCT01721694 -NCT01719068 -NCT01721746 -NCT01719081 -NCT01721759 -NCT01719107 -NCT01721772 -NCT01719120 -NCT01721850 -NCT01719211 -NCT01721876 -NCT01719237 -NCT01721902 -NCT01719250 -NCT01721941 -NCT01719302 -NCT01721954 -NCT01719380 -NCT01721967 -NCT01719393 -NCT01722084 -NCT01719445 -NCT01722149 -NCT01719471 -NCT01722162 -NCT01719484 -NCT01722175 -NCT01719536 -NCT01722201 -NCT01719549 -NCT01722214 -NCT01719562 -NCT01722240 -NCT01719575 -NCT01722292 -NCT01719679 -NCT01722305 -NCT01719744 -NCT01722318 -NCT01719757 -NCT01722487 -NCT01719783 -NCT01722578 -NCT01719835 -NCT01722617 -NCT01719861 -NCT01722773 -NCT01719926 -NCT01722812 -NCT01720004 -NCT01722825 -NCT01720043 -NCT01722942 -NCT01720147 -NCT01722968 -NCT01720173 -NCT01723020 -NCT01720186 -NCT01728805 -NCT01723150 -NCT01725828 -NCT01723202 -NCT01725815 -NCT01723306 -NCT01725893 -NCT01723475 -NCT01726010 -NCT01723488 -NCT01726036 -NCT01723553 -NCT01726049 -NCT01723592 -NCT01726062 -NCT01723644 -NCT01726296 -NCT01723657 -NCT01726374 -NCT01723748 -NCT01726452 -NCT01723774 -NCT01726465 -NCT01723800 -NCT01726556 -NCT01723813 -NCT01726582 -NCT01723839 -NCT01726725 -NCT01723904 -NCT01726738 -NCT01723943 -NCT01726751 -NCT01723956 -NCT01726803 -NCT01723995 -NCT01726842 -NCT01724021 -NCT01726894 -NCT01724034 -NCT01726920 -NCT01724086 -NCT01726985 -NCT01724112 -NCT01727011 -NCT01724177 -NCT01727076 -NCT01724229 -NCT01727089 -NCT01724242 -NCT01727193 -NCT01724320 -NCT01727206 -NCT01724346 -NCT01727284 -NCT01724450 -NCT01727336 -NCT01724463 -NCT01727349 -NCT01724528 -NCT01727362 -NCT01724580 -NCT01727388 -NCT01724606 -NCT01727531 -NCT01724619 -NCT01727570 -NCT01724658 -NCT01727583 -NCT01724671 -NCT01727674 -NCT01724801 -NCT01727687 -NCT01724840 -NCT01727752 -NCT01724879 -NCT01727817 -NCT01724905 -NCT01727869 -NCT01724944 -NCT01727908 -NCT01724996 -NCT01727921 -NCT01725048 -NCT01728090 -NCT01725100 -NCT01728155 -NCT01725152 -NCT01728181 -NCT01725165 -NCT01728207 -NCT01725191 -NCT01728233 -NCT01725204 -NCT01728259 -NCT01725217 -NCT01728311 -NCT01725438 -NCT01728389 -NCT01725451 -NCT01728454 -NCT01725477 -NCT01728480 -NCT01725529 -NCT01728506 -NCT01725555 -NCT01728623 -NCT01725568 -NCT01728662 -NCT01725581 -NCT01728779 -NCT01725633 -NCT01734525 -NCT01728896 -NCT01731665 -NCT01729039 -NCT01731652 -NCT01729091 -NCT01731678 -NCT01729104 -NCT01731704 -NCT01729260 -NCT01731769 -NCT01729338 -NCT01731795 -NCT01729416 -NCT01731821 -NCT01729429 -NCT01731886 -NCT01729442 -NCT01731912 -NCT01729481 -NCT01731925 -NCT01729533 -NCT01732107 -NCT01729559 -NCT01732120 -NCT01729624 -NCT01732276 -NCT01729663 -NCT01732380 -NCT01729689 -NCT01732497 -NCT01729715 -NCT01732549 -NCT01729806 -NCT01732627 -NCT01729832 -NCT01732640 -NCT01729845 -NCT01732770 -NCT01729884 -NCT01732783 -NCT01729923 -NCT01732796 -NCT01730053 -NCT01732835 -NCT01730118 -NCT01732861 -NCT01730144 -NCT01732913 -NCT01730157 -NCT01732926 -NCT01730209 -NCT01733004 -NCT01730222 -NCT01733069 -NCT01730404 -NCT01733095 -NCT01730417 -NCT01733147 -NCT01730560 -NCT01733238 -NCT01730586 -NCT01733290 -NCT01730612 -NCT01733342 -NCT01730638 -NCT01733472 -NCT01730651 -NCT01733511 -NCT01730664 -NCT01733589 -NCT01730677 -NCT01733706 -NCT01730716 -NCT01733719 -NCT01730729 -NCT01733797 -NCT01730781 -NCT01733823 -NCT01730833 -NCT01733836 -NCT01730911 -NCT01733953 -NCT01730937 -NCT01733979 -NCT01730950 -NCT01734044 -NCT01731028 -NCT01734096 -NCT01731054 -NCT01734122 -NCT01731145 -NCT01734161 -NCT01731158 -NCT01734174 -NCT01731223 -NCT01734187 -NCT01731262 -NCT01734304 -NCT01731288 -NCT01734369 -NCT01731301 -NCT01734447 -NCT01731340 -NCT01734473 -NCT01731444 -NCT01734486 -NCT01731548 -NCT01734499 -NCT01731561 -NCT01734512 -NCT01731587 -NCT01740271 -NCT01734564 -NCT01737216 -NCT01734655 -NCT01737177 -NCT01734681 -NCT01737346 -NCT01734707 -NCT01737398 -NCT01734720 -NCT01737450 -NCT01734746 -NCT01737463 -NCT01734798 -NCT01737502 -NCT01734837 -NCT01737619 -NCT01734863 -NCT01737671 -NCT01734928 -NCT01737723 -NCT01734967 -NCT01737801 -NCT01735006 -NCT01737827 -NCT01735032 -NCT01737840 -NCT01735045 -NCT01737983 -NCT01735071 -NCT01738087 -NCT01735136 -NCT01738113 -NCT01735175 -NCT01738139 -NCT01735201 -NCT01738152 -NCT01735396 -NCT01738217 -NCT01735409 -NCT01738243 -NCT01735604 -NCT01738347 -NCT01735747 -NCT01738412 -NCT01735760 -NCT01738438 -NCT01735799 -NCT01738451 -NCT01735812 -NCT01738594 -NCT01735851 -NCT01738620 -NCT01735877 -NCT01738633 -NCT01735942 -NCT01738646 -NCT01735955 -NCT01738685 -NCT01736033 -NCT01738724 -NCT01736059 -NCT01738776 -NCT01736072 -NCT01738802 -NCT01736111 -NCT01738815 -NCT01736267 -NCT01738880 -NCT01736345 -NCT01738945 -NCT01736410 -NCT01738984 -NCT01736423 -NCT01738997 -NCT01736436 -NCT01739062 -NCT01736475 -NCT01739218 -NCT01736605 -NCT01739244 -NCT01736670 -NCT01739283 -NCT01736683 -NCT01739309 -NCT01736722 -NCT01739335 -NCT01736774 -NCT01739439 -NCT01736800 -NCT01739465 -NCT01736813 -NCT01739608 -NCT01736878 -NCT01739634 -NCT01736904 -NCT01739764 -NCT01736917 -NCT01739881 -NCT01736943 -NCT01739894 -NCT01736956 -NCT01739972 -NCT01737008 -NCT01740063 -NCT01737112 -NCT01740154 -NCT01737138 -NCT01740219 -NCT01737151 -NCT01740258 -NCT01737164 -NCT01745588 -NCT01740297 -NCT01743001 -NCT01740323 -NCT01742988 -NCT01740336 -NCT01743040 -NCT01740375 -NCT01743066 -NCT01740388 -NCT01743131 -NCT01740401 -NCT01743157 -NCT01740427 -NCT01743235 -NCT01740492 -NCT01743365 -NCT01740557 -NCT01743469 -NCT01740570 -NCT01743482 -NCT01740583 -NCT01743521 -NCT01740648 -NCT01743547 -NCT01740726 -NCT01743560 -NCT01740947 -NCT01743573 -NCT01740999 -NCT01743586 -NCT01741038 -NCT01743638 -NCT01741116 -NCT01743729 -NCT01741155 -NCT01743768 -NCT01741363 -NCT01743807 -NCT01741428 -NCT01743859 -NCT01741480 -NCT01743885 -NCT01741506 -NCT01743950 -NCT01741519 -NCT01743989 -NCT01741571 -NCT01744015 -NCT01741597 -NCT01744028 -NCT01741623 -NCT01744041 -NCT01741636 -NCT01744054 -NCT01741662 -NCT01744106 -NCT01741727 -NCT01744171 -NCT01741753 -NCT01744223 -NCT01741792 -NCT01744249 -NCT01741805 -NCT01744262 -NCT01741883 -NCT01744340 -NCT01741948 -NCT01744353 -NCT01742026 -NCT01744366 -NCT01742065 -NCT01744509 -NCT01742117 -NCT01744587 -NCT01742156 -NCT01744626 -NCT01742169 -NCT01744639 -NCT01742286 -NCT01744652 -NCT01742325 -NCT01744665 -NCT01742338 -NCT01744691 -NCT01742377 -NCT01744821 -NCT01742403 -NCT01744847 -NCT01742481 -NCT01744873 -NCT01742494 -NCT01744912 -NCT01742598 -NCT01744925 -NCT01742663 -NCT01745107 -NCT01742741 -NCT01745237 -NCT01742767 -NCT01745302 -NCT01742793 -NCT01745354 -NCT01742806 -NCT01745367 -NCT01742819 -NCT01745406 -NCT01742897 -NCT01745445 -NCT01742936 -NCT01745484 -NCT01742975 -NCT01750970 -NCT01745601 -NCT01747889 -NCT01745640 -NCT01747876 -NCT01745718 -NCT01747993 -NCT01745757 -NCT01748019 -NCT01745796 -NCT01748058 -NCT01745822 -NCT01748110 -NCT01745861 -NCT01748136 -NCT01745913 -NCT01748149 -NCT01745939 -NCT01748240 -NCT01745952 -NCT01748357 -NCT01745965 -NCT01748370 -NCT01746043 -NCT01748448 -NCT01746173 -NCT01748500 -NCT01746225 -NCT01748578 -NCT01746238 -NCT01748656 -NCT01746251 -NCT01748682 -NCT01746277 -NCT01748721 -NCT01746420 -NCT01748734 -NCT01746498 -NCT01748747 -NCT01746511 -NCT01748773 -NCT01746589 -NCT01748812 -NCT01746602 -NCT01748825 -NCT01746628 -NCT01748851 -NCT01746693 -NCT01748890 -NCT01746771 -NCT01748942 -NCT01746810 -NCT01748981 -NCT01746823 -NCT01749072 -NCT01746836 -NCT01749111 -NCT01746849 -NCT01749332 -NCT01746862 -NCT01749384 -NCT01746979 -NCT01749397 -NCT01746992 -NCT01749527 -NCT01747005 -NCT01749592 -NCT01747018 -NCT01749618 -NCT01747070 -NCT01749722 -NCT01747096 -NCT01749774 -NCT01747135 -NCT01749865 -NCT01747148 -NCT01749956 -NCT01747174 -NCT01749969 -NCT01747187 -NCT01750073 -NCT01747213 -NCT01750099 -NCT01747226 -NCT01750151 -NCT01747239 -NCT01750281 -NCT01747304 -NCT01750320 -NCT01747499 -NCT01750398 -NCT01747512 -NCT01750515 -NCT01747551 -NCT01750567 -NCT01747577 -NCT01750580 -NCT01747603 -NCT01750632 -NCT01747629 -NCT01750658 -NCT01747707 -NCT01750697 -NCT01747720 -NCT01750762 -NCT01747772 -NCT01750866 -NCT01747798 -NCT01750918 -NCT01747811 -NCT01750957 -NCT01747824 -NCT01757639 -NCT01750983 -NCT01754857 -NCT01751191 -NCT01754792 -NCT01751308 -NCT01754870 -NCT01751412 -NCT01754896 -NCT01751425 -NCT01754909 -NCT01751438 -NCT01754935 -NCT01751451 -NCT01754987 -NCT01751516 -NCT01755000 -NCT01751529 -NCT01755013 -NCT01751555 -NCT01755130 -NCT01751568 -NCT01755182 -NCT01751737 -NCT01755195 -NCT01751776 -NCT01755208 -NCT01751867 -NCT01755325 -NCT01751880 -NCT01755364 -NCT01751919 -NCT01755390 -NCT01751997 -NCT01755429 -NCT01752023 -NCT01755598 -NCT01752036 -NCT01755624 -NCT01752140 -NCT01755650 -NCT01752205 -NCT01755767 -NCT01752257 -NCT01755832 -NCT01752309 -NCT01755845 -NCT01752387 -NCT01755897 -NCT01752400 -NCT01755923 -NCT01752426 -NCT01755975 -NCT01752491 -NCT01756092 -NCT01752569 -NCT01756105 -NCT01752621 -NCT01756118 -NCT01752647 -NCT01756170 -NCT01752686 -NCT01756196 -NCT01752907 -NCT01756209 -NCT01752920 -NCT01756222 -NCT01752933 -NCT01756339 -NCT01752998 -NCT01756352 -NCT01753076 -NCT01756391 -NCT01753089 -NCT01756547 -NCT01753128 -NCT01756638 -NCT01753154 -NCT01756690 -NCT01753219 -NCT01756729 -NCT01753297 -NCT01756742 -NCT01753414 -NCT01756989 -NCT01753453 -NCT01757145 -NCT01753479 -NCT01757158 -NCT01753713 -NCT01757171 -NCT01753856 -NCT01757223 -NCT01753908 -NCT01757288 -NCT01754038 -NCT01757314 -NCT01754350 -NCT01757327 -NCT01754376 -NCT01757405 -NCT01754402 -NCT01757418 -NCT01754441 -NCT01757431 -NCT01754493 -NCT01757444 -NCT01754519 -NCT01757535 -NCT01754597 -NCT01757626 -NCT01754623 -NCT01763970 -NCT01757717 -NCT01761097 -NCT01757769 -NCT01760980 -NCT01757964 -NCT01761201 -NCT01758042 -NCT01761240 -NCT01758094 -NCT01761266 -NCT01758146 -NCT01761305 -NCT01758211 -NCT01761331 -NCT01758328 -NCT01761435 -NCT01758341 -NCT01761461 -NCT01758367 -NCT01761500 -NCT01758445 -NCT01761539 -NCT01758458 -NCT01761604 -NCT01758484 -NCT01761630 -NCT01758497 -NCT01761747 -NCT01758549 -NCT01761812 -NCT01758614 -NCT01761825 -NCT01758666 -NCT01761838 -NCT01758692 -NCT01761864 -NCT01758718 -NCT01761877 -NCT01758731 -NCT01761929 -NCT01758874 -NCT01761955 -NCT01758965 -NCT01761968 -NCT01759095 -NCT01761981 -NCT01759108 -NCT01762020 -NCT01759134 -NCT01762033 -NCT01759186 -NCT01762150 -NCT01759225 -NCT01762189 -NCT01759238 -NCT01762202 -NCT01759303 -NCT01762215 -NCT01759472 -NCT01762241 -NCT01759615 -NCT01762280 -NCT01759654 -NCT01762293 -NCT01759706 -NCT01762410 -NCT01759758 -NCT01762514 -NCT01759771 -NCT01762527 -NCT01759810 -NCT01762540 -NCT01759836 -NCT01762592 -NCT01759849 -NCT01762722 -NCT01759901 -NCT01762956 -NCT01759914 -NCT01762969 -NCT01760070 -NCT01762982 -NCT01760096 -NCT01763034 -NCT01760226 -NCT01763047 -NCT01760252 -NCT01763164 -NCT01760421 -NCT01763320 -NCT01760499 -NCT01763385 -NCT01760525 -NCT01763450 -NCT01760616 -NCT01763489 -NCT01760642 -NCT01763606 -NCT01760655 -NCT01763645 -NCT01760668 -NCT01763671 -NCT01760694 -NCT01763710 -NCT01760798 -NCT01763788 -NCT01760811 -NCT01763931 -NCT01760850 -NCT01763944 -NCT01760915 -NCT01769248 -NCT01764009 -NCT01766765 -NCT01764022 -NCT01766739 -NCT01764061 -NCT01766804 -NCT01764074 -NCT01766830 -NCT01764087 -NCT01766856 -NCT01764139 -NCT01767155 -NCT01764230 -NCT01767194 -NCT01764347 -NCT01767220 -NCT01764360 -NCT01767233 -NCT01764412 -NCT01767415 -NCT01764451 -NCT01767597 -NCT01764477 -NCT01767610 -NCT01764503 -NCT01767623 -NCT01764607 -NCT01767636 -NCT01764646 -NCT01767675 -NCT01764789 -NCT01767701 -NCT01764802 -NCT01767714 -NCT01764815 -NCT01767766 -NCT01764828 -NCT01767792 -NCT01764867 -NCT01767818 -NCT01764880 -NCT01767857 -NCT01764919 -NCT01767909 -NCT01765036 -NCT01767922 -NCT01765088 -NCT01767935 -NCT01765179 -NCT01767961 -NCT01765192 -NCT01768104 -NCT01765309 -NCT01768156 -NCT01765348 -NCT01768247 -NCT01765387 -NCT01768325 -NCT01765439 -NCT01768338 -NCT01765465 -NCT01768351 -NCT01765543 -NCT01768403 -NCT01765556 -NCT01768468 -NCT01765569 -NCT01768494 -NCT01765582 -NCT01768520 -NCT01765764 -NCT01768546 -NCT01765790 -NCT01768598 -NCT01765894 -NCT01768689 -NCT01765907 -NCT01768715 -NCT01765920 -NCT01768741 -NCT01766037 -NCT01768793 -NCT01766102 -NCT01768806 -NCT01766115 -NCT01768832 -NCT01766141 -NCT01768845 -NCT01766180 -NCT01768897 -NCT01766206 -NCT01768962 -NCT01766219 -NCT01768975 -NCT01766284 -NCT01768988 -NCT01766297 -NCT01769040 -NCT01766323 -NCT01769066 -NCT01766375 -NCT01769092 -NCT01766583 -NCT01769105 -NCT01766622 -NCT01769157 -NCT01766661 -NCT01769209 -NCT01766700 -NCT01769222 -NCT01766713 -NCT01775267 -NCT01769352 -NCT01772420 -NCT01769391 -NCT01772368 -NCT01769508 -NCT01772459 -NCT01769547 -NCT01772472 -NCT01769560 -NCT01772563 -NCT01769625 -NCT01772706 -NCT01769729 -NCT01772719 -NCT01769768 -NCT01772732 -NCT01769820 -NCT01772758 -NCT01769885 -NCT01772797 -NCT01769911 -NCT01772849 -NCT01769950 -NCT01772862 -NCT01770002 -NCT01772888 -NCT01770080 -NCT01772953 -NCT01770106 -NCT01772979 -NCT01770132 -NCT01773018 -NCT01770171 -NCT01773031 -NCT01770197 -NCT01773109 -NCT01770210 -NCT01773330 -NCT01770223 -NCT01773395 -NCT01770249 -NCT01773408 -NCT01770275 -NCT01773421 -NCT01770301 -NCT01773434 -NCT01770353 -NCT01773447 -NCT01770366 -NCT01773460 -NCT01770405 -NCT01773486 -NCT01770418 -NCT01773538 -NCT01770431 -NCT01773616 -NCT01770483 -NCT01773772 -NCT01770509 -NCT01773785 -NCT01770626 -NCT01773837 -NCT01770795 -NCT01773889 -NCT01770886 -NCT01774019 -NCT01770951 -NCT01774045 -NCT01770964 -NCT01774071 -NCT01771003 -NCT01774162 -NCT01771107 -NCT01774253 -NCT01771133 -NCT01774279 -NCT01771146 -NCT01774318 -NCT01771159 -NCT01774344 -NCT01771172 -NCT01774357 -NCT01771276 -NCT01774409 -NCT01771289 -NCT01774448 -NCT01771328 -NCT01774526 -NCT01771458 -NCT01774578 -NCT01771666 -NCT01774630 -NCT01771796 -NCT01774721 -NCT01771952 -NCT01774760 -NCT01772004 -NCT01774786 -NCT01772043 -NCT01774851 -NCT01772095 -NCT01774903 -NCT01772121 -NCT01774916 -NCT01772134 -NCT01775085 -NCT01772147 -NCT01775098 -NCT01772199 -NCT01775215 -NCT01772316 -NCT01781520 -NCT01775280 -NCT01778803 -NCT01775293 -NCT01778738 -NCT01775332 -NCT01778920 -NCT01775371 -NCT01778933 -NCT01775423 -NCT01778959 -NCT01775449 -NCT01779050 -NCT01775475 -NCT01779063 -NCT01775488 -NCT01779115 -NCT01775501 -NCT01779128 -NCT01775553 -NCT01779167 -NCT01775592 -NCT01779206 -NCT01775618 -NCT01779219 -NCT01775709 -NCT01779323 -NCT01775813 -NCT01779336 -NCT01775865 -NCT01779479 -NCT01775917 -NCT01779583 -NCT01775930 -NCT01779596 -NCT01775995 -NCT01779609 -NCT01776008 -NCT01779635 -NCT01776021 -NCT01779726 -NCT01776060 -NCT01779791 -NCT01776125 -NCT01779843 -NCT01776255 -NCT01779882 -NCT01776307 -NCT01779921 -NCT01776372 -NCT01779947 -NCT01776385 -NCT01780025 -NCT01776684 -NCT01780064 -NCT01776723 -NCT01780220 -NCT01776749 -NCT01780285 -NCT01776840 -NCT01780298 -NCT01776931 -NCT01780311 -NCT01777152 -NCT01780350 -NCT01777243 -NCT01780532 -NCT01777334 -NCT01780545 -NCT01777347 -NCT01780610 -NCT01777373 -NCT01780623 -NCT01777477 -NCT01780649 -NCT01777594 -NCT01780662 -NCT01777633 -NCT01780675 -NCT01777711 -NCT01780818 -NCT01777776 -NCT01780831 -NCT01777815 -NCT01780857 -NCT01777828 -NCT01780870 -NCT01777867 -NCT01780961 -NCT01777919 -NCT01781026 -NCT01777945 -NCT01781039 -NCT01777971 -NCT01781182 -NCT01778023 -NCT01781299 -NCT01778088 -NCT01781325 -NCT01778127 -NCT01781338 -NCT01778192 -NCT01781403 -NCT01778270 -NCT01781429 -NCT01778348 -NCT01781455 -NCT01778439 -NCT01781468 -NCT01778530 -NCT01781507 -NCT01778673 -NCT01786473 -NCT01781546 -NCT01784120 -NCT01781572 -NCT01784107 -NCT01781650 -NCT01784185 -NCT01781663 -NCT01784237 -NCT01781689 -NCT01784302 -NCT01781715 -NCT01784328 -NCT01781728 -NCT01784393 -NCT01781741 -NCT01784406 -NCT01781793 -NCT01784549 -NCT01781975 -NCT01784640 -NCT01781988 -NCT01784757 -NCT01782040 -NCT01784848 -NCT01782053 -NCT01784861 -NCT01782105 -NCT01784874 -NCT01782274 -NCT01784900 -NCT01782287 -NCT01784913 -NCT01782313 -NCT01784939 -NCT01782339 -NCT01784952 -NCT01782378 -NCT01784978 -NCT01782443 -NCT01785173 -NCT01782495 -NCT01785186 -NCT01782508 -NCT01785212 -NCT01782521 -NCT01785316 -NCT01782560 -NCT01785368 -NCT01782573 -NCT01785394 -NCT01782625 -NCT01785420 -NCT01782651 -NCT01785459 -NCT01782677 -NCT01785511 -NCT01782690 -NCT01785550 -NCT01782703 -NCT01785563 -NCT01782768 -NCT01785576 -NCT01782820 -NCT01785589 -NCT01782963 -NCT01785602 -NCT01782976 -NCT01785641 -NCT01783054 -NCT01785680 -NCT01783171 -NCT01785706 -NCT01783197 -NCT01785719 -NCT01783236 -NCT01785758 -NCT01783418 -NCT01785810 -NCT01783431 -NCT01785940 -NCT01783444 -NCT01785979 -NCT01783522 -NCT01785992 -NCT01783535 -NCT01786018 -NCT01783574 -NCT01786031 -NCT01783587 -NCT01786096 -NCT01783600 -NCT01786109 -NCT01783639 -NCT01786122 -NCT01783730 -NCT01786135 -NCT01783756 -NCT01786174 -NCT01783808 -NCT01786187 -NCT01783834 -NCT01786200 -NCT01783938 -NCT01786252 -NCT01783951 -NCT01786265 -NCT01784042 -NCT01786278 -NCT01784055 -NCT01786343 -NCT01784068 -NCT01792245 -NCT01786512 -NCT01789658 -NCT01786538 -NCT01789567 -NCT01786590 -NCT01789684 -NCT01786603 -NCT01789723 -NCT01786694 -NCT01789775 -NCT01786720 -NCT01789788 -NCT01786746 -NCT01789827 -NCT01786811 -NCT01789840 -NCT01786837 -NCT01789866 -NCT01786889 -NCT01789892 -NCT01786902 -NCT01790022 -NCT01786928 -NCT01790035 -NCT01787006 -NCT01790074 -NCT01787084 -NCT01790087 -NCT01787097 -NCT01790126 -NCT01787175 -NCT01790139 -NCT01787188 -NCT01790204 -NCT01787331 -NCT01790230 -NCT01787383 -NCT01790269 -NCT01787409 -NCT01790282 -NCT01787474 -NCT01790399 -NCT01787487 -NCT01790425 -NCT01787500 -NCT01790451 -NCT01787539 -NCT01790503 -NCT01787552 -NCT01790516 -NCT01787591 -NCT01790568 -NCT01787604 -NCT01790633 -NCT01787630 -NCT01790685 -NCT01787760 -NCT01790737 -NCT01788007 -NCT01790776 -NCT01788020 -NCT01790789 -NCT01788085 -NCT01790919 -NCT01788098 -NCT01790932 -NCT01788111 -NCT01791088 -NCT01788137 -NCT01791153 -NCT01788176 -NCT01791309 -NCT01788189 -NCT01791335 -NCT01788215 -NCT01791374 -NCT01788280 -NCT01791387 -NCT01788332 -NCT01791452 -NCT01788566 -NCT01791478 -NCT01788579 -NCT01791595 -NCT01788618 -NCT01791608 -NCT01788735 -NCT01791634 -NCT01788748 -NCT01791660 -NCT01788813 -NCT01791816 -NCT01788878 -NCT01791842 -NCT01788982 -NCT01791894 -NCT01789008 -NCT01791933 -NCT01789073 -NCT01791946 -NCT01789099 -NCT01791985 -NCT01789242 -NCT01791998 -NCT01789255 -NCT01792024 -NCT01789268 -NCT01792050 -NCT01789281 -NCT01792102 -NCT01789502 -NCT01797627 -NCT01792310 -NCT01795274 -NCT01792336 -NCT01795157 -NCT01792362 -NCT01795300 -NCT01792427 -NCT01795313 -NCT01792466 -NCT01795365 -NCT01792479 -NCT01795378 -NCT01792505 -NCT01795404 -NCT01792687 -NCT01795430 -NCT01792726 -NCT01795443 -NCT01792739 -NCT01795456 -NCT01792778 -NCT01795521 -NCT01792791 -NCT01795573 -NCT01792817 -NCT01795586 -NCT01792830 -NCT01795612 -NCT01792934 -NCT01795703 -NCT01792947 -NCT01795716 -NCT01792973 -NCT01795768 -NCT01792999 -NCT01795794 -NCT01793025 -NCT01795898 -NCT01793051 -NCT01795924 -NCT01793064 -NCT01795976 -NCT01793155 -NCT01796002 -NCT01793168 -NCT01796028 -NCT01793272 -NCT01796041 -NCT01793480 -NCT01796145 -NCT01793493 -NCT01796171 -NCT01793519 -NCT01796184 -NCT01793532 -NCT01796197 -NCT01793584 -NCT01796288 -NCT01793636 -NCT01796301 -NCT01793649 -NCT01796314 -NCT01793883 -NCT01796353 -NCT01793922 -NCT01796405 -NCT01793948 -NCT01796444 -NCT01793987 -NCT01796470 -NCT01794026 -NCT01796548 -NCT01794039 -NCT01796652 -NCT01794104 -NCT01796665 -NCT01794117 -NCT01796782 -NCT01794169 -NCT01796808 -NCT01794299 -NCT01796821 -NCT01794403 -NCT01796860 -NCT01794481 -NCT01796977 -NCT01794507 -NCT01797016 -NCT01794520 -NCT01797055 -NCT01794572 -NCT01797068 -NCT01794585 -NCT01797120 -NCT01794624 -NCT01797159 -NCT01794702 -NCT01797289 -NCT01794793 -NCT01797315 -NCT01794819 -NCT01797354 -NCT01794845 -NCT01797471 -NCT01794936 -NCT01797484 -NCT01795014 -NCT01797523 -NCT01795027 -NCT01797575 -NCT01795131 -NCT01802879 -NCT01797692 -NCT01800591 -NCT01797718 -NCT01800565 -NCT01797848 -NCT01800604 -NCT01797874 -NCT01800617 -NCT01797900 -NCT01800630 -NCT01797913 -NCT01800643 -NCT01798004 -NCT01800656 -NCT01798108 -NCT01800695 -NCT01798134 -NCT01800799 -NCT01798147 -NCT01800812 -NCT01798160 -NCT01800838 -NCT01798173 -NCT01800981 -NCT01798212 -NCT01800994 -NCT01798251 -NCT01801046 -NCT01798277 -NCT01801059 -NCT01798316 -NCT01801111 -NCT01798368 -NCT01801137 -NCT01798446 -NCT01801163 -NCT01798485 -NCT01801358 -NCT01798628 -NCT01801371 -NCT01798641 -NCT01801436 -NCT01798706 -NCT01801449 -NCT01798771 -NCT01801475 -NCT01798823 -NCT01801527 -NCT01798875 -NCT01801553 -NCT01798901 -NCT01801644 -NCT01798914 -NCT01801670 -NCT01798953 -NCT01801735 -NCT01799018 -NCT01801761 -NCT01799031 -NCT01801826 -NCT01799044 -NCT01801839 -NCT01799070 -NCT01801852 -NCT01799083 -NCT01801878 -NCT01799109 -NCT01801904 -NCT01799135 -NCT01801930 -NCT01799161 -NCT01802008 -NCT01799213 -NCT01802021 -NCT01799278 -NCT01802060 -NCT01799317 -NCT01802138 -NCT01799382 -NCT01802190 -NCT01799408 -NCT01802242 -NCT01799499 -NCT01802307 -NCT01799538 -NCT01802320 -NCT01799889 -NCT01802333 -NCT01799902 -NCT01802346 -NCT01799915 -NCT01802398 -NCT01800071 -NCT01802450 -NCT01800149 -NCT01802463 -NCT01800162 -NCT01802567 -NCT01800188 -NCT01802632 -NCT01800305 -NCT01802645 -NCT01800422 -NCT01802684 -NCT01800487 -NCT01802723 -NCT01800500 -NCT01802749 -NCT01800526 -NCT01802814 -NCT01800552 -NCT01808248 -NCT01802905 -NCT01805089 -NCT01802970 -NCT01805076 -NCT01802996 -NCT01805271 -NCT01803009 -NCT01805375 -NCT01803061 -NCT01805453 -NCT01803113 -NCT01805557 -NCT01803139 -NCT01805596 -NCT01803152 -NCT01805622 -NCT01803256 -NCT01805817 -NCT01803269 -NCT01805882 -NCT01803282 -NCT01805908 -NCT01803295 -NCT01806025 -NCT01803334 -NCT01806064 -NCT01803386 -NCT01806116 -NCT01803477 -NCT01806129 -NCT01803503 -NCT01806181 -NCT01803542 -NCT01806207 -NCT01803607 -NCT01806259 -NCT01803646 -NCT01806272 -NCT01803672 -NCT01806324 -NCT01803685 -NCT01806337 -NCT01803711 -NCT01806350 -NCT01803906 -NCT01806376 -NCT01803919 -NCT01806506 -NCT01803958 -NCT01806558 -NCT01803997 -NCT01806571 -NCT01804036 -NCT01806649 -NCT01804101 -NCT01806675 -NCT01804127 -NCT01806740 -NCT01804140 -NCT01806753 -NCT01804166 -NCT01806792 -NCT01804179 -NCT01806857 -NCT01804205 -NCT01806961 -NCT01804231 -NCT01807065 -NCT01804309 -NCT01807091 -NCT01804335 -NCT01807117 -NCT01804374 -NCT01807156 -NCT01804426 -NCT01807182 -NCT01804465 -NCT01807286 -NCT01804478 -NCT01807325 -NCT01804517 -NCT01807429 -NCT01804530 -NCT01807468 -NCT01804543 -NCT01807481 -NCT01804595 -NCT01807533 -NCT01804621 -NCT01807546 -NCT01804634 -NCT01807559 -NCT01804647 -NCT01807598 -NCT01804686 -NCT01807611 -NCT01804712 -NCT01807637 -NCT01804751 -NCT01807832 -NCT01804790 -NCT01807936 -NCT01804829 -NCT01808040 -NCT01804946 -NCT01808131 -NCT01804985 -NCT01808183 -NCT01804998 -NCT01808222 -NCT01805037 -NCT01830478 -NCT01808417 -NCT01829737 -NCT01808508 -NCT01829841 -NCT01808534 -NCT01829906 -NCT01808573 -NCT01829958 -NCT01808599 -NCT01829971 -NCT01808638 -NCT01830101 -NCT01808742 -NCT01830153 -NCT01808755 -NCT01830166 -NCT01808820 -NCT01830231 -NCT01808885 -NCT01830244 -NCT01808950 -NCT01830270 -NCT01809028 -NCT01830283 -NCT01809106 -NCT01830322 -NCT01809119 -NCT01830361 -NCT01809132 -NCT01830387 -NCT01809171 -NCT01830452 -NCT01809210 -NCT01830465 -NCT01809262 -NCT01825824 -NCT01825863 -NCT01825902 -NCT01825967 -NCT01826045 -NCT01826071 -NCT01826097 -NCT01826201 -NCT01826214 -NCT01826227 -NCT01826266 -NCT01826279 -NCT01826396 -NCT01826448 -NCT01826474 -NCT01826487 -NCT01826513 -NCT01826565 -NCT01826617 -NCT01826682 -NCT01826708 -NCT01826838 -NCT01826851 -NCT01826864 -NCT01826877 -NCT01827046 -NCT01827111 -NCT01827137 -NCT01827150 -NCT01827163 -NCT01827267 -NCT01827371 -NCT01827384 -NCT01827436 -NCT01827462 -NCT01827553 -NCT01827592 -NCT01827605 -NCT01827618 -NCT01827644 -NCT01827709 -NCT01827787 -NCT01827813 -NCT01827904 -NCT01827930 -NCT01827943 -NCT01827969 -NCT01828021 -NCT01828034 -NCT01828073 -NCT01828099 -NCT01828112 -NCT01828125 -NCT01828138 -NCT01828177 -NCT01828216 -NCT01828255 -NCT01828294 -NCT01828333 -NCT01828346 -NCT01828476 -NCT01828489 -NCT01828502 -NCT01828554 -NCT01828645 -NCT01828684 -NCT01828723 -NCT01828736 -NCT01828762 -NCT01828775 -NCT01828918 -NCT01829035 -NCT01829074 -NCT01829113 -NCT01829139 -NCT01829178 -NCT01829191 -NCT01829217 -NCT01829373 -NCT01829386 -NCT01829399 -NCT01829412 -NCT01829503 -NCT01829568 -NCT01829646 -NCT01829711 -NCT01809301 -NCT01823198 -NCT01809379 -NCT01823224 -NCT01809392 -NCT01823250 -NCT01809496 -NCT01823315 -NCT01809691 -NCT01823393 -NCT01809717 -NCT01823432 -NCT01809730 -NCT01823471 -NCT01809756 -NCT01823562 -NCT01809808 -NCT01823679 -NCT01809847 -NCT01823718 -NCT01809912 -NCT01823783 -NCT01810016 -NCT01823835 -NCT01810068 -NCT01823848 -NCT01810081 -NCT01823939 -NCT01810120 -NCT01823952 -NCT01810237 -NCT01823965 -NCT01810302 -NCT01823978 -NCT01810367 -NCT01823991 -NCT01810393 -NCT01824004 -NCT01810432 -NCT01824108 -NCT01810666 -NCT01824186 -NCT01810692 -NCT01824329 -NCT01810705 -NCT01824342 -NCT01810744 -NCT01824368 -NCT01810757 -NCT01824420 -NCT01810770 -NCT01824459 -NCT01810809 -NCT01824498 -NCT01810835 -NCT01824537 -NCT01810848 -NCT01824615 -NCT01810874 -NCT01824654 -NCT01810913 -NCT01824693 -NCT01810939 -NCT01824745 -NCT01810952 -NCT01824823 -NCT01810965 -NCT01824836 -NCT01811069 -NCT01824875 -NCT01811095 -NCT01824901 -NCT01811121 -NCT01824940 -NCT01811147 -NCT01824966 -NCT01811212 -NCT01824992 -NCT01811264 -NCT01825187 -NCT01811277 -NCT01825239 -NCT01811368 -NCT01825330 -NCT01811394 -NCT01825408 -NCT01811459 -NCT01825421 -NCT01811498 -NCT01825434 -NCT01811537 -NCT01825538 -NCT01811563 -NCT01825603 -NCT01811654 -NCT01825642 -NCT01811706 -NCT01825785 -NCT01811771 -NCT01822665 -NCT01822691 -NCT01822756 -NCT01822795 -NCT01822808 -NCT01822860 -NCT01822873 -NCT01822886 -NCT01822899 -NCT01822977 -NCT01823003 -NCT01823068 -NCT01823107 -NCT01823172 -NCT01811810 -NCT01814449 -NCT01811823 -NCT01814345 -NCT01811862 -NCT01814488 -NCT01811992 -NCT01814501 -NCT01812005 -NCT01814553 -NCT01812018 -NCT01814631 -NCT01812031 -NCT01814813 -NCT01812070 -NCT01814826 -NCT01812096 -NCT01814865 -NCT01812109 -NCT01814969 -NCT01812161 -NCT01814982 -NCT01812252 -NCT01815021 -NCT01812278 -NCT01815086 -NCT01812304 -NCT01815112 -NCT01812369 -NCT01815190 -NCT01812395 -NCT01815242 -NCT01812447 -NCT01815281 -NCT01812460 -NCT01815294 -NCT01812486 -NCT01815307 -NCT01812551 -NCT01815333 -NCT01812603 -NCT01815346 -NCT01812616 -NCT01815359 -NCT01812668 -NCT01815424 -NCT01812694 -NCT01815476 -NCT01812720 -NCT01815515 -NCT01812746 -NCT01815528 -NCT01812837 -NCT01815606 -NCT01812876 -NCT01815645 -NCT01812902 -NCT01815697 -NCT01812928 -NCT01821443 -NCT01813006 -NCT01821482 -NCT01813058 -NCT01821495 -NCT01813071 -NCT01821586 -NCT01813084 -NCT01821612 -NCT01813097 -NCT01821638 -NCT01813136 -NCT01821729 -NCT01813162 -NCT01821768 -NCT01813214 -NCT01821781 -NCT01813227 -NCT01821833 -NCT01813240 -NCT01821859 -NCT01813253 -NCT01821911 -NCT01813396 -NCT01822015 -NCT01813409 -NCT01822106 -NCT01813474 -NCT01822119 -NCT01813539 -NCT01822158 -NCT01813630 -NCT01822210 -NCT01813734 -NCT01822275 -NCT01813825 -NCT01822301 -NCT01813877 -NCT01822314 -NCT01813916 -NCT01822379 -NCT01813929 -NCT01822496 -NCT01813994 -NCT01822509 -NCT01814033 -NCT01822522 -NCT01814046 -NCT01822561 -NCT01814111 -NCT01822613 -NCT01814228 -NCT01822652 -NCT01815710 -NCT01818739 -NCT01815749 -NCT01818713 -NCT01815775 -NCT01818752 -NCT01815827 -NCT01818804 -NCT01815840 -NCT01818973 -NCT01815853 -NCT01818986 -NCT01815905 -NCT01818999 -NCT01815918 -NCT01819077 -NCT01815970 -NCT01819220 -NCT01816035 -NCT01819233 -NCT01816048 -NCT01819272 -NCT01816230 -NCT01819285 -NCT01816256 -NCT01819324 -NCT01816295 -NCT01819363 -NCT01816334 -NCT01819376 -NCT01816490 -NCT01819389 -NCT01816516 -NCT01819428 -NCT01816555 -NCT01819441 -NCT01816594 -NCT01819480 -NCT01816659 -NCT01819519 -NCT01816711 -NCT01819558 -NCT01816815 -NCT01819649 -NCT01816841 -NCT01819701 -NCT01816919 -NCT01819714 -NCT01816932 -NCT01819792 -NCT01816971 -NCT01819831 -NCT01816984 -NCT01819844 -NCT01817023 -NCT01819948 -NCT01817075 -NCT01819961 -NCT01817192 -NCT01819987 -NCT01817205 -NCT01820091 -NCT01817257 -NCT01820117 -NCT01817296 -NCT01820234 -NCT01817322 -NCT01820260 -NCT01817335 -NCT01820299 -NCT01817374 -NCT01820312 -NCT01817400 -NCT01820325 -NCT01817452 -NCT01820364 -NCT01817686 -NCT01820416 -NCT01817738 -NCT01820546 -NCT01817751 -NCT01820624 -NCT01817764 -NCT01820754 -NCT01817868 -NCT01820793 -NCT01817894 -NCT01820858 -NCT01817907 -NCT01820871 -NCT01818050 -NCT01820884 -NCT01818063 -NCT01820910 -NCT01818089 -NCT01821001 -NCT01818180 -NCT01821040 -NCT01818206 -NCT01821105 -NCT01818323 -NCT01821118 -NCT01818336 -NCT01821196 -NCT01818349 -NCT01821209 -NCT01818479 -NCT01821248 -NCT01818505 -NCT01821404 -NCT01818557 -NCT01846182 -NCT01830504 -NCT01845792 -NCT01830556 -NCT01845805 -NCT01830582 -NCT01845831 -NCT01830621 -NCT01845883 -NCT01830751 -NCT01845922 -NCT01830777 -NCT01845935 -NCT01830816 -NCT01846091 -NCT01830894 -NCT01846130 -NCT01830907 -NCT01846143 -NCT01830933 -NCT01841021 -NCT01841047 -NCT01841060 -NCT01841294 -NCT01841333 -NCT01841372 -NCT01841463 -NCT01841489 -NCT01841515 -NCT01841528 -NCT01841541 -NCT01841554 -NCT01841723 -NCT01841736 -NCT01841749 -NCT01841775 -NCT01841814 -NCT01841827 -NCT01841840 -NCT01841957 -NCT01842035 -NCT01842048 -NCT01842113 -NCT01842139 -NCT01842165 -NCT01842230 -NCT01842256 -NCT01842308 -NCT01842321 -NCT01842347 -NCT01842373 -NCT01842399 -NCT01842425 -NCT01842438 -NCT01842490 -NCT01842542 -NCT01842581 -NCT01842594 -NCT01842633 -NCT01842646 -NCT01842672 -NCT01842724 -NCT01842737 -NCT01842750 -NCT01842893 -NCT01842971 -NCT01843049 -NCT01843062 -NCT01843179 -NCT01843218 -NCT01843374 -NCT01843413 -NCT01843439 -NCT01843452 -NCT01843478 -NCT01843582 -NCT01843608 -NCT01843634 -NCT01843647 -NCT01843660 -NCT01843673 -NCT01843725 -NCT01843738 -NCT01843803 -NCT01843816 -NCT01843829 -NCT01843868 -NCT01843998 -NCT01844076 -NCT01844180 -NCT01844245 -NCT01844271 -NCT01844375 -NCT01844440 -NCT01844505 -NCT01844583 -NCT01844609 -NCT01844622 -NCT01844661 -NCT01844674 -NCT01844765 -NCT01844791 -NCT01844817 -NCT01844856 -NCT01844869 -NCT01844934 -NCT01844947 -NCT01844986 -NCT01844999 -NCT01845025 -NCT01845090 -NCT01845285 -NCT01845337 -NCT01845376 -NCT01845441 -NCT01845454 -NCT01845493 -NCT01845506 -NCT01845519 -NCT01845532 -NCT01845662 -NCT01845675 -NCT01845727 -NCT01845779 -NCT01831011 -NCT01833546 -NCT01831024 -NCT01833533 -NCT01831037 -NCT01833572 -NCT01831076 -NCT01833637 -NCT01831089 -NCT01833650 -NCT01831115 -NCT01833676 -NCT01831180 -NCT01833728 -NCT01831232 -NCT01833767 -NCT01831297 -NCT01833806 -NCT01831310 -NCT01833832 -NCT01831375 -NCT01833858 -NCT01831388 -NCT01833884 -NCT01831505 -NCT01833923 -NCT01831531 -NCT01834001 -NCT01831726 -NCT01834014 -NCT01831739 -NCT01834027 -NCT01831843 -NCT01834079 -NCT01831882 -NCT01834170 -NCT01831960 -NCT01834183 -NCT01831973 -NCT01834235 -NCT01832051 -NCT01834248 -NCT01832116 -NCT01839500 -NCT01832233 -NCT01839539 -NCT01832246 -NCT01839604 -NCT01832259 -NCT01839617 -NCT01832298 -NCT01839682 -NCT01832311 -NCT01839721 -NCT01832402 -NCT01839747 -NCT01832467 -NCT01839773 -NCT01832506 -NCT01839799 -NCT01832623 -NCT01839838 -NCT01832636 -NCT01839851 -NCT01832727 -NCT01839877 -NCT01832753 -NCT01839916 -NCT01832766 -NCT01839942 -NCT01832805 -NCT01839955 -NCT01832857 -NCT01839981 -NCT01832870 -NCT01839994 -NCT01832922 -NCT01840007 -NCT01832935 -NCT01840111 -NCT01832948 -NCT01840137 -NCT01832961 -NCT01840150 -NCT01832974 -NCT01840163 -NCT01832987 -NCT01840189 -NCT01833026 -NCT01840306 -NCT01833065 -NCT01840332 -NCT01833091 -NCT01840436 -NCT01833143 -NCT01840449 -NCT01833169 -NCT01840488 -NCT01833208 -NCT01840566 -NCT01833273 -NCT01840579 -NCT01833286 -NCT01840592 -NCT01833299 -NCT01840618 -NCT01833325 -NCT01840670 -NCT01833390 -NCT01840852 -NCT01833520 -NCT01840943 -NCT01834300 -NCT01837147 -NCT01834469 -NCT01837095 -NCT01834521 -NCT01837160 -NCT01834651 -NCT01837199 -NCT01834742 -NCT01837251 -NCT01834898 -NCT01837290 -NCT01834950 -NCT01837303 -NCT01834963 -NCT01837316 -NCT01835041 -NCT01837329 -NCT01835054 -NCT01837342 -NCT01835067 -NCT01837381 -NCT01835145 -NCT01837407 -NCT01835158 -NCT01837459 -NCT01835184 -NCT01837524 -NCT01835223 -NCT01837602 -NCT01835236 -NCT01837667 -NCT01835288 -NCT01837693 -NCT01835379 -NCT01837745 -NCT01835483 -NCT01837784 -NCT01835496 -NCT01837862 -NCT01835509 -NCT01837927 -NCT01835522 -NCT01837979 -NCT01835561 -NCT01838057 -NCT01835587 -NCT01838109 -NCT01835626 -NCT01838122 -NCT01835756 -NCT01838200 -NCT01835860 -NCT01838252 -NCT01835873 -NCT01838317 -NCT01835964 -NCT01838343 -NCT01835977 -NCT01838356 -NCT01836029 -NCT01838369 -NCT01836055 -NCT01838395 -NCT01836107 -NCT01838434 -NCT01836120 -NCT01838447 -NCT01836172 -NCT01838460 -NCT01836211 -NCT01838538 -NCT01836237 -NCT01838551 -NCT01836341 -NCT01838564 -NCT01836354 -NCT01838642 -NCT01836367 -NCT01838655 -NCT01836393 -NCT01838668 -NCT01836406 -NCT01838720 -NCT01836432 -NCT01838980 -NCT01836536 -NCT01839032 -NCT01836549 -NCT01839097 -NCT01836575 -NCT01839110 -NCT01836588 -NCT01839175 -NCT01836653 -NCT01839188 -NCT01836679 -NCT01839240 -NCT01836692 -NCT01839331 -NCT01836705 -NCT01839370 -NCT01836822 -NCT01839383 -NCT01836926 -NCT01839448 -NCT01836978 -NCT01839461 -NCT01836991 -NCT01839487 -NCT01837017 -NCT01856452 -NCT01846221 -NCT01848990 -NCT01846234 -NCT01848925 -NCT01846286 -NCT01849016 -NCT01846390 -NCT01849055 -NCT01846416 -NCT01849133 -NCT01846429 -NCT01849146 -NCT01846442 -NCT01849159 -NCT01846468 -NCT01849224 -NCT01846507 -NCT01849250 -NCT01846520 -NCT01849263 -NCT01846533 -NCT01849276 -NCT01846611 -NCT01849302 -NCT01846624 -NCT01849380 -NCT01846650 -NCT01849406 -NCT01846676 -NCT01849445 -NCT01846689 -NCT01849484 -NCT01846793 -NCT01854723 -NCT01846806 -NCT01854749 -NCT01846819 -NCT01854970 -NCT01846832 -NCT01855126 -NCT01846871 -NCT01855165 -NCT01847001 -NCT01855178 -NCT01847027 -NCT01855243 -NCT01847118 -NCT01855308 -NCT01847157 -NCT01855334 -NCT01847209 -NCT01855360 -NCT01847235 -NCT01855425 -NCT01847274 -NCT01855451 -NCT01847300 -NCT01855477 -NCT01847326 -NCT01855503 -NCT01847352 -NCT01855516 -NCT01847378 -NCT01855568 -NCT01847495 -NCT01855607 -NCT01847573 -NCT01855672 -NCT01847599 -NCT01855724 -NCT01847651 -NCT01855750 -NCT01847677 -NCT01855828 -NCT01847690 -NCT01855841 -NCT01847703 -NCT01855854 -NCT01847794 -NCT01855880 -NCT01847937 -NCT01855932 -NCT01848015 -NCT01855958 -NCT01848041 -NCT01855971 -NCT01848067 -NCT01856023 -NCT01848132 -NCT01856036 -NCT01848145 -NCT01856101 -NCT01848171 -NCT01856114 -NCT01848197 -NCT01856140 -NCT01848353 -NCT01856192 -NCT01848457 -NCT01856205 -NCT01848600 -NCT01856270 -NCT01848613 -NCT01856283 -NCT01848652 -NCT01856296 -NCT01848756 -NCT01856322 -NCT01848782 -NCT01856361 -NCT01848834 -NCT01856426 -NCT01849510 -NCT01852006 -NCT01849523 -NCT01851941 -NCT01849536 -NCT01852032 -NCT01849588 -NCT01852045 -NCT01849627 -NCT01852266 -NCT01849666 -NCT01852292 -NCT01849744 -NCT01852435 -NCT01849770 -NCT01852448 -NCT01849783 -NCT01852578 -NCT01849796 -NCT01852591 -NCT01849848 -NCT01852708 -NCT01849874 -NCT01852786 -NCT01849939 -NCT01852799 -NCT01849952 -NCT01852864 -NCT01849978 -NCT01852890 -NCT01850004 -NCT01852968 -NCT01850030 -NCT01853046 -NCT01850095 -NCT01853098 -NCT01850108 -NCT01853202 -NCT01850147 -NCT01853228 -NCT01850303 -NCT01853293 -NCT01850316 -NCT01853306 -NCT01850368 -NCT01853319 -NCT01850498 -NCT01853436 -NCT01850524 -NCT01853579 -NCT01850563 -NCT01853618 -NCT01850628 -NCT01853631 -NCT01850654 -NCT01853644 -NCT01850667 -NCT01853670 -NCT01850693 -NCT01853748 -NCT01850745 -NCT01853774 -NCT01850758 -NCT01853787 -NCT01850771 -NCT01853800 -NCT01850797 -NCT01853813 -NCT01850836 -NCT01853826 -NCT01850888 -NCT01853865 -NCT01850979 -NCT01853878 -NCT01851018 -NCT01854021 -NCT01851044 -NCT01854034 -NCT01851096 -NCT01854047 -NCT01851109 -NCT01854099 -NCT01851135 -NCT01854203 -NCT01851174 -NCT01854229 -NCT01851200 -NCT01854255 -NCT01851226 -NCT01854268 -NCT01851252 -NCT01854294 -NCT01851278 -NCT01854372 -NCT01851369 -NCT01854385 -NCT01851408 -NCT01854515 -NCT01851499 -NCT01854528 -NCT01851551 -NCT01854554 -NCT01851577 -NCT01854567 -NCT01851681 -NCT01854580 -NCT01851733 -NCT01854606 -NCT01851772 -NCT01854684 -NCT01851824 -NCT01862068 -NCT01856478 -NCT01859234 -NCT01856543 -NCT01859221 -NCT01856621 -NCT01859286 -NCT01856686 -NCT01859312 -NCT01856699 -NCT01859429 -NCT01856751 -NCT01859442 -NCT01856777 -NCT01859507 -NCT01856803 -NCT01859663 -NCT01856855 -NCT01859689 -NCT01856868 -NCT01859728 -NCT01856920 -NCT01859741 -NCT01856933 -NCT01859819 -NCT01856972 -NCT01859845 -NCT01857037 -NCT01859858 -NCT01857102 -NCT01859936 -NCT01857115 -NCT01859949 -NCT01857141 -NCT01860027 -NCT01857193 -NCT01860040 -NCT01857271 -NCT01860222 -NCT01857310 -NCT01860482 -NCT01857401 -NCT01860508 -NCT01857440 -NCT01860534 -NCT01857453 -NCT01860612 -NCT01857505 -NCT01860638 -NCT01857570 -NCT01860742 -NCT01857661 -NCT01860833 -NCT01857713 -NCT01860898 -NCT01857726 -NCT01860937 -NCT01857752 -NCT01860963 -NCT01857778 -NCT01861002 -NCT01857817 -NCT01861054 -NCT01857882 -NCT01861067 -NCT01857934 -NCT01861093 -NCT01857947 -NCT01861106 -NCT01857999 -NCT01861223 -NCT01858025 -NCT01861301 -NCT01858116 -NCT01861314 -NCT01858129 -NCT01861340 -NCT01858155 -NCT01861431 -NCT01858168 -NCT01861496 -NCT01858207 -NCT01861509 -NCT01858389 -NCT01861535 -NCT01858558 -NCT01861639 -NCT01858571 -NCT01861652 -NCT01858649 -NCT01861678 -NCT01858662 -NCT01861691 -NCT01858688 -NCT01861704 -NCT01858740 -NCT01861717 -NCT01858766 -NCT01861873 -NCT01858883 -NCT01861912 -NCT01858922 -NCT01861938 -NCT01858935 -NCT01861951 -NCT01858961 -NCT01861977 -NCT01859026 -NCT01861990 -NCT01859130 -NCT01862003 -NCT01859182 -NCT01926587 -NCT01862081 -NCT01864889 -NCT01862159 -NCT01864876 -NCT01862198 -NCT01864902 -NCT01862237 -NCT01864941 -NCT01862315 -NCT01865071 -NCT01862328 -NCT01865084 -NCT01862341 -NCT01865110 -NCT01862380 -NCT01865162 -NCT01862510 -NCT01924208 -NCT01862536 -NCT01924260 -NCT01862562 -NCT01924312 -NCT01862640 -NCT01924351 -NCT01862718 -NCT01924390 -NCT01862744 -NCT01924416 -NCT01862770 -NCT01924455 -NCT01862809 -NCT01924533 -NCT01862900 -NCT01924572 -NCT01862978 -NCT01924624 -NCT01863017 -NCT01924689 -NCT01863095 -NCT01924806 -NCT01863108 -NCT01924819 -NCT01863173 -NCT01924884 -NCT01863264 -NCT01924897 -NCT01863355 -NCT01924988 -NCT01863381 -NCT01925001 -NCT01863485 -NCT01925014 -NCT01863550 -NCT01925053 -NCT01863628 -NCT01925092 -NCT01863745 -NCT01925118 -NCT01863758 -NCT01925131 -NCT01863862 -NCT01925170 -NCT01863914 -NCT01925261 -NCT01864018 -NCT01925274 -NCT01864070 -NCT01925287 -NCT01864083 -NCT01925378 -NCT01864096 -NCT01925391 -NCT01864109 -NCT01925482 -NCT01864135 -NCT01925495 -NCT01864291 -NCT01925547 -NCT01864382 -NCT01925573 -NCT01864408 -NCT01925612 -NCT01864434 -NCT01925625 -NCT01864473 -NCT01925638 -NCT01864486 -NCT01925651 -NCT01864499 -NCT01925703 -NCT01864525 -NCT01925742 -NCT01864538 -NCT01925833 -NCT01864564 -NCT01925872 -NCT01864655 -NCT01925976 -NCT01864681 -NCT01926171 -NCT01864733 -NCT01926197 -NCT01864746 -NCT01926236 -NCT01864759 -NCT01926249 -NCT01864772 -NCT01926327 -NCT01864798 -NCT01926444 -NCT01864850 -NCT01926483 -NCT01865201 -NCT01923233 -NCT01865227 -NCT01923298 -NCT01865279 -NCT01923337 -NCT01865292 -NCT01923376 -NCT01865305 -NCT01923506 -NCT01865396 -NCT01923571 -NCT01865448 -NCT01923675 -NCT01865500 -NCT01923701 -NCT01865539 -NCT01923727 -NCT01865617 -NCT01923753 -NCT01865656 -NCT01923922 -NCT01865721 -NCT01923935 -NCT01865747 -NCT01923948 -NCT01865838 -NCT01923987 -NCT01865903 -NCT01924000 -NCT01865929 -NCT01924078 -NCT01865942 -NCT01924091 -NCT01865955 -NCT01924104 -NCT01866111 -NCT01924117 -NCT01866228 -NCT01924156 -NCT01866293 -NCT01924195 -NCT01866319 -NCT01871948 -NCT01872078 -NCT01872104 -NCT01872221 -NCT01872260 -NCT01872273 -NCT01872351 -NCT01872377 -NCT01872403 -NCT01872416 -NCT01872442 -NCT01872481 -NCT01872572 -NCT01872585 -NCT01872819 -NCT01872884 -NCT01872897 -NCT01872949 -NCT01872962 -NCT01872975 -NCT01872988 -NCT01873014 -NCT01873066 -NCT01873131 -NCT01873248 -NCT01873287 -NCT01873326 -NCT01873417 -NCT01873482 -NCT01873495 -NCT01873664 -NCT01873690 -NCT01873703 -NCT01873794 -NCT01873807 -NCT01873833 -NCT01873872 -NCT01874028 -NCT01874054 -NCT01874067 -NCT01874132 -NCT01874171 -NCT01874184 -NCT01874223 -NCT01874275 -NCT01874288 -NCT01921790 -NCT01921803 -NCT01921816 -NCT01921855 -NCT01921972 -NCT01922011 -NCT01922050 -NCT01922076 -NCT01922089 -NCT01922180 -NCT01922258 -NCT01922492 -NCT01922583 -NCT01922596 -NCT01922674 -NCT01922700 -NCT01922752 -NCT01922778 -NCT01922882 -NCT01922895 -NCT01922921 -NCT01922986 -NCT01922999 -NCT01923051 -NCT01923077 -NCT01923103 -NCT01923129 -NCT01923155 -NCT01923168 -NCT01923194 -NCT01923220 -NCT01866410 -NCT01868906 -NCT01866423 -NCT01868893 -NCT01866449 -NCT01868932 -NCT01866527 -NCT01868971 -NCT01866553 -NCT01869023 -NCT01866670 -NCT01869088 -NCT01866774 -NCT01869114 -NCT01866813 -NCT01869166 -NCT01866839 -NCT01869192 -NCT01866969 -NCT01869335 -NCT01866995 -NCT01869348 -NCT01867008 -NCT01869413 -NCT01867086 -NCT01869478 -NCT01867268 -NCT01869491 -NCT01867294 -NCT01869699 -NCT01867333 -NCT01869725 -NCT01867346 -NCT01869751 -NCT01867359 -NCT01869764 -NCT01867424 -NCT01869777 -NCT01867437 -NCT01870050 -NCT01867502 -NCT01870310 -NCT01867515 -NCT01870479 -NCT01867554 -NCT01870492 -NCT01867593 -NCT01870505 -NCT01867606 -NCT01870596 -NCT01867645 -NCT01870609 -NCT01867697 -NCT01870661 -NCT01867710 -NCT01870700 -NCT01867749 -NCT01870791 -NCT01867866 -NCT01870817 -NCT01867879 -NCT01870830 -NCT01867892 -NCT01870895 -NCT01867918 -NCT01870947 -NCT01867931 -NCT01870960 -NCT01867944 -NCT01871038 -NCT01868009 -NCT01871116 -NCT01868022 -NCT01871155 -NCT01868035 -NCT01871311 -NCT01868087 -NCT01871350 -NCT01868100 -NCT01871363 -NCT01868139 -NCT01871441 -NCT01868204 -NCT01871454 -NCT01868230 -NCT01871480 -NCT01868269 -NCT01871519 -NCT01868334 -NCT01871545 -NCT01868347 -NCT01871571 -NCT01868373 -NCT01871597 -NCT01868386 -NCT01871636 -NCT01868438 -NCT01871675 -NCT01868451 -NCT01871688 -NCT01868490 -NCT01871727 -NCT01868503 -NCT01871766 -NCT01868542 -NCT01871779 -NCT01868581 -NCT01871805 -NCT01868828 -NCT01871896 -NCT01868880 -NCT01921751 -NCT01874301 -NCT01919476 -NCT01874353 -NCT01919489 -NCT01874418 -NCT01919541 -NCT01874483 -NCT01919619 -NCT01874522 -NCT01919710 -NCT01874535 -NCT01919736 -NCT01874548 -NCT01919749 -NCT01874561 -NCT01919762 -NCT01874587 -NCT01919788 -NCT01874665 -NCT01919801 -NCT01874678 -NCT01919840 -NCT01874808 -NCT01919866 -NCT01874860 -NCT01919879 -NCT01874873 -NCT01920061 -NCT01874938 -NCT01920087 -NCT01875042 -NCT01920113 -NCT01875133 -NCT01920139 -NCT01875198 -NCT01920191 -NCT01875237 -NCT01920204 -NCT01875250 -NCT01920269 -NCT01875341 -NCT01920321 -NCT01875367 -NCT01920373 -NCT01875380 -NCT01920451 -NCT01875393 -NCT01920477 -NCT01875458 -NCT01920529 -NCT01875510 -NCT01920633 -NCT01875523 -NCT01920698 -NCT01875549 -NCT01920737 -NCT01875601 -NCT01920750 -NCT01875640 -NCT01920789 -NCT01875653 -NCT01920815 -NCT01875666 -NCT01920880 -NCT01875705 -NCT01920906 -NCT01875744 -NCT01920932 -NCT01875926 -NCT01921023 -NCT01876004 -NCT01921218 -NCT01876043 -NCT01921244 -NCT01876069 -NCT01921283 -NCT01876082 -NCT01921335 -NCT01876121 -NCT01921387 -NCT01876147 -NCT01921426 -NCT01876212 -NCT01921452 -NCT01876238 -NCT01921504 -NCT01876251 -NCT01921517 -NCT01876290 -NCT01921569 -NCT01876342 -NCT01921673 -NCT01876420 -NCT01921686 -NCT01876446 -NCT01918527 -NCT01918592 -NCT01918605 -NCT01918631 -NCT01918644 -NCT01918683 -NCT01918761 -NCT01918852 -NCT01918917 -NCT01918930 -NCT01919086 -NCT01919151 -NCT01919164 -NCT01919229 -NCT01919294 -NCT01919359 -NCT01919398 -NCT01919463 -NCT01921699 -NCT01876511 -NCT01917942 -NCT01876550 -NCT01918098 -NCT01876641 -NCT01918254 -NCT01876693 -NCT01918280 -NCT01876706 -NCT01918306 -NCT01876771 -NCT01918332 -NCT01876784 -NCT01918384 -NCT01876836 -NCT01912313 -NCT01912326 -NCT01912339 -NCT01912430 -NCT01912560 -NCT01912586 -NCT01912625 -NCT01912677 -NCT01912690 -NCT01912820 -NCT01912846 -NCT01912963 -NCT01913015 -NCT01913054 -NCT01913067 -NCT01913106 -NCT01913119 -NCT01913132 -NCT01913197 -NCT01913223 -NCT01913262 -NCT01913275 -NCT01913366 -NCT01913405 -NCT01913561 -NCT01913574 -NCT01913613 -NCT01913639 -NCT01913652 -NCT01913691 -NCT01913717 -NCT01913730 -NCT01913782 -NCT01913860 -NCT01913951 -NCT01914016 -NCT01914029 -NCT01914068 -NCT01914107 -NCT01914172 -NCT01914263 -NCT01914289 -NCT01914458 -NCT01914484 -NCT01914510 -NCT01914692 -NCT01914718 -NCT01914744 -NCT01914757 -NCT01914770 -NCT01914900 -NCT01915004 -NCT01915056 -NCT01915121 -NCT01915134 -NCT01915173 -NCT01915303 -NCT01915368 -NCT01915381 -NCT01915420 -NCT01915472 -NCT01915485 -NCT01915498 -NCT01915511 -NCT01915524 -NCT01915576 -NCT01915589 -NCT01915602 -NCT01915693 -NCT01915745 -NCT01915940 -NCT01915992 -NCT01916005 -NCT01916018 -NCT01916070 -NCT01916109 -NCT01916122 -NCT01916135 -NCT01916187 -NCT01916239 -NCT01916252 -NCT01916304 -NCT01916317 -NCT01916356 -NCT01916421 -NCT01916447 -NCT01916655 -NCT01916772 -NCT01916785 -NCT01916824 -NCT01916850 -NCT01916967 -NCT01917019 -NCT01917084 -NCT01917110 -NCT01917279 -NCT01917331 -NCT01917474 -NCT01917500 -NCT01917513 -NCT01917539 -NCT01917552 -NCT01917578 -NCT01917617 -NCT01917695 -NCT01917708 -NCT01917773 -NCT01917890 -NCT01918410 -NCT01876901 -NCT01910012 -NCT01876927 -NCT01910025 -NCT01876953 -NCT01910038 -NCT01877005 -NCT01910064 -NCT01877018 -NCT01910129 -NCT01877083 -NCT01910181 -NCT01877096 -NCT01910233 -NCT01877122 -NCT01910350 -NCT01877174 -NCT01910428 -NCT01877187 -NCT01910545 -NCT01877278 -NCT01910584 -NCT01877317 -NCT01910597 -NCT01877382 -NCT01910610 -NCT01877564 -NCT01910753 -NCT01877590 -NCT01910792 -NCT01877616 -NCT01910844 -NCT01877681 -NCT01910870 -NCT01877694 -NCT01910909 -NCT01877707 -NCT01910948 -NCT01877811 -NCT01910974 -NCT01877863 -NCT01910987 -NCT01878019 -NCT01911000 -NCT01878032 -NCT01911247 -NCT01878058 -NCT01911260 -NCT01878136 -NCT01911273 -NCT01878175 -NCT01911325 -NCT01878188 -NCT01911351 -NCT01878214 -NCT01911416 -NCT01878266 -NCT01911455 -NCT01878370 -NCT01911507 -NCT01878422 -NCT01911598 -NCT01878448 -NCT01911689 -NCT01878604 -NCT01911702 -NCT01878617 -NCT01911728 -NCT01878695 -NCT01911741 -NCT01878708 -NCT01911806 -NCT01878773 -NCT01911819 -NCT01878799 -NCT01911832 -NCT01878890 -NCT01911936 -NCT01878955 -NCT01911975 -NCT01879085 -NCT01912001 -NCT01879189 -NCT01912053 -NCT01879241 -NCT01912066 -NCT01879293 -NCT01912131 -NCT01879384 -NCT01912209 -NCT01879397 -NCT01912222 -NCT01879410 -NCT01912261 -NCT01879475 -NCT01908972 -NCT01909245 -NCT01909284 -NCT01909336 -NCT01909388 -NCT01909440 -NCT01909453 -NCT01909505 -NCT01909531 -NCT01909609 -NCT01909648 -NCT01909752 -NCT01909791 -NCT01909804 -NCT01909830 -NCT01909856 -NCT01909934 -NCT01909960 -NCT01912274 -NCT01879501 -NCT01907607 -NCT01879592 -NCT01907646 -NCT01879618 -NCT01907737 -NCT01879657 -NCT01907789 -NCT01879787 -NCT01907802 -NCT01879878 -NCT01907815 -NCT01879904 -NCT01907880 -NCT01879943 -NCT01907893 -NCT01879969 -NCT01907997 -NCT01880086 -NCT01908023 -NCT01880151 -NCT01908101 -NCT01880281 -NCT01908166 -NCT01880320 -NCT01908270 -NCT01880359 -NCT01908335 -NCT01880385 -NCT01908387 -NCT01880411 -NCT01908400 -NCT01880437 -NCT01908413 -NCT01880463 -NCT01908426 -NCT01880515 -NCT01908478 -NCT01880528 -NCT01908504 -NCT01880541 -NCT01908543 -NCT01880554 -NCT01908556 -NCT01880567 -NCT01908621 -NCT01880580 -NCT01908777 -NCT01880632 -NCT01908868 -NCT01880645 -NCT01908933 -NCT01880658 -NCT01904565 -NCT01904604 -NCT01904643 -NCT01904656 -NCT01904682 -NCT01904734 -NCT01904786 -NCT01904864 -NCT01904890 -NCT01904903 -NCT01904916 -NCT01905007 -NCT01905046 -NCT01905072 -NCT01905085 -NCT01905111 -NCT01905150 -NCT01905163 -NCT01905202 -NCT01905228 -NCT01905254 -NCT01905358 -NCT01905410 -NCT01905488 -NCT01905592 -NCT01905657 -NCT01905709 -NCT01905748 -NCT01905800 -NCT01905839 -NCT01905852 -NCT01905865 -NCT01905891 -NCT01905943 -NCT01905956 -NCT01905995 -NCT01906008 -NCT01906021 -NCT01906073 -NCT01906099 -NCT01906112 -NCT01906190 -NCT01906216 -NCT01906372 -NCT01906385 -NCT01906411 -NCT01906554 -NCT01906567 -NCT01906632 -NCT01906658 -NCT01906671 -NCT01906775 -NCT01906814 -NCT01906944 -NCT01906996 -NCT01907009 -NCT01907100 -NCT01907165 -NCT01907269 -NCT01907308 -NCT01907321 -NCT01907334 -NCT01907425 -NCT01907438 -NCT01907464 -NCT01907529 -NCT01880710 -NCT01883726 -NCT01880749 -NCT01883635 -NCT01880853 -NCT01883778 -NCT01880892 -NCT01883869 -NCT01880970 -NCT01883882 -NCT01880996 -NCT01883908 -NCT01881022 -NCT01883986 -NCT01881048 -NCT01884168 -NCT01881126 -NCT01884259 -NCT01881217 -NCT01884285 -NCT01881230 -NCT01884428 -NCT01881295 -NCT01884441 -NCT01881399 -NCT01884467 -NCT01881516 -NCT01884571 -NCT01881542 -NCT01884584 -NCT01881607 -NCT01884623 -NCT01881620 -NCT01884649 -NCT01881789 -NCT01884688 -NCT01881867 -NCT01884740 -NCT01881880 -NCT01884844 -NCT01881906 -NCT01884870 -NCT01881932 -NCT01884922 -NCT01882088 -NCT01884935 -NCT01882153 -NCT01884961 -NCT01882205 -NCT01902823 -NCT01882218 -NCT01902862 -NCT01882231 -NCT01902875 -NCT01882283 -NCT01902914 -NCT01882478 -NCT01902940 -NCT01882621 -NCT01902953 -NCT01882660 -NCT01902966 -NCT01882712 -NCT01903018 -NCT01882803 -NCT01903083 -NCT01882816 -NCT01903135 -NCT01882855 -NCT01903148 -NCT01882868 -NCT01903174 -NCT01882894 -NCT01903239 -NCT01882920 -NCT01903278 -NCT01882933 -NCT01903317 -NCT01882946 -NCT01903330 -NCT01882972 -NCT01903395 -NCT01882985 -NCT01903408 -NCT01883024 -NCT01903564 -NCT01883115 -NCT01903694 -NCT01883128 -NCT01903733 -NCT01883219 -NCT01903746 -NCT01883245 -NCT01903811 -NCT01883271 -NCT01903993 -NCT01883297 -NCT01904006 -NCT01883323 -NCT01904123 -NCT01883349 -NCT01904136 -NCT01883362 -NCT01904162 -NCT01883375 -NCT01904188 -NCT01883427 -NCT01904253 -NCT01883518 -NCT01904396 -NCT01883609 -NCT01904474 -NCT01885000 -NCT01894477 -NCT01885013 -NCT01894607 -NCT01885065 -NCT01894633 -NCT01885104 -NCT01894672 -NCT01885156 -NCT01894711 -NCT01885182 -NCT01894763 -NCT01885195 -NCT01894828 -NCT01885273 -NCT01894958 -NCT01885351 -NCT01900717 -NCT01885455 -NCT01900730 -NCT01885637 -NCT01900743 -NCT01885650 -NCT01900847 -NCT01885689 -NCT01900860 -NCT01885702 -NCT01900925 -NCT01885741 -NCT01900951 -NCT01885884 -NCT01901029 -NCT01885897 -NCT01901042 -NCT01885949 -NCT01901094 -NCT01886027 -NCT01901146 -NCT01886066 -NCT01901172 -NCT01886105 -NCT01901224 -NCT01886131 -NCT01901237 -NCT01886222 -NCT01901367 -NCT01886235 -NCT01901432 -NCT01886248 -NCT01901562 -NCT01886287 -NCT01901653 -NCT01886313 -NCT01901666 -NCT01886391 -NCT01901692 -NCT01886508 -NCT01901835 -NCT01886521 -NCT01901861 -NCT01886573 -NCT01901874 -NCT01886677 -NCT01901991 -NCT01886846 -NCT01902017 -NCT01886859 -NCT01902030 -NCT01886872 -NCT01902160 -NCT01886898 -NCT01902173 -NCT01886937 -NCT01902225 -NCT01886976 -NCT01902251 -NCT01887002 -NCT01902264 -NCT01887041 -NCT01902329 -NCT01887067 -NCT01902407 -NCT01887119 -NCT01902420 -NCT01887132 -NCT01902511 -NCT01887158 -NCT01902680 -NCT01887288 -NCT01892982 -NCT01893047 -NCT01893099 -NCT01893216 -NCT01893281 -NCT01893294 -NCT01893307 -NCT01893320 -NCT01893333 -NCT01893372 -NCT01893476 -NCT01893554 -NCT01893580 -NCT01893606 -NCT01893775 -NCT01893801 -NCT01893879 -NCT01893918 -NCT01893957 -NCT01894061 -NCT01894269 -NCT01894282 -NCT01894308 -NCT01894321 -NCT01894451 -NCT01902771 -NCT01887301 -NCT01890538 -NCT01887314 -NCT01890525 -NCT01887327 -NCT01890590 -NCT01887340 -NCT01890616 -NCT01887418 -NCT01890694 -NCT01887431 -NCT01890746 -NCT01887509 -NCT01890759 -NCT01887522 -NCT01890837 -NCT01887561 -NCT01890954 -NCT01887574 -NCT01891084 -NCT01887587 -NCT01891123 -NCT01887678 -NCT01891149 -NCT01887717 -NCT01891227 -NCT01887795 -NCT01891305 -NCT01887886 -NCT01891318 -NCT01887912 -NCT01891344 -NCT01888042 -NCT01891357 -NCT01888081 -NCT01891487 -NCT01888120 -NCT01891630 -NCT01888133 -NCT01891643 -NCT01888159 -NCT01891669 -NCT01888510 -NCT01891682 -NCT01888523 -NCT01891695 -NCT01888562 -NCT01891747 -NCT01888614 -NCT01891773 -NCT01888705 -NCT01891838 -NCT01888822 -NCT01891851 -NCT01888835 -NCT01891890 -NCT01888900 -NCT01891903 -NCT01888939 -NCT01891968 -NCT01888965 -NCT01891981 -NCT01888978 -NCT01892007 -NCT01888991 -NCT01892046 -NCT01889056 -NCT01892059 -NCT01889069 -NCT01892111 -NCT01889186 -NCT01892137 -NCT01889199 -NCT01892176 -NCT01889212 -NCT01892215 -NCT01889238 -NCT01892241 -NCT01889264 -NCT01892254 -NCT01889303 -NCT01892293 -NCT01889368 -NCT01892371 -NCT01889407 -NCT01892397 -NCT01889420 -NCT01892488 -NCT01889511 -NCT01892501 -NCT01889641 -NCT01892527 -NCT01889680 -NCT01892540 -NCT01889719 -NCT01892553 -NCT01889797 -NCT01892579 -NCT01889849 -NCT01892618 -NCT01889888 -NCT01892644 -NCT01890096 -NCT01892709 -NCT01890161 -NCT01892852 -NCT01890200 -NCT01892904 -NCT01890213 -NCT01892930 -NCT01890278 -NCT01900691 -NCT01895010 -NCT01898130 -NCT01895166 -NCT01898117 -NCT01895192 -NCT01898156 -NCT01895257 -NCT01898273 -NCT01895361 -NCT01898312 -NCT01895400 -NCT01898351 -NCT01895478 -NCT01898403 -NCT01895491 -NCT01898416 -NCT01895504 -NCT01898494 -NCT01895517 -NCT01898572 -NCT01895530 -NCT01898585 -NCT01895647 -NCT01898598 -NCT01895725 -NCT01898637 -NCT01895790 -NCT01898663 -NCT01895803 -NCT01898715 -NCT01895816 -NCT01898741 -NCT01895829 -NCT01898793 -NCT01895842 -NCT01898845 -NCT01895959 -NCT01898936 -NCT01896076 -NCT01898962 -NCT01896167 -NCT01899066 -NCT01896245 -NCT01899105 -NCT01896271 -NCT01899118 -NCT01896414 -NCT01899183 -NCT01896440 -NCT01899209 -NCT01896479 -NCT01899222 -NCT01896505 -NCT01899261 -NCT01896531 -NCT01899300 -NCT01896557 -NCT01899326 -NCT01896713 -NCT01899339 -NCT01896778 -NCT01899404 -NCT01896856 -NCT01899508 -NCT01896869 -NCT01899547 -NCT01896973 -NCT01899573 -NCT01896999 -NCT01899599 -NCT01897012 -NCT01899703 -NCT01897038 -NCT01899742 -NCT01897116 -NCT01899833 -NCT01897181 -NCT01899950 -NCT01897207 -NCT01899976 -NCT01897259 -NCT01899989 -NCT01897402 -NCT01900002 -NCT01897415 -NCT01900132 -NCT01897441 -NCT01900158 -NCT01897454 -NCT01900327 -NCT01897480 -NCT01900392 -NCT01897571 -NCT01900418 -NCT01897584 -NCT01900470 -NCT01897610 -NCT01900496 -NCT01897623 -NCT01900509 -NCT01897636 -NCT01900548 -NCT01897714 -NCT01900561 -NCT01898039 -NCT01900626 -NCT01898065 -NCT01900652 -NCT01898078 -NCT01900665 -NCT01898104 -NCT01931826 -NCT01926600 -NCT01928888 -NCT01926639 -NCT01928784 -NCT01926665 -NCT01929057 -NCT01926678 -NCT01929122 -NCT01926743 -NCT01929200 -NCT01926769 -NCT01929239 -NCT01926808 -NCT01929265 -NCT01926821 -NCT01929395 -NCT01926886 -NCT01929421 -NCT01927081 -NCT01929486 -NCT01927094 -NCT01929499 -NCT01927133 -NCT01929538 -NCT01927146 -NCT01929616 -NCT01927198 -NCT01929642 -NCT01927328 -NCT01929655 -NCT01927341 -NCT01929720 -NCT01927393 -NCT01929850 -NCT01927419 -NCT01929915 -NCT01927432 -NCT01929941 -NCT01927445 -NCT01929954 -NCT01927458 -NCT01929993 -NCT01927471 -NCT01930032 -NCT01927497 -NCT01930162 -NCT01927536 -NCT01930292 -NCT01927627 -NCT01930318 -NCT01927653 -NCT01930396 -NCT01927692 -NCT01930435 -NCT01927718 -NCT01930513 -NCT01927744 -NCT01930552 -NCT01927757 -NCT01930630 -NCT01927809 -NCT01930643 -NCT01927835 -NCT01930708 -NCT01927861 -NCT01930747 -NCT01927887 -NCT01930799 -NCT01927939 -NCT01930812 -NCT01927965 -NCT01930864 -NCT01928030 -NCT01930916 -NCT01928160 -NCT01930929 -NCT01928186 -NCT01930942 -NCT01928290 -NCT01931046 -NCT01928368 -NCT01931098 -NCT01928381 -NCT01931150 -NCT01928394 -NCT01931163 -NCT01928433 -NCT01931319 -NCT01928459 -NCT01931449 -NCT01928472 -NCT01931462 -NCT01928485 -NCT01931488 -NCT01928524 -NCT01931540 -NCT01928537 -NCT01931579 -NCT01928576 -NCT01931592 -NCT01928589 -NCT01931605 -NCT01928615 -NCT01931644 -NCT01928641 -NCT01931696 -NCT01928680 -NCT01931709 -NCT01928719 -NCT01931787 -NCT01928758 -NCT01937793 -NCT01931943 -NCT01935063 -NCT01931956 -NCT01935050 -NCT01931969 -NCT01935154 -NCT01932047 -NCT01935232 -NCT01932125 -NCT01935258 -NCT01932164 -NCT01935336 -NCT01932177 -NCT01935401 -NCT01932190 -NCT01935427 -NCT01932229 -NCT01935453 -NCT01932385 -NCT01935492 -NCT01932450 -NCT01935531 -NCT01932463 -NCT01935700 -NCT01932489 -NCT01935752 -NCT01932554 -NCT01935765 -NCT01932580 -NCT01935778 -NCT01932671 -NCT01935817 -NCT01932697 -NCT01935843 -NCT01932710 -NCT01935921 -NCT01932723 -NCT01935934 -NCT01932736 -NCT01935947 -NCT01932788 -NCT01935973 -NCT01932931 -NCT01936077 -NCT01933022 -NCT01936090 -NCT01933061 -NCT01936129 -NCT01933269 -NCT01936155 -NCT01933282 -NCT01936207 -NCT01933347 -NCT01936233 -NCT01933373 -NCT01936298 -NCT01933464 -NCT01936350 -NCT01933516 -NCT01936363 -NCT01933555 -NCT01936532 -NCT01933568 -NCT01936571 -NCT01933607 -NCT01936584 -NCT01933711 -NCT01936818 -NCT01933789 -NCT01936883 -NCT01933815 -NCT01936922 -NCT01933828 -NCT01936961 -NCT01933841 -NCT01936974 -NCT01933906 -NCT01937104 -NCT01933932 -NCT01937117 -NCT01933984 -NCT01937208 -NCT01934023 -NCT01937429 -NCT01934270 -NCT01937442 -NCT01934283 -NCT01937455 -NCT01934322 -NCT01937468 -NCT01934335 -NCT01937507 -NCT01934361 -NCT01937585 -NCT01934504 -NCT01937624 -NCT01934634 -NCT01937637 -NCT01934660 -NCT01937650 -NCT01934673 -NCT01937663 -NCT01934790 -NCT01937676 -NCT01934829 -NCT01937689 -NCT01934894 -NCT01937715 -NCT01934959 -NCT01937728 -NCT01934998 -NCT01943318 -NCT01937910 -NCT01940406 -NCT01938001 -NCT01940393 -NCT01938027 -NCT01940497 -NCT01938105 -NCT01940510 -NCT01938157 -NCT01940601 -NCT01938196 -NCT01940666 -NCT01938300 -NCT01940718 -NCT01938313 -NCT01940744 -NCT01938326 -NCT01940809 -NCT01938339 -NCT01940835 -NCT01938430 -NCT01941108 -NCT01938443 -NCT01941173 -NCT01938456 -NCT01941316 -NCT01938573 -NCT01941342 -NCT01938612 -NCT01941407 -NCT01938638 -NCT01941459 -NCT01938651 -NCT01941537 -NCT01938677 -NCT01941550 -NCT01938716 -NCT01941641 -NCT01938729 -NCT01941654 -NCT01938781 -NCT01941758 -NCT01938820 -NCT01941771 -NCT01938833 -NCT01941784 -NCT01938846 -NCT01941810 -NCT01938924 -NCT01941849 -NCT01938950 -NCT01941901 -NCT01938989 -NCT01941927 -NCT01939028 -NCT01941953 -NCT01939054 -NCT01941966 -NCT01939184 -NCT01941979 -NCT01939210 -NCT01941992 -NCT01939223 -NCT01942018 -NCT01939236 -NCT01942083 -NCT01939275 -NCT01942122 -NCT01939327 -NCT01942135 -NCT01939418 -NCT01942265 -NCT01939431 -NCT01942395 -NCT01939483 -NCT01942434 -NCT01939496 -NCT01942447 -NCT01939561 -NCT01942486 -NCT01939574 -NCT01942564 -NCT01939665 -NCT01942577 -NCT01939730 -NCT01942733 -NCT01939743 -NCT01942746 -NCT01939756 -NCT01942837 -NCT01939834 -NCT01942941 -NCT01939847 -NCT01942980 -NCT01939899 -NCT01942993 -NCT01940081 -NCT01943058 -NCT01940094 -NCT01943162 -NCT01940120 -NCT01943188 -NCT01940133 -NCT01943240 -NCT01940172 -NCT01943253 -NCT01940237 -NCT01943279 -NCT01940276 -NCT01943292 -NCT01940328 -NCT01949545 -NCT01943409 -NCT01946152 -NCT01943422 -NCT01946139 -NCT01943448 -NCT01946165 -NCT01943461 -NCT01946204 -NCT01943513 -NCT01946282 -NCT01943526 -NCT01946373 -NCT01943617 -NCT01946438 -NCT01943682 -NCT01946477 -NCT01943695 -NCT01946529 -NCT01943721 -NCT01946646 -NCT01943786 -NCT01946724 -NCT01943799 -NCT01946750 -NCT01943838 -NCT01946776 -NCT01943851 -NCT01946789 -NCT01943864 -NCT01946828 -NCT01943916 -NCT01946854 -NCT01943929 -NCT01946867 -NCT01944020 -NCT01946880 -NCT01944137 -NCT01946984 -NCT01944176 -NCT01947023 -NCT01944228 -NCT01947062 -NCT01944306 -NCT01947140 -NCT01944384 -NCT01947166 -NCT01944475 -NCT01947322 -NCT01944501 -NCT01947530 -NCT01944540 -NCT01947556 -NCT01944696 -NCT01947582 -NCT01944709 -NCT01948076 -NCT01944722 -NCT01948128 -NCT01944761 -NCT01948141 -NCT01944787 -NCT01948180 -NCT01944813 -NCT01948232 -NCT01944878 -NCT01948362 -NCT01944904 -NCT01948388 -NCT01944943 -NCT01948453 -NCT01944969 -NCT01948518 -NCT01944982 -NCT01948544 -NCT01945008 -NCT01948726 -NCT01945021 -NCT01948778 -NCT01945034 -NCT01948843 -NCT01945060 -NCT01948960 -NCT01945125 -NCT01949051 -NCT01945164 -NCT01949090 -NCT01945177 -NCT01949129 -NCT01945476 -NCT01949168 -NCT01945528 -NCT01949181 -NCT01945567 -NCT01949194 -NCT01945593 -NCT01949233 -NCT01945710 -NCT01949246 -NCT01945762 -NCT01949337 -NCT01945775 -NCT01949467 -NCT01945879 -NCT01949493 -NCT01946061 -NCT01949506 -NCT01946074 -NCT01949519 -NCT01946100 -NCT01949532 -NCT01946126 -NCT01954355 -NCT01949662 -NCT01951950 -NCT01949675 -NCT01951885 -NCT01949688 -NCT01951976 -NCT01949701 -NCT01952054 -NCT01949727 -NCT01952080 -NCT01949805 -NCT01952210 -NCT01949818 -NCT01952223 -NCT01949870 -NCT01952249 -NCT01949883 -NCT01952275 -NCT01949974 -NCT01952327 -NCT01949987 -NCT01952353 -NCT01950039 -NCT01952379 -NCT01950065 -NCT01952431 -NCT01950117 -NCT01952470 -NCT01950143 -NCT01952613 -NCT01950156 -NCT01952678 -NCT01950169 -NCT01952730 -NCT01950182 -NCT01952769 -NCT01950195 -NCT01952834 -NCT01950260 -NCT01952847 -NCT01950273 -NCT01952860 -NCT01950286 -NCT01952886 -NCT01950338 -NCT01952912 -NCT01950351 -NCT01952951 -NCT01950364 -NCT01953003 -NCT01950377 -NCT01953055 -NCT01950390 -NCT01953094 -NCT01950403 -NCT01953107 -NCT01950429 -NCT01953172 -NCT01950442 -NCT01953198 -NCT01950611 -NCT01953224 -NCT01950624 -NCT01953289 -NCT01950689 -NCT01953406 -NCT01950741 -NCT01953419 -NCT01950806 -NCT01953445 -NCT01950871 -NCT01953458 -NCT01950923 -NCT01953536 -NCT01950936 -NCT01953588 -NCT01950975 -NCT01953679 -NCT01951040 -NCT01953692 -NCT01951066 -NCT01953770 -NCT01951079 -NCT01953783 -NCT01951105 -NCT01953900 -NCT01951157 -NCT01953913 -NCT01951287 -NCT01953926 -NCT01951378 -NCT01953952 -NCT01951391 -NCT01954030 -NCT01951469 -NCT01954043 -NCT01951482 -NCT01954082 -NCT01951521 -NCT01954121 -NCT01951534 -NCT01954173 -NCT01951586 -NCT01954199 -NCT01951664 -NCT01954225 -NCT01951690 -NCT01954303 -NCT01951807 -NCT01954316 -NCT01951859 -NCT01959438 -NCT01954420 -NCT01956773 -NCT01954446 -NCT01956734 -NCT01954524 -NCT01956812 -NCT01954550 -NCT01956864 -NCT01954576 -NCT01956877 -NCT01954615 -NCT01956890 -NCT01954628 -NCT01956955 -NCT01954641 -NCT01957007 -NCT01954654 -NCT01957020 -NCT01954667 -NCT01957059 -NCT01954706 -NCT01957150 -NCT01954732 -NCT01957163 -NCT01954745 -NCT01957280 -NCT01954784 -NCT01957319 -NCT01954836 -NCT01957332 -NCT01954862 -NCT01957345 -NCT01954875 -NCT01957436 -NCT01954940 -NCT01957501 -NCT01954992 -NCT01957527 -NCT01955005 -NCT01957579 -NCT01955018 -NCT01957618 -NCT01955057 -NCT01957644 -NCT01955096 -NCT01957709 -NCT01955122 -NCT01957735 -NCT01955174 -NCT01957761 -NCT01955239 -NCT01957774 -NCT01955317 -NCT01957787 -NCT01955369 -NCT01957813 -NCT01955382 -NCT01957956 -NCT01955395 -NCT01957995 -NCT01955421 -NCT01958021 -NCT01955434 -NCT01958073 -NCT01955460 -NCT01958112 -NCT01955473 -NCT01958125 -NCT01955486 -NCT01958268 -NCT01955499 -NCT01958281 -NCT01955629 -NCT01958294 -NCT01955668 -NCT01958372 -NCT01955681 -NCT01958463 -NCT01955707 -NCT01958476 -NCT01955746 -NCT01958580 -NCT01955811 -NCT01958736 -NCT01955824 -NCT01958749 -NCT01955837 -NCT01958762 -NCT01955863 -NCT01958931 -NCT01956019 -NCT01958996 -NCT01956058 -NCT01959048 -NCT01956084 -NCT01959061 -NCT01956149 -NCT01959087 -NCT01956266 -NCT01959139 -NCT01956409 -NCT01959152 -NCT01956500 -NCT01959204 -NCT01956552 -NCT01959256 -NCT01956630 -NCT01959386 -NCT01956669 -NCT01959412 -NCT01956695 -NCT01965171 -NCT01959464 -NCT01962480 -NCT01959477 -NCT01962467 -NCT01959490 -NCT01962519 -NCT01959542 -NCT01962532 -NCT01959581 -NCT01962610 -NCT01959633 -NCT01962636 -NCT01959672 -NCT01962649 -NCT01959698 -NCT01962779 -NCT01959711 -NCT01962792 -NCT01959841 -NCT01962883 -NCT01959867 -NCT01962896 -NCT01959919 -NCT01962909 -NCT01960023 -NCT01962948 -NCT01960101 -NCT01962987 -NCT01960192 -NCT01963039 -NCT01960348 -NCT01963052 -NCT01960387 -NCT01963182 -NCT01960452 -NCT01963195 -NCT01960478 -NCT01963312 -NCT01960530 -NCT01963325 -NCT01960777 -NCT01963390 -NCT01960803 -NCT01963429 -NCT01960829 -NCT01963481 -NCT01960998 -NCT01963572 -NCT01961063 -NCT01963611 -NCT01961115 -NCT01963702 -NCT01961128 -NCT01963715 -NCT01961154 -NCT01963793 -NCT01961219 -NCT01963845 -NCT01961258 -NCT01963910 -NCT01961271 -NCT01963923 -NCT01961284 -NCT01964001 -NCT01961466 -NCT01964027 -NCT01961531 -NCT01964040 -NCT01961544 -NCT01964144 -NCT01961557 -NCT01964157 -NCT01961570 -NCT01964170 -NCT01961583 -NCT01964222 -NCT01961700 -NCT01964235 -NCT01961726 -NCT01964287 -NCT01961752 -NCT01964300 -NCT01961765 -NCT01964339 -NCT01961778 -NCT01964378 -NCT01961804 -NCT01964391 -NCT01961843 -NCT01964430 -NCT01961882 -NCT01964534 -NCT01961908 -NCT01964638 -NCT01961934 -NCT01964677 -NCT01961973 -NCT01964742 -NCT01962103 -NCT01964755 -NCT01962129 -NCT01964885 -NCT01962246 -NCT01964924 -NCT01962272 -NCT01965002 -NCT01962324 -NCT01965080 -NCT01962376 -NCT01965119 -NCT01962441 -NCT01970631 -NCT01965223 -NCT01968200 -NCT01965353 -NCT01968109 -NCT01965483 -NCT01968213 -NCT01965522 -NCT01968226 -NCT01965587 -NCT01968291 -NCT01965756 -NCT01968304 -NCT01965834 -NCT01968317 -NCT01965873 -NCT01968408 -NCT01965886 -NCT01968434 -NCT01965964 -NCT01968447 -NCT01965977 -NCT01968603 -NCT01966003 -NCT01968629 -NCT01966081 -NCT01968655 -NCT01966120 -NCT01968733 -NCT01966133 -NCT01968798 -NCT01966289 -NCT01968837 -NCT01966341 -NCT01968915 -NCT01966367 -NCT01968941 -NCT01966393 -NCT01969006 -NCT01966406 -NCT01969032 -NCT01966419 -NCT01969071 -NCT01966445 -NCT01969110 -NCT01966471 -NCT01969123 -NCT01966549 -NCT01969136 -NCT01966614 -NCT01969201 -NCT01966640 -NCT01969214 -NCT01966653 -NCT01969292 -NCT01966809 -NCT01969370 -NCT01966848 -NCT01969396 -NCT01966913 -NCT01969409 -NCT01966991 -NCT01969435 -NCT01967030 -NCT01969448 -NCT01967043 -NCT01969487 -NCT01967095 -NCT01969565 -NCT01967173 -NCT01969578 -NCT01967251 -NCT01969591 -NCT01967290 -NCT01969643 -NCT01967342 -NCT01969669 -NCT01967407 -NCT01969682 -NCT01967433 -NCT01969695 -NCT01967459 -NCT01969734 -NCT01967498 -NCT01969799 -NCT01967537 -NCT01969877 -NCT01967550 -NCT01969916 -NCT01967576 -NCT01969942 -NCT01967628 -NCT01969955 -NCT01967745 -NCT01970163 -NCT01967758 -NCT01970306 -NCT01967810 -NCT01970319 -NCT01967823 -NCT01970358 -NCT01967836 -NCT01970488 -NCT01967862 -NCT01970501 -NCT01967875 -NCT01970527 -NCT01967927 -NCT01970540 -NCT01968018 -NCT01970553 -NCT01968083 -NCT01976429 -NCT01970670 -NCT01973946 -NCT01970722 -NCT01973868 -NCT01970735 -NCT01973985 -NCT01970748 -NCT01973998 -NCT01970800 -NCT01974011 -NCT01970813 -NCT01974024 -NCT01970865 -NCT01974089 -NCT01970891 -NCT01974102 -NCT01970969 -NCT01974167 -NCT01971034 -NCT01974180 -NCT01971099 -NCT01974193 -NCT01971255 -NCT01974258 -NCT01971281 -NCT01974284 -NCT01971294 -NCT01974297 -NCT01971476 -NCT01974440 -NCT01971489 -NCT01974466 -NCT01971515 -NCT01974479 -NCT01971645 -NCT01974661 -NCT01971658 -NCT01974726 -NCT01971697 -NCT01974752 -NCT01971775 -NCT01974765 -NCT01971944 -NCT01974791 -NCT01971957 -NCT01974908 -NCT01971983 -NCT01974947 -NCT01972048 -NCT01975038 -NCT01972217 -NCT01975064 -NCT01972347 -NCT01975077 -NCT01972373 -NCT01975090 -NCT01972451 -NCT01975116 -NCT01972477 -NCT01975142 -NCT01972490 -NCT01975194 -NCT01972503 -NCT01975259 -NCT01972516 -NCT01975363 -NCT01972594 -NCT01975376 -NCT01972620 -NCT01975389 -NCT01972672 -NCT01975454 -NCT01972737 -NCT01975519 -NCT01972750 -NCT01975545 -NCT01972802 -NCT01975571 -NCT01972867 -NCT01975623 -NCT01972919 -NCT01975688 -NCT01972984 -NCT01975701 -NCT01973062 -NCT01975727 -NCT01973101 -NCT01975766 -NCT01973179 -NCT01975831 -NCT01973309 -NCT01975909 -NCT01973322 -NCT01976091 -NCT01973387 -NCT01976117 -NCT01973465 -NCT01976143 -NCT01973608 -NCT01976169 -NCT01973647 -NCT01976182 -NCT01973660 -NCT01976273 -NCT01973673 -NCT01976351 -NCT01973725 -NCT01976364 -NCT01973751 -NCT01976416 -NCT01973855 -NCT01982747 -NCT01976494 -NCT01979952 -NCT01976520 -NCT01979861 -NCT01976585 -NCT01980056 -NCT01976741 -NCT01980199 -NCT01976910 -NCT01980238 -NCT01976936 -NCT01980277 -NCT01976949 -NCT01980303 -NCT01976962 -NCT01980355 -NCT01977001 -NCT01980368 -NCT01977053 -NCT01980394 -NCT01977066 -NCT01980407 -NCT01977196 -NCT01980433 -NCT01977209 -NCT01980472 -NCT01977235 -NCT01980498 -NCT01977274 -NCT01980589 -NCT01977313 -NCT01980628 -NCT01977417 -NCT01980654 -NCT01977456 -NCT01980667 -NCT01977586 -NCT01980680 -NCT01977638 -NCT01980693 -NCT01977651 -NCT01980745 -NCT01977677 -NCT01980797 -NCT01977833 -NCT01980810 -NCT01977898 -NCT01980823 -NCT01977937 -NCT01980849 -NCT01978080 -NCT01980875 -NCT01978119 -NCT01980888 -NCT01978145 -NCT01980940 -NCT01978158 -NCT01981122 -NCT01978184 -NCT01981135 -NCT01978236 -NCT01981187 -NCT01978249 -NCT01981265 -NCT01978262 -NCT01981369 -NCT01978444 -NCT01981525 -NCT01978470 -NCT01981551 -NCT01978717 -NCT01981590 -NCT01978834 -NCT01981655 -NCT01978873 -NCT01981668 -NCT01978899 -NCT01981707 -NCT01978938 -NCT01981733 -NCT01978964 -NCT01981850 -NCT01979003 -NCT01982058 -NCT01979029 -NCT01982123 -NCT01979042 -NCT01982136 -NCT01979146 -NCT01982149 -NCT01979211 -NCT01982175 -NCT01979250 -NCT01982214 -NCT01979276 -NCT01982292 -NCT01979328 -NCT01982331 -NCT01979393 -NCT01982422 -NCT01979419 -NCT01982448 -NCT01979471 -NCT01982487 -NCT01979523 -NCT01982604 -NCT01979536 -NCT01982682 -NCT01979588 -NCT01982695 -NCT01979718 -NCT01989546 -NCT01982760 -NCT01986140 -NCT01982786 -NCT01985971 -NCT01982929 -NCT01986166 -NCT01982955 -NCT01986205 -NCT01982994 -NCT01986218 -NCT01983072 -NCT01986322 -NCT01983124 -NCT01986348 -NCT01983267 -NCT01986426 -NCT01983371 -NCT01986465 -NCT01983397 -NCT01986569 -NCT01983501 -NCT01986660 -NCT01983514 -NCT01986686 -NCT01983683 -NCT01986725 -NCT01983709 -NCT01986829 -NCT01983748 -NCT01986972 -NCT01983761 -NCT01987063 -NCT01983878 -NCT01987076 -NCT01983943 -NCT01987102 -NCT01983956 -NCT01987128 -NCT01983969 -NCT01987232 -NCT01984099 -NCT01987245 -NCT01984138 -NCT01987297 -NCT01984242 -NCT01987362 -NCT01984255 -NCT01987375 -NCT01984359 -NCT01987505 -NCT01984502 -NCT01987596 -NCT01984593 -NCT01987609 -NCT01984619 -NCT01987622 -NCT01984658 -NCT01987635 -NCT01984710 -NCT01987804 -NCT01984775 -NCT01987830 -NCT01984866 -NCT01987869 -NCT01984892 -NCT01987895 -NCT01984996 -NCT01987999 -NCT01985061 -NCT01988090 -NCT01985087 -NCT01988181 -NCT01985126 -NCT01988194 -NCT01985191 -NCT01988324 -NCT01985256 -NCT01988376 -NCT01985295 -NCT01988402 -NCT01985438 -NCT01988428 -NCT01985451 -NCT01988493 -NCT01985477 -NCT01988571 -NCT01985555 -NCT01988623 -NCT01985633 -NCT01988753 -NCT01985646 -NCT01988831 -NCT01985698 -NCT01988870 -NCT01985724 -NCT01988896 -NCT01985763 -NCT01989000 -NCT01985828 -NCT01989052 -NCT01985841 -NCT01989221 -NCT01985867 -NCT01989299 -NCT01985893 -NCT01989325 -NCT01985932 -NCT01989507 -NCT01985945 -NCT01989533 -NCT01985958 -NCT01994837 -NCT01989559 -NCT01992328 -NCT01989572 -NCT01992250 -NCT01989585 -NCT01992341 -NCT01989598 -NCT01992380 -NCT01989624 -NCT01992536 -NCT01989676 -NCT01992562 -NCT01989689 -NCT01992575 -NCT01989780 -NCT01992627 -NCT01989845 -NCT01992653 -NCT01989858 -NCT01992666 -NCT01989884 -NCT01992705 -NCT01989923 -NCT01992718 -NCT01990066 -NCT01992783 -NCT01990144 -NCT01992796 -NCT01990196 -NCT01992809 -NCT01990209 -NCT01992874 -NCT01990274 -NCT01992952 -NCT01990287 -NCT01992978 -NCT01990313 -NCT01993160 -NCT01990339 -NCT01993199 -NCT01990352 -NCT01993290 -NCT01990365 -NCT01993342 -NCT01990404 -NCT01993394 -NCT01990521 -NCT01993472 -NCT01990534 -NCT01993498 -NCT01990612 -NCT01993550 -NCT01990807 -NCT01993576 -NCT01990859 -NCT01993641 -NCT01991041 -NCT01993654 -NCT01991080 -NCT01993693 -NCT01991158 -NCT01993719 -NCT01991184 -NCT01993732 -NCT01991197 -NCT01993784 -NCT01991210 -NCT01993810 -NCT01991223 -NCT01993836 -NCT01991249 -NCT01993901 -NCT01991275 -NCT01993979 -NCT01991314 -NCT01994031 -NCT01991379 -NCT01994044 -NCT01991392 -NCT01994187 -NCT01991405 -NCT01994200 -NCT01991457 -NCT01994213 -NCT01991522 -NCT01994239 -NCT01991548 -NCT01994330 -NCT01991678 -NCT01994343 -NCT01991808 -NCT01994369 -NCT01991847 -NCT01994382 -NCT01991873 -NCT01994395 -NCT01991925 -NCT01994434 -NCT01991938 -NCT01994460 -NCT01991977 -NCT01994538 -NCT01992016 -NCT01994564 -NCT01992042 -NCT01994577 -NCT01992146 -NCT01994590 -NCT01992159 -NCT01994642 -NCT01992198 -NCT02000427 -NCT01994850 -NCT01997866 -NCT01994889 -NCT01997840 -NCT01995019 -NCT01997957 -NCT01995058 -NCT01998009 -NCT01995071 -NCT01998035 -NCT01995084 -NCT01998061 -NCT01995188 -NCT01998126 -NCT01995227 -NCT01998152 -NCT01995240 -NCT01998230 -NCT01995266 -NCT01998334 -NCT01995344 -NCT01998347 -NCT01995370 -NCT01998503 -NCT01995396 -NCT01998529 -NCT01995500 -NCT01998542 -NCT01995513 -NCT01998633 -NCT01995578 -NCT01998685 -NCT01995591 -NCT01998724 -NCT01995669 -NCT01998737 -NCT01995695 -NCT01998828 -NCT01995708 -NCT01998841 -NCT01995734 -NCT01998880 -NCT01995812 -NCT01998893 -NCT01995851 -NCT01998906 -NCT01995929 -NCT01998919 -NCT01996007 -NCT01998958 -NCT01996059 -NCT01998971 -NCT01996098 -NCT01998984 -NCT01996124 -NCT01999062 -NCT01996202 -NCT01999075 -NCT01996267 -NCT01999166 -NCT01996306 -NCT01999179 -NCT01996332 -NCT01999231 -NCT01996345 -NCT01999270 -NCT01996410 -NCT01999335 -NCT01996449 -NCT01999387 -NCT01996527 -NCT01999413 -NCT01996540 -NCT01999556 -NCT01996683 -NCT01999595 -NCT01996696 -NCT01999634 -NCT01996852 -NCT01999673 -NCT01996865 -NCT01999738 -NCT01996930 -NCT01999803 -NCT01996969 -NCT01999881 -NCT01997047 -NCT01999907 -NCT01997190 -NCT01999933 -NCT01997229 -NCT01999972 -NCT01997255 -NCT01999985 -NCT01997333 -NCT02000011 -NCT01997476 -NCT02000050 -NCT01997489 -NCT02000089 -NCT01997554 -NCT02000154 -NCT01997580 -NCT02000180 -NCT01997658 -NCT02000193 -NCT01997684 -NCT02000375 -NCT01997775 -NCT02000414 -NCT01997788 -NCT02005822 -NCT02000531 -NCT02003573 -NCT02000596 -NCT02003560 -NCT02000622 -NCT02003586 -NCT02000635 -NCT02003599 -NCT02000739 -NCT02003625 -NCT02000778 -NCT02003651 -NCT02000882 -NCT02003742 -NCT02000934 -NCT02003924 -NCT02000947 -NCT02003963 -NCT02000986 -NCT02004028 -NCT02001051 -NCT02004093 -NCT02001168 -NCT02004106 -NCT02001272 -NCT02004184 -NCT02001324 -NCT02004210 -NCT02001415 -NCT02004223 -NCT02001441 -NCT02004262 -NCT02001454 -NCT02004275 -NCT02001506 -NCT02004366 -NCT02001519 -NCT02004418 -NCT02001571 -NCT02004431 -NCT02001623 -NCT02004470 -NCT02001688 -NCT02004496 -NCT02001701 -NCT02004522 -NCT02001818 -NCT02004535 -NCT02001857 -NCT02004548 -NCT02001896 -NCT02004561 -NCT02001909 -NCT02004639 -NCT02001948 -NCT02004717 -NCT02001974 -NCT02004769 -NCT02002000 -NCT02004782 -NCT02002052 -NCT02004795 -NCT02002065 -NCT02004834 -NCT02002143 -NCT02004925 -NCT02002182 -NCT02004964 -NCT02002234 -NCT02005029 -NCT02002260 -NCT02005042 -NCT02002273 -NCT02005068 -NCT02002286 -NCT02005120 -NCT02002299 -NCT02005172 -NCT02002312 -NCT02005289 -NCT02002455 -NCT02005315 -NCT02002468 -NCT02005380 -NCT02002533 -NCT02005419 -NCT02002572 -NCT02005458 -NCT02002598 -NCT02005471 -NCT02002663 -NCT02005484 -NCT02002689 -NCT02005497 -NCT02002793 -NCT02005510 -NCT02002806 -NCT02005549 -NCT02002871 -NCT02005562 -NCT02002936 -NCT02005614 -NCT02003092 -NCT02005666 -NCT02003209 -NCT02005705 -NCT02003222 -NCT02005770 -NCT02003339 -NCT02005809 -NCT02003521 -NCT02011542 -NCT02005874 -NCT02008929 -NCT02005887 -NCT02008877 -NCT02005900 -NCT02008994 -NCT02005926 -NCT02009176 -NCT02006030 -NCT02009241 -NCT02006043 -NCT02009306 -NCT02006056 -NCT02009319 -NCT02006290 -NCT02009332 -NCT02006303 -NCT02009345 -NCT02006342 -NCT02009384 -NCT02006368 -NCT02009397 -NCT02006407 -NCT02009436 -NCT02006420 -NCT02009449 -NCT02006485 -NCT02009462 -NCT02006615 -NCT02009579 -NCT02006667 -NCT02009605 -NCT02006927 -NCT02009631 -NCT02006940 -NCT02009722 -NCT02006966 -NCT02009787 -NCT02006979 -NCT02009969 -NCT02007005 -NCT02009982 -NCT02007044 -NCT02010008 -NCT02007070 -NCT02010021 -NCT02007083 -NCT02010047 -NCT02007148 -NCT02010125 -NCT02007200 -NCT02010138 -NCT02007226 -NCT02010164 -NCT02007291 -NCT02010177 -NCT02007330 -NCT02010203 -NCT02007421 -NCT02010268 -NCT02007473 -NCT02010385 -NCT02007512 -NCT02010398 -NCT02007564 -NCT02010567 -NCT02007798 -NCT02010606 -NCT02007811 -NCT02010645 -NCT02007850 -NCT02010671 -NCT02007863 -NCT02010697 -NCT02007954 -NCT02010710 -NCT02007967 -NCT02010801 -NCT02008006 -NCT02010814 -NCT02008019 -NCT02010840 -NCT02008045 -NCT02010853 -NCT02008084 -NCT02010918 -NCT02008214 -NCT02010957 -NCT02008227 -NCT02010970 -NCT02008305 -NCT02011048 -NCT02008318 -NCT02011087 -NCT02008344 -NCT02011113 -NCT02008383 -NCT02011126 -NCT02008422 -NCT02011191 -NCT02008539 -NCT02011204 -NCT02008617 -NCT02011243 -NCT02008656 -NCT02011308 -NCT02008721 -NCT02011360 -NCT02008734 -NCT02011464 -NCT02008799 -NCT02016560 -NCT02011594 -NCT02014116 -NCT02011620 -NCT02014051 -NCT02011659 -NCT02014129 -NCT02011698 -NCT02014246 -NCT02011776 -NCT02014311 -NCT02011789 -NCT02014337 -NCT02011919 -NCT02014389 -NCT02011945 -NCT02014441 -NCT02011997 -NCT02014467 -NCT02012023 -NCT02014545 -NCT02012049 -NCT02014558 -NCT02012062 -NCT02014571 -NCT02012088 -NCT02014597 -NCT02012101 -NCT02014636 -NCT02012127 -NCT02014649 -NCT02012192 -NCT02014688 -NCT02012231 -NCT02014805 -NCT02012296 -NCT02014831 -NCT02012413 -NCT02014844 -NCT02012426 -NCT02014909 -NCT02012465 -NCT02015013 -NCT02012491 -NCT02015065 -NCT02012582 -NCT02015091 -NCT02012608 -NCT02015104 -NCT02012634 -NCT02015117 -NCT02012647 -NCT02015169 -NCT02012673 -NCT02015195 -NCT02012686 -NCT02015208 -NCT02012751 -NCT02015416 -NCT02012816 -NCT02015468 -NCT02012829 -NCT02015559 -NCT02012920 -NCT02015572 -NCT02013076 -NCT02015650 -NCT02013089 -NCT02015676 -NCT02013102 -NCT02015728 -NCT02013128 -NCT02015754 -NCT02013154 -NCT02015806 -NCT02013167 -NCT02015819 -NCT02013206 -NCT02015858 -NCT02013219 -NCT02015871 -NCT02013297 -NCT02015897 -NCT02013336 -NCT02015923 -NCT02013362 -NCT02015936 -NCT02013414 -NCT02016040 -NCT02013453 -NCT02016118 -NCT02013479 -NCT02016170 -NCT02013492 -NCT02016209 -NCT02013648 -NCT02016222 -NCT02013700 -NCT02016248 -NCT02013726 -NCT02016274 -NCT02013765 -NCT02016287 -NCT02013778 -NCT02016326 -NCT02013817 -NCT02016391 -NCT02013830 -NCT02016417 -NCT02013999 -NCT02016534 -NCT02014025 -NCT02022904 -NCT02016586 -NCT02019693 -NCT02016716 -NCT02019680 -NCT02016729 -NCT02019706 -NCT02016781 -NCT02019784 -NCT02016872 -NCT02019888 -NCT02017002 -NCT02019979 -NCT02017015 -NCT02020018 -NCT02017249 -NCT02020070 -NCT02017275 -NCT02020096 -NCT02017327 -NCT02020135 -NCT02017353 -NCT02020161 -NCT02017366 -NCT02020174 -NCT02017457 -NCT02020226 -NCT02017574 -NCT02020278 -NCT02017587 -NCT02020291 -NCT02017600 -NCT02020369 -NCT02017613 -NCT02020499 -NCT02017678 -NCT02020577 -NCT02017704 -NCT02020642 -NCT02017717 -NCT02020655 -NCT02017782 -NCT02020681 -NCT02017795 -NCT02020707 -NCT02017808 -NCT02020720 -NCT02017834 -NCT02020785 -NCT02017860 -NCT02020889 -NCT02017912 -NCT02020928 -NCT02017925 -NCT02020941 -NCT02017964 -NCT02021019 -NCT02018003 -NCT02021032 -NCT02018068 -NCT02021097 -NCT02018107 -NCT02021253 -NCT02018172 -NCT02021422 -NCT02018276 -NCT02021474 -NCT02018367 -NCT02021604 -NCT02018419 -NCT02021617 -NCT02018432 -NCT02021643 -NCT02018458 -NCT02021656 -NCT02018471 -NCT02021695 -NCT02018497 -NCT02021721 -NCT02018523 -NCT02021747 -NCT02018653 -NCT02022033 -NCT02018679 -NCT02022098 -NCT02018705 -NCT02022137 -NCT02018757 -NCT02022293 -NCT02018835 -NCT02022358 -NCT02018874 -NCT02022371 -NCT02018926 -NCT02022384 -NCT02019017 -NCT02022553 -NCT02019069 -NCT02022566 -NCT02019277 -NCT02022579 -NCT02019303 -NCT02022644 -NCT02019355 -NCT02022670 -NCT02019446 -NCT02022800 -NCT02019524 -NCT02022826 -NCT02019576 -NCT02022852 -NCT02019641 -NCT02027935 -NCT02022917 -NCT02025114 -NCT02022982 -NCT02025088 -NCT02023008 -NCT02025179 -NCT02023021 -NCT02025192 -NCT02023203 -NCT02025218 -NCT02023229 -NCT02025231 -NCT02023333 -NCT02025270 -NCT02023359 -NCT02025361 -NCT02023424 -NCT02025413 -NCT02023463 -NCT02025465 -NCT02023476 -NCT02025504 -NCT02023489 -NCT02025543 -NCT02023541 -NCT02025699 -NCT02023554 -NCT02025712 -NCT02023593 -NCT02025751 -NCT02023671 -NCT02025777 -NCT02023697 -NCT02025790 -NCT02023710 -NCT02025803 -NCT02023762 -NCT02025881 -NCT02023801 -NCT02025985 -NCT02023905 -NCT02026115 -NCT02023931 -NCT02026154 -NCT02023996 -NCT02026258 -NCT02024009 -NCT02026271 -NCT02024074 -NCT02026310 -NCT02024087 -NCT02026349 -NCT02024113 -NCT02026362 -NCT02024178 -NCT02026427 -NCT02024217 -NCT02026479 -NCT02024256 -NCT02026583 -NCT02024269 -NCT02026596 -NCT02024282 -NCT02026609 -NCT02024308 -NCT02026687 -NCT02024347 -NCT02026726 -NCT02024360 -NCT02026869 -NCT02024386 -NCT02026908 -NCT02024399 -NCT02026921 -NCT02024412 -NCT02026960 -NCT02024425 -NCT02027064 -NCT02024438 -NCT02027077 -NCT02024451 -NCT02027090 -NCT02024529 -NCT02027207 -NCT02024555 -NCT02027220 -NCT02024568 -NCT02027298 -NCT02024607 -NCT02027311 -NCT02024633 -NCT02027350 -NCT02024685 -NCT02027363 -NCT02024789 -NCT02027376 -NCT02024815 -NCT02027428 -NCT02024841 -NCT02027545 -NCT02024906 -NCT02027610 -NCT02024997 -NCT02027623 -NCT02025010 -NCT02027779 -NCT02025036 -NCT02027818 -NCT02025049 -NCT02027831 -NCT02025062 -NCT02032979 -NCT02027948 -NCT02030418 -NCT02027961 -NCT02030405 -NCT02028013 -NCT02030444 -NCT02028039 -NCT02030457 -NCT02028052 -NCT02030483 -NCT02028065 -NCT02030561 -NCT02028117 -NCT02030574 -NCT02028221 -NCT02030587 -NCT02028286 -NCT02030678 -NCT02028325 -NCT02030717 -NCT02028351 -NCT02030756 -NCT02028364 -NCT02030769 -NCT02028377 -NCT02030834 -NCT02028429 -NCT02030860 -NCT02028442 -NCT02030951 -NCT02028455 -NCT02030964 -NCT02028468 -NCT02031029 -NCT02028494 -NCT02031055 -NCT02028507 -NCT02031120 -NCT02028572 -NCT02031172 -NCT02028637 -NCT02031250 -NCT02028806 -NCT02031263 -NCT02028845 -NCT02031328 -NCT02028858 -NCT02031393 -NCT02028910 -NCT02031419 -NCT02028949 -NCT02031432 -NCT02028988 -NCT02031458 -NCT02029001 -NCT02031484 -NCT02029053 -NCT02031523 -NCT02029066 -NCT02031536 -NCT02029144 -NCT02031588 -NCT02029157 -NCT02031601 -NCT02029183 -NCT02031614 -NCT02029209 -NCT02031640 -NCT02029352 -NCT02031653 -NCT02029417 -NCT02031731 -NCT02029430 -NCT02031744 -NCT02029443 -NCT02031939 -NCT02029456 -NCT02031952 -NCT02029573 -NCT02031965 -NCT02029690 -NCT02032121 -NCT02029729 -NCT02032251 -NCT02029781 -NCT02032277 -NCT02029794 -NCT02032368 -NCT02029859 -NCT02032485 -NCT02029911 -NCT02032498 -NCT02029937 -NCT02032550 -NCT02029950 -NCT02032563 -NCT02030067 -NCT02032576 -NCT02030184 -NCT02032693 -NCT02030223 -NCT02032745 -NCT02030249 -NCT02032810 -NCT02030314 -NCT02032823 -NCT02030353 -NCT02032888 -NCT02030379 -NCT02032953 -NCT02030392 -NCT02038348 -NCT02033096 -NCT02035787 -NCT02033148 -NCT02035774 -NCT02033200 -NCT02035813 -NCT02033213 -NCT02035904 -NCT02033343 -NCT02035930 -NCT02033408 -NCT02035956 -NCT02033447 -NCT02035982 -NCT02033473 -NCT02036008 -NCT02033486 -NCT02036060 -NCT02033538 -NCT02036086 -NCT02033551 -NCT02036112 -NCT02033616 -NCT02036164 -NCT02033642 -NCT02036177 -NCT02033720 -NCT02036203 -NCT02033811 -NCT02036281 -NCT02033876 -NCT02036359 -NCT02033980 -NCT02036463 -NCT02033993 -NCT02036476 -NCT02034097 -NCT02036489 -NCT02034110 -NCT02036502 -NCT02034123 -NCT02036528 -NCT02034227 -NCT02036580 -NCT02034279 -NCT02036684 -NCT02034344 -NCT02036710 -NCT02034435 -NCT02036866 -NCT02034487 -NCT02036918 -NCT02034513 -NCT02036944 -NCT02034552 -NCT02036957 -NCT02034708 -NCT02037035 -NCT02034799 -NCT02037048 -NCT02034903 -NCT02037217 -NCT02034916 -NCT02037230 -NCT02034929 -NCT02037256 -NCT02034955 -NCT02037347 -NCT02034968 -NCT02037399 -NCT02034981 -NCT02037438 -NCT02035033 -NCT02037451 -NCT02035072 -NCT02037464 -NCT02035085 -NCT02037516 -NCT02035098 -NCT02037529 -NCT02035124 -NCT02037568 -NCT02035137 -NCT02037646 -NCT02035293 -NCT02037776 -NCT02035319 -NCT02037893 -NCT02035332 -NCT02037945 -NCT02035345 -NCT02037997 -NCT02035358 -NCT02038010 -NCT02035423 -NCT02038036 -NCT02035475 -NCT02038049 -NCT02035514 -NCT02038114 -NCT02035527 -NCT02038153 -NCT02035631 -NCT02038205 -NCT02035657 -NCT02038218 -NCT02035670 -NCT02038296 -NCT02035683 -NCT02038322 -NCT02035735 -NCT02043756 -NCT02038361 -NCT02041065 -NCT02038374 -NCT02040935 -NCT02038400 -NCT02041169 -NCT02038478 -NCT02041195 -NCT02038621 -NCT02041260 -NCT02038634 -NCT02041338 -NCT02038647 -NCT02041351 -NCT02038673 -NCT02041429 -NCT02038699 -NCT02041481 -NCT02038712 -NCT02041507 -NCT02038738 -NCT02041533 -NCT02038751 -NCT02041611 -NCT02038777 -NCT02041819 -NCT02038816 -NCT02041845 -NCT02038868 -NCT02041858 -NCT02038933 -NCT02041871 -NCT02038946 -NCT02041910 -NCT02038972 -NCT02041923 -NCT02039011 -NCT02041936 -NCT02039219 -NCT02042053 -NCT02039232 -NCT02042079 -NCT02039323 -NCT02042092 -NCT02039336 -NCT02042170 -NCT02039375 -NCT02042196 -NCT02039388 -NCT02042261 -NCT02039518 -NCT02042313 -NCT02039635 -NCT02042378 -NCT02039674 -NCT02042404 -NCT02039726 -NCT02042430 -NCT02039778 -NCT02042443 -NCT02039791 -NCT02042482 -NCT02039869 -NCT02042495 -NCT02039895 -NCT02042638 -NCT02039947 -NCT02042690 -NCT02039999 -NCT02042755 -NCT02040064 -NCT02042807 -NCT02040142 -NCT02042820 -NCT02040155 -NCT02042846 -NCT02040181 -NCT02042859 -NCT02040194 -NCT02042885 -NCT02040233 -NCT02042911 -NCT02040272 -NCT02042924 -NCT02040376 -NCT02042950 -NCT02040480 -NCT02042989 -NCT02040493 -NCT02043002 -NCT02040506 -NCT02043054 -NCT02040545 -NCT02043184 -NCT02040558 -NCT02043236 -NCT02040610 -NCT02043288 -NCT02040662 -NCT02043444 -NCT02040766 -NCT02043470 -NCT02040779 -NCT02043587 -NCT02040831 -NCT02043665 -NCT02040857 -NCT02043678 -NCT02040870 -NCT02043730 -NCT02040922 -NCT02049047 -NCT02043821 -NCT02046538 -NCT02043847 -NCT02046421 -NCT02043860 -NCT02046603 -NCT02043899 -NCT02046694 -NCT02044120 -NCT02046733 -NCT02044172 -NCT02046811 -NCT02044198 -NCT02046837 -NCT02044224 -NCT02046863 -NCT02044276 -NCT02046915 -NCT02044328 -NCT02046928 -NCT02044341 -NCT02046941 -NCT02044354 -NCT02047136 -NCT02044380 -NCT02047149 -NCT02044419 -NCT02047162 -NCT02044510 -NCT02047175 -NCT02044523 -NCT02047201 -NCT02044536 -NCT02047214 -NCT02044562 -NCT02047253 -NCT02044601 -NCT02047279 -NCT02044640 -NCT02047305 -NCT02044796 -NCT02047344 -NCT02044822 -NCT02047370 -NCT02044861 -NCT02047474 -NCT02044965 -NCT02047500 -NCT02045004 -NCT02047513 -NCT02045017 -NCT02047552 -NCT02045030 -NCT02047578 -NCT02045095 -NCT02047747 -NCT02045121 -NCT02047825 -NCT02045186 -NCT02047851 -NCT02045199 -NCT02047864 -NCT02045238 -NCT02047890 -NCT02045264 -NCT02047903 -NCT02045342 -NCT02047994 -NCT02045368 -NCT02048020 -NCT02045420 -NCT02048059 -NCT02045433 -NCT02048150 -NCT02045446 -NCT02048163 -NCT02045550 -NCT02048254 -NCT02045589 -NCT02048267 -NCT02045602 -NCT02048371 -NCT02045641 -NCT02048384 -NCT02045719 -NCT02048488 -NCT02045771 -NCT02048540 -NCT02045784 -NCT02048553 -NCT02045901 -NCT02048670 -NCT02045940 -NCT02048709 -NCT02046057 -NCT02048722 -NCT02046070 -NCT02048748 -NCT02046122 -NCT02048813 -NCT02046174 -NCT02048865 -NCT02046187 -NCT02048904 -NCT02046265 -NCT02048917 -NCT02046278 -NCT02048943 -NCT02046304 -NCT02048956 -NCT02046395 -NCT02054793 -NCT02049060 -NCT02052102 -NCT02049073 -NCT02052089 -NCT02049086 -NCT02052115 -NCT02049112 -NCT02052128 -NCT02049151 -NCT02052193 -NCT02049190 -NCT02052271 -NCT02049203 -NCT02052479 -NCT02049242 -NCT02052492 -NCT02049268 -NCT02052557 -NCT02049281 -NCT02052648 -NCT02049489 -NCT02052661 -NCT02049515 -NCT02052752 -NCT02049541 -NCT02052778 -NCT02049580 -NCT02052921 -NCT02049593 -NCT02052934 -NCT02049606 -NCT02052947 -NCT02049632 -NCT02052960 -NCT02049801 -NCT02052999 -NCT02049892 -NCT02053181 -NCT02049905 -NCT02053220 -NCT02049918 -NCT02053311 -NCT02049957 -NCT02053324 -NCT02050009 -NCT02053350 -NCT02050022 -NCT02053376 -NCT02050048 -NCT02053389 -NCT02050178 -NCT02053402 -NCT02050243 -NCT02053428 -NCT02050256 -NCT02053467 -NCT02050282 -NCT02053480 -NCT02050321 -NCT02053493 -NCT02050347 -NCT02053545 -NCT02050451 -NCT02053597 -NCT02050529 -NCT02053610 -NCT02050542 -NCT02053623 -NCT02050685 -NCT02053636 -NCT02050724 -NCT02053753 -NCT02050763 -NCT02053961 -NCT02050815 -NCT02054013 -NCT02050906 -NCT02054052 -NCT02050919 -NCT02054104 -NCT02051101 -NCT02054117 -NCT02051205 -NCT02054221 -NCT02051218 -NCT02054286 -NCT02051244 -NCT02054338 -NCT02051257 -NCT02054351 -NCT02051413 -NCT02054442 -NCT02051530 -NCT02054455 -NCT02051608 -NCT02054520 -NCT02051751 -NCT02054559 -NCT02051855 -NCT02054598 -NCT02051868 -NCT02054624 -NCT02051894 -NCT02054715 -NCT02051907 -NCT02054741 -NCT02051972 -NCT02054754 -NCT02052024 -NCT02054780 -NCT02052050 -NCT02060474 -NCT02054806 -NCT02057536 -NCT02054819 -NCT02057523 -NCT02054884 -NCT02057627 -NCT02054923 -NCT02057640 -NCT02055053 -NCT02057666 -NCT02055066 -NCT02057770 -NCT02055157 -NCT02057809 -NCT02055170 -NCT02057874 -NCT02055196 -NCT02057913 -NCT02055248 -NCT02057939 -NCT02055495 -NCT02057991 -NCT02055534 -NCT02058017 -NCT02055573 -NCT02058056 -NCT02055690 -NCT02058069 -NCT02055716 -NCT02058082 -NCT02055729 -NCT02058303 -NCT02055820 -NCT02058381 -NCT02055833 -NCT02058433 -NCT02055846 -NCT02058459 -NCT02055924 -NCT02058550 -NCT02055937 -NCT02058615 -NCT02055963 -NCT02058628 -NCT02055989 -NCT02058667 -NCT02056015 -NCT02058680 -NCT02056054 -NCT02058706 -NCT02056067 -NCT02058745 -NCT02056223 -NCT02058823 -NCT02056288 -NCT02058901 -NCT02056457 -NCT02058953 -NCT02056522 -NCT02059018 -NCT02056587 -NCT02059122 -NCT02056678 -NCT02059135 -NCT02056691 -NCT02059213 -NCT02056730 -NCT02059239 -NCT02056756 -NCT02059252 -NCT02056782 -NCT02059265 -NCT02056847 -NCT02059317 -NCT02056886 -NCT02059473 -NCT02057003 -NCT02059538 -NCT02057029 -NCT02059720 -NCT02057055 -NCT02059850 -NCT02057107 -NCT02059876 -NCT02057133 -NCT02059889 -NCT02057146 -NCT02059954 -NCT02057198 -NCT02059967 -NCT02057237 -NCT02059993 -NCT02057250 -NCT02060058 -NCT02057289 -NCT02060071 -NCT02057328 -NCT02060136 -NCT02057367 -NCT02060149 -NCT02057380 -NCT02060188 -NCT02057393 -NCT02060253 -NCT02057432 -NCT02060331 -NCT02057445 -NCT02060370 -NCT02057471 -NCT02060383 -NCT02057484 -NCT02066298 -NCT02060487 -NCT02063568 -NCT02060539 -NCT02063529 -NCT02060552 -NCT02063633 -NCT02060578 -NCT02063685 -NCT02060656 -NCT02063724 -NCT02060669 -NCT02063828 -NCT02060695 -NCT02063958 -NCT02060799 -NCT02063971 -NCT02060929 -NCT02063997 -NCT02060955 -NCT02064036 -NCT02060994 -NCT02064127 -NCT02061007 -NCT02064166 -NCT02061033 -NCT02064244 -NCT02061072 -NCT02064283 -NCT02061085 -NCT02064309 -NCT02061228 -NCT02064361 -NCT02061332 -NCT02064387 -NCT02061384 -NCT02064491 -NCT02061397 -NCT02064582 -NCT02061423 -NCT02064608 -NCT02061449 -NCT02064673 -NCT02061514 -NCT02064686 -NCT02061527 -NCT02064725 -NCT02061592 -NCT02064803 -NCT02061605 -NCT02064829 -NCT02061631 -NCT02064881 -NCT02061657 -NCT02064946 -NCT02061761 -NCT02065037 -NCT02061800 -NCT02065063 -NCT02061995 -NCT02065154 -NCT02062229 -NCT02065219 -NCT02062242 -NCT02065323 -NCT02062255 -NCT02065362 -NCT02062307 -NCT02065466 -NCT02062359 -NCT02065479 -NCT02062372 -NCT02065492 -NCT02062489 -NCT02065609 -NCT02062515 -NCT02065687 -NCT02062554 -NCT02065726 -NCT02062606 -NCT02065804 -NCT02062632 -NCT02065869 -NCT02062697 -NCT02065921 -NCT02062749 -NCT02065960 -NCT02062775 -NCT02065999 -NCT02062827 -NCT02066012 -NCT02062840 -NCT02066038 -NCT02062983 -NCT02066064 -NCT02063022 -NCT02066103 -NCT02063048 -NCT02066116 -NCT02063087 -NCT02066129 -NCT02063113 -NCT02066142 -NCT02063126 -NCT02066181 -NCT02063230 -NCT02066220 -NCT02063282 -NCT02066233 -NCT02063295 -NCT02066285 -NCT02063438 -NCT02072031 -NCT02066363 -NCT02069041 -NCT02066454 -NCT02068950 -NCT02066493 -NCT02069080 -NCT02066506 -NCT02069093 -NCT02066519 -NCT02069106 -NCT02066532 -NCT02069145 -NCT02066545 -NCT02069158 -NCT02066636 -NCT02069197 -NCT02066649 -NCT02069340 -NCT02066675 -NCT02069366 -NCT02066688 -NCT02069418 -NCT02066870 -NCT02069470 -NCT02066896 -NCT02069626 -NCT02066922 -NCT02069678 -NCT02067026 -NCT02069704 -NCT02067052 -NCT02069730 -NCT02067104 -NCT02069743 -NCT02067130 -NCT02069756 -NCT02067143 -NCT02069769 -NCT02067156 -NCT02069873 -NCT02067247 -NCT02069912 -NCT02067260 -NCT02070016 -NCT02067286 -NCT02070120 -NCT02067299 -NCT02070224 -NCT02067312 -NCT02070406 -NCT02067325 -NCT02070419 -NCT02067351 -NCT02070432 -NCT02067377 -NCT02070458 -NCT02067416 -NCT02070497 -NCT02067468 -NCT02070523 -NCT02067481 -NCT02070549 -NCT02067520 -NCT02070640 -NCT02067546 -NCT02070679 -NCT02067598 -NCT02070705 -NCT02067624 -NCT02070952 -NCT02067663 -NCT02071004 -NCT02067702 -NCT02071043 -NCT02067741 -NCT02071056 -NCT02067806 -NCT02071069 -NCT02067858 -NCT02071225 -NCT02067884 -NCT02071355 -NCT02067897 -NCT02071394 -NCT02067988 -NCT02071472 -NCT02068053 -NCT02071511 -NCT02068079 -NCT02071537 -NCT02068092 -NCT02071589 -NCT02068131 -NCT02071641 -NCT02068157 -NCT02071654 -NCT02068196 -NCT02071693 -NCT02068378 -NCT02071849 -NCT02068586 -NCT02071862 -NCT02068677 -NCT02071888 -NCT02068794 -NCT02071901 -NCT02068820 -NCT02071927 -NCT02068846 -NCT02071940 -NCT02068872 -NCT02077868 -NCT02072044 -NCT02075372 -NCT02072057 -NCT02075320 -NCT02072070 -NCT02075385 -NCT02072148 -NCT02075437 -NCT02072317 -NCT02075489 -NCT02072356 -NCT02075567 -NCT02072473 -NCT02075580 -NCT02072486 -NCT02075606 -NCT02072512 -NCT02075632 -NCT02072590 -NCT02075658 -NCT02072616 -NCT02075671 -NCT02072655 -NCT02075684 -NCT02072720 -NCT02075775 -NCT02072733 -NCT02075840 -NCT02072785 -NCT02075879 -NCT02072811 -NCT02076009 -NCT02072863 -NCT02076074 -NCT02073006 -NCT02076152 -NCT02073045 -NCT02076191 -NCT02073071 -NCT02076230 -NCT02073097 -NCT02076243 -NCT02073123 -NCT02076308 -NCT02073201 -NCT02076438 -NCT02073305 -NCT02076451 -NCT02073396 -NCT02076477 -NCT02073448 -NCT02076503 -NCT02073461 -NCT02076529 -NCT02073487 -NCT02076581 -NCT02073591 -NCT02076594 -NCT02073682 -NCT02076620 -NCT02073773 -NCT02076633 -NCT02073838 -NCT02076646 -NCT02073890 -NCT02076672 -NCT02073916 -NCT02076776 -NCT02073968 -NCT02076815 -NCT02073994 -NCT02076867 -NCT02074007 -NCT02076906 -NCT02074046 -NCT02076997 -NCT02074111 -NCT02077023 -NCT02074137 -NCT02077036 -NCT02074150 -NCT02077101 -NCT02074189 -NCT02077114 -NCT02074202 -NCT02077166 -NCT02074553 -NCT02077218 -NCT02074644 -NCT02077335 -NCT02074709 -NCT02077348 -NCT02074787 -NCT02077439 -NCT02074839 -NCT02077504 -NCT02074878 -NCT02077530 -NCT02075021 -NCT02077543 -NCT02075034 -NCT02077569 -NCT02075060 -NCT02077621 -NCT02075086 -NCT02077634 -NCT02075112 -NCT02077673 -NCT02075177 -NCT02077777 -NCT02075229 -NCT02083016 -NCT02077881 -NCT02080299 -NCT02077933 -NCT02080260 -NCT02077959 -NCT02080312 -NCT02077998 -NCT02080416 -NCT02078011 -NCT02080455 -NCT02078076 -NCT02080598 -NCT02078089 -NCT02080624 -NCT02078102 -NCT02080650 -NCT02078154 -NCT02080663 -NCT02078167 -NCT02080689 -NCT02078219 -NCT02080806 -NCT02078232 -NCT02080949 -NCT02078245 -NCT02080962 -NCT02078258 -NCT02080988 -NCT02078323 -NCT02081040 -NCT02078349 -NCT02081053 -NCT02078388 -NCT02081066 -NCT02078479 -NCT02081079 -NCT02078531 -NCT02081131 -NCT02078648 -NCT02081196 -NCT02078661 -NCT02081222 -NCT02078687 -NCT02081300 -NCT02078700 -NCT02081339 -NCT02078726 -NCT02081365 -NCT02078739 -NCT02081378 -NCT02078752 -NCT02081404 -NCT02078765 -NCT02081456 -NCT02078791 -NCT02081469 -NCT02078804 -NCT02081495 -NCT02078843 -NCT02081508 -NCT02078960 -NCT02081612 -NCT02079025 -NCT02081625 -NCT02079103 -NCT02081755 -NCT02079155 -NCT02081768 -NCT02079181 -NCT02081794 -NCT02079220 -NCT02081937 -NCT02079272 -NCT02082119 -NCT02079324 -NCT02082197 -NCT02079363 -NCT02082210 -NCT02079389 -NCT02082275 -NCT02079428 -NCT02082340 -NCT02079519 -NCT02082353 -NCT02079558 -NCT02082379 -NCT02079636 -NCT02082405 -NCT02079662 -NCT02082431 -NCT02079688 -NCT02082470 -NCT02079714 -NCT02082522 -NCT02079727 -NCT02082626 -NCT02079740 -NCT02082665 -NCT02079753 -NCT02082691 -NCT02079948 -NCT02082730 -NCT02080052 -NCT02082782 -NCT02080078 -NCT02082925 -NCT02080221 -NCT02082951 -NCT02080234 -NCT02082977 -NCT02080247 -NCT02089230 -NCT02083029 -NCT02086071 -NCT02083185 -NCT02085941 -NCT02083211 -NCT02086136 -NCT02083250 -NCT02086175 -NCT02083354 -NCT02086266 -NCT02083510 -NCT02086292 -NCT02083536 -NCT02086448 -NCT02083614 -NCT02086461 -NCT02083653 -NCT02086487 -NCT02083679 -NCT02086552 -NCT02083692 -NCT02086578 -NCT02083770 -NCT02086591 -NCT02083848 -NCT02086604 -NCT02083861 -NCT02086656 -NCT02083887 -NCT02086773 -NCT02083926 -NCT02086825 -NCT02083939 -NCT02086838 -NCT02083965 -NCT02086890 -NCT02083978 -NCT02086916 -NCT02084095 -NCT02086942 -NCT02084134 -NCT02086994 -NCT02084147 -NCT02087007 -NCT02084160 -NCT02087046 -NCT02084199 -NCT02087059 -NCT02084238 -NCT02087150 -NCT02084264 -NCT02087176 -NCT02084342 -NCT02087241 -NCT02084355 -NCT02087397 -NCT02084407 -NCT02087423 -NCT02084459 -NCT02087475 -NCT02084472 -NCT02087488 -NCT02084524 -NCT02087592 -NCT02084563 -NCT02087631 -NCT02084732 -NCT02087657 -NCT02084745 -NCT02087748 -NCT02084784 -NCT02087852 -NCT02084823 -NCT02087917 -NCT02084888 -NCT02087956 -NCT02084914 -NCT02088086 -NCT02084927 -NCT02088112 -NCT02085005 -NCT02088281 -NCT02085018 -NCT02088333 -NCT02085031 -NCT02088372 -NCT02085070 -NCT02088515 -NCT02085096 -NCT02088541 -NCT02085187 -NCT02088645 -NCT02085252 -NCT02088684 -NCT02085304 -NCT02088775 -NCT02085395 -NCT02088827 -NCT02085408 -NCT02088866 -NCT02085460 -NCT02089048 -NCT02085499 -NCT02089087 -NCT02085525 -NCT02089100 -NCT02085603 -NCT02089178 -NCT02085655 -NCT02089217 -NCT02085928 -NCT02095132 -NCT02089243 -NCT02092363 -NCT02089334 -NCT02092337 -NCT02089373 -NCT02092519 -NCT02089386 -NCT02092571 -NCT02089555 -NCT02092584 -NCT02089633 -NCT02092636 -NCT02089685 -NCT02092662 -NCT02089711 -NCT02092714 -NCT02089737 -NCT02092740 -NCT02089750 -NCT02092792 -NCT02089763 -NCT02092805 -NCT02089802 -NCT02092831 -NCT02089854 -NCT02092909 -NCT02089919 -NCT02092922 -NCT02089932 -NCT02092935 -NCT02090010 -NCT02092948 -NCT02090101 -NCT02093013 -NCT02090114 -NCT02093039 -NCT02090153 -NCT02093065 -NCT02090166 -NCT02093143 -NCT02090348 -NCT02093247 -NCT02090374 -NCT02093299 -NCT02090400 -NCT02093312 -NCT02090413 -NCT02093325 -NCT02090582 -NCT02093390 -NCT02090660 -NCT02093403 -NCT02090816 -NCT02093598 -NCT02090894 -NCT02093767 -NCT02090907 -NCT02093871 -NCT02090933 -NCT02093910 -NCT02090998 -NCT02093962 -NCT02091024 -NCT02094053 -NCT02091050 -NCT02094079 -NCT02091063 -NCT02094105 -NCT02091141 -NCT02094144 -NCT02091167 -NCT02094235 -NCT02091245 -NCT02094261 -NCT02091362 -NCT02094274 -NCT02091492 -NCT02094313 -NCT02091531 -NCT02094339 -NCT02091596 -NCT02094391 -NCT02091661 -NCT02094443 -NCT02091674 -NCT02094482 -NCT02091765 -NCT02094560 -NCT02091778 -NCT02094573 -NCT02091791 -NCT02094625 -NCT02091869 -NCT02094729 -NCT02091947 -NCT02094742 -NCT02091960 -NCT02094794 -NCT02091999 -NCT02094872 -NCT02092038 -NCT02094950 -NCT02092064 -NCT02095041 -NCT02092129 -NCT02095054 -NCT02092155 -NCT02095093 -NCT02092298 -NCT02095119 -NCT02092324 -NCT02100969 -NCT02095145 -NCT02098291 -NCT02095158 -NCT02098265 -NCT02095184 -NCT02098343 -NCT02095210 -NCT02098369 -NCT02095236 -NCT02098499 -NCT02095249 -NCT02098512 -NCT02095301 -NCT02098538 -NCT02095561 -NCT02098616 -NCT02095574 -NCT02098642 -NCT02095587 -NCT02098681 -NCT02095600 -NCT02098707 -NCT02095678 -NCT02098759 -NCT02095717 -NCT02098772 -NCT02095743 -NCT02098863 -NCT02095782 -NCT02098889 -NCT02095808 -NCT02098902 -NCT02095834 -NCT02098915 -NCT02095847 -NCT02098954 -NCT02095951 -NCT02098967 -NCT02096042 -NCT02099006 -NCT02096055 -NCT02099045 -NCT02096068 -NCT02099058 -NCT02096094 -NCT02099175 -NCT02096185 -NCT02099188 -NCT02096224 -NCT02099214 -NCT02096237 -NCT02099240 -NCT02096289 -NCT02099266 -NCT02096341 -NCT02099292 -NCT02096354 -NCT02099396 -NCT02096406 -NCT02099487 -NCT02096445 -NCT02099539 -NCT02096458 -NCT02099578 -NCT02096510 -NCT02099604 -NCT02096562 -NCT02099721 -NCT02096588 -NCT02099734 -NCT02096614 -NCT02099773 -NCT02096666 -NCT02099864 -NCT02096783 -NCT02099916 -NCT02096835 -NCT02100007 -NCT02097095 -NCT02100150 -NCT02097212 -NCT02100189 -NCT02097225 -NCT02100202 -NCT02097238 -NCT02100254 -NCT02097303 -NCT02100332 -NCT02097368 -NCT02100358 -NCT02097420 -NCT02100371 -NCT02097459 -NCT02100423 -NCT02097615 -NCT02100488 -NCT02097719 -NCT02100657 -NCT02097732 -NCT02100670 -NCT02097810 -NCT02100722 -NCT02097875 -NCT02100813 -NCT02098044 -NCT02100852 -NCT02098109 -NCT02100891 -NCT02098239 -NCT02100930 -NCT02098252 -NCT02106598 -NCT02101008 -NCT02103426 -NCT02101021 -NCT02103387 -NCT02101034 -NCT02103478 -NCT02101164 -NCT02103504 -NCT02101177 -NCT02103530 -NCT02101203 -NCT02103582 -NCT02101242 -NCT02103608 -NCT02101281 -NCT02103946 -NCT02101294 -NCT02104050 -NCT02101320 -NCT02104076 -NCT02101385 -NCT02104180 -NCT02101580 -NCT02104193 -NCT02101593 -NCT02104323 -NCT02101606 -NCT02104362 -NCT02101684 -NCT02104427 -NCT02101736 -NCT02104440 -NCT02101775 -NCT02104492 -NCT02101788 -NCT02104505 -NCT02101853 -NCT02104583 -NCT02101905 -NCT02104609 -NCT02101918 -NCT02104817 -NCT02101931 -NCT02104882 -NCT02101944 -NCT02104895 -NCT02101970 -NCT02104921 -NCT02101983 -NCT02104986 -NCT02102009 -NCT02105090 -NCT02102022 -NCT02105103 -NCT02102035 -NCT02105116 -NCT02102061 -NCT02105168 -NCT02102100 -NCT02105233 -NCT02102165 -NCT02105350 -NCT02102178 -NCT02105441 -NCT02102269 -NCT02105480 -NCT02102438 -NCT02105519 -NCT02102477 -NCT02105545 -NCT02102490 -NCT02105636 -NCT02102542 -NCT02105675 -NCT02102568 -NCT02105714 -NCT02102620 -NCT02105766 -NCT02102646 -NCT02105909 -NCT02102724 -NCT02105948 -NCT02102789 -NCT02105961 -NCT02102880 -NCT02105974 -NCT02102906 -NCT02106091 -NCT02102958 -NCT02106143 -NCT02102984 -NCT02106182 -NCT02103062 -NCT02106312 -NCT02103075 -NCT02106416 -NCT02103088 -NCT02106442 -NCT02103192 -NCT02106455 -NCT02103218 -NCT02106507 -NCT02103244 -NCT02106520 -NCT02103257 -NCT02106546 -NCT02103322 -NCT02106559 -NCT02103335 -NCT02106572 -NCT02103348 -NCT02111850 -NCT02106650 -NCT02109263 -NCT02106676 -NCT02109250 -NCT02106741 -NCT02109289 -NCT02106806 -NCT02109302 -NCT02106819 -NCT02109328 -NCT02106845 -NCT02109341 -NCT02106871 -NCT02109354 -NCT02106884 -NCT02109445 -NCT02106897 -NCT02109614 -NCT02106910 -NCT02109627 -NCT02106988 -NCT02109640 -NCT02107066 -NCT02109653 -NCT02107196 -NCT02109744 -NCT02107235 -NCT02109770 -NCT02107287 -NCT02109861 -NCT02107378 -NCT02109887 -NCT02107391 -NCT02109913 -NCT02107404 -NCT02109939 -NCT02107430 -NCT02109952 -NCT02107443 -NCT02110004 -NCT02107495 -NCT02110069 -NCT02107521 -NCT02110082 -NCT02107638 -NCT02110186 -NCT02107703 -NCT02110225 -NCT02107755 -NCT02110277 -NCT02107898 -NCT02110329 -NCT02107937 -NCT02110355 -NCT02107950 -NCT02110433 -NCT02107963 -NCT02110485 -NCT02108002 -NCT02110563 -NCT02108132 -NCT02110628 -NCT02108145 -NCT02110641 -NCT02108171 -NCT02110706 -NCT02108340 -NCT02110745 -NCT02108392 -NCT02110810 -NCT02108431 -NCT02110914 -NCT02108509 -NCT02110953 -NCT02108522 -NCT02110992 -NCT02108587 -NCT02111005 -NCT02108613 -NCT02111044 -NCT02108652 -NCT02111057 -NCT02108769 -NCT02111187 -NCT02108782 -NCT02111239 -NCT02108821 -NCT02111304 -NCT02108860 -NCT02111356 -NCT02108912 -NCT02111369 -NCT02108925 -NCT02111460 -NCT02108964 -NCT02111538 -NCT02108990 -NCT02111577 -NCT02109016 -NCT02111616 -NCT02109068 -NCT02111668 -NCT02109146 -NCT02111681 -NCT02109159 -NCT02111785 -NCT02109198 -NCT02111824 -NCT02109224 -NCT02111837 -NCT02109237 -NCT02115919 -NCT02111863 -NCT02113891 -NCT02111889 -NCT02113878 -NCT02111941 -NCT02113904 -NCT02112019 -NCT02113917 -NCT02112032 -NCT02113982 -NCT02112045 -NCT02114034 -NCT02112084 -NCT02114099 -NCT02112149 -NCT02114112 -NCT02112162 -NCT02114164 -NCT02112175 -NCT02114203 -NCT02112214 -NCT02114216 -NCT02112240 -NCT02114229 -NCT02112279 -NCT02114359 -NCT02112344 -NCT02114411 -NCT02112370 -NCT02114476 -NCT02112409 -NCT02114489 -NCT02112422 -NCT02114502 -NCT02112461 -NCT02114528 -NCT02112526 -NCT02114606 -NCT02112552 -NCT02114658 -NCT02112565 -NCT02114684 -NCT02112578 -NCT02114710 -NCT02112604 -NCT02114762 -NCT02112617 -NCT02114775 -NCT02112643 -NCT02114827 -NCT02112656 -NCT02114944 -NCT02112682 -NCT02115009 -NCT02112721 -NCT02115035 -NCT02112747 -NCT02115048 -NCT02112799 -NCT02115074 -NCT02112812 -NCT02115100 -NCT02112864 -NCT02115126 -NCT02112890 -NCT02115139 -NCT02112903 -NCT02115152 -NCT02112916 -NCT02115165 -NCT02112929 -NCT02115178 -NCT02113007 -NCT02115204 -NCT02113163 -NCT02115230 -NCT02113241 -NCT02115243 -NCT02113319 -NCT02115269 -NCT02113332 -NCT02115282 -NCT02113358 -NCT02115295 -NCT02113423 -NCT02115334 -NCT02113436 -NCT02115373 -NCT02113514 -NCT02115386 -NCT02113527 -NCT02115464 -NCT02113553 -NCT02115490 -NCT02113618 -NCT02115542 -NCT02113657 -NCT02115594 -NCT02113709 -NCT02115607 -NCT02113774 -NCT02115672 -NCT02113787 -NCT02115802 -NCT02113800 -NCT02115828 -NCT02113813 -NCT02115867 -NCT02113826 -NCT02115906 -NCT02113865 -NCT02121301 -NCT02115958 -NCT02118285 -NCT02115984 -NCT02118233 -NCT02115997 -NCT02118324 -NCT02116101 -NCT02118337 -NCT02116127 -NCT02118532 -NCT02116140 -NCT02118558 -NCT02116218 -NCT02118675 -NCT02116244 -NCT02118727 -NCT02116322 -NCT02118766 -NCT02116361 -NCT02118792 -NCT02116439 -NCT02118805 -NCT02116530 -NCT02119026 -NCT02116569 -NCT02119091 -NCT02116582 -NCT02119286 -NCT02116647 -NCT02119338 -NCT02116673 -NCT02119429 -NCT02116712 -NCT02119468 -NCT02116738 -NCT02119481 -NCT02116764 -NCT02119494 -NCT02116777 -NCT02119559 -NCT02116803 -NCT02119611 -NCT02116829 -NCT02119624 -NCT02116894 -NCT02119637 -NCT02116907 -NCT02119650 -NCT02116920 -NCT02119663 -NCT02116959 -NCT02119676 -NCT02117011 -NCT02119715 -NCT02117024 -NCT02119728 -NCT02117063 -NCT02119754 -NCT02117115 -NCT02119780 -NCT02117167 -NCT02119858 -NCT02117219 -NCT02119871 -NCT02117258 -NCT02119884 -NCT02117284 -NCT02119923 -NCT02117297 -NCT02120027 -NCT02117310 -NCT02120053 -NCT02117336 -NCT02120118 -NCT02117362 -NCT02120222 -NCT02117375 -NCT02120287 -NCT02117401 -NCT02120417 -NCT02117427 -NCT02120456 -NCT02117453 -NCT02120469 -NCT02117466 -NCT02120638 -NCT02117479 -NCT02120651 -NCT02117557 -NCT02120677 -NCT02117635 -NCT02120768 -NCT02117648 -NCT02120807 -NCT02117661 -NCT02120833 -NCT02117674 -NCT02120885 -NCT02117817 -NCT02120898 -NCT02117895 -NCT02120911 -NCT02117908 -NCT02120924 -NCT02117960 -NCT02121028 -NCT02117973 -NCT02121080 -NCT02118064 -NCT02121171 -NCT02118077 -NCT02126527 -NCT02121353 -NCT02124031 -NCT02121366 -NCT02123953 -NCT02121379 -NCT02124044 -NCT02121405 -NCT02124070 -NCT02121418 -NCT02124096 -NCT02121457 -NCT02124109 -NCT02121496 -NCT02124148 -NCT02121548 -NCT02124174 -NCT02121561 -NCT02124239 -NCT02121587 -NCT02124252 -NCT02121600 -NCT02124317 -NCT02121613 -NCT02124356 -NCT02121639 -NCT02124369 -NCT02121691 -NCT02124421 -NCT02121756 -NCT02124551 -NCT02121938 -NCT02124577 -NCT02121990 -NCT02124668 -NCT02122003 -NCT02124707 -NCT02122042 -NCT02124733 -NCT02122081 -NCT02124746 -NCT02122146 -NCT02124772 -NCT02122159 -NCT02124850 -NCT02122172 -NCT02124889 -NCT02122185 -NCT02124902 -NCT02122211 -NCT02124928 -NCT02122419 -NCT02125006 -NCT02122432 -NCT02125058 -NCT02122445 -NCT02125084 -NCT02122523 -NCT02125136 -NCT02122601 -NCT02125175 -NCT02122614 -NCT02125240 -NCT02122640 -NCT02125318 -NCT02122653 -NCT02125344 -NCT02122770 -NCT02125357 -NCT02122783 -NCT02125396 -NCT02122796 -NCT02125409 -NCT02122809 -NCT02125461 -NCT02122822 -NCT02125474 -NCT02122861 -NCT02125513 -NCT02122900 -NCT02125591 -NCT02122913 -NCT02125604 -NCT02123043 -NCT02125669 -NCT02123056 -NCT02125682 -NCT02123147 -NCT02125747 -NCT02123381 -NCT02125760 -NCT02123407 -NCT02125786 -NCT02123498 -NCT02125825 -NCT02123511 -NCT02125929 -NCT02123537 -NCT02126098 -NCT02123641 -NCT02126137 -NCT02123680 -NCT02126176 -NCT02123758 -NCT02126254 -NCT02123823 -NCT02126319 -NCT02123836 -NCT02126449 -NCT02123849 -NCT02126501 -NCT02123888 -NCT02131376 -NCT02126553 -NCT02129218 -NCT02126579 -NCT02129205 -NCT02126631 -NCT02129257 -NCT02126644 -NCT02129309 -NCT02126670 -NCT02129322 -NCT02126683 -NCT02129335 -NCT02126709 -NCT02129348 -NCT02126722 -NCT02129413 -NCT02126774 -NCT02129439 -NCT02126891 -NCT02129452 -NCT02126969 -NCT02129556 -NCT02126982 -NCT02129569 -NCT02126995 -NCT02129582 -NCT02127073 -NCT02129608 -NCT02127151 -NCT02129634 -NCT02127268 -NCT02129647 -NCT02127333 -NCT02129686 -NCT02127372 -NCT02129699 -NCT02127398 -NCT02129712 -NCT02127515 -NCT02129764 -NCT02127554 -NCT02129855 -NCT02127645 -NCT02129933 -NCT02127710 -NCT02130011 -NCT02127814 -NCT02130115 -NCT02127827 -NCT02130128 -NCT02127905 -NCT02130180 -NCT02128061 -NCT02130193 -NCT02128100 -NCT02130245 -NCT02128126 -NCT02130258 -NCT02128152 -NCT02130271 -NCT02128165 -NCT02130284 -NCT02128217 -NCT02130297 -NCT02128230 -NCT02130323 -NCT02128243 -NCT02130427 -NCT02128282 -NCT02130466 -NCT02128373 -NCT02130492 -NCT02128425 -NCT02130505 -NCT02128438 -NCT02130557 -NCT02128490 -NCT02130570 -NCT02128529 -NCT02130687 -NCT02128542 -NCT02130700 -NCT02128646 -NCT02130726 -NCT02128659 -NCT02130752 -NCT02128685 -NCT02130765 -NCT02128698 -NCT02130843 -NCT02128724 -NCT02130869 -NCT02128763 -NCT02130882 -NCT02128776 -NCT02130947 -NCT02128906 -NCT02130973 -NCT02128945 -NCT02131064 -NCT02128958 -NCT02131155 -NCT02129049 -NCT02131207 -NCT02129062 -NCT02131259 -NCT02129075 -NCT02131324 -NCT02129088 -NCT02131350 -NCT02129101 -NCT02136043 -NCT02131441 -NCT02133625 -NCT02131467 -NCT02133612 -NCT02131480 -NCT02133651 -NCT02131493 -NCT02133677 -NCT02131506 -NCT02133703 -NCT02131545 -NCT02133742 -NCT02131558 -NCT02133768 -NCT02131584 -NCT02133781 -NCT02131636 -NCT02133794 -NCT02131649 -NCT02133820 -NCT02131662 -NCT02133885 -NCT02131688 -NCT02133898 -NCT02131701 -NCT02133924 -NCT02131714 -NCT02134015 -NCT02131753 -NCT02134067 -NCT02131766 -NCT02134197 -NCT02131779 -NCT02134223 -NCT02131805 -NCT02134262 -NCT02132000 -NCT02134327 -NCT02132052 -NCT02134340 -NCT02132078 -NCT02134392 -NCT02132117 -NCT02134444 -NCT02132130 -NCT02134457 -NCT02132143 -NCT02134470 -NCT02132208 -NCT02134522 -NCT02132260 -NCT02134535 -NCT02132325 -NCT02134600 -NCT02132364 -NCT02134652 -NCT02132390 -NCT02134704 -NCT02132403 -NCT02134717 -NCT02132468 -NCT02134782 -NCT02132507 -NCT02134886 -NCT02132533 -NCT02134912 -NCT02132585 -NCT02134990 -NCT02132598 -NCT02135042 -NCT02132624 -NCT02135094 -NCT02132637 -NCT02135133 -NCT02132728 -NCT02135159 -NCT02132754 -NCT02135185 -NCT02132845 -NCT02135211 -NCT02132884 -NCT02135276 -NCT02132949 -NCT02135380 -NCT02132975 -NCT02135406 -NCT02132988 -NCT02135419 -NCT02133014 -NCT02135445 -NCT02133027 -NCT02135484 -NCT02133079 -NCT02135510 -NCT02133157 -NCT02135523 -NCT02133183 -NCT02135562 -NCT02133196 -NCT02135601 -NCT02133222 -NCT02135692 -NCT02133235 -NCT02135731 -NCT02133274 -NCT02135822 -NCT02133300 -NCT02135874 -NCT02133417 -NCT02135900 -NCT02133599 -NCT02141802 -NCT02136095 -NCT02138786 -NCT02136121 -NCT02138760 -NCT02136134 -NCT02138890 -NCT02136342 -NCT02138929 -NCT02136355 -NCT02138955 -NCT02136368 -NCT02138981 -NCT02136394 -NCT02139046 -NCT02136459 -NCT02139267 -NCT02136602 -NCT02139358 -NCT02136719 -NCT02139371 -NCT02136758 -NCT02139397 -NCT02136823 -NCT02139579 -NCT02136836 -NCT02139605 -NCT02136849 -NCT02139644 -NCT02136927 -NCT02139683 -NCT02136953 -NCT02139813 -NCT02137044 -NCT02139852 -NCT02137083 -NCT02139904 -NCT02137096 -NCT02139930 -NCT02137135 -NCT02140021 -NCT02137200 -NCT02140034 -NCT02137213 -NCT02140073 -NCT02137252 -NCT02140138 -NCT02137265 -NCT02140164 -NCT02137278 -NCT02140203 -NCT02137291 -NCT02140242 -NCT02137304 -NCT02140320 -NCT02137317 -NCT02140333 -NCT02137343 -NCT02140437 -NCT02137356 -NCT02140476 -NCT02137408 -NCT02140567 -NCT02137460 -NCT02140593 -NCT02137538 -NCT02140606 -NCT02137564 -NCT02140632 -NCT02137577 -NCT02140840 -NCT02137746 -NCT02140892 -NCT02137759 -NCT02140905 -NCT02137785 -NCT02140983 -NCT02137837 -NCT02140996 -NCT02137889 -NCT02141035 -NCT02137928 -NCT02141061 -NCT02137954 -NCT02141100 -NCT02138214 -NCT02141139 -NCT02138292 -NCT02141282 -NCT02138331 -NCT02141295 -NCT02138383 -NCT02141347 -NCT02138422 -NCT02141373 -NCT02138448 -NCT02141451 -NCT02138526 -NCT02141464 -NCT02138539 -NCT02141477 -NCT02138578 -NCT02141490 -NCT02138617 -NCT02141542 -NCT02138630 -NCT02141555 -NCT02138643 -NCT02141659 -NCT02138721 -NCT02141698 -NCT02138734 -NCT02146989 -NCT02141828 -NCT02144753 -NCT02141854 -NCT02144727 -NCT02141906 -NCT02144857 -NCT02141919 -NCT02145026 -NCT02141932 -NCT02145039 -NCT02141971 -NCT02145078 -NCT02142010 -NCT02145130 -NCT02142036 -NCT02145143 -NCT02142049 -NCT02145169 -NCT02142244 -NCT02145208 -NCT02142257 -NCT02145234 -NCT02142322 -NCT02145247 -NCT02142335 -NCT02145286 -NCT02142439 -NCT02145312 -NCT02142491 -NCT02145338 -NCT02142530 -NCT02145390 -NCT02142543 -NCT02145442 -NCT02142608 -NCT02145494 -NCT02142660 -NCT02145559 -NCT02142738 -NCT02145598 -NCT02142751 -NCT02145611 -NCT02142790 -NCT02145637 -NCT02142803 -NCT02145650 -NCT02142829 -NCT02145663 -NCT02142894 -NCT02145715 -NCT02142959 -NCT02145728 -NCT02143050 -NCT02145741 -NCT02143154 -NCT02145754 -NCT02143219 -NCT02145819 -NCT02143388 -NCT02145858 -NCT02143401 -NCT02145871 -NCT02143414 -NCT02145884 -NCT02143466 -NCT02145910 -NCT02143609 -NCT02145949 -NCT02143622 -NCT02145975 -NCT02143635 -NCT02146040 -NCT02143700 -NCT02146053 -NCT02143726 -NCT02146092 -NCT02143804 -NCT02146105 -NCT02143830 -NCT02146118 -NCT02143908 -NCT02146131 -NCT02143986 -NCT02146144 -NCT02144012 -NCT02146222 -NCT02144038 -NCT02146248 -NCT02144077 -NCT02146274 -NCT02144103 -NCT02146287 -NCT02144181 -NCT02146313 -NCT02144194 -NCT02146508 -NCT02144311 -NCT02146521 -NCT02144441 -NCT02146586 -NCT02144493 -NCT02146703 -NCT02144545 -NCT02146755 -NCT02144584 -NCT02146833 -NCT02144623 -NCT02146911 -NCT02144649 -NCT02146924 -NCT02144675 -NCT02153073 -NCT02147028 -NCT02150447 -NCT02147054 -NCT02150408 -NCT02147080 -NCT02150486 -NCT02147158 -NCT02150525 -NCT02147171 -NCT02150564 -NCT02147197 -NCT02150590 -NCT02147210 -NCT02150616 -NCT02147249 -NCT02150629 -NCT02147301 -NCT02150733 -NCT02147366 -NCT02150863 -NCT02147509 -NCT02150928 -NCT02147574 -NCT02150941 -NCT02147639 -NCT02150967 -NCT02147691 -NCT02151006 -NCT02147808 -NCT02151019 -NCT02147821 -NCT02151071 -NCT02147873 -NCT02151084 -NCT02147964 -NCT02151149 -NCT02147990 -NCT02151214 -NCT02148159 -NCT02151357 -NCT02148250 -NCT02151448 -NCT02148276 -NCT02151487 -NCT02148380 -NCT02151552 -NCT02148406 -NCT02151591 -NCT02148549 -NCT02151604 -NCT02148575 -NCT02151721 -NCT02148601 -NCT02151760 -NCT02148874 -NCT02151825 -NCT02148900 -NCT02151864 -NCT02148913 -NCT02151903 -NCT02148926 -NCT02151981 -NCT02149030 -NCT02152059 -NCT02149108 -NCT02152072 -NCT02149121 -NCT02152124 -NCT02149173 -NCT02152137 -NCT02149199 -NCT02152163 -NCT02149225 -NCT02152202 -NCT02149264 -NCT02152254 -NCT02149459 -NCT02152462 -NCT02149485 -NCT02152488 -NCT02149524 -NCT02152553 -NCT02149550 -NCT02152592 -NCT02149576 -NCT02152631 -NCT02149628 -NCT02152644 -NCT02149654 -NCT02152696 -NCT02149771 -NCT02152709 -NCT02149784 -NCT02152735 -NCT02149849 -NCT02152800 -NCT02149862 -NCT02152943 -NCT02149914 -NCT02152956 -NCT02150031 -NCT02152982 -NCT02150083 -NCT02152995 -NCT02150135 -NCT02153008 -NCT02150148 -NCT02153021 -NCT02150213 -NCT02153034 -NCT02150317 -NCT02158195 -NCT02153086 -NCT02156102 -NCT02153229 -NCT02156063 -NCT02153398 -NCT02156232 -NCT02153450 -NCT02156271 -NCT02153567 -NCT02156310 -NCT02153580 -NCT02156362 -NCT02153619 -NCT02156375 -NCT02153645 -NCT02156388 -NCT02153658 -NCT02156557 -NCT02153671 -NCT02156570 -NCT02153840 -NCT02156648 -NCT02153905 -NCT02156726 -NCT02153918 -NCT02156739 -NCT02153957 -NCT02156804 -NCT02153983 -NCT02156843 -NCT02154009 -NCT02156869 -NCT02154061 -NCT02156947 -NCT02154087 -NCT02156999 -NCT02154100 -NCT02157051 -NCT02154152 -NCT02157103 -NCT02154165 -NCT02157116 -NCT02154334 -NCT02157155 -NCT02154386 -NCT02157168 -NCT02154399 -NCT02157181 -NCT02154451 -NCT02157194 -NCT02154464 -NCT02157207 -NCT02154490 -NCT02157246 -NCT02154529 -NCT02157259 -NCT02154568 -NCT02157324 -NCT02154620 -NCT02157363 -NCT02154646 -NCT02157441 -NCT02154724 -NCT02157454 -NCT02154737 -NCT02157506 -NCT02154776 -NCT02157519 -NCT02154880 -NCT02157545 -NCT02154958 -NCT02157558 -NCT02155075 -NCT02157584 -NCT02155088 -NCT02157610 -NCT02155153 -NCT02157623 -NCT02155244 -NCT02157636 -NCT02155257 -NCT02157766 -NCT02155283 -NCT02157792 -NCT02155322 -NCT02157831 -NCT02155374 -NCT02157857 -NCT02155465 -NCT02157883 -NCT02155582 -NCT02157896 -NCT02155621 -NCT02157935 -NCT02155634 -NCT02157948 -NCT02155647 -NCT02158000 -NCT02155777 -NCT02158013 -NCT02155790 -NCT02158026 -NCT02155894 -NCT02158039 -NCT02155920 -NCT02158052 -NCT02155933 -NCT02158091 -NCT02155985 -NCT02158182 -NCT02156050 -NCT02164097 -NCT02158208 -NCT02161354 -NCT02158234 -NCT02161029 -NCT02158338 -NCT02161367 -NCT02158351 -NCT02161380 -NCT02158416 -NCT02161419 -NCT02158507 -NCT02161679 -NCT02158520 -NCT02161692 -NCT02158572 -NCT02161822 -NCT02158585 -NCT02161900 -NCT02158650 -NCT02161952 -NCT02158702 -NCT02161991 -NCT02158780 -NCT02162134 -NCT02158858 -NCT02162160 -NCT02158975 -NCT02162316 -NCT02158988 -NCT02162329 -NCT02159066 -NCT02162342 -NCT02159079 -NCT02162381 -NCT02159157 -NCT02162420 -NCT02159248 -NCT02162446 -NCT02159287 -NCT02162524 -NCT02159339 -NCT02162537 -NCT02159365 -NCT02162563 -NCT02159469 -NCT02162589 -NCT02159482 -NCT02162667 -NCT02159495 -NCT02162719 -NCT02159508 -NCT02162732 -NCT02159573 -NCT02162758 -NCT02159612 -NCT02162771 -NCT02159625 -NCT02162836 -NCT02159638 -NCT02162862 -NCT02159690 -NCT02162888 -NCT02159703 -NCT02162914 -NCT02159716 -NCT02163031 -NCT02159755 -NCT02163044 -NCT02159794 -NCT02163057 -NCT02159820 -NCT02163083 -NCT02159872 -NCT02163096 -NCT02159924 -NCT02163187 -NCT02159950 -NCT02163226 -NCT02159963 -NCT02163252 -NCT02159989 -NCT02163291 -NCT02160015 -NCT02163304 -NCT02160041 -NCT02163317 -NCT02160080 -NCT02163356 -NCT02160106 -NCT02163577 -NCT02160132 -NCT02163668 -NCT02160288 -NCT02163694 -NCT02160301 -NCT02163733 -NCT02160353 -NCT02163759 -NCT02160535 -NCT02163785 -NCT02160600 -NCT02163863 -NCT02160626 -NCT02163954 -NCT02160678 -NCT02163993 -NCT02160717 -NCT02164006 -NCT02160730 -NCT02164019 -NCT02160951 -NCT02170025 -NCT02164136 -NCT02167256 -NCT02164149 -NCT02167217 -NCT02164240 -NCT02167321 -NCT02164383 -NCT02167334 -NCT02164448 -NCT02167360 -NCT02164461 -NCT02167412 -NCT02164500 -NCT02167490 -NCT02164513 -NCT02167568 -NCT02164643 -NCT02167581 -NCT02164838 -NCT02167594 -NCT02164916 -NCT02167633 -NCT02165020 -NCT02167646 -NCT02165176 -NCT02167698 -NCT02165267 -NCT02167711 -NCT02165293 -NCT02167737 -NCT02165384 -NCT02167854 -NCT02165436 -NCT02167906 -NCT02165462 -NCT02167919 -NCT02165514 -NCT02167958 -NCT02165527 -NCT02168036 -NCT02165566 -NCT02168062 -NCT02165605 -NCT02168075 -NCT02165696 -NCT02168088 -NCT02165761 -NCT02168101 -NCT02165800 -NCT02168114 -NCT02165826 -NCT02168140 -NCT02165839 -NCT02168153 -NCT02165852 -NCT02168179 -NCT02165865 -NCT02168205 -NCT02165917 -NCT02168270 -NCT02165995 -NCT02168296 -NCT02166190 -NCT02168387 -NCT02166242 -NCT02168426 -NCT02166255 -NCT02168608 -NCT02166320 -NCT02168660 -NCT02166333 -NCT02168673 -NCT02166372 -NCT02168725 -NCT02166411 -NCT02168777 -NCT02166463 -NCT02168842 -NCT02166476 -NCT02168907 -NCT02166619 -NCT02169063 -NCT02166658 -NCT02169180 -NCT02166697 -NCT02169219 -NCT02166723 -NCT02169271 -NCT02166788 -NCT02169284 -NCT02166801 -NCT02169323 -NCT02166814 -NCT02169388 -NCT02166892 -NCT02169505 -NCT02166905 -NCT02169531 -NCT02166944 -NCT02169609 -NCT02166970 -NCT02169765 -NCT02166983 -NCT02169791 -NCT02166996 -NCT02169830 -NCT02167009 -NCT02169856 -NCT02167087 -NCT02169908 -NCT02167204 -NCT02177188 -NCT02170064 -NCT02173990 -NCT02170077 -NCT02173964 -NCT02170090 -NCT02174107 -NCT02170142 -NCT02174172 -NCT02170220 -NCT02174445 -NCT02170272 -NCT02174458 -NCT02170350 -NCT02174471 -NCT02170389 -NCT02174549 -NCT02170402 -NCT02174562 -NCT02170415 -NCT02174575 -NCT02170441 -NCT02174731 -NCT02170727 -NCT02174770 -NCT02170740 -NCT02174783 -NCT02170831 -NCT02174874 -NCT02170844 -NCT02174887 -NCT02171117 -NCT02174978 -NCT02171130 -NCT02175004 -NCT02171221 -NCT02175017 -NCT02171260 -NCT02175095 -NCT02171312 -NCT02175212 -NCT02171325 -NCT02175316 -NCT02171403 -NCT02175381 -NCT02171429 -NCT02175446 -NCT02171637 -NCT02175498 -NCT02171650 -NCT02175511 -NCT02171663 -NCT02175641 -NCT02171676 -NCT02175654 -NCT02171702 -NCT02175745 -NCT02171728 -NCT02175758 -NCT02171741 -NCT02175966 -NCT02172027 -NCT02176031 -NCT02172105 -NCT02176070 -NCT02172300 -NCT02176083 -NCT02172326 -NCT02176161 -NCT02172339 -NCT02176213 -NCT02172651 -NCT02176304 -NCT02172690 -NCT02176369 -NCT02172833 -NCT02176408 -NCT02172846 -NCT02176460 -NCT02172872 -NCT02176525 -NCT02172911 -NCT02176564 -NCT02172950 -NCT02176655 -NCT02172976 -NCT02176707 -NCT02173093 -NCT02176720 -NCT02173145 -NCT02176746 -NCT02173262 -NCT02176785 -NCT02173470 -NCT02176863 -NCT02173522 -NCT02176902 -NCT02173587 -NCT02176941 -NCT02173678 -NCT02176967 -NCT02173691 -NCT02177045 -NCT02173704 -NCT02177084 -NCT02173756 -NCT02177136 -NCT02173808 -NCT02177162 -NCT02173925 -NCT02177175 -NCT02173951 -NCT02183246 -NCT02177214 -NCT02180204 -NCT02177292 -NCT02180126 -NCT02177331 -NCT02180217 -NCT02177396 -NCT02180269 -NCT02177461 -NCT02180282 -NCT02177513 -NCT02180412 -NCT02177526 -NCT02180555 -NCT02177552 -NCT02180568 -NCT02177578 -NCT02180698 -NCT02177643 -NCT02180711 -NCT02177669 -NCT02180789 -NCT02177682 -NCT02180867 -NCT02177695 -NCT02180919 -NCT02177773 -NCT02181075 -NCT02177838 -NCT02181101 -NCT02178072 -NCT02181140 -NCT02178098 -NCT02181166 -NCT02178150 -NCT02181192 -NCT02178163 -NCT02181218 -NCT02178241 -NCT02181257 -NCT02178280 -NCT02181335 -NCT02178319 -NCT02181413 -NCT02178345 -NCT02181465 -NCT02178358 -NCT02181478 -NCT02178436 -NCT02181556 -NCT02178449 -NCT02181634 -NCT02178514 -NCT02181660 -NCT02178579 -NCT02181686 -NCT02178644 -NCT02181699 -NCT02178670 -NCT02181738 -NCT02178709 -NCT02181751 -NCT02178722 -NCT02181829 -NCT02178761 -NCT02181933 -NCT02178774 -NCT02182050 -NCT02178800 -NCT02182063 -NCT02178891 -NCT02182089 -NCT02178956 -NCT02182102 -NCT02179034 -NCT02182128 -NCT02179073 -NCT02182141 -NCT02179086 -NCT02182206 -NCT02179125 -NCT02182219 -NCT02179177 -NCT02182232 -NCT02179294 -NCT02182245 -NCT02179333 -NCT02182440 -NCT02179359 -NCT02182596 -NCT02179489 -NCT02182622 -NCT02179515 -NCT02182687 -NCT02179528 -NCT02182778 -NCT02179567 -NCT02182804 -NCT02179658 -NCT02182830 -NCT02179671 -NCT02182973 -NCT02179762 -NCT02183116 -NCT02179788 -NCT02183129 -NCT02179918 -NCT02183155 -NCT02179970 -NCT02183168 -NCT02180061 -NCT02189603 -NCT02183259 -NCT02186860 -NCT02183311 -NCT02186847 -NCT02183519 -NCT02186938 -NCT02183688 -NCT02187003 -NCT02183753 -NCT02187029 -NCT02183766 -NCT02187081 -NCT02183805 -NCT02187133 -NCT02183831 -NCT02187276 -NCT02183870 -NCT02187289 -NCT02183883 -NCT02187302 -NCT02183948 -NCT02187315 -NCT02183961 -NCT02187341 -NCT02183974 -NCT02187367 -NCT02184156 -NCT02187393 -NCT02184182 -NCT02187549 -NCT02184195 -NCT02187601 -NCT02184299 -NCT02187627 -NCT02184533 -NCT02187640 -NCT02184559 -NCT02187718 -NCT02184663 -NCT02187744 -NCT02184715 -NCT02187783 -NCT02184767 -NCT02187822 -NCT02184897 -NCT02187848 -NCT02184975 -NCT02187861 -NCT02185092 -NCT02187991 -NCT02185105 -NCT02188147 -NCT02185170 -NCT02188264 -NCT02185261 -NCT02188329 -NCT02185313 -NCT02188342 -NCT02185352 -NCT02188368 -NCT02185443 -NCT02188446 -NCT02185456 -NCT02188537 -NCT02185495 -NCT02188550 -NCT02185690 -NCT02188563 -NCT02185768 -NCT02188589 -NCT02185781 -NCT02188615 -NCT02185807 -NCT02188628 -NCT02185820 -NCT02188667 -NCT02185859 -NCT02188745 -NCT02185937 -NCT02188784 -NCT02185963 -NCT02188901 -NCT02186015 -NCT02188927 -NCT02186028 -NCT02189005 -NCT02186106 -NCT02189083 -NCT02186119 -NCT02189109 -NCT02186145 -NCT02189148 -NCT02186171 -NCT02189174 -NCT02186301 -NCT02189226 -NCT02186405 -NCT02189278 -NCT02186470 -NCT02189291 -NCT02186509 -NCT02189343 -NCT02186574 -NCT02189421 -NCT02186639 -NCT02189434 -NCT02186678 -NCT02189473 -NCT02186821 -NCT02189551 -NCT02186834 -NCT02195141 -NCT02189629 -NCT02192606 -NCT02189668 -NCT02192567 -NCT02189694 -NCT02192671 -NCT02189707 -NCT02192697 -NCT02189798 -NCT02192775 -NCT02189824 -NCT02192788 -NCT02189902 -NCT02192905 -NCT02189967 -NCT02192918 -NCT02190006 -NCT02193061 -NCT02190097 -NCT02193152 -NCT02190110 -NCT02193282 -NCT02190149 -NCT02193321 -NCT02190214 -NCT02193347 -NCT02190227 -NCT02193399 -NCT02190266 -NCT02193451 -NCT02190279 -NCT02193464 -NCT02190448 -NCT02193490 -NCT02190539 -NCT02193503 -NCT02190604 -NCT02193568 -NCT02190669 -NCT02193581 -NCT02190695 -NCT02193594 -NCT02190747 -NCT02193633 -NCT02190786 -NCT02193672 -NCT02190812 -NCT02193685 -NCT02190838 -NCT02193815 -NCT02190916 -NCT02193880 -NCT02190929 -NCT02193958 -NCT02190942 -NCT02194049 -NCT02190981 -NCT02194127 -NCT02190994 -NCT02194140 -NCT02191059 -NCT02194166 -NCT02191267 -NCT02194205 -NCT02191475 -NCT02194231 -NCT02191488 -NCT02194348 -NCT02191566 -NCT02194361 -NCT02191761 -NCT02194374 -NCT02191839 -NCT02194387 -NCT02191878 -NCT02194413 -NCT02191891 -NCT02194426 -NCT02191930 -NCT02194452 -NCT02191969 -NCT02194556 -NCT02191982 -NCT02194647 -NCT02192021 -NCT02194738 -NCT02192034 -NCT02194751 -NCT02192125 -NCT02194816 -NCT02192138 -NCT02194829 -NCT02192190 -NCT02194842 -NCT02192216 -NCT02194894 -NCT02192229 -NCT02194972 -NCT02192242 -NCT02194998 -NCT02192333 -NCT02195011 -NCT02192346 -NCT02195063 -NCT02192359 -NCT02195076 -NCT02192411 -NCT02195089 -NCT02192450 -NCT02195115 -NCT02192541 -NCT02200731 -NCT02195180 -NCT02198040 -NCT02195232 -NCT02198001 -NCT02195336 -NCT02198131 -NCT02195375 -NCT02198183 -NCT02195453 -NCT02198235 -NCT02195479 -NCT02198248 -NCT02195596 -NCT02198274 -NCT02195635 -NCT02198339 -NCT02195752 -NCT02198469 -NCT02195791 -NCT02198482 -NCT02195960 -NCT02198651 -NCT02195973 -NCT02198677 -NCT02195986 -NCT02198690 -NCT02196012 -NCT02198742 -NCT02196025 -NCT02198755 -NCT02196064 -NCT02198820 -NCT02196077 -NCT02198833 -NCT02196129 -NCT02198859 -NCT02196168 -NCT02198911 -NCT02196181 -NCT02199002 -NCT02196207 -NCT02199119 -NCT02196220 -NCT02199171 -NCT02196311 -NCT02199184 -NCT02196337 -NCT02199197 -NCT02196467 -NCT02199223 -NCT02196493 -NCT02199236 -NCT02196662 -NCT02199262 -NCT02196688 -NCT02199314 -NCT02196727 -NCT02199418 -NCT02196844 -NCT02199483 -NCT02196857 -NCT02199496 -NCT02196961 -NCT02199587 -NCT02196987 -NCT02199665 -NCT02197000 -NCT02199717 -NCT02197026 -NCT02199795 -NCT02197169 -NCT02199886 -NCT02197208 -NCT02199912 -NCT02197221 -NCT02199990 -NCT02197234 -NCT02200042 -NCT02197247 -NCT02200055 -NCT02197299 -NCT02200081 -NCT02197351 -NCT02200107 -NCT02197572 -NCT02200172 -NCT02197585 -NCT02200263 -NCT02197611 -NCT02200276 -NCT02197637 -NCT02200302 -NCT02197676 -NCT02200315 -NCT02197702 -NCT02200328 -NCT02197780 -NCT02200354 -NCT02197832 -NCT02200367 -NCT02197871 -NCT02200380 -NCT02197897 -NCT02200484 -NCT02197923 -NCT02200562 -NCT02197936 -NCT02200614 -NCT02197962 -NCT02200705 -NCT02197988 -NCT02205762 -NCT02200757 -NCT02203643 -NCT02200796 -NCT02203604 -NCT02200809 -NCT02203695 -NCT02200848 -NCT02203721 -NCT02200887 -NCT02203760 -NCT02200978 -NCT02203773 -NCT02200991 -NCT02203825 -NCT02201147 -NCT02203864 -NCT02201212 -NCT02203903 -NCT02201329 -NCT02204020 -NCT02201355 -NCT02204033 -NCT02201381 -NCT02204046 -NCT02201420 -NCT02204059 -NCT02201459 -NCT02204072 -NCT02201719 -NCT02204085 -NCT02201732 -NCT02204098 -NCT02201797 -NCT02204124 -NCT02201823 -NCT02204150 -NCT02201862 -NCT02204163 -NCT02201966 -NCT02204189 -NCT02201992 -NCT02204241 -NCT02202044 -NCT02204254 -NCT02202096 -NCT02204306 -NCT02202109 -NCT02204332 -NCT02202200 -NCT02204345 -NCT02202252 -NCT02204371 -NCT02202317 -NCT02204423 -NCT02202382 -NCT02204462 -NCT02202395 -NCT02204553 -NCT02202408 -NCT02204579 -NCT02202447 -NCT02204618 -NCT02202512 -NCT02204631 -NCT02202538 -NCT02204722 -NCT02202564 -NCT02204735 -NCT02202746 -NCT02204748 -NCT02202759 -NCT02204761 -NCT02202772 -NCT02204774 -NCT02202785 -NCT02204826 -NCT02202902 -NCT02204943 -NCT02202928 -NCT02204969 -NCT02202980 -NCT02204982 -NCT02202993 -NCT02205008 -NCT02203045 -NCT02205047 -NCT02203058 -NCT02205125 -NCT02203162 -NCT02205281 -NCT02203188 -NCT02205307 -NCT02203227 -NCT02205333 -NCT02203240 -NCT02205346 -NCT02203253 -NCT02205385 -NCT02203305 -NCT02205398 -NCT02203318 -NCT02205463 -NCT02203357 -NCT02205515 -NCT02203513 -NCT02205541 -NCT02203526 -NCT02205554 -NCT02203552 -NCT02205736 -NCT02203565 -NCT02212015 -NCT02205801 -NCT02208544 -NCT02205853 -NCT02208401 -NCT02206048 -NCT02208583 -NCT02206061 -NCT02208804 -NCT02206100 -NCT02208843 -NCT02206191 -NCT02208895 -NCT02206230 -NCT02208947 -NCT02206243 -NCT02209259 -NCT02206256 -NCT02209324 -NCT02206308 -NCT02209376 -NCT02206321 -NCT02209415 -NCT02206334 -NCT02209428 -NCT02206360 -NCT02209519 -NCT02206373 -NCT02209532 -NCT02206425 -NCT02209636 -NCT02206503 -NCT02209688 -NCT02206685 -NCT02209701 -NCT02206724 -NCT02209727 -NCT02206763 -NCT02209935 -NCT02206919 -NCT02209948 -NCT02206984 -NCT02210000 -NCT02207010 -NCT02210039 -NCT02207062 -NCT02210065 -NCT02207114 -NCT02210078 -NCT02207179 -NCT02210104 -NCT02207231 -NCT02210117 -NCT02207309 -NCT02210182 -NCT02207335 -NCT02210260 -NCT02207361 -NCT02210364 -NCT02207400 -NCT02210546 -NCT02207439 -NCT02210559 -NCT02207465 -NCT02210637 -NCT02207478 -NCT02210663 -NCT02207491 -NCT02210689 -NCT02207504 -NCT02210715 -NCT02207530 -NCT02210741 -NCT02207543 -NCT02210858 -NCT02207556 -NCT02210884 -NCT02207595 -NCT02210923 -NCT02207647 -NCT02210975 -NCT02207764 -NCT02211014 -NCT02207842 -NCT02211027 -NCT02207894 -NCT02211053 -NCT02207907 -NCT02211105 -NCT02207946 -NCT02211131 -NCT02207959 -NCT02211196 -NCT02207985 -NCT02211313 -NCT02207998 -NCT02211404 -NCT02208024 -NCT02211443 -NCT02208037 -NCT02211755 -NCT02208050 -NCT02211768 -NCT02208128 -NCT02211833 -NCT02208154 -NCT02211859 -NCT02208323 -NCT02211872 -NCT02208362 -NCT02211898 -NCT02208375 -NCT02218502 -NCT02212028 -NCT02215577 -NCT02212054 -NCT02215551 -NCT02212197 -NCT02215629 -NCT02212548 -NCT02215707 -NCT02212561 -NCT02215720 -NCT02212574 -NCT02215837 -NCT02212639 -NCT02215876 -NCT02212652 -NCT02215889 -NCT02212678 -NCT02215967 -NCT02212717 -NCT02215980 -NCT02212730 -NCT02216071 -NCT02212860 -NCT02216084 -NCT02212886 -NCT02216123 -NCT02213042 -NCT02216149 -NCT02213094 -NCT02216162 -NCT02213107 -NCT02216279 -NCT02213120 -NCT02216292 -NCT02213133 -NCT02216344 -NCT02213263 -NCT02216409 -NCT02213289 -NCT02216422 -NCT02213341 -NCT02216435 -NCT02213354 -NCT02216487 -NCT02213419 -NCT02216513 -NCT02213432 -NCT02216552 -NCT02213484 -NCT02216578 -NCT02213497 -NCT02216604 -NCT02213653 -NCT02216617 -NCT02213692 -NCT02216669 -NCT02213744 -NCT02216773 -NCT02213757 -NCT02216786 -NCT02213861 -NCT02216799 -NCT02213913 -NCT02216890 -NCT02213926 -NCT02216916 -NCT02213991 -NCT02216994 -NCT02214004 -NCT02217020 -NCT02214147 -NCT02217033 -NCT02214186 -NCT02217163 -NCT02214212 -NCT02217202 -NCT02214238 -NCT02217228 -NCT02214277 -NCT02217358 -NCT02214290 -NCT02217423 -NCT02214368 -NCT02217540 -NCT02214381 -NCT02217566 -NCT02214407 -NCT02217631 -NCT02214602 -NCT02217709 -NCT02214745 -NCT02217852 -NCT02214771 -NCT02217943 -NCT02214914 -NCT02217956 -NCT02215044 -NCT02218047 -NCT02215096 -NCT02218099 -NCT02215161 -NCT02218164 -NCT02215265 -NCT02218242 -NCT02215356 -NCT02218268 -NCT02215395 -NCT02218372 -NCT02215447 -NCT02218398 -NCT02215512 -NCT02224209 -NCT02218554 -NCT02221713 -NCT02218580 -NCT02221700 -NCT02218606 -NCT02221739 -NCT02218762 -NCT02221778 -NCT02218827 -NCT02221882 -NCT02218879 -NCT02221895 -NCT02218931 -NCT02221908 -NCT02218957 -NCT02221921 -NCT02219074 -NCT02221947 -NCT02219113 -NCT02221960 -NCT02219126 -NCT02221973 -NCT02219178 -NCT02221986 -NCT02219204 -NCT02221999 -NCT02219360 -NCT02222155 -NCT02219503 -NCT02222246 -NCT02219529 -NCT02222259 -NCT02219555 -NCT02222272 -NCT02219698 -NCT02222311 -NCT02219711 -NCT02222337 -NCT02219724 -NCT02222363 -NCT02219737 -NCT02222545 -NCT02219763 -NCT02222558 -NCT02219789 -NCT02222623 -NCT02219815 -NCT02222688 -NCT02219828 -NCT02222714 -NCT02219854 -NCT02222740 -NCT02219893 -NCT02222844 -NCT02219997 -NCT02222922 -NCT02220049 -NCT02222948 -NCT02220062 -NCT02223039 -NCT02220088 -NCT02223052 -NCT02220127 -NCT02223078 -NCT02220231 -NCT02223091 -NCT02220270 -NCT02223208 -NCT02220374 -NCT02223221 -NCT02220491 -NCT02223247 -NCT02220517 -NCT02223286 -NCT02220543 -NCT02223299 -NCT02220556 -NCT02223312 -NCT02220608 -NCT02223325 -NCT02220699 -NCT02223364 -NCT02220829 -NCT02223377 -NCT02220842 -NCT02223546 -NCT02220855 -NCT02223572 -NCT02220894 -NCT02223598 -NCT02220972 -NCT02223611 -NCT02220985 -NCT02223676 -NCT02221076 -NCT02223715 -NCT02221141 -NCT02223754 -NCT02221245 -NCT02223819 -NCT02221310 -NCT02223832 -NCT02221427 -NCT02223884 -NCT02221479 -NCT02223936 -NCT02221492 -NCT02223975 -NCT02221505 -NCT02224014 -NCT02221648 -NCT02230553 -NCT02224482 -NCT02227823 -NCT02224547 -NCT02227784 -NCT02224586 -NCT02227888 -NCT02224599 -NCT02227901 -NCT02224664 -NCT02227914 -NCT02224677 -NCT02227940 -NCT02224729 -NCT02227953 -NCT02224781 -NCT02228057 -NCT02224807 -NCT02228096 -NCT02225002 -NCT02228174 -NCT02225015 -NCT02228200 -NCT02225093 -NCT02228239 -NCT02225106 -NCT02228265 -NCT02225119 -NCT02228330 -NCT02225132 -NCT02228343 -NCT02225197 -NCT02228369 -NCT02225223 -NCT02228395 -NCT02225262 -NCT02228473 -NCT02225275 -NCT02228512 -NCT02225366 -NCT02228525 -NCT02225405 -NCT02228681 -NCT02225444 -NCT02228772 -NCT02225470 -NCT02228785 -NCT02225483 -NCT02228811 -NCT02225496 -NCT02228837 -NCT02225509 -NCT02228889 -NCT02225574 -NCT02228902 -NCT02225652 -NCT02229058 -NCT02225704 -NCT02229071 -NCT02225795 -NCT02229084 -NCT02225834 -NCT02229136 -NCT02225925 -NCT02229149 -NCT02226107 -NCT02229266 -NCT02226276 -NCT02229370 -NCT02226289 -NCT02229422 -NCT02226380 -NCT02229500 -NCT02226471 -NCT02229539 -NCT02226484 -NCT02229656 -NCT02226497 -NCT02229682 -NCT02226692 -NCT02229734 -NCT02226731 -NCT02229747 -NCT02226757 -NCT02229799 -NCT02226861 -NCT02229812 -NCT02226939 -NCT02229890 -NCT02226965 -NCT02229955 -NCT02227082 -NCT02229981 -NCT02227108 -NCT02229994 -NCT02227199 -NCT02230020 -NCT02227251 -NCT02230176 -NCT02227433 -NCT02230306 -NCT02227537 -NCT02230319 -NCT02227576 -NCT02230397 -NCT02227654 -NCT02230410 -NCT02227667 -NCT02230462 -NCT02227680 -NCT02230475 -NCT02227732 -NCT02236572 -NCT02230631 -NCT02233712 -NCT02230722 -NCT02233608 -NCT02230800 -NCT02233725 -NCT02230813 -NCT02233868 -NCT02230917 -NCT02233985 -NCT02230943 -NCT02233998 -NCT02231047 -NCT02234037 -NCT02231086 -NCT02234050 -NCT02231112 -NCT02234115 -NCT02231164 -NCT02234154 -NCT02231203 -NCT02234180 -NCT02231229 -NCT02234206 -NCT02231294 -NCT02234219 -NCT02231320 -NCT02234284 -NCT02231385 -NCT02234297 -NCT02231424 -NCT02234310 -NCT02231593 -NCT02234388 -NCT02231606 -NCT02234453 -NCT02231619 -NCT02234466 -NCT02231658 -NCT02234479 -NCT02231723 -NCT02234596 -NCT02231749 -NCT02234661 -NCT02231762 -NCT02234921 -NCT02231775 -NCT02234986 -NCT02231853 -NCT02235025 -NCT02231879 -NCT02235051 -NCT02232074 -NCT02235129 -NCT02232126 -NCT02235142 -NCT02232152 -NCT02235207 -NCT02232178 -NCT02235233 -NCT02232243 -NCT02235246 -NCT02232386 -NCT02235311 -NCT02232438 -NCT02235324 -NCT02232490 -NCT02235402 -NCT02232516 -NCT02235428 -NCT02232620 -NCT02235493 -NCT02232633 -NCT02235506 -NCT02232646 -NCT02235519 -NCT02232672 -NCT02235571 -NCT02232685 -NCT02235623 -NCT02232724 -NCT02235662 -NCT02232737 -NCT02235688 -NCT02232893 -NCT02235701 -NCT02232906 -NCT02235740 -NCT02232932 -NCT02235818 -NCT02232945 -NCT02235974 -NCT02233049 -NCT02235987 -NCT02233205 -NCT02236000 -NCT02233231 -NCT02236013 -NCT02233257 -NCT02236078 -NCT02233322 -NCT02236195 -NCT02233335 -NCT02236273 -NCT02233374 -NCT02236299 -NCT02233387 -NCT02236442 -NCT02233543 -NCT02236546 -NCT02233569 -NCT02242526 -NCT02236611 -NCT02239900 -NCT02236689 -NCT02239861 -NCT02236806 -NCT02239952 -NCT02236871 -NCT02239991 -NCT02236884 -NCT02240017 -NCT02236910 -NCT02240212 -NCT02236936 -NCT02240238 -NCT02237092 -NCT02240251 -NCT02237157 -NCT02240381 -NCT02237183 -NCT02240407 -NCT02237196 -NCT02240433 -NCT02237209 -NCT02240472 -NCT02237248 -NCT02240498 -NCT02237261 -NCT02240524 -NCT02237326 -NCT02240537 -NCT02237391 -NCT02240550 -NCT02237547 -NCT02240563 -NCT02237612 -NCT02240706 -NCT02237625 -NCT02240719 -NCT02237638 -NCT02240758 -NCT02237690 -NCT02240771 -NCT02237729 -NCT02240836 -NCT02237755 -NCT02240888 -NCT02237846 -NCT02240966 -NCT02237859 -NCT02241044 -NCT02237924 -NCT02241083 -NCT02237937 -NCT02241109 -NCT02238184 -NCT02241122 -NCT02238223 -NCT02241161 -NCT02238288 -NCT02241187 -NCT02238418 -NCT02241278 -NCT02238496 -NCT02241356 -NCT02238509 -NCT02241369 -NCT02238522 -NCT02241434 -NCT02238587 -NCT02241499 -NCT02238613 -NCT02241551 -NCT02238626 -NCT02241668 -NCT02238704 -NCT02241681 -NCT02238808 -NCT02241707 -NCT02238847 -NCT02241720 -NCT02238873 -NCT02241876 -NCT02238886 -NCT02241928 -NCT02238912 -NCT02241954 -NCT02238925 -NCT02242045 -NCT02238938 -NCT02242058 -NCT02238951 -NCT02242084 -NCT02239016 -NCT02242097 -NCT02239185 -NCT02242123 -NCT02239224 -NCT02242175 -NCT02239289 -NCT02242227 -NCT02239315 -NCT02242266 -NCT02239536 -NCT02242292 -NCT02239601 -NCT02242305 -NCT02239666 -NCT02242409 -NCT02239679 -NCT02242448 -NCT02239705 -NCT02248597 -NCT02242617 -NCT02245737 -NCT02242708 -NCT02245555 -NCT02242747 -NCT02245828 -NCT02242773 -NCT02245854 -NCT02242786 -NCT02245867 -NCT02242812 -NCT02245919 -NCT02242929 -NCT02245971 -NCT02242942 -NCT02245997 -NCT02243007 -NCT02246023 -NCT02243059 -NCT02246049 -NCT02243124 -NCT02246127 -NCT02243163 -NCT02246205 -NCT02243228 -NCT02246231 -NCT02243280 -NCT02246244 -NCT02243293 -NCT02246270 -NCT02243358 -NCT02246322 -NCT02243371 -NCT02246400 -NCT02243384 -NCT02246439 -NCT02243436 -NCT02246621 -NCT02243488 -NCT02246634 -NCT02243501 -NCT02246673 -NCT02243540 -NCT02246699 -NCT02243579 -NCT02246894 -NCT02243605 -NCT02246907 -NCT02243618 -NCT02246946 -NCT02243657 -NCT02247011 -NCT02243735 -NCT02247076 -NCT02243748 -NCT02247180 -NCT02243917 -NCT02247232 -NCT02244021 -NCT02247336 -NCT02244060 -NCT02247349 -NCT02244125 -NCT02247375 -NCT02244138 -NCT02247401 -NCT02244164 -NCT02247453 -NCT02244242 -NCT02247544 -NCT02244255 -NCT02247609 -NCT02244268 -NCT02247635 -NCT02244281 -NCT02247726 -NCT02244294 -NCT02247843 -NCT02244320 -NCT02247869 -NCT02244411 -NCT02247960 -NCT02244463 -NCT02247973 -NCT02244489 -NCT02248012 -NCT02244502 -NCT02248038 -NCT02244580 -NCT02248090 -NCT02244593 -NCT02248194 -NCT02244632 -NCT02248233 -NCT02244658 -NCT02248298 -NCT02244749 -NCT02248350 -NCT02244957 -NCT02248389 -NCT02245139 -NCT02248402 -NCT02245204 -NCT02248428 -NCT02245217 -NCT02248519 -NCT02245295 -NCT02248571 -NCT02245490 -NCT02248584 -NCT02245529 -NCT02253901 -NCT02248688 -NCT02251327 -NCT02248753 -NCT02251210 -NCT02248805 -NCT02251379 -NCT02248831 -NCT02251392 -NCT02248909 -NCT02251548 -NCT02249013 -NCT02251574 -NCT02249052 -NCT02251600 -NCT02249065 -NCT02251639 -NCT02249091 -NCT02251665 -NCT02249104 -NCT02251730 -NCT02249156 -NCT02251756 -NCT02249182 -NCT02251795 -NCT02249195 -NCT02251912 -NCT02249208 -NCT02251938 -NCT02249273 -NCT02251951 -NCT02249312 -NCT02251977 -NCT02249429 -NCT02252042 -NCT02249494 -NCT02252107 -NCT02249520 -NCT02252146 -NCT02249546 -NCT02252172 -NCT02249572 -NCT02252185 -NCT02249624 -NCT02252211 -NCT02249637 -NCT02252250 -NCT02249650 -NCT02252263 -NCT02249702 -NCT02252367 -NCT02249767 -NCT02252393 -NCT02249858 -NCT02252445 -NCT02249949 -NCT02252484 -NCT02249975 -NCT02252549 -NCT02249988 -NCT02252640 -NCT02250014 -NCT02252666 -NCT02250053 -NCT02252679 -NCT02250118 -NCT02252796 -NCT02250157 -NCT02252874 -NCT02250170 -NCT02252887 -NCT02250196 -NCT02252913 -NCT02250209 -NCT02252978 -NCT02250222 -NCT02252991 -NCT02250313 -NCT02253095 -NCT02250326 -NCT02253134 -NCT02250352 -NCT02253212 -NCT02250378 -NCT02253238 -NCT02250430 -NCT02253277 -NCT02250456 -NCT02253290 -NCT02250521 -NCT02253303 -NCT02250599 -NCT02253316 -NCT02250716 -NCT02253459 -NCT02250755 -NCT02253485 -NCT02250781 -NCT02253511 -NCT02250794 -NCT02253524 -NCT02250846 -NCT02253537 -NCT02250859 -NCT02253550 -NCT02250872 -NCT02253576 -NCT02250885 -NCT02253602 -NCT02250937 -NCT02253719 -NCT02250950 -NCT02259348 -NCT02253992 -NCT02256696 -NCT02254005 -NCT02256670 -NCT02254018 -NCT02256774 -NCT02254031 -NCT02256800 -NCT02254044 -NCT02256813 -NCT02254239 -NCT02256852 -NCT02254265 -NCT02256917 -NCT02254278 -NCT02256982 -NCT02254382 -NCT02257138 -NCT02254473 -NCT02257242 -NCT02254486 -NCT02257307 -NCT02254551 -NCT02257385 -NCT02254681 -NCT02257398 -NCT02254746 -NCT02257424 -NCT02254772 -NCT02257476 -NCT02254785 -NCT02257528 -NCT02254811 -NCT02257541 -NCT02254850 -NCT02257567 -NCT02254863 -NCT02257606 -NCT02254889 -NCT02257619 -NCT02254915 -NCT02257684 -NCT02254954 -NCT02257723 -NCT02254967 -NCT02257736 -NCT02255071 -NCT02257814 -NCT02255084 -NCT02257827 -NCT02255097 -NCT02257892 -NCT02255110 -NCT02258087 -NCT02255162 -NCT02258100 -NCT02255240 -NCT02258152 -NCT02255292 -NCT02258204 -NCT02255305 -NCT02258217 -NCT02255318 -NCT02258269 -NCT02255331 -NCT02258295 -NCT02255396 -NCT02258347 -NCT02255461 -NCT02258360 -NCT02255474 -NCT02258451 -NCT02255578 -NCT02258464 -NCT02255617 -NCT02258490 -NCT02255669 -NCT02258529 -NCT02255721 -NCT02258555 -NCT02255734 -NCT02258607 -NCT02255747 -NCT02258659 -NCT02255773 -NCT02258763 -NCT02255825 -NCT02258802 -NCT02255903 -NCT02258815 -NCT02255929 -NCT02258841 -NCT02256046 -NCT02258932 -NCT02256111 -NCT02258945 -NCT02256124 -NCT02258997 -NCT02256163 -NCT02259010 -NCT02256319 -NCT02259101 -NCT02256397 -NCT02259114 -NCT02256436 -NCT02259192 -NCT02256501 -NCT02259231 -NCT02256514 -NCT02259283 -NCT02256631 -NCT02266199 -NCT02259361 -NCT02262455 -NCT02259387 -NCT02262325 -NCT02259465 -NCT02262715 -NCT02259556 -NCT02262728 -NCT02259582 -NCT02262741 -NCT02259595 -NCT02262806 -NCT02259621 -NCT02262845 -NCT02259647 -NCT02262897 -NCT02259699 -NCT02262910 -NCT02259725 -NCT02263027 -NCT02259920 -NCT02263105 -NCT02260128 -NCT02263118 -NCT02260180 -NCT02263495 -NCT02260206 -NCT02263508 -NCT02260349 -NCT02263638 -NCT02260362 -NCT02263651 -NCT02260414 -NCT02263703 -NCT02260440 -NCT02263898 -NCT02260453 -NCT02264002 -NCT02260466 -NCT02264210 -NCT02260505 -NCT02264236 -NCT02260531 -NCT02264314 -NCT02260544 -NCT02264392 -NCT02260635 -NCT02264496 -NCT02260648 -NCT02264548 -NCT02260661 -NCT02264574 -NCT02260674 -NCT02264613 -NCT02260804 -NCT02264652 -NCT02260817 -NCT02264678 -NCT02260908 -NCT02264730 -NCT02261181 -NCT02264873 -NCT02261207 -NCT02264886 -NCT02261220 -NCT02264925 -NCT02261246 -NCT02264990 -NCT02261285 -NCT02265003 -NCT02261298 -NCT02265107 -NCT02261389 -NCT02265120 -NCT02261415 -NCT02265159 -NCT02261467 -NCT02265185 -NCT02261506 -NCT02265237 -NCT02261532 -NCT02265328 -NCT02261571 -NCT02265341 -NCT02261610 -NCT02265380 -NCT02261662 -NCT02265510 -NCT02261714 -NCT02265536 -NCT02261727 -NCT02265601 -NCT02261753 -NCT02265614 -NCT02261779 -NCT02265731 -NCT02261805 -NCT02265770 -NCT02261844 -NCT02265952 -NCT02261987 -NCT02266056 -NCT02262000 -NCT02266095 -NCT02262143 -NCT02266147 -NCT02262156 -NCT02266160 -NCT02262221 -NCT02266173 -NCT02262299 -NCT02271737 -NCT02266238 -NCT02269293 -NCT02266329 -NCT02269280 -NCT02266355 -NCT02269306 -NCT02266420 -NCT02269579 -NCT02266433 -NCT02269592 -NCT02266602 -NCT02269631 -NCT02266641 -NCT02269644 -NCT02266667 -NCT02269670 -NCT02266745 -NCT02269683 -NCT02266823 -NCT02269696 -NCT02266849 -NCT02269722 -NCT02267083 -NCT02269735 -NCT02267096 -NCT02269761 -NCT02267213 -NCT02269826 -NCT02267278 -NCT02269865 -NCT02267343 -NCT02269891 -NCT02267603 -NCT02269943 -NCT02267655 -NCT02270021 -NCT02267707 -NCT02270034 -NCT02267772 -NCT02270216 -NCT02267863 -NCT02270255 -NCT02267915 -NCT02270307 -NCT02267928 -NCT02270372 -NCT02267941 -NCT02270450 -NCT02267967 -NCT02270463 -NCT02268006 -NCT02270476 -NCT02268045 -NCT02270554 -NCT02268058 -NCT02270580 -NCT02268162 -NCT02270593 -NCT02268175 -NCT02270606 -NCT02268188 -NCT02270645 -NCT02268253 -NCT02270697 -NCT02268305 -NCT02270788 -NCT02268344 -NCT02270814 -NCT02268370 -NCT02270827 -NCT02268383 -NCT02270840 -NCT02268435 -NCT02270853 -NCT02268578 -NCT02270866 -NCT02268617 -NCT02270996 -NCT02268630 -NCT02271126 -NCT02268695 -NCT02271178 -NCT02268747 -NCT02271217 -NCT02268825 -NCT02271243 -NCT02268851 -NCT02271282 -NCT02268877 -NCT02271308 -NCT02268890 -NCT02271399 -NCT02268903 -NCT02271464 -NCT02268955 -NCT02271516 -NCT02269020 -NCT02271568 -NCT02269033 -NCT02271594 -NCT02269046 -NCT02271620 -NCT02269085 -NCT02271646 -NCT02269098 -NCT02271659 -NCT02269111 -NCT02271711 -NCT02269124 -NCT02271724 -NCT02269267 -NCT02277366 -NCT02271750 -NCT02274584 -NCT02271828 -NCT02274532 -NCT02271906 -NCT02274597 -NCT02271945 -NCT02274610 -NCT02271984 -NCT02274623 -NCT02272036 -NCT02274636 -NCT02272075 -NCT02274740 -NCT02272127 -NCT02274753 -NCT02272153 -NCT02274779 -NCT02272218 -NCT02274831 -NCT02272244 -NCT02274987 -NCT02272270 -NCT02275039 -NCT02272335 -NCT02275169 -NCT02272400 -NCT02275221 -NCT02272413 -NCT02275286 -NCT02272478 -NCT02275325 -NCT02272608 -NCT02275390 -NCT02272686 -NCT02275403 -NCT02272699 -NCT02275416 -NCT02272738 -NCT02275533 -NCT02272751 -NCT02275546 -NCT02272777 -NCT02275598 -NCT02272790 -NCT02275611 -NCT02272803 -NCT02275663 -NCT02272816 -NCT02275702 -NCT02272855 -NCT02275754 -NCT02272998 -NCT02275793 -NCT02273102 -NCT02275806 -NCT02273141 -NCT02275871 -NCT02273167 -NCT02275910 -NCT02273206 -NCT02275936 -NCT02273219 -NCT02276027 -NCT02273271 -NCT02276053 -NCT02273362 -NCT02276248 -NCT02273375 -NCT02276300 -NCT02273388 -NCT02276404 -NCT02273583 -NCT02276443 -NCT02273596 -NCT02276547 -NCT02273713 -NCT02276560 -NCT02273739 -NCT02276573 -NCT02273752 -NCT02276690 -NCT02273778 -NCT02276716 -NCT02273882 -NCT02276768 -NCT02273973 -NCT02276885 -NCT02274012 -NCT02276924 -NCT02274038 -NCT02277028 -NCT02274155 -NCT02277093 -NCT02274168 -NCT02277106 -NCT02274272 -NCT02277119 -NCT02274311 -NCT02277158 -NCT02274337 -NCT02277184 -NCT02274363 -NCT02277197 -NCT02274402 -NCT02277210 -NCT02274493 -NCT02277275 -NCT02274506 -NCT02277327 -NCT02274519 -NCT02282436 -NCT02277392 -NCT02279771 -NCT02277444 -NCT02279758 -NCT02277457 -NCT02279862 -NCT02277522 -NCT02279875 -NCT02277548 -NCT02279901 -NCT02277561 -NCT02279940 -NCT02277587 -NCT02279992 -NCT02277717 -NCT02280005 -NCT02277730 -NCT02280070 -NCT02277834 -NCT02280083 -NCT02277847 -NCT02280174 -NCT02277860 -NCT02280239 -NCT02277886 -NCT02280252 -NCT02277964 -NCT02280265 -NCT02278055 -NCT02280278 -NCT02278120 -NCT02280317 -NCT02278133 -NCT02280343 -NCT02278185 -NCT02280356 -NCT02278198 -NCT02280525 -NCT02278250 -NCT02280694 -NCT02278315 -NCT02280707 -NCT02278341 -NCT02280772 -NCT02278458 -NCT02280785 -NCT02278510 -NCT02280811 -NCT02278536 -NCT02280954 -NCT02278718 -NCT02280967 -NCT02278744 -NCT02280993 -NCT02278783 -NCT02281006 -NCT02278796 -NCT02281084 -NCT02278861 -NCT02281097 -NCT02278874 -NCT02281162 -NCT02278887 -NCT02281214 -NCT02278913 -NCT02281266 -NCT02278965 -NCT02281279 -NCT02278978 -NCT02281318 -NCT02279017 -NCT02281383 -NCT02279108 -NCT02281409 -NCT02279134 -NCT02281513 -NCT02279199 -NCT02281669 -NCT02279264 -NCT02281708 -NCT02279277 -NCT02281760 -NCT02279303 -NCT02281812 -NCT02279368 -NCT02281955 -NCT02279394 -NCT02282020 -NCT02279433 -NCT02282033 -NCT02279472 -NCT02282111 -NCT02279511 -NCT02282137 -NCT02279550 -NCT02282150 -NCT02279576 -NCT02282202 -NCT02279602 -NCT02282215 -NCT02279641 -NCT02282267 -NCT02279654 -NCT02282345 -NCT02279693 -NCT02282358 -NCT02279719 -NCT02282371 -NCT02279732 -NCT02282410 -NCT02279745 -NCT02288195 -NCT02282449 -NCT02285244 -NCT02282488 -NCT02285231 -NCT02282514 -NCT02285296 -NCT02282540 -NCT02285348 -NCT02282644 -NCT02285400 -NCT02282696 -NCT02285413 -NCT02282722 -NCT02285439 -NCT02282839 -NCT02285530 -NCT02282917 -NCT02285543 -NCT02282995 -NCT02285634 -NCT02283008 -NCT02285660 -NCT02283151 -NCT02285738 -NCT02283177 -NCT02285790 -NCT02283190 -NCT02285816 -NCT02283203 -NCT02285855 -NCT02283268 -NCT02285920 -NCT02283320 -NCT02285959 -NCT02283346 -NCT02285998 -NCT02283359 -NCT02286076 -NCT02283372 -NCT02286167 -NCT02283411 -NCT02286219 -NCT02283424 -NCT02286245 -NCT02283476 -NCT02286466 -NCT02283489 -NCT02286531 -NCT02283632 -NCT02286583 -NCT02283658 -NCT02286687 -NCT02283684 -NCT02286713 -NCT02283749 -NCT02286726 -NCT02283775 -NCT02286778 -NCT02283853 -NCT02286817 -NCT02283892 -NCT02286830 -NCT02283944 -NCT02286843 -NCT02283957 -NCT02286921 -NCT02283970 -NCT02287129 -NCT02283983 -NCT02287168 -NCT02284061 -NCT02287233 -NCT02284074 -NCT02287311 -NCT02284139 -NCT02287337 -NCT02284334 -NCT02287402 -NCT02284464 -NCT02287428 -NCT02284490 -NCT02287506 -NCT02284529 -NCT02287519 -NCT02284724 -NCT02287558 -NCT02284789 -NCT02287636 -NCT02284802 -NCT02287675 -NCT02284841 -NCT02287701 -NCT02284867 -NCT02287727 -NCT02284919 -NCT02287818 -NCT02284945 -NCT02287844 -NCT02284958 -NCT02287883 -NCT02284971 -NCT02287987 -NCT02284997 -NCT02288052 -NCT02285062 -NCT02288078 -NCT02285101 -NCT02288156 -NCT02285179 -NCT02288169 -NCT02285192 -NCT02294149 -NCT02288247 -NCT02291016 -NCT02288351 -NCT02290977 -NCT02288377 -NCT02291029 -NCT02288416 -NCT02291055 -NCT02288455 -NCT02291107 -NCT02288507 -NCT02291133 -NCT02288572 -NCT02291211 -NCT02288611 -NCT02291224 -NCT02288702 -NCT02291237 -NCT02288741 -NCT02291289 -NCT02288858 -NCT02291354 -NCT02288897 -NCT02291614 -NCT02288910 -NCT02291744 -NCT02288936 -NCT02291757 -NCT02288949 -NCT02291796 -NCT02288962 -NCT02291848 -NCT02288988 -NCT02291913 -NCT02289014 -NCT02291991 -NCT02289092 -NCT02292095 -NCT02289144 -NCT02292173 -NCT02289183 -NCT02292225 -NCT02289196 -NCT02292238 -NCT02289209 -NCT02292316 -NCT02289222 -NCT02292368 -NCT02289300 -NCT02292394 -NCT02289352 -NCT02292407 -NCT02289456 -NCT02292420 -NCT02289547 -NCT02292446 -NCT02289560 -NCT02292459 -NCT02289690 -NCT02292524 -NCT02289768 -NCT02292550 -NCT02289807 -NCT02292641 -NCT02289833 -NCT02292732 -NCT02289898 -NCT02292745 -NCT02289924 -NCT02292758 -NCT02289950 -NCT02292914 -NCT02290002 -NCT02292940 -NCT02290145 -NCT02292979 -NCT02290210 -NCT02293005 -NCT02290288 -NCT02293031 -NCT02290340 -NCT02293109 -NCT02290366 -NCT02293239 -NCT02290405 -NCT02293356 -NCT02290431 -NCT02293447 -NCT02290444 -NCT02293707 -NCT02290522 -NCT02293772 -NCT02290561 -NCT02293811 -NCT02290574 -NCT02293850 -NCT02290587 -NCT02293863 -NCT02290613 -NCT02293954 -NCT02290730 -NCT02293980 -NCT02290782 -NCT02293993 -NCT02290808 -NCT02294006 -NCT02290834 -NCT02294084 -NCT02290886 -NCT02294136 -NCT02290951 -NCT02299323 -NCT02294253 -NCT02296944 -NCT02294279 -NCT02296918 -NCT02294357 -NCT02296970 -NCT02294461 -NCT02296996 -NCT02294500 -NCT02297048 -NCT02294552 -NCT02297061 -NCT02294565 -NCT02297087 -NCT02294708 -NCT02297139 -NCT02294734 -NCT02297178 -NCT02294773 -NCT02297217 -NCT02294786 -NCT02297230 -NCT02294838 -NCT02297282 -NCT02294903 -NCT02297386 -NCT02294981 -NCT02297412 -NCT02295007 -NCT02297438 -NCT02295033 -NCT02297451 -NCT02295059 -NCT02297542 -NCT02295163 -NCT02297607 -NCT02295176 -NCT02297672 -NCT02295189 -NCT02297698 -NCT02295254 -NCT02297711 -NCT02295280 -NCT02297841 -NCT02295397 -NCT02297919 -NCT02295449 -NCT02297945 -NCT02295540 -NCT02298153 -NCT02295722 -NCT02298166 -NCT02295748 -NCT02298257 -NCT02295761 -NCT02298270 -NCT02295774 -NCT02298283 -NCT02295839 -NCT02298348 -NCT02295917 -NCT02298387 -NCT02295930 -NCT02298491 -NCT02295956 -NCT02298569 -NCT02295982 -NCT02298595 -NCT02296047 -NCT02298608 -NCT02296112 -NCT02298621 -NCT02296125 -NCT02298634 -NCT02296177 -NCT02298647 -NCT02296203 -NCT02298673 -NCT02296216 -NCT02298686 -NCT02296229 -NCT02298699 -NCT02296242 -NCT02298712 -NCT02296255 -NCT02298764 -NCT02296307 -NCT02298855 -NCT02296411 -NCT02298933 -NCT02296437 -NCT02298946 -NCT02296476 -NCT02298959 -NCT02296528 -NCT02298972 -NCT02296541 -NCT02299089 -NCT02296580 -NCT02299115 -NCT02296658 -NCT02299128 -NCT02296671 -NCT02299141 -NCT02296684 -NCT02299206 -NCT02296710 -NCT02299219 -NCT02296801 -NCT02299245 -NCT02296879 -NCT02304289 -NCT02299375 -NCT02301858 -NCT02299388 -NCT02301845 -NCT02299414 -NCT02301897 -NCT02299505 -NCT02301962 -NCT02299518 -NCT02301975 -NCT02299570 -NCT02301988 -NCT02299583 -NCT02302092 -NCT02299596 -NCT02302105 -NCT02299635 -NCT02302118 -NCT02299648 -NCT02302196 -NCT02299713 -NCT02302235 -NCT02299765 -NCT02302300 -NCT02299778 -NCT02302339 -NCT02299843 -NCT02302365 -NCT02299973 -NCT02302417 -NCT02299999 -NCT02302469 -NCT02300103 -NCT02302495 -NCT02300129 -NCT02302794 -NCT02300272 -NCT02302807 -NCT02300298 -NCT02302833 -NCT02300389 -NCT02302846 -NCT02300467 -NCT02302898 -NCT02300506 -NCT02302937 -NCT02300519 -NCT02302963 -NCT02300545 -NCT02303028 -NCT02300610 -NCT02303041 -NCT02300675 -NCT02303054 -NCT02300792 -NCT02303080 -NCT02300883 -NCT02303093 -NCT02300909 -NCT02303119 -NCT02300922 -NCT02303145 -NCT02300935 -NCT02303197 -NCT02300948 -NCT02303262 -NCT02300961 -NCT02303288 -NCT02300987 -NCT02303301 -NCT02301000 -NCT02303327 -NCT02301039 -NCT02303340 -NCT02301052 -NCT02303366 -NCT02301091 -NCT02303392 -NCT02301104 -NCT02303457 -NCT02301117 -NCT02303574 -NCT02301130 -NCT02303600 -NCT02301143 -NCT02303678 -NCT02301156 -NCT02303730 -NCT02301208 -NCT02303782 -NCT02301221 -NCT02303808 -NCT02301286 -NCT02303821 -NCT02301325 -NCT02303873 -NCT02301338 -NCT02303899 -NCT02301364 -NCT02303912 -NCT02301390 -NCT02303925 -NCT02301481 -NCT02303938 -NCT02301494 -NCT02303951 -NCT02301611 -NCT02303977 -NCT02301741 -NCT02303990 -NCT02301754 -NCT02309931 -NCT02304302 -NCT02307253 -NCT02304367 -NCT02307240 -NCT02304393 -NCT02307435 -NCT02304419 -NCT02307474 -NCT02304445 -NCT02307487 -NCT02304458 -NCT02307500 -NCT02304471 -NCT02307526 -NCT02304510 -NCT02307539 -NCT02304757 -NCT02307552 -NCT02304770 -NCT02307565 -NCT02304809 -NCT02307617 -NCT02304848 -NCT02307630 -NCT02304874 -NCT02307721 -NCT02304887 -NCT02307916 -NCT02304913 -NCT02307981 -NCT02304926 -NCT02307994 -NCT02304978 -NCT02308020 -NCT02305043 -NCT02308072 -NCT02305056 -NCT02308085 -NCT02305186 -NCT02308124 -NCT02305199 -NCT02308202 -NCT02305342 -NCT02308241 -NCT02305498 -NCT02308254 -NCT02305563 -NCT02308280 -NCT02305654 -NCT02308319 -NCT02305758 -NCT02308345 -NCT02305810 -NCT02308384 -NCT02305888 -NCT02308449 -NCT02305914 -NCT02308514 -NCT02305953 -NCT02308527 -NCT02305992 -NCT02308540 -NCT02306070 -NCT02308553 -NCT02306161 -NCT02308631 -NCT02306187 -NCT02308709 -NCT02306252 -NCT02308722 -NCT02306265 -NCT02308735 -NCT02306278 -NCT02308748 -NCT02306291 -NCT02308761 -NCT02306317 -NCT02308865 -NCT02306473 -NCT02308891 -NCT02306499 -NCT02309047 -NCT02306512 -NCT02309099 -NCT02306564 -NCT02309164 -NCT02306590 -NCT02309177 -NCT02306694 -NCT02309242 -NCT02306707 -NCT02309307 -NCT02306759 -NCT02309476 -NCT02306850 -NCT02309515 -NCT02306954 -NCT02309554 -NCT02306967 -NCT02309580 -NCT02306993 -NCT02309619 -NCT02307006 -NCT02309632 -NCT02307058 -NCT02309658 -NCT02307149 -NCT02309814 -NCT02307162 -NCT02309892 -NCT02307227 -NCT02314884 -NCT02309944 -NCT02312258 -NCT02310061 -NCT02312245 -NCT02310074 -NCT02312297 -NCT02310191 -NCT02312401 -NCT02310230 -NCT02312453 -NCT02310243 -NCT02312505 -NCT02310321 -NCT02312557 -NCT02310399 -NCT02312570 -NCT02310425 -NCT02312609 -NCT02310451 -NCT02312622 -NCT02310464 -NCT02312661 -NCT02310607 -NCT02312674 -NCT02310737 -NCT02312700 -NCT02310763 -NCT02312778 -NCT02310828 -NCT02312804 -NCT02310880 -NCT02312817 -NCT02310906 -NCT02312908 -NCT02310919 -NCT02312934 -NCT02310945 -NCT02312960 -NCT02310958 -NCT02313012 -NCT02310971 -NCT02313051 -NCT02310997 -NCT02313103 -NCT02311049 -NCT02313233 -NCT02311075 -NCT02313272 -NCT02311101 -NCT02313298 -NCT02311205 -NCT02313389 -NCT02311283 -NCT02313454 -NCT02311309 -NCT02313467 -NCT02311322 -NCT02313480 -NCT02311361 -NCT02313506 -NCT02311439 -NCT02313636 -NCT02311478 -NCT02313675 -NCT02311530 -NCT02313688 -NCT02311543 -NCT02313805 -NCT02311556 -NCT02313870 -NCT02311569 -NCT02313909 -NCT02311582 -NCT02314039 -NCT02311595 -NCT02314052 -NCT02311608 -NCT02314117 -NCT02311621 -NCT02314143 -NCT02311673 -NCT02314156 -NCT02311712 -NCT02314169 -NCT02311764 -NCT02314182 -NCT02311803 -NCT02314247 -NCT02311829 -NCT02314312 -NCT02311881 -NCT02314325 -NCT02311894 -NCT02314364 -NCT02311907 -NCT02314377 -NCT02311920 -NCT02314481 -NCT02311933 -NCT02314676 -NCT02311959 -NCT02314715 -NCT02311998 -NCT02314741 -NCT02312102 -NCT02314806 -NCT02312115 -NCT02314819 -NCT02312167 -NCT02314871 -NCT02312206 -NCT02319538 -NCT02314936 -NCT02317302 -NCT02315053 -NCT02317211 -NCT02315066 -NCT02317315 -NCT02315105 -NCT02317328 -NCT02315118 -NCT02317341 -NCT02315131 -NCT02317393 -NCT02315157 -NCT02317419 -NCT02315196 -NCT02317471 -NCT02315235 -NCT02317549 -NCT02315326 -NCT02317653 -NCT02315430 -NCT02317705 -NCT02315443 -NCT02317731 -NCT02315521 -NCT02317783 -NCT02315534 -NCT02317874 -NCT02315560 -NCT02317887 -NCT02315586 -NCT02317926 -NCT02315612 -NCT02317965 -NCT02315625 -NCT02317978 -NCT02315664 -NCT02317991 -NCT02315716 -NCT02318082 -NCT02315768 -NCT02318095 -NCT02315781 -NCT02318147 -NCT02315833 -NCT02318160 -NCT02315859 -NCT02318225 -NCT02315885 -NCT02318277 -NCT02315989 -NCT02318329 -NCT02316002 -NCT02318368 -NCT02316028 -NCT02318394 -NCT02316106 -NCT02318407 -NCT02316171 -NCT02318420 -NCT02316197 -NCT02318511 -NCT02316249 -NCT02318550 -NCT02316262 -NCT02318615 -NCT02316327 -NCT02318771 -NCT02316340 -NCT02318784 -NCT02316366 -NCT02318875 -NCT02316444 -NCT02318901 -NCT02316457 -NCT02319005 -NCT02316496 -NCT02319018 -NCT02316509 -NCT02319044 -NCT02316535 -NCT02319070 -NCT02316548 -NCT02319083 -NCT02316561 -NCT02319109 -NCT02316587 -NCT02319122 -NCT02316743 -NCT02319135 -NCT02316795 -NCT02319187 -NCT02316834 -NCT02319200 -NCT02316899 -NCT02319239 -NCT02316912 -NCT02319304 -NCT02316925 -NCT02319356 -NCT02316964 -NCT02319369 -NCT02317016 -NCT02319395 -NCT02317042 -NCT02319408 -NCT02317055 -NCT02319421 -NCT02317120 -NCT02319486 -NCT02317159 -NCT02324283 -NCT02319577 -NCT02322021 -NCT02319824 -NCT02321982 -NCT02319837 -NCT02322112 -NCT02319863 -NCT02322138 -NCT02319889 -NCT02322203 -NCT02319928 -NCT02322281 -NCT02320006 -NCT02322320 -NCT02320058 -NCT02322333 -NCT02320071 -NCT02322411 -NCT02320123 -NCT02322593 -NCT02320149 -NCT02322671 -NCT02320214 -NCT02322814 -NCT02320227 -NCT02322853 -NCT02320253 -NCT02322866 -NCT02320292 -NCT02322931 -NCT02320305 -NCT02323022 -NCT02320318 -NCT02323087 -NCT02320383 -NCT02323113 -NCT02320435 -NCT02323126 -NCT02320448 -NCT02323139 -NCT02320487 -NCT02323178 -NCT02320552 -NCT02323191 -NCT02320565 -NCT02323204 -NCT02320578 -NCT02323230 -NCT02320617 -NCT02323269 -NCT02320656 -NCT02323295 -NCT02320734 -NCT02323360 -NCT02320760 -NCT02323451 -NCT02320825 -NCT02323516 -NCT02320851 -NCT02323555 -NCT02320942 -NCT02323568 -NCT02320968 -NCT02323607 -NCT02321124 -NCT02323646 -NCT02321202 -NCT02323659 -NCT02321228 -NCT02323724 -NCT02321267 -NCT02323737 -NCT02321280 -NCT02323841 -NCT02321293 -NCT02323854 -NCT02321358 -NCT02323867 -NCT02321384 -NCT02323880 -NCT02321449 -NCT02323893 -NCT02321501 -NCT02323906 -NCT02321514 -NCT02323932 -NCT02321527 -NCT02323997 -NCT02321540 -NCT02324023 -NCT02321579 -NCT02324036 -NCT02321592 -NCT02324049 -NCT02321631 -NCT02324088 -NCT02321670 -NCT02324101 -NCT02321696 -NCT02324114 -NCT02321735 -NCT02324127 -NCT02321800 -NCT02324192 -NCT02321813 -NCT02324205 -NCT02321826 -NCT02324231 -NCT02321930 -NCT02324257 -NCT02321969 -NCT02329938 -NCT02324335 -NCT02327065 -NCT02324374 -NCT02326974 -NCT02324387 -NCT02327078 -NCT02324439 -NCT02327091 -NCT02324452 -NCT02327247 -NCT02324517 -NCT02327377 -NCT02324530 -NCT02327390 -NCT02324543 -NCT02327481 -NCT02324582 -NCT02327494 -NCT02324595 -NCT02327520 -NCT02324608 -NCT02327650 -NCT02324621 -NCT02327793 -NCT02324803 -NCT02327819 -NCT02324868 -NCT02327871 -NCT02324881 -NCT02327884 -NCT02324894 -NCT02327897 -NCT02324907 -NCT02327936 -NCT02324920 -NCT02328014 -NCT02324985 -NCT02328040 -NCT02324998 -NCT02328105 -NCT02325024 -NCT02328196 -NCT02325063 -NCT02328261 -NCT02325089 -NCT02328274 -NCT02325128 -NCT02328313 -NCT02325154 -NCT02328339 -NCT02325232 -NCT02328365 -NCT02325349 -NCT02328404 -NCT02325375 -NCT02328469 -NCT02325401 -NCT02328625 -NCT02325440 -NCT02328664 -NCT02325453 -NCT02328716 -NCT02325492 -NCT02328755 -NCT02325557 -NCT02328807 -NCT02325661 -NCT02328872 -NCT02325739 -NCT02328885 -NCT02325973 -NCT02329054 -NCT02325986 -NCT02329080 -NCT02325999 -NCT02329106 -NCT02326025 -NCT02329171 -NCT02326168 -NCT02329210 -NCT02326246 -NCT02329236 -NCT02326285 -NCT02329275 -NCT02326311 -NCT02329301 -NCT02326324 -NCT02329327 -NCT02326454 -NCT02329379 -NCT02326558 -NCT02329470 -NCT02326584 -NCT02329509 -NCT02326597 -NCT02329522 -NCT02326623 -NCT02329548 -NCT02326727 -NCT02329665 -NCT02326779 -NCT02329717 -NCT02326805 -NCT02329730 -NCT02326844 -NCT02329847 -NCT02326857 -NCT02329860 -NCT02326909 -NCT02329873 -NCT02326922 -NCT02335580 -NCT02329977 -NCT02332980 -NCT02329990 -NCT02332928 -NCT02330094 -NCT02333110 -NCT02330107 -NCT02333162 -NCT02330302 -NCT02333188 -NCT02330315 -NCT02333292 -NCT02330328 -NCT02333370 -NCT02330367 -NCT02333409 -NCT02330471 -NCT02333435 -NCT02330497 -NCT02333474 -NCT02330510 -NCT02333513 -NCT02330536 -NCT02333565 -NCT02330562 -NCT02333617 -NCT02330575 -NCT02333708 -NCT02330770 -NCT02333721 -NCT02330783 -NCT02333773 -NCT02330796 -NCT02333838 -NCT02330913 -NCT02333851 -NCT02330926 -NCT02333890 -NCT02330991 -NCT02334007 -NCT02331017 -NCT02334111 -NCT02331134 -NCT02334163 -NCT02331147 -NCT02334189 -NCT02331251 -NCT02334202 -NCT02331368 -NCT02334254 -NCT02331381 -NCT02334319 -NCT02331394 -NCT02334332 -NCT02331498 -NCT02334371 -NCT02331550 -NCT02334475 -NCT02331693 -NCT02334527 -NCT02331706 -NCT02334579 -NCT02331836 -NCT02334657 -NCT02331875 -NCT02334709 -NCT02331927 -NCT02334722 -NCT02332031 -NCT02334735 -NCT02332096 -NCT02334774 -NCT02332122 -NCT02334826 -NCT02332187 -NCT02334852 -NCT02332317 -NCT02334865 -NCT02332369 -NCT02334891 -NCT02332447 -NCT02335034 -NCT02332486 -NCT02335099 -NCT02332499 -NCT02335112 -NCT02332512 -NCT02335151 -NCT02332538 -NCT02335164 -NCT02332551 -NCT02335190 -NCT02332590 -NCT02335203 -NCT02332668 -NCT02335216 -NCT02332707 -NCT02335255 -NCT02332772 -NCT02335268 -NCT02332785 -NCT02335359 -NCT02332850 -NCT02335372 -NCT02332863 -NCT02335411 -NCT02332876 -NCT02335424 -NCT02332889 -NCT02335567 -NCT02332902 -NCT02340117 -NCT02335619 -NCT02337907 -NCT02335671 -NCT02337868 -NCT02335710 -NCT02337933 -NCT02335749 -NCT02337946 -NCT02335814 -NCT02337972 -NCT02335827 -NCT02337985 -NCT02335853 -NCT02338011 -NCT02335879 -NCT02338037 -NCT02335918 -NCT02338050 -NCT02335944 -NCT02338076 -NCT02335957 -NCT02338141 -NCT02335970 -NCT02338167 -NCT02335983 -NCT02338245 -NCT02336009 -NCT02338297 -NCT02336048 -NCT02338310 -NCT02336087 -NCT02338349 -NCT02336139 -NCT02338427 -NCT02336165 -NCT02338492 -NCT02336256 -NCT02338518 -NCT02336282 -NCT02338531 -NCT02336386 -NCT02338570 -NCT02336425 -NCT02338609 -NCT02336438 -NCT02338622 -NCT02336451 -NCT02338700 -NCT02336464 -NCT02338713 -NCT02336490 -NCT02338752 -NCT02336516 -NCT02338778 -NCT02336529 -NCT02338804 -NCT02336672 -NCT02338882 -NCT02336711 -NCT02338895 -NCT02336724 -NCT02338973 -NCT02336737 -NCT02339090 -NCT02336750 -NCT02339116 -NCT02336763 -NCT02339142 -NCT02336815 -NCT02339168 -NCT02336984 -NCT02339272 -NCT02337049 -NCT02339324 -NCT02337088 -NCT02339337 -NCT02337179 -NCT02339350 -NCT02337205 -NCT02339376 -NCT02337244 -NCT02339402 -NCT02337296 -NCT02339506 -NCT02337309 -NCT02339532 -NCT02337426 -NCT02339558 -NCT02337465 -NCT02339571 -NCT02337478 -NCT02339701 -NCT02337491 -NCT02339740 -NCT02337530 -NCT02339753 -NCT02337582 -NCT02339779 -NCT02337595 -NCT02339805 -NCT02337673 -NCT02339831 -NCT02337686 -NCT02339922 -NCT02337712 -NCT02339948 -NCT02337738 -NCT02340013 -NCT02337764 -NCT02340065 -NCT02337829 -NCT02344667 -NCT02340156 -NCT02342587 -NCT02340208 -NCT02342483 -NCT02340221 -NCT02342600 -NCT02340273 -NCT02342626 -NCT02340377 -NCT02342639 -NCT02340390 -NCT02342665 -NCT02340429 -NCT02342704 -NCT02340494 -NCT02342730 -NCT02340507 -NCT02342782 -NCT02340520 -NCT02342808 -NCT02340533 -NCT02342886 -NCT02340611 -NCT02343042 -NCT02340728 -NCT02343068 -NCT02340780 -NCT02343081 -NCT02340845 -NCT02343172 -NCT02340858 -NCT02343224 -NCT02340871 -NCT02343237 -NCT02340884 -NCT02343276 -NCT02340923 -NCT02343315 -NCT02340936 -NCT02343354 -NCT02340949 -NCT02343406 -NCT02340962 -NCT02343536 -NCT02340975 -NCT02343549 -NCT02341014 -NCT02343562 -NCT02341040 -NCT02343575 -NCT02341170 -NCT02343601 -NCT02341196 -NCT02343614 -NCT02341209 -NCT02343627 -NCT02341235 -NCT02343666 -NCT02341287 -NCT02343692 -NCT02341339 -NCT02343718 -NCT02341365 -NCT02343822 -NCT02341404 -NCT02343835 -NCT02341495 -NCT02343939 -NCT02341547 -NCT02343952 -NCT02341625 -NCT02343991 -NCT02341664 -NCT02344004 -NCT02341677 -NCT02344017 -NCT02341690 -NCT02344095 -NCT02341846 -NCT02344108 -NCT02341911 -NCT02344199 -NCT02341950 -NCT02344264 -NCT02341989 -NCT02344277 -NCT02342054 -NCT02344316 -NCT02342067 -NCT02344329 -NCT02342093 -NCT02344355 -NCT02342132 -NCT02344407 -NCT02342158 -NCT02344433 -NCT02342197 -NCT02344446 -NCT02342223 -NCT02344472 -NCT02342262 -NCT02344485 -NCT02342275 -NCT02344537 -NCT02342301 -NCT02344550 -NCT02342353 -NCT02344563 -NCT02342379 -NCT02344654 -NCT02342457 -NCT02349893 -NCT02344810 -NCT02347618 -NCT02344862 -NCT02347501 -NCT02344927 -NCT02347722 -NCT02344940 -NCT02347787 -NCT02344992 -NCT02347813 -NCT02345031 -NCT02347839 -NCT02345135 -NCT02347878 -NCT02345161 -NCT02347904 -NCT02345174 -NCT02347917 -NCT02345200 -NCT02347956 -NCT02345265 -NCT02347969 -NCT02345330 -NCT02348008 -NCT02345382 -NCT02348021 -NCT02345408 -NCT02348099 -NCT02345421 -NCT02348203 -NCT02345460 -NCT02348216 -NCT02345473 -NCT02348229 -NCT02345499 -NCT02348255 -NCT02345616 -NCT02348281 -NCT02345629 -NCT02348294 -NCT02345746 -NCT02348320 -NCT02345772 -NCT02348372 -NCT02345798 -NCT02348385 -NCT02345824 -NCT02348398 -NCT02345850 -NCT02348437 -NCT02345876 -NCT02348450 -NCT02345889 -NCT02348489 -NCT02345915 -NCT02348502 -NCT02346032 -NCT02348528 -NCT02346071 -NCT02348684 -NCT02346214 -NCT02348710 -NCT02346227 -NCT02348749 -NCT02346253 -NCT02348983 -NCT02346318 -NCT02348996 -NCT02346331 -NCT02349022 -NCT02346370 -NCT02349048 -NCT02346409 -NCT02349061 -NCT02346448 -NCT02349139 -NCT02346500 -NCT02349178 -NCT02346526 -NCT02349217 -NCT02346578 -NCT02349295 -NCT02346604 -NCT02349386 -NCT02346656 -NCT02349399 -NCT02346747 -NCT02349412 -NCT02346825 -NCT02349451 -NCT02346955 -NCT02349464 -NCT02347059 -NCT02349568 -NCT02347111 -NCT02349581 -NCT02347163 -NCT02349633 -NCT02347215 -NCT02349698 -NCT02347241 -NCT02349724 -NCT02347267 -NCT02349776 -NCT02347280 -NCT02349841 -NCT02347332 -NCT02349854 -NCT02347449 -NCT02349867 -NCT02347462 -NCT02355223 -NCT02349919 -NCT02352571 -NCT02349945 -NCT02352558 -NCT02349958 -NCT02352636 -NCT02350153 -NCT02352688 -NCT02350166 -NCT02352727 -NCT02350179 -NCT02352766 -NCT02350283 -NCT02352779 -NCT02350309 -NCT02352792 -NCT02350361 -NCT02352818 -NCT02350387 -NCT02352831 -NCT02350400 -NCT02352844 -NCT02350517 -NCT02352883 -NCT02350530 -NCT02352935 -NCT02350543 -NCT02352948 -NCT02350556 -NCT02353000 -NCT02350582 -NCT02353026 -NCT02350660 -NCT02353039 -NCT02350673 -NCT02353091 -NCT02350686 -NCT02353143 -NCT02350712 -NCT02353260 -NCT02350764 -NCT02353338 -NCT02350855 -NCT02353364 -NCT02350881 -NCT02353390 -NCT02350972 -NCT02353468 -NCT02351037 -NCT02353481 -NCT02351089 -NCT02353559 -NCT02351128 -NCT02353572 -NCT02351141 -NCT02353728 -NCT02351180 -NCT02353741 -NCT02351219 -NCT02353819 -NCT02351297 -NCT02353832 -NCT02351349 -NCT02353858 -NCT02351375 -NCT02353936 -NCT02351401 -NCT02353988 -NCT02351453 -NCT02354079 -NCT02351479 -NCT02354118 -NCT02351492 -NCT02354131 -NCT02351505 -NCT02354261 -NCT02351596 -NCT02354274 -NCT02351700 -NCT02354313 -NCT02351739 -NCT02354352 -NCT02351765 -NCT02354365 -NCT02351791 -NCT02354391 -NCT02351882 -NCT02354469 -NCT02351960 -NCT02354508 -NCT02351986 -NCT02354534 -NCT02352025 -NCT02354547 -NCT02352181 -NCT02354586 -NCT02352220 -NCT02354677 -NCT02352259 -NCT02354690 -NCT02352324 -NCT02354781 -NCT02352337 -NCT02354898 -NCT02352428 -NCT02354924 -NCT02352519 -NCT02355067 -NCT02352532 -NCT02355119 -NCT02352545 -NCT02360969 -NCT02355249 -NCT02357992 -NCT02355353 -NCT02357914 -NCT02355379 -NCT02358031 -NCT02355418 -NCT02358161 -NCT02355431 -NCT02358187 -NCT02355483 -NCT02358200 -NCT02355496 -NCT02358213 -NCT02355535 -NCT02358239 -NCT02355756 -NCT02358330 -NCT02355886 -NCT02358395 -NCT02355925 -NCT02358434 -NCT02355938 -NCT02358473 -NCT02355990 -NCT02358590 -NCT02356068 -NCT02358642 -NCT02356081 -NCT02358681 -NCT02356159 -NCT02358850 -NCT02356172 -NCT02358863 -NCT02356250 -NCT02358876 -NCT02356276 -NCT02358954 -NCT02356302 -NCT02359019 -NCT02356406 -NCT02359058 -NCT02356419 -NCT02359097 -NCT02356445 -NCT02359123 -NCT02356458 -NCT02359162 -NCT02356471 -NCT02359175 -NCT02356549 -NCT02359266 -NCT02356562 -NCT02359474 -NCT02356575 -NCT02359500 -NCT02356627 -NCT02359565 -NCT02356653 -NCT02359643 -NCT02356666 -NCT02359682 -NCT02356679 -NCT02359812 -NCT02356913 -NCT02359838 -NCT02356926 -NCT02359851 -NCT02356965 -NCT02359968 -NCT02356978 -NCT02360046 -NCT02356991 -NCT02360059 -NCT02357108 -NCT02360072 -NCT02357121 -NCT02360111 -NCT02357134 -NCT02360215 -NCT02357147 -NCT02360241 -NCT02357160 -NCT02360254 -NCT02357225 -NCT02360384 -NCT02357407 -NCT02360501 -NCT02357420 -NCT02360540 -NCT02357485 -NCT02360579 -NCT02357498 -NCT02360605 -NCT02357524 -NCT02360618 -NCT02357550 -NCT02360761 -NCT02357563 -NCT02360787 -NCT02357667 -NCT02360826 -NCT02357732 -NCT02360839 -NCT02357758 -NCT02360852 -NCT02357810 -NCT02360865 -NCT02357836 -NCT02360917 -NCT02357862 -NCT02365740 -NCT02361008 -NCT02363335 -NCT02361047 -NCT02363309 -NCT02361086 -NCT02363374 -NCT02361099 -NCT02363400 -NCT02361112 -NCT02363413 -NCT02361125 -NCT02363439 -NCT02361164 -NCT02363465 -NCT02361216 -NCT02363491 -NCT02361281 -NCT02363569 -NCT02361320 -NCT02363595 -NCT02361346 -NCT02363634 -NCT02361359 -NCT02363647 -NCT02361372 -NCT02363686 -NCT02361385 -NCT02363751 -NCT02361411 -NCT02363790 -NCT02361424 -NCT02363816 -NCT02361437 -NCT02363829 -NCT02361450 -NCT02363855 -NCT02361515 -NCT02363933 -NCT02361541 -NCT02363985 -NCT02361580 -NCT02364037 -NCT02361593 -NCT02364076 -NCT02361606 -NCT02364089 -NCT02361723 -NCT02364115 -NCT02361749 -NCT02364128 -NCT02361788 -NCT02364180 -NCT02361827 -NCT02364206 -NCT02361879 -NCT02364336 -NCT02361905 -NCT02364362 -NCT02361996 -NCT02364388 -NCT02362035 -NCT02364427 -NCT02362048 -NCT02364492 -NCT02362165 -NCT02364518 -NCT02362230 -NCT02364557 -NCT02362243 -NCT02364609 -NCT02362295 -NCT02364713 -NCT02362425 -NCT02364726 -NCT02362438 -NCT02364778 -NCT02362451 -NCT02364960 -NCT02362464 -NCT02364999 -NCT02362594 -NCT02365142 -NCT02362659 -NCT02365168 -NCT02362737 -NCT02365207 -NCT02362932 -NCT02365376 -NCT02362958 -NCT02365415 -NCT02362997 -NCT02365441 -NCT02363010 -NCT02365454 -NCT02363049 -NCT02365506 -NCT02363075 -NCT02365532 -NCT02363088 -NCT02365597 -NCT02363153 -NCT02365610 -NCT02363179 -NCT02365662 -NCT02363192 -NCT02365675 -NCT02363218 -NCT02365701 -NCT02363244 -NCT02365714 -NCT02363283 -NCT02371161 -NCT02365766 -NCT02368509 -NCT02365779 -NCT02368496 -NCT02365805 -NCT02368574 -NCT02365818 -NCT02368639 -NCT02365896 -NCT02368691 -NCT02365935 -NCT02368730 -NCT02365974 -NCT02368795 -NCT02366130 -NCT02368860 -NCT02366143 -NCT02368886 -NCT02366182 -NCT02368912 -NCT02366195 -NCT02368977 -NCT02366208 -NCT02369016 -NCT02366221 -NCT02369029 -NCT02366312 -NCT02369042 -NCT02366507 -NCT02369081 -NCT02366546 -NCT02369198 -NCT02366559 -NCT02369458 -NCT02366611 -NCT02369471 -NCT02366650 -NCT02369484 -NCT02366663 -NCT02369653 -NCT02366728 -NCT02369718 -NCT02366741 -NCT02369783 -NCT02366793 -NCT02369835 -NCT02366819 -NCT02369861 -NCT02366858 -NCT02369874 -NCT02366871 -NCT02369939 -NCT02366884 -NCT02370017 -NCT02366975 -NCT02370082 -NCT02367001 -NCT02370108 -NCT02367027 -NCT02370121 -NCT02367040 -NCT02370134 -NCT02367066 -NCT02370160 -NCT02367157 -NCT02370238 -NCT02367196 -NCT02370264 -NCT02367222 -NCT02370342 -NCT02367352 -NCT02370381 -NCT02367404 -NCT02370420 -NCT02367443 -NCT02370498 -NCT02367456 -NCT02370511 -NCT02367508 -NCT02370524 -NCT02367547 -NCT02370563 -NCT02367573 -NCT02370602 -NCT02367625 -NCT02370628 -NCT02367651 -NCT02370667 -NCT02367703 -NCT02370771 -NCT02367729 -NCT02370797 -NCT02367781 -NCT02370823 -NCT02367794 -NCT02370849 -NCT02367859 -NCT02370888 -NCT02367950 -NCT02370953 -NCT02367976 -NCT02371018 -NCT02368002 -NCT02371031 -NCT02368054 -NCT02371044 -NCT02368067 -NCT02371070 -NCT02368236 -NCT02371148 -NCT02368340 -NCT02377570 -NCT02371200 -NCT02374333 -NCT02371252 -NCT02374255 -NCT02371304 -NCT02374424 -NCT02371330 -NCT02374489 -NCT02371369 -NCT02374593 -NCT02371408 -NCT02374645 -NCT02371447 -NCT02374684 -NCT02371473 -NCT02374827 -NCT02371499 -NCT02374931 -NCT02371564 -NCT02374957 -NCT02371577 -NCT02375022 -NCT02371590 -NCT02375048 -NCT02371642 -NCT02375087 -NCT02371655 -NCT02375113 -NCT02371681 -NCT02375204 -NCT02371798 -NCT02375425 -NCT02371811 -NCT02375529 -NCT02371824 -NCT02375555 -NCT02371863 -NCT02375581 -NCT02371902 -NCT02375620 -NCT02372006 -NCT02375672 -NCT02372058 -NCT02375724 -NCT02372071 -NCT02375776 -NCT02372123 -NCT02375789 -NCT02372227 -NCT02375828 -NCT02372240 -NCT02375880 -NCT02372305 -NCT02375945 -NCT02372331 -NCT02375958 -NCT02372409 -NCT02375984 -NCT02372448 -NCT02375997 -NCT02372487 -NCT02376023 -NCT02372500 -NCT02376075 -NCT02372513 -NCT02376114 -NCT02372552 -NCT02376166 -NCT02372747 -NCT02376231 -NCT02372760 -NCT02376322 -NCT02372838 -NCT02376452 -NCT02372864 -NCT02376543 -NCT02372968 -NCT02376634 -NCT02372994 -NCT02376699 -NCT02373007 -NCT02376725 -NCT02373072 -NCT02376790 -NCT02373267 -NCT02376816 -NCT02373488 -NCT02376868 -NCT02373553 -NCT02376933 -NCT02373579 -NCT02376985 -NCT02373618 -NCT02377128 -NCT02373631 -NCT02377141 -NCT02373644 -NCT02377180 -NCT02373722 -NCT02377206 -NCT02373735 -NCT02377232 -NCT02373891 -NCT02377284 -NCT02373930 -NCT02377362 -NCT02373969 -NCT02377492 -NCT02374099 -NCT02377518 -NCT02374242 -NCT02382991 -NCT02377752 -NCT02380222 -NCT02377817 -NCT02380209 -NCT02377869 -NCT02380235 -NCT02377947 -NCT02380313 -NCT02377973 -NCT02380378 -NCT02378012 -NCT02380443 -NCT02378038 -NCT02380469 -NCT02378142 -NCT02380560 -NCT02378233 -NCT02380651 -NCT02378285 -NCT02380677 -NCT02378311 -NCT02380729 -NCT02378324 -NCT02380755 -NCT02378350 -NCT02380898 -NCT02378389 -NCT02380911 -NCT02378415 -NCT02381002 -NCT02378428 -NCT02381015 -NCT02378493 -NCT02381028 -NCT02378532 -NCT02381080 -NCT02378558 -NCT02381184 -NCT02378779 -NCT02381236 -NCT02378805 -NCT02381249 -NCT02378844 -NCT02381288 -NCT02378870 -NCT02381314 -NCT02378883 -NCT02381327 -NCT02378922 -NCT02381366 -NCT02378935 -NCT02381379 -NCT02378948 -NCT02381457 -NCT02378961 -NCT02381470 -NCT02379000 -NCT02381535 -NCT02379169 -NCT02381548 -NCT02379182 -NCT02381561 -NCT02379195 -NCT02381587 -NCT02379221 -NCT02381665 -NCT02379247 -NCT02381678 -NCT02379260 -NCT02381834 -NCT02379364 -NCT02381847 -NCT02379377 -NCT02381886 -NCT02379390 -NCT02381925 -NCT02379416 -NCT02382068 -NCT02379507 -NCT02382094 -NCT02379520 -NCT02382107 -NCT02379559 -NCT02382237 -NCT02379572 -NCT02382250 -NCT02379585 -NCT02382263 -NCT02379728 -NCT02382315 -NCT02379741 -NCT02382406 -NCT02379754 -NCT02382458 -NCT02379819 -NCT02382471 -NCT02379845 -NCT02382523 -NCT02379871 -NCT02382549 -NCT02379988 -NCT02382640 -NCT02380027 -NCT02382653 -NCT02380053 -NCT02382770 -NCT02380118 -NCT02382796 -NCT02380131 -NCT02382809 -NCT02380170 -NCT02389270 -NCT02383030 -NCT02386371 -NCT02383082 -NCT02386332 -NCT02383212 -NCT02386397 -NCT02383251 -NCT02386436 -NCT02383277 -NCT02386501 -NCT02383316 -NCT02386527 -NCT02383368 -NCT02386618 -NCT02383407 -NCT02386631 -NCT02383433 -NCT02386657 -NCT02383498 -NCT02386722 -NCT02383641 -NCT02386735 -NCT02383797 -NCT02386800 -NCT02383927 -NCT02386826 -NCT02383966 -NCT02387086 -NCT02384005 -NCT02387099 -NCT02384083 -NCT02387125 -NCT02384200 -NCT02387138 -NCT02384239 -NCT02387203 -NCT02384252 -NCT02387216 -NCT02384343 -NCT02387242 -NCT02384382 -NCT02387268 -NCT02384408 -NCT02387281 -NCT02384421 -NCT02387307 -NCT02384473 -NCT02387359 -NCT02384616 -NCT02387645 -NCT02384668 -NCT02387840 -NCT02384746 -NCT02387853 -NCT02384759 -NCT02387879 -NCT02384811 -NCT02387892 -NCT02384850 -NCT02387905 -NCT02384876 -NCT02387996 -NCT02384954 -NCT02388048 -NCT02385110 -NCT02388074 -NCT02385136 -NCT02388126 -NCT02385188 -NCT02388152 -NCT02385214 -NCT02388204 -NCT02385240 -NCT02388256 -NCT02385253 -NCT02388269 -NCT02385266 -NCT02388321 -NCT02385292 -NCT02388490 -NCT02385318 -NCT02388516 -NCT02385461 -NCT02388581 -NCT02385487 -NCT02388698 -NCT02385578 -NCT02388750 -NCT02385604 -NCT02388906 -NCT02385617 -NCT02388919 -NCT02385630 -NCT02388932 -NCT02385669 -NCT02389023 -NCT02385812 -NCT02389088 -NCT02385929 -NCT02389101 -NCT02385955 -NCT02389114 -NCT02385994 -NCT02389153 -NCT02386007 -NCT02389192 -NCT02386111 -NCT02389205 -NCT02386137 -NCT02389244 -NCT02386228 -NCT02394834 -NCT02389309 -NCT02392143 -NCT02389335 -NCT02392039 -NCT02389400 -NCT02392156 -NCT02389413 -NCT02392299 -NCT02389517 -NCT02392377 -NCT02389543 -NCT02392403 -NCT02389582 -NCT02392429 -NCT02389634 -NCT02392507 -NCT02389647 -NCT02392572 -NCT02389660 -NCT02392611 -NCT02389673 -NCT02392637 -NCT02389686 -NCT02392676 -NCT02389699 -NCT02392793 -NCT02389751 -NCT02392845 -NCT02389764 -NCT02392871 -NCT02389777 -NCT02393001 -NCT02389803 -NCT02393131 -NCT02389842 -NCT02393157 -NCT02389920 -NCT02393170 -NCT02389972 -NCT02393183 -NCT02389985 -NCT02393209 -NCT02389998 -NCT02393248 -NCT02390063 -NCT02393365 -NCT02390089 -NCT02393430 -NCT02390115 -NCT02393560 -NCT02390154 -NCT02393625 -NCT02390284 -NCT02393664 -NCT02390388 -NCT02393690 -NCT02390427 -NCT02393755 -NCT02390518 -NCT02393794 -NCT02390596 -NCT02393820 -NCT02390635 -NCT02393833 -NCT02390739 -NCT02393859 -NCT02390752 -NCT02394132 -NCT02390843 -NCT02394184 -NCT02390856 -NCT02394197 -NCT02390869 -NCT02394236 -NCT02390882 -NCT02394314 -NCT02390934 -NCT02394327 -NCT02390947 -NCT02394340 -NCT02391012 -NCT02394392 -NCT02391025 -NCT02394431 -NCT02391038 -NCT02394470 -NCT02391051 -NCT02394496 -NCT02391116 -NCT02394535 -NCT02391194 -NCT02394548 -NCT02391220 -NCT02394613 -NCT02391350 -NCT02394626 -NCT02391415 -NCT02394652 -NCT02391454 -NCT02394665 -NCT02391480 -NCT02394678 -NCT02391545 -NCT02394769 -NCT02391662 -NCT02394782 -NCT02391727 -NCT02394795 -NCT02391896 -NCT02394821 -NCT02391987 -NCT02399683 -NCT02394899 -NCT02397200 -NCT02395016 -NCT02397148 -NCT02395068 -NCT02397252 -NCT02395107 -NCT02397304 -NCT02395120 -NCT02397317 -NCT02395172 -NCT02397343 -NCT02395250 -NCT02397408 -NCT02395276 -NCT02397486 -NCT02395471 -NCT02397499 -NCT02395484 -NCT02397525 -NCT02395510 -NCT02397720 -NCT02395523 -NCT02397733 -NCT02395549 -NCT02397785 -NCT02395601 -NCT02397928 -NCT02395614 -NCT02397967 -NCT02395627 -NCT02397993 -NCT02395640 -NCT02398019 -NCT02395666 -NCT02398032 -NCT02395679 -NCT02398058 -NCT02395692 -NCT02398188 -NCT02395705 -NCT02398201 -NCT02395770 -NCT02398214 -NCT02395822 -NCT02398240 -NCT02395848 -NCT02398253 -NCT02395939 -NCT02398344 -NCT02396043 -NCT02398396 -NCT02396108 -NCT02398552 -NCT02396134 -NCT02398656 -NCT02396147 -NCT02398721 -NCT02396212 -NCT02398734 -NCT02396251 -NCT02398773 -NCT02396368 -NCT02398786 -NCT02396420 -NCT02398825 -NCT02396433 -NCT02398864 -NCT02396446 -NCT02398916 -NCT02396498 -NCT02399033 -NCT02396511 -NCT02399059 -NCT02396537 -NCT02399085 -NCT02396589 -NCT02399124 -NCT02396706 -NCT02399137 -NCT02396732 -NCT02399150 -NCT02396745 -NCT02399176 -NCT02396810 -NCT02399189 -NCT02396823 -NCT02399215 -NCT02396849 -NCT02399254 -NCT02396862 -NCT02399306 -NCT02396927 -NCT02399345 -NCT02396940 -NCT02399371 -NCT02396953 -NCT02399410 -NCT02396966 -NCT02399449 -NCT02396992 -NCT02399475 -NCT02397005 -NCT02399566 -NCT02397018 -NCT02399592 -NCT02397057 -NCT02399631 -NCT02397083 -NCT02399670 -NCT02397135 -NCT02405585 -NCT02399735 -NCT02403037 -NCT02399800 -NCT02403024 -NCT02399813 -NCT02403193 -NCT02399839 -NCT02403271 -NCT02399917 -NCT02403310 -NCT02399943 -NCT02403414 -NCT02399969 -NCT02403492 -NCT02400060 -NCT02403505 -NCT02400073 -NCT02403531 -NCT02400190 -NCT02403544 -NCT02400216 -NCT02403687 -NCT02400229 -NCT02403700 -NCT02400242 -NCT02403726 -NCT02400255 -NCT02403752 -NCT02400281 -NCT02403778 -NCT02400359 -NCT02403830 -NCT02400385 -NCT02403843 -NCT02400424 -NCT02403895 -NCT02400437 -NCT02403908 -NCT02400476 -NCT02403921 -NCT02400567 -NCT02403973 -NCT02400580 -NCT02404051 -NCT02400658 -NCT02404064 -NCT02400697 -NCT02404103 -NCT02400775 -NCT02404220 -NCT02400788 -NCT02404285 -NCT02400814 -NCT02404363 -NCT02400866 -NCT02404389 -NCT02400970 -NCT02404428 -NCT02401048 -NCT02404441 -NCT02401295 -NCT02404480 -NCT02401321 -NCT02404493 -NCT02401347 -NCT02404506 -NCT02401542 -NCT02404571 -NCT02401568 -NCT02404623 -NCT02401581 -NCT02404675 -NCT02401685 -NCT02404753 -NCT02401789 -NCT02404844 -NCT02401815 -NCT02404857 -NCT02401919 -NCT02404870 -NCT02401971 -NCT02404883 -NCT02402036 -NCT02404935 -NCT02402062 -NCT02405000 -NCT02402348 -NCT02405065 -NCT02402439 -NCT02405078 -NCT02402543 -NCT02405104 -NCT02402569 -NCT02405143 -NCT02402621 -NCT02405221 -NCT02402712 -NCT02405273 -NCT02402725 -NCT02405312 -NCT02402764 -NCT02405338 -NCT02402803 -NCT02405364 -NCT02402842 -NCT02405416 -NCT02402920 -NCT02405533 -NCT02402972 -NCT02405572 -NCT02403011 -NCT02410785 -NCT02405676 -NCT02408328 -NCT02405780 -NCT02408159 -NCT02405793 -NCT02408393 -NCT02405819 -NCT02408406 -NCT02405858 -NCT02408445 -NCT02405897 -NCT02408523 -NCT02405910 -NCT02408627 -NCT02405949 -NCT02408679 -NCT02405962 -NCT02408692 -NCT02406092 -NCT02408770 -NCT02406118 -NCT02408835 -NCT02406144 -NCT02408861 -NCT02406170 -NCT02408887 -NCT02406183 -NCT02409043 -NCT02406222 -NCT02409108 -NCT02406287 -NCT02409121 -NCT02406326 -NCT02409160 -NCT02406352 -NCT02409199 -NCT02406365 -NCT02409212 -NCT02406391 -NCT02409238 -NCT02406508 -NCT02409251 -NCT02406521 -NCT02409264 -NCT02406547 -NCT02409290 -NCT02406586 -NCT02409316 -NCT02406599 -NCT02409342 -NCT02406742 -NCT02409355 -NCT02406781 -NCT02409368 -NCT02406794 -NCT02409381 -NCT02406820 -NCT02409407 -NCT02406859 -NCT02409472 -NCT02406963 -NCT02409485 -NCT02407002 -NCT02409524 -NCT02407054 -NCT02409576 -NCT02407067 -NCT02409628 -NCT02407080 -NCT02409797 -NCT02407119 -NCT02409849 -NCT02407171 -NCT02409914 -NCT02407366 -NCT02410018 -NCT02407392 -NCT02410135 -NCT02407509 -NCT02410174 -NCT02407535 -NCT02410187 -NCT02407561 -NCT02410226 -NCT02407587 -NCT02410252 -NCT02407600 -NCT02410291 -NCT02407613 -NCT02410304 -NCT02407704 -NCT02410369 -NCT02407795 -NCT02410382 -NCT02407938 -NCT02410486 -NCT02407990 -NCT02410512 -NCT02408003 -NCT02410564 -NCT02408016 -NCT02410577 -NCT02408042 -NCT02410629 -NCT02408068 -NCT02410694 -NCT02408107 -NCT02410733 -NCT02408120 -NCT02410772 -NCT02408133 -NCT02416154 -NCT02410863 -NCT02413580 -NCT02410889 -NCT02413489 -NCT02410993 -NCT02413606 -NCT02411019 -NCT02413671 -NCT02411175 -NCT02413697 -NCT02411266 -NCT02413736 -NCT02411344 -NCT02413788 -NCT02411396 -NCT02413827 -NCT02411448 -NCT02413853 -NCT02411461 -NCT02413944 -NCT02411513 -NCT02414009 -NCT02411565 -NCT02414048 -NCT02411578 -NCT02414139 -NCT02411591 -NCT02414152 -NCT02411617 -NCT02414165 -NCT02411643 -NCT02414191 -NCT02411656 -NCT02414217 -NCT02411682 -NCT02414269 -NCT02411734 -NCT02414295 -NCT02411786 -NCT02414334 -NCT02411825 -NCT02414438 -NCT02411890 -NCT02414516 -NCT02411916 -NCT02414529 -NCT02412020 -NCT02414568 -NCT02412046 -NCT02414659 -NCT02412124 -NCT02414672 -NCT02412137 -NCT02414685 -NCT02412150 -NCT02414724 -NCT02412176 -NCT02414750 -NCT02412228 -NCT02414776 -NCT02412241 -NCT02414789 -NCT02412254 -NCT02414893 -NCT02412267 -NCT02414945 -NCT02412306 -NCT02415023 -NCT02412332 -NCT02415036 -NCT02412371 -NCT02415062 -NCT02412462 -NCT02415101 -NCT02412475 -NCT02415140 -NCT02412527 -NCT02415153 -NCT02412592 -NCT02415179 -NCT02412631 -NCT02415257 -NCT02412670 -NCT02415270 -NCT02412683 -NCT02415361 -NCT02412735 -NCT02415387 -NCT02412826 -NCT02415413 -NCT02412839 -NCT02415465 -NCT02412878 -NCT02415608 -NCT02412956 -NCT02415621 -NCT02413021 -NCT02415699 -NCT02413138 -NCT02415725 -NCT02413268 -NCT02415816 -NCT02413320 -NCT02415829 -NCT02413359 -NCT02415881 -NCT02413437 -NCT02415933 -NCT02413450 -NCT02416063 -NCT02413476 -NCT02421523 -NCT02416167 -NCT02419339 -NCT02416206 -NCT02419287 -NCT02416219 -NCT02419417 -NCT02416336 -NCT02419443 -NCT02416388 -NCT02419456 -NCT02416427 -NCT02419469 -NCT02416440 -NCT02419495 -NCT02416466 -NCT02419534 -NCT02416570 -NCT02419547 -NCT02416609 -NCT02419560 -NCT02416726 -NCT02419586 -NCT02416739 -NCT02419664 -NCT02416752 -NCT02419677 -NCT02416908 -NCT02419742 -NCT02416960 -NCT02419755 -NCT02416999 -NCT02419768 -NCT02417129 -NCT02419807 -NCT02417181 -NCT02419846 -NCT02417285 -NCT02419924 -NCT02417298 -NCT02419950 -NCT02417337 -NCT02420002 -NCT02417480 -NCT02420067 -NCT02417506 -NCT02420093 -NCT02417662 -NCT02420184 -NCT02417701 -NCT02420210 -NCT02417740 -NCT02420223 -NCT02417753 -NCT02420249 -NCT02417896 -NCT02420314 -NCT02417948 -NCT02420405 -NCT02418000 -NCT02420457 -NCT02418039 -NCT02420548 -NCT02418052 -NCT02420561 -NCT02418182 -NCT02420587 -NCT02418195 -NCT02420613 -NCT02418247 -NCT02420652 -NCT02418325 -NCT02420665 -NCT02418390 -NCT02420691 -NCT02418429 -NCT02420717 -NCT02418481 -NCT02420769 -NCT02418507 -NCT02420795 -NCT02418533 -NCT02420821 -NCT02418624 -NCT02420847 -NCT02418689 -NCT02420860 -NCT02418767 -NCT02420873 -NCT02418832 -NCT02420912 -NCT02418858 -NCT02420925 -NCT02418897 -NCT02420938 -NCT02418949 -NCT02420977 -NCT02418988 -NCT02421185 -NCT02419027 -NCT02421276 -NCT02419092 -NCT02421354 -NCT02419105 -NCT02421380 -NCT02419118 -NCT02421406 -NCT02419170 -NCT02421432 -NCT02419209 -NCT02421458 -NCT02419261 -NCT02426424 -NCT02421562 -NCT02423837 -NCT02421575 -NCT02423811 -NCT02421588 -NCT02423863 -NCT02421640 -NCT02423876 -NCT02421705 -NCT02423889 -NCT02421757 -NCT02423902 -NCT02421770 -NCT02423915 -NCT02421822 -NCT02423928 -NCT02421848 -NCT02423954 -NCT02421887 -NCT02423967 -NCT02421926 -NCT02424045 -NCT02421939 -NCT02424123 -NCT02422017 -NCT02424240 -NCT02422030 -NCT02424279 -NCT02422082 -NCT02424305 -NCT02422095 -NCT02424396 -NCT02422108 -NCT02424461 -NCT02422147 -NCT02424474 -NCT02422160 -NCT02424513 -NCT02422199 -NCT02424539 -NCT02422277 -NCT02424617 -NCT02422329 -NCT02424708 -NCT02422381 -NCT02424838 -NCT02422394 -NCT02424851 -NCT02422433 -NCT02424864 -NCT02422459 -NCT02424916 -NCT02422498 -NCT02424955 -NCT02422511 -NCT02424968 -NCT02422524 -NCT02425033 -NCT02422563 -NCT02425059 -NCT02422576 -NCT02425072 -NCT02422589 -NCT02425137 -NCT02422615 -NCT02425150 -NCT02422641 -NCT02425163 -NCT02422680 -NCT02425228 -NCT02422719 -NCT02425280 -NCT02422732 -NCT02425306 -NCT02422745 -NCT02425449 -NCT02422784 -NCT02425475 -NCT02422797 -NCT02425553 -NCT02422953 -NCT02425605 -NCT02422979 -NCT02425631 -NCT02423057 -NCT02425683 -NCT02423083 -NCT02425722 -NCT02423148 -NCT02425735 -NCT02423226 -NCT02425748 -NCT02423239 -NCT02425891 -NCT02423278 -NCT02425904 -NCT02423291 -NCT02425930 -NCT02423343 -NCT02425982 -NCT02423395 -NCT02426034 -NCT02423525 -NCT02426112 -NCT02423564 -NCT02426125 -NCT02423590 -NCT02426281 -NCT02423603 -NCT02426385 -NCT02423720 -NCT02431520 -NCT02426450 -NCT02429362 -NCT02426489 -NCT02429349 -NCT02426515 -NCT02429375 -NCT02426658 -NCT02429427 -NCT02426697 -NCT02429440 -NCT02426723 -NCT02429466 -NCT02426762 -NCT02429479 -NCT02426814 -NCT02429505 -NCT02426853 -NCT02429518 -NCT02426879 -NCT02429544 -NCT02426892 -NCT02429570 -NCT02426905 -NCT02429609 -NCT02426931 -NCT02429622 -NCT02426944 -NCT02429687 -NCT02427009 -NCT02429700 -NCT02427113 -NCT02429765 -NCT02427269 -NCT02429804 -NCT02427295 -NCT02429830 -NCT02427321 -NCT02429843 -NCT02427399 -NCT02429973 -NCT02427451 -NCT02430181 -NCT02427581 -NCT02430194 -NCT02427620 -NCT02430285 -NCT02427646 -NCT02430298 -NCT02427828 -NCT02430363 -NCT02427841 -NCT02430428 -NCT02427893 -NCT02430467 -NCT02427919 -NCT02430480 -NCT02427958 -NCT02430532 -NCT02427984 -NCT02430597 -NCT02428010 -NCT02430610 -NCT02428036 -NCT02430623 -NCT02428062 -NCT02430636 -NCT02428192 -NCT02430649 -NCT02428218 -NCT02430662 -NCT02428270 -NCT02430675 -NCT02428296 -NCT02430688 -NCT02428478 -NCT02430701 -NCT02428530 -NCT02430753 -NCT02428582 -NCT02430766 -NCT02428686 -NCT02430779 -NCT02428712 -NCT02430792 -NCT02428751 -NCT02430948 -NCT02428764 -NCT02430974 -NCT02428842 -NCT02431052 -NCT02428855 -NCT02431117 -NCT02428881 -NCT02431208 -NCT02428920 -NCT02431260 -NCT02428959 -NCT02431351 -NCT02428972 -NCT02431390 -NCT02429037 -NCT02431403 -NCT02429050 -NCT02431416 -NCT02429063 -NCT02431442 -NCT02429089 -NCT02431494 -NCT02429193 -NCT02431507 -NCT02429232 -NCT02437305 -NCT02431533 -NCT02434809 -NCT02431559 -NCT02434731 -NCT02431572 -NCT02434822 -NCT02431624 -NCT02434939 -NCT02431676 -NCT02434991 -NCT02431754 -NCT02435108 -NCT02431806 -NCT02435121 -NCT02431884 -NCT02435147 -NCT02431962 -NCT02435186 -NCT02431988 -NCT02435264 -NCT02432118 -NCT02435303 -NCT02432196 -NCT02435329 -NCT02432209 -NCT02435342 -NCT02432235 -NCT02435381 -NCT02432274 -NCT02435433 -NCT02432326 -NCT02435472 -NCT02432365 -NCT02435524 -NCT02432378 -NCT02435550 -NCT02432417 -NCT02435602 -NCT02432521 -NCT02435680 -NCT02432547 -NCT02435745 -NCT02432612 -NCT02435758 -NCT02432625 -NCT02435810 -NCT02432690 -NCT02435849 -NCT02432729 -NCT02435888 -NCT02432846 -NCT02435927 -NCT02432872 -NCT02435940 -NCT02432911 -NCT02435953 -NCT02432950 -NCT02435966 -NCT02432963 -NCT02435979 -NCT02433002 -NCT02436018 -NCT02433067 -NCT02436070 -NCT02433080 -NCT02436213 -NCT02433197 -NCT02436252 -NCT02433392 -NCT02436343 -NCT02433483 -NCT02436395 -NCT02433535 -NCT02436408 -NCT02433574 -NCT02436499 -NCT02433626 -NCT02436590 -NCT02433639 -NCT02436668 -NCT02433730 -NCT02436681 -NCT02433769 -NCT02436707 -NCT02433795 -NCT02436720 -NCT02433808 -NCT02436733 -NCT02433847 -NCT02436850 -NCT02433938 -NCT02436902 -NCT02434081 -NCT02436993 -NCT02434107 -NCT02437019 -NCT02434146 -NCT02437071 -NCT02434354 -NCT02437136 -NCT02434367 -NCT02437162 -NCT02434432 -NCT02437201 -NCT02434536 -NCT02437227 -NCT02434562 -NCT02437279 -NCT02434575 -NCT02437292 -NCT02434614 -NCT02442674 -NCT02437318 -NCT02440308 -NCT02437370 -NCT02440230 -NCT02437383 -NCT02440334 -NCT02437500 -NCT02440347 -NCT02437539 -NCT02440425 -NCT02437656 -NCT02440438 -NCT02437669 -NCT02440464 -NCT02437760 -NCT02440516 -NCT02437799 -NCT02440568 -NCT02437812 -NCT02440646 -NCT02437851 -NCT02440685 -NCT02437916 -NCT02440737 -NCT02437942 -NCT02440841 -NCT02438007 -NCT02440958 -NCT02438189 -NCT02441049 -NCT02438202 -NCT02441062 -NCT02438358 -NCT02441088 -NCT02438436 -NCT02441140 -NCT02438501 -NCT02441166 -NCT02438579 -NCT02441270 -NCT02438722 -NCT02441309 -NCT02438761 -NCT02441322 -NCT02438852 -NCT02441335 -NCT02438865 -NCT02441413 -NCT02438917 -NCT02441465 -NCT02438995 -NCT02441491 -NCT02439008 -NCT02441517 -NCT02439034 -NCT02441530 -NCT02439047 -NCT02441686 -NCT02439060 -NCT02441803 -NCT02439073 -NCT02441816 -NCT02439086 -NCT02441868 -NCT02439112 -NCT02441894 -NCT02439125 -NCT02441933 -NCT02439138 -NCT02441946 -NCT02439164 -NCT02441972 -NCT02439216 -NCT02441985 -NCT02439242 -NCT02441998 -NCT02439281 -NCT02442063 -NCT02439307 -NCT02442102 -NCT02439385 -NCT02442271 -NCT02439437 -NCT02442284 -NCT02439450 -NCT02442297 -NCT02439489 -NCT02442323 -NCT02439528 -NCT02442336 -NCT02439554 -NCT02442349 -NCT02439567 -NCT02442362 -NCT02439580 -NCT02442375 -NCT02439593 -NCT02442414 -NCT02439645 -NCT02442440 -NCT02439723 -NCT02442466 -NCT02439788 -NCT02442531 -NCT02439892 -NCT02442583 -NCT02439905 -NCT02442635 -NCT02440139 -NCT02442661 -NCT02440178 -NCT02447887 -NCT02442713 -NCT02445664 -NCT02442739 -NCT02445586 -NCT02442765 -NCT02445716 -NCT02442778 -NCT02445755 -NCT02442882 -NCT02445872 -NCT02442999 -NCT02445911 -NCT02443077 -NCT02445976 -NCT02443090 -NCT02446093 -NCT02443103 -NCT02446132 -NCT02443142 -NCT02446145 -NCT02443181 -NCT02446184 -NCT02443246 -NCT02446223 -NCT02443259 -NCT02446236 -NCT02443298 -NCT02446249 -NCT02443311 -NCT02446301 -NCT02443324 -NCT02446366 -NCT02443337 -NCT02446405 -NCT02443415 -NCT02446431 -NCT02443493 -NCT02446444 -NCT02443597 -NCT02446457 -NCT02443623 -NCT02446574 -NCT02443636 -NCT02446600 -NCT02443649 -NCT02446626 -NCT02443740 -NCT02446652 -NCT02443831 -NCT02446665 -NCT02443844 -NCT02446678 -NCT02443883 -NCT02446704 -NCT02443896 -NCT02446769 -NCT02444000 -NCT02446795 -NCT02444026 -NCT02446821 -NCT02444195 -NCT02446860 -NCT02444390 -NCT02446925 -NCT02444546 -NCT02446951 -NCT02444572 -NCT02446964 -NCT02444715 -NCT02447003 -NCT02444741 -NCT02447055 -NCT02444793 -NCT02447120 -NCT02444819 -NCT02447159 -NCT02444884 -NCT02447172 -NCT02444897 -NCT02447211 -NCT02444910 -NCT02447237 -NCT02444936 -NCT02447250 -NCT02444949 -NCT02447263 -NCT02445014 -NCT02447276 -NCT02445027 -NCT02447328 -NCT02445118 -NCT02447380 -NCT02445209 -NCT02447406 -NCT02445248 -NCT02447419 -NCT02445261 -NCT02447549 -NCT02445378 -NCT02447588 -NCT02445391 -NCT02447666 -NCT02445404 -NCT02447679 -NCT02445430 -NCT02447692 -NCT02445456 -NCT02447718 -NCT02445469 -NCT02447731 -NCT02445573 -NCT02452554 -NCT02447900 -NCT02450201 -NCT02447939 -NCT02450188 -NCT02447991 -NCT02450266 -NCT02448069 -NCT02450331 -NCT02448121 -NCT02450474 -NCT02448173 -NCT02450539 -NCT02448225 -NCT02450591 -NCT02448251 -NCT02450630 -NCT02448290 -NCT02450656 -NCT02448303 -NCT02450708 -NCT02448329 -NCT02450825 -NCT02448381 -NCT02450877 -NCT02448420 -NCT02450903 -NCT02448485 -NCT02450942 -NCT02448537 -NCT02450955 -NCT02448576 -NCT02451007 -NCT02448589 -NCT02451111 -NCT02448654 -NCT02451124 -NCT02448693 -NCT02451215 -NCT02448771 -NCT02451345 -NCT02448797 -NCT02451384 -NCT02448810 -NCT02451423 -NCT02448862 -NCT02451462 -NCT02448927 -NCT02451488 -NCT02448953 -NCT02451553 -NCT02448979 -NCT02451657 -NCT02448992 -NCT02451696 -NCT02449083 -NCT02451709 -NCT02449109 -NCT02451735 -NCT02449122 -NCT02451761 -NCT02449161 -NCT02451774 -NCT02449239 -NCT02451787 -NCT02449252 -NCT02451800 -NCT02449265 -NCT02451826 -NCT02449278 -NCT02451865 -NCT02449304 -NCT02451930 -NCT02449343 -NCT02451943 -NCT02449538 -NCT02451956 -NCT02449551 -NCT02451982 -NCT02449564 -NCT02452008 -NCT02449655 -NCT02452073 -NCT02449668 -NCT02452099 -NCT02449681 -NCT02452112 -NCT02449850 -NCT02452164 -NCT02449863 -NCT02452216 -NCT02449902 -NCT02452268 -NCT02449954 -NCT02452281 -NCT02449967 -NCT02452294 -NCT02450019 -NCT02452307 -NCT02450032 -NCT02452333 -NCT02450058 -NCT02452346 -NCT02450097 -NCT02452424 -NCT02450123 -NCT02452437 -NCT02450136 -NCT02452463 -NCT02450149 -NCT02452502 -NCT02450175 -NCT02457897 -NCT02452567 -NCT02454907 -NCT02452671 -NCT02454855 -NCT02452710 -NCT02454933 -NCT02452762 -NCT02454972 -NCT02452775 -NCT02455011 -NCT02452853 -NCT02455076 -NCT02452944 -NCT02455141 -NCT02452970 -NCT02455154 -NCT02452983 -NCT02455245 -NCT02453009 -NCT02455297 -NCT02453087 -NCT02455323 -NCT02453126 -NCT02455362 -NCT02453139 -NCT02455427 -NCT02453191 -NCT02455453 -NCT02453243 -NCT02455544 -NCT02453269 -NCT02455557 -NCT02453282 -NCT02455596 -NCT02453295 -NCT02455622 -NCT02453334 -NCT02455648 -NCT02453360 -NCT02455791 -NCT02453373 -NCT02455804 -NCT02453412 -NCT02455843 -NCT02453438 -NCT02456025 -NCT02453464 -NCT02456051 -NCT02453490 -NCT02456155 -NCT02453503 -NCT02456207 -NCT02453529 -NCT02456246 -NCT02453594 -NCT02456272 -NCT02453620 -NCT02456311 -NCT02453685 -NCT02456350 -NCT02453737 -NCT02456389 -NCT02453984 -NCT02456506 -NCT02454010 -NCT02456649 -NCT02454036 -NCT02456662 -NCT02454062 -NCT02456675 -NCT02454075 -NCT02456701 -NCT02454127 -NCT02456714 -NCT02454140 -NCT02456779 -NCT02454153 -NCT02456857 -NCT02454166 -NCT02456883 -NCT02454179 -NCT02457039 -NCT02454192 -NCT02457065 -NCT02454270 -NCT02457104 -NCT02454283 -NCT02457143 -NCT02454335 -NCT02457156 -NCT02454374 -NCT02457273 -NCT02454426 -NCT02457299 -NCT02454439 -NCT02457338 -NCT02454478 -NCT02457390 -NCT02454517 -NCT02457468 -NCT02454543 -NCT02457637 -NCT02454595 -NCT02457650 -NCT02454634 -NCT02457728 -NCT02454751 -NCT02457793 -NCT02454777 -NCT02457845 -NCT02454842 -NCT02463578 -NCT02457910 -NCT02460874 -NCT02458001 -NCT02460861 -NCT02458014 -NCT02460887 -NCT02458118 -NCT02460913 -NCT02458235 -NCT02460991 -NCT02458326 -NCT02461043 -NCT02458339 -NCT02461056 -NCT02458404 -NCT02461069 -NCT02458417 -NCT02461095 -NCT02458573 -NCT02461121 -NCT02458612 -NCT02461147 -NCT02458638 -NCT02461173 -NCT02458703 -NCT02461303 -NCT02458716 -NCT02461407 -NCT02459041 -NCT02461537 -NCT02459067 -NCT02461550 -NCT02459119 -NCT02461628 -NCT02459132 -NCT02461719 -NCT02459301 -NCT02461784 -NCT02459392 -NCT02461836 -NCT02459431 -NCT02461849 -NCT02459457 -NCT02461862 -NCT02459483 -NCT02461888 -NCT02459600 -NCT02461940 -NCT02459652 -NCT02461966 -NCT02459717 -NCT02461979 -NCT02459769 -NCT02461992 -NCT02459795 -NCT02462018 -NCT02459912 -NCT02462187 -NCT02459951 -NCT02462200 -NCT02459964 -NCT02462213 -NCT02460055 -NCT02462226 -NCT02460068 -NCT02462239 -NCT02460120 -NCT02462265 -NCT02460133 -NCT02462278 -NCT02460159 -NCT02462291 -NCT02460198 -NCT02462356 -NCT02460224 -NCT02462369 -NCT02460237 -NCT02462408 -NCT02460276 -NCT02462486 -NCT02460315 -NCT02462525 -NCT02460367 -NCT02462538 -NCT02460380 -NCT02462629 -NCT02460419 -NCT02462707 -NCT02460432 -NCT02462811 -NCT02460445 -NCT02462954 -NCT02460458 -NCT02463019 -NCT02460471 -NCT02463032 -NCT02460549 -NCT02463045 -NCT02460653 -NCT02463331 -NCT02460679 -NCT02463383 -NCT02460744 -NCT02463435 -NCT02460783 -NCT02463461 -NCT02460809 -NCT02463474 -NCT02460822 -NCT02463539 -NCT02460835 -NCT02468271 -NCT02463656 -NCT02465931 -NCT02463799 -NCT02465892 -NCT02463825 -NCT02465957 -NCT02463851 -NCT02465970 -NCT02463877 -NCT02465983 -NCT02463942 -NCT02466009 -NCT02463968 -NCT02466061 -NCT02463994 -NCT02466113 -NCT02464007 -NCT02466204 -NCT02464124 -NCT02466269 -NCT02464137 -NCT02466308 -NCT02464176 -NCT02466360 -NCT02464215 -NCT02466464 -NCT02464228 -NCT02466477 -NCT02464241 -NCT02466529 -NCT02464319 -NCT02466568 -NCT02464332 -NCT02466633 -NCT02464371 -NCT02466698 -NCT02464553 -NCT02466724 -NCT02464592 -NCT02466737 -NCT02464618 -NCT02466776 -NCT02464644 -NCT02466789 -NCT02464657 -NCT02466802 -NCT02464683 -NCT02466828 -NCT02464696 -NCT02466906 -NCT02464709 -NCT02466932 -NCT02464748 -NCT02466971 -NCT02464761 -NCT02467010 -NCT02464774 -NCT02467049 -NCT02464826 -NCT02467088 -NCT02464839 -NCT02467114 -NCT02464891 -NCT02467127 -NCT02464904 -NCT02467140 -NCT02464982 -NCT02467192 -NCT02464995 -NCT02467244 -NCT02465060 -NCT02467257 -NCT02465112 -NCT02467270 -NCT02465190 -NCT02467361 -NCT02465229 -NCT02467517 -NCT02465268 -NCT02467569 -NCT02465359 -NCT02467582 -NCT02465385 -NCT02467647 -NCT02465502 -NCT02467738 -NCT02465528 -NCT02467751 -NCT02465541 -NCT02467868 -NCT02465580 -NCT02467881 -NCT02465593 -NCT02467907 -NCT02465632 -NCT02467959 -NCT02465645 -NCT02468024 -NCT02465723 -NCT02468037 -NCT02465736 -NCT02468050 -NCT02465749 -NCT02468076 -NCT02465775 -NCT02468141 -NCT02465788 -NCT02468193 -NCT02465814 -NCT02468258 -NCT02465840 -NCT02473159 -NCT02468284 -NCT02470897 -NCT02468362 -NCT02470884 -NCT02468453 -NCT02470910 -NCT02468557 -NCT02470936 -NCT02468596 -NCT02470962 -NCT02468609 -NCT02471014 -NCT02468635 -NCT02471053 -NCT02468648 -NCT02471118 -NCT02468661 -NCT02471261 -NCT02468687 -NCT02471313 -NCT02468726 -NCT02471339 -NCT02468739 -NCT02471352 -NCT02468765 -NCT02471391 -NCT02468778 -NCT02471482 -NCT02468817 -NCT02471495 -NCT02468830 -NCT02471547 -NCT02468882 -NCT02471573 -NCT02468921 -NCT02471599 -NCT02468973 -NCT02471716 -NCT02469012 -NCT02471820 -NCT02469116 -NCT02471846 -NCT02469129 -NCT02471911 -NCT02469298 -NCT02471989 -NCT02469415 -NCT02472080 -NCT02469480 -NCT02472145 -NCT02469493 -NCT02472223 -NCT02469571 -NCT02472249 -NCT02469662 -NCT02472275 -NCT02469675 -NCT02472288 -NCT02469701 -NCT02472340 -NCT02469779 -NCT02472353 -NCT02469805 -NCT02472392 -NCT02469844 -NCT02472418 -NCT02469883 -NCT02472431 -NCT02469922 -NCT02472509 -NCT02469935 -NCT02472548 -NCT02469948 -NCT02472574 -NCT02469974 -NCT02472626 -NCT02470065 -NCT02472665 -NCT02470091 -NCT02472678 -NCT02470117 -NCT02472691 -NCT02470169 -NCT02472808 -NCT02470273 -NCT02472899 -NCT02470299 -NCT02472912 -NCT02470364 -NCT02472938 -NCT02470390 -NCT02472964 -NCT02470468 -NCT02472977 -NCT02470494 -NCT02472990 -NCT02470507 -NCT02473003 -NCT02470533 -NCT02473029 -NCT02470559 -NCT02473042 -NCT02470585 -NCT02473094 -NCT02470663 -NCT02473120 -NCT02470702 -NCT02473133 -NCT02470741 -NCT02473146 -NCT02470819 -NCT02478450 -NCT02473302 -NCT02476175 -NCT02473341 -NCT02476123 -NCT02473380 -NCT02476240 -NCT02473393 -NCT02476279 -NCT02473406 -NCT02476292 -NCT02473523 -NCT02476305 -NCT02473536 -NCT02476357 -NCT02473614 -NCT02476383 -NCT02473653 -NCT02476396 -NCT02473731 -NCT02476409 -NCT02473848 -NCT02476500 -NCT02473861 -NCT02476513 -NCT02473952 -NCT02476526 -NCT02473965 -NCT02476539 -NCT02474004 -NCT02476552 -NCT02474056 -NCT02476617 -NCT02474095 -NCT02476721 -NCT02474108 -NCT02476786 -NCT02474173 -NCT02476864 -NCT02474186 -NCT02476942 -NCT02474251 -NCT02476955 -NCT02474264 -NCT02476968 -NCT02474290 -NCT02477007 -NCT02474355 -NCT02477059 -NCT02474368 -NCT02477124 -NCT02474602 -NCT02477137 -NCT02474615 -NCT02477176 -NCT02474641 -NCT02477202 -NCT02474680 -NCT02477215 -NCT02474706 -NCT02477228 -NCT02474719 -NCT02477254 -NCT02474732 -NCT02477358 -NCT02474745 -NCT02477436 -NCT02474823 -NCT02477488 -NCT02474888 -NCT02477553 -NCT02474914 -NCT02477631 -NCT02474940 -NCT02477644 -NCT02474966 -NCT02477696 -NCT02475005 -NCT02477787 -NCT02475057 -NCT02477813 -NCT02475122 -NCT02477826 -NCT02475213 -NCT02477839 -NCT02475226 -NCT02477878 -NCT02475291 -NCT02477969 -NCT02475317 -NCT02478099 -NCT02475330 -NCT02478112 -NCT02475668 -NCT02478125 -NCT02475681 -NCT02478138 -NCT02475707 -NCT02478164 -NCT02475733 -NCT02478190 -NCT02475772 -NCT02478242 -NCT02475993 -NCT02478320 -NCT02476006 -NCT02478346 -NCT02476019 -NCT02478398 -NCT02476045 -NCT02478411 -NCT02476097 -NCT02484716 -NCT02478502 -NCT02482090 -NCT02478580 -NCT02482025 -NCT02478710 -NCT02482168 -NCT02478866 -NCT02482233 -NCT02478892 -NCT02482311 -NCT02478905 -NCT02482324 -NCT02478957 -NCT02482337 -NCT02478996 -NCT02482350 -NCT02479048 -NCT02482376 -NCT02479074 -NCT02482389 -NCT02479087 -NCT02482415 -NCT02479100 -NCT02482441 -NCT02479178 -NCT02482454 -NCT02479230 -NCT02482467 -NCT02479243 -NCT02482506 -NCT02479295 -NCT02482532 -NCT02479347 -NCT02482740 -NCT02479438 -NCT02482753 -NCT02479490 -NCT02482818 -NCT02479607 -NCT02482909 -NCT02479698 -NCT02483000 -NCT02479945 -NCT02483052 -NCT02479984 -NCT02483104 -NCT02479997 -NCT02483156 -NCT02480010 -NCT02483208 -NCT02480036 -NCT02483247 -NCT02480114 -NCT02483312 -NCT02480283 -NCT02483429 -NCT02480374 -NCT02483637 -NCT02480595 -NCT02483689 -NCT02480608 -NCT02483728 -NCT02480634 -NCT02483767 -NCT02480842 -NCT02483806 -NCT02480881 -NCT02483832 -NCT02480933 -NCT02483858 -NCT02481037 -NCT02483871 -NCT02481050 -NCT02483884 -NCT02481076 -NCT02483923 -NCT02481128 -NCT02484066 -NCT02481154 -NCT02484079 -NCT02481219 -NCT02484092 -NCT02481258 -NCT02484118 -NCT02481297 -NCT02484131 -NCT02481310 -NCT02484261 -NCT02481349 -NCT02484300 -NCT02481414 -NCT02484339 -NCT02481635 -NCT02484391 -NCT02481648 -NCT02484404 -NCT02481661 -NCT02484417 -NCT02481726 -NCT02484430 -NCT02481804 -NCT02484443 -NCT02481830 -NCT02484508 -NCT02481934 -NCT02484560 -NCT02481947 -NCT02484638 -NCT02481960 -NCT02484677 -NCT02481973 -NCT02489929 -NCT02484755 -NCT02487602 -NCT02484846 -NCT02487550 -NCT02484937 -NCT02487615 -NCT02485015 -NCT02487693 -NCT02485119 -NCT02487823 -NCT02485145 -NCT02487836 -NCT02485275 -NCT02487849 -NCT02485340 -NCT02487979 -NCT02485353 -NCT02487992 -NCT02485379 -NCT02488070 -NCT02485418 -NCT02488096 -NCT02485470 -NCT02488122 -NCT02485535 -NCT02488135 -NCT02485548 -NCT02488187 -NCT02485561 -NCT02488200 -NCT02485574 -NCT02488330 -NCT02485652 -NCT02488369 -NCT02485665 -NCT02488382 -NCT02485678 -NCT02488408 -NCT02485691 -NCT02488434 -NCT02485704 -NCT02488512 -NCT02485717 -NCT02488564 -NCT02485743 -NCT02488577 -NCT02485808 -NCT02488603 -NCT02485834 -NCT02488629 -NCT02485964 -NCT02488655 -NCT02485990 -NCT02488694 -NCT02486016 -NCT02488707 -NCT02486042 -NCT02488759 -NCT02486081 -NCT02488772 -NCT02486276 -NCT02488850 -NCT02486302 -NCT02488889 -NCT02486354 -NCT02488967 -NCT02486380 -NCT02489006 -NCT02486497 -NCT02489071 -NCT02486601 -NCT02489110 -NCT02486614 -NCT02489123 -NCT02486653 -NCT02489201 -NCT02486666 -NCT02489214 -NCT02486718 -NCT02489266 -NCT02486731 -NCT02489318 -NCT02486757 -NCT02489357 -NCT02486783 -NCT02489370 -NCT02486809 -NCT02489409 -NCT02486835 -NCT02489422 -NCT02487017 -NCT02489448 -NCT02487069 -NCT02489500 -NCT02487095 -NCT02489604 -NCT02487134 -NCT02489617 -NCT02487225 -NCT02489630 -NCT02487277 -NCT02489695 -NCT02487316 -NCT02489799 -NCT02487394 -NCT02489890 -NCT02487407 -NCT02489903 -NCT02487472 -NCT02489916 -NCT02487524 -NCT02496078 -NCT02490007 -NCT02493374 -NCT02490046 -NCT02493361 -NCT02490059 -NCT02493452 -NCT02490111 -NCT02493517 -NCT02490202 -NCT02493530 -NCT02490358 -NCT02493543 -NCT02490475 -NCT02493582 -NCT02490488 -NCT02493673 -NCT02490527 -NCT02493751 -NCT02490696 -NCT02493829 -NCT02490709 -NCT02493855 -NCT02490735 -NCT02493972 -NCT02490748 -NCT02494011 -NCT02490800 -NCT02494076 -NCT02490878 -NCT02494167 -NCT02490891 -NCT02494206 -NCT02490930 -NCT02494258 -NCT02490943 -NCT02494297 -NCT02490982 -NCT02494310 -NCT02491060 -NCT02494323 -NCT02491099 -NCT02494440 -NCT02491125 -NCT02494466 -NCT02491255 -NCT02494570 -NCT02491281 -NCT02494583 -NCT02491320 -NCT02494596 -NCT02491372 -NCT02494635 -NCT02491411 -NCT02494674 -NCT02491554 -NCT02494687 -NCT02491567 -NCT02494700 -NCT02491632 -NCT02494713 -NCT02491697 -NCT02494791 -NCT02491814 -NCT02494804 -NCT02491840 -NCT02494869 -NCT02491892 -NCT02494882 -NCT02491957 -NCT02494921 -NCT02491983 -NCT02494973 -NCT02492087 -NCT02495090 -NCT02492126 -NCT02495103 -NCT02492295 -NCT02495155 -NCT02492347 -NCT02495168 -NCT02492373 -NCT02495233 -NCT02492503 -NCT02495311 -NCT02492568 -NCT02495376 -NCT02492607 -NCT02495415 -NCT02492711 -NCT02495454 -NCT02492737 -NCT02495493 -NCT02492750 -NCT02495532 -NCT02492789 -NCT02495610 -NCT02492867 -NCT02495636 -NCT02492945 -NCT02495844 -NCT02492984 -NCT02495883 -NCT02493023 -NCT02495896 -NCT02493036 -NCT02495922 -NCT02493049 -NCT02496013 -NCT02493127 -NCT02496065 -NCT02493296 -NCT02501148 -NCT02496104 -NCT02498639 -NCT02496208 -NCT02498613 -NCT02496221 -NCT02498665 -NCT02496273 -NCT02498756 -NCT02496299 -NCT02498860 -NCT02496338 -NCT02498886 -NCT02496429 -NCT02498899 -NCT02496442 -NCT02498912 -NCT02496520 -NCT02498951 -NCT02496546 -NCT02498964 -NCT02496572 -NCT02499003 -NCT02496585 -NCT02499081 -NCT02496624 -NCT02499120 -NCT02496663 -NCT02499146 -NCT02496689 -NCT02499224 -NCT02496715 -NCT02499328 -NCT02496741 -NCT02499367 -NCT02496767 -NCT02499419 -NCT02496780 -NCT02499484 -NCT02496832 -NCT02499497 -NCT02496949 -NCT02499575 -NCT02496988 -NCT02499601 -NCT02497053 -NCT02499614 -NCT02497066 -NCT02499770 -NCT02497079 -NCT02499835 -NCT02497118 -NCT02499848 -NCT02497157 -NCT02499861 -NCT02497183 -NCT02499939 -NCT02497261 -NCT02499952 -NCT02497378 -NCT02500004 -NCT02497404 -NCT02500030 -NCT02497417 -NCT02500043 -NCT02497443 -NCT02500056 -NCT02497508 -NCT02500121 -NCT02497534 -NCT02500147 -NCT02497547 -NCT02500199 -NCT02497586 -NCT02500238 -NCT02497599 -NCT02500264 -NCT02497638 -NCT02500277 -NCT02497664 -NCT02500329 -NCT02497677 -NCT02500407 -NCT02497781 -NCT02500420 -NCT02497820 -NCT02500459 -NCT02497846 -NCT02500550 -NCT02497872 -NCT02500576 -NCT02497898 -NCT02500641 -NCT02497976 -NCT02500693 -NCT02498041 -NCT02500732 -NCT02498275 -NCT02500797 -NCT02498301 -NCT02500901 -NCT02498340 -NCT02500914 -NCT02498353 -NCT02500940 -NCT02498418 -NCT02501070 -NCT02498535 -NCT02501096 -NCT02498587 -NCT02501135 -NCT02498600 -NCT02506634 -NCT02501213 -NCT02504034 -NCT02501239 -NCT02504021 -NCT02501278 -NCT02504047 -NCT02501291 -NCT02504073 -NCT02501304 -NCT02504112 -NCT02501369 -NCT02504164 -NCT02501395 -NCT02504203 -NCT02501460 -NCT02504229 -NCT02501473 -NCT02504333 -NCT02501486 -NCT02504346 -NCT02501551 -NCT02504359 -NCT02501603 -NCT02504372 -NCT02501759 -NCT02504411 -NCT02501876 -NCT02504424 -NCT02501902 -NCT02504489 -NCT02501941 -NCT02504541 -NCT02501954 -NCT02504554 -NCT02502097 -NCT02504671 -NCT02502149 -NCT02504749 -NCT02502266 -NCT02504762 -NCT02502318 -NCT02504788 -NCT02502331 -NCT02504801 -NCT02502370 -NCT02504814 -NCT02502422 -NCT02504840 -NCT02502487 -NCT02504853 -NCT02502630 -NCT02504892 -NCT02502669 -NCT02504931 -NCT02502682 -NCT02504957 -NCT02502708 -NCT02504983 -NCT02502734 -NCT02505048 -NCT02502747 -NCT02505152 -NCT02502760 -NCT02505165 -NCT02502786 -NCT02505269 -NCT02502864 -NCT02505282 -NCT02502890 -NCT02505516 -NCT02502968 -NCT02505750 -NCT02502994 -NCT02505763 -NCT02503072 -NCT02505919 -NCT02503098 -NCT02505932 -NCT02503111 -NCT02505945 -NCT02503150 -NCT02505971 -NCT02503163 -NCT02506023 -NCT02503176 -NCT02506036 -NCT02503189 -NCT02506088 -NCT02503358 -NCT02506114 -NCT02503423 -NCT02506140 -NCT02503501 -NCT02506153 -NCT02503709 -NCT02506166 -NCT02503722 -NCT02506244 -NCT02503748 -NCT02506257 -NCT02503761 -NCT02506387 -NCT02503774 -NCT02506465 -NCT02503891 -NCT02506478 -NCT02503904 -NCT02506517 -NCT02503917 -NCT02506556 -NCT02503943 -NCT02512315 -NCT02506777 -NCT02509702 -NCT02506790 -NCT02509598 -NCT02506803 -NCT02509780 -NCT02506842 -NCT02509806 -NCT02506933 -NCT02509871 -NCT02506959 -NCT02509975 -NCT02507024 -NCT02510001 -NCT02507076 -NCT02510066 -NCT02507102 -NCT02510118 -NCT02507154 -NCT02510261 -NCT02507180 -NCT02510326 -NCT02507232 -NCT02510378 -NCT02507297 -NCT02510430 -NCT02507336 -NCT02510443 -NCT02507375 -NCT02510456 -NCT02507414 -NCT02510469 -NCT02507427 -NCT02510482 -NCT02507479 -NCT02510495 -NCT02507492 -NCT02510638 -NCT02507518 -NCT02510781 -NCT02507544 -NCT02510859 -NCT02507570 -NCT02510872 -NCT02507583 -NCT02510898 -NCT02507661 -NCT02510911 -NCT02507713 -NCT02510950 -NCT02507765 -NCT02510989 -NCT02507778 -NCT02511067 -NCT02507804 -NCT02511106 -NCT02507960 -NCT02511132 -NCT02508038 -NCT02511197 -NCT02508077 -NCT02511223 -NCT02508142 -NCT02511275 -NCT02508207 -NCT02511301 -NCT02508246 -NCT02511327 -NCT02508298 -NCT02511340 -NCT02508324 -NCT02511405 -NCT02508441 -NCT02511431 -NCT02508467 -NCT02511496 -NCT02508532 -NCT02511522 -NCT02508623 -NCT02511600 -NCT02508636 -NCT02511639 -NCT02508870 -NCT02511665 -NCT02508909 -NCT02511678 -NCT02509026 -NCT02511730 -NCT02509039 -NCT02511756 -NCT02509052 -NCT02511795 -NCT02509065 -NCT02511821 -NCT02509143 -NCT02511847 -NCT02509169 -NCT02512120 -NCT02509286 -NCT02512146 -NCT02509364 -NCT02512172 -NCT02509442 -NCT02512237 -NCT02509468 -NCT02512250 -NCT02509507 -NCT02512263 -NCT02509546 -NCT02512276 -NCT02509585 -NCT02517892 -NCT02512328 -NCT02514889 -NCT02512341 -NCT02514837 -NCT02512354 -NCT02514915 -NCT02512380 -NCT02514928 -NCT02512458 -NCT02515006 -NCT02512497 -NCT02515032 -NCT02512575 -NCT02515058 -NCT02512666 -NCT02515084 -NCT02512692 -NCT02515110 -NCT02512913 -NCT02515162 -NCT02512926 -NCT02515227 -NCT02512965 -NCT02515344 -NCT02512978 -NCT02515357 -NCT02513082 -NCT02515435 -NCT02513173 -NCT02515474 -NCT02513186 -NCT02515487 -NCT02513199 -NCT02515513 -NCT02513277 -NCT02515539 -NCT02513342 -NCT02515669 -NCT02513355 -NCT02515734 -NCT02513394 -NCT02515760 -NCT02513472 -NCT02515877 -NCT02513485 -NCT02515903 -NCT02513524 -NCT02516020 -NCT02513563 -NCT02516059 -NCT02513589 -NCT02516085 -NCT02513615 -NCT02516137 -NCT02513667 -NCT02516241 -NCT02513784 -NCT02516371 -NCT02513849 -NCT02516423 -NCT02513914 -NCT02516501 -NCT02513992 -NCT02516527 -NCT02514005 -NCT02516540 -NCT02514031 -NCT02516553 -NCT02514070 -NCT02516670 -NCT02514083 -NCT02516696 -NCT02514174 -NCT02516774 -NCT02514200 -NCT02516813 -NCT02514213 -NCT02516969 -NCT02514239 -NCT02516995 -NCT02514252 -NCT02517034 -NCT02514265 -NCT02517086 -NCT02514278 -NCT02517125 -NCT02514343 -NCT02517151 -NCT02514382 -NCT02517268 -NCT02514421 -NCT02517281 -NCT02514447 -NCT02517359 -NCT02514499 -NCT02517385 -NCT02514512 -NCT02517398 -NCT02514525 -NCT02517489 -NCT02514551 -NCT02517528 -NCT02514603 -NCT02517593 -NCT02514629 -NCT02517736 -NCT02514668 -NCT02517749 -NCT02514681 -NCT02517762 -NCT02514824 -NCT02523378 -NCT02517918 -NCT02520453 -NCT02517931 -NCT02520427 -NCT02517944 -NCT02520492 -NCT02517970 -NCT02520518 -NCT02517983 -NCT02520609 -NCT02518035 -NCT02520622 -NCT02518087 -NCT02520648 -NCT02518100 -NCT02520752 -NCT02518113 -NCT02520778 -NCT02518191 -NCT02520791 -NCT02518256 -NCT02520817 -NCT02518308 -NCT02520856 -NCT02518347 -NCT02520882 -NCT02518373 -NCT02521051 -NCT02518412 -NCT02521090 -NCT02518451 -NCT02521129 -NCT02518464 -NCT02521142 -NCT02518477 -NCT02521181 -NCT02518529 -NCT02521194 -NCT02518542 -NCT02521285 -NCT02518555 -NCT02521298 -NCT02518685 -NCT02521324 -NCT02518750 -NCT02521363 -NCT02518802 -NCT02521493 -NCT02518854 -NCT02521558 -NCT02518945 -NCT02521623 -NCT02518958 -NCT02521649 -NCT02518997 -NCT02521818 -NCT02519114 -NCT02521844 -NCT02519140 -NCT02521870 -NCT02519231 -NCT02521922 -NCT02519244 -NCT02521961 -NCT02519270 -NCT02522000 -NCT02519322 -NCT02522013 -NCT02519348 -NCT02522091 -NCT02519361 -NCT02522195 -NCT02519387 -NCT02522273 -NCT02519452 -NCT02522299 -NCT02519491 -NCT02522351 -NCT02519556 -NCT02522364 -NCT02519582 -NCT02522403 -NCT02519621 -NCT02522455 -NCT02519712 -NCT02522520 -NCT02519764 -NCT02522611 -NCT02519816 -NCT02522715 -NCT02519868 -NCT02522819 -NCT02519972 -NCT02522910 -NCT02520011 -NCT02523014 -NCT02520063 -NCT02523040 -NCT02520102 -NCT02523053 -NCT02520115 -NCT02523066 -NCT02520128 -NCT02523170 -NCT02520141 -NCT02523235 -NCT02520154 -NCT02523313 -NCT02520219 -NCT02523365 -NCT02520258 -NCT02528357 -NCT02523404 -NCT02525757 -NCT02523417 -NCT02525718 -NCT02523430 -NCT02525822 -NCT02523443 -NCT02525913 -NCT02523469 -NCT02525952 -NCT02523521 -NCT02525965 -NCT02523586 -NCT02525991 -NCT02523612 -NCT02526017 -NCT02523625 -NCT02526043 -NCT02523638 -NCT02526134 -NCT02523703 -NCT02526160 -NCT02523781 -NCT02526264 -NCT02523807 -NCT02526316 -NCT02523833 -NCT02526368 -NCT02523885 -NCT02526498 -NCT02523911 -NCT02526511 -NCT02523924 -NCT02526602 -NCT02523950 -NCT02526628 -NCT02523963 -NCT02526654 -NCT02523976 -NCT02526680 -NCT02523989 -NCT02526693 -NCT02524041 -NCT02526719 -NCT02524080 -NCT02526771 -NCT02524106 -NCT02526784 -NCT02524119 -NCT02526823 -NCT02524236 -NCT02526836 -NCT02524262 -NCT02526849 -NCT02524275 -NCT02526927 -NCT02524405 -NCT02526953 -NCT02524470 -NCT02526979 -NCT02524548 -NCT02527174 -NCT02524665 -NCT02527187 -NCT02524756 -NCT02527213 -NCT02524782 -NCT02527226 -NCT02524860 -NCT02527278 -NCT02524925 -NCT02527304 -NCT02524951 -NCT02527317 -NCT02524990 -NCT02527382 -NCT02525055 -NCT02527434 -NCT02525068 -NCT02527486 -NCT02525159 -NCT02527577 -NCT02525172 -NCT02527707 -NCT02525211 -NCT02527746 -NCT02525224 -NCT02527759 -NCT02525237 -NCT02527772 -NCT02525250 -NCT02527785 -NCT02525276 -NCT02527824 -NCT02525380 -NCT02527889 -NCT02525497 -NCT02527954 -NCT02525536 -NCT02528110 -NCT02525549 -NCT02528123 -NCT02525562 -NCT02528175 -NCT02525640 -NCT02528188 -NCT02525653 -NCT02528266 -NCT02525666 -NCT02528279 -NCT02525692 -NCT02533817 -NCT02528370 -NCT02531464 -NCT02528383 -NCT02531425 -NCT02528526 -NCT02531503 -NCT02528643 -NCT02531516 -NCT02528760 -NCT02531542 -NCT02528877 -NCT02531568 -NCT02528942 -NCT02531581 -NCT02528955 -NCT02531594 -NCT02529007 -NCT02531620 -NCT02529072 -NCT02531633 -NCT02529150 -NCT02531685 -NCT02529280 -NCT02531737 -NCT02529306 -NCT02531802 -NCT02529332 -NCT02531841 -NCT02529345 -NCT02531854 -NCT02529540 -NCT02531906 -NCT02529553 -NCT02531919 -NCT02529579 -NCT02531932 -NCT02529735 -NCT02531971 -NCT02529748 -NCT02531997 -NCT02529761 -NCT02532010 -NCT02529774 -NCT02532075 -NCT02529813 -NCT02532114 -NCT02529826 -NCT02532140 -NCT02529852 -NCT02532192 -NCT02529878 -NCT02532231 -NCT02529930 -NCT02532257 -NCT02529995 -NCT02532322 -NCT02530034 -NCT02532361 -NCT02530047 -NCT02532400 -NCT02530125 -NCT02532426 -NCT02530151 -NCT02532543 -NCT02530229 -NCT02532608 -NCT02530281 -NCT02532634 -NCT02530294 -NCT02532660 -NCT02530320 -NCT02532803 -NCT02530346 -NCT02532816 -NCT02530398 -NCT02532868 -NCT02530411 -NCT02532894 -NCT02530424 -NCT02532907 -NCT02530437 -NCT02532920 -NCT02530463 -NCT02532972 -NCT02530476 -NCT02533011 -NCT02530489 -NCT02533089 -NCT02530502 -NCT02533154 -NCT02530515 -NCT02533271 -NCT02530580 -NCT02533323 -NCT02530593 -NCT02533401 -NCT02530606 -NCT02533518 -NCT02530619 -NCT02533674 -NCT02530736 -NCT02533687 -NCT02530762 -NCT02533700 -NCT02530931 -NCT02533739 -NCT02531217 -NCT02533765 -NCT02531308 -NCT02533778 -NCT02531412 -NCT02539121 -NCT02533869 -NCT02536378 -NCT02533895 -NCT02536339 -NCT02533947 -NCT02536391 -NCT02533999 -NCT02536469 -NCT02534051 -NCT02536495 -NCT02534181 -NCT02536586 -NCT02534194 -NCT02536638 -NCT02534220 -NCT02536677 -NCT02534233 -NCT02536742 -NCT02534246 -NCT02536794 -NCT02534337 -NCT02537106 -NCT02534376 -NCT02537158 -NCT02534389 -NCT02537171 -NCT02534428 -NCT02537223 -NCT02534493 -NCT02537249 -NCT02534506 -NCT02537353 -NCT02534519 -NCT02537431 -NCT02534571 -NCT02537444 -NCT02534623 -NCT02537483 -NCT02534649 -NCT02537548 -NCT02534714 -NCT02537561 -NCT02534727 -NCT02537600 -NCT02534779 -NCT02537613 -NCT02534922 -NCT02537626 -NCT02534961 -NCT02537834 -NCT02535013 -NCT02537847 -NCT02535026 -NCT02537860 -NCT02535078 -NCT02537925 -NCT02535091 -NCT02537977 -NCT02535117 -NCT02538042 -NCT02535221 -NCT02538120 -NCT02535247 -NCT02538133 -NCT02535260 -NCT02538198 -NCT02535273 -NCT02538276 -NCT02535286 -NCT02538289 -NCT02535312 -NCT02538328 -NCT02535325 -NCT02538380 -NCT02535338 -NCT02538432 -NCT02535351 -NCT02538471 -NCT02535364 -NCT02538484 -NCT02535507 -NCT02538510 -NCT02535533 -NCT02538523 -NCT02535650 -NCT02538575 -NCT02535806 -NCT02538614 -NCT02535858 -NCT02538627 -NCT02535871 -NCT02538666 -NCT02535949 -NCT02538731 -NCT02535988 -NCT02538770 -NCT02536014 -NCT02538783 -NCT02536027 -NCT02538822 -NCT02536079 -NCT02538861 -NCT02536144 -NCT02538913 -NCT02536183 -NCT02538926 -NCT02536274 -NCT02538965 -NCT02536287 -NCT02539017 -NCT02536300 -NCT02544945 -NCT02539134 -NCT02542111 -NCT02539160 -NCT02542098 -NCT02539212 -NCT02542124 -NCT02539225 -NCT02542137 -NCT02539290 -NCT02542202 -NCT02539355 -NCT02542254 -NCT02539433 -NCT02542293 -NCT02539472 -NCT02542332 -NCT02539537 -NCT02542397 -NCT02539615 -NCT02542514 -NCT02539680 -NCT02542657 -NCT02539706 -NCT02542735 -NCT02539719 -NCT02542878 -NCT02539784 -NCT02542891 -NCT02539810 -NCT02542930 -NCT02539836 -NCT02543255 -NCT02540031 -NCT02543294 -NCT02540083 -NCT02543320 -NCT02540096 -NCT02543385 -NCT02540135 -NCT02543411 -NCT02540148 -NCT02543476 -NCT02540161 -NCT02543541 -NCT02540174 -NCT02543606 -NCT02540187 -NCT02543645 -NCT02540291 -NCT02543658 -NCT02540330 -NCT02543697 -NCT02540356 -NCT02543710 -NCT02540382 -NCT02543749 -NCT02540421 -NCT02543775 -NCT02540499 -NCT02543801 -NCT02540512 -NCT02543879 -NCT02540538 -NCT02543892 -NCT02540551 -NCT02543905 -NCT02540668 -NCT02544100 -NCT02540694 -NCT02544165 -NCT02540824 -NCT02544191 -NCT02540876 -NCT02544217 -NCT02540928 -NCT02544230 -NCT02541058 -NCT02544243 -NCT02541162 -NCT02544282 -NCT02541253 -NCT02544425 -NCT02541292 -NCT02544438 -NCT02541331 -NCT02544477 -NCT02541370 -NCT02544529 -NCT02541383 -NCT02544633 -NCT02541409 -NCT02544659 -NCT02541461 -NCT02544672 -NCT02541487 -NCT02544685 -NCT02541565 -NCT02544711 -NCT02541604 -NCT02544724 -NCT02541617 -NCT02544737 -NCT02541864 -NCT02544750 -NCT02541877 -NCT02544763 -NCT02541903 -NCT02544789 -NCT02541942 -NCT02544880 -NCT02542046 -NCT02549859 -NCT02544958 -NCT02547441 -NCT02544984 -NCT02547363 -NCT02544997 -NCT02547480 -NCT02545010 -NCT02547636 -NCT02545036 -NCT02547662 -NCT02545075 -NCT02547753 -NCT02545114 -NCT02547792 -NCT02545270 -NCT02547857 -NCT02545283 -NCT02547896 -NCT02545322 -NCT02547948 -NCT02545361 -NCT02547961 -NCT02545387 -NCT02547987 -NCT02545504 -NCT02548117 -NCT02545556 -NCT02548143 -NCT02545686 -NCT02548169 -NCT02545699 -NCT02548195 -NCT02545751 -NCT02548221 -NCT02545777 -NCT02548234 -NCT02545868 -NCT02548338 -NCT02545907 -NCT02548377 -NCT02546102 -NCT02548390 -NCT02546167 -NCT02548403 -NCT02546193 -NCT02548468 -NCT02546232 -NCT02548481 -NCT02546284 -NCT02548494 -NCT02546323 -NCT02548585 -NCT02546388 -NCT02548637 -NCT02546414 -NCT02548715 -NCT02546427 -NCT02548767 -NCT02546440 -NCT02548780 -NCT02546453 -NCT02548793 -NCT02546466 -NCT02548806 -NCT02546518 -NCT02548832 -NCT02546531 -NCT02548910 -NCT02546544 -NCT02548962 -NCT02546596 -NCT02548975 -NCT02546622 -NCT02549053 -NCT02546661 -NCT02549196 -NCT02546674 -NCT02549209 -NCT02546739 -NCT02549261 -NCT02546752 -NCT02549274 -NCT02546843 -NCT02549300 -NCT02546856 -NCT02549339 -NCT02546921 -NCT02549352 -NCT02546934 -NCT02549430 -NCT02546986 -NCT02549456 -NCT02547064 -NCT02549495 -NCT02547090 -NCT02549612 -NCT02547103 -NCT02549651 -NCT02547142 -NCT02549664 -NCT02547168 -NCT02549677 -NCT02547233 -NCT02549742 -NCT02547246 -NCT02549755 -NCT02547298 -NCT02549768 -NCT02547324 -NCT02549833 -NCT02547350 -NCT02555358 -NCT02549911 -NCT02552628 -NCT02549937 -NCT02552615 -NCT02549989 -NCT02552641 -NCT02550041 -NCT02552771 -NCT02550119 -NCT02552875 -NCT02550184 -NCT02552953 -NCT02550210 -NCT02552966 -NCT02550236 -NCT02553005 -NCT02550249 -NCT02553083 -NCT02550288 -NCT02553096 -NCT02550314 -NCT02553174 -NCT02550327 -NCT02553187 -NCT02550366 -NCT02553200 -NCT02550457 -NCT02553265 -NCT02550496 -NCT02553304 -NCT02550535 -NCT02553343 -NCT02550665 -NCT02553447 -NCT02550678 -NCT02553460 -NCT02550743 -NCT02553499 -NCT02550756 -NCT02553525 -NCT02550769 -NCT02553590 -NCT02550925 -NCT02553642 -NCT02551055 -NCT02553707 -NCT02551068 -NCT02553746 -NCT02551081 -NCT02553798 -NCT02551120 -NCT02553889 -NCT02551159 -NCT02553941 -NCT02551185 -NCT02553954 -NCT02551211 -NCT02553967 -NCT02551237 -NCT02554097 -NCT02551263 -NCT02554188 -NCT02551341 -NCT02554201 -NCT02551367 -NCT02554240 -NCT02551432 -NCT02554331 -NCT02551458 -NCT02554344 -NCT02551588 -NCT02554422 -NCT02551718 -NCT02554448 -NCT02551744 -NCT02554526 -NCT02551757 -NCT02554552 -NCT02551783 -NCT02554565 -NCT02551822 -NCT02554773 -NCT02551848 -NCT02554812 -NCT02551887 -NCT02554838 -NCT02551991 -NCT02554851 -NCT02552004 -NCT02554890 -NCT02552017 -NCT02555007 -NCT02552121 -NCT02555033 -NCT02552225 -NCT02555137 -NCT02552251 -NCT02555163 -NCT02552290 -NCT02555176 -NCT02552394 -NCT02555189 -NCT02552420 -NCT02555215 -NCT02552433 -NCT02555280 -NCT02552459 -NCT02555332 -NCT02552485 -NCT02555345 -NCT02552576 -NCT02560376 -NCT02555384 -NCT02558140 -NCT02555397 -NCT02558101 -NCT02555462 -NCT02558348 -NCT02555514 -NCT02558374 -NCT02555644 -NCT02558387 -NCT02555657 -NCT02558400 -NCT02555683 -NCT02558478 -NCT02555735 -NCT02558504 -NCT02555748 -NCT02558569 -NCT02555878 -NCT02558712 -NCT02555943 -NCT02558803 -NCT02555969 -NCT02558816 -NCT02555982 -NCT02558842 -NCT02556034 -NCT02558855 -NCT02556047 -NCT02558868 -NCT02556086 -NCT02558894 -NCT02556216 -NCT02558933 -NCT02556281 -NCT02558946 -NCT02556346 -NCT02558959 -NCT02556411 -NCT02558972 -NCT02556437 -NCT02558998 -NCT02556463 -NCT02559011 -NCT02556515 -NCT02559024 -NCT02556528 -NCT02559063 -NCT02556554 -NCT02559115 -NCT02556593 -NCT02559128 -NCT02556619 -NCT02559154 -NCT02556632 -NCT02559206 -NCT02556658 -NCT02559219 -NCT02556710 -NCT02559310 -NCT02556749 -NCT02559336 -NCT02556762 -NCT02559362 -NCT02556827 -NCT02559427 -NCT02556866 -NCT02559479 -NCT02556892 -NCT02559492 -NCT02556918 -NCT02559518 -NCT02556931 -NCT02559557 -NCT02556944 -NCT02559570 -NCT02557061 -NCT02559674 -NCT02557126 -NCT02559687 -NCT02557243 -NCT02559765 -NCT02557321 -NCT02559778 -NCT02557399 -NCT02559817 -NCT02557412 -NCT02559934 -NCT02557464 -NCT02560012 -NCT02557490 -NCT02560025 -NCT02557503 -NCT02560038 -NCT02557516 -NCT02560051 -NCT02557529 -NCT02560129 -NCT02557737 -NCT02560181 -NCT02557776 -NCT02560194 -NCT02557828 -NCT02560259 -NCT02557841 -NCT02560298 -NCT02557854 -NCT02560337 -NCT02557906 -NCT02560350 -NCT02557932 -NCT02565628 -NCT02560441 -NCT02562963 -NCT02560467 -NCT02562911 -NCT02560480 -NCT02563002 -NCT02560493 -NCT02563054 -NCT02560571 -NCT02563067 -NCT02560584 -NCT02563080 -NCT02560623 -NCT02563093 -NCT02560636 -NCT02563158 -NCT02560662 -NCT02563184 -NCT02560740 -NCT02563288 -NCT02560779 -NCT02563379 -NCT02560818 -NCT02563548 -NCT02560883 -NCT02563561 -NCT02560974 -NCT02563626 -NCT02561026 -NCT02563691 -NCT02561039 -NCT02563873 -NCT02561091 -NCT02563886 -NCT02561117 -NCT02563925 -NCT02561143 -NCT02563951 -NCT02561182 -NCT02563977 -NCT02561208 -NCT02564016 -NCT02561234 -NCT02564107 -NCT02561273 -NCT02564146 -NCT02561312 -NCT02564198 -NCT02561455 -NCT02564237 -NCT02561468 -NCT02564263 -NCT02561494 -NCT02564276 -NCT02561533 -NCT02564367 -NCT02561546 -NCT02564380 -NCT02561611 -NCT02564497 -NCT02561663 -NCT02564536 -NCT02561728 -NCT02564549 -NCT02561793 -NCT02564614 -NCT02561819 -NCT02564666 -NCT02561832 -NCT02564744 -NCT02561845 -NCT02564835 -NCT02561910 -NCT02564848 -NCT02561923 -NCT02564874 -NCT02561936 -NCT02564887 -NCT02561962 -NCT02564900 -NCT02561988 -NCT02564952 -NCT02562027 -NCT02564978 -NCT02562118 -NCT02565082 -NCT02562170 -NCT02565095 -NCT02562365 -NCT02565160 -NCT02562378 -NCT02565303 -NCT02562443 -NCT02565342 -NCT02562508 -NCT02565368 -NCT02562599 -NCT02565407 -NCT02562612 -NCT02565433 -NCT02562625 -NCT02565446 -NCT02562638 -NCT02565498 -NCT02562716 -NCT02565524 -NCT02562729 -NCT02565563 -NCT02562755 -NCT02565576 -NCT02562898 -NCT02571569 -NCT02565641 -NCT02568566 -NCT02565654 -NCT02568553 -NCT02565667 -NCT02568657 -NCT02565706 -NCT02568683 -NCT02565758 -NCT02568748 -NCT02565836 -NCT02568826 -NCT02565849 -NCT02568839 -NCT02565901 -NCT02568891 -NCT02565940 -NCT02568982 -NCT02565992 -NCT02569164 -NCT02566096 -NCT02569242 -NCT02566109 -NCT02569294 -NCT02566265 -NCT02569307 -NCT02566304 -NCT02569320 -NCT02566395 -NCT02569398 -NCT02566408 -NCT02569450 -NCT02566421 -NCT02569489 -NCT02566447 -NCT02569645 -NCT02566551 -NCT02569658 -NCT02566655 -NCT02569697 -NCT02566772 -NCT02569723 -NCT02566811 -NCT02569788 -NCT02566876 -NCT02569801 -NCT02566889 -NCT02569827 -NCT02566902 -NCT02569918 -NCT02566993 -NCT02569957 -NCT02567045 -NCT02569970 -NCT02567084 -NCT02569996 -NCT02567162 -NCT02570100 -NCT02567253 -NCT02570165 -NCT02567331 -NCT02570308 -NCT02567383 -NCT02570386 -NCT02567396 -NCT02570399 -NCT02567409 -NCT02570477 -NCT02567422 -NCT02570529 -NCT02567435 -NCT02570542 -NCT02567448 -NCT02570568 -NCT02567461 -NCT02570581 -NCT02567500 -NCT02570698 -NCT02567539 -NCT02570711 -NCT02567643 -NCT02570776 -NCT02567656 -NCT02570789 -NCT02567708 -NCT02570815 -NCT02567734 -NCT02570828 -NCT02567799 -NCT02570867 -NCT02567851 -NCT02570893 -NCT02567877 -NCT02570919 -NCT02567929 -NCT02570958 -NCT02567942 -NCT02571036 -NCT02568033 -NCT02571088 -NCT02568046 -NCT02571374 -NCT02568241 -NCT02571439 -NCT02568267 -NCT02571478 -NCT02568319 -NCT02571530 -NCT02568449 -NCT02571543 -NCT02568488 -NCT02576626 -NCT02571582 -NCT02574377 -NCT02571660 -NCT02574364 -NCT02571686 -NCT02574403 -NCT02571725 -NCT02574455 -NCT02571829 -NCT02574507 -NCT02571868 -NCT02574533 -NCT02571894 -NCT02574546 -NCT02571946 -NCT02574559 -NCT02571998 -NCT02574598 -NCT02572050 -NCT02574663 -NCT02572076 -NCT02574676 -NCT02572141 -NCT02574728 -NCT02572167 -NCT02574793 -NCT02572193 -NCT02574819 -NCT02572232 -NCT02574910 -NCT02572284 -NCT02574975 -NCT02572336 -NCT02575014 -NCT02572414 -NCT02575027 -NCT02572453 -NCT02575066 -NCT02572479 -NCT02575144 -NCT02572492 -NCT02575157 -NCT02572544 -NCT02575222 -NCT02572583 -NCT02575261 -NCT02572596 -NCT02575287 -NCT02572661 -NCT02575300 -NCT02572687 -NCT02575339 -NCT02572713 -NCT02575365 -NCT02572804 -NCT02575378 -NCT02572843 -NCT02575404 -NCT02572869 -NCT02575508 -NCT02573012 -NCT02575521 -NCT02573051 -NCT02575612 -NCT02573194 -NCT02575638 -NCT02573220 -NCT02575729 -NCT02573233 -NCT02575742 -NCT02573259 -NCT02575781 -NCT02573272 -NCT02575794 -NCT02573324 -NCT02575807 -NCT02573363 -NCT02575859 -NCT02573389 -NCT02575872 -NCT02573428 -NCT02575898 -NCT02573441 -NCT02575963 -NCT02573493 -NCT02576080 -NCT02573506 -NCT02576106 -NCT02573571 -NCT02576275 -NCT02573740 -NCT02576301 -NCT02573870 -NCT02576431 -NCT02573896 -NCT02576444 -NCT02573935 -NCT02576470 -NCT02573974 -NCT02576496 -NCT02574013 -NCT02576509 -NCT02574039 -NCT02576522 -NCT02574078 -NCT02576535 -NCT02574195 -NCT02576548 -NCT02574260 -NCT02576574 -NCT02574273 -NCT02581709 -NCT02576652 -NCT02579473 -NCT02576665 -NCT02579460 -NCT02576756 -NCT02579551 -NCT02576795 -NCT02579564 -NCT02576808 -NCT02579616 -NCT02576821 -NCT02579681 -NCT02576847 -NCT02579694 -NCT02576860 -NCT02579720 -NCT02576873 -NCT02579811 -NCT02576925 -NCT02579824 -NCT02576964 -NCT02579863 -NCT02576977 -NCT02579954 -NCT02576990 -NCT02579967 -NCT02577055 -NCT02579980 -NCT02577094 -NCT02580006 -NCT02577120 -NCT02580032 -NCT02577133 -NCT02580058 -NCT02577159 -NCT02580071 -NCT02577172 -NCT02580084 -NCT02577237 -NCT02580175 -NCT02577341 -NCT02580253 -NCT02577367 -NCT02580279 -NCT02577393 -NCT02580344 -NCT02577406 -NCT02580396 -NCT02577419 -NCT02580422 -NCT02577458 -NCT02580448 -NCT02577536 -NCT02580474 -NCT02577588 -NCT02580487 -NCT02577783 -NCT02580539 -NCT02577861 -NCT02580552 -NCT02578108 -NCT02580656 -NCT02578121 -NCT02580669 -NCT02578134 -NCT02580708 -NCT02578186 -NCT02580747 -NCT02578316 -NCT02580799 -NCT02578368 -NCT02580916 -NCT02578394 -NCT02580929 -NCT02578459 -NCT02580981 -NCT02578511 -NCT02580994 -NCT02578524 -NCT02581007 -NCT02578602 -NCT02581059 -NCT02578641 -NCT02581085 -NCT02578667 -NCT02581137 -NCT02578680 -NCT02581176 -NCT02578732 -NCT02581215 -NCT02578797 -NCT02581241 -NCT02578888 -NCT02581358 -NCT02578940 -NCT02581384 -NCT02579005 -NCT02581397 -NCT02579083 -NCT02581423 -NCT02579096 -NCT02581462 -NCT02579148 -NCT02581501 -NCT02579200 -NCT02581514 -NCT02579226 -NCT02581527 -NCT02579252 -NCT02581670 -NCT02579330 -NCT02586337 -NCT02581748 -NCT02584270 -NCT02581761 -NCT02584244 -NCT02581787 -NCT02584296 -NCT02581813 -NCT02584309 -NCT02581839 -NCT02584322 -NCT02581878 -NCT02584400 -NCT02581930 -NCT02584413 -NCT02581943 -NCT02584426 -NCT02581956 -NCT02584465 -NCT02581982 -NCT02584478 -NCT02582008 -NCT02584517 -NCT02582021 -NCT02584556 -NCT02582060 -NCT02584582 -NCT02582125 -NCT02584595 -NCT02582151 -NCT02584634 -NCT02582164 -NCT02584647 -NCT02582177 -NCT02584699 -NCT02582307 -NCT02584712 -NCT02582320 -NCT02584738 -NCT02582359 -NCT02584790 -NCT02582411 -NCT02584829 -NCT02582424 -NCT02584920 -NCT02582450 -NCT02584933 -NCT02582541 -NCT02584985 -NCT02582697 -NCT02584998 -NCT02582723 -NCT02585089 -NCT02582749 -NCT02585219 -NCT02582762 -NCT02585271 -NCT02582801 -NCT02585323 -NCT02582918 -NCT02585362 -NCT02582931 -NCT02585388 -NCT02582970 -NCT02585479 -NCT02582996 -NCT02585492 -NCT02583035 -NCT02585518 -NCT02583100 -NCT02585583 -NCT02583126 -NCT02585674 -NCT02583139 -NCT02585687 -NCT02583152 -NCT02585713 -NCT02583165 -NCT02585739 -NCT02583191 -NCT02585765 -NCT02583204 -NCT02585778 -NCT02583269 -NCT02585791 -NCT02583282 -NCT02585817 -NCT02583360 -NCT02585843 -NCT02583451 -NCT02585856 -NCT02583477 -NCT02585908 -NCT02583516 -NCT02585947 -NCT02583542 -NCT02585973 -NCT02583568 -NCT02586012 -NCT02583646 -NCT02586025 -NCT02583737 -NCT02586038 -NCT02583763 -NCT02586129 -NCT02583828 -NCT02586142 -NCT02583893 -NCT02586207 -NCT02583932 -NCT02586285 -NCT02584179 -NCT02592473 -NCT02586350 -NCT02589600 -NCT02586402 -NCT02589522 -NCT02586506 -NCT02589821 -NCT02586610 -NCT02589847 -NCT02586623 -NCT02589860 -NCT02586675 -NCT02589925 -NCT02586701 -NCT02589938 -NCT02586753 -NCT02589964 -NCT02586857 -NCT02589977 -NCT02586961 -NCT02590003 -NCT02586987 -NCT02590055 -NCT02587000 -NCT02590107 -NCT02587078 -NCT02590133 -NCT02587169 -NCT02590263 -NCT02587247 -NCT02590315 -NCT02587494 -NCT02590380 -NCT02587546 -NCT02590393 -NCT02587559 -NCT02590432 -NCT02587598 -NCT02590458 -NCT02587624 -NCT02590484 -NCT02587650 -NCT02590497 -NCT02587663 -NCT02590510 -NCT02587689 -NCT02590588 -NCT02587715 -NCT02590666 -NCT02587806 -NCT02590809 -NCT02587819 -NCT02590952 -NCT02587871 -NCT02590965 -NCT02587884 -NCT02590978 -NCT02587923 -NCT02591017 -NCT02587962 -NCT02591030 -NCT02588001 -NCT02591095 -NCT02588092 -NCT02591134 -NCT02588131 -NCT02591381 -NCT02588170 -NCT02591394 -NCT02588248 -NCT02591407 -NCT02588261 -NCT02591433 -NCT02588404 -NCT02591446 -NCT02588443 -NCT02591550 -NCT02588456 -NCT02591615 -NCT02588469 -NCT02591641 -NCT02588495 -NCT02591654 -NCT02588560 -NCT02591667 -NCT02588612 -NCT02591836 -NCT02588638 -NCT02591888 -NCT02588651 -NCT02591901 -NCT02588677 -NCT02592070 -NCT02588755 -NCT02592083 -NCT02588781 -NCT02592304 -NCT02588846 -NCT02592317 -NCT02589041 -NCT02592356 -NCT02589145 -NCT02592369 -NCT02589249 -NCT02592395 -NCT02589366 -NCT02592408 -NCT02589431 -NCT02592434 -NCT02589483 -NCT02592447 -NCT02589496 -NCT02597621 -NCT02592538 -NCT02595242 -NCT02592551 -NCT02595138 -NCT02592577 -NCT02595255 -NCT02592629 -NCT02595281 -NCT02592642 -NCT02595307 -NCT02592681 -NCT02595320 -NCT02592707 -NCT02595372 -NCT02592746 -NCT02595424 -NCT02592759 -NCT02595489 -NCT02592785 -NCT02595515 -NCT02592811 -NCT02595554 -NCT02592837 -NCT02595567 -NCT02592863 -NCT02595723 -NCT02592876 -NCT02595775 -NCT02592967 -NCT02595827 -NCT02593019 -NCT02595840 -NCT02593045 -NCT02595866 -NCT02593123 -NCT02595879 -NCT02593175 -NCT02595892 -NCT02593227 -NCT02595905 -NCT02593279 -NCT02595918 -NCT02593331 -NCT02595931 -NCT02593422 -NCT02595944 -NCT02593487 -NCT02595983 -NCT02593643 -NCT02596035 -NCT02593708 -NCT02596100 -NCT02593786 -NCT02596243 -NCT02593799 -NCT02596256 -NCT02593890 -NCT02596308 -NCT02593929 -NCT02596373 -NCT02593942 -NCT02596490 -NCT02593968 -NCT02596503 -NCT02593981 -NCT02596659 -NCT02594072 -NCT02596711 -NCT02594150 -NCT02596776 -NCT02594163 -NCT02596828 -NCT02594189 -NCT02596867 -NCT02594215 -NCT02596971 -NCT02594267 -NCT02596997 -NCT02594371 -NCT02597036 -NCT02594384 -NCT02597062 -NCT02594475 -NCT02597075 -NCT02594631 -NCT02597101 -NCT02594683 -NCT02597153 -NCT02594696 -NCT02597166 -NCT02594709 -NCT02597309 -NCT02594774 -NCT02597322 -NCT02594787 -NCT02597335 -NCT02594826 -NCT02597348 -NCT02594904 -NCT02597374 -NCT02594943 -NCT02597426 -NCT02595021 -NCT02597452 -NCT02595034 -NCT02597465 -NCT02595073 -NCT02597478 -NCT02595086 -NCT02597582 -NCT02595099 -NCT02603445 -NCT02597634 -NCT02600650 -NCT02597712 -NCT02600611 -NCT02597738 -NCT02600806 -NCT02597777 -NCT02600871 -NCT02597868 -NCT02600897 -NCT02597881 -NCT02600923 -NCT02597894 -NCT02600949 -NCT02597946 -NCT02601014 -NCT02598011 -NCT02601053 -NCT02598219 -NCT02601079 -NCT02598310 -NCT02601144 -NCT02598349 -NCT02601183 -NCT02598414 -NCT02601209 -NCT02598427 -NCT02601248 -NCT02598453 -NCT02601274 -NCT02598531 -NCT02601313 -NCT02598557 -NCT02601339 -NCT02598570 -NCT02601378 -NCT02598661 -NCT02601404 -NCT02598674 -NCT02601547 -NCT02598687 -NCT02601573 -NCT02598713 -NCT02601651 -NCT02598726 -NCT02601703 -NCT02598895 -NCT02601794 -NCT02598960 -NCT02601807 -NCT02598973 -NCT02601937 -NCT02599012 -NCT02601950 -NCT02599090 -NCT02602067 -NCT02599103 -NCT02602080 -NCT02599116 -NCT02602119 -NCT02599142 -NCT02602249 -NCT02599194 -NCT02602262 -NCT02599246 -NCT02602314 -NCT02599324 -NCT02602327 -NCT02599363 -NCT02602405 -NCT02599376 -NCT02602431 -NCT02599402 -NCT02602470 -NCT02599454 -NCT02602587 -NCT02599649 -NCT02602717 -NCT02599662 -NCT02602756 -NCT02599701 -NCT02602808 -NCT02599714 -NCT02602938 -NCT02599779 -NCT02602977 -NCT02600000 -NCT02603003 -NCT02600013 -NCT02603016 -NCT02600039 -NCT02603042 -NCT02600065 -NCT02603068 -NCT02600156 -NCT02603081 -NCT02600234 -NCT02603146 -NCT02600299 -NCT02603159 -NCT02600312 -NCT02603172 -NCT02600364 -NCT02603302 -NCT02600390 -NCT02603341 -NCT02600481 -NCT02603419 -NCT02600533 -NCT02603432 -NCT02600598 -NCT02608580 -NCT02603640 -NCT02606292 -NCT02603653 -NCT02606149 -NCT02603679 -NCT02606305 -NCT02603705 -NCT02606357 -NCT02603757 -NCT02606383 -NCT02603783 -NCT02606396 -NCT02603861 -NCT02606461 -NCT02603874 -NCT02606513 -NCT02603887 -NCT02606539 -NCT02603900 -NCT02606578 -NCT02603926 -NCT02606708 -NCT02603939 -NCT02606851 -NCT02603952 -NCT02606916 -NCT02603965 -NCT02606994 -NCT02604030 -NCT02607046 -NCT02604082 -NCT02607072 -NCT02604121 -NCT02607085 -NCT02604225 -NCT02607098 -NCT02604251 -NCT02607124 -NCT02604342 -NCT02607176 -NCT02604368 -NCT02607202 -NCT02604394 -NCT02607215 -NCT02604498 -NCT02607228 -NCT02604511 -NCT02607332 -NCT02604615 -NCT02607423 -NCT02604732 -NCT02607462 -NCT02604745 -NCT02607488 -NCT02604784 -NCT02607527 -NCT02604862 -NCT02607540 -NCT02604953 -NCT02607553 -NCT02605044 -NCT02607579 -NCT02605070 -NCT02607592 -NCT02605083 -NCT02607618 -NCT02605161 -NCT02607631 -NCT02605213 -NCT02607709 -NCT02605226 -NCT02607787 -NCT02605265 -NCT02607813 -NCT02605304 -NCT02607826 -NCT02605356 -NCT02607904 -NCT02605408 -NCT02607956 -NCT02605421 -NCT02607982 -NCT02605460 -NCT02608034 -NCT02605486 -NCT02608073 -NCT02605512 -NCT02608125 -NCT02605564 -NCT02608177 -NCT02605694 -NCT02608203 -NCT02605720 -NCT02608216 -NCT02605746 -NCT02608229 -NCT02605811 -NCT02608255 -NCT02605863 -NCT02608281 -NCT02605915 -NCT02608385 -NCT02605967 -NCT02608411 -NCT02606006 -NCT02608437 -NCT02606045 -NCT02608489 -NCT02606097 -NCT02608554 -NCT02606123 -NCT02613858 -NCT02608684 -NCT02611557 -NCT02608736 -NCT02611544 -NCT02608814 -NCT02611583 -NCT02608866 -NCT02611661 -NCT02608879 -NCT02611700 -NCT02609009 -NCT02611739 -NCT02609022 -NCT02611804 -NCT02609100 -NCT02611882 -NCT02609204 -NCT02611908 -NCT02609230 -NCT02611921 -NCT02609295 -NCT02611960 -NCT02609321 -NCT02611973 -NCT02609373 -NCT02612051 -NCT02609386 -NCT02612168 -NCT02609451 -NCT02612194 -NCT02609503 -NCT02612207 -NCT02609529 -NCT02612285 -NCT02609581 -NCT02612311 -NCT02609594 -NCT02612376 -NCT02609659 -NCT02612402 -NCT02609685 -NCT02612532 -NCT02609724 -NCT02612558 -NCT02609737 -NCT02612571 -NCT02609776 -NCT02612636 -NCT02609828 -NCT02612649 -NCT02609880 -NCT02612714 -NCT02609919 -NCT02612727 -NCT02609958 -NCT02612779 -NCT02609984 -NCT02612870 -NCT02610010 -NCT02613026 -NCT02610062 -NCT02613065 -NCT02610075 -NCT02613078 -NCT02610127 -NCT02613182 -NCT02610140 -NCT02613208 -NCT02610335 -NCT02613221 -NCT02610361 -NCT02613234 -NCT02610556 -NCT02613260 -NCT02610621 -NCT02613273 -NCT02610660 -NCT02613286 -NCT02610699 -NCT02613299 -NCT02610764 -NCT02613312 -NCT02610777 -NCT02613325 -NCT02610855 -NCT02613338 -NCT02610920 -NCT02613364 -NCT02611024 -NCT02613390 -NCT02611037 -NCT02613416 -NCT02611050 -NCT02613455 -NCT02611128 -NCT02613507 -NCT02611167 -NCT02613520 -NCT02611206 -NCT02613598 -NCT02611245 -NCT02613611 -NCT02611258 -NCT02613650 -NCT02611323 -NCT02613676 -NCT02611453 -NCT02613728 -NCT02611466 -NCT02613819 -NCT02611492 -NCT02619084 -NCT02613871 -NCT02616588 -NCT02613923 -NCT02616575 -NCT02613962 -NCT02616601 -NCT02613988 -NCT02616614 -NCT02614066 -NCT02616640 -NCT02614118 -NCT02616653 -NCT02614144 -NCT02616705 -NCT02614157 -NCT02616731 -NCT02614183 -NCT02616744 -NCT02614235 -NCT02616757 -NCT02614248 -NCT02616796 -NCT02614274 -NCT02616848 -NCT02614339 -NCT02616900 -NCT02614365 -NCT02616926 -NCT02614456 -NCT02616952 -NCT02614482 -NCT02616965 -NCT02614495 -NCT02616978 -NCT02614508 -NCT02617004 -NCT02614534 -NCT02617043 -NCT02614560 -NCT02617134 -NCT02614599 -NCT02617173 -NCT02614651 -NCT02617186 -NCT02614703 -NCT02617199 -NCT02614729 -NCT02617264 -NCT02614794 -NCT02617407 -NCT02614833 -NCT02617485 -NCT02614859 -NCT02617537 -NCT02614898 -NCT02617589 -NCT02614989 -NCT02617615 -NCT02615041 -NCT02617706 -NCT02615067 -NCT02617745 -NCT02615106 -NCT02617771 -NCT02615132 -NCT02617784 -NCT02615158 -NCT02617810 -NCT02615210 -NCT02617849 -NCT02615223 -NCT02617862 -NCT02615275 -NCT02617888 -NCT02615457 -NCT02617966 -NCT02615509 -NCT02618044 -NCT02615574 -NCT02618083 -NCT02615691 -NCT02618109 -NCT02615730 -NCT02618161 -NCT02615808 -NCT02618200 -NCT02615834 -NCT02618278 -NCT02615964 -NCT02618317 -NCT02616016 -NCT02618343 -NCT02616172 -NCT02618356 -NCT02616185 -NCT02618369 -NCT02616250 -NCT02618421 -NCT02616263 -NCT02618447 -NCT02616302 -NCT02618681 -NCT02616393 -NCT02618850 -NCT02616406 -NCT02619045 -NCT02616432 -NCT02619058 -NCT02616497 -NCT02619071 -NCT02616562 -NCT02624531 -NCT02619097 -NCT02621567 -NCT02619123 -NCT02621541 -NCT02619149 -NCT02621658 -NCT02619162 -NCT02621684 -NCT02619240 -NCT02621710 -NCT02619253 -NCT02621957 -NCT02619266 -NCT02621970 -NCT02619292 -NCT02621996 -NCT02619357 -NCT02622009 -NCT02619396 -NCT02622074 -NCT02619435 -NCT02622178 -NCT02619448 -NCT02622321 -NCT02619461 -NCT02622373 -NCT02619474 -NCT02622412 -NCT02619565 -NCT02622490 -NCT02619604 -NCT02622516 -NCT02619630 -NCT02622594 -NCT02619669 -NCT02622607 -NCT02619682 -NCT02622620 -NCT02619734 -NCT02622646 -NCT02619747 -NCT02622711 -NCT02619812 -NCT02622776 -NCT02619838 -NCT02622841 -NCT02619864 -NCT02622880 -NCT02619903 -NCT02622932 -NCT02619942 -NCT02623010 -NCT02619955 -NCT02623062 -NCT02620033 -NCT02623101 -NCT02620202 -NCT02623127 -NCT02620254 -NCT02623153 -NCT02620280 -NCT02623166 -NCT02620371 -NCT02623231 -NCT02620397 -NCT02623309 -NCT02620423 -NCT02623413 -NCT02620488 -NCT02623556 -NCT02620605 -NCT02623582 -NCT02620631 -NCT02623595 -NCT02620644 -NCT02623647 -NCT02620670 -NCT02623712 -NCT02620735 -NCT02623751 -NCT02620748 -NCT02623920 -NCT02620774 -NCT02623933 -NCT02620787 -NCT02623959 -NCT02620800 -NCT02623972 -NCT02620839 -NCT02624024 -NCT02620852 -NCT02624102 -NCT02620865 -NCT02624128 -NCT02621021 -NCT02624258 -NCT02621151 -NCT02624271 -NCT02621190 -NCT02624349 -NCT02621268 -NCT02624362 -NCT02621333 -NCT02624388 -NCT02621372 -NCT02624440 -NCT02621398 -NCT02624492 -NCT02621437 -NCT02624518 -NCT02621515 -NCT02629692 -NCT02624687 -NCT02627027 -NCT02624700 -NCT02626962 -NCT02624726 -NCT02627209 -NCT02624934 -NCT02627248 -NCT02624973 -NCT02627274 -NCT02624986 -NCT02627313 -NCT02624999 -NCT02627339 -NCT02625038 -NCT02627352 -NCT02625077 -NCT02627391 -NCT02625090 -NCT02627430 -NCT02625168 -NCT02627443 -NCT02625259 -NCT02627456 -NCT02625272 -NCT02627469 -NCT02625337 -NCT02627560 -NCT02625389 -NCT02627573 -NCT02625441 -NCT02627638 -NCT02625454 -NCT02627664 -NCT02625480 -NCT02627677 -NCT02625506 -NCT02627781 -NCT02625610 -NCT02627807 -NCT02625623 -NCT02627820 -NCT02625662 -NCT02627872 -NCT02625688 -NCT02627963 -NCT02625831 -NCT02627976 -NCT02625857 -NCT02628015 -NCT02625909 -NCT02628041 -NCT02625961 -NCT02628067 -NCT02625987 -NCT02628080 -NCT02626000 -NCT02628093 -NCT02626052 -NCT02628119 -NCT02626065 -NCT02628132 -NCT02626117 -NCT02628171 -NCT02626130 -NCT02628405 -NCT02626195 -NCT02628496 -NCT02626208 -NCT02628535 -NCT02626234 -NCT02628574 -NCT02626312 -NCT02628613 -NCT02626338 -NCT02628665 -NCT02626364 -NCT02628691 -NCT02626377 -NCT02628704 -NCT02626455 -NCT02628808 -NCT02626481 -NCT02628860 -NCT02626507 -NCT02628886 -NCT02626520 -NCT02628899 -NCT02626533 -NCT02628951 -NCT02626598 -NCT02629029 -NCT02626637 -NCT02629081 -NCT02626663 -NCT02629133 -NCT02626715 -NCT02629185 -NCT02626754 -NCT02629315 -NCT02626806 -NCT02629406 -NCT02626845 -NCT02629510 -NCT02626858 -NCT02629523 -NCT02626884 -NCT02629549 -NCT02626897 -NCT02629614 -NCT02626923 -NCT02635061 -NCT02629757 -NCT02632409 -NCT02629809 -NCT02632396 -NCT02629848 -NCT02632435 -NCT02629874 -NCT02632448 -NCT02629913 -NCT02632461 -NCT02629978 -NCT02632565 -NCT02630030 -NCT02632669 -NCT02630043 -NCT02632708 -NCT02630108 -NCT02632721 -NCT02630186 -NCT02632760 -NCT02630199 -NCT02632786 -NCT02630251 -NCT02632851 -NCT02630264 -NCT02632864 -NCT02630368 -NCT02632903 -NCT02630394 -NCT02632955 -NCT02630420 -NCT02633020 -NCT02630433 -NCT02633059 -NCT02630446 -NCT02633098 -NCT02630485 -NCT02633137 -NCT02630589 -NCT02633176 -NCT02630693 -NCT02633189 -NCT02630823 -NCT02633202 -NCT02630927 -NCT02633254 -NCT02631044 -NCT02633280 -NCT02631070 -NCT02633462 -NCT02631135 -NCT02633475 -NCT02631187 -NCT02633514 -NCT02631226 -NCT02633540 -NCT02631239 -NCT02633553 -NCT02631252 -NCT02633579 -NCT02631447 -NCT02633592 -NCT02631460 -NCT02633644 -NCT02631499 -NCT02633696 -NCT02631538 -NCT02633735 -NCT02631577 -NCT02633748 -NCT02631590 -NCT02633800 -NCT02631616 -NCT02633813 -NCT02631655 -NCT02633917 -NCT02631668 -NCT02633943 -NCT02631681 -NCT02633969 -NCT02631733 -NCT02634216 -NCT02631746 -NCT02634294 -NCT02631863 -NCT02634307 -NCT02631876 -NCT02634411 -NCT02631928 -NCT02634502 -NCT02632006 -NCT02634619 -NCT02632019 -NCT02634632 -NCT02632045 -NCT02634710 -NCT02632071 -NCT02634723 -NCT02632110 -NCT02634827 -NCT02632136 -NCT02634905 -NCT02632188 -NCT02634918 -NCT02632201 -NCT02634957 -NCT02632253 -NCT02635009 -NCT02632266 -NCT02635022 -NCT02632305 -NCT02640365 -NCT02635074 -NCT02638051 -NCT02635217 -NCT02638038 -NCT02635256 -NCT02638090 -NCT02635347 -NCT02638285 -NCT02635360 -NCT02638298 -NCT02635425 -NCT02638311 -NCT02635503 -NCT02638350 -NCT02635672 -NCT02638389 -NCT02635724 -NCT02638415 -NCT02635737 -NCT02638428 -NCT02635750 -NCT02638467 -NCT02635763 -NCT02638506 -NCT02635906 -NCT02638519 -NCT02635971 -NCT02638584 -NCT02635984 -NCT02638649 -NCT02635997 -NCT02638701 -NCT02636010 -NCT02638714 -NCT02636036 -NCT02638740 -NCT02636088 -NCT02638766 -NCT02636192 -NCT02638831 -NCT02636205 -NCT02638857 -NCT02636231 -NCT02638909 -NCT02636322 -NCT02638922 -NCT02636426 -NCT02638935 -NCT02636465 -NCT02639026 -NCT02636543 -NCT02639065 -NCT02636556 -NCT02639104 -NCT02636569 -NCT02639117 -NCT02636582 -NCT02639156 -NCT02636634 -NCT02639182 -NCT02636647 -NCT02639208 -NCT02636725 -NCT02639234 -NCT02636894 -NCT02639247 -NCT02637024 -NCT02639273 -NCT02637115 -NCT02639325 -NCT02637141 -NCT02639390 -NCT02637284 -NCT02639403 -NCT02637297 -NCT02639546 -NCT02637349 -NCT02639559 -NCT02637375 -NCT02639611 -NCT02637466 -NCT02639650 -NCT02637479 -NCT02639767 -NCT02637531 -NCT02639819 -NCT02637557 -NCT02639858 -NCT02637596 -NCT02639897 -NCT02637635 -NCT02639910 -NCT02637661 -NCT02640053 -NCT02637687 -NCT02640092 -NCT02637739 -NCT02640105 -NCT02637765 -NCT02640118 -NCT02637921 -NCT02640131 -NCT02637934 -NCT02640209 -NCT02637947 -NCT02640313 -NCT02637986 -NCT02640326 -NCT02638012 -NCT02640352 -NCT02638025 -NCT02645981 -NCT02640378 -NCT02643212 -NCT02640495 -NCT02643160 -NCT02640508 -NCT02643238 -NCT02640534 -NCT02643290 -NCT02640573 -NCT02643303 -NCT02640586 -NCT02643342 -NCT02640599 -NCT02643355 -NCT02640664 -NCT02643407 -NCT02640768 -NCT02643420 -NCT02640781 -NCT02643498 -NCT02640833 -NCT02643511 -NCT02640898 -NCT02643550 -NCT02640924 -NCT02643667 -NCT02640976 -NCT02643849 -NCT02641002 -NCT02643875 -NCT02641015 -NCT02643966 -NCT02641054 -NCT02644018 -NCT02641093 -NCT02644070 -NCT02641145 -NCT02644122 -NCT02641314 -NCT02644135 -NCT02641327 -NCT02644148 -NCT02641353 -NCT02644187 -NCT02641366 -NCT02644200 -NCT02641379 -NCT02644213 -NCT02641431 -NCT02644252 -NCT02641483 -NCT02644278 -NCT02641600 -NCT02644291 -NCT02641639 -NCT02644304 -NCT02641652 -NCT02644369 -NCT02641691 -NCT02644408 -NCT02641769 -NCT02644460 -NCT02641782 -NCT02644603 -NCT02641847 -NCT02644655 -NCT02641873 -NCT02644707 -NCT02641912 -NCT02644772 -NCT02641925 -NCT02644863 -NCT02641938 -NCT02644967 -NCT02642016 -NCT02644993 -NCT02642042 -NCT02645045 -NCT02642094 -NCT02645084 -NCT02642107 -NCT02645123 -NCT02642419 -NCT02645136 -NCT02642432 -NCT02645149 -NCT02642471 -NCT02645175 -NCT02642510 -NCT02645292 -NCT02642653 -NCT02645409 -NCT02642744 -NCT02645461 -NCT02642809 -NCT02645487 -NCT02642913 -NCT02645591 -NCT02642926 -NCT02645604 -NCT02642939 -NCT02645760 -NCT02642965 -NCT02645786 -NCT02642978 -NCT02645864 -NCT02642991 -NCT02645877 -NCT02643043 -NCT02645968 -NCT02643056 -NCT02650752 -NCT02646020 -NCT02648815 -NCT02646085 -NCT02648802 -NCT02646098 -NCT02648841 -NCT02646137 -NCT02648854 -NCT02646241 -NCT02648880 -NCT02646319 -NCT02648919 -NCT02646384 -NCT02648932 -NCT02646423 -NCT02648984 -NCT02646514 -NCT02648997 -NCT02646553 -NCT02649062 -NCT02646566 -NCT02649101 -NCT02646735 -NCT02649153 -NCT02646748 -NCT02649166 -NCT02646839 -NCT02649335 -NCT02646852 -NCT02649348 -NCT02646943 -NCT02649361 -NCT02647021 -NCT02649387 -NCT02647047 -NCT02649439 -NCT02647099 -NCT02649452 -NCT02647112 -NCT02649530 -NCT02647125 -NCT02649582 -NCT02647151 -NCT02649621 -NCT02647190 -NCT02649647 -NCT02647216 -NCT02649673 -NCT02647281 -NCT02649686 -NCT02647385 -NCT02649699 -NCT02647398 -NCT02649712 -NCT02647476 -NCT02649764 -NCT02647502 -NCT02649790 -NCT02647528 -NCT02649829 -NCT02647593 -NCT02649855 -NCT02647671 -NCT02649868 -NCT02647684 -NCT02649894 -NCT02647749 -NCT02649946 -NCT02647788 -NCT02649985 -NCT02647827 -NCT02650011 -NCT02647853 -NCT02650193 -NCT02647944 -NCT02650258 -NCT02647957 -NCT02650271 -NCT02647983 -NCT02650349 -NCT02648009 -NCT02650375 -NCT02648074 -NCT02650401 -NCT02648087 -NCT02650414 -NCT02648178 -NCT02650427 -NCT02648282 -NCT02650453 -NCT02648308 -NCT02650492 -NCT02648386 -NCT02650505 -NCT02648399 -NCT02650544 -NCT02648425 -NCT02650583 -NCT02648477 -NCT02650622 -NCT02648490 -NCT02650635 -NCT02648555 -NCT02650648 -NCT02648633 -NCT02650661 -NCT02648711 -NCT02650700 -NCT02648724 -NCT02650713 -NCT02648763 -NCT02656706 -NCT02650765 -NCT02653937 -NCT02650791 -NCT02653911 -NCT02650804 -NCT02653976 -NCT02650817 -NCT02653989 -NCT02650830 -NCT02654028 -NCT02650843 -NCT02654041 -NCT02650960 -NCT02654054 -NCT02650986 -NCT02654106 -NCT02650999 -NCT02654119 -NCT02651090 -NCT02654132 -NCT02651116 -NCT02654158 -NCT02651129 -NCT02654262 -NCT02651142 -NCT02654405 -NCT02651155 -NCT02654431 -NCT02651207 -NCT02654561 -NCT02651220 -NCT02654587 -NCT02651415 -NCT02654639 -NCT02651441 -NCT02654652 -NCT02651493 -NCT02654665 -NCT02651506 -NCT02654717 -NCT02651610 -NCT02654769 -NCT02651662 -NCT02654821 -NCT02651727 -NCT02654938 -NCT02651818 -NCT02654951 -NCT02651844 -NCT02654964 -NCT02651883 -NCT02654990 -NCT02651909 -NCT02655016 -NCT02651948 -NCT02655055 -NCT02651974 -NCT02655068 -NCT02652195 -NCT02655081 -NCT02652234 -NCT02655094 -NCT02652286 -NCT02655224 -NCT02652299 -NCT02655289 -NCT02652364 -NCT02655341 -NCT02652455 -NCT02655367 -NCT02652468 -NCT02655458 -NCT02652572 -NCT02655536 -NCT02652702 -NCT02655575 -NCT02652715 -NCT02655601 -NCT02652767 -NCT02655653 -NCT02652780 -NCT02655809 -NCT02652871 -NCT02655822 -NCT02652910 -NCT02655913 -NCT02652923 -NCT02655952 -NCT02652975 -NCT02656082 -NCT02653105 -NCT02656121 -NCT02653183 -NCT02656147 -NCT02653196 -NCT02656303 -NCT02653248 -NCT02656368 -NCT02653313 -NCT02656381 -NCT02653443 -NCT02656407 -NCT02653521 -NCT02656563 -NCT02653612 -NCT02656589 -NCT02653625 -NCT02656615 -NCT02653664 -NCT02656654 -NCT02653755 -NCT02661386 -NCT02656849 -NCT02659189 -NCT02656953 -NCT02659059 -NCT02657005 -NCT02659241 -NCT02657031 -NCT02659293 -NCT02657044 -NCT02659332 -NCT02657070 -NCT02659345 -NCT02657083 -NCT02659384 -NCT02657135 -NCT02659501 -NCT02657187 -NCT02659514 -NCT02657213 -NCT02659527 -NCT02657317 -NCT02659540 -NCT02657330 -NCT02659631 -NCT02657343 -NCT02659722 -NCT02657356 -NCT02659800 -NCT02657369 -NCT02659813 -NCT02657408 -NCT02659839 -NCT02657434 -NCT02659852 -NCT02657447 -NCT02659930 -NCT02657486 -NCT02659943 -NCT02657538 -NCT02659995 -NCT02657551 -NCT02660034 -NCT02657603 -NCT02660060 -NCT02657681 -NCT02660125 -NCT02657694 -NCT02660138 -NCT02657707 -NCT02660190 -NCT02657785 -NCT02660229 -NCT02657824 -NCT02660255 -NCT02657876 -NCT02660281 -NCT02657889 -NCT02660320 -NCT02657928 -NCT02660359 -NCT02657993 -NCT02660372 -NCT02658019 -NCT02660411 -NCT02658084 -NCT02660437 -NCT02658097 -NCT02660489 -NCT02658149 -NCT02660515 -NCT02658162 -NCT02660528 -NCT02658201 -NCT02660671 -NCT02658214 -NCT02660697 -NCT02658279 -NCT02660710 -NCT02658396 -NCT02660736 -NCT02658461 -NCT02660788 -NCT02658487 -NCT02660801 -NCT02658500 -NCT02660853 -NCT02658552 -NCT02660905 -NCT02658565 -NCT02660918 -NCT02658669 -NCT02660970 -NCT02658695 -NCT02661022 -NCT02658708 -NCT02661035 -NCT02658721 -NCT02661100 -NCT02658734 -NCT02661152 -NCT02658812 -NCT02661191 -NCT02658890 -NCT02661256 -NCT02658929 -NCT02661282 -NCT02658968 -NCT02661308 -NCT02658981 -NCT02661360 -NCT02659020 -NCT02666742 -NCT02661425 -NCT02664077 -NCT02661451 -NCT02663908 -NCT02661503 -NCT02664103 -NCT02661542 -NCT02664181 -NCT02661659 -NCT02664220 -NCT02661672 -NCT02664259 -NCT02661685 -NCT02664298 -NCT02661789 -NCT02664363 -NCT02661815 -NCT02664389 -NCT02661932 -NCT02664428 -NCT02661945 -NCT02664467 -NCT02661971 -NCT02664493 -NCT02662062 -NCT02664688 -NCT02662075 -NCT02664792 -NCT02662114 -NCT02664805 -NCT02662166 -NCT02664896 -NCT02662192 -NCT02664935 -NCT02662218 -NCT02664961 -NCT02662244 -NCT02664974 -NCT02662296 -NCT02665026 -NCT02662309 -NCT02665039 -NCT02662335 -NCT02665065 -NCT02662348 -NCT02665104 -NCT02662426 -NCT02665117 -NCT02662491 -NCT02665143 -NCT02662504 -NCT02665182 -NCT02662608 -NCT02665195 -NCT02662621 -NCT02665325 -NCT02662634 -NCT02665390 -NCT02662647 -NCT02665416 -NCT02662673 -NCT02665442 -NCT02662712 -NCT02665546 -NCT02662725 -NCT02665559 -NCT02662894 -NCT02665572 -NCT02662907 -NCT02665585 -NCT02662933 -NCT02665650 -NCT02662959 -NCT02665702 -NCT02663011 -NCT02665728 -NCT02663063 -NCT02665741 -NCT02663206 -NCT02665871 -NCT02663258 -NCT02665923 -NCT02663271 -NCT02665962 -NCT02663297 -NCT02666040 -NCT02663427 -NCT02666079 -NCT02663440 -NCT02666105 -NCT02663479 -NCT02666118 -NCT02663492 -NCT02666183 -NCT02663518 -NCT02666209 -NCT02663531 -NCT02666222 -NCT02663544 -NCT02666261 -NCT02663570 -NCT02666326 -NCT02663609 -NCT02666534 -NCT02663622 -NCT02666599 -NCT02663752 -NCT02666612 -NCT02663817 -NCT02666690 -NCT02663895 -NCT02671955 -NCT02666807 -NCT02669251 -NCT02666885 -NCT02669186 -NCT02666898 -NCT02669264 -NCT02666950 -NCT02669420 -NCT02666976 -NCT02669459 -NCT02667145 -NCT02669485 -NCT02667236 -NCT02669511 -NCT02667249 -NCT02669576 -NCT02667275 -NCT02669615 -NCT02667288 -NCT02669719 -NCT02667301 -NCT02669823 -NCT02667392 -NCT02669849 -NCT02667418 -NCT02669888 -NCT02667483 -NCT02669914 -NCT02667496 -NCT02669966 -NCT02667548 -NCT02669992 -NCT02667561 -NCT02670031 -NCT02667574 -NCT02670044 -NCT02667587 -NCT02670057 -NCT02667626 -NCT02670083 -NCT02667743 -NCT02670109 -NCT02667873 -NCT02670161 -NCT02667886 -NCT02670200 -NCT02667925 -NCT02670252 -NCT02667977 -NCT02670265 -NCT02668029 -NCT02670317 -NCT02668081 -NCT02670343 -NCT02668146 -NCT02670356 -NCT02668172 -NCT02670382 -NCT02668185 -NCT02670486 -NCT02668250 -NCT02670525 -NCT02668263 -NCT02670564 -NCT02668276 -NCT02670577 -NCT02668289 -NCT02670603 -NCT02668315 -NCT02670616 -NCT02668393 -NCT02670642 -NCT02668471 -NCT02670655 -NCT02668497 -NCT02670668 -NCT02668523 -NCT02670707 -NCT02668536 -NCT02670980 -NCT02668575 -NCT02671032 -NCT02668601 -NCT02671071 -NCT02668614 -NCT02671188 -NCT02668653 -NCT02671292 -NCT02668666 -NCT02671435 -NCT02668718 -NCT02671448 -NCT02668770 -NCT02671513 -NCT02668783 -NCT02671552 -NCT02668822 -NCT02671617 -NCT02668835 -NCT02671708 -NCT02668913 -NCT02671760 -NCT02669004 -NCT02671877 -NCT02669017 -NCT02671890 -NCT02669056 -NCT02671903 -NCT02669108 -NCT02671942 -NCT02669173 -NCT02677636 -NCT02671994 -NCT02675244 -NCT02672020 -NCT02675231 -NCT02672033 -NCT02675439 -NCT02672098 -NCT02675452 -NCT02672189 -NCT02675478 -NCT02672241 -NCT02675491 -NCT02672358 -NCT02675660 -NCT02672449 -NCT02675673 -NCT02672475 -NCT02675764 -NCT02672488 -NCT02675829 -NCT02672501 -NCT02675842 -NCT02672527 -NCT02675881 -NCT02672553 -NCT02675894 -NCT02672774 -NCT02675946 -NCT02672865 -NCT02675985 -NCT02672904 -NCT02675998 -NCT02672917 -NCT02676050 -NCT02672969 -NCT02676323 -NCT02672995 -NCT02676349 -NCT02673021 -NCT02676388 -NCT02673060 -NCT02676479 -NCT02673151 -NCT02676531 -NCT02673177 -NCT02676544 -NCT02673268 -NCT02676557 -NCT02673333 -NCT02676570 -NCT02673398 -NCT02676674 -NCT02673528 -NCT02676687 -NCT02673632 -NCT02676726 -NCT02673736 -NCT02676778 -NCT02673814 -NCT02676791 -NCT02673879 -NCT02676856 -NCT02673918 -NCT02676869 -NCT02674061 -NCT02676882 -NCT02674152 -NCT02676895 -NCT02674178 -NCT02676908 -NCT02674191 -NCT02676973 -NCT02674204 -NCT02676986 -NCT02674243 -NCT02677038 -NCT02674256 -NCT02677090 -NCT02674269 -NCT02677116 -NCT02674282 -NCT02677129 -NCT02674412 -NCT02677155 -NCT02674555 -NCT02677207 -NCT02674568 -NCT02677220 -NCT02674646 -NCT02677233 -NCT02674659 -NCT02677259 -NCT02674672 -NCT02677311 -NCT02674750 -NCT02677324 -NCT02674763 -NCT02677337 -NCT02674776 -NCT02677389 -NCT02674815 -NCT02677467 -NCT02674971 -NCT02677506 -NCT02674997 -NCT02677558 -NCT02675049 -NCT02677597 -NCT02675088 -NCT02677610 -NCT02675114 -NCT02682836 -NCT02677649 -NCT02680301 -NCT02677714 -NCT02680262 -NCT02677779 -NCT02680379 -NCT02677818 -NCT02680405 -NCT02677857 -NCT02680470 -NCT02677883 -NCT02680483 -NCT02677896 -NCT02680535 -NCT02677922 -NCT02680587 -NCT02677948 -NCT02680613 -NCT02677961 -NCT02680639 -NCT02678013 -NCT02680717 -NCT02678091 -NCT02680795 -NCT02678104 -NCT02680847 -NCT02678143 -NCT02680873 -NCT02678169 -NCT02680925 -NCT02678182 -NCT02680951 -NCT02678299 -NCT02680977 -NCT02678338 -NCT02680990 -NCT02678351 -NCT02681068 -NCT02678429 -NCT02681107 -NCT02678442 -NCT02681172 -NCT02678481 -NCT02681198 -NCT02678520 -NCT02681211 -NCT02678533 -NCT02681237 -NCT02678572 -NCT02681250 -NCT02678741 -NCT02681263 -NCT02678780 -NCT02681302 -NCT02678806 -NCT02681315 -NCT02678832 -NCT02681432 -NCT02678884 -NCT02681445 -NCT02678910 -NCT02681458 -NCT02678936 -NCT02681471 -NCT02678949 -NCT02681523 -NCT02678975 -NCT02681549 -NCT02679040 -NCT02681562 -NCT02679066 -NCT02681588 -NCT02679118 -NCT02681601 -NCT02679131 -NCT02681614 -NCT02679144 -NCT02681640 -NCT02679170 -NCT02681705 -NCT02679196 -NCT02681718 -NCT02679261 -NCT02681770 -NCT02679339 -NCT02681796 -NCT02679443 -NCT02681965 -NCT02679482 -NCT02682082 -NCT02679495 -NCT02682251 -NCT02679547 -NCT02682355 -NCT02679573 -NCT02682368 -NCT02679586 -NCT02682485 -NCT02679755 -NCT02682563 -NCT02679794 -NCT02682589 -NCT02679937 -NCT02682641 -NCT02679963 -NCT02682693 -NCT02680041 -NCT02682732 -NCT02680093 -NCT02682745 -NCT02680184 -NCT02688036 -NCT02682862 -NCT02685527 -NCT02682953 -NCT02685397 -NCT02683083 -NCT02685553 -NCT02683109 -NCT02685566 -NCT02683148 -NCT02685592 -NCT02683174 -NCT02685605 -NCT02683200 -NCT02685657 -NCT02683239 -NCT02685670 -NCT02683304 -NCT02685709 -NCT02683343 -NCT02685774 -NCT02683382 -NCT02685826 -NCT02683395 -NCT02685865 -NCT02683486 -NCT02685904 -NCT02683538 -NCT02685995 -NCT02683590 -NCT02686008 -NCT02683655 -NCT02686164 -NCT02683694 -NCT02686203 -NCT02683772 -NCT02686294 -NCT02683785 -NCT02686346 -NCT02683824 -NCT02686372 -NCT02683941 -NCT02686385 -NCT02683954 -NCT02686463 -NCT02684006 -NCT02686528 -NCT02684032 -NCT02686567 -NCT02684058 -NCT02686593 -NCT02684071 -NCT02686645 -NCT02684097 -NCT02686775 -NCT02684136 -NCT02686788 -NCT02684162 -NCT02686840 -NCT02684227 -NCT02686879 -NCT02684253 -NCT02686918 -NCT02684266 -NCT02686931 -NCT02684292 -NCT02686944 -NCT02684318 -NCT02686996 -NCT02684344 -NCT02687009 -NCT02684409 -NCT02687113 -NCT02684422 -NCT02687139 -NCT02684448 -NCT02687165 -NCT02684461 -NCT02687217 -NCT02684591 -NCT02687230 -NCT02684708 -NCT02687308 -NCT02684799 -NCT02687425 -NCT02684812 -NCT02687464 -NCT02684851 -NCT02687490 -NCT02685046 -NCT02687620 -NCT02685059 -NCT02687633 -NCT02685111 -NCT02687685 -NCT02685137 -NCT02687711 -NCT02685150 -NCT02687815 -NCT02685202 -NCT02687841 -NCT02685228 -NCT02687880 -NCT02685267 -NCT02687919 -NCT02685280 -NCT02687958 -NCT02685306 -NCT02687997 -NCT02685319 -NCT02688023 -NCT02685332 -NCT02693665 -NCT02688088 -NCT02690350 -NCT02688101 -NCT02690337 -NCT02688114 -NCT02690376 -NCT02688140 -NCT02690428 -NCT02688153 -NCT02690480 -NCT02688205 -NCT02690545 -NCT02688218 -NCT02690558 -NCT02688244 -NCT02690610 -NCT02688348 -NCT02690636 -NCT02688491 -NCT02690766 -NCT02688543 -NCT02690922 -NCT02688569 -NCT02690948 -NCT02688608 -NCT02690987 -NCT02688621 -NCT02691078 -NCT02688673 -NCT02691143 -NCT02688686 -NCT02691169 -NCT02688699 -NCT02691299 -NCT02688712 -NCT02691312 -NCT02688725 -NCT02691325 -NCT02688803 -NCT02691338 -NCT02688816 -NCT02691494 -NCT02688881 -NCT02691533 -NCT02688907 -NCT02691689 -NCT02688920 -NCT02691767 -NCT02688972 -NCT02691780 -NCT02688998 -NCT02691793 -NCT02689050 -NCT02691845 -NCT02689141 -NCT02691871 -NCT02689167 -NCT02691923 -NCT02689219 -NCT02691936 -NCT02689284 -NCT02691975 -NCT02689336 -NCT02692105 -NCT02689349 -NCT02692183 -NCT02689375 -NCT02692248 -NCT02689401 -NCT02692365 -NCT02689427 -NCT02692508 -NCT02689440 -NCT02692521 -NCT02689453 -NCT02692534 -NCT02689466 -NCT02692573 -NCT02689505 -NCT02692638 -NCT02689622 -NCT02692742 -NCT02689726 -NCT02692755 -NCT02689752 -NCT02692872 -NCT02689765 -NCT02692976 -NCT02689817 -NCT02693067 -NCT02689830 -NCT02693080 -NCT02689869 -NCT02693119 -NCT02689921 -NCT02693132 -NCT02689960 -NCT02693236 -NCT02689986 -NCT02693379 -NCT02689999 -NCT02693405 -NCT02690038 -NCT02693457 -NCT02690233 -NCT02693509 -NCT02690246 -NCT02693535 -NCT02690259 -NCT02693548 -NCT02690285 -NCT02700360 -NCT02693704 -NCT02697240 -NCT02693717 -NCT02697214 -NCT02693847 -NCT02697331 -NCT02693860 -NCT02697344 -NCT02693977 -NCT02697370 -NCT02693990 -NCT02697383 -NCT02694029 -NCT02697396 -NCT02694081 -NCT02697435 -NCT02694172 -NCT02697539 -NCT02694198 -NCT02697552 -NCT02694224 -NCT02697591 -NCT02694302 -NCT02697630 -NCT02694315 -NCT02697734 -NCT02694393 -NCT02697799 -NCT02694419 -NCT02697838 -NCT02694445 -NCT02698046 -NCT02694536 -NCT02698111 -NCT02694562 -NCT02698124 -NCT02694640 -NCT02698150 -NCT02694718 -NCT02698176 -NCT02694770 -NCT02698189 -NCT02694796 -NCT02698202 -NCT02694809 -NCT02698215 -NCT02694822 -NCT02698254 -NCT02694926 -NCT02698280 -NCT02695173 -NCT02698293 -NCT02695290 -NCT02698332 -NCT02695459 -NCT02698423 -NCT02695550 -NCT02698462 -NCT02695602 -NCT02698761 -NCT02695628 -NCT02698891 -NCT02695719 -NCT02698995 -NCT02695732 -NCT02699047 -NCT02695771 -NCT02699073 -NCT02695940 -NCT02699125 -NCT02696044 -NCT02699138 -NCT02696083 -NCT02699320 -NCT02696122 -NCT02699385 -NCT02696239 -NCT02699424 -NCT02696304 -NCT02699463 -NCT02696330 -NCT02699515 -NCT02696356 -NCT02699606 -NCT02696408 -NCT02699697 -NCT02696486 -NCT02699723 -NCT02696642 -NCT02699749 -NCT02696668 -NCT02699853 -NCT02696707 -NCT02699918 -NCT02696733 -NCT02699983 -NCT02696759 -NCT02699996 -NCT02696837 -NCT02700022 -NCT02696993 -NCT02700074 -NCT02697032 -NCT02700087 -NCT02697058 -NCT02700139 -NCT02697162 -NCT02700230 -NCT02697188 -NCT02700308 -NCT02697201 -NCT02705157 -NCT02700386 -NCT02702947 -NCT02700451 -NCT02702921 -NCT02700464 -NCT02702960 -NCT02700477 -NCT02702986 -NCT02700503 -NCT02703064 -NCT02700529 -NCT02703129 -NCT02700555 -NCT02703207 -NCT02700568 -NCT02703246 -NCT02700724 -NCT02703272 -NCT02700763 -NCT02703285 -NCT02700776 -NCT02703298 -NCT02700789 -NCT02703311 -NCT02700841 -NCT02703402 -NCT02700906 -NCT02703467 -NCT02700971 -NCT02703493 -NCT02701088 -NCT02703545 -NCT02701101 -NCT02703571 -NCT02701153 -NCT02703623 -NCT02701205 -NCT02703701 -NCT02701231 -NCT02703714 -NCT02701244 -NCT02703779 -NCT02701283 -NCT02703818 -NCT02701309 -NCT02703844 -NCT02701348 -NCT02703922 -NCT02701400 -NCT02703935 -NCT02701439 -NCT02703961 -NCT02701491 -NCT02704078 -NCT02701504 -NCT02704091 -NCT02701517 -NCT02704104 -NCT02701595 -NCT02704130 -NCT02701608 -NCT02704143 -NCT02701673 -NCT02704156 -NCT02701699 -NCT02704169 -NCT02701712 -NCT02704247 -NCT02701751 -NCT02704299 -NCT02701803 -NCT02704312 -NCT02701907 -NCT02704338 -NCT02701920 -NCT02704377 -NCT02701946 -NCT02704520 -NCT02701985 -NCT02704637 -NCT02702050 -NCT02704650 -NCT02702141 -NCT02704689 -NCT02702232 -NCT02704741 -NCT02702323 -NCT02704754 -NCT02702349 -NCT02704767 -NCT02702388 -NCT02704793 -NCT02702401 -NCT02704819 -NCT02702414 -NCT02704832 -NCT02702453 -NCT02704845 -NCT02702492 -NCT02704858 -NCT02702596 -NCT02704988 -NCT02702648 -NCT02705014 -NCT02702752 -NCT02705105 -NCT02702765 -NCT02705118 -NCT02702778 -NCT02705144 -NCT02702882 -NCT02711033 -NCT02705183 -NCT02708056 -NCT02705196 -NCT02707952 -NCT02705300 -NCT02708095 -NCT02705339 -NCT02708108 -NCT02705352 -NCT02708186 -NCT02705365 -NCT02708355 -NCT02705443 -NCT02708368 -NCT02705469 -NCT02708511 -NCT02705482 -NCT02708641 -NCT02705573 -NCT02708680 -NCT02705599 -NCT02708953 -NCT02705612 -NCT02708966 -NCT02705651 -NCT02709070 -NCT02705664 -NCT02709083 -NCT02705703 -NCT02709226 -NCT02705768 -NCT02709408 -NCT02705781 -NCT02709460 -NCT02705820 -NCT02709512 -NCT02705859 -NCT02709616 -NCT02705924 -NCT02709681 -NCT02705937 -NCT02709720 -NCT02705963 -NCT02709811 -NCT02706132 -NCT02709850 -NCT02706158 -NCT02709863 -NCT02706171 -NCT02709889 -NCT02706184 -NCT02709967 -NCT02706197 -NCT02709993 -NCT02706210 -NCT02710045 -NCT02706262 -NCT02710110 -NCT02706301 -NCT02710149 -NCT02706353 -NCT02710162 -NCT02706392 -NCT02710175 -NCT02706405 -NCT02710214 -NCT02706431 -NCT02710240 -NCT02706535 -NCT02710253 -NCT02706561 -NCT02710396 -NCT02706626 -NCT02710422 -NCT02706691 -NCT02710461 -NCT02706782 -NCT02710474 -NCT02706899 -NCT02710487 -NCT02706938 -NCT02710526 -NCT02706964 -NCT02710565 -NCT02707042 -NCT02710591 -NCT02707159 -NCT02710643 -NCT02707198 -NCT02710669 -NCT02707315 -NCT02710682 -NCT02707328 -NCT02710721 -NCT02707393 -NCT02710734 -NCT02707510 -NCT02710786 -NCT02707549 -NCT02710799 -NCT02707588 -NCT02710838 -NCT02707601 -NCT02710942 -NCT02707653 -NCT02710968 -NCT02707666 -NCT02710981 -NCT02707796 -NCT02711007 -NCT02707835 -NCT02716623 -NCT02711137 -NCT02714127 -NCT02711345 -NCT02714023 -NCT02711397 -NCT02714218 -NCT02711449 -NCT02714374 -NCT02711514 -NCT02714439 -NCT02711540 -NCT02714530 -NCT02711553 -NCT02714582 -NCT02711683 -NCT02714608 -NCT02711735 -NCT02714621 -NCT02711800 -NCT02714920 -NCT02711826 -NCT02714946 -NCT02711852 -NCT02714972 -NCT02711956 -NCT02714985 -NCT02711969 -NCT02715011 -NCT02711995 -NCT02715024 -NCT02712060 -NCT02715102 -NCT02712112 -NCT02715154 -NCT02712138 -NCT02715193 -NCT02712216 -NCT02715284 -NCT02712229 -NCT02715297 -NCT02712242 -NCT02715323 -NCT02712281 -NCT02715362 -NCT02712320 -NCT02715492 -NCT02712346 -NCT02715531 -NCT02712437 -NCT02715583 -NCT02712476 -NCT02715596 -NCT02712515 -NCT02715609 -NCT02712671 -NCT02715674 -NCT02712723 -NCT02715713 -NCT02712762 -NCT02715765 -NCT02712814 -NCT02715791 -NCT02712827 -NCT02715804 -NCT02712840 -NCT02715856 -NCT02712892 -NCT02715882 -NCT02712905 -NCT02715999 -NCT02712957 -NCT02716012 -NCT02712983 -NCT02716025 -NCT02713035 -NCT02716038 -NCT02713087 -NCT02716051 -NCT02713178 -NCT02716077 -NCT02713256 -NCT02716103 -NCT02713269 -NCT02716116 -NCT02713373 -NCT02716168 -NCT02713386 -NCT02716194 -NCT02713412 -NCT02716207 -NCT02713464 -NCT02716233 -NCT02713529 -NCT02716272 -NCT02713555 -NCT02716285 -NCT02713737 -NCT02716311 -NCT02713763 -NCT02716376 -NCT02713828 -NCT02716415 -NCT02713867 -NCT02716428 -NCT02713932 -NCT02716467 -NCT02713945 -NCT02716493 -NCT02713984 -NCT02716571 -NCT02714010 -NCT02721355 -NCT02716662 -NCT02718976 -NCT02716688 -NCT02718963 -NCT02716714 -NCT02719015 -NCT02716766 -NCT02719028 -NCT02716779 -NCT02719093 -NCT02716792 -NCT02719119 -NCT02716805 -NCT02719145 -NCT02716896 -NCT02719158 -NCT02716948 -NCT02719197 -NCT02716961 -NCT02719249 -NCT02716974 -NCT02719340 -NCT02717000 -NCT02719418 -NCT02717091 -NCT02719509 -NCT02717156 -NCT02719574 -NCT02717455 -NCT02719600 -NCT02717507 -NCT02719613 -NCT02717572 -NCT02719691 -NCT02717611 -NCT02719717 -NCT02717624 -NCT02719769 -NCT02717689 -NCT02719782 -NCT02717741 -NCT02719795 -NCT02717793 -NCT02719821 -NCT02717832 -NCT02719860 -NCT02717884 -NCT02719912 -NCT02717923 -NCT02719977 -NCT02717936 -NCT02720055 -NCT02717962 -NCT02720068 -NCT02717975 -NCT02720081 -NCT02718001 -NCT02720185 -NCT02718027 -NCT02720211 -NCT02718066 -NCT02720302 -NCT02718092 -NCT02720315 -NCT02718131 -NCT02720341 -NCT02718144 -NCT02720367 -NCT02718300 -NCT02720458 -NCT02718365 -NCT02720484 -NCT02718378 -NCT02720510 -NCT02718391 -NCT02720601 -NCT02718404 -NCT02720614 -NCT02718417 -NCT02720640 -NCT02718430 -NCT02720666 -NCT02718443 -NCT02720679 -NCT02718482 -NCT02720796 -NCT02718495 -NCT02720822 -NCT02718534 -NCT02720861 -NCT02718560 -NCT02720926 -NCT02718586 -NCT02720952 -NCT02718677 -NCT02721043 -NCT02718703 -NCT02721056 -NCT02718742 -NCT02721069 -NCT02718755 -NCT02721147 -NCT02718820 -NCT02721173 -NCT02718833 -NCT02721186 -NCT02718846 -NCT02721251 -NCT02718859 -NCT02721277 -NCT02718911 -NCT02726334 -NCT02721394 -NCT02723890 -NCT02721407 -NCT02723877 -NCT02721433 -NCT02723942 -NCT02721459 -NCT02723955 -NCT02721550 -NCT02723994 -NCT02721563 -NCT02724020 -NCT02721576 -NCT02724059 -NCT02721589 -NCT02724163 -NCT02721641 -NCT02724176 -NCT02721732 -NCT02724202 -NCT02721745 -NCT02724228 -NCT02721771 -NCT02724254 -NCT02721784 -NCT02724267 -NCT02721862 -NCT02724306 -NCT02721875 -NCT02724332 -NCT02721979 -NCT02724358 -NCT02722135 -NCT02724397 -NCT02722278 -NCT02724410 -NCT02722330 -NCT02724436 -NCT02722343 -NCT02724462 -NCT02722369 -NCT02724475 -NCT02722512 -NCT02724540 -NCT02722525 -NCT02724579 -NCT02722538 -NCT02724618 -NCT02722551 -NCT02724670 -NCT02722616 -NCT02724696 -NCT02722668 -NCT02724722 -NCT02722681 -NCT02724761 -NCT02722720 -NCT02724774 -NCT02722733 -NCT02724865 -NCT02722772 -NCT02724878 -NCT02722785 -NCT02724904 -NCT02722798 -NCT02725047 -NCT02722811 -NCT02725125 -NCT02722941 -NCT02725268 -NCT02722954 -NCT02725411 -NCT02722980 -NCT02725424 -NCT02722993 -NCT02725463 -NCT02723006 -NCT02725489 -NCT02723032 -NCT02725502 -NCT02723071 -NCT02725541 -NCT02723240 -NCT02725632 -NCT02723253 -NCT02725658 -NCT02723305 -NCT02725671 -NCT02723331 -NCT02725801 -NCT02723435 -NCT02725879 -NCT02723474 -NCT02725918 -NCT02723500 -NCT02725996 -NCT02723539 -NCT02726009 -NCT02723552 -NCT02726048 -NCT02723578 -NCT02726087 -NCT02723617 -NCT02726113 -NCT02723656 -NCT02726139 -NCT02723721 -NCT02726152 -NCT02723838 -NCT02726295 -NCT02723864 -NCT02731352 -NCT02726399 -NCT02729298 -NCT02726451 -NCT02729220 -NCT02726477 -NCT02729324 -NCT02726503 -NCT02729350 -NCT02726568 -NCT02729454 -NCT02726581 -NCT02729493 -NCT02726763 -NCT02729506 -NCT02726854 -NCT02729545 -NCT02726919 -NCT02729558 -NCT02726984 -NCT02729636 -NCT02726997 -NCT02729649 -NCT02727010 -NCT02729701 -NCT02727114 -NCT02729727 -NCT02727153 -NCT02729740 -NCT02727179 -NCT02729753 -NCT02727231 -NCT02729883 -NCT02727244 -NCT02729896 -NCT02727309 -NCT02729909 -NCT02727361 -NCT02729948 -NCT02727387 -NCT02729961 -NCT02727465 -NCT02730052 -NCT02727530 -NCT02730065 -NCT02727569 -NCT02730091 -NCT02727582 -NCT02730130 -NCT02727647 -NCT02730169 -NCT02727686 -NCT02730195 -NCT02727777 -NCT02730247 -NCT02727803 -NCT02730299 -NCT02727868 -NCT02730312 -NCT02727959 -NCT02730338 -NCT02728050 -NCT02730351 -NCT02728076 -NCT02730390 -NCT02728102 -NCT02730416 -NCT02728167 -NCT02730429 -NCT02728193 -NCT02730442 -NCT02728219 -NCT02730481 -NCT02728258 -NCT02730533 -NCT02728349 -NCT02730546 -NCT02728375 -NCT02730585 -NCT02728388 -NCT02730598 -NCT02728427 -NCT02730728 -NCT02728440 -NCT02730767 -NCT02728492 -NCT02730793 -NCT02728531 -NCT02730858 -NCT02728544 -NCT02730884 -NCT02728596 -NCT02730923 -NCT02728622 -NCT02730975 -NCT02728700 -NCT02730988 -NCT02728765 -NCT02731001 -NCT02728830 -NCT02731014 -NCT02728882 -NCT02731118 -NCT02728921 -NCT02731170 -NCT02728999 -NCT02731287 -NCT02729012 -NCT02731300 -NCT02729051 -NCT02731313 -NCT02729194 -NCT02736617 -NCT02731417 -NCT02734199 -NCT02731469 -NCT02734186 -NCT02731586 -NCT02734251 -NCT02731729 -NCT02734290 -NCT02731742 -NCT02734329 -NCT02731872 -NCT02734342 -NCT02731924 -NCT02734368 -NCT02731989 -NCT02734394 -NCT02732015 -NCT02734433 -NCT02732119 -NCT02734446 -NCT02732145 -NCT02734459 -NCT02732171 -NCT02734524 -NCT02732184 -NCT02734537 -NCT02732275 -NCT02734615 -NCT02732314 -NCT02734680 -NCT02732327 -NCT02734771 -NCT02732392 -NCT02735018 -NCT02732431 -NCT02735057 -NCT02732483 -NCT02735083 -NCT02732587 -NCT02735109 -NCT02732600 -NCT02735239 -NCT02732613 -NCT02735252 -NCT02732678 -NCT02735291 -NCT02732691 -NCT02735317 -NCT02732743 -NCT02735343 -NCT02732769 -NCT02735356 -NCT02732795 -NCT02735421 -NCT02732912 -NCT02735447 -NCT02732925 -NCT02735668 -NCT02732938 -NCT02735681 -NCT02733042 -NCT02735694 -NCT02733068 -NCT02735707 -NCT02733107 -NCT02735785 -NCT02733133 -NCT02735798 -NCT02733159 -NCT02735837 -NCT02733172 -NCT02735850 -NCT02733250 -NCT02735863 -NCT02733276 -NCT02735876 -NCT02733328 -NCT02735928 -NCT02733367 -NCT02735980 -NCT02733380 -NCT02736123 -NCT02733458 -NCT02736240 -NCT02733510 -NCT02736266 -NCT02733549 -NCT02736305 -NCT02733666 -NCT02736370 -NCT02733679 -NCT02736435 -NCT02733744 -NCT02736448 -NCT02733809 -NCT02736461 -NCT02733861 -NCT02736500 -NCT02733887 -NCT02736513 -NCT02733965 -NCT02736552 -NCT02734004 -NCT02736565 -NCT02734082 -NCT02736578 -NCT02734121 -NCT02736591 -NCT02734160 -NCT02736604 -NCT02734173 -NCT02742558 -NCT02736721 -NCT02739672 -NCT02736734 -NCT02739659 -NCT02736916 -NCT02739698 -NCT02736942 -NCT02739737 -NCT02736968 -NCT02739958 -NCT02736981 -NCT02740088 -NCT02737046 -NCT02740114 -NCT02737072 -NCT02740127 -NCT02737085 -NCT02740153 -NCT02737189 -NCT02740166 -NCT02737202 -NCT02740270 -NCT02737228 -NCT02740322 -NCT02737267 -NCT02740400 -NCT02737332 -NCT02740413 -NCT02737436 -NCT02740426 -NCT02737449 -NCT02740543 -NCT02737462 -NCT02740673 -NCT02737475 -NCT02740686 -NCT02737501 -NCT02740712 -NCT02737527 -NCT02740738 -NCT02737553 -NCT02740777 -NCT02737592 -NCT02740790 -NCT02737631 -NCT02740920 -NCT02737709 -NCT02740933 -NCT02737735 -NCT02740959 -NCT02737761 -NCT02740972 -NCT02737774 -NCT02740985 -NCT02737787 -NCT02741024 -NCT02737839 -NCT02741245 -NCT02737852 -NCT02741388 -NCT02737930 -NCT02741401 -NCT02738138 -NCT02741440 -NCT02738177 -NCT02741453 -NCT02738268 -NCT02741492 -NCT02738294 -NCT02741531 -NCT02738346 -NCT02741544 -NCT02738398 -NCT02741570 -NCT02738450 -NCT02741609 -NCT02738489 -NCT02741674 -NCT02738606 -NCT02741687 -NCT02738671 -NCT02741778 -NCT02738697 -NCT02741856 -NCT02738723 -NCT02742051 -NCT02738827 -NCT02742090 -NCT02738853 -NCT02742116 -NCT02738866 -NCT02742129 -NCT02738970 -NCT02742155 -NCT02738983 -NCT02742168 -NCT02739204 -NCT02742272 -NCT02739243 -NCT02742298 -NCT02739425 -NCT02742311 -NCT02739529 -NCT02742376 -NCT02739555 -NCT02742402 -NCT02739594 -NCT02742415 -NCT02739620 -NCT02742428 -NCT02739633 -NCT02748135 -NCT02742597 -NCT02745392 -NCT02742675 -NCT02745301 -NCT02742727 -NCT02745483 -NCT02742844 -NCT02745496 -NCT02742883 -NCT02745509 -NCT02742935 -NCT02745561 -NCT02743078 -NCT02745587 -NCT02743221 -NCT02745600 -NCT02743234 -NCT02745639 -NCT02743338 -NCT02745717 -NCT02743351 -NCT02745743 -NCT02743364 -NCT02745756 -NCT02743429 -NCT02745769 -NCT02743442 -NCT02745808 -NCT02743455 -NCT02745847 -NCT02743494 -NCT02746029 -NCT02743546 -NCT02746081 -NCT02743598 -NCT02746185 -NCT02743611 -NCT02746224 -NCT02743637 -NCT02746328 -NCT02743650 -NCT02746367 -NCT02743741 -NCT02746432 -NCT02743819 -NCT02746536 -NCT02743832 -NCT02746562 -NCT02743845 -NCT02746588 -NCT02743923 -NCT02746614 -NCT02743949 -NCT02746666 -NCT02743975 -NCT02746770 -NCT02744053 -NCT02746783 -NCT02744079 -NCT02746796 -NCT02744092 -NCT02746809 -NCT02744131 -NCT02746887 -NCT02744157 -NCT02746952 -NCT02744170 -NCT02747004 -NCT02744274 -NCT02747043 -NCT02744287 -NCT02747056 -NCT02744352 -NCT02747264 -NCT02744469 -NCT02747290 -NCT02744495 -NCT02747303 -NCT02744508 -NCT02747342 -NCT02744521 -NCT02747394 -NCT02744534 -NCT02747485 -NCT02744612 -NCT02747511 -NCT02744651 -NCT02747537 -NCT02744664 -NCT02747550 -NCT02744703 -NCT02747563 -NCT02744729 -NCT02747654 -NCT02744742 -NCT02747732 -NCT02744768 -NCT02747797 -NCT02744898 -NCT02747810 -NCT02745002 -NCT02747849 -NCT02745054 -NCT02747888 -NCT02745093 -NCT02747953 -NCT02745171 -NCT02748005 -NCT02745197 -NCT02748018 -NCT02745288 -NCT02753270 -NCT02748161 -NCT02750514 -NCT02748174 -NCT02750423 -NCT02748213 -NCT02750618 -NCT02748291 -NCT02750644 -NCT02748304 -NCT02750670 -NCT02748343 -NCT02750761 -NCT02748356 -NCT02750826 -NCT02748395 -NCT02750839 -NCT02748434 -NCT02750891 -NCT02748525 -NCT02750995 -NCT02748551 -NCT02751008 -NCT02748564 -NCT02751151 -NCT02748616 -NCT02751177 -NCT02748681 -NCT02751190 -NCT02748707 -NCT02751255 -NCT02748746 -NCT02751307 -NCT02748772 -NCT02751385 -NCT02748798 -NCT02751502 -NCT02748811 -NCT02751528 -NCT02748837 -NCT02751580 -NCT02748850 -NCT02751606 -NCT02748889 -NCT02751710 -NCT02748902 -NCT02751736 -NCT02748941 -NCT02751892 -NCT02749019 -NCT02751918 -NCT02749071 -NCT02751944 -NCT02749110 -NCT02751996 -NCT02749123 -NCT02752009 -NCT02749136 -NCT02752035 -NCT02749201 -NCT02752061 -NCT02749214 -NCT02752074 -NCT02749227 -NCT02752113 -NCT02749292 -NCT02752126 -NCT02749331 -NCT02752204 -NCT02749344 -NCT02752243 -NCT02749474 -NCT02752256 -NCT02749513 -NCT02752360 -NCT02749565 -NCT02752373 -NCT02749682 -NCT02752399 -NCT02749708 -NCT02752516 -NCT02749786 -NCT02752542 -NCT02749825 -NCT02752620 -NCT02749877 -NCT02752659 -NCT02749903 -NCT02752685 -NCT02749929 -NCT02752698 -NCT02750046 -NCT02752711 -NCT02750085 -NCT02752815 -NCT02750124 -NCT02752841 -NCT02750202 -NCT02752906 -NCT02750215 -NCT02752932 -NCT02750228 -NCT02752971 -NCT02750241 -NCT02753023 -NCT02750254 -NCT02753062 -NCT02750319 -NCT02753127 -NCT02750358 -NCT02753140 -NCT02750371 -NCT02758366 -NCT02753283 -NCT02756130 -NCT02753309 -NCT02756104 -NCT02753361 -NCT02756247 -NCT02753465 -NCT02756299 -NCT02753543 -NCT02756312 -NCT02753595 -NCT02756325 -NCT02753621 -NCT02756364 -NCT02753634 -NCT02756468 -NCT02753647 -NCT02756572 -NCT02753686 -NCT02756611 -NCT02753764 -NCT02756650 -NCT02753777 -NCT02756663 -NCT02753790 -NCT02756728 -NCT02753881 -NCT02756754 -NCT02753920 -NCT02756780 -NCT02753972 -NCT02756793 -NCT02754011 -NCT02756845 -NCT02754128 -NCT02756897 -NCT02754141 -NCT02756910 -NCT02754180 -NCT02756962 -NCT02754232 -NCT02757040 -NCT02754245 -NCT02757066 -NCT02754258 -NCT02757079 -NCT02754297 -NCT02757092 -NCT02754362 -NCT02757105 -NCT02754427 -NCT02757170 -NCT02754453 -NCT02757222 -NCT02754544 -NCT02757248 -NCT02754661 -NCT02757326 -NCT02754726 -NCT02757365 -NCT02754752 -NCT02757391 -NCT02754765 -NCT02757495 -NCT02754856 -NCT02757534 -NCT02754882 -NCT02757547 -NCT02754908 -NCT02757573 -NCT02754973 -NCT02757586 -NCT02754999 -NCT02757612 -NCT02755142 -NCT02757651 -NCT02755168 -NCT02757690 -NCT02755272 -NCT02757768 -NCT02755285 -NCT02757859 -NCT02755311 -NCT02757885 -NCT02755363 -NCT02757963 -NCT02755454 -NCT02757989 -NCT02755480 -NCT02758015 -NCT02755519 -NCT02758054 -NCT02755597 -NCT02758106 -NCT02755675 -NCT02758132 -NCT02755727 -NCT02758158 -NCT02755753 -NCT02758197 -NCT02755766 -NCT02758223 -NCT02755844 -NCT02758236 -NCT02755883 -NCT02758249 -NCT02755896 -NCT02758275 -NCT02755961 -NCT02758327 -NCT02755987 -NCT02764242 -NCT02758431 -NCT02760940 -NCT02758483 -NCT02760914 -NCT02758548 -NCT02760953 -NCT02758587 -NCT02761057 -NCT02758639 -NCT02761070 -NCT02758665 -NCT02761083 -NCT02758704 -NCT02761096 -NCT02758717 -NCT02761174 -NCT02758860 -NCT02761239 -NCT02758912 -NCT02761252 -NCT02758925 -NCT02761265 -NCT02758951 -NCT02761291 -NCT02758977 -NCT02761460 -NCT02759016 -NCT02761473 -NCT02759094 -NCT02761499 -NCT02759133 -NCT02761694 -NCT02759146 -NCT02761707 -NCT02759250 -NCT02761824 -NCT02759302 -NCT02761889 -NCT02759380 -NCT02761902 -NCT02759393 -NCT02761915 -NCT02759536 -NCT02761928 -NCT02759549 -NCT02761980 -NCT02759562 -NCT02762006 -NCT02759575 -NCT02762084 -NCT02759588 -NCT02762188 -NCT02759601 -NCT02762214 -NCT02759614 -NCT02762266 -NCT02759640 -NCT02762318 -NCT02759653 -NCT02762474 -NCT02759666 -NCT02762487 -NCT02759679 -NCT02762513 -NCT02759718 -NCT02762682 -NCT02759744 -NCT02762760 -NCT02759757 -NCT02762981 -NCT02759783 -NCT02763111 -NCT02759796 -NCT02763176 -NCT02759835 -NCT02763215 -NCT02759900 -NCT02763228 -NCT02760030 -NCT02763254 -NCT02760108 -NCT02763319 -NCT02760160 -NCT02763384 -NCT02760199 -NCT02763423 -NCT02760225 -NCT02763475 -NCT02760264 -NCT02763566 -NCT02760420 -NCT02763579 -NCT02760485 -NCT02763722 -NCT02760498 -NCT02763748 -NCT02760524 -NCT02763761 -NCT02760537 -NCT02763826 -NCT02760602 -NCT02763865 -NCT02760667 -NCT02764086 -NCT02760745 -NCT02764151 -NCT02760797 -NCT02764177 -NCT02760849 -NCT02764216 -NCT02760862 -NCT02770469 -NCT02764268 -NCT02767362 -NCT02764281 -NCT02767297 -NCT02764333 -NCT02767375 -NCT02764372 -NCT02767453 -NCT02764541 -NCT02767557 -NCT02764593 -NCT02767609 -NCT02764645 -NCT02767635 -NCT02764723 -NCT02767661 -NCT02764801 -NCT02767674 -NCT02764866 -NCT02767726 -NCT02764944 -NCT02767752 -NCT02765035 -NCT02767804 -NCT02765048 -NCT02767921 -NCT02765113 -NCT02767934 -NCT02765165 -NCT02767973 -NCT02765217 -NCT02768181 -NCT02765243 -NCT02768207 -NCT02765256 -NCT02768233 -NCT02765269 -NCT02768259 -NCT02765308 -NCT02768337 -NCT02765451 -NCT02768363 -NCT02765490 -NCT02768389 -NCT02765503 -NCT02768402 -NCT02765581 -NCT02768415 -NCT02765620 -NCT02768428 -NCT02765750 -NCT02768454 -NCT02765776 -NCT02768545 -NCT02765789 -NCT02768558 -NCT02765802 -NCT02768701 -NCT02765854 -NCT02768714 -NCT02765919 -NCT02768753 -NCT02765984 -NCT02768766 -NCT02765997 -NCT02768792 -NCT02766114 -NCT02768870 -NCT02766270 -NCT02768896 -NCT02766335 -NCT02769000 -NCT02766348 -NCT02769039 -NCT02766465 -NCT02769286 -NCT02766478 -NCT02769442 -NCT02766491 -NCT02769494 -NCT02766517 -NCT02769520 -NCT02766530 -NCT02769650 -NCT02766543 -NCT02769832 -NCT02766582 -NCT02769858 -NCT02766621 -NCT02769884 -NCT02766686 -NCT02769949 -NCT02766699 -NCT02769962 -NCT02766764 -NCT02769988 -NCT02766842 -NCT02770014 -NCT02766868 -NCT02770040 -NCT02766933 -NCT02770157 -NCT02767063 -NCT02770326 -NCT02767115 -NCT02770378 -NCT02767128 -NCT02770391 -NCT02767193 -NCT02770443 -NCT02767271 -NCT02775136 -NCT02770534 -NCT02773004 -NCT02770586 -NCT02772913 -NCT02770703 -NCT02773030 -NCT02770781 -NCT02773095 -NCT02770820 -NCT02773238 -NCT02770833 -NCT02773251 -NCT02770846 -NCT02773264 -NCT02770859 -NCT02773290 -NCT02770911 -NCT02773316 -NCT02771028 -NCT02773329 -NCT02771119 -NCT02773407 -NCT02771145 -NCT02773446 -NCT02771184 -NCT02773459 -NCT02771197 -NCT02773485 -NCT02771236 -NCT02773498 -NCT02771262 -NCT02773524 -NCT02771275 -NCT02773537 -NCT02771301 -NCT02773550 -NCT02771314 -NCT02773563 -NCT02771340 -NCT02773589 -NCT02771353 -NCT02773654 -NCT02771405 -NCT02773719 -NCT02771418 -NCT02773732 -NCT02771444 -NCT02773784 -NCT02771470 -NCT02773849 -NCT02771483 -NCT02773888 -NCT02771496 -NCT02773940 -NCT02771561 -NCT02773966 -NCT02771587 -NCT02773992 -NCT02771600 -NCT02774109 -NCT02771626 -NCT02774148 -NCT02771743 -NCT02774161 -NCT02771756 -NCT02774187 -NCT02771769 -NCT02774200 -NCT02771860 -NCT02774239 -NCT02771873 -NCT02774278 -NCT02771938 -NCT02774291 -NCT02772003 -NCT02774304 -NCT02772029 -NCT02774369 -NCT02772042 -NCT02774434 -NCT02772094 -NCT02774460 -NCT02772107 -NCT02774512 -NCT02772198 -NCT02774538 -NCT02772380 -NCT02774551 -NCT02772432 -NCT02774590 -NCT02772510 -NCT02774668 -NCT02772549 -NCT02774681 -NCT02772562 -NCT02774707 -NCT02772588 -NCT02774733 -NCT02772627 -NCT02774746 -NCT02772692 -NCT02774759 -NCT02772731 -NCT02774785 -NCT02772757 -NCT02774928 -NCT02772822 -NCT02774993 -NCT02772848 -NCT02775006 -NCT02772900 -NCT02780401 -NCT02775227 -NCT02777684 -NCT02775292 -NCT02777606 -NCT02775318 -NCT02777710 -NCT02775370 -NCT02777736 -NCT02775396 -NCT02777762 -NCT02775435 -NCT02777788 -NCT02775461 -NCT02777801 -NCT02775578 -NCT02777814 -NCT02775630 -NCT02777827 -NCT02775695 -NCT02777866 -NCT02775786 -NCT02777996 -NCT02775799 -NCT02778087 -NCT02775812 -NCT02778126 -NCT02775851 -NCT02778204 -NCT02775903 -NCT02778217 -NCT02775916 -NCT02778243 -NCT02775968 -NCT02778295 -NCT02776072 -NCT02778308 -NCT02776124 -NCT02778386 -NCT02776137 -NCT02778399 -NCT02776150 -NCT02778425 -NCT02776163 -NCT02778685 -NCT02776176 -NCT02778763 -NCT02776202 -NCT02778893 -NCT02776215 -NCT02778906 -NCT02776228 -NCT02779023 -NCT02776345 -NCT02779062 -NCT02776397 -NCT02779101 -NCT02776436 -NCT02779153 -NCT02776462 -NCT02779166 -NCT02776527 -NCT02779257 -NCT02776540 -NCT02779283 -NCT02776605 -NCT02779348 -NCT02776683 -NCT02779426 -NCT02776709 -NCT02779465 -NCT02776748 -NCT02779478 -NCT02776787 -NCT02779543 -NCT02776813 -NCT02779608 -NCT02776826 -NCT02779621 -NCT02776878 -NCT02779699 -NCT02776891 -NCT02779725 -NCT02776917 -NCT02779751 -NCT02776930 -NCT02779777 -NCT02776943 -NCT02779816 -NCT02776969 -NCT02779855 -NCT02776995 -NCT02779959 -NCT02777060 -NCT02780011 -NCT02777073 -NCT02780024 -NCT02777099 -NCT02780128 -NCT02777164 -NCT02780180 -NCT02777203 -NCT02780271 -NCT02777242 -NCT02780284 -NCT02777320 -NCT02780310 -NCT02777385 -NCT02780349 -NCT02777398 -NCT02780388 -NCT02777437 -NCT02785146 -NCT02780479 -NCT02782715 -NCT02780492 -NCT02782689 -NCT02780531 -NCT02782754 -NCT02780570 -NCT02782832 -NCT02780583 -NCT02782845 -NCT02780596 -NCT02782858 -NCT02780609 -NCT02782871 -NCT02780648 -NCT02782884 -NCT02780687 -NCT02782949 -NCT02780700 -NCT02783118 -NCT02780713 -NCT02783183 -NCT02780765 -NCT02783222 -NCT02780778 -NCT02783235 -NCT02780804 -NCT02783300 -NCT02780830 -NCT02783326 -NCT02780882 -NCT02783391 -NCT02780895 -NCT02783404 -NCT02780921 -NCT02783495 -NCT02780934 -NCT02783508 -NCT02780947 -NCT02783547 -NCT02780960 -NCT02783573 -NCT02780999 -NCT02783599 -NCT02781012 -NCT02783625 -NCT02781051 -NCT02783690 -NCT02781155 -NCT02783755 -NCT02781181 -NCT02783794 -NCT02781207 -NCT02783820 -NCT02781259 -NCT02783898 -NCT02781298 -NCT02783950 -NCT02781363 -NCT02783989 -NCT02781402 -NCT02784015 -NCT02781415 -NCT02784028 -NCT02781441 -NCT02784054 -NCT02781454 -NCT02784093 -NCT02781467 -NCT02784171 -NCT02781506 -NCT02784184 -NCT02781571 -NCT02784288 -NCT02781701 -NCT02784314 -NCT02781714 -NCT02784353 -NCT02781766 -NCT02784470 -NCT02781792 -NCT02784483 -NCT02781805 -NCT02784561 -NCT02781870 -NCT02784613 -NCT02781883 -NCT02784639 -NCT02782013 -NCT02784652 -NCT02782052 -NCT02784678 -NCT02782065 -NCT02784730 -NCT02782182 -NCT02784795 -NCT02782195 -NCT02784834 -NCT02782247 -NCT02784899 -NCT02782325 -NCT02784977 -NCT02782351 -NCT02785029 -NCT02782403 -NCT02785042 -NCT02782468 -NCT02785068 -NCT02782533 -NCT02785120 -NCT02782546 -NCT02790580 -NCT02785250 -NCT02788019 -NCT02785263 -NCT02788006 -NCT02785341 -NCT02788058 -NCT02785380 -NCT02788136 -NCT02785419 -NCT02788149 -NCT02785510 -NCT02788188 -NCT02785523 -NCT02788201 -NCT02785562 -NCT02788214 -NCT02785679 -NCT02788279 -NCT02785757 -NCT02788461 -NCT02785783 -NCT02788513 -NCT02785861 -NCT02788526 -NCT02785874 -NCT02788604 -NCT02785887 -NCT02788643 -NCT02785900 -NCT02788708 -NCT02785913 -NCT02788773 -NCT02785939 -NCT02788825 -NCT02785952 -NCT02788890 -NCT02786017 -NCT02788942 -NCT02786082 -NCT02788955 -NCT02786238 -NCT02788981 -NCT02786290 -NCT02789020 -NCT02786303 -NCT02789163 -NCT02786316 -NCT02789189 -NCT02786329 -NCT02789228 -NCT02786368 -NCT02789254 -NCT02786433 -NCT02789267 -NCT02786459 -NCT02789306 -NCT02786485 -NCT02789332 -NCT02786524 -NCT02789345 -NCT02786589 -NCT02789371 -NCT02786641 -NCT02789384 -NCT02786719 -NCT02789436 -NCT02786797 -NCT02789488 -NCT02786875 -NCT02789566 -NCT02786927 -NCT02789579 -NCT02786940 -NCT02789592 -NCT02787005 -NCT02789605 -NCT02787187 -NCT02789657 -NCT02787239 -NCT02789735 -NCT02787330 -NCT02789800 -NCT02787369 -NCT02789826 -NCT02787434 -NCT02789852 -NCT02787447 -NCT02789865 -NCT02787473 -NCT02789878 -NCT02787486 -NCT02789891 -NCT02787512 -NCT02789917 -NCT02787603 -NCT02790112 -NCT02787616 -NCT02790138 -NCT02787642 -NCT02790190 -NCT02787811 -NCT02790294 -NCT02787863 -NCT02790333 -NCT02787876 -NCT02790463 -NCT02787915 -NCT02790489 -NCT02787980 -NCT02790515 -NCT02787993 -NCT02796846 -NCT02790827 -NCT02793908 -NCT02790853 -NCT02793869 -NCT02790866 -NCT02793921 -NCT02790918 -NCT02793934 -NCT02791191 -NCT02794012 -NCT02791334 -NCT02794064 -NCT02791360 -NCT02794077 -NCT02791373 -NCT02794103 -NCT02791503 -NCT02794129 -NCT02791516 -NCT02794194 -NCT02791581 -NCT02794246 -NCT02791607 -NCT02794324 -NCT02791698 -NCT02794337 -NCT02791724 -NCT02794428 -NCT02791737 -NCT02794454 -NCT02791776 -NCT02794467 -NCT02791828 -NCT02794532 -NCT02791880 -NCT02794558 -NCT02791893 -NCT02794571 -NCT02791919 -NCT02794675 -NCT02792023 -NCT02794766 -NCT02792036 -NCT02794805 -NCT02792114 -NCT02794844 -NCT02792192 -NCT02794857 -NCT02792205 -NCT02794870 -NCT02792257 -NCT02794883 -NCT02792270 -NCT02794909 -NCT02792322 -NCT02794948 -NCT02792426 -NCT02794974 -NCT02792452 -NCT02795104 -NCT02792465 -NCT02795156 -NCT02792491 -NCT02795182 -NCT02792530 -NCT02795195 -NCT02792582 -NCT02795234 -NCT02792608 -NCT02795312 -NCT02792738 -NCT02795364 -NCT02792842 -NCT02795429 -NCT02792881 -NCT02795442 -NCT02792894 -NCT02795520 -NCT02792959 -NCT02795572 -NCT02793076 -NCT02795650 -NCT02793128 -NCT02795767 -NCT02793206 -NCT02795819 -NCT02793219 -NCT02795858 -NCT02793232 -NCT02795884 -NCT02793284 -NCT02795988 -NCT02793375 -NCT02796209 -NCT02793466 -NCT02796261 -NCT02793479 -NCT02796352 -NCT02793531 -NCT02796365 -NCT02793544 -NCT02796391 -NCT02793583 -NCT02796443 -NCT02793739 -NCT02796729 -NCT02793765 -NCT02796807 -NCT02793791 -NCT02796820 -NCT02793856 -NCT02802865 -NCT02796898 -NCT02799836 -NCT02797119 -NCT02799823 -NCT02797158 -NCT02799901 -NCT02797171 -NCT02799953 -NCT02797197 -NCT02800005 -NCT02797275 -NCT02800135 -NCT02797314 -NCT02800174 -NCT02797366 -NCT02800317 -NCT02797405 -NCT02800330 -NCT02797470 -NCT02800369 -NCT02797574 -NCT02800447 -NCT02797587 -NCT02800460 -NCT02797600 -NCT02800473 -NCT02797626 -NCT02800486 -NCT02797639 -NCT02800525 -NCT02797665 -NCT02800551 -NCT02797678 -NCT02800629 -NCT02797704 -NCT02800759 -NCT02797717 -NCT02800785 -NCT02797795 -NCT02800889 -NCT02797834 -NCT02800954 -NCT02797964 -NCT02801032 -NCT02797977 -NCT02801045 -NCT02798029 -NCT02801097 -NCT02798172 -NCT02801123 -NCT02798224 -NCT02801383 -NCT02798406 -NCT02801409 -NCT02798484 -NCT02801487 -NCT02798510 -NCT02801500 -NCT02798536 -NCT02801565 -NCT02798562 -NCT02801578 -NCT02798653 -NCT02801656 -NCT02798666 -NCT02801734 -NCT02798744 -NCT02801955 -NCT02798796 -NCT02801994 -NCT02798965 -NCT02802072 -NCT02798978 -NCT02802098 -NCT02799030 -NCT02802124 -NCT02799069 -NCT02802163 -NCT02799082 -NCT02802267 -NCT02799095 -NCT02802319 -NCT02799147 -NCT02802332 -NCT02799212 -NCT02802358 -NCT02799238 -NCT02802384 -NCT02799277 -NCT02802423 -NCT02799303 -NCT02802449 -NCT02799420 -NCT02802540 -NCT02799472 -NCT02802553 -NCT02799485 -NCT02802566 -NCT02799550 -NCT02802657 -NCT02799589 -NCT02802748 -NCT02799602 -NCT02802774 -NCT02799615 -NCT02802787 -NCT02799693 -NCT02802800 -NCT02799706 -NCT02802826 -NCT02799745 -NCT02809560 -NCT02802878 -NCT02806609 -NCT02802943 -NCT02806544 -NCT02802969 -NCT02806648 -NCT02803151 -NCT02806661 -NCT02803190 -NCT02806687 -NCT02803203 -NCT02806817 -NCT02803320 -NCT02806882 -NCT02803346 -NCT02806999 -NCT02803515 -NCT02807025 -NCT02803593 -NCT02807077 -NCT02803658 -NCT02807103 -NCT02803697 -NCT02807129 -NCT02803736 -NCT02807181 -NCT02803788 -NCT02807233 -NCT02803801 -NCT02807246 -NCT02803814 -NCT02807272 -NCT02803840 -NCT02807337 -NCT02803892 -NCT02807454 -NCT02803957 -NCT02807545 -NCT02804178 -NCT02807558 -NCT02804230 -NCT02807597 -NCT02804308 -NCT02807623 -NCT02804646 -NCT02807636 -NCT02804750 -NCT02807649 -NCT02804776 -NCT02807740 -NCT02804789 -NCT02807753 -NCT02804815 -NCT02807805 -NCT02804893 -NCT02807844 -NCT02805075 -NCT02807883 -NCT02805153 -NCT02808000 -NCT02805166 -NCT02808013 -NCT02805179 -NCT02808091 -NCT02805205 -NCT02808143 -NCT02805218 -NCT02808247 -NCT02805296 -NCT02808299 -NCT02805530 -NCT02808364 -NCT02805608 -NCT02808377 -NCT02805647 -NCT02808416 -NCT02805660 -NCT02808442 -NCT02805725 -NCT02808494 -NCT02805816 -NCT02808598 -NCT02805829 -NCT02808624 -NCT02805868 -NCT02808650 -NCT02805894 -NCT02808793 -NCT02805920 -NCT02808832 -NCT02805998 -NCT02808884 -NCT02806050 -NCT02808897 -NCT02806076 -NCT02809040 -NCT02806115 -NCT02809053 -NCT02806167 -NCT02809092 -NCT02806258 -NCT02809118 -NCT02806297 -NCT02809222 -NCT02806310 -NCT02809235 -NCT02806414 -NCT02809352 -NCT02806479 -NCT02809534 -NCT02806492 -NCT02814968 -NCT02809573 -NCT02812420 -NCT02809599 -NCT02812394 -NCT02809651 -NCT02812511 -NCT02809690 -NCT02812524 -NCT02809729 -NCT02812550 -NCT02809807 -NCT02812589 -NCT02809833 -NCT02812615 -NCT02809846 -NCT02812628 -NCT02809859 -NCT02812641 -NCT02809872 -NCT02812654 -NCT02809911 -NCT02812667 -NCT02810015 -NCT02812693 -NCT02810028 -NCT02812706 -NCT02810223 -NCT02812719 -NCT02810236 -NCT02812836 -NCT02810288 -NCT02812875 -NCT02810418 -NCT02812914 -NCT02810457 -NCT02812992 -NCT02810483 -NCT02813005 -NCT02810652 -NCT02813044 -NCT02810730 -NCT02813057 -NCT02810743 -NCT02813096 -NCT02810847 -NCT02813122 -NCT02810860 -NCT02813135 -NCT02810873 -NCT02813226 -NCT02810886 -NCT02813278 -NCT02810899 -NCT02813603 -NCT02810912 -NCT02813616 -NCT02810990 -NCT02813655 -NCT02811120 -NCT02813694 -NCT02811146 -NCT02813746 -NCT02811172 -NCT02813785 -NCT02811250 -NCT02813837 -NCT02811354 -NCT02813876 -NCT02811367 -NCT02813902 -NCT02811497 -NCT02813928 -NCT02811523 -NCT02813967 -NCT02811549 -NCT02813993 -NCT02811614 -NCT02814006 -NCT02811666 -NCT02814019 -NCT02811679 -NCT02814032 -NCT02811718 -NCT02814045 -NCT02811783 -NCT02814175 -NCT02811809 -NCT02814201 -NCT02811822 -NCT02814227 -NCT02811861 -NCT02814318 -NCT02811887 -NCT02814396 -NCT02811900 -NCT02814448 -NCT02811926 -NCT02814461 -NCT02811978 -NCT02814656 -NCT02812056 -NCT02814669 -NCT02812069 -NCT02814695 -NCT02812173 -NCT02814799 -NCT02812186 -NCT02814916 -NCT02812225 -NCT02814929 -NCT02812316 -NCT02821559 -NCT02815007 -NCT02818530 -NCT02815033 -NCT02818426 -NCT02815059 -NCT02818660 -NCT02815072 -NCT02818725 -NCT02815137 -NCT02818777 -NCT02815150 -NCT02818816 -NCT02815267 -NCT02818829 -NCT02815280 -NCT02818907 -NCT02815319 -NCT02818920 -NCT02815397 -NCT02818946 -NCT02815410 -NCT02819011 -NCT02815436 -NCT02819024 -NCT02815488 -NCT02819245 -NCT02815553 -NCT02819479 -NCT02815566 -NCT02819518 -NCT02815592 -NCT02819583 -NCT02815709 -NCT02819596 -NCT02815761 -NCT02819752 -NCT02815982 -NCT02819804 -NCT02815995 -NCT02819843 -NCT02816021 -NCT02819856 -NCT02816099 -NCT02819869 -NCT02816112 -NCT02819921 -NCT02816125 -NCT02819960 -NCT02816164 -NCT02819999 -NCT02816281 -NCT02820012 -NCT02816294 -NCT02820077 -NCT02816333 -NCT02820116 -NCT02816476 -NCT02820142 -NCT02816645 -NCT02820155 -NCT02816658 -NCT02820194 -NCT02816697 -NCT02820415 -NCT02816762 -NCT02820454 -NCT02816840 -NCT02820506 -NCT02816866 -NCT02820584 -NCT02816879 -NCT02820688 -NCT02816944 -NCT02820714 -NCT02817113 -NCT02820740 -NCT02817126 -NCT02820844 -NCT02817178 -NCT02820857 -NCT02817308 -NCT02820896 -NCT02817334 -NCT02820961 -NCT02817347 -NCT02820974 -NCT02817425 -NCT02821000 -NCT02817464 -NCT02821013 -NCT02817490 -NCT02821026 -NCT02817581 -NCT02821169 -NCT02817607 -NCT02821182 -NCT02817633 -NCT02821234 -NCT02817724 -NCT02821442 -NCT02817893 -NCT02821468 -NCT02817945 -NCT02821494 -NCT02817958 -NCT02821507 -NCT02817997 -NCT02821533 -NCT02818023 -NCT02821546 -NCT02818179 -NCT02827877 -NCT02821637 -NCT02824926 -NCT02821650 -NCT02824861 -NCT02821676 -NCT02824952 -NCT02821728 -NCT02824965 -NCT02821741 -NCT02825043 -NCT02821754 -NCT02825095 -NCT02821832 -NCT02825108 -NCT02821884 -NCT02825147 -NCT02821923 -NCT02825199 -NCT02821936 -NCT02825212 -NCT02821988 -NCT02825225 -NCT02822014 -NCT02825238 -NCT02822053 -NCT02825290 -NCT02822066 -NCT02825550 -NCT02822157 -NCT02825563 -NCT02822196 -NCT02825628 -NCT02822209 -NCT02825719 -NCT02822287 -NCT02825810 -NCT02822326 -NCT02825836 -NCT02822378 -NCT02825940 -NCT02822456 -NCT02826005 -NCT02822482 -NCT02826031 -NCT02822508 -NCT02826161 -NCT02822586 -NCT02826304 -NCT02822716 -NCT02826343 -NCT02822794 -NCT02826369 -NCT02822807 -NCT02826382 -NCT02822833 -NCT02826408 -NCT02822846 -NCT02826434 -NCT02822924 -NCT02826486 -NCT02822963 -NCT02826512 -NCT02823223 -NCT02826564 -NCT02823262 -NCT02826642 -NCT02823314 -NCT02826655 -NCT02823405 -NCT02826720 -NCT02823574 -NCT02826746 -NCT02823626 -NCT02826772 -NCT02823652 -NCT02826837 -NCT02823691 -NCT02826850 -NCT02823704 -NCT02826889 -NCT02823795 -NCT02826928 -NCT02823847 -NCT02827006 -NCT02823860 -NCT02827019 -NCT02823899 -NCT02827175 -NCT02823912 -NCT02827201 -NCT02823990 -NCT02827318 -NCT02824029 -NCT02827370 -NCT02824133 -NCT02827552 -NCT02824172 -NCT02827565 -NCT02824289 -NCT02827617 -NCT02824458 -NCT02827630 -NCT02824484 -NCT02827682 -NCT02824523 -NCT02827734 -NCT02824575 -NCT02827838 -NCT02824718 -NCT02827851 -NCT02824731 -NCT02833480 -NCT02827955 -NCT02830633 -NCT02827968 -NCT02830620 -NCT02827994 -NCT02830685 -NCT02828020 -NCT02830724 -NCT02828085 -NCT02830737 -NCT02828098 -NCT02830880 -NCT02828111 -NCT02830984 -NCT02828124 -NCT02831049 -NCT02828150 -NCT02831088 -NCT02828163 -NCT02831179 -NCT02828189 -NCT02831192 -NCT02828241 -NCT02831244 -NCT02828358 -NCT02831257 -NCT02828410 -NCT02831296 -NCT02828449 -NCT02831374 -NCT02828514 -NCT02831387 -NCT02828527 -NCT02831426 -NCT02828618 -NCT02831439 -NCT02828670 -NCT02831491 -NCT02828709 -NCT02831530 -NCT02828774 -NCT02831569 -NCT02828839 -NCT02831582 -NCT02828865 -NCT02831634 -NCT02828930 -NCT02831686 -NCT02829008 -NCT02831699 -NCT02829021 -NCT02831712 -NCT02829047 -NCT02831855 -NCT02829060 -NCT02831894 -NCT02829099 -NCT02831920 -NCT02829359 -NCT02831933 -NCT02829385 -NCT02831959 -NCT02829450 -NCT02831985 -NCT02829619 -NCT02832011 -NCT02829684 -NCT02832063 -NCT02829723 -NCT02832154 -NCT02829749 -NCT02832167 -NCT02829762 -NCT02832401 -NCT02829775 -NCT02832414 -NCT02829840 -NCT02832492 -NCT02829853 -NCT02832635 -NCT02829918 -NCT02832648 -NCT02829931 -NCT02832713 -NCT02830048 -NCT02832765 -NCT02830139 -NCT02832830 -NCT02830165 -NCT02832882 -NCT02830204 -NCT02832947 -NCT02830321 -NCT02832960 -NCT02830347 -NCT02833038 -NCT02830360 -NCT02833090 -NCT02830399 -NCT02833103 -NCT02830412 -NCT02833155 -NCT02830425 -NCT02833168 -NCT02830477 -NCT02833233 -NCT02830568 -NCT02833246 -NCT02830594 -NCT02833298 -NCT02830607 -NCT02839356 -NCT02833493 -NCT02836769 -NCT02833506 -NCT02836743 -NCT02833610 -NCT02836795 -NCT02833636 -NCT02836821 -NCT02833662 -NCT02836834 -NCT02833701 -NCT02836847 -NCT02833714 -NCT02836860 -NCT02833753 -NCT02836899 -NCT02833766 -NCT02836925 -NCT02833870 -NCT02836977 -NCT02833883 -NCT02837029 -NCT02833896 -NCT02837042 -NCT02833909 -NCT02837146 -NCT02833974 -NCT02837159 -NCT02834013 -NCT02837172 -NCT02834052 -NCT02837237 -NCT02834247 -NCT02837263 -NCT02834286 -NCT02837367 -NCT02834364 -NCT02837523 -NCT02834390 -NCT02837679 -NCT02834403 -NCT02837757 -NCT02834416 -NCT02837783 -NCT02834429 -NCT02837809 -NCT02834455 -NCT02837874 -NCT02834494 -NCT02837900 -NCT02834611 -NCT02837926 -NCT02834780 -NCT02837965 -NCT02834975 -NCT02837991 -NCT02835157 -NCT02838095 -NCT02835222 -NCT02838186 -NCT02835352 -NCT02838225 -NCT02835391 -NCT02838238 -NCT02835404 -NCT02838277 -NCT02835443 -NCT02838342 -NCT02835521 -NCT02838368 -NCT02835599 -NCT02838381 -NCT02835625 -NCT02838420 -NCT02835690 -NCT02838433 -NCT02835729 -NCT02838576 -NCT02835794 -NCT02838602 -NCT02835807 -NCT02838628 -NCT02835820 -NCT02838641 -NCT02835833 -NCT02838654 -NCT02835924 -NCT02838680 -NCT02836028 -NCT02838745 -NCT02836158 -NCT02838758 -NCT02836171 -NCT02838823 -NCT02836288 -NCT02838849 -NCT02836405 -NCT02838966 -NCT02836496 -NCT02839031 -NCT02836509 -NCT02839096 -NCT02836548 -NCT02839109 -NCT02836600 -NCT02839265 -NCT02836639 -NCT02839291 -NCT02836665 -NCT02839343 -NCT02836717 -NCT02844582 -NCT02839434 -NCT02842099 -NCT02839473 -NCT02842047 -NCT02839564 -NCT02842125 -NCT02839577 -NCT02842138 -NCT02839655 -NCT02842268 -NCT02839668 -NCT02842320 -NCT02839681 -NCT02842333 -NCT02839694 -NCT02842346 -NCT02839707 -NCT02842359 -NCT02839720 -NCT02842541 -NCT02839759 -NCT02842580 -NCT02839785 -NCT02842658 -NCT02839889 -NCT02842723 -NCT02839954 -NCT02842736 -NCT02840058 -NCT02842749 -NCT02840123 -NCT02842814 -NCT02840149 -NCT02842827 -NCT02840162 -NCT02842892 -NCT02840201 -NCT02842905 -NCT02840214 -NCT02842931 -NCT02840227 -NCT02843061 -NCT02840266 -NCT02843074 -NCT02840292 -NCT02843126 -NCT02840331 -NCT02843165 -NCT02840344 -NCT02843191 -NCT02840409 -NCT02843217 -NCT02840461 -NCT02843347 -NCT02840487 -NCT02843386 -NCT02840539 -NCT02843425 -NCT02840552 -NCT02843516 -NCT02840617 -NCT02843529 -NCT02840864 -NCT02843568 -NCT02840890 -NCT02843581 -NCT02840929 -NCT02843607 -NCT02840981 -NCT02843633 -NCT02840994 -NCT02843750 -NCT02841020 -NCT02843763 -NCT02841033 -NCT02843802 -NCT02841124 -NCT02843815 -NCT02841137 -NCT02843945 -NCT02841163 -NCT02844023 -NCT02841215 -NCT02844062 -NCT02841228 -NCT02844075 -NCT02841254 -NCT02844101 -NCT02841332 -NCT02844114 -NCT02841436 -NCT02844140 -NCT02841540 -NCT02844192 -NCT02841553 -NCT02844335 -NCT02841579 -NCT02844387 -NCT02841605 -NCT02844439 -NCT02841722 -NCT02844465 -NCT02841748 -NCT02844478 -NCT02841800 -NCT02844504 -NCT02841904 -NCT02844517 -NCT02842008 -NCT02844569 -NCT02842021 -NCT02850172 -NCT02844608 -NCT02847845 -NCT02844647 -NCT02847832 -NCT02844699 -NCT02847871 -NCT02844751 -NCT02847897 -NCT02844777 -NCT02847923 -NCT02844816 -NCT02847949 -NCT02844829 -NCT02847975 -NCT02844868 -NCT02848001 -NCT02844881 -NCT02848027 -NCT02845024 -NCT02848079 -NCT02845050 -NCT02848183 -NCT02845115 -NCT02848196 -NCT02845297 -NCT02848235 -NCT02845323 -NCT02848248 -NCT02845414 -NCT02848443 -NCT02845427 -NCT02848495 -NCT02845466 -NCT02848573 -NCT02845479 -NCT02848651 -NCT02845596 -NCT02848664 -NCT02845752 -NCT02848716 -NCT02845843 -NCT02848755 -NCT02845856 -NCT02848781 -NCT02845882 -NCT02848794 -NCT02845908 -NCT02848807 -NCT02845986 -NCT02848820 -NCT02845999 -NCT02848911 -NCT02846103 -NCT02848989 -NCT02846376 -NCT02849015 -NCT02846389 -NCT02849041 -NCT02846428 -NCT02849093 -NCT02846454 -NCT02849106 -NCT02846467 -NCT02849119 -NCT02846584 -NCT02849145 -NCT02846623 -NCT02849158 -NCT02846714 -NCT02849171 -NCT02846766 -NCT02849314 -NCT02846792 -NCT02849327 -NCT02846870 -NCT02849340 -NCT02846935 -NCT02849353 -NCT02846974 -NCT02849366 -NCT02846987 -NCT02849379 -NCT02847000 -NCT02849418 -NCT02847065 -NCT02849444 -NCT02847078 -NCT02849457 -NCT02847247 -NCT02849496 -NCT02847377 -NCT02849535 -NCT02847403 -NCT02849548 -NCT02847429 -NCT02849678 -NCT02847468 -NCT02849717 -NCT02847559 -NCT02849743 -NCT02847637 -NCT02849977 -NCT02847689 -NCT02849990 -NCT02847715 -NCT02850042 -NCT02847754 -NCT02850068 -NCT02847767 -NCT02850081 -NCT02847806 -NCT02856113 -NCT02850302 -NCT02853292 -NCT02850419 -NCT02853188 -NCT02850497 -NCT02853305 -NCT02850536 -NCT02853318 -NCT02850588 -NCT02853331 -NCT02850744 -NCT02853344 -NCT02850796 -NCT02853357 -NCT02850848 -NCT02853370 -NCT02850874 -NCT02853474 -NCT02850939 -NCT02853487 -NCT02850978 -NCT02853500 -NCT02850991 -NCT02853539 -NCT02851004 -NCT02853565 -NCT02851056 -NCT02853578 -NCT02851121 -NCT02853604 -NCT02851225 -NCT02853708 -NCT02851251 -NCT02853968 -NCT02851290 -NCT02854033 -NCT02851381 -NCT02854059 -NCT02851407 -NCT02854072 -NCT02851420 -NCT02854098 -NCT02851537 -NCT02854176 -NCT02851563 -NCT02854215 -NCT02851589 -NCT02854241 -NCT02851693 -NCT02854280 -NCT02851784 -NCT02854358 -NCT02851797 -NCT02854410 -NCT02851927 -NCT02854436 -NCT02851953 -NCT02854514 -NCT02851966 -NCT02854592 -NCT02852005 -NCT02854618 -NCT02852083 -NCT02854644 -NCT02852096 -NCT02854657 -NCT02852109 -NCT02854826 -NCT02852122 -NCT02854839 -NCT02852161 -NCT02854930 -NCT02852343 -NCT02854956 -NCT02852382 -NCT02855086 -NCT02852408 -NCT02855125 -NCT02852421 -NCT02855138 -NCT02852460 -NCT02855203 -NCT02852473 -NCT02855281 -NCT02852486 -NCT02855359 -NCT02852525 -NCT02855437 -NCT02852564 -NCT02855645 -NCT02852655 -NCT02855697 -NCT02852798 -NCT02855723 -NCT02852824 -NCT02855775 -NCT02852837 -NCT02855788 -NCT02852915 -NCT02855814 -NCT02853006 -NCT02855840 -NCT02853071 -NCT02855892 -NCT02853110 -NCT02855944 -NCT02853123 -NCT02856022 -NCT02853149 -NCT02856048 -NCT02853162 -NCT02861196 -NCT02856126 -NCT02858869 -NCT02856178 -NCT02858856 -NCT02856217 -NCT02858895 -NCT02856269 -NCT02858921 -NCT02856347 -NCT02858934 -NCT02856373 -NCT02858986 -NCT02856425 -NCT02858999 -NCT02856464 -NCT02859012 -NCT02856503 -NCT02859038 -NCT02856516 -NCT02859064 -NCT02856568 -NCT02859077 -NCT02856581 -NCT02859129 -NCT02856633 -NCT02859142 -NCT02856685 -NCT02859155 -NCT02856789 -NCT02859168 -NCT02856802 -NCT02859194 -NCT02856815 -NCT02859207 -NCT02856867 -NCT02859324 -NCT02856893 -NCT02859350 -NCT02856919 -NCT02859389 -NCT02856997 -NCT02859402 -NCT02857114 -NCT02859415 -NCT02857166 -NCT02859441 -NCT02857192 -NCT02859519 -NCT02857205 -NCT02859532 -NCT02857218 -NCT02859584 -NCT02857270 -NCT02859753 -NCT02857283 -NCT02859844 -NCT02857374 -NCT02859857 -NCT02857400 -NCT02859948 -NCT02857426 -NCT02860000 -NCT02857439 -NCT02860039 -NCT02857556 -NCT02860052 -NCT02857569 -NCT02860104 -NCT02857582 -NCT02860182 -NCT02857608 -NCT02860247 -NCT02857686 -NCT02860286 -NCT02857712 -NCT02860377 -NCT02857842 -NCT02860429 -NCT02857972 -NCT02860481 -NCT02857998 -NCT02860494 -NCT02858102 -NCT02860546 -NCT02858167 -NCT02860572 -NCT02858206 -NCT02860663 -NCT02858232 -NCT02860676 -NCT02858258 -NCT02860702 -NCT02858297 -NCT02860780 -NCT02858310 -NCT02860793 -NCT02858336 -NCT02860819 -NCT02858362 -NCT02860936 -NCT02858414 -NCT02860975 -NCT02858583 -NCT02861014 -NCT02858661 -NCT02861040 -NCT02858687 -NCT02861105 -NCT02858778 -NCT02861183 -NCT02858804 -NCT02866240 -NCT02861209 -NCT02863692 -NCT02861222 -NCT02863562 -NCT02861274 -NCT02863718 -NCT02861300 -NCT02863770 -NCT02861417 -NCT02863783 -NCT02861430 -NCT02863822 -NCT02861443 -NCT02863835 -NCT02861456 -NCT02863848 -NCT02861508 -NCT02863900 -NCT02861521 -NCT02863913 -NCT02861573 -NCT02863991 -NCT02861690 -NCT02864030 -NCT02861716 -NCT02864043 -NCT02861742 -NCT02864108 -NCT02861859 -NCT02864147 -NCT02861885 -NCT02864251 -NCT02861898 -NCT02864277 -NCT02861911 -NCT02864290 -NCT02861937 -NCT02864316 -NCT02862015 -NCT02864342 -NCT02862028 -NCT02864355 -NCT02862067 -NCT02864368 -NCT02862132 -NCT02864381 -NCT02862145 -NCT02864394 -NCT02862249 -NCT02864420 -NCT02862275 -NCT02864433 -NCT02862288 -NCT02864485 -NCT02862340 -NCT02864563 -NCT02862353 -NCT02864615 -NCT02862405 -NCT02864784 -NCT02862457 -NCT02864797 -NCT02862470 -NCT02864849 -NCT02862483 -NCT02864888 -NCT02862535 -NCT02864992 -NCT02862587 -NCT02865096 -NCT02862600 -NCT02865135 -NCT02862613 -NCT02865148 -NCT02862652 -NCT02865161 -NCT02862678 -NCT02865187 -NCT02862704 -NCT02865239 -NCT02862743 -NCT02865252 -NCT02862808 -NCT02865304 -NCT02862847 -NCT02865577 -NCT02862925 -NCT02865616 -NCT02863055 -NCT02865811 -NCT02863120 -NCT02865837 -NCT02863133 -NCT02865902 -NCT02863159 -NCT02865915 -NCT02863211 -NCT02866006 -NCT02863250 -NCT02866019 -NCT02863289 -NCT02866045 -NCT02863302 -NCT02866084 -NCT02863367 -NCT02866136 -NCT02863406 -NCT02866149 -NCT02863471 -NCT02866162 -NCT02863484 -NCT02871427 -NCT02866344 -NCT02868892 -NCT02866370 -NCT02868827 -NCT02866383 -NCT02868983 -NCT02866500 -NCT02869035 -NCT02866591 -NCT02869074 -NCT02866695 -NCT02869152 -NCT02866747 -NCT02869217 -NCT02866851 -NCT02869230 -NCT02866864 -NCT02869243 -NCT02866877 -NCT02869295 -NCT02866916 -NCT02869321 -NCT02866942 -NCT02869360 -NCT02866955 -NCT02869399 -NCT02866981 -NCT02869412 -NCT02866994 -NCT02869425 -NCT02867007 -NCT02869490 -NCT02867020 -NCT02869529 -NCT02867033 -NCT02869555 -NCT02867072 -NCT02869620 -NCT02867111 -NCT02869633 -NCT02867280 -NCT02869685 -NCT02867319 -NCT02869698 -NCT02867332 -NCT02869763 -NCT02867358 -NCT02869789 -NCT02867371 -NCT02869945 -NCT02867397 -NCT02869958 -NCT02867410 -NCT02869971 -NCT02867423 -NCT02870010 -NCT02867462 -NCT02870023 -NCT02867475 -NCT02870036 -NCT02867553 -NCT02870049 -NCT02867566 -NCT02870114 -NCT02867592 -NCT02870153 -NCT02867618 -NCT02870244 -NCT02867644 -NCT02870478 -NCT02867709 -NCT02870569 -NCT02867722 -NCT02870582 -NCT02867761 -NCT02870673 -NCT02867826 -NCT02870686 -NCT02867839 -NCT02870699 -NCT02867852 -NCT02870751 -NCT02867865 -NCT02870777 -NCT02867956 -NCT02870907 -NCT02868034 -NCT02870920 -NCT02868112 -NCT02870985 -NCT02868216 -NCT02871011 -NCT02868359 -NCT02871024 -NCT02868411 -NCT02871076 -NCT02868476 -NCT02871089 -NCT02868567 -NCT02871115 -NCT02868580 -NCT02871167 -NCT02868593 -NCT02871180 -NCT02868606 -NCT02871219 -NCT02868632 -NCT02871245 -NCT02868684 -NCT02871388 -NCT02868762 -NCT02876978 -NCT02871518 -NCT02874066 -NCT02871570 -NCT02874040 -NCT02871648 -NCT02874287 -NCT02871661 -NCT02874352 -NCT02871726 -NCT02874404 -NCT02871752 -NCT02874430 -NCT02871791 -NCT02874612 -NCT02871804 -NCT02874651 -NCT02871817 -NCT02874664 -NCT02871843 -NCT02874742 -NCT02871856 -NCT02874846 -NCT02871869 -NCT02874937 -NCT02871908 -NCT02875002 -NCT02871999 -NCT02875067 -NCT02872025 -NCT02875093 -NCT02872064 -NCT02875119 -NCT02872077 -NCT02875132 -NCT02872090 -NCT02875223 -NCT02872103 -NCT02875314 -NCT02872116 -NCT02875340 -NCT02872259 -NCT02875457 -NCT02872363 -NCT02875548 -NCT02872376 -NCT02875613 -NCT02872428 -NCT02875626 -NCT02872467 -NCT02875652 -NCT02872519 -NCT02875678 -NCT02872532 -NCT02875691 -NCT02872623 -NCT02875743 -NCT02872701 -NCT02875756 -NCT02872714 -NCT02875782 -NCT02872779 -NCT02875795 -NCT02872831 -NCT02875990 -NCT02872909 -NCT02876003 -NCT02872948 -NCT02876016 -NCT02873000 -NCT02876081 -NCT02873182 -NCT02876107 -NCT02873195 -NCT02876133 -NCT02873273 -NCT02876224 -NCT02873286 -NCT02876237 -NCT02873338 -NCT02876289 -NCT02873377 -NCT02876302 -NCT02873416 -NCT02876380 -NCT02873442 -NCT02876393 -NCT02873455 -NCT02876419 -NCT02873520 -NCT02876497 -NCT02873533 -NCT02876510 -NCT02873559 -NCT02876575 -NCT02873598 -NCT02876601 -NCT02873689 -NCT02876627 -NCT02873741 -NCT02876640 -NCT02873793 -NCT02876731 -NCT02873819 -NCT02876770 -NCT02873845 -NCT02876848 -NCT02873962 -NCT02876861 -NCT02873975 -NCT02876874 -NCT02874014 -NCT02882971 -NCT02876991 -NCT02880176 -NCT02877082 -NCT02880072 -NCT02877277 -NCT02880228 -NCT02877303 -NCT02880293 -NCT02877329 -NCT02880319 -NCT02877394 -NCT02880332 -NCT02877537 -NCT02880345 -NCT02877550 -NCT02880371 -NCT02877797 -NCT02880410 -NCT02877862 -NCT02880709 -NCT02877966 -NCT02880878 -NCT02878044 -NCT02880904 -NCT02878057 -NCT02880930 -NCT02878148 -NCT02880943 -NCT02878252 -NCT02880956 -NCT02878265 -NCT02881073 -NCT02878278 -NCT02881086 -NCT02878330 -NCT02881099 -NCT02878382 -NCT02881125 -NCT02878395 -NCT02881138 -NCT02878473 -NCT02881190 -NCT02878551 -NCT02881203 -NCT02878694 -NCT02881229 -NCT02878707 -NCT02881242 -NCT02878785 -NCT02881255 -NCT02878863 -NCT02881333 -NCT02878889 -NCT02881515 -NCT02878915 -NCT02881554 -NCT02878941 -NCT02881567 -NCT02878980 -NCT02881723 -NCT02879045 -NCT02881749 -NCT02879071 -NCT02881814 -NCT02879097 -NCT02881957 -NCT02879214 -NCT02881996 -NCT02879227 -NCT02882139 -NCT02879318 -NCT02882152 -NCT02879344 -NCT02882165 -NCT02879409 -NCT02882191 -NCT02879461 -NCT02882217 -NCT02879513 -NCT02882269 -NCT02879526 -NCT02882282 -NCT02879617 -NCT02882295 -NCT02879643 -NCT02882308 -NCT02879682 -NCT02882321 -NCT02879695 -NCT02882334 -NCT02879721 -NCT02882438 -NCT02879747 -NCT02882503 -NCT02879760 -NCT02882555 -NCT02879773 -NCT02882581 -NCT02879799 -NCT02882620 -NCT02879825 -NCT02882659 -NCT02879864 -NCT02882698 -NCT02879903 -NCT02882776 -NCT02879994 -NCT02882893 -NCT02880007 -NCT02882945 -NCT02880020 -NCT02889796 -NCT02882984 -NCT02886741 -NCT02883049 -NCT02886585 -NCT02883062 -NCT02886819 -NCT02883153 -NCT02886897 -NCT02883166 -NCT02886949 -NCT02883361 -NCT02887040 -NCT02883374 -NCT02887092 -NCT02883387 -NCT02887105 -NCT02883543 -NCT02887196 -NCT02883556 -NCT02887248 -NCT02883699 -NCT02887313 -NCT02883738 -NCT02887365 -NCT02883790 -NCT02887443 -NCT02883985 -NCT02887521 -NCT02884102 -NCT02887547 -NCT02884128 -NCT02887573 -NCT02884141 -NCT02887586 -NCT02884154 -NCT02887599 -NCT02884453 -NCT02887651 -NCT02884479 -NCT02887703 -NCT02884492 -NCT02887716 -NCT02884505 -NCT02887742 -NCT02884570 -NCT02887846 -NCT02884648 -NCT02887911 -NCT02884726 -NCT02887976 -NCT02884791 -NCT02888015 -NCT02884830 -NCT02888106 -NCT02884882 -NCT02888132 -NCT02884960 -NCT02888171 -NCT02885116 -NCT02888223 -NCT02885142 -NCT02888392 -NCT02885207 -NCT02888418 -NCT02885259 -NCT02888496 -NCT02885272 -NCT02888665 -NCT02885324 -NCT02888717 -NCT02885467 -NCT02888743 -NCT02885636 -NCT02888964 -NCT02885649 -NCT02888990 -NCT02885688 -NCT02889003 -NCT02885727 -NCT02889068 -NCT02885753 -NCT02889224 -NCT02885766 -NCT02889276 -NCT02885935 -NCT02889328 -NCT02885974 -NCT02889380 -NCT02886026 -NCT02889471 -NCT02886052 -NCT02889510 -NCT02886065 -NCT02889523 -NCT02886104 -NCT02889536 -NCT02886143 -NCT02889627 -NCT02886195 -NCT02889653 -NCT02886247 -NCT02889666 -NCT02886273 -NCT02889679 -NCT02886390 -NCT02889692 -NCT02886546 -NCT02889705 -NCT02886559 -NCT02889718 -NCT02886572 -NCT02895490 -NCT02889809 -NCT02892318 -NCT02889822 -NCT02892266 -NCT02889848 -NCT02892383 -NCT02889861 -NCT02892396 -NCT02889874 -NCT02892474 -NCT02889900 -NCT02892487 -NCT02889913 -NCT02892643 -NCT02889926 -NCT02892656 -NCT02890004 -NCT02892695 -NCT02890017 -NCT02892708 -NCT02890069 -NCT02892721 -NCT02890082 -NCT02892734 -NCT02890095 -NCT02892760 -NCT02890316 -NCT02892786 -NCT02890329 -NCT02892877 -NCT02890342 -NCT02892942 -NCT02890355 -NCT02893124 -NCT02890368 -NCT02893137 -NCT02890420 -NCT02893163 -NCT02890485 -NCT02893176 -NCT02890511 -NCT02893241 -NCT02890524 -NCT02893267 -NCT02890602 -NCT02893306 -NCT02890654 -NCT02893332 -NCT02890758 -NCT02893358 -NCT02890784 -NCT02893397 -NCT02890849 -NCT02893501 -NCT02890862 -NCT02893527 -NCT02890901 -NCT02893540 -NCT02890940 -NCT02893683 -NCT02890966 -NCT02893709 -NCT02890979 -NCT02893774 -NCT02891083 -NCT02893813 -NCT02891161 -NCT02893917 -NCT02891278 -NCT02893930 -NCT02891434 -NCT02893969 -NCT02891447 -NCT02893982 -NCT02891460 -NCT02894151 -NCT02891538 -NCT02894398 -NCT02891590 -NCT02894411 -NCT02891616 -NCT02894567 -NCT02891642 -NCT02894645 -NCT02891668 -NCT02894658 -NCT02891681 -NCT02894671 -NCT02891759 -NCT02894723 -NCT02891785 -NCT02894762 -NCT02891811 -NCT02894775 -NCT02891824 -NCT02894866 -NCT02891863 -NCT02894944 -NCT02891993 -NCT02895178 -NCT02892006 -NCT02895256 -NCT02892058 -NCT02895360 -NCT02892071 -NCT02895412 -NCT02892123 -NCT02895425 -NCT02892188 -NCT02895464 -NCT02892201 -NCT02901548 -NCT02895503 -NCT02898727 -NCT02895529 -NCT02898649 -NCT02895594 -NCT02898766 -NCT02895620 -NCT02898844 -NCT02895633 -NCT02898896 -NCT02895763 -NCT02898922 -NCT02895802 -NCT02899026 -NCT02895854 -NCT02899039 -NCT02895919 -NCT02899052 -NCT02895932 -NCT02899078 -NCT02895945 -NCT02899091 -NCT02896166 -NCT02899117 -NCT02896192 -NCT02899169 -NCT02896231 -NCT02899195 -NCT02896244 -NCT02899221 -NCT02896309 -NCT02899286 -NCT02896322 -NCT02899299 -NCT02896335 -NCT02899325 -NCT02896361 -NCT02899598 -NCT02896387 -NCT02899611 -NCT02896413 -NCT02899624 -NCT02896465 -NCT02899702 -NCT02896530 -NCT02899728 -NCT02896582 -NCT02899754 -NCT02896751 -NCT02899793 -NCT02896803 -NCT02899923 -NCT02896816 -NCT02900105 -NCT02896829 -NCT02900157 -NCT02896842 -NCT02900248 -NCT02896855 -NCT02900326 -NCT02896907 -NCT02900352 -NCT02896946 -NCT02900469 -NCT02897050 -NCT02900495 -NCT02897375 -NCT02900521 -NCT02897388 -NCT02900560 -NCT02897479 -NCT02900651 -NCT02897544 -NCT02900664 -NCT02897596 -NCT02900677 -NCT02897622 -NCT02900716 -NCT02897635 -NCT02900742 -NCT02897661 -NCT02900755 -NCT02897700 -NCT02900820 -NCT02897765 -NCT02900898 -NCT02897778 -NCT02900911 -NCT02897830 -NCT02900950 -NCT02897986 -NCT02900963 -NCT02898012 -NCT02900976 -NCT02898064 -NCT02901106 -NCT02898077 -NCT02901145 -NCT02898116 -NCT02901223 -NCT02898207 -NCT02901288 -NCT02898259 -NCT02901301 -NCT02898363 -NCT02901392 -NCT02898376 -NCT02901405 -NCT02898441 -NCT02901483 -NCT02898519 -NCT02908477 -NCT02901782 -NCT02905188 -NCT02901899 -NCT02905175 -NCT02901925 -NCT02905266 -NCT02901938 -NCT02905305 -NCT02902029 -NCT02905318 -NCT02902042 -NCT02905578 -NCT02902185 -NCT02905591 -NCT02902237 -NCT02905669 -NCT02902302 -NCT02905786 -NCT02902432 -NCT02905877 -NCT02902484 -NCT02905903 -NCT02902510 -NCT02905916 -NCT02902536 -NCT02905942 -NCT02902575 -NCT02905968 -NCT02902588 -NCT02905981 -NCT02902601 -NCT02905994 -NCT02902627 -NCT02906046 -NCT02902731 -NCT02906059 -NCT02902757 -NCT02906098 -NCT02902809 -NCT02906150 -NCT02902822 -NCT02906163 -NCT02902874 -NCT02906241 -NCT02902965 -NCT02906280 -NCT02903004 -NCT02906293 -NCT02903017 -NCT02906332 -NCT02903069 -NCT02906371 -NCT02903160 -NCT02906384 -NCT02903290 -NCT02906397 -NCT02903355 -NCT02906540 -NCT02903368 -NCT02906566 -NCT02903381 -NCT02906605 -NCT02903446 -NCT02906696 -NCT02903498 -NCT02906722 -NCT02903524 -NCT02906800 -NCT02903537 -NCT02906904 -NCT02903615 -NCT02906917 -NCT02903680 -NCT02907021 -NCT02903771 -NCT02907073 -NCT02903784 -NCT02907099 -NCT02903810 -NCT02907333 -NCT02903914 -NCT02907359 -NCT02904031 -NCT02907372 -NCT02904226 -NCT02907385 -NCT02904447 -NCT02907411 -NCT02904525 -NCT02907710 -NCT02904564 -NCT02907788 -NCT02904629 -NCT02907827 -NCT02904707 -NCT02907866 -NCT02904746 -NCT02907918 -NCT02904759 -NCT02908048 -NCT02904798 -NCT02908165 -NCT02904837 -NCT02908217 -NCT02904863 -NCT02908256 -NCT02904954 -NCT02908269 -NCT02905019 -NCT02908451 -NCT02905110 -NCT02914197 -NCT02908607 -NCT02911363 -NCT02908672 -NCT02911350 -NCT02908685 -NCT02911467 -NCT02908698 -NCT02911571 -NCT02908750 -NCT02911610 -NCT02908906 -NCT02911636 -NCT02908958 -NCT02911649 -NCT02908971 -NCT02911662 -NCT02909036 -NCT02911688 -NCT02909049 -NCT02911740 -NCT02909114 -NCT02911831 -NCT02909127 -NCT02911844 -NCT02909257 -NCT02911922 -NCT02909361 -NCT02911948 -NCT02909452 -NCT02911974 -NCT02909465 -NCT02912013 -NCT02909478 -NCT02912052 -NCT02909530 -NCT02912065 -NCT02909569 -NCT02912143 -NCT02909647 -NCT02912195 -NCT02909751 -NCT02912208 -NCT02909777 -NCT02912312 -NCT02909842 -NCT02912403 -NCT02909855 -NCT02912559 -NCT02909907 -NCT02912572 -NCT02909972 -NCT02912611 -NCT02909985 -NCT02912624 -NCT02910037 -NCT02912676 -NCT02910050 -NCT02912754 -NCT02910063 -NCT02912832 -NCT02910180 -NCT02912845 -NCT02910219 -NCT02912923 -NCT02910271 -NCT02912936 -NCT02910323 -NCT02912949 -NCT02910336 -NCT02912988 -NCT02910349 -NCT02913066 -NCT02910388 -NCT02913131 -NCT02910583 -NCT02913196 -NCT02910596 -NCT02913313 -NCT02910700 -NCT02913417 -NCT02910726 -NCT02913430 -NCT02910752 -NCT02913443 -NCT02910791 -NCT02913521 -NCT02910804 -NCT02913573 -NCT02910843 -NCT02913612 -NCT02910869 -NCT02913664 -NCT02910882 -NCT02913729 -NCT02910895 -NCT02913742 -NCT02910960 -NCT02913794 -NCT02910986 -NCT02913859 -NCT02911025 -NCT02914067 -NCT02911103 -NCT02914106 -NCT02911129 -NCT02914132 -NCT02911142 -NCT02914145 -NCT02911233 -NCT02914158 -NCT02911259 -NCT02919787 -NCT02914327 -NCT02917291 -NCT02914353 -NCT02917161 -NCT02914405 -NCT02917356 -NCT02914470 -NCT02917408 -NCT02914496 -NCT02917421 -NCT02914704 -NCT02917460 -NCT02914782 -NCT02917473 -NCT02914808 -NCT02917525 -NCT02914821 -NCT02917551 -NCT02914873 -NCT02917629 -NCT02914886 -NCT02917720 -NCT02914899 -NCT02917746 -NCT02914925 -NCT02917772 -NCT02914938 -NCT02917863 -NCT02914964 -NCT02917928 -NCT02914977 -NCT02917941 -NCT02914990 -NCT02917954 -NCT02915016 -NCT02917980 -NCT02915120 -NCT02917993 -NCT02915172 -NCT02918045 -NCT02915263 -NCT02918071 -NCT02915393 -NCT02918084 -NCT02915432 -NCT02918162 -NCT02915445 -NCT02918188 -NCT02915471 -NCT02918201 -NCT02915523 -NCT02918214 -NCT02915562 -NCT02918253 -NCT02915666 -NCT02918331 -NCT02915744 -NCT02918357 -NCT02915783 -NCT02918422 -NCT02915835 -NCT02918461 -NCT02915848 -NCT02918474 -NCT02915965 -NCT02918656 -NCT02916095 -NCT02918682 -NCT02916134 -NCT02918747 -NCT02916147 -NCT02918773 -NCT02916199 -NCT02918786 -NCT02916212 -NCT02918955 -NCT02916342 -NCT02918968 -NCT02916420 -NCT02919033 -NCT02916433 -NCT02919046 -NCT02916459 -NCT02919111 -NCT02916472 -NCT02919215 -NCT02916511 -NCT02919293 -NCT02916537 -NCT02919345 -NCT02916550 -NCT02919371 -NCT02916602 -NCT02919436 -NCT02916680 -NCT02919449 -NCT02916719 -NCT02919462 -NCT02916745 -NCT02919553 -NCT02916771 -NCT02919618 -NCT02916914 -NCT02919644 -NCT02916979 -NCT02919670 -NCT02917005 -NCT02919683 -NCT02917083 -NCT02919696 -NCT02917135 -NCT02925884 -NCT02919800 -NCT02922998 -NCT02919865 -NCT02922855 -NCT02919878 -NCT02923011 -NCT02919969 -NCT02923037 -NCT02920008 -NCT02923180 -NCT02920177 -NCT02923232 -NCT02920216 -NCT02923258 -NCT02920229 -NCT02923297 -NCT02920268 -NCT02923310 -NCT02920307 -NCT02923323 -NCT02920385 -NCT02923349 -NCT02920450 -NCT02923531 -NCT02920476 -NCT02923557 -NCT02920515 -NCT02923570 -NCT02920541 -NCT02923609 -NCT02920554 -NCT02923635 -NCT02920567 -NCT02923700 -NCT02920645 -NCT02923739 -NCT02920658 -NCT02923778 -NCT02920697 -NCT02923830 -NCT02920944 -NCT02923895 -NCT02920996 -NCT02923921 -NCT02921022 -NCT02923934 -NCT02921061 -NCT02923986 -NCT02921139 -NCT02924025 -NCT02921152 -NCT02924038 -NCT02921204 -NCT02924116 -NCT02921256 -NCT02924233 -NCT02921269 -NCT02924272 -NCT02921490 -NCT02924324 -NCT02921542 -NCT02924363 -NCT02921581 -NCT02924376 -NCT02921646 -NCT02924402 -NCT02921724 -NCT02924441 -NCT02921737 -NCT02924480 -NCT02921815 -NCT02924597 -NCT02921854 -NCT02924623 -NCT02921893 -NCT02924714 -NCT02921919 -NCT02924753 -NCT02921945 -NCT02924766 -NCT02921958 -NCT02924818 -NCT02921984 -NCT02924883 -NCT02921997 -NCT02924909 -NCT02922049 -NCT02924922 -NCT02922127 -NCT02925000 -NCT02922179 -NCT02925026 -NCT02922244 -NCT02925104 -NCT02922257 -NCT02925234 -NCT02922283 -NCT02925260 -NCT02922322 -NCT02925390 -NCT02922348 -NCT02925455 -NCT02922478 -NCT02925507 -NCT02922647 -NCT02925533 -NCT02922738 -NCT02925650 -NCT02922764 -NCT02925819 -NCT02922777 -NCT02931188 -NCT02926014 -NCT02928692 -NCT02926053 -NCT02928640 -NCT02926079 -NCT02928731 -NCT02926131 -NCT02928861 -NCT02926183 -NCT02928978 -NCT02926196 -NCT02929082 -NCT02926209 -NCT02929108 -NCT02926222 -NCT02929147 -NCT02926261 -NCT02929160 -NCT02926534 -NCT02929186 -NCT02926573 -NCT02929225 -NCT02926586 -NCT02929290 -NCT02926625 -NCT02929316 -NCT02926638 -NCT02929355 -NCT02926690 -NCT02929381 -NCT02926703 -NCT02929394 -NCT02926716 -NCT02929420 -NCT02926729 -NCT02929498 -NCT02926768 -NCT02929524 -NCT02926833 -NCT02929576 -NCT02926872 -NCT02929589 -NCT02926911 -NCT02929615 -NCT02926963 -NCT02929693 -NCT02927093 -NCT02929758 -NCT02927145 -NCT02929771 -NCT02927249 -NCT02929797 -NCT02927262 -NCT02929862 -NCT02927301 -NCT02929875 -NCT02927340 -NCT02929966 -NCT02927366 -NCT02930044 -NCT02927379 -NCT02930109 -NCT02927431 -NCT02930122 -NCT02927626 -NCT02930213 -NCT02927691 -NCT02930252 -NCT02927743 -NCT02930278 -NCT02927769 -NCT02930291 -NCT02927899 -NCT02930304 -NCT02927912 -NCT02930317 -NCT02927925 -NCT02930460 -NCT02927938 -NCT02930512 -NCT02927964 -NCT02930538 -NCT02927977 -NCT02930551 -NCT02928029 -NCT02930850 -NCT02928055 -NCT02930876 -NCT02928081 -NCT02930889 -NCT02928107 -NCT02930902 -NCT02928146 -NCT02930915 -NCT02928172 -NCT02930928 -NCT02928224 -NCT02930941 -NCT02928341 -NCT02930954 -NCT02928367 -NCT02930967 -NCT02928406 -NCT02930993 -NCT02928419 -NCT02931032 -NCT02928432 -NCT02931071 -NCT02928523 -NCT02931097 -NCT02928575 -NCT02936752 -NCT02931201 -NCT02934256 -NCT02931292 -NCT02934230 -NCT02931318 -NCT02934399 -NCT02931331 -NCT02934451 -NCT02931448 -NCT02934464 -NCT02931461 -NCT02934490 -NCT02931552 -NCT02934503 -NCT02931591 -NCT02934529 -NCT02931695 -NCT02934568 -NCT02931721 -NCT02934620 -NCT02931760 -NCT02934685 -NCT02931825 -NCT02934815 -NCT02931864 -NCT02934828 -NCT02931890 -NCT02934854 -NCT02931929 -NCT02934880 -NCT02932033 -NCT02934932 -NCT02932046 -NCT02934945 -NCT02932098 -NCT02934958 -NCT02932137 -NCT02935023 -NCT02932189 -NCT02935036 -NCT02932267 -NCT02935153 -NCT02932280 -NCT02935205 -NCT02932332 -NCT02935257 -NCT02932475 -NCT02935309 -NCT02932501 -NCT02935361 -NCT02932527 -NCT02935374 -NCT02932540 -NCT02935452 -NCT02932618 -NCT02935478 -NCT02932761 -NCT02935491 -NCT02932826 -NCT02935530 -NCT02932865 -NCT02935543 -NCT02932904 -NCT02935634 -NCT02932956 -NCT02935699 -NCT02932982 -NCT02935764 -NCT02933060 -NCT02935790 -NCT02933073 -NCT02935868 -NCT02933190 -NCT02935881 -NCT02933216 -NCT02935907 -NCT02933242 -NCT02935920 -NCT02933255 -NCT02935946 -NCT02933294 -NCT02935985 -NCT02933307 -NCT02936024 -NCT02933320 -NCT02936089 -NCT02933333 -NCT02936102 -NCT02933411 -NCT02936167 -NCT02933476 -NCT02936193 -NCT02933580 -NCT02936206 -NCT02933736 -NCT02936258 -NCT02933749 -NCT02936323 -NCT02933775 -NCT02936375 -NCT02933801 -NCT02936388 -NCT02933892 -NCT02936492 -NCT02933944 -NCT02936531 -NCT02933957 -NCT02936596 -NCT02934152 -NCT02936739 -NCT02934204 -NCT02942238 -NCT02936765 -NCT02939456 -NCT02936804 -NCT02939443 -NCT02936817 -NCT02939573 -NCT02936856 -NCT02939586 -NCT02936947 -NCT02939612 -NCT02936986 -NCT02939651 -NCT02936999 -NCT02939664 -NCT02937103 -NCT02939729 -NCT02937116 -NCT02939755 -NCT02937155 -NCT02939807 -NCT02937233 -NCT02939833 -NCT02937246 -NCT02939846 -NCT02937272 -NCT02940067 -NCT02937311 -NCT02940119 -NCT02937402 -NCT02940132 -NCT02937428 -NCT02940223 -NCT02937493 -NCT02940262 -NCT02937506 -NCT02940301 -NCT02937519 -NCT02940470 -NCT02937571 -NCT02940483 -NCT02937662 -NCT02940496 -NCT02937675 -NCT02940613 -NCT02937727 -NCT02940704 -NCT02937740 -NCT02940782 -NCT02937818 -NCT02940860 -NCT02937844 -NCT02940925 -NCT02937948 -NCT02940990 -NCT02938000 -NCT02941003 -NCT02938104 -NCT02941185 -NCT02938182 -NCT02941211 -NCT02938195 -NCT02941263 -NCT02938273 -NCT02941276 -NCT02938299 -NCT02941302 -NCT02938442 -NCT02941328 -NCT02938546 -NCT02941471 -NCT02938585 -NCT02941484 -NCT02938624 -NCT02941497 -NCT02938689 -NCT02941523 -NCT02938715 -NCT02941536 -NCT02938741 -NCT02941562 -NCT02938767 -NCT02941601 -NCT02938780 -NCT02941627 -NCT02938793 -NCT02941640 -NCT02938858 -NCT02941718 -NCT02938988 -NCT02941744 -NCT02939014 -NCT02941770 -NCT02939027 -NCT02941783 -NCT02939040 -NCT02941835 -NCT02939079 -NCT02941887 -NCT02939118 -NCT02941926 -NCT02939183 -NCT02941965 -NCT02939274 -NCT02942043 -NCT02939300 -NCT02942095 -NCT02939326 -NCT02942121 -NCT02939378 -NCT02942173 -NCT02939404 -NCT02947373 -NCT02942251 -NCT02944708 -NCT02942264 -NCT02944643 -NCT02942277 -NCT02944721 -NCT02942329 -NCT02944747 -NCT02942355 -NCT02944799 -NCT02942433 -NCT02944812 -NCT02942498 -NCT02944825 -NCT02942524 -NCT02944864 -NCT02942563 -NCT02945033 -NCT02942615 -NCT02945085 -NCT02942628 -NCT02945098 -NCT02942641 -NCT02945111 -NCT02942693 -NCT02945189 -NCT02942706 -NCT02945215 -NCT02942758 -NCT02945267 -NCT02942797 -NCT02945371 -NCT02943031 -NCT02945566 -NCT02943070 -NCT02945579 -NCT02943083 -NCT02945605 -NCT02943109 -NCT02945631 -NCT02943174 -NCT02945761 -NCT02943252 -NCT02945800 -NCT02943265 -NCT02945813 -NCT02943278 -NCT02945826 -NCT02943304 -NCT02945852 -NCT02943317 -NCT02945891 -NCT02943447 -NCT02945969 -NCT02943473 -NCT02945995 -NCT02943486 -NCT02946008 -NCT02943603 -NCT02946021 -NCT02943642 -NCT02946138 -NCT02943655 -NCT02946359 -NCT02943668 -NCT02946528 -NCT02943733 -NCT02946606 -NCT02943746 -NCT02946619 -NCT02943798 -NCT02946645 -NCT02943824 -NCT02946671 -NCT02943837 -NCT02946697 -NCT02943850 -NCT02946710 -NCT02944032 -NCT02946775 -NCT02944045 -NCT02946840 -NCT02944136 -NCT02946866 -NCT02944162 -NCT02946918 -NCT02944175 -NCT02946996 -NCT02944188 -NCT02947022 -NCT02944201 -NCT02947035 -NCT02944344 -NCT02947048 -NCT02944357 -NCT02947061 -NCT02944396 -NCT02947113 -NCT02944435 -NCT02947152 -NCT02944513 -NCT02947165 -NCT02944539 -NCT02947243 -NCT02944565 -NCT02947256 -NCT02944578 -NCT02947347 -NCT02944604 -NCT02947360 -NCT02944617 -NCT02953301 -NCT02947386 -NCT02950324 -NCT02947399 -NCT02950259 -NCT02947685 -NCT02950337 -NCT02947841 -NCT02950402 -NCT02947945 -NCT02950428 -NCT02947958 -NCT02950480 -NCT02947971 -NCT02950545 -NCT02947984 -NCT02950662 -NCT02948023 -NCT02950727 -NCT02948062 -NCT02950753 -NCT02948075 -NCT02950766 -NCT02948088 -NCT02950792 -NCT02948101 -NCT02950987 -NCT02948166 -NCT02951078 -NCT02948179 -NCT02951091 -NCT02948218 -NCT02951117 -NCT02948244 -NCT02951156 -NCT02948283 -NCT02951195 -NCT02948309 -NCT02951234 -NCT02948348 -NCT02951325 -NCT02948426 -NCT02951481 -NCT02948491 -NCT02951585 -NCT02948543 -NCT02951611 -NCT02948699 -NCT02951637 -NCT02948712 -NCT02951702 -NCT02948738 -NCT02951715 -NCT02948751 -NCT02951728 -NCT02948764 -NCT02951767 -NCT02948790 -NCT02951819 -NCT02948842 -NCT02951832 -NCT02948907 -NCT02951897 -NCT02949076 -NCT02952183 -NCT02949128 -NCT02952209 -NCT02949167 -NCT02952248 -NCT02949219 -NCT02952261 -NCT02949258 -NCT02952456 -NCT02949284 -NCT02952469 -NCT02949310 -NCT02952508 -NCT02949336 -NCT02952534 -NCT02949440 -NCT02952573 -NCT02949622 -NCT02952586 -NCT02949700 -NCT02952612 -NCT02949791 -NCT02952625 -NCT02949843 -NCT02952677 -NCT02949895 -NCT02952729 -NCT02949947 -NCT02952781 -NCT02950025 -NCT02952820 -NCT02950038 -NCT02952885 -NCT02950051 -NCT02952898 -NCT02950064 -NCT02952924 -NCT02950077 -NCT02952989 -NCT02950090 -NCT02953158 -NCT02950103 -NCT02953197 -NCT02950129 -NCT02953223 -NCT02950155 -NCT02953249 -NCT02950220 -NCT02958345 -NCT02953340 -NCT02955550 -NCT02953431 -NCT02955537 -NCT02953457 -NCT02955589 -NCT02953509 -NCT02955628 -NCT02953561 -NCT02955667 -NCT02953652 -NCT02955680 -NCT02953704 -NCT02955758 -NCT02953717 -NCT02955771 -NCT02953730 -NCT02955797 -NCT02953743 -NCT02955810 -NCT02953782 -NCT02955823 -NCT02953808 -NCT02955901 -NCT02953834 -NCT02955927 -NCT02953860 -NCT02955940 -NCT02953912 -NCT02956213 -NCT02954055 -NCT02956239 -NCT02954107 -NCT02956265 -NCT02954172 -NCT02956291 -NCT02954289 -NCT02956382 -NCT02954302 -NCT02956473 -NCT02954354 -NCT02956512 -NCT02954406 -NCT02956525 -NCT02954432 -NCT02956551 -NCT02954445 -NCT02956668 -NCT02954471 -NCT02956681 -NCT02954510 -NCT02956720 -NCT02954523 -NCT02956772 -NCT02954536 -NCT02956798 -NCT02954575 -NCT02956876 -NCT02954601 -NCT02956889 -NCT02954640 -NCT02956915 -NCT02954653 -NCT02956980 -NCT02954666 -NCT02957019 -NCT02954705 -NCT02957032 -NCT02954718 -NCT02957071 -NCT02954757 -NCT02957136 -NCT02954783 -NCT02957149 -NCT02954796 -NCT02957227 -NCT02954809 -NCT02957266 -NCT02954874 -NCT02957474 -NCT02954900 -NCT02957513 -NCT02954913 -NCT02957526 -NCT02954991 -NCT02957565 -NCT02955043 -NCT02957708 -NCT02955069 -NCT02957747 -NCT02955082 -NCT02957968 -NCT02955147 -NCT02957981 -NCT02955173 -NCT02958033 -NCT02955199 -NCT02958059 -NCT02955225 -NCT02958111 -NCT02955251 -NCT02958150 -NCT02955290 -NCT02958163 -NCT02955329 -NCT02958267 -NCT02955368 -NCT02958319 -NCT02955381 -NCT02958332 -NCT02955394 -NCT02963584 -NCT02958410 -NCT02960672 -NCT02958436 -NCT02960646 -NCT02958449 -NCT02960724 -NCT02958462 -NCT02960828 -NCT02958566 -NCT02960906 -NCT02958579 -NCT02960984 -NCT02958605 -NCT02960997 -NCT02958774 -NCT02961114 -NCT02958787 -NCT02961127 -NCT02958813 -NCT02961140 -NCT02958826 -NCT02961218 -NCT02958852 -NCT02961257 -NCT02958878 -NCT02961270 -NCT02958930 -NCT02961283 -NCT02958969 -NCT02961335 -NCT02959047 -NCT02961374 -NCT02959125 -NCT02961426 -NCT02959151 -NCT02961647 -NCT02959164 -NCT02961790 -NCT02959177 -NCT02961816 -NCT02959294 -NCT02961881 -NCT02959320 -NCT02961907 -NCT02959359 -NCT02961959 -NCT02959385 -NCT02961998 -NCT02959398 -NCT02962063 -NCT02959437 -NCT02962115 -NCT02959450 -NCT02962154 -NCT02959463 -NCT02962167 -NCT02959502 -NCT02962180 -NCT02959541 -NCT02962219 -NCT02959554 -NCT02962284 -NCT02959619 -NCT02962388 -NCT02959671 -NCT02962401 -NCT02959788 -NCT02962414 -NCT02959853 -NCT02962427 -NCT02959879 -NCT02962557 -NCT02959905 -NCT02962661 -NCT02959918 -NCT02962804 -NCT02959931 -NCT02962895 -NCT02959957 -NCT02962908 -NCT02959983 -NCT02962947 -NCT02960022 -NCT02962999 -NCT02960048 -NCT02963038 -NCT02960087 -NCT02963051 -NCT02960178 -NCT02963090 -NCT02960191 -NCT02963129 -NCT02960230 -NCT02963155 -NCT02960243 -NCT02963168 -NCT02960295 -NCT02963207 -NCT02960399 -NCT02963337 -NCT02960477 -NCT02963363 -NCT02960503 -NCT02963389 -NCT02960542 -NCT02963428 -NCT02960555 -NCT02963454 -NCT02960594 -NCT02963493 -NCT02960607 -NCT02968758 -NCT02963597 -NCT02966223 -NCT02963610 -NCT02966171 -NCT02963662 -NCT02966249 -NCT02963740 -NCT02966327 -NCT02963831 -NCT02966366 -NCT02963896 -NCT02966431 -NCT02963974 -NCT02966483 -NCT02964013 -NCT02966509 -NCT02964078 -NCT02966535 -NCT02964130 -NCT02966548 -NCT02964169 -NCT02966561 -NCT02964182 -NCT02966574 -NCT02964195 -NCT02966587 -NCT02964234 -NCT02966691 -NCT02964260 -NCT02966730 -NCT02964273 -NCT02966756 -NCT02964286 -NCT02966821 -NCT02964364 -NCT02967029 -NCT02964377 -NCT02967042 -NCT02964416 -NCT02967094 -NCT02964455 -NCT02967107 -NCT02964468 -NCT02967133 -NCT02964494 -NCT02967146 -NCT02964507 -NCT02967250 -NCT02964559 -NCT02967276 -NCT02964689 -NCT02967289 -NCT02964702 -NCT02967341 -NCT02964754 -NCT02967380 -NCT02964806 -NCT02967406 -NCT02964858 -NCT02967445 -NCT02964871 -NCT02967458 -NCT02964884 -NCT02967497 -NCT02964910 -NCT02967536 -NCT02964988 -NCT02967692 -NCT02965001 -NCT02967770 -NCT02965027 -NCT02967822 -NCT02965092 -NCT02967887 -NCT02965157 -NCT02967926 -NCT02965209 -NCT02968004 -NCT02965248 -NCT02968043 -NCT02965352 -NCT02968069 -NCT02965365 -NCT02968147 -NCT02965378 -NCT02968160 -NCT02965417 -NCT02968303 -NCT02965495 -NCT02968329 -NCT02965521 -NCT02968355 -NCT02965534 -NCT02968394 -NCT02965573 -NCT02968472 -NCT02965716 -NCT02968485 -NCT02965755 -NCT02968511 -NCT02965885 -NCT02968563 -NCT02965950 -NCT02968615 -NCT02965976 -NCT02968641 -NCT02966041 -NCT02968680 -NCT02966054 -NCT02968732 -NCT02966093 -NCT02974426 -NCT02968784 -NCT02971748 -NCT02968810 -NCT02971709 -NCT02968849 -NCT02971761 -NCT02968940 -NCT02971878 -NCT02968966 -NCT02971956 -NCT02969031 -NCT02971995 -NCT02969083 -NCT02972034 -NCT02969096 -NCT02972047 -NCT02969122 -NCT02972060 -NCT02969148 -NCT02972073 -NCT02969278 -NCT02972138 -NCT02969291 -NCT02972177 -NCT02969473 -NCT02972229 -NCT02969577 -NCT02972242 -NCT02969590 -NCT02972268 -NCT02969681 -NCT02972320 -NCT02969772 -NCT02972333 -NCT02969837 -NCT02972346 -NCT02969980 -NCT02972372 -NCT02970097 -NCT02972541 -NCT02970136 -NCT02972580 -NCT02970266 -NCT02972671 -NCT02970318 -NCT02972749 -NCT02970396 -NCT02972801 -NCT02970448 -NCT02972840 -NCT02970500 -NCT02973009 -NCT02970513 -NCT02973061 -NCT02970539 -NCT02973087 -NCT02970617 -NCT02973113 -NCT02970682 -NCT02973139 -NCT02970695 -NCT02973191 -NCT02970786 -NCT02973217 -NCT02970877 -NCT02973230 -NCT02970890 -NCT02973282 -NCT02970916 -NCT02973386 -NCT02970981 -NCT02973399 -NCT02971059 -NCT02973438 -NCT02971124 -NCT02973490 -NCT02971163 -NCT02973503 -NCT02971176 -NCT02973516 -NCT02971189 -NCT02973555 -NCT02971254 -NCT02973672 -NCT02971293 -NCT02973685 -NCT02971306 -NCT02973711 -NCT02971319 -NCT02973737 -NCT02971345 -NCT02973763 -NCT02971358 -NCT02973776 -NCT02971397 -NCT02973789 -NCT02971410 -NCT02973841 -NCT02971436 -NCT02973971 -NCT02971475 -NCT02973997 -NCT02971501 -NCT02974075 -NCT02971631 -NCT02974205 -NCT02971657 -NCT02974218 -NCT02971683 -NCT02974335 -NCT02971696 -NCT02979730 -NCT02974556 -NCT02977182 -NCT02974595 -NCT02977169 -NCT02974621 -NCT02977195 -NCT02974647 -NCT02977312 -NCT02974725 -NCT02977364 -NCT02974738 -NCT02977403 -NCT02974751 -NCT02977429 -NCT02974764 -NCT02977468 -NCT02974790 -NCT02977494 -NCT02974803 -NCT02977507 -NCT02974907 -NCT02977572 -NCT02974933 -NCT02977637 -NCT02975128 -NCT02977663 -NCT02975141 -NCT02977689 -NCT02975284 -NCT02977780 -NCT02975297 -NCT02977832 -NCT02975401 -NCT02977845 -NCT02975505 -NCT02977858 -NCT02975570 -NCT02977897 -NCT02975609 -NCT02978014 -NCT02975661 -NCT02978105 -NCT02975687 -NCT02978144 -NCT02975700 -NCT02978170 -NCT02975739 -NCT02978196 -NCT02975804 -NCT02978209 -NCT02975843 -NCT02978222 -NCT02975869 -NCT02978235 -NCT02975882 -NCT02978261 -NCT02975921 -NCT02978313 -NCT02975934 -NCT02978404 -NCT02976051 -NCT02978443 -NCT02976064 -NCT02978495 -NCT02976116 -NCT02978508 -NCT02976142 -NCT02978547 -NCT02976181 -NCT02978612 -NCT02976246 -NCT02978625 -NCT02976259 -NCT02978677 -NCT02976402 -NCT02978716 -NCT02976441 -NCT02978742 -NCT02976493 -NCT02978755 -NCT02976558 -NCT02978781 -NCT02976675 -NCT02978794 -NCT02976740 -NCT02978820 -NCT02976818 -NCT02978859 -NCT02976857 -NCT02979093 -NCT02976870 -NCT02979119 -NCT02976883 -NCT02979288 -NCT02976896 -NCT02979366 -NCT02976909 -NCT02979392 -NCT02976922 -NCT02979431 -NCT02977013 -NCT02979483 -NCT02977052 -NCT02979509 -NCT02977065 -NCT02979522 -NCT02977091 -NCT02979548 -NCT02977143 -NCT02979691 -NCT02977156 -NCT02985541 -NCT02979821 -NCT02982486 -NCT02979899 -NCT02982473 -NCT02979977 -NCT02982512 -NCT02980029 -NCT02982564 -NCT02980211 -NCT02982694 -NCT02980263 -NCT02982720 -NCT02980302 -NCT02982811 -NCT02980315 -NCT02982941 -NCT02980341 -NCT02982954 -NCT02980406 -NCT02983006 -NCT02980445 -NCT02983032 -NCT02980510 -NCT02983045 -NCT02980523 -NCT02983071 -NCT02980601 -NCT02983097 -NCT02980640 -NCT02983253 -NCT02980653 -NCT02983279 -NCT02980666 -NCT02983305 -NCT02980731 -NCT02983578 -NCT02980770 -NCT02983604 -NCT02980783 -NCT02983617 -NCT02980809 -NCT02983760 -NCT02980861 -NCT02983799 -NCT02980926 -NCT02983903 -NCT02980965 -NCT02983942 -NCT02980991 -NCT02984072 -NCT02981056 -NCT02984163 -NCT02981069 -NCT02984254 -NCT02981108 -NCT02984384 -NCT02981121 -NCT02984410 -NCT02981147 -NCT02984501 -NCT02981199 -NCT02984540 -NCT02981303 -NCT02984566 -NCT02981342 -NCT02984618 -NCT02981368 -NCT02984631 -NCT02981433 -NCT02984683 -NCT02981459 -NCT02984761 -NCT02981485 -NCT02984930 -NCT02981498 -NCT02984943 -NCT02981524 -NCT02984969 -NCT02981628 -NCT02984995 -NCT02981641 -NCT02985008 -NCT02981719 -NCT02985021 -NCT02981745 -NCT02985073 -NCT02981784 -NCT02985125 -NCT02981862 -NCT02985151 -NCT02981875 -NCT02985190 -NCT02981914 -NCT02985203 -NCT02981940 -NCT02985255 -NCT02982096 -NCT02985268 -NCT02982148 -NCT02985333 -NCT02982161 -NCT02985372 -NCT02982213 -NCT02985385 -NCT02982304 -NCT02985411 -NCT02982382 -NCT02985424 -NCT02982395 -NCT02985528 -NCT02982421 -NCT02991638 -NCT02985723 -NCT02988843 -NCT02985801 -NCT02988817 -NCT02985840 -NCT02988869 -NCT02985957 -NCT02988921 -NCT02986100 -NCT02988934 -NCT02986152 -NCT02988960 -NCT02986178 -NCT02988986 -NCT02986230 -NCT02988999 -NCT02986334 -NCT02989012 -NCT02986347 -NCT02989064 -NCT02986360 -NCT02989090 -NCT02986373 -NCT02989103 -NCT02986451 -NCT02989142 -NCT02986516 -NCT02989259 -NCT02986568 -NCT02989337 -NCT02986646 -NCT02989376 -NCT02986685 -NCT02989428 -NCT02986815 -NCT02989480 -NCT02986828 -NCT02989493 -NCT02986854 -NCT02989519 -NCT02986867 -NCT02989584 -NCT02986919 -NCT02989623 -NCT02986932 -NCT02989636 -NCT02987010 -NCT02989675 -NCT02987127 -NCT02989701 -NCT02987153 -NCT02989714 -NCT02987166 -NCT02989844 -NCT02987244 -NCT02989857 -NCT02987257 -NCT02989870 -NCT02987296 -NCT02989922 -NCT02987400 -NCT02989974 -NCT02987478 -NCT02990130 -NCT02987504 -NCT02990221 -NCT02987543 -NCT02990338 -NCT02987699 -NCT02990416 -NCT02987738 -NCT02990468 -NCT02987751 -NCT02990481 -NCT02987764 -NCT02990494 -NCT02987790 -NCT02990585 -NCT02987829 -NCT02990676 -NCT02987881 -NCT02990728 -NCT02987907 -NCT02990780 -NCT02987959 -NCT02990845 -NCT02987985 -NCT02990936 -NCT02987998 -NCT02991066 -NCT02988063 -NCT02991092 -NCT02988219 -NCT02991196 -NCT02988271 -NCT02991209 -NCT02988440 -NCT02991339 -NCT02988518 -NCT02991352 -NCT02988596 -NCT02991456 -NCT02988635 -NCT02991482 -NCT02988648 -NCT02991547 -NCT02988726 -NCT02991560 -NCT02988765 -NCT02991612 -NCT02988804 -NCT02996773 -NCT02991651 -NCT02993991 -NCT02991677 -NCT02993913 -NCT02991807 -NCT02994030 -NCT02991833 -NCT02994069 -NCT02991898 -NCT02994186 -NCT02991911 -NCT02994225 -NCT02992015 -NCT02994251 -NCT02992067 -NCT02994342 -NCT02992132 -NCT02994420 -NCT02992145 -NCT02994446 -NCT02992171 -NCT02994459 -NCT02992210 -NCT02994472 -NCT02992236 -NCT02994485 -NCT02992262 -NCT02994498 -NCT02992301 -NCT02994511 -NCT02992327 -NCT02994576 -NCT02992340 -NCT02994602 -NCT02992353 -NCT02994706 -NCT02992379 -NCT02994758 -NCT02992405 -NCT02994797 -NCT02992483 -NCT02994823 -NCT02992522 -NCT02994849 -NCT02992574 -NCT02994888 -NCT02992665 -NCT02994914 -NCT02992678 -NCT02994927 -NCT02992743 -NCT02994953 -NCT02992782 -NCT02995187 -NCT02992808 -NCT02995304 -NCT02992821 -NCT02995330 -NCT02992834 -NCT02995356 -NCT02992860 -NCT02995434 -NCT02992886 -NCT02995525 -NCT02992912 -NCT02995538 -NCT02992925 -NCT02995603 -NCT02992951 -NCT02995655 -NCT02992977 -NCT02995668 -NCT02992990 -NCT02995733 -NCT02993042 -NCT02995772 -NCT02993068 -NCT02995798 -NCT02993094 -NCT02995850 -NCT02993146 -NCT02995889 -NCT02993159 -NCT02995902 -NCT02993198 -NCT02995915 -NCT02993211 -NCT02995980 -NCT02993250 -NCT02996110 -NCT02993315 -NCT02996201 -NCT02993497 -NCT02996214 -NCT02993523 -NCT02996240 -NCT02993562 -NCT02996266 -NCT02993705 -NCT02996461 -NCT02993731 -NCT02996474 -NCT02993744 -NCT02996487 -NCT02993783 -NCT02996552 -NCT02993796 -NCT02996565 -NCT02993822 -NCT02996617 -NCT02993900 -NCT03002532 -NCT02996825 -NCT02999672 -NCT02996838 -NCT02999646 -NCT02996877 -NCT02999698 -NCT02996955 -NCT02999711 -NCT02997150 -NCT02999750 -NCT02997163 -NCT02999854 -NCT02997176 -NCT02999893 -NCT02997202 -NCT02999958 -NCT02997228 -NCT02999997 -NCT02997241 -NCT03000036 -NCT02997254 -NCT03000049 -NCT02997332 -NCT03000127 -NCT02997358 -NCT03000166 -NCT02997501 -NCT03000179 -NCT02997527 -NCT03000231 -NCT02997553 -NCT03000257 -NCT02997761 -NCT03000374 -NCT02997787 -NCT03000452 -NCT02997839 -NCT03000517 -NCT02997943 -NCT03000634 -NCT02997956 -NCT03000660 -NCT02997969 -NCT03000712 -NCT02997982 -NCT03000764 -NCT02997995 -NCT03000790 -NCT02998047 -NCT03000816 -NCT02998086 -NCT03000920 -NCT02998151 -NCT03000933 -NCT02998268 -NCT03001050 -NCT02998359 -NCT03001167 -NCT02998385 -NCT03001323 -NCT02998450 -NCT03001349 -NCT02998476 -NCT03001362 -NCT02998528 -NCT03001401 -NCT02998567 -NCT03001453 -NCT02998619 -NCT03001466 -NCT02998658 -NCT03001570 -NCT02998671 -NCT03001583 -NCT02998736 -NCT03001596 -NCT02998788 -NCT03001609 -NCT02998983 -NCT03001739 -NCT02998996 -NCT03001791 -NCT02999048 -NCT03001843 -NCT02999074 -NCT03001869 -NCT02999087 -NCT03001882 -NCT02999152 -NCT03001895 -NCT02999165 -NCT03002012 -NCT02999217 -NCT03002051 -NCT02999295 -NCT03002064 -NCT02999308 -NCT03002103 -NCT02999386 -NCT03002220 -NCT02999412 -NCT03002298 -NCT02999451 -NCT03002324 -NCT02999477 -NCT03002376 -NCT02999529 -NCT03002454 -NCT02999594 -NCT03002493 -NCT02999633 -NCT03007953 -NCT03002623 -NCT03005756 -NCT03002766 -NCT03005743 -NCT03002805 -NCT03005834 -NCT03002818 -NCT03005860 -NCT03002831 -NCT03005912 -NCT03002844 -NCT03006029 -NCT03002909 -NCT03006055 -NCT03002922 -NCT03006172 -NCT03002974 -NCT03006185 -NCT03003039 -NCT03006224 -NCT03003065 -NCT03006263 -NCT03003078 -NCT03006276 -NCT03003195 -NCT03006302 -NCT03003208 -NCT03006354 -NCT03003234 -NCT03006432 -NCT03003273 -NCT03006445 -NCT03003325 -NCT03006562 -NCT03003468 -NCT03006575 -NCT03003507 -NCT03006588 -NCT03003520 -NCT03006614 -NCT03003533 -NCT03006679 -NCT03003546 -NCT03006705 -NCT03003572 -NCT03006718 -NCT03003637 -NCT03006796 -NCT03003663 -NCT03006848 -NCT03003676 -NCT03006887 -NCT03003728 -NCT03006926 -NCT03003962 -NCT03006978 -NCT03004105 -NCT03007004 -NCT03004118 -NCT03007030 -NCT03004183 -NCT03007095 -NCT03004287 -NCT03007147 -NCT03004534 -NCT03007173 -NCT03004573 -NCT03007212 -NCT03004586 -NCT03007225 -NCT03004599 -NCT03007251 -NCT03004677 -NCT03007277 -NCT03004768 -NCT03007316 -NCT03004833 -NCT03007381 -NCT03004924 -NCT03007407 -NCT03004976 -NCT03007420 -NCT03005002 -NCT03007433 -NCT03005015 -NCT03007446 -NCT03005093 -NCT03007550 -NCT03005145 -NCT03007563 -NCT03005275 -NCT03007589 -NCT03005314 -NCT03007641 -NCT03005379 -NCT03007719 -NCT03005392 -NCT03007732 -NCT03005444 -NCT03007771 -NCT03005522 -NCT03007797 -NCT03005561 -NCT03007823 -NCT03005587 -NCT03007836 -NCT03005600 -NCT03007849 -NCT03005639 -NCT03007875 -NCT03005717 -NCT03018821 -NCT03007979 -NCT03017339 -NCT03007992 -NCT03017391 -NCT03008005 -NCT03017404 -NCT03008018 -NCT03017417 -NCT03008031 -NCT03017443 -NCT03008044 -NCT03017456 -NCT03008109 -NCT03017482 -NCT03008148 -NCT03017521 -NCT03008161 -NCT03017560 -NCT03008187 -NCT03017573 -NCT03008252 -NCT03017599 -NCT03008278 -NCT03017612 -NCT03008291 -NCT03017716 -NCT03008304 -NCT03017768 -NCT03008330 -NCT03017807 -NCT03008343 -NCT03017820 -NCT03008369 -NCT03017833 -NCT03008408 -NCT03018080 -NCT03008447 -NCT03018093 -NCT03008499 -NCT03018132 -NCT03008512 -NCT03018223 -NCT03008551 -NCT03018249 -NCT03008655 -NCT03018288 -NCT03008668 -NCT03018405 -NCT03008694 -NCT03018418 -NCT03008707 -NCT03018431 -NCT03008733 -NCT03018613 -NCT03008824 -NCT03018626 -NCT03008993 -NCT03018652 -NCT03009019 -NCT03018808 -NCT03009058 -NCT03014687 -NCT03014726 -NCT03014804 -NCT03014843 -NCT03014921 -NCT03014973 -NCT03014986 -NCT03015077 -NCT03015129 -NCT03015220 -NCT03015233 -NCT03015311 -NCT03015324 -NCT03015363 -NCT03015415 -NCT03015493 -NCT03015532 -NCT03015675 -NCT03015701 -NCT03015727 -NCT03015740 -NCT03015753 -NCT03015779 -NCT03015792 -NCT03015883 -NCT03015896 -NCT03015922 -NCT03015948 -NCT03015987 -NCT03016000 -NCT03016026 -NCT03016091 -NCT03016130 -NCT03016156 -NCT03016195 -NCT03016286 -NCT03016299 -NCT03016312 -NCT03016338 -NCT03016377 -NCT03016403 -NCT03016637 -NCT03016715 -NCT03016728 -NCT03016741 -NCT03016806 -NCT03016819 -NCT03016871 -NCT03016910 -NCT03016949 -NCT03016988 -NCT03017053 -NCT03017131 -NCT03017183 -NCT03017248 -NCT03017274 -NCT03017326 -NCT03009201 -NCT03012100 -NCT03009214 -NCT03012009 -NCT03009227 -NCT03012152 -NCT03009240 -NCT03012178 -NCT03009253 -NCT03012230 -NCT03009292 -NCT03012256 -NCT03009318 -NCT03012282 -NCT03009331 -NCT03012321 -NCT03009344 -NCT03012334 -NCT03009461 -NCT03012399 -NCT03009565 -NCT03012425 -NCT03009591 -NCT03012477 -NCT03009604 -NCT03012529 -NCT03009630 -NCT03012555 -NCT03009643 -NCT03012581 -NCT03009682 -NCT03012594 -NCT03009760 -NCT03012620 -NCT03009981 -NCT03012672 -NCT03010033 -NCT03012776 -NCT03010059 -NCT03012789 -NCT03010085 -NCT03012841 -NCT03010124 -NCT03012880 -NCT03010176 -NCT03012893 -NCT03010358 -NCT03012932 -NCT03010371 -NCT03012945 -NCT03010449 -NCT03013010 -NCT03010540 -NCT03013101 -NCT03010553 -NCT03013127 -NCT03010579 -NCT03013153 -NCT03010631 -NCT03013166 -NCT03010657 -NCT03013179 -NCT03010709 -NCT03013218 -NCT03010722 -NCT03013335 -NCT03010735 -NCT03013348 -NCT03010813 -NCT03013387 -NCT03010943 -NCT03013413 -NCT03010982 -NCT03013491 -NCT03011034 -NCT03013504 -NCT03011060 -NCT03013608 -NCT03011255 -NCT03013647 -NCT03011294 -NCT03013686 -NCT03011307 -NCT03013699 -NCT03011320 -NCT03013712 -NCT03011359 -NCT03013881 -NCT03011372 -NCT03013933 -NCT03011463 -NCT03013946 -NCT03011476 -NCT03013985 -NCT03011489 -NCT03013998 -NCT03011528 -NCT03014024 -NCT03011606 -NCT03014037 -NCT03011671 -NCT03014076 -NCT03011736 -NCT03014154 -NCT03011749 -NCT03014258 -NCT03011775 -NCT03014297 -NCT03011814 -NCT03014648 -NCT03011840 -NCT03024684 -NCT03018912 -NCT03022032 -NCT03019003 -NCT03021993 -NCT03019029 -NCT03022110 -NCT03019055 -NCT03022123 -NCT03019172 -NCT03022162 -NCT03019237 -NCT03022409 -NCT03019276 -NCT03022500 -NCT03019328 -NCT03022513 -NCT03019380 -NCT03022552 -NCT03019393 -NCT03022565 -NCT03019510 -NCT03022578 -NCT03019536 -NCT03022656 -NCT03019575 -NCT03022695 -NCT03019588 -NCT03022734 -NCT03019640 -NCT03022747 -NCT03019666 -NCT03022786 -NCT03019679 -NCT03022825 -NCT03019757 -NCT03022864 -NCT03019939 -NCT03022968 -NCT03019991 -NCT03022994 -NCT03020004 -NCT03023007 -NCT03020017 -NCT03023046 -NCT03020030 -NCT03023098 -NCT03020121 -NCT03023111 -NCT03020147 -NCT03023124 -NCT03020160 -NCT03023137 -NCT03020212 -NCT03023189 -NCT03020238 -NCT03023319 -NCT03020251 -NCT03023345 -NCT03020303 -NCT03023358 -NCT03020329 -NCT03023384 -NCT03020498 -NCT03023397 -NCT03020511 -NCT03023423 -NCT03020550 -NCT03023436 -NCT03020602 -NCT03023462 -NCT03020797 -NCT03023527 -NCT03020823 -NCT03023592 -NCT03020862 -NCT03023631 -NCT03020888 -NCT03023683 -NCT03020966 -NCT03023722 -NCT03021057 -NCT03023774 -NCT03021122 -NCT03023878 -NCT03021135 -NCT03023904 -NCT03021200 -NCT03024060 -NCT03021330 -NCT03024151 -NCT03021395 -NCT03024190 -NCT03021408 -NCT03024216 -NCT03021460 -NCT03024242 -NCT03021486 -NCT03024333 -NCT03021603 -NCT03024359 -NCT03021629 -NCT03024437 -NCT03021668 -NCT03024450 -NCT03021681 -NCT03024489 -NCT03021720 -NCT03024580 -NCT03021785 -NCT03024658 -NCT03021889 -NCT03138967 -NCT03024749 -NCT03135938 -NCT03024996 -NCT03027284 -NCT03025035 -NCT03135951 -NCT03025139 -NCT03135964 -NCT03025152 -NCT03135977 -NCT03025256 -NCT03136003 -NCT03025269 -NCT03136055 -NCT03025464 -NCT03136146 -NCT03025477 -NCT03136172 -NCT03025516 -NCT03136198 -NCT03025529 -NCT03136328 -NCT03025633 -NCT03136341 -NCT03025646 -NCT03136354 -NCT03025672 -NCT03136367 -NCT03025724 -NCT03136406 -NCT03025750 -NCT03136445 -NCT03025776 -NCT03136497 -NCT03025841 -NCT03136562 -NCT03025880 -NCT03136575 -NCT03025893 -NCT03136627 -NCT03025906 -NCT03136640 -NCT03025932 -NCT03136653 -NCT03025958 -NCT03136783 -NCT03025971 -NCT03136991 -NCT03025984 -NCT03137004 -NCT03026062 -NCT03137069 -NCT03026075 -NCT03137121 -NCT03026088 -NCT03137147 -NCT03026101 -NCT03137173 -NCT03026140 -NCT03137186 -NCT03026166 -NCT03137511 -NCT03026374 -NCT03137537 -NCT03026439 -NCT03137576 -NCT03026452 -NCT03137693 -NCT03026478 -NCT03137758 -NCT03026491 -NCT03137771 -NCT03026504 -NCT03137823 -NCT03026517 -NCT03137888 -NCT03026556 -NCT03137953 -NCT03026686 -NCT03138005 -NCT03026712 -NCT03138031 -NCT03026803 -NCT03138044 -NCT03026842 -NCT03138070 -NCT03026881 -NCT03138083 -NCT03026933 -NCT03138161 -NCT03026972 -NCT03138213 -NCT03026998 -NCT03138239 -NCT03027037 -NCT03138408 -NCT03027063 -NCT03138499 -NCT03027076 -NCT03138512 -NCT03027089 -NCT03138538 -NCT03027102 -NCT03138642 -NCT03027115 -NCT03138655 -NCT03027128 -NCT03138720 -NCT03027154 -NCT03138824 -NCT03027258 -NCT03138889 -NCT03027310 -NCT03132922 -NCT03027349 -NCT03132961 -NCT03027388 -NCT03133221 -NCT03027401 -NCT03133247 -NCT03027427 -NCT03133273 -NCT03027479 -NCT03133351 -NCT03027492 -NCT03133507 -NCT03027544 -NCT03133520 -NCT03027609 -NCT03133533 -NCT03027648 -NCT03133546 -NCT03027739 -NCT03133637 -NCT03027752 -NCT03133650 -NCT03027973 -NCT03133663 -NCT03027986 -NCT03133780 -NCT03028077 -NCT03133884 -NCT03028103 -NCT03133897 -NCT03028142 -NCT03134118 -NCT03028155 -NCT03134261 -NCT03028181 -NCT03134339 -NCT03028246 -NCT03134352 -NCT03028272 -NCT03134378 -NCT03028285 -NCT03134404 -NCT03028298 -NCT03134430 -NCT03028311 -NCT03134456 -NCT03028337 -NCT03134534 -NCT03028467 -NCT03134586 -NCT03028493 -NCT03134638 -NCT03028506 -NCT03134690 -NCT03028519 -NCT03134729 -NCT03028623 -NCT03134742 -NCT03028701 -NCT03134755 -NCT03028753 -NCT03134846 -NCT03028766 -NCT03134872 -NCT03028779 -NCT03134924 -NCT03028818 -NCT03134963 -NCT03028831 -NCT03135015 -NCT03028883 -NCT03135028 -NCT03028948 -NCT03135054 -NCT03028974 -NCT03135171 -NCT03029013 -NCT03135236 -NCT03029039 -NCT03135262 -NCT03029156 -NCT03135275 -NCT03029182 -NCT03135444 -NCT03029234 -NCT03135496 -NCT03029273 -NCT03135522 -NCT03029286 -NCT03135613 -NCT03029299 -NCT03135652 -NCT03029338 -NCT03135769 -NCT03029403 -NCT03135782 -NCT03029416 -NCT03135808 -NCT03029429 -NCT03135821 -NCT03029468 -NCT03135860 -NCT03029533 -NCT03135912 -NCT03029585 -NCT03135925 -NCT03029598 -NCT03132792 -NCT03132883 -NCT03132909 -NCT03029611 -NCT03032172 -NCT03029676 -NCT03032107 -NCT03029780 -NCT03032211 -NCT03029806 -NCT03032224 -NCT03029832 -NCT03032250 -NCT03029871 -NCT03032315 -NCT03029897 -NCT03032380 -NCT03029949 -NCT03032406 -NCT03029988 -NCT03032484 -NCT03030001 -NCT03044743 -NCT03030066 -NCT03044782 -NCT03030131 -NCT03044795 -NCT03030248 -NCT03044977 -NCT03030261 -NCT03045003 -NCT03030274 -NCT03045094 -NCT03030287 -NCT03045107 -NCT03030365 -NCT03045172 -NCT03030378 -NCT03045211 -NCT03030404 -NCT03045289 -NCT03030417 -NCT03045328 -NCT03030430 -NCT03045393 -NCT03030573 -NCT03045445 -NCT03030586 -NCT03045484 -NCT03030612 -NCT03045497 -NCT03030625 -NCT03131219 -NCT03030664 -NCT03131323 -NCT03030677 -NCT03131349 -NCT03030794 -NCT03131362 -NCT03030859 -NCT03131427 -NCT03030885 -NCT03131440 -NCT03030937 -NCT03131453 -NCT03031093 -NCT03131609 -NCT03031132 -NCT03131713 -NCT03031145 -NCT03131726 -NCT03031158 -NCT03131765 -NCT03031171 -NCT03131778 -NCT03031236 -NCT03131869 -NCT03031249 -NCT03131908 -NCT03031262 -NCT03131934 -NCT03031301 -NCT03131999 -NCT03031418 -NCT03132012 -NCT03031444 -NCT03132025 -NCT03031483 -NCT03132038 -NCT03031535 -NCT03132090 -NCT03031561 -NCT03132142 -NCT03031613 -NCT03132155 -NCT03031639 -NCT03132246 -NCT03031691 -NCT03132259 -NCT03031730 -NCT03132324 -NCT03031821 -NCT03132454 -NCT03031873 -NCT03132467 -NCT03031938 -NCT03132532 -NCT03031977 -NCT03132558 -NCT03032003 -NCT03132584 -NCT03032029 -NCT03132636 -NCT03032055 -NCT03132675 -NCT03032510 -NCT03043898 -NCT03032536 -NCT03043950 -NCT03032614 -NCT03043989 -NCT03032783 -NCT03044028 -NCT03032848 -NCT03044054 -NCT03033082 -NCT03044197 -NCT03033121 -NCT03044223 -NCT03033160 -NCT03044353 -NCT03033225 -NCT03044587 -NCT03033303 -NCT03044613 -NCT03033316 -NCT03044626 -NCT03033381 -NCT03044704 -NCT03033446 -NCT03044730 -NCT03033485 -NCT03039140 -NCT03039205 -NCT03039270 -NCT03039296 -NCT03039413 -NCT03039439 -NCT03039465 -NCT03039673 -NCT03039777 -NCT03039855 -NCT03040024 -NCT03040089 -NCT03040102 -NCT03040180 -NCT03040310 -NCT03040375 -NCT03040401 -NCT03040414 -NCT03040453 -NCT03040531 -NCT03040570 -NCT03040583 -NCT03040726 -NCT03040778 -NCT03040791 -NCT03040882 -NCT03040973 -NCT03040986 -NCT03040999 -NCT03041038 -NCT03041051 -NCT03041064 -NCT03041077 -NCT03041142 -NCT03041168 -NCT03041181 -NCT03041246 -NCT03041285 -NCT03041311 -NCT03041402 -NCT03041454 -NCT03041506 -NCT03041519 -NCT03041532 -NCT03041636 -NCT03041688 -NCT03041701 -NCT03041714 -NCT03041766 -NCT03041935 -NCT03042000 -NCT03042013 -NCT03042026 -NCT03042065 -NCT03042091 -NCT03042169 -NCT03042182 -NCT03042195 -NCT03042247 -NCT03042312 -NCT03042416 -NCT03042429 -NCT03042468 -NCT03042585 -NCT03042611 -NCT03042624 -NCT03042689 -NCT03042702 -NCT03042780 -NCT03042793 -NCT03042819 -NCT03042884 -NCT03042897 -NCT03042910 -NCT03043118 -NCT03043131 -NCT03043170 -NCT03043209 -NCT03043222 -NCT03043313 -NCT03043326 -NCT03043391 -NCT03043430 -NCT03043469 -NCT03043495 -NCT03043521 -NCT03043547 -NCT03043586 -NCT03043599 -NCT03043664 -NCT03043729 -NCT03043794 -NCT03043807 -NCT03043872 -NCT03043885 -NCT03033511 -NCT03036020 -NCT03033524 -NCT03035955 -NCT03033550 -NCT03036033 -NCT03033576 -NCT03036046 -NCT03033615 -NCT03036098 -NCT03033693 -NCT03036228 -NCT03033706 -NCT03036254 -NCT03033719 -NCT03036267 -NCT03033758 -NCT03036436 -NCT03033771 -NCT03036475 -NCT03033888 -NCT03036488 -NCT03033914 -NCT03036553 -NCT03033940 -NCT03036761 -NCT03033992 -NCT03036904 -NCT03034044 -NCT03036943 -NCT03034070 -NCT03036995 -NCT03034135 -NCT03037021 -NCT03034148 -NCT03037034 -NCT03034200 -NCT03037073 -NCT03034304 -NCT03037112 -NCT03034330 -NCT03037190 -NCT03034395 -NCT03037346 -NCT03034473 -NCT03037359 -NCT03034525 -NCT03037385 -NCT03034564 -NCT03037437 -NCT03034603 -NCT03037541 -NCT03034733 -NCT03037554 -NCT03034850 -NCT03037645 -NCT03034915 -NCT03037723 -NCT03034941 -NCT03037762 -NCT03034967 -NCT03037944 -NCT03035006 -NCT03038100 -NCT03035032 -NCT03038152 -NCT03035071 -NCT03038191 -NCT03035188 -NCT03038204 -NCT03035201 -NCT03038217 -NCT03035253 -NCT03038230 -NCT03035279 -NCT03038256 -NCT03035292 -NCT03038282 -NCT03035331 -NCT03038308 -NCT03035357 -NCT03038321 -NCT03035396 -NCT03038386 -NCT03035409 -NCT03038425 -NCT03035422 -NCT03038477 -NCT03035448 -NCT03038529 -NCT03035487 -NCT03038581 -NCT03035500 -NCT03038620 -NCT03035591 -NCT03038633 -NCT03035630 -NCT03038672 -NCT03035656 -NCT03038763 -NCT03035708 -NCT03038828 -NCT03035760 -NCT03038893 -NCT03035773 -NCT03038958 -NCT03035825 -NCT03039114 -NCT03035890 -NCT03039127 -NCT03035929 -NCT03131206 -NCT03045510 -NCT03048877 -NCT03045627 -NCT03048760 -NCT03045653 -NCT03048916 -NCT03045679 -NCT03048942 -NCT03045705 -NCT03048955 -NCT03045757 -NCT03048994 -NCT03045770 -NCT03049033 -NCT03045952 -NCT03128944 -NCT03045965 -NCT03128983 -NCT03046004 -NCT03128996 -NCT03046082 -NCT03129061 -NCT03046108 -NCT03129074 -NCT03046238 -NCT03129139 -NCT03046316 -NCT03129204 -NCT03046329 -NCT03129243 -NCT03046394 -NCT03129256 -NCT03046433 -NCT03129295 -NCT03046485 -NCT03129321 -NCT03046563 -NCT03129412 -NCT03046693 -NCT03129451 -NCT03046745 -NCT03129477 -NCT03046862 -NCT03129685 -NCT03046953 -NCT03129737 -NCT03046979 -NCT03129776 -NCT03046992 -NCT03129789 -NCT03047096 -NCT03129828 -NCT03047122 -NCT03129854 -NCT03047174 -NCT03129971 -NCT03047187 -NCT03130049 -NCT03047213 -NCT03130062 -NCT03047239 -NCT03130101 -NCT03047265 -NCT03130140 -NCT03047473 -NCT03130166 -NCT03047525 -NCT03130179 -NCT03047694 -NCT03130270 -NCT03047811 -NCT03130335 -NCT03047837 -NCT03130348 -NCT03047928 -NCT03130439 -NCT03047941 -NCT03130517 -NCT03047993 -NCT03130543 -NCT03048032 -NCT03130569 -NCT03048058 -NCT03130595 -NCT03048084 -NCT03130634 -NCT03048097 -NCT03130712 -NCT03048123 -NCT03130738 -NCT03048136 -NCT03130751 -NCT03048175 -NCT03130764 -NCT03048240 -NCT03130790 -NCT03048383 -NCT03130881 -NCT03048461 -NCT03130920 -NCT03048474 -NCT03130946 -NCT03048500 -NCT03130959 -NCT03048656 -NCT03130972 -NCT03048669 -NCT03131011 -NCT03048682 -NCT03131024 -NCT03048708 -NCT03131037 -NCT03049111 -NCT03051477 -NCT03049124 -NCT03051464 -NCT03049189 -NCT03051503 -NCT03049202 -NCT03051516 -NCT03049280 -NCT03051542 -NCT03049345 -NCT03051555 -NCT03049358 -NCT03051568 -NCT03049384 -NCT03051581 -NCT03049397 -NCT03051646 -NCT03049410 -NCT03051659 -NCT03049449 -NCT03051672 -NCT03049475 -NCT03051737 -NCT03049488 -NCT03051750 -NCT03049618 -NCT03051776 -NCT03049735 -NCT03051789 -NCT03049800 -NCT03051802 -NCT03049956 -NCT03051815 -NCT03049995 -NCT03051841 -NCT03050034 -NCT03051880 -NCT03050047 -NCT03051906 -NCT03050060 -NCT03052049 -NCT03050177 -NCT03052127 -NCT03050203 -NCT03052179 -NCT03050216 -NCT03052205 -NCT03050268 -NCT03052231 -NCT03050398 -NCT03052335 -NCT03050411 -NCT03052361 -NCT03050437 -NCT03052374 -NCT03050450 -NCT03127319 -NCT03050476 -NCT03127332 -NCT03050489 -NCT03127384 -NCT03050515 -NCT03127410 -NCT03050528 -NCT03127514 -NCT03050554 -NCT03127631 -NCT03050723 -NCT03127735 -NCT03050736 -NCT03127774 -NCT03050749 -NCT03127969 -NCT03050762 -NCT03127995 -NCT03050788 -NCT03128008 -NCT03050814 -NCT03128034 -NCT03050866 -NCT03128047 -NCT03050879 -NCT03128060 -NCT03050931 -NCT03128164 -NCT03050957 -NCT03128190 -NCT03050996 -NCT03128216 -NCT03051035 -NCT03128229 -NCT03051048 -NCT03128281 -NCT03051152 -NCT03128333 -NCT03051178 -NCT03128359 -NCT03051243 -NCT03128411 -NCT03051256 -NCT03128619 -NCT03051269 -NCT03128736 -NCT03051334 -NCT03128762 -NCT03051360 -NCT03128827 -NCT03051373 -NCT03128879 -NCT03051451 -NCT03128905 -NCT03052400 -NCT03055624 -NCT03052478 -NCT03055598 -NCT03052556 -NCT03055637 -NCT03052608 -NCT03055650 -NCT03052634 -NCT03055728 -NCT03052751 -NCT03055754 -NCT03052777 -NCT03056001 -NCT03052868 -NCT03056027 -NCT03052907 -NCT03056131 -NCT03052920 -NCT03056144 -NCT03052933 -NCT03125798 -NCT03052959 -NCT03125811 -NCT03052998 -NCT03125876 -NCT03053115 -NCT03125902 -NCT03053154 -NCT03125928 -NCT03053167 -NCT03125941 -NCT03053206 -NCT03125967 -NCT03053219 -NCT03125980 -NCT03053271 -NCT03126019 -NCT03053284 -NCT03126045 -NCT03053466 -NCT03126058 -NCT03053492 -NCT03126071 -NCT03053544 -NCT03126110 -NCT03053635 -NCT03126123 -NCT03053804 -NCT03126175 -NCT03053830 -NCT03126240 -NCT03053856 -NCT03126266 -NCT03054025 -NCT03126331 -NCT03054038 -NCT03126383 -NCT03054194 -NCT03126396 -NCT03054259 -NCT03126435 -NCT03054285 -NCT03126461 -NCT03054298 -NCT03126474 -NCT03054363 -NCT03126487 -NCT03054389 -NCT03126591 -NCT03054454 -NCT03126604 -NCT03054506 -NCT03126630 -NCT03054532 -NCT03126708 -NCT03054558 -NCT03126734 -NCT03054597 -NCT03126760 -NCT03054649 -NCT03126799 -NCT03054701 -NCT03126812 -NCT03054753 -NCT03126864 -NCT03054792 -NCT03126916 -NCT03054805 -NCT03126955 -NCT03054883 -NCT03127007 -NCT03054896 -NCT03127020 -NCT03054909 -NCT03127046 -NCT03054961 -NCT03127072 -NCT03054987 -NCT03127098 -NCT03055013 -NCT03127124 -NCT03055143 -NCT03127215 -NCT03055208 -NCT03127241 -NCT03055286 -NCT03127254 -NCT03055312 -NCT03127267 -NCT03055481 -NCT03127293 -NCT03056300 -NCT03123224 -NCT03056339 -NCT03123276 -NCT03056352 -NCT03123393 -NCT03056469 -NCT03123432 -NCT03056547 -NCT03123445 -NCT03056573 -NCT03123484 -NCT03056599 -NCT03123562 -NCT03056638 -NCT03123588 -NCT03056755 -NCT03123601 -NCT03056833 -NCT03123653 -NCT03056924 -NCT03123679 -NCT03057015 -NCT03123718 -NCT03057054 -NCT03123744 -NCT03057106 -NCT03123770 -NCT03057145 -NCT03123783 -NCT03057171 -NCT03123796 -NCT03057223 -NCT03123822 -NCT03057288 -NCT03123835 -NCT03057314 -NCT03123939 -NCT03057327 -NCT03123952 -NCT03057340 -NCT03123978 -NCT03057366 -NCT03124004 -NCT03057392 -NCT03124017 -NCT03057418 -NCT03124030 -NCT03057470 -NCT03124095 -NCT03057496 -NCT03124108 -NCT03057509 -NCT03124160 -NCT03057600 -NCT03124199 -NCT03057613 -NCT03124316 -NCT03057678 -NCT03124407 -NCT03057743 -NCT03124433 -NCT03057795 -NCT03124498 -NCT03057821 -NCT03124524 -NCT03057860 -NCT03124615 -NCT03057873 -NCT03124732 -NCT03057912 -NCT03125031 -NCT03057990 -NCT03125070 -NCT03058094 -NCT03125083 -NCT03058198 -NCT03125161 -NCT03058289 -NCT03125200 -NCT03058380 -NCT03125226 -NCT03058419 -NCT03125239 -NCT03058432 -NCT03125343 -NCT03058549 -NCT03125525 -NCT03058575 -NCT03125564 -NCT03058627 -NCT03125590 -NCT03058640 -NCT03125616 -NCT03058705 -NCT03125629 -NCT03058757 -NCT03125642 -NCT03058809 -NCT03125733 -NCT03058822 -NCT03125746 -NCT03058874 -NCT03122782 -NCT03122873 -NCT03122886 -NCT03122951 -NCT03123003 -NCT03123042 -NCT03123055 -NCT03123081 -NCT03123185 -NCT03125759 -NCT03058900 -NCT03121729 -NCT03058939 -NCT03121807 -NCT03059043 -NCT03121833 -NCT03059147 -NCT03121846 -NCT03059199 -NCT03121859 -NCT03059238 -NCT03121989 -NCT03059251 -NCT03122106 -NCT03059329 -NCT03122145 -NCT03059342 -NCT03122197 -NCT03059381 -NCT03122223 -NCT03059420 -NCT03122249 -NCT03059485 -NCT03122275 -NCT03059615 -NCT03122444 -NCT03059667 -NCT03122457 -NCT03059797 -NCT03122470 -NCT03059823 -NCT03122496 -NCT03059875 -NCT03122509 -NCT03059888 -NCT03122522 -NCT03059914 -NCT03122548 -NCT03060057 -NCT03122678 -NCT03060070 -NCT03122717 -NCT03060096 -NCT03066115 -NCT03066128 -NCT03066154 -NCT03066167 -NCT03066206 -NCT03066271 -NCT03066336 -NCT03066388 -NCT03066414 -NCT03066427 -NCT03066440 -NCT03066466 -NCT03066557 -NCT03066648 -NCT03066778 -NCT03066817 -NCT03066856 -NCT03066882 -NCT03066947 -NCT03066999 -NCT03067012 -NCT03067051 -NCT03067090 -NCT03067181 -NCT03067298 -NCT03067493 -NCT03067558 -NCT03067571 -NCT03078699 -NCT03078712 -NCT03078751 -NCT03078816 -NCT03078829 -NCT03078855 -NCT03078920 -NCT03078972 -NCT03078998 -NCT03079011 -NCT03079102 -NCT03079115 -NCT03079128 -NCT03079193 -NCT03079219 -NCT03079232 -NCT03079323 -NCT03079414 -NCT03079427 -NCT03079440 -NCT03079453 -NCT03079466 -NCT03079505 -NCT03079596 -NCT03120624 -NCT03120676 -NCT03120728 -NCT03120754 -NCT03120819 -NCT03120832 -NCT03120884 -NCT03120988 -NCT03121001 -NCT03121014 -NCT03121170 -NCT03121209 -NCT03121248 -NCT03121313 -NCT03121352 -NCT03121417 -NCT03121456 -NCT03121469 -NCT03121495 -NCT03121534 -NCT03121547 -NCT03121599 -NCT03121625 -NCT03121677 -NCT03121716 -NCT03060200 -NCT03063632 -NCT03060226 -NCT03063554 -NCT03060304 -NCT03063684 -NCT03060343 -NCT03063723 -NCT03060356 -NCT03063762 -NCT03060421 -NCT03063827 -NCT03060499 -NCT03063840 -NCT03060512 -NCT03063918 -NCT03060850 -NCT03063944 -NCT03060863 -NCT03063983 -NCT03060876 -NCT03064022 -NCT03060941 -NCT03064035 -NCT03061058 -NCT03064087 -NCT03061110 -NCT03064243 -NCT03061162 -NCT03064269 -NCT03061175 -NCT03064308 -NCT03061188 -NCT03064464 -NCT03061201 -NCT03064490 -NCT03061344 -NCT03064581 -NCT03061435 -NCT03064646 -NCT03061539 -NCT03064659 -NCT03061643 -NCT03064763 -NCT03061656 -NCT03064828 -NCT03061669 -NCT03064854 -NCT03061682 -NCT03064867 -NCT03061708 -NCT03064945 -NCT03061773 -NCT03065010 -NCT03061812 -NCT03065023 -NCT03061929 -NCT03065062 -NCT03062007 -NCT03065166 -NCT03062059 -NCT03065179 -NCT03062072 -NCT03065205 -NCT03062111 -NCT03065218 -NCT03062124 -NCT03065231 -NCT03062137 -NCT03065270 -NCT03062254 -NCT03065335 -NCT03062319 -NCT03065348 -NCT03062332 -NCT03065374 -NCT03062358 -NCT03065387 -NCT03062410 -NCT03065400 -NCT03062436 -NCT03065543 -NCT03062462 -NCT03065556 -NCT03062631 -NCT03065582 -NCT03062644 -NCT03065608 -NCT03062683 -NCT03065621 -NCT03062696 -NCT03065634 -NCT03062943 -NCT03065647 -NCT03062982 -NCT03065686 -NCT03063073 -NCT03065712 -NCT03063112 -NCT03065764 -NCT03063125 -NCT03065816 -NCT03063151 -NCT03065855 -NCT03063203 -NCT03065907 -NCT03063255 -NCT03065920 -NCT03063398 -NCT03066050 -NCT03063450 -NCT03078608 -NCT03067610 -NCT03076177 -NCT03067623 -NCT03076190 -NCT03067688 -NCT03076203 -NCT03067701 -NCT03076216 -NCT03067766 -NCT03076255 -NCT03067792 -NCT03076281 -NCT03067831 -NCT03076307 -NCT03068052 -NCT03076333 -NCT03068117 -NCT03076372 -NCT03068156 -NCT03076411 -NCT03068208 -NCT03076437 -NCT03068221 -NCT03076515 -NCT03068260 -NCT03076541 -NCT03068351 -NCT03076554 -NCT03068403 -NCT03076619 -NCT03068416 -NCT03076632 -NCT03068455 -NCT03076645 -NCT03068468 -NCT03076671 -NCT03068507 -NCT03076697 -NCT03068520 -NCT03076749 -NCT03068572 -NCT03076840 -NCT03068624 -NCT03076853 -NCT03068637 -NCT03076879 -NCT03068663 -NCT03076957 -NCT03068819 -NCT03077113 -NCT03068832 -NCT03077126 -NCT03068910 -NCT03077178 -NCT03068936 -NCT03077230 -NCT03068949 -NCT03077243 -NCT03069040 -NCT03077308 -NCT03069079 -NCT03077451 -NCT03069248 -NCT03077477 -NCT03069287 -NCT03077542 -NCT03069352 -NCT03077555 -NCT03069365 -NCT03077607 -NCT03069378 -NCT03077633 -NCT03069469 -NCT03077659 -NCT03069508 -NCT03077685 -NCT03069534 -NCT03077698 -NCT03069664 -NCT03077711 -NCT03069729 -NCT03077776 -NCT03069742 -NCT03077828 -NCT03069846 -NCT03077841 -NCT03069872 -NCT03077854 -NCT03069885 -NCT03078036 -NCT03069924 -NCT03078166 -NCT03069937 -NCT03078335 -NCT03069950 -NCT03078348 -NCT03069963 -NCT03078361 -NCT03070002 -NCT03078387 -NCT03070067 -NCT03078400 -NCT03070145 -NCT03078452 -NCT03070184 -NCT03078530 -NCT03070236 -NCT03078595 -NCT03070262 -NCT03076034 -NCT03076099 -NCT03076164 -NCT03070301 -NCT03072602 -NCT03070327 -NCT03072576 -NCT03070340 -NCT03072641 -NCT03070366 -NCT03072771 -NCT03070392 -NCT03072940 -NCT03070431 -NCT03072966 -NCT03070496 -NCT03072992 -NCT03070548 -NCT03073226 -NCT03070574 -NCT03073278 -NCT03070613 -NCT03073304 -NCT03070626 -NCT03073343 -NCT03070691 -NCT03073395 -NCT03070769 -NCT03073499 -NCT03070808 -NCT03073525 -NCT03070860 -NCT03073694 -NCT03070886 -NCT03073785 -NCT03070899 -NCT03074006 -NCT03070951 -NCT03074032 -NCT03070964 -NCT03074045 -NCT03070990 -NCT03074071 -NCT03071042 -NCT03074084 -NCT03071081 -NCT03074110 -NCT03071094 -NCT03074279 -NCT03071185 -NCT03074292 -NCT03071198 -NCT03074318 -NCT03071276 -NCT03074344 -NCT03071289 -NCT03074461 -NCT03071328 -NCT03074474 -NCT03071354 -NCT03074500 -NCT03071406 -NCT03074513 -NCT03071445 -NCT03074552 -NCT03071471 -NCT03074669 -NCT03071549 -NCT03074825 -NCT03071705 -NCT03074864 -NCT03071744 -NCT03074916 -NCT03071757 -NCT03074942 -NCT03071822 -NCT03075072 -NCT03071861 -NCT03075098 -NCT03071874 -NCT03075163 -NCT03071900 -NCT03075228 -NCT03071926 -NCT03075423 -NCT03071965 -NCT03075449 -NCT03072017 -NCT03075462 -NCT03072030 -NCT03075514 -NCT03072043 -NCT03075527 -NCT03072095 -NCT03075540 -NCT03072134 -NCT03075553 -NCT03072160 -NCT03075605 -NCT03072186 -NCT03075618 -NCT03072225 -NCT03075631 -NCT03072238 -NCT03075696 -NCT03072303 -NCT03075826 -NCT03072368 -NCT03075852 -NCT03072446 -NCT03075891 -NCT03072472 -NCT03075995 -NCT03072550 -NCT03120585 -NCT03079700 -NCT03119428 -NCT03079778 -NCT03119467 -NCT03079843 -NCT03119519 -NCT03079960 -NCT03119571 -NCT03079999 -NCT03119584 -NCT03080116 -NCT03119714 -NCT03080129 -NCT03119857 -NCT03080155 -NCT03119883 -NCT03080181 -NCT03119961 -NCT03080311 -NCT03120000 -NCT03080337 -NCT03120013 -NCT03080389 -NCT03120078 -NCT03080428 -NCT03120104 -NCT03080454 -NCT03120130 -NCT03080519 -NCT03120390 -NCT03080688 -NCT03114683 -NCT03114839 -NCT03114865 -NCT03114930 -NCT03115008 -NCT03115125 -NCT03115138 -NCT03115177 -NCT03115333 -NCT03115372 -NCT03115398 -NCT03115450 -NCT03115463 -NCT03115476 -NCT03115515 -NCT03115593 -NCT03115658 -NCT03115762 -NCT03115801 -NCT03115814 -NCT03115853 -NCT03115879 -NCT03115944 -NCT03115957 -NCT03115983 -NCT03116009 -NCT03116035 -NCT03116048 -NCT03116152 -NCT03116256 -NCT03116360 -NCT03116386 -NCT03116412 -NCT03116529 -NCT03116542 -NCT03116555 -NCT03116568 -NCT03116607 -NCT03116659 -NCT03116763 -NCT03116945 -NCT03116971 -NCT03116984 -NCT03117010 -NCT03117023 -NCT03117049 -NCT03117075 -NCT03117101 -NCT03117179 -NCT03117257 -NCT03117283 -NCT03117309 -NCT03117335 -NCT03117348 -NCT03117361 -NCT03117400 -NCT03117426 -NCT03117543 -NCT03117556 -NCT03117582 -NCT03117751 -NCT03117764 -NCT03117816 -NCT03117829 -NCT03117855 -NCT03117894 -NCT03117920 -NCT03117933 -NCT03117946 -NCT03117972 -NCT03117998 -NCT03118128 -NCT03118180 -NCT03118258 -NCT03118271 -NCT03118349 -NCT03118466 -NCT03118479 -NCT03118674 -NCT03118817 -NCT03118830 -NCT03118882 -NCT03118895 -NCT03118973 -NCT03118986 -NCT03119051 -NCT03119064 -NCT03119181 -NCT03119363 -NCT03119376 -NCT03120403 -NCT03080701 -NCT03082586 -NCT03080714 -NCT03082573 -NCT03080766 -NCT03082599 -NCT03080779 -NCT03082612 -NCT03080792 -NCT03082716 -NCT03080805 -NCT03082781 -NCT03080831 -NCT03082794 -NCT03080883 -NCT03082807 -NCT03080909 -NCT03082833 -NCT03080922 -NCT03082846 -NCT03080961 -NCT03082911 -NCT03080974 -NCT03083041 -NCT03081039 -NCT03083054 -NCT03081104 -NCT03083197 -NCT03081130 -NCT03083210 -NCT03081143 -NCT03083223 -NCT03081221 -NCT03083236 -NCT03081234 -NCT03083262 -NCT03081338 -NCT03083288 -NCT03081468 -NCT03083314 -NCT03081481 -NCT03083327 -NCT03081494 -NCT03083405 -NCT03081507 -NCT03083470 -NCT03081533 -NCT03083522 -NCT03081546 -NCT03083548 -NCT03081663 -NCT03083613 -NCT03081689 -NCT03083678 -NCT03081702 -NCT03083691 -NCT03081715 -NCT03083704 -NCT03081767 -NCT03083743 -NCT03081780 -NCT03083808 -NCT03081793 -NCT03083834 -NCT03081806 -NCT03083847 -NCT03081819 -NCT03083873 -NCT03081858 -NCT03083886 -NCT03081871 -NCT03083899 -NCT03081884 -NCT03083938 -NCT03081897 -NCT03083951 -NCT03081910 -NCT03083964 -NCT03081923 -NCT03084016 -NCT03082053 -NCT03084055 -NCT03082066 -NCT03084081 -NCT03082079 -NCT03084120 -NCT03082092 -NCT03084133 -NCT03082105 -NCT03084159 -NCT03082144 -NCT03114267 -NCT03082157 -NCT03114280 -NCT03082209 -NCT03114319 -NCT03082300 -NCT03114345 -NCT03082404 -NCT03114462 -NCT03082417 -NCT03114501 -NCT03082456 -NCT03114514 -NCT03082495 -NCT03114527 -NCT03082508 -NCT03114631 -NCT03082534 -NCT03114657 -NCT03082547 -NCT03114670 -NCT03084211 -NCT03086681 -NCT03084237 -NCT03086642 -NCT03084341 -NCT03086733 -NCT03084380 -NCT03086785 -NCT03084445 -NCT03086954 -NCT03084497 -NCT03086993 -NCT03084510 -NCT03087019 -NCT03084536 -NCT03087071 -NCT03084640 -NCT03087123 -NCT03084666 -NCT03087149 -NCT03084692 -NCT03087227 -NCT03084705 -NCT03087357 -NCT03084744 -NCT03087370 -NCT03084757 -NCT03087422 -NCT03084809 -NCT03087448 -NCT03084913 -NCT03087461 -NCT03084926 -NCT03087500 -NCT03084939 -NCT03087526 -NCT03085004 -NCT03087552 -NCT03085043 -NCT03087565 -NCT03085056 -NCT03087591 -NCT03085069 -NCT03087643 -NCT03085095 -NCT03087708 -NCT03085121 -NCT03087747 -NCT03085147 -NCT03087760 -NCT03085173 -NCT03087851 -NCT03085212 -NCT03087864 -NCT03085225 -NCT03087903 -NCT03085238 -NCT03088007 -NCT03085368 -NCT03088046 -NCT03085407 -NCT03088059 -NCT03085472 -NCT03088098 -NCT03085537 -NCT03088124 -NCT03085719 -NCT03088150 -NCT03085784 -NCT03088176 -NCT03085810 -NCT03088397 -NCT03085849 -NCT03088488 -NCT03085914 -NCT03113487 -NCT03085927 -NCT03113500 -NCT03085966 -NCT03113526 -NCT03085992 -NCT03113617 -NCT03086018 -NCT03113630 -NCT03086044 -NCT03113643 -NCT03086161 -NCT03113682 -NCT03086174 -NCT03113695 -NCT03086226 -NCT03113799 -NCT03086239 -NCT03113825 -NCT03086252 -NCT03113851 -NCT03086278 -NCT03113942 -NCT03086291 -NCT03113955 -NCT03086369 -NCT03113994 -NCT03086395 -NCT03114085 -NCT03086538 -NCT03114150 -NCT03086564 -NCT03114202 -NCT03086616 -NCT03114215 -NCT03086629 -NCT03114254 -NCT03088501 -NCT03091933 -NCT03088527 -NCT03091842 -NCT03088540 -NCT03092011 -NCT03088605 -NCT03092167 -NCT03088709 -NCT03092180 -NCT03088748 -NCT03092323 -NCT03088774 -NCT03092453 -NCT03088813 -NCT03092492 -NCT03088839 -NCT03092518 -NCT03088878 -NCT03092622 -NCT03088917 -NCT03092635 -NCT03088930 -NCT03092648 -NCT03089060 -NCT03092661 -NCT03089125 -NCT03092674 -NCT03089164 -NCT03110887 -NCT03089177 -NCT03110900 -NCT03089190 -NCT03110926 -NCT03089203 -NCT03110939 -NCT03089398 -NCT03110965 -NCT03089411 -NCT03110978 -NCT03089424 -NCT03111056 -NCT03089502 -NCT03111069 -NCT03089528 -NCT03111108 -NCT03089554 -NCT03111199 -NCT03089606 -NCT03111368 -NCT03089619 -NCT03111407 -NCT03089645 -NCT03111446 -NCT03089723 -NCT03111563 -NCT03089736 -NCT03111615 -NCT03089762 -NCT03111680 -NCT03089853 -NCT03111732 -NCT03089892 -NCT03111771 -NCT03089944 -NCT03111823 -NCT03090035 -NCT03111901 -NCT03090165 -NCT03111914 -NCT03090217 -NCT03111992 -NCT03090295 -NCT03112174 -NCT03090412 -NCT03112200 -NCT03090477 -NCT03112538 -NCT03090516 -NCT03112590 -NCT03090659 -NCT03112642 -NCT03090737 -NCT03112668 -NCT03090880 -NCT03112850 -NCT03090971 -NCT03112954 -NCT03091023 -NCT03113006 -NCT03091049 -NCT03113019 -NCT03091140 -NCT03113071 -NCT03091192 -NCT03113110 -NCT03091257 -NCT03113149 -NCT03091283 -NCT03113188 -NCT03091296 -NCT03113214 -NCT03091348 -NCT03113266 -NCT03091491 -NCT03113318 -NCT03091647 -NCT03113357 -NCT03091660 -NCT03113422 -NCT03091816 -NCT03113448 -NCT03092700 -NCT03108443 -NCT03092817 -NCT03108495 -NCT03092856 -NCT03108547 -NCT03092895 -NCT03108560 -NCT03092934 -NCT03108573 -NCT03092986 -NCT03108612 -NCT03092999 -NCT03108703 -NCT03093116 -NCT03108729 -NCT03093129 -NCT03108807 -NCT03093155 -NCT03108846 -NCT03093168 -NCT03108898 -NCT03093194 -NCT03108911 -NCT03093272 -NCT03108937 -NCT03093285 -NCT03108963 -NCT03093324 -NCT03109015 -NCT03093350 -NCT03109041 -NCT03093363 -NCT03109080 -NCT03093428 -NCT03109106 -NCT03093454 -NCT03109158 -NCT03093480 -NCT03109249 -NCT03093623 -NCT03109262 -NCT03093649 -NCT03109301 -NCT03093675 -NCT03109353 -NCT03093688 -NCT03109522 -NCT03093714 -NCT03109639 -NCT03093831 -NCT03109756 -NCT03093844 -NCT03109795 -NCT03093870 -NCT03109808 -NCT03093909 -NCT03109834 -NCT03093922 -NCT03109873 -NCT03093935 -NCT03109886 -NCT03093961 -NCT03109925 -NCT03094026 -NCT03109977 -NCT03094052 -NCT03109990 -NCT03094143 -NCT03110107 -NCT03094156 -NCT03110159 -NCT03094169 -NCT03110263 -NCT03094286 -NCT03110328 -NCT03094299 -NCT03110354 -NCT03094325 -NCT03110445 -NCT03094351 -NCT03110484 -NCT03094364 -NCT03110497 -NCT03094403 -NCT03110510 -NCT03094416 -NCT03110523 -NCT03094611 -NCT03110562 -NCT03094637 -NCT03110588 -NCT03094741 -NCT03110614 -NCT03094780 -NCT03110640 -NCT03094806 -NCT03110679 -NCT03094832 -NCT03110692 -NCT03094884 -NCT03110744 -NCT03094897 -NCT03110783 -NCT03094949 -NCT03108079 -NCT03108131 -NCT03108144 -NCT03108196 -NCT03108222 -NCT03108300 -NCT03108430 -NCT03110822 -NCT03095001 -NCT03106337 -NCT03095040 -NCT03106389 -NCT03095066 -NCT03106415 -NCT03095079 -NCT03106428 -NCT03095118 -NCT03106467 -NCT03095248 -NCT03106584 -NCT03095274 -NCT03106610 -NCT03095352 -NCT03106675 -NCT03095612 -NCT03106701 -NCT03095664 -NCT03106766 -NCT03095703 -NCT03106779 -NCT03095781 -NCT03106857 -NCT03095963 -NCT03106883 -NCT03096041 -NCT03106935 -NCT03096054 -NCT03106987 -NCT03096093 -NCT03107156 -NCT03096184 -NCT03107182 -NCT03096340 -NCT03107208 -NCT03096418 -NCT03107234 -NCT03096431 -NCT03107325 -NCT03096444 -NCT03107416 -NCT03096457 -NCT03107455 -NCT03096548 -NCT03107468 -NCT03096613 -NCT03107533 -NCT03096652 -NCT03107611 -NCT03096665 -NCT03107663 -NCT03096704 -NCT03107780 -NCT03096782 -NCT03107871 -NCT03096808 -NCT03107884 -NCT03096847 -NCT03107897 -NCT03096912 -NCT03107962 -NCT03096938 -NCT03107988 -NCT03096951 -NCT03108066 -NCT03097107 -NCT03103321 -NCT03103347 -NCT03103464 -NCT03103607 -NCT03103659 -NCT03103711 -NCT03103724 -NCT03103737 -NCT03103776 -NCT03103815 -NCT03103854 -NCT03103906 -NCT03103971 -NCT03104153 -NCT03104270 -NCT03104283 -NCT03104309 -NCT03104335 -NCT03104439 -NCT03104465 -NCT03104491 -NCT03104543 -NCT03104660 -NCT03104699 -NCT03104725 -NCT03104842 -NCT03104881 -NCT03104907 -NCT03104920 -NCT03104998 -NCT03105050 -NCT03105076 -NCT03105141 -NCT03105206 -NCT03105297 -NCT03105336 -NCT03105362 -NCT03105570 -NCT03105596 -NCT03105700 -NCT03105843 -NCT03105856 -NCT03105869 -NCT03105921 -NCT03105947 -NCT03106077 -NCT03106090 -NCT03106155 -NCT03106207 -NCT03106298 -NCT03097211 -NCT03100461 -NCT03097224 -NCT03100409 -NCT03097237 -NCT03100513 -NCT03097276 -NCT03100604 -NCT03097328 -NCT03100851 -NCT03097458 -NCT03100877 -NCT03097588 -NCT03100916 -NCT03097627 -NCT03100942 -NCT03097653 -NCT03100981 -NCT03097666 -NCT03101020 -NCT03097718 -NCT03101033 -NCT03097770 -NCT03101046 -NCT03097809 -NCT03101059 -NCT03097848 -NCT03101098 -NCT03097939 -NCT03101176 -NCT03097952 -NCT03101241 -NCT03097965 -NCT03101254 -NCT03097991 -NCT03101280 -NCT03098030 -NCT03101306 -NCT03098056 -NCT03101358 -NCT03098082 -NCT03101397 -NCT03098108 -NCT03101475 -NCT03098147 -NCT03101488 -NCT03098160 -NCT03101514 -NCT03098199 -NCT03101527 -NCT03098277 -NCT03101566 -NCT03098355 -NCT03101579 -NCT03098381 -NCT03101631 -NCT03098550 -NCT03101670 -NCT03098771 -NCT03101683 -NCT03098836 -NCT03101709 -NCT03099070 -NCT03101748 -NCT03099109 -NCT03101800 -NCT03099161 -NCT03101839 -NCT03099174 -NCT03101995 -NCT03099265 -NCT03102047 -NCT03099317 -NCT03102177 -NCT03099330 -NCT03102203 -NCT03099356 -NCT03102229 -NCT03099382 -NCT03102242 -NCT03099421 -NCT03102281 -NCT03099486 -NCT03102320 -NCT03099499 -NCT03102411 -NCT03099564 -NCT03102489 -NCT03099577 -NCT03102554 -NCT03099629 -NCT03102658 -NCT03099902 -NCT03102684 -NCT03099954 -NCT03102801 -NCT03099993 -NCT03102840 -NCT03100006 -NCT03102866 -NCT03100045 -NCT03103087 -NCT03100149 -NCT03103100 -NCT03100175 -NCT03103152 -NCT03100188 -NCT03103256 -NCT03100266 -NCT03103308 -NCT03100292 -NCT03144765 -NCT03139032 -NCT03142061 -NCT03139058 -NCT03142035 -NCT03139071 -NCT03142152 -NCT03139084 -NCT03142178 -NCT03139201 -NCT03142204 -NCT03139305 -NCT03142217 -NCT03139318 -NCT03142282 -NCT03139331 -NCT03142295 -NCT03139370 -NCT03142334 -NCT03139383 -NCT03142451 -NCT03139435 -NCT03142477 -NCT03139487 -NCT03142516 -NCT03139513 -NCT03142542 -NCT03139669 -NCT03142646 -NCT03139747 -NCT03142802 -NCT03139851 -NCT03142867 -NCT03139890 -NCT03142984 -NCT03139916 -NCT03142997 -NCT03139942 -NCT03143036 -NCT03139955 -NCT03143049 -NCT03140007 -NCT03143062 -NCT03140085 -NCT03143088 -NCT03140111 -NCT03143114 -NCT03140228 -NCT03143140 -NCT03140280 -NCT03143153 -NCT03140332 -NCT03143270 -NCT03140358 -NCT03143322 -NCT03140449 -NCT03143413 -NCT03140553 -NCT03143465 -NCT03140670 -NCT03143478 -NCT03140735 -NCT03143491 -NCT03140761 -NCT03143517 -NCT03140787 -NCT03143569 -NCT03140813 -NCT03143608 -NCT03140865 -NCT03143699 -NCT03140943 -NCT03143829 -NCT03140982 -NCT03143868 -NCT03141034 -NCT03143894 -NCT03141060 -NCT03143920 -NCT03141086 -NCT03143946 -NCT03141177 -NCT03143985 -NCT03141203 -NCT03144037 -NCT03141216 -NCT03144063 -NCT03141268 -NCT03144128 -NCT03141320 -NCT03144154 -NCT03141359 -NCT03144167 -NCT03141372 -NCT03144206 -NCT03141437 -NCT03144245 -NCT03141463 -NCT03144362 -NCT03141671 -NCT03144440 -NCT03141684 -NCT03144466 -NCT03141697 -NCT03144583 -NCT03141775 -NCT03144661 -NCT03141814 -NCT03144674 -NCT03141853 -NCT03144687 -NCT03141944 -NCT03150628 -NCT03144778 -NCT03147586 -NCT03144791 -NCT03147495 -NCT03144804 -NCT03147599 -NCT03144817 -NCT03147612 -NCT03144843 -NCT03147768 -NCT03144856 -NCT03147885 -NCT03144947 -NCT03147963 -NCT03145012 -NCT03147976 -NCT03145051 -NCT03148002 -NCT03145064 -NCT03148015 -NCT03145077 -NCT03148041 -NCT03145285 -NCT03148119 -NCT03145467 -NCT03148158 -NCT03145480 -NCT03148262 -NCT03145558 -NCT03148275 -NCT03145727 -NCT03148327 -NCT03145831 -NCT03148418 -NCT03145857 -NCT03148691 -NCT03145870 -NCT03148795 -NCT03145883 -NCT03148886 -NCT03145909 -NCT03149003 -NCT03145922 -NCT03149029 -NCT03145935 -NCT03149042 -NCT03145961 -NCT03149055 -NCT03146000 -NCT03149081 -NCT03146039 -NCT03149120 -NCT03146065 -NCT03149159 -NCT03146091 -NCT03149185 -NCT03146156 -NCT03149250 -NCT03146234 -NCT03149289 -NCT03146260 -NCT03149302 -NCT03146299 -NCT03149380 -NCT03146312 -NCT03149393 -NCT03146338 -NCT03149549 -NCT03146351 -NCT03149575 -NCT03146377 -NCT03149679 -NCT03146533 -NCT03149692 -NCT03146637 -NCT03149822 -NCT03146650 -NCT03149861 -NCT03146663 -NCT03149965 -NCT03146741 -NCT03150004 -NCT03146806 -NCT03150108 -NCT03146871 -NCT03150121 -NCT03146884 -NCT03150134 -NCT03146962 -NCT03150212 -NCT03147027 -NCT03150225 -NCT03147040 -NCT03150316 -NCT03147105 -NCT03150329 -NCT03147118 -NCT03150381 -NCT03147196 -NCT03150433 -NCT03147287 -NCT03150446 -NCT03147326 -NCT03150524 -NCT03147365 -NCT03150576 -NCT03147378 -NCT03150602 -NCT03147404 -NCT03150615 -NCT03147443 -NCT03156036 -NCT03150693 -NCT03153527 -NCT03150706 -NCT03153514 -NCT03150745 -NCT03153553 -NCT03150810 -NCT03153618 -NCT03150836 -NCT03153670 -NCT03150862 -NCT03153813 -NCT03150875 -NCT03153826 -NCT03150914 -NCT03153852 -NCT03150927 -NCT03153982 -NCT03150992 -NCT03154034 -NCT03151044 -NCT03154047 -NCT03151057 -NCT03154099 -NCT03151161 -NCT03154164 -NCT03151200 -NCT03154190 -NCT03151213 -NCT03154255 -NCT03151291 -NCT03154268 -NCT03151304 -NCT03154281 -NCT03151356 -NCT03154294 -NCT03151408 -NCT03154307 -NCT03151447 -NCT03154411 -NCT03151564 -NCT03154437 -NCT03151772 -NCT03154489 -NCT03151811 -NCT03154515 -NCT03151876 -NCT03154593 -NCT03151889 -NCT03154606 -NCT03151967 -NCT03154619 -NCT03152019 -NCT03154671 -NCT03152071 -NCT03154710 -NCT03152136 -NCT03154749 -NCT03152188 -NCT03154762 -NCT03152305 -NCT03154775 -NCT03152318 -NCT03154801 -NCT03152370 -NCT03154814 -NCT03152383 -NCT03154827 -NCT03152435 -NCT03154918 -NCT03152474 -NCT03154983 -NCT03152487 -NCT03154996 -NCT03152526 -NCT03155009 -NCT03152565 -NCT03155061 -NCT03152578 -NCT03155100 -NCT03152656 -NCT03155191 -NCT03152786 -NCT03155217 -NCT03152851 -NCT03155282 -NCT03152877 -NCT03155373 -NCT03152929 -NCT03155425 -NCT03153085 -NCT03155516 -NCT03153163 -NCT03155529 -NCT03153202 -NCT03155581 -NCT03153267 -NCT03155620 -NCT03153280 -NCT03155737 -NCT03153293 -NCT03155750 -NCT03153358 -NCT03155867 -NCT03153371 -NCT03155958 -NCT03153410 -NCT03155984 -NCT03153449 -NCT03155997 -NCT03153501 -NCT03162289 -NCT03156062 -NCT03159104 -NCT03156101 -NCT03159091 -NCT03156114 -NCT03159117 -NCT03156465 -NCT03159143 -NCT03156517 -NCT03159351 -NCT03156673 -NCT03159377 -NCT03156777 -NCT03159585 -NCT03156829 -NCT03159598 -NCT03156842 -NCT03159702 -NCT03156946 -NCT03159754 -NCT03156959 -NCT03159767 -NCT03156998 -NCT03159819 -NCT03157011 -NCT03159897 -NCT03157050 -NCT03160079 -NCT03157089 -NCT03160313 -NCT03157128 -NCT03160365 -NCT03157167 -NCT03160443 -NCT03157271 -NCT03160469 -NCT03157310 -NCT03160599 -NCT03157323 -NCT03160612 -NCT03157518 -NCT03160638 -NCT03157544 -NCT03160716 -NCT03157596 -NCT03160807 -NCT03157726 -NCT03160833 -NCT03157739 -NCT03160898 -NCT03157752 -NCT03160924 -NCT03157804 -NCT03161041 -NCT03157882 -NCT03161054 -NCT03157947 -NCT03161080 -NCT03157986 -NCT03161106 -NCT03158064 -NCT03161132 -NCT03158090 -NCT03161223 -NCT03158103 -NCT03161314 -NCT03158116 -NCT03161327 -NCT03158129 -NCT03161353 -NCT03158207 -NCT03161379 -NCT03158220 -NCT03161431 -NCT03158246 -NCT03161470 -NCT03158259 -NCT03161522 -NCT03158324 -NCT03161535 -NCT03158389 -NCT03161548 -NCT03158441 -NCT03161574 -NCT03158467 -NCT03161587 -NCT03158493 -NCT03161600 -NCT03158519 -NCT03161756 -NCT03158571 -NCT03161782 -NCT03158610 -NCT03161834 -NCT03158688 -NCT03161964 -NCT03158727 -NCT03162068 -NCT03158779 -NCT03162094 -NCT03158805 -NCT03162133 -NCT03158818 -NCT03162172 -NCT03158831 -NCT03162224 -NCT03158857 -NCT03162263 -NCT03158883 -NCT03162276 -NCT03158935 -NCT03167853 -NCT03162328 -NCT03165383 -NCT03162341 -NCT03165370 -NCT03162458 -NCT03165591 -NCT03162510 -NCT03165604 -NCT03162536 -NCT03165721 -NCT03162562 -NCT03165812 -NCT03162627 -NCT03165851 -NCT03162718 -NCT03165955 -NCT03162731 -NCT03165994 -NCT03163095 -NCT03166046 -NCT03163134 -NCT03166072 -NCT03163290 -NCT03166085 -NCT03163329 -NCT03166176 -NCT03163342 -NCT03166202 -NCT03163355 -NCT03166215 -NCT03163368 -NCT03166254 -NCT03163381 -NCT03166280 -NCT03163394 -NCT03166345 -NCT03163433 -NCT03166397 -NCT03163667 -NCT03166410 -NCT03163719 -NCT03166436 -NCT03163732 -NCT03166449 -NCT03163758 -NCT03166553 -NCT03163797 -NCT03166631 -NCT03163849 -NCT03166670 -NCT03163875 -NCT03166683 -NCT03163888 -NCT03166735 -NCT03163901 -NCT03166878 -NCT03163979 -NCT03166891 -NCT03163992 -NCT03166904 -NCT03164044 -NCT03167008 -NCT03164057 -NCT03167047 -NCT03164070 -NCT03167112 -NCT03164083 -NCT03167125 -NCT03164122 -NCT03167151 -NCT03164148 -NCT03167164 -NCT03164291 -NCT03167177 -NCT03164382 -NCT03167255 -NCT03164460 -NCT03167268 -NCT03164486 -NCT03167320 -NCT03164590 -NCT03167359 -NCT03164603 -NCT03167372 -NCT03164616 -NCT03167385 -NCT03164655 -NCT03167463 -NCT03164694 -NCT03167476 -NCT03164720 -NCT03167567 -NCT03164772 -NCT03167593 -NCT03164837 -NCT03167619 -NCT03164928 -NCT03167632 -NCT03164980 -NCT03167671 -NCT03164993 -NCT03167710 -NCT03165149 -NCT03167749 -NCT03165214 -NCT03167762 -NCT03165253 -NCT03167775 -NCT03165266 -NCT03167814 -NCT03165292 -NCT03173222 -NCT03167918 -NCT03170570 -NCT03167970 -NCT03170557 -NCT03167983 -NCT03170622 -NCT03168035 -NCT03170648 -NCT03168048 -NCT03170687 -NCT03168061 -NCT03170752 -NCT03168074 -NCT03170765 -NCT03168100 -NCT03170804 -NCT03168139 -NCT03170869 -NCT03168152 -NCT03170882 -NCT03168178 -NCT03170895 -NCT03168321 -NCT03170960 -NCT03168334 -NCT03171012 -NCT03168386 -NCT03171025 -NCT03168438 -NCT03171064 -NCT03168464 -NCT03171090 -NCT03168529 -NCT03171168 -NCT03168594 -NCT03171220 -NCT03168607 -NCT03171272 -NCT03168620 -NCT03171285 -NCT03168646 -NCT03171298 -NCT03168737 -NCT03171324 -NCT03168763 -NCT03171389 -NCT03168815 -NCT03171467 -NCT03168854 -NCT03171493 -NCT03168880 -NCT03171506 -NCT03168906 -NCT03171558 -NCT03168919 -NCT03171610 -NCT03168997 -NCT03171857 -NCT03169023 -NCT03171870 -NCT03169075 -NCT03171987 -NCT03169114 -NCT03172052 -NCT03169257 -NCT03172117 -NCT03169309 -NCT03172130 -NCT03169322 -NCT03172195 -NCT03169335 -NCT03172208 -NCT03169361 -NCT03172299 -NCT03169621 -NCT03172312 -NCT03169634 -NCT03172390 -NCT03169699 -NCT03172403 -NCT03169738 -NCT03172416 -NCT03169751 -NCT03172507 -NCT03169764 -NCT03172559 -NCT03169777 -NCT03172585 -NCT03169790 -NCT03172624 -NCT03169829 -NCT03172663 -NCT03169855 -NCT03172754 -NCT03169907 -NCT03172767 -NCT03169933 -NCT03172819 -NCT03170076 -NCT03172832 -NCT03170115 -NCT03172936 -NCT03170141 -NCT03172988 -NCT03170180 -NCT03173092 -NCT03170206 -NCT03173118 -NCT03170310 -NCT03173144 -NCT03170388 -NCT03178656 -NCT03173235 -NCT03175978 -NCT03173248 -NCT03175939 -NCT03173378 -NCT03176082 -NCT03173417 -NCT03176121 -NCT03173430 -NCT03176173 -NCT03173560 -NCT03176199 -NCT03173612 -NCT03176238 -NCT03173638 -NCT03176264 -NCT03173690 -NCT03176277 -NCT03173742 -NCT03176485 -NCT03173807 -NCT03176576 -NCT03173833 -NCT03176589 -NCT03173859 -NCT03176602 -NCT03173924 -NCT03176680 -NCT03173950 -NCT03176693 -NCT03173976 -NCT03176732 -NCT03173989 -NCT03176836 -NCT03174028 -NCT03176849 -NCT03174080 -NCT03176888 -NCT03174145 -NCT03176927 -NCT03174171 -NCT03176979 -NCT03174197 -NCT03176992 -NCT03174275 -NCT03177057 -NCT03174405 -NCT03177122 -NCT03174444 -NCT03177187 -NCT03174509 -NCT03177213 -NCT03174626 -NCT03177239 -NCT03174743 -NCT03177252 -NCT03174782 -NCT03177278 -NCT03174795 -NCT03177291 -NCT03174834 -NCT03177317 -NCT03174873 -NCT03177382 -NCT03174912 -NCT03177434 -NCT03174925 -NCT03177447 -NCT03174938 -NCT03177460 -NCT03175016 -NCT03177642 -NCT03175055 -NCT03177668 -NCT03175107 -NCT03177681 -NCT03175146 -NCT03177707 -NCT03175172 -NCT03177902 -NCT03175211 -NCT03177928 -NCT03175224 -NCT03177941 -NCT03175289 -NCT03177967 -NCT03175341 -NCT03178032 -NCT03175367 -NCT03178071 -NCT03175393 -NCT03178110 -NCT03175432 -NCT03178123 -NCT03175497 -NCT03178136 -NCT03175562 -NCT03178162 -NCT03175666 -NCT03178201 -NCT03175679 -NCT03178214 -NCT03175705 -NCT03178240 -NCT03175718 -NCT03178383 -NCT03175731 -NCT03178552 -NCT03175848 -NCT03178617 -NCT03175874 -NCT03183531 -NCT03178682 -NCT03181035 -NCT03178760 -NCT03180918 -NCT03178799 -NCT03181100 -NCT03178812 -NCT03181126 -NCT03178851 -NCT03181204 -NCT03178929 -NCT03181230 -NCT03179007 -NCT03181243 -NCT03179072 -NCT03181282 -NCT03179111 -NCT03181308 -NCT03179124 -NCT03181334 -NCT03179150 -NCT03181464 -NCT03179176 -NCT03181477 -NCT03179228 -NCT03181503 -NCT03179267 -NCT03181581 -NCT03179280 -NCT03181815 -NCT03179306 -NCT03181854 -NCT03179332 -NCT03181867 -NCT03179358 -NCT03181893 -NCT03179410 -NCT03181932 -NCT03179436 -NCT03182036 -NCT03179449 -NCT03182049 -NCT03179540 -NCT03182127 -NCT03179579 -NCT03182179 -NCT03179735 -NCT03182244 -NCT03179891 -NCT03182257 -NCT03179904 -NCT03182270 -NCT03179917 -NCT03182296 -NCT03179930 -NCT03182309 -NCT03179943 -NCT03182439 -NCT03179956 -NCT03182452 -NCT03180034 -NCT03182634 -NCT03180086 -NCT03182673 -NCT03180138 -NCT03182686 -NCT03180164 -NCT03182699 -NCT03180177 -NCT03182803 -NCT03180190 -NCT03182816 -NCT03180203 -NCT03182894 -NCT03180268 -NCT03182907 -NCT03180294 -NCT03182920 -NCT03180307 -NCT03182933 -NCT03180398 -NCT03182959 -NCT03180424 -NCT03182998 -NCT03180437 -NCT03183050 -NCT03180463 -NCT03183063 -NCT03180476 -NCT03183089 -NCT03180502 -NCT03183115 -NCT03180515 -NCT03183141 -NCT03180528 -NCT03183167 -NCT03180554 -NCT03183206 -NCT03180671 -NCT03183219 -NCT03180684 -NCT03183232 -NCT03180736 -NCT03183271 -NCT03180788 -NCT03183414 -NCT03180801 -NCT03183479 -NCT03180827 -NCT03183518 -NCT03180892 -NCT03188692 -NCT03183544 -NCT03186313 -NCT03183687 -NCT03186248 -NCT03183700 -NCT03186326 -NCT03183752 -NCT03186404 -NCT03183778 -NCT03186586 -NCT03183986 -NCT03186599 -NCT03184038 -NCT03186638 -NCT03184090 -NCT03186664 -NCT03184194 -NCT03186703 -NCT03184233 -NCT03186729 -NCT03184259 -NCT03186742 -NCT03184324 -NCT03186898 -NCT03184337 -NCT03186937 -NCT03184350 -NCT03186976 -NCT03184389 -NCT03187028 -NCT03184415 -NCT03187080 -NCT03184493 -NCT03187119 -NCT03184558 -NCT03187132 -NCT03184571 -NCT03187184 -NCT03184688 -NCT03187210 -NCT03184714 -NCT03187223 -NCT03184727 -NCT03187236 -NCT03184740 -NCT03187275 -NCT03184753 -NCT03187288 -NCT03184818 -NCT03187314 -NCT03184870 -NCT03187340 -NCT03184935 -NCT03187561 -NCT03184948 -NCT03187587 -NCT03185013 -NCT03187600 -NCT03185039 -NCT03187626 -NCT03185130 -NCT03187652 -NCT03185169 -NCT03187691 -NCT03185182 -NCT03187743 -NCT03185208 -NCT03187795 -NCT03185325 -NCT03187847 -NCT03185364 -NCT03187925 -NCT03185390 -NCT03187951 -NCT03185403 -NCT03187977 -NCT03185416 -NCT03187990 -NCT03185429 -NCT03188107 -NCT03185468 -NCT03188159 -NCT03185494 -NCT03188172 -NCT03185533 -NCT03188198 -NCT03185637 -NCT03188276 -NCT03185702 -NCT03188328 -NCT03185754 -NCT03188354 -NCT03185806 -NCT03188380 -NCT03185871 -NCT03188393 -NCT03185884 -NCT03188406 -NCT03185897 -NCT03188432 -NCT03185988 -NCT03188497 -NCT03186014 -NCT03188562 -NCT03186079 -NCT03188588 -NCT03186105 -NCT03188627 -NCT03186118 -NCT03188666 -NCT03186222 -NCT03194802 -NCT03188757 -NCT03191734 -NCT03188900 -NCT03191682 -NCT03188965 -NCT03191773 -NCT03188991 -NCT03191786 -NCT03189004 -NCT03191799 -NCT03189030 -NCT03191864 -NCT03189108 -NCT03191903 -NCT03189160 -NCT03191942 -NCT03189186 -NCT03191955 -NCT03189316 -NCT03191968 -NCT03189381 -NCT03191981 -NCT03189446 -NCT03192059 -NCT03189459 -NCT03192072 -NCT03189524 -NCT03192098 -NCT03189576 -NCT03192202 -NCT03189628 -NCT03192293 -NCT03189706 -NCT03192345 -NCT03189719 -NCT03192358 -NCT03189836 -NCT03192397 -NCT03189914 -NCT03192462 -NCT03189953 -NCT03192527 -NCT03189992 -NCT03192540 -NCT03190083 -NCT03192618 -NCT03190122 -NCT03192644 -NCT03190148 -NCT03192683 -NCT03190174 -NCT03192709 -NCT03190213 -NCT03192722 -NCT03190239 -NCT03192735 -NCT03190265 -NCT03192813 -NCT03190278 -NCT03192891 -NCT03190330 -NCT03192943 -NCT03190421 -NCT03192969 -NCT03190525 -NCT03193047 -NCT03190551 -NCT03193073 -NCT03190577 -NCT03193190 -NCT03190616 -NCT03193281 -NCT03190642 -NCT03193424 -NCT03190720 -NCT03193437 -NCT03190733 -NCT03193463 -NCT03190759 -NCT03193541 -NCT03190811 -NCT03193567 -NCT03190824 -NCT03193658 -NCT03190915 -NCT03193788 -NCT03190941 -NCT03193814 -NCT03190967 -NCT03193853 -NCT03190980 -NCT03193892 -NCT03191006 -NCT03193918 -NCT03191097 -NCT03193931 -NCT03191123 -NCT03193944 -NCT03191149 -NCT03193996 -NCT03191201 -NCT03194373 -NCT03191448 -NCT03194399 -NCT03191487 -NCT03194568 -NCT03191552 -NCT03194737 -NCT03191578 -NCT03194750 -NCT03191604 -NCT03199898 -NCT03194867 -NCT03197714 -NCT03194893 -NCT03197636 -NCT03194906 -NCT03197766 -NCT03194932 -NCT03197805 -NCT03194997 -NCT03197831 -NCT03195010 -NCT03197883 -NCT03195075 -NCT03197909 -NCT03195101 -NCT03197922 -NCT03195166 -NCT03197935 -NCT03195179 -NCT03198026 -NCT03195192 -NCT03198052 -NCT03195218 -NCT03198065 -NCT03195322 -NCT03198104 -NCT03195413 -NCT03198117 -NCT03195478 -NCT03198130 -NCT03195491 -NCT03198156 -NCT03195517 -NCT03198234 -NCT03195569 -NCT03198260 -NCT03195673 -NCT03198286 -NCT03195699 -NCT03198312 -NCT03195725 -NCT03198338 -NCT03195751 -NCT03198351 -NCT03195764 -NCT03198390 -NCT03195855 -NCT03198403 -NCT03195907 -NCT03198442 -NCT03195959 -NCT03198468 -NCT03196011 -NCT03198546 -NCT03196037 -NCT03198598 -NCT03196050 -NCT03198611 -NCT03196115 -NCT03198650 -NCT03196180 -NCT03198676 -NCT03196232 -NCT03198728 -NCT03196388 -NCT03198754 -NCT03196414 -NCT03198793 -NCT03196453 -NCT03198897 -NCT03196492 -NCT03198923 -NCT03196518 -NCT03198962 -NCT03196635 -NCT03199027 -NCT03196661 -NCT03199040 -NCT03196778 -NCT03199053 -NCT03196791 -NCT03199144 -NCT03196830 -NCT03199196 -NCT03196843 -NCT03199274 -NCT03196869 -NCT03199352 -NCT03196947 -NCT03199495 -NCT03196986 -NCT03199560 -NCT03197012 -NCT03199586 -NCT03197025 -NCT03199651 -NCT03197194 -NCT03199677 -NCT03197259 -NCT03199716 -NCT03197272 -NCT03199768 -NCT03197389 -NCT03199807 -NCT03197467 -NCT03199833 -NCT03197506 -NCT03199872 -NCT03197571 -NCT03199885 -NCT03197584 -NCT03280667 -NCT03199911 -NCT03202992 -NCT03200002 -NCT03202966 -NCT03200015 -NCT03203005 -NCT03200067 -NCT03203070 -NCT03200093 -NCT03203304 -NCT03200171 -NCT03203343 -NCT03200236 -NCT03203356 -NCT03200249 -NCT03203369 -NCT03200262 -NCT03203382 -NCT03200366 -NCT03203421 -NCT03200496 -NCT03203460 -NCT03200587 -NCT03203473 -NCT03200600 -NCT03203525 -NCT03200639 -NCT03203564 -NCT03200691 -NCT03203616 -NCT03200704 -NCT03203655 -NCT03200717 -NCT03203681 -NCT03200769 -NCT03203694 -NCT03200821 -NCT03203759 -NCT03200834 -NCT03203850 -NCT03200847 -NCT03203863 -NCT03200912 -NCT03203876 -NCT03200977 -NCT03204019 -NCT03200990 -NCT03204032 -NCT03201042 -NCT03204123 -NCT03201146 -NCT03204188 -NCT03201159 -NCT03210168 -NCT03201250 -NCT03210207 -NCT03201302 -NCT03210220 -NCT03201367 -NCT03245151 -NCT03201458 -NCT03245177 -NCT03201471 -NCT03245190 -NCT03201588 -NCT03245203 -NCT03201614 -NCT03245294 -NCT03201666 -NCT03245346 -NCT03201679 -NCT03245385 -NCT03201835 -NCT03252028 -NCT03201861 -NCT03252067 -NCT03201913 -NCT03252106 -NCT03201965 -NCT03252171 -NCT03202173 -NCT03252353 -NCT03202199 -NCT03252392 -NCT03202212 -NCT03252431 -NCT03202251 -NCT03252509 -NCT03202316 -NCT03252548 -NCT03202381 -NCT03252561 -NCT03202407 -NCT03280290 -NCT03202446 -NCT03280355 -NCT03202472 -NCT03280368 -NCT03202537 -NCT03280381 -NCT03202628 -NCT03280407 -NCT03202758 -NCT03280420 -NCT03202771 -NCT03280433 -NCT03202862 -NCT03280446 -NCT03202875 -NCT03280511 -NCT03202940 -NCT03280563 -NCT03204201 -NCT03207139 -NCT03204266 -NCT03207126 -NCT03204292 -NCT03207191 -NCT03204409 -NCT03207230 -NCT03204500 -NCT03207256 -NCT03204539 -NCT03207334 -NCT03204708 -NCT03207347 -NCT03204734 -NCT03207360 -NCT03204747 -NCT03207529 -NCT03204760 -NCT03207542 -NCT03204799 -NCT03207555 -NCT03204812 -NCT03207672 -NCT03204838 -NCT03207724 -NCT03204942 -NCT03207763 -NCT03204994 -NCT03207828 -NCT03205046 -NCT03207867 -NCT03205163 -NCT03207997 -NCT03205176 -NCT03208283 -NCT03205202 -NCT03208296 -NCT03205228 -NCT03208309 -NCT03205267 -NCT03208335 -NCT03205306 -NCT03208361 -NCT03205501 -NCT03208556 -NCT03205579 -NCT03208582 -NCT03205761 -NCT03208712 -NCT03205891 -NCT03208816 -NCT03205969 -NCT03208842 -NCT03205995 -NCT03208894 -NCT03206021 -NCT03208933 -NCT03206047 -NCT03208959 -NCT03206060 -NCT03209050 -NCT03206073 -NCT03209063 -NCT03206086 -NCT03209076 -NCT03206125 -NCT03209089 -NCT03206151 -NCT03209141 -NCT03206177 -NCT03209206 -NCT03206203 -NCT03209258 -NCT03206216 -NCT03209336 -NCT03206281 -NCT03209349 -NCT03206346 -NCT03209375 -NCT03206359 -NCT03209401 -NCT03206489 -NCT03209440 -NCT03206554 -NCT03209453 -NCT03206567 -NCT03209466 -NCT03206645 -NCT03209583 -NCT03206658 -NCT03209700 -NCT03206671 -NCT03209752 -NCT03206684 -NCT03209765 -NCT03206827 -NCT03209869 -NCT03206905 -NCT03209895 -NCT03206918 -NCT03209973 -NCT03206970 -NCT03210038 -NCT03207061 -NCT03210064 -NCT03207074 -NCT03210103 -NCT03207100 -NCT03210129 -NCT03207113 -NCT03245073 -NCT03210311 -NCT03213132 -NCT03210324 -NCT03213054 -NCT03210376 -NCT03213262 -NCT03210389 -NCT03242603 -NCT03210545 -NCT03242616 -NCT03210558 -NCT03242629 -NCT03210662 -NCT03242642 -NCT03210714 -NCT03242824 -NCT03210727 -NCT03242889 -NCT03210740 -NCT03242902 -NCT03210948 -NCT03242915 -NCT03210987 -NCT03242993 -NCT03211026 -NCT03243097 -NCT03211052 -NCT03243188 -NCT03211078 -NCT03243240 -NCT03211091 -NCT03243305 -NCT03211104 -NCT03243331 -NCT03211117 -NCT03243461 -NCT03211169 -NCT03243565 -NCT03211351 -NCT03243643 -NCT03211403 -NCT03243695 -NCT03211416 -NCT03243721 -NCT03211507 -NCT03243734 -NCT03211572 -NCT03243773 -NCT03211585 -NCT03243786 -NCT03211598 -NCT03243825 -NCT03211624 -NCT03243838 -NCT03211780 -NCT03243851 -NCT03211806 -NCT03243916 -NCT03211858 -NCT03243929 -NCT03211897 -NCT03243955 -NCT03211988 -NCT03244020 -NCT03212014 -NCT03244137 -NCT03212079 -NCT03244176 -NCT03212157 -NCT03244202 -NCT03212170 -NCT03244280 -NCT03212235 -NCT03244306 -NCT03212248 -NCT03244345 -NCT03212261 -NCT03244358 -NCT03212274 -NCT03244384 -NCT03212404 -NCT03244553 -NCT03212456 -NCT03244605 -NCT03212469 -NCT03244670 -NCT03212521 -NCT03244683 -NCT03212547 -NCT03244696 -NCT03212560 -NCT03244709 -NCT03212573 -NCT03244735 -NCT03212625 -NCT03244774 -NCT03212651 -NCT03244787 -NCT03212742 -NCT03244826 -NCT03212807 -NCT03244930 -NCT03212872 -NCT03244943 -NCT03212937 -NCT03244956 -NCT03212950 -NCT03244969 -NCT03213002 -NCT03244995 -NCT03213041 -NCT03245021 -NCT03213301 -NCT03222323 -NCT03213314 -NCT03222414 -NCT03213444 -NCT03222440 -NCT03213535 -NCT03222557 -NCT03213587 -NCT03222635 -NCT03213626 -NCT03222648 -NCT03213652 -NCT03222674 -NCT03213665 -NCT03222713 -NCT03213678 -NCT03222739 -NCT03213691 -NCT03222817 -NCT03213704 -NCT03222830 -NCT03213717 -NCT03222856 -NCT03213769 -NCT03222882 -NCT03213834 -NCT03222895 -NCT03213925 -NCT03222947 -NCT03213964 -NCT03223025 -NCT03213977 -NCT03223064 -NCT03214003 -NCT03223103 -NCT03214185 -NCT03223116 -NCT03214250 -NCT03223142 -NCT03214263 -NCT03223155 -NCT03214393 -NCT03223181 -NCT03214419 -NCT03223376 -NCT03214562 -NCT03223441 -NCT03214666 -NCT03223454 -NCT03214692 -NCT03223467 -NCT03214718 -NCT03223519 -NCT03214809 -NCT03223558 -NCT03214835 -NCT03223610 -NCT03214926 -NCT03223649 -NCT03214939 -NCT03223662 -NCT03215030 -NCT03223675 -NCT03215056 -NCT03223688 -NCT03215095 -NCT03223740 -NCT03215147 -NCT03223753 -NCT03215186 -NCT03223779 -NCT03215199 -NCT03223805 -NCT03215264 -NCT03223818 -NCT03215290 -NCT03223870 -NCT03215355 -NCT03223922 -NCT03215407 -NCT03223935 -NCT03215511 -NCT03223961 -NCT03215524 -NCT03242421 -NCT03215537 -NCT03242460 -NCT03215693 -NCT03242499 -NCT03215706 -NCT03242525 -NCT03215719 -NCT03242538 -NCT03215810 -NCT03221335 -NCT03221348 -NCT03221387 -NCT03221400 -NCT03221426 -NCT03221608 -NCT03221634 -NCT03221790 -NCT03221803 -NCT03221881 -NCT03221907 -NCT03221920 -NCT03221933 -NCT03222011 -NCT03222076 -NCT03222089 -NCT03222193 -NCT03222297 -NCT03242551 -NCT03215901 -NCT03218683 -NCT03215914 -NCT03218618 -NCT03215992 -NCT03218696 -NCT03216031 -NCT03218709 -NCT03216057 -NCT03218787 -NCT03216070 -NCT03218826 -NCT03216109 -NCT03218839 -NCT03216148 -NCT03218917 -NCT03216174 -NCT03218982 -NCT03216239 -NCT03218995 -NCT03216330 -NCT03219021 -NCT03216343 -NCT03219047 -NCT03216369 -NCT03219242 -NCT03216395 -NCT03219268 -NCT03216421 -NCT03219333 -NCT03216499 -NCT03219359 -NCT03216525 -NCT03219372 -NCT03216772 -NCT03219385 -NCT03216863 -NCT03219450 -NCT03216889 -NCT03219476 -NCT03216941 -NCT03219502 -NCT03217032 -NCT03219515 -NCT03217071 -NCT03219554 -NCT03217097 -NCT03219593 -NCT03217188 -NCT03219671 -NCT03217201 -NCT03219684 -NCT03217227 -NCT03219736 -NCT03217253 -NCT03219762 -NCT03217266 -NCT03219775 -NCT03217409 -NCT03219918 -NCT03217513 -NCT03219970 -NCT03217539 -NCT03220009 -NCT03217617 -NCT03220022 -NCT03217643 -NCT03220035 -NCT03217656 -NCT03220100 -NCT03217669 -NCT03220113 -NCT03217747 -NCT03220178 -NCT03217773 -NCT03220217 -NCT03217799 -NCT03220256 -NCT03217812 -NCT03220282 -NCT03217838 -NCT03220321 -NCT03217851 -NCT03220347 -NCT03217890 -NCT03220451 -NCT03217903 -NCT03220477 -NCT03217968 -NCT03220646 -NCT03218007 -NCT03220854 -NCT03218059 -NCT03220893 -NCT03218072 -NCT03220932 -NCT03218163 -NCT03220945 -NCT03218254 -NCT03220958 -NCT03218319 -NCT03220984 -NCT03218345 -NCT03221062 -NCT03218384 -NCT03221088 -NCT03218410 -NCT03221205 -NCT03218436 -NCT03221322 -NCT03218475 -NCT03242382 -NCT03224000 -NCT03239951 -NCT03224039 -NCT03240016 -NCT03224104 -NCT03240029 -NCT03224143 -NCT03240146 -NCT03224182 -NCT03240211 -NCT03224208 -NCT03240224 -NCT03224221 -NCT03240341 -NCT03224416 -NCT03240393 -NCT03224507 -NCT03240549 -NCT03224598 -NCT03240562 -NCT03224767 -NCT03240640 -NCT03224806 -NCT03240679 -NCT03224819 -NCT03240731 -NCT03224832 -NCT03240861 -NCT03224871 -NCT03240900 -NCT03224949 -NCT03240926 -NCT03224988 -NCT03241017 -NCT03225040 -NCT03241186 -NCT03225053 -NCT03241199 -NCT03225105 -NCT03241420 -NCT03225131 -NCT03241537 -NCT03225157 -NCT03241680 -NCT03225170 -NCT03241745 -NCT03225235 -NCT03241810 -NCT03225300 -NCT03241823 -NCT03225365 -NCT03241914 -NCT03225417 -NCT03241927 -NCT03225547 -NCT03241940 -NCT03225560 -NCT03242187 -NCT03225625 -NCT03242200 -NCT03225664 -NCT03242226 -NCT03225716 -NCT03242265 -NCT03225781 -NCT03242369 -NCT03225885 -NCT03232268 -NCT03232307 -NCT03232424 -NCT03232515 -NCT03232541 -NCT03232567 -NCT03232619 -NCT03232684 -NCT03232710 -NCT03232775 -NCT03238261 -NCT03238274 -NCT03238339 -NCT03238365 -NCT03238378 -NCT03238391 -NCT03238404 -NCT03238443 -NCT03238495 -NCT03238534 -NCT03238599 -NCT03238638 -NCT03238651 -NCT03238664 -NCT03238703 -NCT03238742 -NCT03238807 -NCT03238820 -NCT03238976 -NCT03238989 -NCT03239015 -NCT03239041 -NCT03239145 -NCT03239158 -NCT03239171 -NCT03239184 -NCT03239223 -NCT03239262 -NCT03239340 -NCT03239392 -NCT03239535 -NCT03239613 -NCT03239626 -NCT03239652 -NCT03239730 -NCT03239756 -NCT03239769 -NCT03239782 -NCT03239886 -NCT03239925 -NCT03225911 -NCT03228758 -NCT03225924 -NCT03228719 -NCT03225937 -NCT03228862 -NCT03225989 -NCT03228992 -NCT03226054 -NCT03229057 -NCT03226119 -NCT03229083 -NCT03226145 -NCT03229096 -NCT03226171 -NCT03229174 -NCT03226236 -NCT03229200 -NCT03226249 -NCT03229278 -NCT03226301 -NCT03229382 -NCT03226405 -NCT03229395 -NCT03226418 -NCT03229408 -NCT03226444 -NCT03229421 -NCT03226470 -NCT03229460 -NCT03226483 -NCT03229512 -NCT03226522 -NCT03229603 -NCT03226535 -NCT03229616 -NCT03226574 -NCT03229668 -NCT03226613 -NCT03229772 -NCT03226691 -NCT03229798 -NCT03226717 -NCT03229824 -NCT03226756 -NCT03229850 -NCT03226782 -NCT03229876 -NCT03226860 -NCT03229993 -NCT03226925 -NCT03230201 -NCT03226964 -NCT03230318 -NCT03227016 -NCT03230331 -NCT03227120 -NCT03230396 -NCT03227211 -NCT03230474 -NCT03227263 -NCT03230500 -NCT03227328 -NCT03230513 -NCT03227432 -NCT03230539 -NCT03227497 -NCT03230734 -NCT03227744 -NCT03230825 -NCT03227848 -NCT03230994 -NCT03227926 -NCT03231072 -NCT03227939 -NCT03231111 -NCT03228043 -NCT03231137 -NCT03228056 -NCT03231163 -NCT03228108 -NCT03231176 -NCT03228147 -NCT03231306 -NCT03228186 -NCT03231423 -NCT03228225 -NCT03231501 -NCT03228277 -NCT03231644 -NCT03228303 -NCT03231657 -NCT03228316 -NCT03231683 -NCT03228368 -NCT03231722 -NCT03228407 -NCT03231865 -NCT03228459 -NCT03231878 -NCT03228485 -NCT03231917 -NCT03228511 -NCT03232125 -NCT03228537 -NCT03232138 -NCT03228641 -NCT03232164 -NCT03228667 -NCT03232177 -NCT03228680 -NCT03238248 -NCT03232801 -NCT03235869 -NCT03232814 -NCT03235713 -NCT03232892 -NCT03235908 -NCT03233009 -NCT03235947 -NCT03233035 -NCT03235973 -NCT03233048 -NCT03236051 -NCT03233126 -NCT03236103 -NCT03233152 -NCT03236155 -NCT03233204 -NCT03236181 -NCT03233295 -NCT03236311 -NCT03233321 -NCT03236428 -NCT03233334 -NCT03236467 -NCT03233347 -NCT03236571 -NCT03233386 -NCT03236636 -NCT03233399 -NCT03236649 -NCT03233412 -NCT03236662 -NCT03233555 -NCT03236792 -NCT03233672 -NCT03236831 -NCT03233711 -NCT03236857 -NCT03233724 -NCT03236883 -NCT03233776 -NCT03236909 -NCT03233828 -NCT03236935 -NCT03233854 -NCT03236961 -NCT03234049 -NCT03236974 -NCT03234114 -NCT03236987 -NCT03234140 -NCT03237013 -NCT03234153 -NCT03237156 -NCT03234218 -NCT03237182 -NCT03234296 -NCT03237208 -NCT03234309 -NCT03237221 -NCT03234361 -NCT03237299 -NCT03234556 -NCT03237312 -NCT03234569 -NCT03237325 -NCT03234595 -NCT03237377 -NCT03234621 -NCT03237390 -NCT03234634 -NCT03237416 -NCT03234712 -NCT03237533 -NCT03234764 -NCT03237572 -NCT03234777 -NCT03237611 -NCT03234842 -NCT03237637 -NCT03234855 -NCT03237663 -NCT03234933 -NCT03237702 -NCT03234946 -NCT03237715 -NCT03234972 -NCT03237780 -NCT03235076 -NCT03237962 -NCT03235141 -NCT03238014 -NCT03235167 -NCT03238027 -NCT03235245 -NCT03238053 -NCT03235271 -NCT03238066 -NCT03235349 -NCT03238092 -NCT03235466 -NCT03238105 -NCT03235544 -NCT03238144 -NCT03235570 -NCT03238170 -NCT03235596 -NCT03238196 -NCT03235648 -NCT03238235 -NCT03235687 -NCT03251924 -NCT03245411 -NCT03248427 -NCT03245450 -NCT03248375 -NCT03245463 -NCT03248492 -NCT03245476 -NCT03248544 -NCT03245489 -NCT03248570 -NCT03245541 -NCT03248661 -NCT03245554 -NCT03248713 -NCT03245645 -NCT03248765 -NCT03245658 -NCT03248843 -NCT03245736 -NCT03248973 -NCT03245788 -NCT03249090 -NCT03245827 -NCT03249142 -NCT03245892 -NCT03249389 -NCT03245905 -NCT03249480 -NCT03245944 -NCT03249519 -NCT03245957 -NCT03249584 -NCT03245983 -NCT03249727 -NCT03246009 -NCT03249766 -NCT03246074 -NCT03249792 -NCT03246113 -NCT03249844 -NCT03246230 -NCT03249870 -NCT03246321 -NCT03250065 -NCT03246347 -NCT03250091 -NCT03246412 -NCT03250130 -NCT03246438 -NCT03250260 -NCT03246464 -NCT03250273 -NCT03246516 -NCT03250299 -NCT03246529 -NCT03250325 -NCT03246542 -NCT03250338 -NCT03246659 -NCT03250351 -NCT03246685 -NCT03250390 -NCT03246711 -NCT03250520 -NCT03246750 -NCT03250676 -NCT03246802 -NCT03250689 -NCT03246841 -NCT03250702 -NCT03246854 -NCT03250832 -NCT03246906 -NCT03250884 -NCT03246945 -NCT03250910 -NCT03246958 -NCT03250962 -NCT03247088 -NCT03251027 -NCT03247127 -NCT03251066 -NCT03247231 -NCT03251183 -NCT03247283 -NCT03251313 -NCT03247309 -NCT03251365 -NCT03247413 -NCT03251378 -NCT03247478 -NCT03251417 -NCT03247634 -NCT03251443 -NCT03247686 -NCT03251469 -NCT03247712 -NCT03251495 -NCT03247738 -NCT03251547 -NCT03247764 -NCT03251560 -NCT03247829 -NCT03251586 -NCT03247933 -NCT03251612 -NCT03247946 -NCT03251638 -NCT03247998 -NCT03251677 -NCT03248219 -NCT03280277 -NCT03252600 -NCT03255369 -NCT03252678 -NCT03255252 -NCT03252717 -NCT03255421 -NCT03252769 -NCT03255434 -NCT03252808 -NCT03255460 -NCT03252821 -NCT03255473 -NCT03252899 -NCT03255486 -NCT03252912 -NCT03255577 -NCT03252925 -NCT03255603 -NCT03252938 -NCT03255642 -NCT03253029 -NCT03255720 -NCT03253068 -NCT03255733 -NCT03253133 -NCT03255811 -NCT03253159 -NCT03255915 -NCT03253172 -NCT03256045 -NCT03253185 -NCT03256071 -NCT03253211 -NCT03256084 -NCT03253250 -NCT03256136 -NCT03253276 -NCT03256201 -NCT03253289 -NCT03256292 -NCT03253367 -NCT03256305 -NCT03253458 -NCT03256331 -NCT03253627 -NCT03256344 -NCT03253653 -NCT03256383 -NCT03253679 -NCT03256396 -NCT03253705 -NCT03256604 -NCT03253744 -NCT03256708 -NCT03253848 -NCT03256721 -NCT03253861 -NCT03256825 -NCT03253913 -NCT03256877 -NCT03253965 -NCT03256916 -NCT03253978 -NCT03256981 -NCT03253991 -NCT03257007 -NCT03254004 -NCT03257033 -NCT03254160 -NCT03257111 -NCT03254173 -NCT03257124 -NCT03254212 -NCT03257137 -NCT03254394 -NCT03257150 -NCT03254407 -NCT03257163 -NCT03254420 -NCT03257241 -NCT03254498 -NCT03257267 -NCT03254511 -NCT03257280 -NCT03254615 -NCT03257293 -NCT03254654 -NCT03257319 -NCT03254732 -NCT03279692 -NCT03254875 -NCT03279770 -NCT03254927 -NCT03279939 -NCT03254940 -NCT03279952 -NCT03255018 -NCT03279991 -NCT03255031 -NCT03280030 -NCT03255057 -NCT03280056 -NCT03255070 -NCT03280121 -NCT03255083 -NCT03280134 -NCT03255096 -NCT03280147 -NCT03255135 -NCT03280160 -NCT03255161 -NCT03280264 -NCT03257410 -NCT03259880 -NCT03257462 -NCT03259867 -NCT03257553 -NCT03260023 -NCT03257566 -NCT03260062 -NCT03257618 -NCT03260088 -NCT03257631 -NCT03260140 -NCT03257644 -NCT03260179 -NCT03257657 -NCT03260231 -NCT03257696 -NCT03260322 -NCT03257722 -NCT03260400 -NCT03257735 -NCT03260491 -NCT03257761 -NCT03260504 -NCT03257800 -NCT03260673 -NCT03257891 -NCT03260712 -NCT03257930 -NCT03260855 -NCT03257969 -NCT03260868 -NCT03258008 -NCT03260881 -NCT03258034 -NCT03260894 -NCT03258047 -NCT03272373 -NCT03258229 -NCT03272386 -NCT03258307 -NCT03272399 -NCT03258320 -NCT03272464 -NCT03258359 -NCT03272477 -NCT03258398 -NCT03272503 -NCT03258450 -NCT03272568 -NCT03258515 -NCT03272633 -NCT03258541 -NCT03272659 -NCT03258554 -NCT03272789 -NCT03258567 -NCT03272880 -NCT03258593 -NCT03272932 -NCT03258658 -NCT03272971 -NCT03258671 -NCT03272984 -NCT03258684 -NCT03272997 -NCT03258710 -NCT03273153 -NCT03258736 -NCT03273231 -NCT03258892 -NCT03273348 -NCT03258931 -NCT03273374 -NCT03258944 -NCT03273426 -NCT03259022 -NCT03273452 -NCT03259035 -NCT03273465 -NCT03259048 -NCT03273595 -NCT03259061 -NCT03273621 -NCT03259087 -NCT03273634 -NCT03259152 -NCT03273647 -NCT03259165 -NCT03273686 -NCT03259178 -NCT03273712 -NCT03259282 -NCT03273751 -NCT03259425 -NCT03273920 -NCT03259438 -NCT03273998 -NCT03259477 -NCT03279250 -NCT03259503 -NCT03279289 -NCT03259516 -NCT03279367 -NCT03259529 -NCT03279432 -NCT03259581 -NCT03279588 -NCT03259607 -NCT03279601 -NCT03259828 -NCT03279614 -NCT03261011 -NCT03264066 -NCT03261180 -NCT03264040 -NCT03261245 -NCT03264092 -NCT03261271 -NCT03264131 -NCT03261297 -NCT03264170 -NCT03261323 -NCT03264209 -NCT03261336 -NCT03264274 -NCT03261349 -NCT03270007 -NCT03261648 -NCT03270020 -NCT03261713 -NCT03270059 -NCT03261726 -NCT03270085 -NCT03261778 -NCT03270111 -NCT03261791 -NCT03270137 -NCT03261947 -NCT03270176 -NCT03261999 -NCT03270215 -NCT03262103 -NCT03270241 -NCT03262207 -NCT03270384 -NCT03262246 -NCT03270488 -NCT03262259 -NCT03270553 -NCT03262298 -NCT03270657 -NCT03262311 -NCT03270722 -NCT03262389 -NCT03270982 -NCT03262454 -NCT03270995 -NCT03262545 -NCT03271021 -NCT03262610 -NCT03271047 -NCT03262623 -NCT03271073 -NCT03262636 -NCT03271099 -NCT03262753 -NCT03271138 -NCT03262779 -NCT03271203 -NCT03262792 -NCT03271255 -NCT03262805 -NCT03271281 -NCT03262831 -NCT03271294 -NCT03262935 -NCT03271372 -NCT03262948 -NCT03271385 -NCT03263026 -NCT03271476 -NCT03263039 -NCT03271489 -NCT03263130 -NCT03271502 -NCT03263195 -NCT03271515 -NCT03263208 -NCT03271554 -NCT03263273 -NCT03271567 -NCT03263299 -NCT03271606 -NCT03263351 -NCT03271632 -NCT03263403 -NCT03271671 -NCT03263416 -NCT03271723 -NCT03263429 -NCT03271749 -NCT03263520 -NCT03271762 -NCT03263572 -NCT03271814 -NCT03263585 -NCT03271892 -NCT03263611 -NCT03271905 -NCT03263637 -NCT03271918 -NCT03263650 -NCT03271957 -NCT03263715 -NCT03271970 -NCT03263741 -NCT03272087 -NCT03263780 -NCT03272217 -NCT03263923 -NCT03272256 -NCT03263936 -NCT03272334 -NCT03264300 -NCT03267329 -NCT03264352 -NCT03267316 -NCT03264404 -NCT03267368 -NCT03264456 -NCT03267381 -NCT03264482 -NCT03267433 -NCT03264547 -NCT03267498 -NCT03264599 -NCT03267524 -NCT03264612 -NCT03267589 -NCT03264664 -NCT03267602 -NCT03264716 -NCT03267628 -NCT03264781 -NCT03267654 -NCT03264794 -NCT03267680 -NCT03264807 -NCT03267836 -NCT03264885 -NCT03267888 -NCT03264989 -NCT03267914 -NCT03265080 -NCT03267940 -NCT03265106 -NCT03267966 -NCT03265132 -NCT03268057 -NCT03265301 -NCT03268200 -NCT03265392 -NCT03268317 -NCT03265418 -NCT03268343 -NCT03265483 -NCT03268382 -NCT03265496 -NCT03268499 -NCT03265574 -NCT03268603 -NCT03265652 -NCT03268629 -NCT03265717 -NCT03268681 -NCT03265730 -NCT03268772 -NCT03265860 -NCT03268785 -NCT03265925 -NCT03268824 -NCT03266003 -NCT03268889 -NCT03266068 -NCT03268954 -NCT03266185 -NCT03268993 -NCT03266276 -NCT03269136 -NCT03266419 -NCT03269149 -NCT03266432 -NCT03269162 -NCT03266471 -NCT03269201 -NCT03266562 -NCT03269227 -NCT03266692 -NCT03269292 -NCT03266718 -NCT03269318 -NCT03266731 -NCT03269344 -NCT03266744 -NCT03269422 -NCT03266770 -NCT03269435 -NCT03266900 -NCT03269526 -NCT03266913 -NCT03269552 -NCT03267017 -NCT03269565 -NCT03267030 -NCT03269604 -NCT03267069 -NCT03269630 -NCT03267082 -NCT03269669 -NCT03267108 -NCT03269812 -NCT03267121 -NCT03269877 -NCT03267147 -NCT03269903 -NCT03267173 -NCT03269929 -NCT03267186 -NCT03269955 -NCT03267251 -NCT03269981 -NCT03267290 -NCT03269994 -NCT03267303 -NCT03279237 -NCT03274011 -NCT03276676 -NCT03274063 -NCT03276650 -NCT03274206 -NCT03276715 -NCT03274219 -NCT03276728 -NCT03274232 -NCT03276806 -NCT03274258 -NCT03276819 -NCT03274284 -NCT03276832 -NCT03274349 -NCT03276845 -NCT03274388 -NCT03276871 -NCT03274414 -NCT03276923 -NCT03274427 -NCT03276962 -NCT03274479 -NCT03276975 -NCT03274492 -NCT03277066 -NCT03274544 -NCT03277105 -NCT03274661 -NCT03277144 -NCT03274687 -NCT03277170 -NCT03274726 -NCT03277209 -NCT03274778 -NCT03277235 -NCT03274804 -NCT03277261 -NCT03274830 -NCT03277287 -NCT03274882 -NCT03277352 -NCT03274960 -NCT03277469 -NCT03274973 -NCT03277482 -NCT03275090 -NCT03277638 -NCT03275103 -NCT03277690 -NCT03275181 -NCT03277716 -NCT03275194 -NCT03277729 -NCT03275272 -NCT03277859 -NCT03275285 -NCT03277898 -NCT03275376 -NCT03277924 -NCT03275402 -NCT03277963 -NCT03275493 -NCT03278015 -NCT03275506 -NCT03278106 -NCT03275519 -NCT03278145 -NCT03275558 -NCT03278158 -NCT03275597 -NCT03278197 -NCT03275636 -NCT03278210 -NCT03275727 -NCT03278249 -NCT03275792 -NCT03278275 -NCT03275818 -NCT03278327 -NCT03275844 -NCT03278340 -NCT03275857 -NCT03278379 -NCT03275974 -NCT03278405 -NCT03275987 -NCT03278444 -NCT03276013 -NCT03278561 -NCT03276091 -NCT03278574 -NCT03276156 -NCT03278600 -NCT03276195 -NCT03278626 -NCT03276234 -NCT03278652 -NCT03276247 -NCT03278665 -NCT03276286 -NCT03278717 -NCT03276468 -NCT03278782 -NCT03276507 -NCT03278808 -NCT03276572 -NCT03279120 -NCT03276585 -NCT03279198 -NCT03276624 -NCT03286413 -NCT03280693 -NCT03283371 -NCT03280719 -NCT03283319 -NCT03280784 -NCT03283384 -NCT03280836 -NCT03283423 -NCT03280849 -NCT03283488 -NCT03280862 -NCT03283553 -NCT03281018 -NCT03283605 -NCT03281031 -NCT03283618 -NCT03281070 -NCT03283631 -NCT03281109 -NCT03283696 -NCT03281122 -NCT03283761 -NCT03281135 -NCT03283813 -NCT03281161 -NCT03283852 -NCT03281187 -NCT03283917 -NCT03281369 -NCT03283943 -NCT03281382 -NCT03284346 -NCT03281421 -NCT03284385 -NCT03281447 -NCT03284424 -NCT03281499 -NCT03284489 -NCT03281551 -NCT03284502 -NCT03281681 -NCT03284554 -NCT03281720 -NCT03284567 -NCT03281746 -NCT03284619 -NCT03281811 -NCT03284658 -NCT03281824 -NCT03284710 -NCT03281837 -NCT03284723 -NCT03281889 -NCT03284775 -NCT03281902 -NCT03284866 -NCT03281915 -NCT03284957 -NCT03281954 -NCT03285048 -NCT03282006 -NCT03285152 -NCT03282058 -NCT03285321 -NCT03282084 -NCT03285412 -NCT03282097 -NCT03285490 -NCT03282149 -NCT03285568 -NCT03282188 -NCT03285607 -NCT03282214 -NCT03285620 -NCT03282344 -NCT03285633 -NCT03282396 -NCT03285724 -NCT03282435 -NCT03285763 -NCT03282461 -NCT03285802 -NCT03282474 -NCT03285815 -NCT03282487 -NCT03285906 -NCT03282617 -NCT03285919 -NCT03282643 -NCT03285932 -NCT03282682 -NCT03285945 -NCT03282825 -NCT03286062 -NCT03283007 -NCT03286088 -NCT03283046 -NCT03286114 -NCT03283059 -NCT03286153 -NCT03283111 -NCT03286166 -NCT03283137 -NCT03286244 -NCT03283176 -NCT03286257 -NCT03283202 -NCT03286296 -NCT03283293 -NCT03286335 -NCT03283306 -NCT03308942 -NCT03286517 -NCT03289286 -NCT03286530 -NCT03289221 -NCT03286634 -NCT03289299 -NCT03286699 -NCT03289351 -NCT03286842 -NCT03289364 -NCT03286855 -NCT03289390 -NCT03287024 -NCT03289416 -NCT03287050 -NCT03289455 -NCT03287141 -NCT03289533 -NCT03287193 -NCT03289585 -NCT03287206 -NCT03289702 -NCT03287245 -NCT03289741 -NCT03287271 -NCT03289819 -NCT03287375 -NCT03289832 -NCT03287427 -NCT03306849 -NCT03287453 -NCT03306901 -NCT03287492 -NCT03306992 -NCT03287557 -NCT03307005 -NCT03287635 -NCT03307044 -NCT03287648 -NCT03307070 -NCT03287674 -NCT03307096 -NCT03287778 -NCT03307122 -NCT03287791 -NCT03307148 -NCT03287804 -NCT03307265 -NCT03287817 -NCT03307317 -NCT03287843 -NCT03307330 -NCT03287908 -NCT03307382 -NCT03287921 -NCT03307460 -NCT03287947 -NCT03307512 -NCT03287999 -NCT03307538 -NCT03288012 -NCT03307564 -NCT03288103 -NCT03307603 -NCT03288116 -NCT03307616 -NCT03288259 -NCT03307629 -NCT03288272 -NCT03307746 -NCT03288298 -NCT03307759 -NCT03288337 -NCT03307785 -NCT03288350 -NCT03307811 -NCT03288402 -NCT03307876 -NCT03288454 -NCT03307941 -NCT03288480 -NCT03307993 -NCT03288493 -NCT03308006 -NCT03288532 -NCT03308084 -NCT03288545 -NCT03308149 -NCT03288636 -NCT03308201 -NCT03288662 -NCT03308266 -NCT03288714 -NCT03308370 -NCT03288792 -NCT03308396 -NCT03288818 -NCT03308435 -NCT03288831 -NCT03308487 -NCT03288870 -NCT03308526 -NCT03288922 -NCT03308552 -NCT03288987 -NCT03308591 -NCT03289039 -NCT03308604 -NCT03289117 -NCT03308682 -NCT03289195 -NCT03308734 -NCT03289910 -NCT03304314 -NCT03289962 -NCT03304366 -NCT03290027 -NCT03304379 -NCT03290066 -NCT03304405 -NCT03290079 -NCT03304418 -NCT03290183 -NCT03304444 -NCT03290209 -NCT03304587 -NCT03290235 -NCT03304639 -NCT03290313 -NCT03304678 -NCT03290417 -NCT03304730 -NCT03290456 -NCT03304756 -NCT03290534 -NCT03304795 -NCT03290586 -NCT03304847 -NCT03290651 -NCT03304860 -NCT03290677 -NCT03304925 -NCT03290703 -NCT03305146 -NCT03290755 -NCT03305185 -NCT03290807 -NCT03305224 -NCT03290820 -NCT03305276 -NCT03290937 -NCT03305445 -NCT03290950 -NCT03305549 -NCT03291002 -NCT03305588 -NCT03291015 -NCT03305627 -NCT03291028 -NCT03305653 -NCT03291054 -NCT03305705 -NCT03291080 -NCT03305757 -NCT03291210 -NCT03305783 -NCT03291314 -NCT03305809 -NCT03291327 -NCT03305913 -NCT03291353 -NCT03305965 -NCT03291379 -NCT03305978 -NCT03291444 -NCT03306004 -NCT03291522 -NCT03306030 -NCT03291535 -NCT03306121 -NCT03291600 -NCT03306264 -NCT03291652 -NCT03306290 -NCT03291678 -NCT03306329 -NCT03291886 -NCT03306381 -NCT03291899 -NCT03306394 -NCT03291912 -NCT03306420 -NCT03291925 -NCT03306446 -NCT03291938 -NCT03306472 -NCT03291951 -NCT03306485 -NCT03291964 -NCT03306498 -NCT03291977 -NCT03306641 -NCT03291990 -NCT03306680 -NCT03292055 -NCT03306693 -NCT03292133 -NCT03306771 -NCT03292146 -NCT03306784 -NCT03292172 -NCT03306823 -NCT03292198 -NCT03303521 -NCT03303547 -NCT03303586 -NCT03303937 -NCT03303950 -NCT03303963 -NCT03304054 -NCT03304080 -NCT03304093 -NCT03304145 -NCT03304184 -NCT03304210 -NCT03292211 -NCT03294746 -NCT03292237 -NCT03294733 -NCT03292250 -NCT03294889 -NCT03292263 -NCT03294902 -NCT03292289 -NCT03294954 -NCT03292302 -NCT03295084 -NCT03292328 -NCT03295162 -NCT03292341 -NCT03295175 -NCT03292406 -NCT03295227 -NCT03292497 -NCT03295240 -NCT03292536 -NCT03295279 -NCT03292588 -NCT03295383 -NCT03292640 -NCT03295396 -NCT03292757 -NCT03295526 -NCT03292783 -NCT03295552 -NCT03292822 -NCT03295565 -NCT03292835 -NCT03295643 -NCT03292874 -NCT03295695 -NCT03292978 -NCT03295721 -NCT03293108 -NCT03295747 -NCT03293173 -NCT03295916 -NCT03293186 -NCT03295942 -NCT03293212 -NCT03295981 -NCT03293238 -NCT03296098 -NCT03293251 -NCT03296137 -NCT03293368 -NCT03296150 -NCT03293394 -NCT03296163 -NCT03293524 -NCT03296241 -NCT03293602 -NCT03296267 -NCT03293615 -NCT03296306 -NCT03293628 -NCT03296319 -NCT03293667 -NCT03296358 -NCT03293680 -NCT03296397 -NCT03293693 -NCT03302559 -NCT03293784 -NCT03302598 -NCT03293849 -NCT03302676 -NCT03293992 -NCT03302728 -NCT03294044 -NCT03302767 -NCT03294083 -NCT03302819 -NCT03294096 -NCT03302858 -NCT03294148 -NCT03302884 -NCT03294187 -NCT03302910 -NCT03294239 -NCT03302962 -NCT03294252 -NCT03303053 -NCT03294304 -NCT03303066 -NCT03294317 -NCT03303157 -NCT03294330 -NCT03303183 -NCT03294343 -NCT03303287 -NCT03294408 -NCT03303313 -NCT03294421 -NCT03303339 -NCT03294460 -NCT03303352 -NCT03294486 -NCT03303365 -NCT03294525 -NCT03303430 -NCT03294538 -NCT03303469 -NCT03294603 -NCT03303482 -NCT03294694 -NCT03303495 -NCT03296501 -NCT03299465 -NCT03296514 -NCT03299452 -NCT03296527 -NCT03299660 -NCT03296553 -NCT03299673 -NCT03296566 -NCT03299738 -NCT03296579 -NCT03299829 -NCT03296683 -NCT03299855 -NCT03296696 -NCT03299894 -NCT03296709 -NCT03299946 -NCT03296787 -NCT03299985 -NCT03296878 -NCT03299998 -NCT03296930 -NCT03300115 -NCT03296982 -NCT03300193 -NCT03297177 -NCT03300284 -NCT03297307 -NCT03300362 -NCT03297346 -NCT03300375 -NCT03297359 -NCT03300401 -NCT03297385 -NCT03300492 -NCT03297424 -NCT03300505 -NCT03297463 -NCT03300544 -NCT03297489 -NCT03300557 -NCT03297528 -NCT03300570 -NCT03297593 -NCT03300609 -NCT03297606 -NCT03300674 -NCT03297632 -NCT03300687 -NCT03297671 -NCT03300765 -NCT03297710 -NCT03300817 -NCT03297788 -NCT03300843 -NCT03297892 -NCT03300908 -NCT03297957 -NCT03300921 -NCT03298074 -NCT03301155 -NCT03298087 -NCT03301168 -NCT03298321 -NCT03301207 -NCT03298373 -NCT03301220 -NCT03298399 -NCT03301233 -NCT03298412 -NCT03301272 -NCT03298451 -NCT03301350 -NCT03298516 -NCT03301454 -NCT03298594 -NCT03301597 -NCT03298607 -NCT03301636 -NCT03298685 -NCT03301675 -NCT03298763 -NCT03301688 -NCT03298828 -NCT03301701 -NCT03298867 -NCT03301753 -NCT03298893 -NCT03301805 -NCT03298945 -NCT03301857 -NCT03298958 -NCT03301896 -NCT03298984 -NCT03302104 -NCT03299036 -NCT03302156 -NCT03299088 -NCT03302221 -NCT03299114 -NCT03302234 -NCT03299283 -NCT03302247 -NCT03299309 -NCT03302403 -NCT03299322 -NCT03302442 -NCT03299335 -NCT03302468 -NCT03299439 -NCT03314896 -NCT03309111 -NCT03312530 -NCT03309150 -NCT03312478 -NCT03309293 -NCT03312543 -NCT03309319 -NCT03312634 -NCT03309358 -NCT03312686 -NCT03309410 -NCT03312738 -NCT03309462 -NCT03312777 -NCT03309488 -NCT03312842 -NCT03309501 -NCT03312907 -NCT03309852 -NCT03312972 -NCT03309878 -NCT03313011 -NCT03309891 -NCT03313089 -NCT03309917 -NCT03313102 -NCT03310008 -NCT03313128 -NCT03310021 -NCT03313154 -NCT03310164 -NCT03313193 -NCT03310190 -NCT03313206 -NCT03310372 -NCT03313219 -NCT03310424 -NCT03313271 -NCT03310463 -NCT03313284 -NCT03310541 -NCT03313323 -NCT03310567 -NCT03313362 -NCT03310619 -NCT03313492 -NCT03310632 -NCT03313531 -NCT03310645 -NCT03313544 -NCT03310671 -NCT03313557 -NCT03310879 -NCT03313596 -NCT03310892 -NCT03313635 -NCT03310918 -NCT03313648 -NCT03310957 -NCT03313700 -NCT03310996 -NCT03313726 -NCT03311035 -NCT03313778 -NCT03311126 -NCT03313804 -NCT03311152 -NCT03313856 -NCT03311204 -NCT03313908 -NCT03311308 -NCT03314025 -NCT03311334 -NCT03314090 -NCT03311412 -NCT03314116 -NCT03311451 -NCT03314168 -NCT03311477 -NCT03314181 -NCT03311555 -NCT03314259 -NCT03311620 -NCT03314311 -NCT03311672 -NCT03314324 -NCT03311685 -NCT03314415 -NCT03311750 -NCT03314441 -NCT03311789 -NCT03314480 -NCT03311828 -NCT03314532 -NCT03311932 -NCT03314584 -NCT03311958 -NCT03314636 -NCT03312062 -NCT03314688 -NCT03312114 -NCT03314740 -NCT03312153 -NCT03314792 -NCT03312205 -NCT03314805 -NCT03312244 -NCT03314844 -NCT03312257 -NCT03314870 -NCT03312309 -NCT03320083 -NCT03314922 -NCT03317899 -NCT03314935 -NCT03317886 -NCT03314974 -NCT03317977 -NCT03314987 -NCT03317990 -NCT03315026 -NCT03318016 -NCT03315039 -NCT03318029 -NCT03315065 -NCT03318068 -NCT03315078 -NCT03318107 -NCT03315130 -NCT03318159 -NCT03315195 -NCT03318198 -NCT03315286 -NCT03318237 -NCT03315351 -NCT03318263 -NCT03315364 -NCT03318315 -NCT03315403 -NCT03318328 -NCT03315455 -NCT03318341 -NCT03315481 -NCT03318393 -NCT03315520 -NCT03318419 -NCT03315533 -NCT03318445 -NCT03315546 -NCT03318471 -NCT03315585 -NCT03318497 -NCT03315754 -NCT03318510 -NCT03315871 -NCT03318523 -NCT03315975 -NCT03318562 -NCT03316053 -NCT03318614 -NCT03316144 -NCT03318783 -NCT03316157 -NCT03318861 -NCT03316222 -NCT03318900 -NCT03316274 -NCT03318939 -NCT03316326 -NCT03318952 -NCT03316469 -NCT03318991 -NCT03316521 -NCT03319030 -NCT03316547 -NCT03319043 -NCT03316573 -NCT03319069 -NCT03316586 -NCT03319121 -NCT03316599 -NCT03319186 -NCT03316638 -NCT03319251 -NCT03316677 -NCT03319316 -NCT03316742 -NCT03319342 -NCT03316794 -NCT03319420 -NCT03316872 -NCT03319459 -NCT03316898 -NCT03319472 -NCT03317119 -NCT03319511 -NCT03317158 -NCT03319537 -NCT03317210 -NCT03319602 -NCT03317262 -NCT03319628 -NCT03317327 -NCT03319641 -NCT03317366 -NCT03319667 -NCT03317392 -NCT03319745 -NCT03317405 -NCT03319810 -NCT03317457 -NCT03319823 -NCT03317496 -NCT03319862 -NCT03317574 -NCT03319901 -NCT03317730 -NCT03319940 -NCT03317743 -NCT03319966 -NCT03317795 -NCT03319992 -NCT03317808 -NCT03324932 -NCT03320213 -NCT03322735 -NCT03320330 -NCT03322696 -NCT03320421 -NCT03322761 -NCT03320460 -NCT03322800 -NCT03320486 -NCT03322813 -NCT03320525 -NCT03322865 -NCT03320538 -NCT03322891 -NCT03320577 -NCT03322904 -NCT03320590 -NCT03322930 -NCT03320629 -NCT03322969 -NCT03320733 -NCT03322995 -NCT03320772 -NCT03323021 -NCT03320798 -NCT03323034 -NCT03320811 -NCT03323047 -NCT03320915 -NCT03323060 -NCT03320928 -NCT03323151 -NCT03320941 -NCT03323229 -NCT03321019 -NCT03323333 -NCT03321045 -NCT03323346 -NCT03321097 -NCT03323359 -NCT03321123 -NCT03323398 -NCT03321149 -NCT03323424 -NCT03321188 -NCT03323450 -NCT03321240 -NCT03323463 -NCT03321396 -NCT03323476 -NCT03321448 -NCT03323489 -NCT03321461 -NCT03323528 -NCT03321487 -NCT03323580 -NCT03321513 -NCT03323658 -NCT03321526 -NCT03323710 -NCT03321539 -NCT03323775 -NCT03321630 -NCT03323788 -NCT03321643 -NCT03323801 -NCT03321734 -NCT03323827 -NCT03321747 -NCT03323879 -NCT03321760 -NCT03323905 -NCT03321825 -NCT03323944 -NCT03321864 -NCT03324009 -NCT03321890 -NCT03324061 -NCT03321903 -NCT03324074 -NCT03321929 -NCT03324113 -NCT03321981 -NCT03324165 -NCT03322020 -NCT03324243 -NCT03322059 -NCT03324282 -NCT03322072 -NCT03324295 -NCT03322215 -NCT03324308 -NCT03322267 -NCT03324360 -NCT03322280 -NCT03324373 -NCT03322345 -NCT03324425 -NCT03322384 -NCT03324503 -NCT03322514 -NCT03324542 -NCT03322540 -NCT03324737 -NCT03322566 -NCT03324802 -NCT03322592 -NCT03324815 -NCT03322644 -NCT03324880 -NCT03322670 -NCT03330106 -NCT03324958 -NCT03327740 -NCT03325023 -NCT03327701 -NCT03325088 -NCT03327779 -NCT03325101 -NCT03327831 -NCT03325166 -NCT03327857 -NCT03325192 -NCT03327896 -NCT03325205 -NCT03327974 -NCT03325244 -NCT03327987 -NCT03325296 -NCT03328000 -NCT03325309 -NCT03328026 -NCT03325348 -NCT03328065 -NCT03325361 -NCT03328078 -NCT03325374 -NCT03328091 -NCT03325387 -NCT03328104 -NCT03325465 -NCT03328169 -NCT03325634 -NCT03328234 -NCT03325647 -NCT03328247 -NCT03325790 -NCT03328260 -NCT03325803 -NCT03328273 -NCT03325816 -NCT03328325 -NCT03325829 -NCT03328338 -NCT03325868 -NCT03328390 -NCT03325907 -NCT03328403 -NCT03325933 -NCT03328416 -NCT03325985 -NCT03328429 -NCT03326024 -NCT03328559 -NCT03326102 -NCT03328663 -NCT03326154 -NCT03328676 -NCT03326193 -NCT03328858 -NCT03326232 -NCT03328884 -NCT03326258 -NCT03328936 -NCT03326310 -NCT03328975 -NCT03326375 -NCT03329001 -NCT03326388 -NCT03329027 -NCT03326440 -NCT03329040 -NCT03326583 -NCT03329183 -NCT03326622 -NCT03329235 -NCT03326674 -NCT03329248 -NCT03326713 -NCT03329261 -NCT03326752 -NCT03329274 -NCT03326791 -NCT03329300 -NCT03326843 -NCT03329365 -NCT03326895 -NCT03329378 -NCT03326921 -NCT03329534 -NCT03326947 -NCT03329664 -NCT03326986 -NCT03329690 -NCT03327025 -NCT03329742 -NCT03327064 -NCT03329755 -NCT03327233 -NCT03329846 -NCT03327285 -NCT03329885 -NCT03327428 -NCT03329911 -NCT03327597 -NCT03329937 -NCT03327636 -NCT03329950 -NCT03327662 -NCT03329963 -NCT03327675 -NCT03330015 -NCT03327688 -NCT03335826 -NCT03330158 -NCT03332927 -NCT03330197 -NCT03332797 -NCT03330249 -NCT03332992 -NCT03330275 -NCT03333005 -NCT03330288 -NCT03333031 -NCT03330353 -NCT03333070 -NCT03330379 -NCT03333109 -NCT03330405 -NCT03333226 -NCT03330457 -NCT03333330 -NCT03330522 -NCT03333343 -NCT03330561 -NCT03333486 -NCT03330600 -NCT03333616 -NCT03330691 -NCT03333655 -NCT03330717 -NCT03333694 -NCT03330730 -NCT03333746 -NCT03330821 -NCT03333785 -NCT03330834 -NCT03333837 -NCT03330847 -NCT03333863 -NCT03330964 -NCT03333915 -NCT03330990 -NCT03333993 -NCT03331042 -NCT03334071 -NCT03331055 -NCT03334162 -NCT03331198 -NCT03334188 -NCT03331250 -NCT03334227 -NCT03331276 -NCT03334292 -NCT03331315 -NCT03334305 -NCT03331341 -NCT03334344 -NCT03331367 -NCT03334383 -NCT03331406 -NCT03334409 -NCT03331445 -NCT03334487 -NCT03331458 -NCT03334500 -NCT03331510 -NCT03334539 -NCT03331562 -NCT03334617 -NCT03331575 -NCT03334682 -NCT03331588 -NCT03334695 -NCT03331601 -NCT03334708 -NCT03331627 -NCT03334864 -NCT03331640 -NCT03334955 -NCT03331731 -NCT03335033 -NCT03332017 -NCT03335059 -NCT03332069 -NCT03335098 -NCT03332121 -NCT03335124 -NCT03332160 -NCT03335189 -NCT03332199 -NCT03335202 -NCT03332225 -NCT03335241 -NCT03332303 -NCT03335254 -NCT03332355 -NCT03335267 -NCT03332368 -NCT03335319 -NCT03332433 -NCT03335332 -NCT03332472 -NCT03335384 -NCT03332498 -NCT03335527 -NCT03332511 -NCT03335540 -NCT03332576 -NCT03335631 -NCT03332589 -NCT03335670 -NCT03332667 -NCT03335813 -NCT03332745 -NCT03341364 -NCT03335839 -NCT03338868 -NCT03335865 -NCT03338790 -NCT03335878 -NCT03338881 -NCT03335904 -NCT03338920 -NCT03335969 -NCT03338959 -NCT03336021 -NCT03338972 -NCT03336034 -NCT03338985 -NCT03336047 -NCT03339076 -NCT03336073 -NCT03339102 -NCT03336138 -NCT03339115 -NCT03336203 -NCT03339128 -NCT03336216 -NCT03339219 -NCT03336229 -NCT03339362 -NCT03336333 -NCT03339518 -NCT03336476 -NCT03339531 -NCT03336528 -NCT03339544 -NCT03336606 -NCT03339622 -NCT03336632 -NCT03339635 -NCT03336827 -NCT03339700 -NCT03336905 -NCT03339726 -NCT03336983 -NCT03339765 -NCT03337035 -NCT03339804 -NCT03337048 -NCT03339843 -NCT03337061 -NCT03339908 -NCT03337087 -NCT03339973 -NCT03337139 -NCT03340012 -NCT03337165 -NCT03340038 -NCT03337256 -NCT03340116 -NCT03337269 -NCT03340129 -NCT03337347 -NCT03340155 -NCT03337360 -NCT03340259 -NCT03337399 -NCT03340298 -NCT03337451 -NCT03340376 -NCT03337516 -NCT03340402 -NCT03337607 -NCT03340415 -NCT03337698 -NCT03340506 -NCT03337724 -NCT03340558 -NCT03337776 -NCT03340584 -NCT03337789 -NCT03340740 -NCT03337841 -NCT03340766 -NCT03337919 -NCT03340844 -NCT03337932 -NCT03340857 -NCT03337997 -NCT03340883 -NCT03338049 -NCT03340896 -NCT03338062 -NCT03340935 -NCT03338218 -NCT03340948 -NCT03338348 -NCT03340961 -NCT03338400 -NCT03340974 -NCT03338426 -NCT03341039 -NCT03338465 -NCT03341104 -NCT03338530 -NCT03341143 -NCT03338543 -NCT03341208 -NCT03338621 -NCT03341221 -NCT03338647 -NCT03341286 -NCT03338764 -NCT03341338 -NCT03338777 -NCT03347097 -NCT03341468 -NCT03344406 -NCT03341520 -NCT03344367 -NCT03341533 -NCT03344497 -NCT03341546 -NCT03344536 -NCT03341650 -NCT03344588 -NCT03341689 -NCT03344614 -NCT03341754 -NCT03344744 -NCT03341806 -NCT03344757 -NCT03341845 -NCT03344822 -NCT03341871 -NCT03344835 -NCT03341910 -NCT03344861 -NCT03341936 -NCT03344913 -NCT03341988 -NCT03344965 -NCT03342001 -NCT03344991 -NCT03342144 -NCT03345095 -NCT03342196 -NCT03345108 -NCT03342235 -NCT03345134 -NCT03342261 -NCT03345186 -NCT03342274 -NCT03345225 -NCT03342352 -NCT03345251 -NCT03342365 -NCT03345264 -NCT03342417 -NCT03345277 -NCT03342430 -NCT03345303 -NCT03342625 -NCT03345407 -NCT03342664 -NCT03345420 -NCT03342677 -NCT03345472 -NCT03342716 -NCT03345485 -NCT03342755 -NCT03345498 -NCT03342794 -NCT03345563 -NCT03342859 -NCT03345641 -NCT03342911 -NCT03345654 -NCT03342937 -NCT03345693 -NCT03343002 -NCT03345784 -NCT03343054 -NCT03345810 -NCT03343093 -NCT03345875 -NCT03343145 -NCT03345940 -NCT03343197 -NCT03345966 -NCT03343210 -NCT03346005 -NCT03343249 -NCT03346057 -NCT03343301 -NCT03346096 -NCT03343327 -NCT03346109 -NCT03343405 -NCT03346135 -NCT03343470 -NCT03346161 -NCT03343613 -NCT03346304 -NCT03343652 -NCT03346421 -NCT03343665 -NCT03346603 -NCT03343678 -NCT03346642 -NCT03343925 -NCT03346733 -NCT03343977 -NCT03346759 -NCT03344016 -NCT03346811 -NCT03344029 -NCT03346915 -NCT03344068 -NCT03346954 -NCT03344172 -NCT03346967 -NCT03344211 -NCT03347045 -NCT03344250 -NCT03347058 -NCT03344276 -NCT03352349 -NCT03347123 -NCT03349437 -NCT03347149 -NCT03349411 -NCT03347253 -NCT03349450 -NCT03347292 -NCT03349463 -NCT03347344 -NCT03349502 -NCT03347409 -NCT03349710 -NCT03347461 -NCT03349827 -NCT03347513 -NCT03349840 -NCT03347591 -NCT03349866 -NCT03347617 -NCT03349879 -NCT03347630 -NCT03349892 -NCT03347656 -NCT03350048 -NCT03347721 -NCT03350087 -NCT03347799 -NCT03350126 -NCT03347838 -NCT03350139 -NCT03347864 -NCT03350217 -NCT03347903 -NCT03350243 -NCT03347929 -NCT03350425 -NCT03347994 -NCT03350477 -NCT03348007 -NCT03350490 -NCT03348033 -NCT03350503 -NCT03348046 -NCT03350529 -NCT03348059 -NCT03350594 -NCT03348098 -NCT03350620 -NCT03348124 -NCT03350646 -NCT03348150 -NCT03350659 -NCT03348189 -NCT03350685 -NCT03348215 -NCT03350763 -NCT03348280 -NCT03350854 -NCT03348293 -NCT03350906 -NCT03348514 -NCT03350919 -NCT03348527 -NCT03350945 -NCT03348631 -NCT03351010 -NCT03348670 -NCT03351062 -NCT03348696 -NCT03351075 -NCT03348748 -NCT03351088 -NCT03348761 -NCT03351127 -NCT03348826 -NCT03351231 -NCT03348891 -NCT03351296 -NCT03348904 -NCT03351335 -NCT03348917 -NCT03351348 -NCT03348969 -NCT03351361 -NCT03349008 -NCT03351517 -NCT03349021 -NCT03351725 -NCT03349034 -NCT03351842 -NCT03349060 -NCT03351855 -NCT03349073 -NCT03351868 -NCT03349177 -NCT03351907 -NCT03349203 -NCT03352037 -NCT03349255 -NCT03352089 -NCT03349281 -NCT03352115 -NCT03349307 -NCT03352154 -NCT03349320 -NCT03352245 -NCT03349333 -NCT03352271 -NCT03349346 -NCT03352323 -NCT03349398 -NCT03357952 -NCT03352362 -NCT03355261 -NCT03352375 -NCT03355248 -NCT03352427 -NCT03355339 -NCT03352531 -NCT03355378 -NCT03352739 -NCT03355443 -NCT03352765 -NCT03355495 -NCT03352804 -NCT03355560 -NCT03352895 -NCT03355612 -NCT03352908 -NCT03355742 -NCT03352921 -NCT03355768 -NCT03352934 -NCT03355794 -NCT03352947 -NCT03355820 -NCT03353025 -NCT03355859 -NCT03353064 -NCT03355937 -NCT03353077 -NCT03355976 -NCT03353129 -NCT03356002 -NCT03353181 -NCT03356054 -NCT03353194 -NCT03356080 -NCT03353233 -NCT03356158 -NCT03353246 -NCT03356171 -NCT03353402 -NCT03356223 -NCT03353428 -NCT03356301 -NCT03353467 -NCT03356405 -NCT03353506 -NCT03356444 -NCT03353558 -NCT03356522 -NCT03353571 -NCT03356548 -NCT03353610 -NCT03356587 -NCT03353675 -NCT03356600 -NCT03353740 -NCT03356665 -NCT03353753 -NCT03356678 -NCT03353831 -NCT03356743 -NCT03353896 -NCT03356769 -NCT03353948 -NCT03356782 -NCT03354000 -NCT03356795 -NCT03354026 -NCT03356808 -NCT03354039 -NCT03356860 -NCT03354065 -NCT03356912 -NCT03354169 -NCT03356925 -NCT03354299 -NCT03356938 -NCT03354351 -NCT03357029 -NCT03354390 -NCT03357042 -NCT03354455 -NCT03357120 -NCT03354533 -NCT03357224 -NCT03354572 -NCT03357237 -NCT03354598 -NCT03357276 -NCT03354611 -NCT03357289 -NCT03354689 -NCT03357315 -NCT03354741 -NCT03357419 -NCT03354832 -NCT03357484 -NCT03354884 -NCT03357614 -NCT03354962 -NCT03357627 -NCT03355014 -NCT03357679 -NCT03355066 -NCT03357757 -NCT03355079 -NCT03357770 -NCT03355157 -NCT03357809 -NCT03355196 -NCT03363659 -NCT03357978 -NCT03360708 -NCT03358004 -NCT03360695 -NCT03358017 -NCT03360721 -NCT03358095 -NCT03360734 -NCT03358199 -NCT03360760 -NCT03358407 -NCT03360890 -NCT03358472 -NCT03360916 -NCT03358511 -NCT03360929 -NCT03358563 -NCT03360994 -NCT03358576 -NCT03361111 -NCT03358589 -NCT03361137 -NCT03358602 -NCT03361150 -NCT03358719 -NCT03361228 -NCT03358732 -NCT03361306 -NCT03358849 -NCT03361319 -NCT03358862 -NCT03361345 -NCT03358875 -NCT03361423 -NCT03358979 -NCT03361436 -NCT03359005 -NCT03361709 -NCT03359070 -NCT03361735 -NCT03359083 -NCT03361748 -NCT03359161 -NCT03361800 -NCT03359187 -NCT03361852 -NCT03359239 -NCT03361865 -NCT03359252 -NCT03361917 -NCT03359265 -NCT03361969 -NCT03359278 -NCT03361982 -NCT03359434 -NCT03362060 -NCT03359447 -NCT03362073 -NCT03359460 -NCT03362138 -NCT03359525 -NCT03362255 -NCT03359603 -NCT03362268 -NCT03359616 -NCT03362281 -NCT03359668 -NCT03362359 -NCT03359681 -NCT03362437 -NCT03359733 -NCT03362606 -NCT03359811 -NCT03362619 -NCT03359850 -NCT03362632 -NCT03359941 -NCT03362684 -NCT03359954 -NCT03362723 -NCT03360006 -NCT03362762 -NCT03360110 -NCT03362801 -NCT03360149 -NCT03362827 -NCT03360162 -NCT03362970 -NCT03360214 -NCT03363126 -NCT03360227 -NCT03363191 -NCT03360292 -NCT03363217 -NCT03360318 -NCT03363373 -NCT03360331 -NCT03363399 -NCT03360344 -NCT03363451 -NCT03360383 -NCT03363490 -NCT03360461 -NCT03363529 -NCT03360474 -NCT03363555 -NCT03360500 -NCT03363620 -NCT03360591 -NCT03363633 -NCT03360630 -NCT03370172 -NCT03363698 -NCT03367143 -NCT03363776 -NCT03367091 -NCT03363867 -NCT03367156 -NCT03364049 -NCT03367247 -NCT03364166 -NCT03367299 -NCT03364231 -NCT03367338 -NCT03364270 -NCT03367429 -NCT03364348 -NCT03367572 -NCT03364400 -NCT03367611 -NCT03364439 -NCT03367637 -NCT03364530 -NCT03367676 -NCT03364673 -NCT03367689 -NCT03364803 -NCT03367702 -NCT03364881 -NCT03367715 -NCT03364998 -NCT03367728 -NCT03365076 -NCT03367741 -NCT03365297 -NCT03367793 -NCT03365336 -NCT03367819 -NCT03365414 -NCT03367845 -NCT03365518 -NCT03367871 -NCT03365661 -NCT03367884 -NCT03365687 -NCT03367923 -NCT03365778 -NCT03368066 -NCT03365791 -NCT03368079 -NCT03365882 -NCT03368131 -NCT03365895 -NCT03368196 -NCT03366012 -NCT03368378 -NCT03366051 -NCT03368534 -NCT03366064 -NCT03368547 -NCT03366077 -NCT03368625 -NCT03366103 -NCT03368651 -NCT03366116 -NCT03368664 -NCT03366142 -NCT03368729 -NCT03366155 -NCT03368742 -NCT03366181 -NCT03368859 -NCT03366207 -NCT03368898 -NCT03366272 -NCT03368924 -NCT03366324 -NCT03368963 -NCT03366350 -NCT03368976 -NCT03366376 -NCT03369119 -NCT03366415 -NCT03369132 -NCT03366428 -NCT03369223 -NCT03366454 -NCT03369353 -NCT03366480 -NCT03369509 -NCT03366493 -NCT03369522 -NCT03366558 -NCT03369587 -NCT03366649 -NCT03369600 -NCT03366675 -NCT03369652 -NCT03366740 -NCT03369730 -NCT03366766 -NCT03369782 -NCT03366779 -NCT03369847 -NCT03366792 -NCT03369964 -NCT03366805 -NCT03370016 -NCT03366844 -NCT03370055 -NCT03366883 -NCT03370159 -NCT03366961 -NCT03376087 -NCT03370185 -NCT03373305 -NCT03370198 -NCT03373266 -NCT03370276 -NCT03373383 -NCT03370302 -NCT03373422 -NCT03370367 -NCT03373474 -NCT03370406 -NCT03373487 -NCT03370588 -NCT03373526 -NCT03370718 -NCT03373552 -NCT03370744 -NCT03373656 -NCT03370770 -NCT03373708 -NCT03370809 -NCT03373760 -NCT03370835 -NCT03373773 -NCT03370913 -NCT03373942 -NCT03370926 -NCT03373955 -NCT03370965 -NCT03374007 -NCT03371004 -NCT03374059 -NCT03371017 -NCT03374085 -NCT03371147 -NCT03374254 -NCT03371277 -NCT03374280 -NCT03371381 -NCT03374293 -NCT03371407 -NCT03374319 -NCT03371420 -NCT03374332 -NCT03371433 -NCT03374475 -NCT03371446 -NCT03374488 -NCT03371485 -NCT03374501 -NCT03371550 -NCT03374592 -NCT03371563 -NCT03374683 -NCT03371589 -NCT03374826 -NCT03371693 -NCT03374839 -NCT03371719 -NCT03374852 -NCT03371732 -NCT03374865 -NCT03371979 -NCT03374943 -NCT03371992 -NCT03374982 -NCT03372057 -NCT03374995 -NCT03372096 -NCT03375086 -NCT03372122 -NCT03375112 -NCT03372148 -NCT03375164 -NCT03372200 -NCT03375242 -NCT03372291 -NCT03375281 -NCT03372421 -NCT03375307 -NCT03372499 -NCT03375320 -NCT03372551 -NCT03375359 -NCT03372642 -NCT03375437 -NCT03372655 -NCT03375489 -NCT03372681 -NCT03375502 -NCT03372694 -NCT03375515 -NCT03372720 -NCT03375567 -NCT03372772 -NCT03375593 -NCT03373006 -NCT03375632 -NCT03373019 -NCT03375801 -NCT03373058 -NCT03375814 -NCT03373097 -NCT03375827 -NCT03373110 -NCT03375892 -NCT03373123 -NCT03375931 -NCT03373136 -NCT03375983 -NCT03373188 -NCT03381612 -NCT03376386 -NCT03379025 -NCT03376412 -NCT03379012 -NCT03376451 -NCT03379051 -NCT03376477 -NCT03379168 -NCT03376503 -NCT03379194 -NCT03376568 -NCT03379259 -NCT03376594 -NCT03379350 -NCT03376659 -NCT03379363 -NCT03376672 -NCT03379376 -NCT03376737 -NCT03379415 -NCT03376919 -NCT03379428 -NCT03376945 -NCT03379441 -NCT03376958 -NCT03379493 -NCT03376971 -NCT03379571 -NCT03377023 -NCT03379584 -NCT03377036 -NCT03379597 -NCT03377062 -NCT03379675 -NCT03377101 -NCT03379727 -NCT03377166 -NCT03379792 -NCT03377179 -NCT03379805 -NCT03377192 -NCT03379844 -NCT03377218 -NCT03379909 -NCT03377270 -NCT03379935 -NCT03377296 -NCT03379948 -NCT03377309 -NCT03379961 -NCT03377361 -NCT03379974 -NCT03377387 -NCT03380026 -NCT03377400 -NCT03380039 -NCT03377426 -NCT03380052 -NCT03377439 -NCT03380130 -NCT03377465 -NCT03380182 -NCT03377491 -NCT03380299 -NCT03377517 -NCT03380364 -NCT03377530 -NCT03380468 -NCT03377556 -NCT03380572 -NCT03377569 -NCT03380689 -NCT03377660 -NCT03380793 -NCT03377725 -NCT03380806 -NCT03377764 -NCT03380845 -NCT03377816 -NCT03380871 -NCT03377829 -NCT03380897 -NCT03377842 -NCT03381066 -NCT03377881 -NCT03381092 -NCT03377894 -NCT03381118 -NCT03378128 -NCT03381183 -NCT03378167 -NCT03381274 -NCT03378193 -NCT03381287 -NCT03378258 -NCT03381300 -NCT03378297 -NCT03381339 -NCT03378362 -NCT03381352 -NCT03378375 -NCT03381417 -NCT03378466 -NCT03381430 -NCT03378479 -NCT03381534 -NCT03378648 -NCT03381560 -NCT03378895 -NCT03381573 -NCT03378934 -NCT03387085 -NCT03381651 -NCT03384654 -NCT03381677 -NCT03384628 -NCT03381755 -NCT03384667 -NCT03381768 -NCT03384784 -NCT03381781 -NCT03384836 -NCT03381820 -NCT03384914 -NCT03381846 -NCT03384940 -NCT03382106 -NCT03384992 -NCT03382145 -NCT03385018 -NCT03382171 -NCT03385070 -NCT03382249 -NCT03385096 -NCT03382327 -NCT03385148 -NCT03382340 -NCT03385187 -NCT03382392 -NCT03385200 -NCT03382418 -NCT03385226 -NCT03382561 -NCT03385343 -NCT03382574 -NCT03385408 -NCT03382600 -NCT03385434 -NCT03382795 -NCT03385486 -NCT03382886 -NCT03385551 -NCT03382899 -NCT03385577 -NCT03382912 -NCT03385616 -NCT03382964 -NCT03385655 -NCT03382977 -NCT03385668 -NCT03383016 -NCT03385681 -NCT03383055 -NCT03385720 -NCT03383094 -NCT03385798 -NCT03383237 -NCT03385889 -NCT03383302 -NCT03385915 -NCT03383367 -NCT03385941 -NCT03383406 -NCT03386045 -NCT03383458 -NCT03386162 -NCT03383575 -NCT03386292 -NCT03383614 -NCT03386357 -NCT03383679 -NCT03386383 -NCT03383692 -NCT03386409 -NCT03383705 -NCT03386500 -NCT03383757 -NCT03386513 -NCT03383796 -NCT03386526 -NCT03383835 -NCT03386539 -NCT03383952 -NCT03386552 -NCT03383965 -NCT03386578 -NCT03383978 -NCT03386617 -NCT03384043 -NCT03386643 -NCT03384056 -NCT03386695 -NCT03384082 -NCT03386721 -NCT03384095 -NCT03386734 -NCT03384134 -NCT03386773 -NCT03384199 -NCT03386838 -NCT03384212 -NCT03386929 -NCT03384225 -NCT03386942 -NCT03384238 -NCT03386955 -NCT03384251 -NCT03387020 -NCT03384316 -NCT03387033 -NCT03384407 -NCT03387046 -NCT03384511 -NCT03392402 -NCT03387098 -NCT03389724 -NCT03387111 -NCT03389568 -NCT03387228 -NCT03389776 -NCT03387241 -NCT03389802 -NCT03387280 -NCT03389815 -NCT03387306 -NCT03390062 -NCT03387332 -NCT03390127 -NCT03387436 -NCT03390166 -NCT03387475 -NCT03390231 -NCT03387501 -NCT03390296 -NCT03387514 -NCT03390348 -NCT03387527 -NCT03390387 -NCT03387553 -NCT03390413 -NCT03387592 -NCT03390504 -NCT03387670 -NCT03390517 -NCT03387761 -NCT03390569 -NCT03387774 -NCT03390595 -NCT03387904 -NCT03390608 -NCT03387917 -NCT03390634 -NCT03387943 -NCT03390686 -NCT03387969 -NCT03390738 -NCT03388021 -NCT03390894 -NCT03388047 -NCT03390907 -NCT03388073 -NCT03390946 -NCT03388125 -NCT03390972 -NCT03388190 -NCT03391011 -NCT03388268 -NCT03391050 -NCT03388346 -NCT03391154 -NCT03388372 -NCT03391232 -NCT03388385 -NCT03391271 -NCT03388606 -NCT03391310 -NCT03388619 -NCT03391362 -NCT03388632 -NCT03391388 -NCT03388645 -NCT03391427 -NCT03388671 -NCT03391466 -NCT03388749 -NCT03391479 -NCT03388814 -NCT03391531 -NCT03388905 -NCT03391557 -NCT03388931 -NCT03391726 -NCT03388944 -NCT03391778 -NCT03388970 -NCT03391843 -NCT03389035 -NCT03391869 -NCT03389061 -NCT03391895 -NCT03389087 -NCT03391934 -NCT03389126 -NCT03391947 -NCT03389204 -NCT03391973 -NCT03389230 -NCT03392064 -NCT03389256 -NCT03392090 -NCT03389295 -NCT03392103 -NCT03389347 -NCT03392129 -NCT03389438 -NCT03392181 -NCT03389451 -NCT03392220 -NCT03389464 -NCT03392233 -NCT03389477 -NCT03392246 -NCT03389516 -NCT03392363 -NCT03389542 -NCT03397394 -NCT03392428 -NCT03395028 -NCT03392506 -NCT03394989 -NCT03392519 -NCT03395067 -NCT03392545 -NCT03395080 -NCT03392571 -NCT03395119 -NCT03392935 -NCT03395132 -NCT03392974 -NCT03395249 -NCT03393000 -NCT03395340 -NCT03393065 -NCT03395444 -NCT03393078 -NCT03395457 -NCT03393091 -NCT03395496 -NCT03393117 -NCT03395522 -NCT03393182 -NCT03395561 -NCT03393208 -NCT03395587 -NCT03393234 -NCT03395626 -NCT03393273 -NCT03395704 -NCT03393286 -NCT03395717 -NCT03393351 -NCT03395756 -NCT03393403 -NCT03395847 -NCT03393416 -NCT03395873 -NCT03393507 -NCT03395899 -NCT03393546 -NCT03395938 -NCT03393611 -NCT03395964 -NCT03393689 -NCT03396042 -NCT03393715 -NCT03396107 -NCT03393754 -NCT03396185 -NCT03393845 -NCT03396211 -NCT03393858 -NCT03396289 -NCT03393884 -NCT03396341 -NCT03393936 -NCT03396354 -NCT03393962 -NCT03396445 -NCT03393975 -NCT03396471 -NCT03394014 -NCT03396497 -NCT03394027 -NCT03396510 -NCT03394040 -NCT03396562 -NCT03394105 -NCT03396575 -NCT03394118 -NCT03396666 -NCT03394157 -NCT03396718 -NCT03394222 -NCT03396757 -NCT03394287 -NCT03396770 -NCT03394300 -NCT03396822 -NCT03394313 -NCT03396848 -NCT03394417 -NCT03396874 -NCT03394443 -NCT03396913 -NCT03394547 -NCT03396926 -NCT03394651 -NCT03396952 -NCT03394664 -NCT03396991 -NCT03394690 -NCT03397017 -NCT03394703 -NCT03397030 -NCT03394742 -NCT03397056 -NCT03394807 -NCT03397160 -NCT03394885 -NCT03397173 -NCT03394898 -NCT03397186 -NCT03394924 -NCT03397199 -NCT03394937 -NCT03397342 -NCT03394963 -NCT03402854 -NCT03397472 -NCT03400202 -NCT03397511 -NCT03400176 -NCT03397537 -NCT03400215 -NCT03397654 -NCT03400254 -NCT03397693 -NCT03400280 -NCT03397706 -NCT03400306 -NCT03397745 -NCT03400332 -NCT03397758 -NCT03400592 -NCT03397784 -NCT03400631 -NCT03397849 -NCT03400644 -NCT03397914 -NCT03400748 -NCT03397953 -NCT03400826 -NCT03398057 -NCT03400865 -NCT03398070 -NCT03400904 -NCT03398122 -NCT03400917 -NCT03398161 -NCT03400930 -NCT03398200 -NCT03400956 -NCT03398252 -NCT03401008 -NCT03398291 -NCT03401047 -NCT03398486 -NCT03401060 -NCT03398512 -NCT03401086 -NCT03398538 -NCT03401125 -NCT03398603 -NCT03401177 -NCT03398629 -NCT03401229 -NCT03398655 -NCT03401281 -NCT03398668 -NCT03401294 -NCT03398694 -NCT03401359 -NCT03398720 -NCT03401385 -NCT03398798 -NCT03401593 -NCT03398811 -NCT03401671 -NCT03398824 -NCT03401710 -NCT03398915 -NCT03401788 -NCT03398967 -NCT03401827 -NCT03398993 -NCT03401840 -NCT03399071 -NCT03401853 -NCT03399110 -NCT03401866 -NCT03399214 -NCT03401879 -NCT03399253 -NCT03401918 -NCT03399331 -NCT03401957 -NCT03399344 -NCT03402048 -NCT03399383 -NCT03402100 -NCT03399396 -NCT03402230 -NCT03399448 -NCT03402269 -NCT03399474 -NCT03402295 -NCT03399487 -NCT03402412 -NCT03399513 -NCT03402425 -NCT03399539 -NCT03402464 -NCT03399552 -NCT03402529 -NCT03399669 -NCT03402594 -NCT03399747 -NCT03402607 -NCT03399773 -NCT03402620 -NCT03399864 -NCT03402633 -NCT03399955 -NCT03402737 -NCT03400072 -NCT03402828 -NCT03400124 -NCT03402841 -NCT03400150 -NCT03513614 -NCT03402880 -NCT03513471 -NCT03402893 -NCT03513484 -NCT03403049 -NCT03513549 -NCT03403062 -NCT03513562 -NCT03403075 -NCT03436550 -NCT03436563 -NCT03436576 -NCT03436654 -NCT03436719 -NCT03436732 -NCT03436745 -NCT03436758 -NCT03436836 -NCT03436862 -NCT03436901 -NCT03436914 -NCT03436953 -NCT03437070 -NCT03437135 -NCT03437161 -NCT03437200 -NCT03437239 -NCT03437252 -NCT03437382 -NCT03437395 -NCT03437486 -NCT03437733 -NCT03437837 -NCT03437915 -NCT03437941 -NCT03508817 -NCT03508856 -NCT03508869 -NCT03508947 -NCT03508986 -NCT03509012 -NCT03509090 -NCT03509103 -NCT03509168 -NCT03509207 -NCT03509246 -NCT03509298 -NCT03509350 -NCT03509428 -NCT03509467 -NCT03509532 -NCT03509584 -NCT03509636 -NCT03509662 -NCT03509675 -NCT03509805 -NCT03509961 -NCT03509974 -NCT03510104 -NCT03510143 -NCT03510156 -NCT03510208 -NCT03510273 -NCT03510312 -NCT03510351 -NCT03510390 -NCT03510416 -NCT03510429 -NCT03510442 -NCT03510455 -NCT03510507 -NCT03510546 -NCT03510559 -NCT03510611 -NCT03510767 -NCT03510858 -NCT03510871 -NCT03510923 -NCT03510936 -NCT03510988 -NCT03511053 -NCT03511079 -NCT03511170 -NCT03511183 -NCT03511196 -NCT03511222 -NCT03511326 -NCT03511378 -NCT03511391 -NCT03511417 -NCT03511625 -NCT03511664 -NCT03511677 -NCT03511690 -NCT03511703 -NCT03511716 -NCT03511768 -NCT03511781 -NCT03511846 -NCT03511963 -NCT03512015 -NCT03512106 -NCT03512158 -NCT03512171 -NCT03512197 -NCT03512262 -NCT03512275 -NCT03512288 -NCT03512340 -NCT03512353 -NCT03512366 -NCT03512405 -NCT03512457 -NCT03512756 -NCT03512834 -NCT03512899 -NCT03512951 -NCT03513055 -NCT03513094 -NCT03513120 -NCT03513211 -NCT03513354 -NCT03513367 -NCT03513458 -NCT03513601 -NCT03403101 -NCT03406273 -NCT03403127 -NCT03406260 -NCT03403205 -NCT03406299 -NCT03403322 -NCT03406325 -NCT03403361 -NCT03406364 -NCT03403387 -NCT03406416 -NCT03403400 -NCT03406468 -NCT03403413 -NCT03406650 -NCT03403452 -NCT03406715 -NCT03403465 -NCT03406858 -NCT03403530 -NCT03406871 -NCT03403595 -NCT03406949 -NCT03403634 -NCT03407053 -NCT03403725 -NCT03407066 -NCT03403777 -NCT03407144 -NCT03403829 -NCT03407170 -NCT03403855 -NCT03407300 -NCT03403920 -NCT03407417 -NCT03404128 -NCT03407430 -NCT03404193 -NCT03407534 -NCT03404297 -NCT03407612 -NCT03404310 -NCT03407651 -NCT03404336 -NCT03407716 -NCT03404362 -NCT03407768 -NCT03404414 -NCT03407781 -NCT03404648 -NCT03407807 -NCT03404726 -NCT03407859 -NCT03404752 -NCT03407963 -NCT03404791 -NCT03407976 -NCT03404804 -NCT03407989 -NCT03404843 -NCT03408080 -NCT03404934 -NCT03408093 -NCT03404960 -NCT03408119 -NCT03405025 -NCT03408158 -NCT03405090 -NCT03408184 -NCT03405142 -NCT03408197 -NCT03405155 -NCT03435848 -NCT03405168 -NCT03435913 -NCT03405272 -NCT03435926 -NCT03405285 -NCT03435939 -NCT03405337 -NCT03435952 -NCT03405363 -NCT03436004 -NCT03405454 -NCT03436056 -NCT03405519 -NCT03436069 -NCT03405597 -NCT03436082 -NCT03405649 -NCT03436108 -NCT03405701 -NCT03436147 -NCT03405792 -NCT03436186 -NCT03405922 -NCT03436225 -NCT03406013 -NCT03436251 -NCT03406130 -NCT03436290 -NCT03406156 -NCT03436329 -NCT03406169 -NCT03436342 -NCT03406195 -NCT03436420 -NCT03406208 -NCT03436433 -NCT03406247 -NCT03436485 -NCT03408210 -NCT03435042 -NCT03408223 -NCT03435107 -NCT03408236 -NCT03435159 -NCT03408314 -NCT03435224 -NCT03408561 -NCT03435237 -NCT03408587 -NCT03435250 -NCT03408613 -NCT03435289 -NCT03408639 -NCT03435302 -NCT03408652 -NCT03435315 -NCT03408665 -NCT03435367 -NCT03408808 -NCT03435380 -NCT03408938 -NCT03435432 -NCT03409029 -NCT03435471 -NCT03409042 -NCT03435536 -NCT03409055 -NCT03435588 -NCT03409120 -NCT03435640 -NCT03409146 -NCT03435653 -NCT03409198 -NCT03435666 -NCT03409380 -NCT03435692 -NCT03409406 -NCT03435731 -NCT03409432 -NCT03435770 -NCT03409458 -NCT03435796 -NCT03409471 -NCT03431090 -NCT03431103 -NCT03431155 -NCT03431272 -NCT03431285 -NCT03431311 -NCT03431350 -NCT03431415 -NCT03431428 -NCT03431584 -NCT03431727 -NCT03431753 -NCT03431922 -NCT03431948 -NCT03432026 -NCT03432052 -NCT03432117 -NCT03432143 -NCT03432156 -NCT03432221 -NCT03432247 -NCT03432299 -NCT03432416 -NCT03432507 -NCT03432520 -NCT03432533 -NCT03432559 -NCT03432598 -NCT03432611 -NCT03432637 -NCT03432676 -NCT03432741 -NCT03432780 -NCT03432806 -NCT03432897 -NCT03432936 -NCT03432949 -NCT03432962 -NCT03433014 -NCT03433027 -NCT03433118 -NCT03433183 -NCT03433196 -NCT03433274 -NCT03433287 -NCT03433313 -NCT03433404 -NCT03433417 -NCT03433430 -NCT03433469 -NCT03433703 -NCT03433716 -NCT03433781 -NCT03433807 -NCT03433833 -NCT03433898 -NCT03433950 -NCT03434067 -NCT03434080 -NCT03434093 -NCT03434132 -NCT03434158 -NCT03434262 -NCT03434379 -NCT03434418 -NCT03434470 -NCT03434678 -NCT03434704 -NCT03434717 -NCT03434730 -NCT03434769 -NCT03434834 -NCT03434925 -NCT03434951 -NCT03435016 -NCT03409510 -NCT03429582 -NCT03409614 -NCT03429764 -NCT03409679 -NCT03429777 -NCT03409705 -NCT03429803 -NCT03409822 -NCT03429816 -NCT03409848 -NCT03429868 -NCT03409861 -NCT03429894 -NCT03409874 -NCT03429907 -NCT03409913 -NCT03429972 -NCT03410004 -NCT03430011 -NCT03410030 -NCT03430063 -NCT03410043 -NCT03430128 -NCT03410069 -NCT03430141 -NCT03410095 -NCT03430297 -NCT03410108 -NCT03430440 -NCT03410121 -NCT03430466 -NCT03410134 -NCT03430479 -NCT03410160 -NCT03430518 -NCT03410290 -NCT03430648 -NCT03410368 -NCT03430687 -NCT03410407 -NCT03430700 -NCT03410446 -NCT03430765 -NCT03410498 -NCT03430778 -NCT03410615 -NCT03430791 -NCT03410628 -NCT03430804 -NCT03410693 -NCT03430843 -NCT03410732 -NCT03430856 -NCT03410745 -NCT03430869 -NCT03410784 -NCT03430882 -NCT03410862 -NCT03430895 -NCT03410875 -NCT03430934 -NCT03410888 -NCT03420911 -NCT03420963 -NCT03421028 -NCT03421236 -NCT03421288 -NCT03421340 -NCT03421418 -NCT03421522 -NCT03421652 -NCT03421782 -NCT03421834 -NCT03421899 -NCT03421912 -NCT03421925 -NCT03421951 -NCT03422003 -NCT03422029 -NCT03422094 -NCT03422198 -NCT03427827 -NCT03427853 -NCT03427944 -NCT03427957 -NCT03427970 -NCT03427983 -NCT03428022 -NCT03428048 -NCT03428113 -NCT03428126 -NCT03428217 -NCT03428347 -NCT03428373 -NCT03428425 -NCT03428477 -NCT03428529 -NCT03428581 -NCT03428607 -NCT03428672 -NCT03428802 -NCT03428841 -NCT03428854 -NCT03428919 -NCT03428958 -NCT03429062 -NCT03429101 -NCT03429127 -NCT03429218 -NCT03429244 -NCT03429296 -NCT03429387 -NCT03429400 -NCT03429426 -NCT03429478 -NCT03429517 -NCT03430947 -NCT03410901 -NCT03413514 -NCT03410914 -NCT03413462 -NCT03410927 -NCT03413553 -NCT03411031 -NCT03413579 -NCT03411070 -NCT03413605 -NCT03411161 -NCT03413631 -NCT03411174 -NCT03413683 -NCT03411187 -NCT03413800 -NCT03411200 -NCT03413826 -NCT03411226 -NCT03413839 -NCT03411252 -NCT03413865 -NCT03411278 -NCT03413891 -NCT03411408 -NCT03413904 -NCT03411538 -NCT03413930 -NCT03411577 -NCT03413995 -NCT03411629 -NCT03414021 -NCT03411642 -NCT03414034 -NCT03411811 -NCT03414047 -NCT03411850 -NCT03414125 -NCT03411863 -NCT03414229 -NCT03411915 -NCT03419130 -NCT03411928 -NCT03419234 -NCT03411967 -NCT03419247 -NCT03412019 -NCT03419338 -NCT03412045 -NCT03419364 -NCT03412058 -NCT03419403 -NCT03412201 -NCT03419481 -NCT03412266 -NCT03419559 -NCT03412292 -NCT03419585 -NCT03412357 -NCT03419637 -NCT03412383 -NCT03419650 -NCT03412396 -NCT03419689 -NCT03412409 -NCT03419741 -NCT03412474 -NCT03419754 -NCT03412526 -NCT03419767 -NCT03412565 -NCT03419858 -NCT03412591 -NCT03419897 -NCT03412630 -NCT03420014 -NCT03412643 -NCT03420079 -NCT03412669 -NCT03420105 -NCT03412708 -NCT03420118 -NCT03412773 -NCT03420144 -NCT03412786 -NCT03420157 -NCT03412799 -NCT03420248 -NCT03412812 -NCT03420274 -NCT03412877 -NCT03420300 -NCT03412890 -NCT03420339 -NCT03412929 -NCT03420443 -NCT03412955 -NCT03420482 -NCT03412994 -NCT03420508 -NCT03413085 -NCT03420521 -NCT03413202 -NCT03420547 -NCT03413254 -NCT03420651 -NCT03413332 -NCT03420742 -NCT03413358 -NCT03420846 -NCT03413436 -NCT03420885 -NCT03414411 -NCT03416803 -NCT03414424 -NCT03416777 -NCT03414450 -NCT03416816 -NCT03414593 -NCT03416842 -NCT03414658 -NCT03416933 -NCT03414684 -NCT03416998 -NCT03414697 -NCT03417037 -NCT03414710 -NCT03417063 -NCT03414749 -NCT03417102 -NCT03414775 -NCT03417154 -NCT03414814 -NCT03417284 -NCT03414853 -NCT03417297 -NCT03414905 -NCT03417414 -NCT03414944 -NCT03417427 -NCT03414957 -NCT03417544 -NCT03414970 -NCT03417570 -NCT03414983 -NCT03417596 -NCT03415126 -NCT03417622 -NCT03415165 -NCT03417648 -NCT03415204 -NCT03417739 -NCT03415269 -NCT03417765 -NCT03415321 -NCT03417817 -NCT03415334 -NCT03417830 -NCT03415347 -NCT03417843 -NCT03415399 -NCT03417869 -NCT03415477 -NCT03417882 -NCT03415646 -NCT03417895 -NCT03415659 -NCT03417921 -NCT03415763 -NCT03417973 -NCT03415776 -NCT03418025 -NCT03415802 -NCT03418038 -NCT03415854 -NCT03418116 -NCT03415880 -NCT03418207 -NCT03415945 -NCT03418298 -NCT03416010 -NCT03418324 -NCT03416062 -NCT03418337 -NCT03416101 -NCT03418441 -NCT03416153 -NCT03418480 -NCT03416179 -NCT03418558 -NCT03416205 -NCT03418584 -NCT03416231 -NCT03418597 -NCT03416244 -NCT03418610 -NCT03416283 -NCT03418662 -NCT03416309 -NCT03418792 -NCT03416322 -NCT03418805 -NCT03416335 -NCT03418818 -NCT03416374 -NCT03418844 -NCT03416452 -NCT03418857 -NCT03416517 -NCT03418883 -NCT03416530 -NCT03418922 -NCT03416582 -NCT03418935 -NCT03416647 -NCT03418948 -NCT03416686 -NCT03418961 -NCT03416725 -NCT03418987 -NCT03416738 -NCT03419000 -NCT03416751 -NCT03427814 -NCT03422211 -NCT03425279 -NCT03422302 -NCT03425240 -NCT03422315 -NCT03425292 -NCT03422380 -NCT03425331 -NCT03422393 -NCT03425383 -NCT03422432 -NCT03425461 -NCT03422445 -NCT03425526 -NCT03422523 -NCT03425565 -NCT03422536 -NCT03425578 -NCT03422679 -NCT03425591 -NCT03422731 -NCT03425617 -NCT03422744 -NCT03425643 -NCT03422796 -NCT03425656 -NCT03422809 -NCT03425773 -NCT03422835 -NCT03425838 -NCT03422874 -NCT03425851 -NCT03423056 -NCT03425864 -NCT03423082 -NCT03426189 -NCT03423199 -NCT03426241 -NCT03423264 -NCT03426254 -NCT03423277 -NCT03426306 -NCT03423303 -NCT03426319 -NCT03423472 -NCT03426332 -NCT03423498 -NCT03426371 -NCT03423511 -NCT03426384 -NCT03423537 -NCT03426475 -NCT03423550 -NCT03426514 -NCT03423628 -NCT03426605 -NCT03423706 -NCT03426657 -NCT03423771 -NCT03426722 -NCT03423784 -NCT03426748 -NCT03423836 -NCT03426800 -NCT03423849 -NCT03426839 -NCT03423927 -NCT03426878 -NCT03423966 -NCT03426891 -NCT03423979 -NCT03426904 -NCT03423992 -NCT03426943 -NCT03424005 -NCT03426982 -NCT03424018 -NCT03426995 -NCT03424044 -NCT03427034 -NCT03424122 -NCT03427073 -NCT03424278 -NCT03427099 -NCT03424291 -NCT03427125 -NCT03424499 -NCT03427216 -NCT03424512 -NCT03427229 -NCT03424603 -NCT03427242 -NCT03424694 -NCT03427268 -NCT03424733 -NCT03427320 -NCT03424759 -NCT03427346 -NCT03424772 -NCT03427359 -NCT03424837 -NCT03427411 -NCT03424850 -NCT03427476 -NCT03424980 -NCT03427671 -NCT03425006 -NCT03427684 -NCT03425201 -NCT03427710 -NCT03425214 -NCT03508765 -NCT03438201 -NCT03506815 -NCT03438266 -NCT03506906 -NCT03438318 -NCT03506919 -NCT03438344 -NCT03506997 -NCT03438396 -NCT03507088 -NCT03438435 -NCT03507166 -NCT03438474 -NCT03507218 -NCT03438552 -NCT03507244 -NCT03438708 -NCT03507257 -NCT03438734 -NCT03507322 -NCT03438760 -NCT03507361 -NCT03438786 -NCT03507374 -NCT03439033 -NCT03507400 -NCT03439046 -NCT03507452 -NCT03439085 -NCT03507465 -NCT03439137 -NCT03507491 -NCT03439163 -NCT03507530 -NCT03439202 -NCT03507543 -NCT03439215 -NCT03507569 -NCT03439254 -NCT03507608 -NCT03439280 -NCT03507673 -NCT03439293 -NCT03507699 -NCT03439371 -NCT03507725 -NCT03439397 -NCT03507829 -NCT03439449 -NCT03507842 -NCT03439462 -NCT03507959 -NCT03439501 -NCT03507998 -NCT03439592 -NCT03508011 -NCT03439670 -NCT03508024 -NCT03439696 -NCT03508037 -NCT03439709 -NCT03508076 -NCT03439735 -NCT03508115 -NCT03439761 -NCT03508180 -NCT03439787 -NCT03508232 -NCT03439891 -NCT03508284 -NCT03439904 -NCT03508440 -NCT03439982 -NCT03508479 -NCT03440034 -NCT03508518 -NCT03440151 -NCT03508570 -NCT03440164 -NCT03508622 -NCT03440346 -NCT03508726 -NCT03440359 -NCT03508752 -NCT03440398 -NCT03505411 -NCT03505528 -NCT03505554 -NCT03505606 -NCT03505645 -NCT03505671 -NCT03505710 -NCT03505762 -NCT03505775 -NCT03505827 -NCT03505879 -NCT03505944 -NCT03505983 -NCT03505996 -NCT03506009 -NCT03506048 -NCT03506139 -NCT03506217 -NCT03506230 -NCT03506256 -NCT03506295 -NCT03506321 -NCT03506334 -NCT03506360 -NCT03506373 -NCT03506425 -NCT03506438 -NCT03506451 -NCT03506607 -NCT03506802 -NCT03440411 -NCT03443973 -NCT03440437 -NCT03443921 -NCT03440450 -NCT03444025 -NCT03440489 -NCT03444181 -NCT03440515 -NCT03444194 -NCT03440554 -NCT03444259 -NCT03440567 -NCT03444272 -NCT03440632 -NCT03444298 -NCT03440697 -NCT03444324 -NCT03440827 -NCT03444376 -NCT03440879 -NCT03444428 -NCT03440957 -NCT03444519 -NCT03441048 -NCT03444532 -NCT03441061 -NCT03444545 -NCT03441100 -NCT03444584 -NCT03441113 -NCT03444623 -NCT03441191 -NCT03444649 -NCT03441347 -NCT03444688 -NCT03441360 -NCT03461588 -NCT03441373 -NCT03461601 -NCT03441464 -NCT03461640 -NCT03441516 -NCT03461835 -NCT03441555 -NCT03461952 -NCT03441958 -NCT03462056 -NCT03442049 -NCT03462095 -NCT03442062 -NCT03462160 -NCT03442127 -NCT03462212 -NCT03442296 -NCT03462251 -NCT03442400 -NCT03462316 -NCT03442452 -NCT03462329 -NCT03442478 -NCT03462342 -NCT03442504 -NCT03462459 -NCT03442543 -NCT03462563 -NCT03442556 -NCT03462589 -NCT03442569 -NCT03462602 -NCT03442647 -NCT03462641 -NCT03442673 -NCT03462706 -NCT03442686 -NCT03462719 -NCT03442764 -NCT03504449 -NCT03442777 -NCT03504462 -NCT03443011 -NCT03504475 -NCT03443115 -NCT03504488 -NCT03443128 -NCT03504618 -NCT03443258 -NCT03504644 -NCT03443414 -NCT03504761 -NCT03443492 -NCT03504787 -NCT03443505 -NCT03504865 -NCT03443544 -NCT03504878 -NCT03443596 -NCT03504995 -NCT03443609 -NCT03505021 -NCT03443622 -NCT03505112 -NCT03443635 -NCT03505151 -NCT03443661 -NCT03505203 -NCT03443765 -NCT03505216 -NCT03443843 -NCT03505229 -NCT03443856 -NCT03505320 -NCT03444701 -NCT03460613 -NCT03444714 -NCT03460678 -NCT03444753 -NCT03460743 -NCT03444766 -NCT03460795 -NCT03444831 -NCT03460873 -NCT03444844 -NCT03460912 -NCT03444870 -NCT03460925 -NCT03444883 -NCT03460977 -NCT03444948 -NCT03461068 -NCT03445000 -NCT03461159 -NCT03445013 -NCT03461185 -NCT03445195 -NCT03461237 -NCT03445260 -NCT03461250 -NCT03445403 -NCT03461354 -NCT03445481 -NCT03461393 -NCT03445533 -NCT03461458 -NCT03445559 -NCT03461536 -NCT03445572 -NCT03456752 -NCT03456804 -NCT03456843 -NCT03456882 -NCT03456895 -NCT03456908 -NCT03456934 -NCT03456973 -NCT03457025 -NCT03457116 -NCT03457142 -NCT03457168 -NCT03457233 -NCT03457246 -NCT03457337 -NCT03457363 -NCT03457389 -NCT03457467 -NCT03457506 -NCT03457532 -NCT03457571 -NCT03457610 -NCT03457753 -NCT03457766 -NCT03457779 -NCT03457805 -NCT03457818 -NCT03457844 -NCT03457857 -NCT03457896 -NCT03457909 -NCT03457948 -NCT03457961 -NCT03458000 -NCT03458026 -NCT03458117 -NCT03458130 -NCT03458221 -NCT03458234 -NCT03458247 -NCT03458260 -NCT03458312 -NCT03458546 -NCT03458559 -NCT03458598 -NCT03458689 -NCT03458702 -NCT03458728 -NCT03458780 -NCT03458806 -NCT03458871 -NCT03458949 -NCT03458975 -NCT03459170 -NCT03459222 -NCT03459235 -NCT03459248 -NCT03459261 -NCT03459326 -NCT03459339 -NCT03459352 -NCT03459417 -NCT03459443 -NCT03459469 -NCT03459482 -NCT03459534 -NCT03459547 -NCT03459599 -NCT03459651 -NCT03459729 -NCT03459755 -NCT03459781 -NCT03459820 -NCT03459846 -NCT03459859 -NCT03459898 -NCT03460067 -NCT03460080 -NCT03460171 -NCT03460236 -NCT03460275 -NCT03460457 -NCT03460470 -NCT03460483 -NCT03460522 -NCT03460561 -NCT03445611 -NCT03448718 -NCT03445624 -NCT03448666 -NCT03445663 -NCT03448757 -NCT03445858 -NCT03448770 -NCT03445936 -NCT03448835 -NCT03445962 -NCT03448874 -NCT03446001 -NCT03448939 -NCT03446040 -NCT03448952 -NCT03446092 -NCT03448978 -NCT03446105 -NCT03449030 -NCT03446118 -NCT03449082 -NCT03446157 -NCT03449095 -NCT03446261 -NCT03449108 -NCT03446339 -NCT03449134 -NCT03446352 -NCT03449147 -NCT03446417 -NCT03449173 -NCT03446534 -NCT03449225 -NCT03446612 -NCT03449238 -NCT03446625 -NCT03449264 -NCT03446638 -NCT03449303 -NCT03446768 -NCT03449316 -NCT03446807 -NCT03449368 -NCT03446989 -NCT03449381 -NCT03447015 -NCT03449433 -NCT03447093 -NCT03449459 -NCT03447106 -NCT03449498 -NCT03447132 -NCT03449511 -NCT03447145 -NCT03449524 -NCT03447314 -NCT03449563 -NCT03447340 -NCT03449628 -NCT03447470 -NCT03449641 -NCT03447483 -NCT03449719 -NCT03447639 -NCT03455517 -NCT03447678 -NCT03455556 -NCT03447691 -NCT03455712 -NCT03447769 -NCT03455751 -NCT03447782 -NCT03455764 -NCT03447808 -NCT03455790 -NCT03447951 -NCT03455829 -NCT03448029 -NCT03455907 -NCT03448042 -NCT03455998 -NCT03448055 -NCT03456024 -NCT03448146 -NCT03456076 -NCT03448211 -NCT03456167 -NCT03448250 -NCT03456349 -NCT03448276 -NCT03456401 -NCT03448341 -NCT03456427 -NCT03448354 -NCT03456466 -NCT03448393 -NCT03456479 -NCT03448458 -NCT03456531 -NCT03448471 -NCT03456544 -NCT03448484 -NCT03456557 -NCT03448510 -NCT03456622 -NCT03448536 -NCT03456661 -NCT03448549 -NCT03456700 -NCT03448640 -NCT03456726 -NCT03449901 -NCT03452774 -NCT03449966 -NCT03452735 -NCT03449979 -NCT03452787 -NCT03450018 -NCT03452852 -NCT03450044 -NCT03452930 -NCT03450057 -NCT03452982 -NCT03450109 -NCT03453034 -NCT03450122 -NCT03453164 -NCT03450135 -NCT03453216 -NCT03450213 -NCT03453255 -NCT03450252 -NCT03453307 -NCT03450330 -NCT03453346 -NCT03450343 -NCT03453424 -NCT03450369 -NCT03453489 -NCT03450421 -NCT03453528 -NCT03450473 -NCT03453580 -NCT03450538 -NCT03453593 -NCT03450564 -NCT03453632 -NCT03450603 -NCT03453645 -NCT03450616 -NCT03453697 -NCT03450642 -NCT03453788 -NCT03450668 -NCT03453853 -NCT03450681 -NCT03453905 -NCT03450811 -NCT03453918 -NCT03450824 -NCT03453931 -NCT03450850 -NCT03453944 -NCT03450889 -NCT03453970 -NCT03450967 -NCT03454009 -NCT03451045 -NCT03454035 -NCT03451084 -NCT03454087 -NCT03451123 -NCT03454165 -NCT03451162 -NCT03454243 -NCT03451266 -NCT03454282 -NCT03451292 -NCT03454295 -NCT03451331 -NCT03454360 -NCT03451435 -NCT03454451 -NCT03451513 -NCT03454464 -NCT03451643 -NCT03454477 -NCT03451734 -NCT03454516 -NCT03451773 -NCT03454529 -NCT03451799 -NCT03454542 -NCT03451825 -NCT03454620 -NCT03451942 -NCT03454750 -NCT03451968 -NCT03454763 -NCT03452111 -NCT03454919 -NCT03452137 -NCT03454945 -NCT03452150 -NCT03454971 -NCT03452267 -NCT03454984 -NCT03452280 -NCT03455023 -NCT03452319 -NCT03455036 -NCT03452332 -NCT03455140 -NCT03452384 -NCT03455153 -NCT03452462 -NCT03455205 -NCT03452553 -NCT03455270 -NCT03452579 -NCT03455504 -NCT03452696 -NCT03504423 -NCT03462810 -NCT03504293 -NCT03462836 -NCT03504345 -NCT03463057 -NCT03504397 -NCT03463161 -NCT03468933 -NCT03468959 -NCT03468985 -NCT03469011 -NCT03469024 -NCT03469037 -NCT03469050 -NCT03469219 -NCT03469258 -NCT03469271 -NCT03469284 -NCT03475186 -NCT03475199 -NCT03475251 -NCT03475355 -NCT03475368 -NCT03475524 -NCT03475589 -NCT03475615 -NCT03475628 -NCT03475680 -NCT03475823 -NCT03475888 -NCT03475953 -NCT03475966 -NCT03475992 -NCT03476018 -NCT03476044 -NCT03476083 -NCT03476135 -NCT03476174 -NCT03476187 -NCT03476226 -NCT03476239 -NCT03476317 -NCT03476330 -NCT03476434 -NCT03476447 -NCT03476486 -NCT03476564 -NCT03476616 -NCT03476681 -NCT03476798 -NCT03476941 -NCT03477019 -NCT03477110 -NCT03477149 -NCT03477162 -NCT03477175 -NCT03477188 -NCT03477201 -NCT03477240 -NCT03477253 -NCT03477396 -NCT03477422 -NCT03483298 -NCT03483324 -NCT03483337 -NCT03483441 -NCT03483519 -NCT03483610 -NCT03483688 -NCT03483844 -NCT03483883 -NCT03483935 -NCT03483948 -NCT03484000 -NCT03484026 -NCT03484039 -NCT03484078 -NCT03484130 -NCT03484143 -NCT03484195 -NCT03484221 -NCT03484299 -NCT03484416 -NCT03484429 -NCT03484520 -NCT03502681 -NCT03502720 -NCT03502733 -NCT03502746 -NCT03502785 -NCT03502798 -NCT03502850 -NCT03502993 -NCT03503032 -NCT03503110 -NCT03503123 -NCT03503136 -NCT03503162 -NCT03503175 -NCT03503240 -NCT03503305 -NCT03503344 -NCT03503409 -NCT03503474 -NCT03503487 -NCT03503500 -NCT03503513 -NCT03503539 -NCT03503604 -NCT03503617 -NCT03503630 -NCT03503682 -NCT03503721 -NCT03503734 -NCT03503786 -NCT03503838 -NCT03503864 -NCT03503955 -NCT03503994 -NCT03504046 -NCT03504150 -NCT03504163 -NCT03504202 -NCT03504280 -NCT03504410 -NCT03463200 -NCT03465826 -NCT03463213 -NCT03465813 -NCT03463226 -NCT03465891 -NCT03463252 -NCT03465982 -NCT03463265 -NCT03466099 -NCT03463408 -NCT03466216 -NCT03463460 -NCT03466268 -NCT03463473 -NCT03466294 -NCT03463525 -NCT03466320 -NCT03463681 -NCT03466398 -NCT03463694 -NCT03466450 -NCT03463720 -NCT03466502 -NCT03463733 -NCT03466593 -NCT03463759 -NCT03466684 -NCT03463811 -NCT03466710 -NCT03463824 -NCT03466736 -NCT03463850 -NCT03466788 -NCT03463876 -NCT03466827 -NCT03463889 -NCT03466918 -NCT03463928 -NCT03466957 -NCT03463941 -NCT03467165 -NCT03463954 -NCT03467178 -NCT03464032 -NCT03467191 -NCT03464188 -NCT03467256 -NCT03464201 -NCT03467347 -NCT03464253 -NCT03467360 -NCT03464279 -NCT03467373 -NCT03464305 -NCT03467386 -NCT03464344 -NCT03467438 -NCT03464487 -NCT03467477 -NCT03464578 -NCT03467516 -NCT03464656 -NCT03467685 -NCT03464682 -NCT03467789 -NCT03464695 -NCT03467828 -NCT03464734 -NCT03467867 -NCT03464851 -NCT03467880 -NCT03464916 -NCT03468010 -NCT03464942 -NCT03468075 -NCT03464968 -NCT03468153 -NCT03465020 -NCT03468205 -NCT03465111 -NCT03468218 -NCT03465150 -NCT03468231 -NCT03465176 -NCT03468244 -NCT03465202 -NCT03468335 -NCT03465267 -NCT03468374 -NCT03465293 -NCT03468387 -NCT03465345 -NCT03468426 -NCT03465423 -NCT03468452 -NCT03465527 -NCT03468465 -NCT03465540 -NCT03468491 -NCT03465579 -NCT03468634 -NCT03465592 -NCT03468660 -NCT03465618 -NCT03468712 -NCT03465722 -NCT03468725 -NCT03465748 -NCT03468751 -NCT03465761 -NCT03475134 -NCT03469310 -NCT03472183 -NCT03469323 -NCT03472092 -NCT03469362 -NCT03472196 -NCT03469479 -NCT03472235 -NCT03469531 -NCT03472274 -NCT03469544 -NCT03472352 -NCT03469557 -NCT03472365 -NCT03469583 -NCT03472378 -NCT03469609 -NCT03472560 -NCT03469674 -NCT03472573 -NCT03469713 -NCT03472586 -NCT03469726 -NCT03472599 -NCT03469804 -NCT03472625 -NCT03469895 -NCT03472677 -NCT03469960 -NCT03472716 -NCT03470090 -NCT03472807 -NCT03470155 -NCT03472833 -NCT03470220 -NCT03472859 -NCT03470246 -NCT03472872 -NCT03470259 -NCT03472924 -NCT03470285 -NCT03473119 -NCT03470298 -NCT03473236 -NCT03470350 -NCT03473457 -NCT03470402 -NCT03473496 -NCT03470545 -NCT03473574 -NCT03470662 -NCT03473587 -NCT03470740 -NCT03473639 -NCT03470766 -NCT03473691 -NCT03470805 -NCT03473730 -NCT03470922 -NCT03473743 -NCT03471052 -NCT03473756 -NCT03471065 -NCT03473925 -NCT03471156 -NCT03473938 -NCT03471221 -NCT03474016 -NCT03471260 -NCT03474068 -NCT03471273 -NCT03474081 -NCT03471286 -NCT03474094 -NCT03471312 -NCT03474107 -NCT03471351 -NCT03474133 -NCT03471364 -NCT03474159 -NCT03471442 -NCT03474198 -NCT03471455 -NCT03474237 -NCT03471468 -NCT03474263 -NCT03471494 -NCT03474289 -NCT03471546 -NCT03474341 -NCT03471650 -NCT03474367 -NCT03471663 -NCT03474406 -NCT03471702 -NCT03474497 -NCT03471728 -NCT03474575 -NCT03471767 -NCT03474601 -NCT03471832 -NCT03474744 -NCT03471884 -NCT03474822 -NCT03471936 -NCT03474835 -NCT03472014 -NCT03474861 -NCT03472027 -NCT03475004 -NCT03472053 -NCT03483194 -NCT03477500 -NCT03480256 -NCT03477513 -NCT03480243 -NCT03477539 -NCT03480282 -NCT03477552 -NCT03480334 -NCT03477565 -NCT03480360 -NCT03477591 -NCT03480438 -NCT03477760 -NCT03480490 -NCT03477864 -NCT03480503 -NCT03477890 -NCT03480646 -NCT03477929 -NCT03480672 -NCT03477942 -NCT03480750 -NCT03478033 -NCT03480776 -NCT03478072 -NCT03480841 -NCT03478163 -NCT03480867 -NCT03478176 -NCT03480893 -NCT03478189 -NCT03480958 -NCT03478358 -NCT03480997 -NCT03478371 -NCT03481010 -NCT03478384 -NCT03481101 -NCT03478397 -NCT03481114 -NCT03478423 -NCT03481296 -NCT03478449 -NCT03481491 -NCT03478462 -NCT03481504 -NCT03478488 -NCT03481517 -NCT03478514 -NCT03481556 -NCT03478826 -NCT03481647 -NCT03478852 -NCT03481816 -NCT03478865 -NCT03481829 -NCT03478878 -NCT03481868 -NCT03478891 -NCT03481920 -NCT03478904 -NCT03481946 -NCT03478982 -NCT03481998 -NCT03478995 -NCT03482050 -NCT03479008 -NCT03482089 -NCT03479151 -NCT03482102 -NCT03479190 -NCT03482128 -NCT03479268 -NCT03482180 -NCT03479385 -NCT03482310 -NCT03479437 -NCT03482323 -NCT03479463 -NCT03482362 -NCT03479476 -NCT03482375 -NCT03479528 -NCT03482401 -NCT03479554 -NCT03482479 -NCT03479567 -NCT03482557 -NCT03479645 -NCT03482570 -NCT03479749 -NCT03482609 -NCT03479788 -NCT03482713 -NCT03479814 -NCT03482791 -NCT03479827 -NCT03482895 -NCT03479905 -NCT03482921 -NCT03479918 -NCT03482960 -NCT03479983 -NCT03483012 -NCT03480022 -NCT03483038 -NCT03480074 -NCT03483090 -NCT03480152 -NCT03483103 -NCT03480230 -NCT03502668 -NCT03484611 -NCT03499756 -NCT03484702 -NCT03499795 -NCT03484819 -NCT03499808 -NCT03484832 -NCT03499834 -NCT03484923 -NCT03499899 -NCT03484949 -NCT03499964 -NCT03484962 -NCT03499990 -NCT03485027 -NCT03500016 -NCT03485079 -NCT03500068 -NCT03485118 -NCT03500133 -NCT03485170 -NCT03500263 -NCT03485183 -NCT03500328 -NCT03485209 -NCT03500367 -NCT03485378 -NCT03500380 -NCT03485495 -NCT03500393 -NCT03485547 -NCT03500419 -NCT03485625 -NCT03500445 -NCT03485729 -NCT03500588 -NCT03485768 -NCT03500666 -NCT03485911 -NCT03500692 -NCT03486067 -NCT03500770 -NCT03486119 -NCT03500861 -NCT03486197 -NCT03500874 -NCT03486262 -NCT03500991 -NCT03486301 -NCT03501056 -NCT03486314 -NCT03501368 -NCT03486327 -NCT03501381 -NCT03486340 -NCT03501394 -NCT03486366 -NCT03501407 -NCT03486431 -NCT03501420 -NCT03486496 -NCT03501680 -NCT03486509 -NCT03501758 -NCT03486587 -NCT03501771 -NCT03486626 -NCT03501849 -NCT03486678 -NCT03501901 -NCT03486730 -NCT03501966 -NCT03486821 -NCT03501979 -NCT03486873 -NCT03502135 -NCT03486886 -NCT03502148 -NCT03486899 -NCT03502213 -NCT03486912 -NCT03502265 -NCT03487016 -NCT03502317 -NCT03487055 -NCT03502330 -NCT03487120 -NCT03502343 -NCT03487133 -NCT03502395 -NCT03487237 -NCT03502421 -NCT03487250 -NCT03502473 -NCT03487276 -NCT03502577 -NCT03487523 -NCT03502629 -NCT03487549 -NCT03502655 -NCT03487588 -NCT03499210 -NCT03499301 -NCT03499353 -NCT03499418 -NCT03499444 -NCT03499496 -NCT03499522 -NCT03499535 -NCT03499561 -NCT03499613 -NCT03499626 -NCT03499665 -NCT03487601 -NCT03490487 -NCT03487666 -NCT03490474 -NCT03487705 -NCT03496402 -NCT03487731 -NCT03496519 -NCT03487757 -NCT03496545 -NCT03487809 -NCT03496558 -NCT03487900 -NCT03496662 -NCT03487939 -NCT03496753 -NCT03487965 -NCT03496766 -NCT03488095 -NCT03496779 -NCT03488134 -NCT03496792 -NCT03488147 -NCT03496805 -NCT03488160 -NCT03496818 -NCT03488212 -NCT03496831 -NCT03488225 -NCT03496844 -NCT03488251 -NCT03496961 -NCT03488472 -NCT03497026 -NCT03488485 -NCT03497039 -NCT03488537 -NCT03497117 -NCT03488589 -NCT03497208 -NCT03488628 -NCT03497377 -NCT03488667 -NCT03497429 -NCT03488693 -NCT03497442 -NCT03488797 -NCT03497455 -NCT03488810 -NCT03497468 -NCT03488953 -NCT03497520 -NCT03489031 -NCT03497533 -NCT03489044 -NCT03497663 -NCT03489057 -NCT03497702 -NCT03489213 -NCT03497728 -NCT03489252 -NCT03497767 -NCT03489265 -NCT03497806 -NCT03489278 -NCT03497819 -NCT03489317 -NCT03497845 -NCT03489343 -NCT03497871 -NCT03489356 -NCT03497897 -NCT03489369 -NCT03498001 -NCT03489525 -NCT03498014 -NCT03489616 -NCT03498053 -NCT03489681 -NCT03498157 -NCT03489707 -NCT03498196 -NCT03489824 -NCT03498222 -NCT03489876 -NCT03498326 -NCT03489993 -NCT03498378 -NCT03490032 -NCT03498417 -NCT03490045 -NCT03498430 -NCT03490071 -NCT03498521 -NCT03490084 -NCT03498612 -NCT03490123 -NCT03498625 -NCT03490214 -NCT03498664 -NCT03490279 -NCT03498716 -NCT03490292 -NCT03498742 -NCT03490344 -NCT03498794 -NCT03490370 -NCT03498885 -NCT03490409 -NCT03498976 -NCT03490448 -NCT03499119 -NCT03490500 -NCT03493594 -NCT03490513 -NCT03493581 -NCT03490539 -NCT03493633 -NCT03490565 -NCT03493646 -NCT03490578 -NCT03493789 -NCT03490669 -NCT03493802 -NCT03490747 -NCT03493854 -NCT03490760 -NCT03493880 -NCT03490773 -NCT03493906 -NCT03490799 -NCT03493932 -NCT03490838 -NCT03493945 -NCT03490890 -NCT03493971 -NCT03491111 -NCT03493997 -NCT03491176 -NCT03494023 -NCT03491280 -NCT03494166 -NCT03491345 -NCT03494179 -NCT03491410 -NCT03494231 -NCT03491436 -NCT03494283 -NCT03491462 -NCT03494322 -NCT03491540 -NCT03494400 -NCT03491579 -NCT03494452 -NCT03491631 -NCT03494517 -NCT03491657 -NCT03494569 -NCT03491683 -NCT03494621 -NCT03491696 -NCT03494634 -NCT03491709 -NCT03494673 -NCT03491878 -NCT03494751 -NCT03491904 -NCT03494764 -NCT03492073 -NCT03494816 -NCT03492125 -NCT03494881 -NCT03492138 -NCT03494946 -NCT03492164 -NCT03495050 -NCT03492268 -NCT03495115 -NCT03492450 -NCT03495167 -NCT03492463 -NCT03495219 -NCT03492515 -NCT03495258 -NCT03492671 -NCT03495271 -NCT03492762 -NCT03495323 -NCT03492775 -NCT03495388 -NCT03492827 -NCT03495427 -NCT03492853 -NCT03495440 -NCT03492918 -NCT03495479 -NCT03493009 -NCT03495492 -NCT03493048 -NCT03495518 -NCT03493061 -NCT03495570 -NCT03493204 -NCT03495609 -NCT03493217 -NCT03495661 -NCT03493230 -NCT03495713 -NCT03493360 -NCT03495830 -NCT03493425 -NCT03495882 -NCT03493438 -NCT03495921 -NCT03493451 -NCT03495960 -NCT03493464 -NCT03496142 -NCT03493477 -NCT03496220 -NCT03493529 -NCT03496233 -NCT03493542 -NCT03518294 -NCT03513666 -NCT03515863 -NCT03513679 -NCT03515837 -NCT03513705 -NCT03515941 -NCT03513731 -NCT03516045 -NCT03513744 -NCT03516071 -NCT03513757 -NCT03516084 -NCT03513861 -NCT03516123 -NCT03513887 -NCT03516149 -NCT03513900 -NCT03516188 -NCT03513952 -NCT03516214 -NCT03514017 -NCT03516240 -NCT03514069 -NCT03516253 -NCT03514082 -NCT03516279 -NCT03514108 -NCT03516448 -NCT03514121 -NCT03516487 -NCT03514173 -NCT03516500 -NCT03514251 -NCT03516526 -NCT03514277 -NCT03516617 -NCT03514329 -NCT03516708 -NCT03514368 -NCT03516747 -NCT03514381 -NCT03516760 -NCT03514407 -NCT03516773 -NCT03514433 -NCT03516812 -NCT03514459 -NCT03516929 -NCT03514550 -NCT03516981 -NCT03514654 -NCT03516994 -NCT03514667 -NCT03517072 -NCT03514680 -NCT03517111 -NCT03514719 -NCT03517137 -NCT03514836 -NCT03517150 -NCT03514849 -NCT03517176 -NCT03514888 -NCT03517319 -NCT03514901 -NCT03517371 -NCT03514927 -NCT03517423 -NCT03514979 -NCT03517449 -NCT03515018 -NCT03517488 -NCT03515044 -NCT03517514 -NCT03515070 -NCT03517579 -NCT03515174 -NCT03517618 -NCT03515187 -NCT03517670 -NCT03515200 -NCT03517722 -NCT03515252 -NCT03517852 -NCT03515278 -NCT03517956 -NCT03515356 -NCT03517969 -NCT03515369 -NCT03517982 -NCT03515512 -NCT03517995 -NCT03515551 -NCT03518034 -NCT03515577 -NCT03518099 -NCT03515603 -NCT03518112 -NCT03515629 -NCT03518203 -NCT03515707 -NCT03518229 -NCT03515746 -NCT03518242 -NCT03515759 -NCT03518255 -NCT03515772 -NCT03518268 -NCT03515798 -NCT03518281 -NCT03515824 -NCT03523312 -NCT03518320 -NCT03520790 -NCT03518424 -NCT03520712 -NCT03518502 -NCT03520842 -NCT03518554 -NCT03520855 -NCT03518606 -NCT03520894 -NCT03518632 -NCT03520920 -NCT03518671 -NCT03520946 -NCT03518710 -NCT03520959 -NCT03518775 -NCT03520985 -NCT03518853 -NCT03520998 -NCT03518918 -NCT03521011 -NCT03518957 -NCT03521037 -NCT03518970 -NCT03521154 -NCT03519048 -NCT03521167 -NCT03519074 -NCT03521219 -NCT03519165 -NCT03521245 -NCT03519178 -NCT03521271 -NCT03519230 -NCT03521375 -NCT03519256 -NCT03521479 -NCT03519295 -NCT03521518 -NCT03519308 -NCT03521557 -NCT03519360 -NCT03521570 -NCT03519412 -NCT03521583 -NCT03519425 -NCT03521648 -NCT03519464 -NCT03521739 -NCT03519490 -NCT03521765 -NCT03519516 -NCT03521817 -NCT03519542 -NCT03521830 -NCT03519581 -NCT03521869 -NCT03519607 -NCT03521921 -NCT03519646 -NCT03521986 -NCT03519737 -NCT03522064 -NCT03519971 -NCT03522142 -NCT03519984 -NCT03522155 -NCT03519997 -NCT03522207 -NCT03520075 -NCT03522233 -NCT03520088 -NCT03522246 -NCT03520140 -NCT03522298 -NCT03520166 -NCT03522441 -NCT03520218 -NCT03522467 -NCT03520231 -NCT03522493 -NCT03520257 -NCT03522506 -NCT03520283 -NCT03522584 -NCT03520322 -NCT03522649 -NCT03520348 -NCT03522766 -NCT03520439 -NCT03522831 -NCT03520478 -NCT03522909 -NCT03520491 -NCT03523065 -NCT03520504 -NCT03523104 -NCT03520517 -NCT03523195 -NCT03520530 -NCT03523234 -NCT03520634 -NCT03523247 -NCT03520647 -NCT03523273 -NCT03520660 -NCT03523286 -NCT03520673 -NCT03523299 -NCT03520686 -NCT03528473 -NCT03523351 -NCT03525782 -NCT03523377 -NCT03525717 -NCT03523390 -NCT03525795 -NCT03523429 -NCT03525808 -NCT03523442 -NCT03525834 -NCT03523468 -NCT03525873 -NCT03523520 -NCT03525925 -NCT03523546 -NCT03525990 -NCT03523572 -NCT03526016 -NCT03523585 -NCT03526185 -NCT03523702 -NCT03526211 -NCT03523728 -NCT03526250 -NCT03523741 -NCT03526432 -NCT03523819 -NCT03526510 -NCT03523845 -NCT03526536 -NCT03523897 -NCT03526562 -NCT03523975 -NCT03526588 -NCT03524001 -NCT03526679 -NCT03524040 -NCT03526731 -NCT03524066 -NCT03526822 -NCT03524118 -NCT03526835 -NCT03524170 -NCT03526874 -NCT03524222 -NCT03526887 -NCT03524235 -NCT03526900 -NCT03524248 -NCT03526913 -NCT03524261 -NCT03526952 -NCT03524274 -NCT03527108 -NCT03524287 -NCT03527147 -NCT03524300 -NCT03527225 -NCT03524326 -NCT03527251 -NCT03524378 -NCT03527264 -NCT03524391 -NCT03527277 -NCT03524430 -NCT03527498 -NCT03524508 -NCT03527563 -NCT03524573 -NCT03527589 -NCT03524638 -NCT03527628 -NCT03524677 -NCT03527706 -NCT03524716 -NCT03527784 -NCT03524755 -NCT03527810 -NCT03524781 -NCT03527836 -NCT03524807 -NCT03527875 -NCT03524820 -NCT03527888 -NCT03524872 -NCT03527966 -NCT03524898 -NCT03527992 -NCT03525080 -NCT03528057 -NCT03525236 -NCT03528070 -NCT03525262 -NCT03528161 -NCT03525288 -NCT03528226 -NCT03525301 -NCT03528265 -NCT03525392 -NCT03528304 -NCT03525431 -NCT03528343 -NCT03525522 -NCT03528369 -NCT03525535 -NCT03528382 -NCT03525652 -NCT03528408 -NCT03525678 -NCT03528421 -NCT03525691 -NCT03533699 -NCT03528538 -NCT03531034 -NCT03528590 -NCT03531008 -NCT03528616 -NCT03531099 -NCT03528629 -NCT03531138 -NCT03528642 -NCT03531190 -NCT03528694 -NCT03531281 -NCT03528733 -NCT03531320 -NCT03528746 -NCT03531333 -NCT03528785 -NCT03531372 -NCT03528824 -NCT03531502 -NCT03528863 -NCT03531606 -NCT03528876 -NCT03531619 -NCT03528954 -NCT03531632 -NCT03529071 -NCT03531645 -NCT03529084 -NCT03531775 -NCT03529110 -NCT03531814 -NCT03529175 -NCT03531827 -NCT03529188 -NCT03531840 -NCT03529266 -NCT03531918 -NCT03529279 -NCT03532061 -NCT03529318 -NCT03532074 -NCT03529370 -NCT03532087 -NCT03529383 -NCT03532139 -NCT03529422 -NCT03532165 -NCT03529448 -NCT03532204 -NCT03529461 -NCT03532217 -NCT03529474 -NCT03532230 -NCT03529513 -NCT03532269 -NCT03529526 -NCT03532282 -NCT03529565 -NCT03532295 -NCT03529591 -NCT03532308 -NCT03529630 -NCT03532347 -NCT03529643 -NCT03532451 -NCT03529669 -NCT03532516 -NCT03529708 -NCT03532620 -NCT03529747 -NCT03532698 -NCT03529786 -NCT03532737 -NCT03529851 -NCT03532750 -NCT03529890 -NCT03532802 -NCT03529955 -NCT03532880 -NCT03530033 -NCT03532932 -NCT03530085 -NCT03532997 -NCT03530124 -NCT03533010 -NCT03530241 -NCT03533049 -NCT03530267 -NCT03533127 -NCT03530397 -NCT03533257 -NCT03530423 -NCT03533270 -NCT03530514 -NCT03533283 -NCT03530553 -NCT03533322 -NCT03530592 -NCT03533413 -NCT03530605 -NCT03533504 -NCT03530683 -NCT03533569 -NCT03530696 -NCT03533582 -NCT03530787 -NCT03533647 -NCT03530917 -NCT03533686 -NCT03530969 -NCT03540368 -NCT03533764 -NCT03536780 -NCT03533816 -NCT03536728 -NCT03533920 -NCT03536936 -NCT03533946 -NCT03536962 -NCT03533985 -NCT03537001 -NCT03534024 -NCT03537092 -NCT03534050 -NCT03537378 -NCT03534141 -NCT03537391 -NCT03534180 -NCT03537430 -NCT03534206 -NCT03537443 -NCT03534245 -NCT03537495 -NCT03534323 -NCT03537534 -NCT03534453 -NCT03537573 -NCT03534492 -NCT03537599 -NCT03534505 -NCT03537625 -NCT03534557 -NCT03537690 -NCT03534635 -NCT03537768 -NCT03534713 -NCT03537807 -NCT03534739 -NCT03537911 -NCT03534804 -NCT03537989 -NCT03534934 -NCT03538028 -NCT03534947 -NCT03538041 -NCT03534986 -NCT03538171 -NCT03534999 -NCT03538223 -NCT03535129 -NCT03538314 -NCT03535207 -NCT03538327 -NCT03535246 -NCT03538483 -NCT03535259 -NCT03538574 -NCT03535272 -NCT03538587 -NCT03535350 -NCT03538704 -NCT03535363 -NCT03538834 -NCT03535415 -NCT03538951 -NCT03535506 -NCT03539094 -NCT03535545 -NCT03539172 -NCT03535610 -NCT03539302 -NCT03535636 -NCT03539328 -NCT03535675 -NCT03539406 -NCT03535688 -NCT03539471 -NCT03535701 -NCT03539484 -NCT03535727 -NCT03539536 -NCT03535740 -NCT03539588 -NCT03535753 -NCT03539614 -NCT03535831 -NCT03539627 -NCT03535909 -NCT03539731 -NCT03535961 -NCT03539744 -NCT03536039 -NCT03539822 -NCT03536065 -NCT03539835 -NCT03536078 -NCT03539861 -NCT03536104 -NCT03539952 -NCT03536130 -NCT03540017 -NCT03536182 -NCT03540069 -NCT03536208 -NCT03540160 -NCT03536481 -NCT03540199 -NCT03536533 -NCT03540251 -NCT03536572 -NCT03540303 -NCT03536702 -NCT03546842 -NCT03540407 -NCT03543345 -NCT03540420 -NCT03543306 -NCT03540563 -NCT03543358 -NCT03540654 -NCT03543410 -NCT03540706 -NCT03543436 -NCT03540823 -NCT03543462 -NCT03540849 -NCT03543501 -NCT03540862 -NCT03543670 -NCT03540953 -NCT03543683 -NCT03541148 -NCT03543696 -NCT03541252 -NCT03543813 -NCT03541278 -NCT03543852 -NCT03541304 -NCT03543969 -NCT03541330 -NCT03544021 -NCT03541369 -NCT03544086 -NCT03541395 -NCT03544099 -NCT03541421 -NCT03544125 -NCT03541486 -NCT03544216 -NCT03541538 -NCT03544281 -NCT03541551 -NCT03544502 -NCT03541629 -NCT03544567 -NCT03541720 -NCT03544671 -NCT03541733 -NCT03544723 -NCT03541772 -NCT03544736 -NCT03541850 -NCT03544762 -NCT03541902 -NCT03544814 -NCT03541928 -NCT03544840 -NCT03541941 -NCT03544905 -NCT03541967 -NCT03544918 -NCT03541980 -NCT03544983 -NCT03542136 -NCT03545035 -NCT03542175 -NCT03545048 -NCT03542214 -NCT03545100 -NCT03542240 -NCT03545113 -NCT03542266 -NCT03545165 -NCT03542318 -NCT03545204 -NCT03542370 -NCT03545230 -NCT03542409 -NCT03545256 -NCT03542422 -NCT03545334 -NCT03542461 -NCT03545529 -NCT03542474 -NCT03545542 -NCT03542539 -NCT03545711 -NCT03542565 -NCT03545815 -NCT03542604 -NCT03545945 -NCT03542656 -NCT03545971 -NCT03542669 -NCT03546166 -NCT03542695 -NCT03546361 -NCT03542773 -NCT03546426 -NCT03542799 -NCT03546478 -NCT03542838 -NCT03546582 -NCT03542877 -NCT03546660 -NCT03542916 -NCT03546673 -NCT03542942 -NCT03546686 -NCT03543046 -NCT03546816 -NCT03543085 -NCT03546829 -NCT03543189 -NCT03552406 -NCT03546855 -NCT03549286 -NCT03546894 -NCT03549273 -NCT03546959 -NCT03549338 -NCT03546972 -NCT03549377 -NCT03547011 -NCT03549390 -NCT03547024 -NCT03549442 -NCT03547037 -NCT03549494 -NCT03547050 -NCT03549546 -NCT03547115 -NCT03549559 -NCT03547154 -NCT03549650 -NCT03547206 -NCT03549689 -NCT03547232 -NCT03549715 -NCT03547323 -NCT03549728 -NCT03547336 -NCT03549949 -NCT03547375 -NCT03550001 -NCT03547388 -NCT03550014 -NCT03547453 -NCT03550027 -NCT03547492 -NCT03550040 -NCT03547557 -NCT03550053 -NCT03547596 -NCT03550157 -NCT03547648 -NCT03550183 -NCT03547661 -NCT03550287 -NCT03547687 -NCT03550313 -NCT03547700 -NCT03550365 -NCT03547804 -NCT03550391 -NCT03547895 -NCT03550482 -NCT03547960 -NCT03550508 -NCT03547973 -NCT03550586 -NCT03547999 -NCT03550690 -NCT03548077 -NCT03550703 -NCT03548103 -NCT03550716 -NCT03548168 -NCT03550755 -NCT03548181 -NCT03550885 -NCT03548207 -NCT03551015 -NCT03548246 -NCT03551028 -NCT03548285 -NCT03551171 -NCT03548415 -NCT03551249 -NCT03548428 -NCT03551379 -NCT03548467 -NCT03551444 -NCT03548571 -NCT03551600 -NCT03548610 -NCT03551626 -NCT03548636 -NCT03551717 -NCT03548688 -NCT03551782 -NCT03548727 -NCT03551795 -NCT03548740 -NCT03551821 -NCT03548753 -NCT03551847 -NCT03548831 -NCT03551977 -NCT03548844 -NCT03551990 -NCT03548870 -NCT03552016 -NCT03548896 -NCT03552029 -NCT03548961 -NCT03552055 -NCT03549000 -NCT03552068 -NCT03549052 -NCT03552081 -NCT03549117 -NCT03552120 -NCT03549130 -NCT03552380 -NCT03549195 -NCT03558516 -NCT03552458 -NCT03555500 -NCT03552471 -NCT03555474 -NCT03552549 -NCT03555734 -NCT03552692 -NCT03555877 -NCT03552718 -NCT03555955 -NCT03552744 -NCT03556020 -NCT03552796 -NCT03556046 -NCT03552861 -NCT03556228 -NCT03552874 -NCT03556332 -NCT03552887 -NCT03556345 -NCT03552965 -NCT03556358 -NCT03553004 -NCT03556384 -NCT03553108 -NCT03556397 -NCT03553212 -NCT03556436 -NCT03553238 -NCT03556475 -NCT03553329 -NCT03556527 -NCT03553355 -NCT03556566 -NCT03553368 -NCT03556657 -NCT03553381 -NCT03556709 -NCT03553485 -NCT03556748 -NCT03553537 -NCT03556839 -NCT03553576 -NCT03556904 -NCT03553602 -NCT03556917 -NCT03553654 -NCT03556930 -NCT03553693 -NCT03556943 -NCT03553706 -NCT03556956 -NCT03553784 -NCT03556982 -NCT03553836 -NCT03557112 -NCT03553849 -NCT03557216 -NCT03553862 -NCT03557268 -NCT03553888 -NCT03557359 -NCT03553914 -NCT03557372 -NCT03553966 -NCT03557411 -NCT03554005 -NCT03557463 -NCT03554018 -NCT03557528 -NCT03554044 -NCT03557554 -NCT03554083 -NCT03557710 -NCT03554109 -NCT03557762 -NCT03554200 -NCT03557788 -NCT03554265 -NCT03557801 -NCT03554317 -NCT03557840 -NCT03554356 -NCT03557879 -NCT03554395 -NCT03557905 -NCT03554447 -NCT03557918 -NCT03554473 -NCT03557970 -NCT03554707 -NCT03558035 -NCT03554785 -NCT03558087 -NCT03554889 -NCT03558139 -NCT03554954 -NCT03558165 -NCT03555032 -NCT03558191 -NCT03555149 -NCT03558204 -NCT03555188 -NCT03558230 -NCT03555227 -NCT03558412 -NCT03555266 -NCT03558490 -NCT03555396 -NCT03558503 -NCT03555422 -NCT03563703 -NCT03558542 -NCT03561610 -NCT03558594 -NCT03561441 -NCT03558607 -NCT03561623 -NCT03558711 -NCT03561688 -NCT03558724 -NCT03561727 -NCT03558750 -NCT03561740 -NCT03558841 -NCT03561753 -NCT03558919 -NCT03561779 -NCT03558945 -NCT03561805 -NCT03559023 -NCT03561844 -NCT03559049 -NCT03561857 -NCT03559244 -NCT03561870 -NCT03559348 -NCT03561883 -NCT03559374 -NCT03561896 -NCT03559413 -NCT03561948 -NCT03559439 -NCT03561961 -NCT03559478 -NCT03562039 -NCT03559543 -NCT03562143 -NCT03559556 -NCT03562169 -NCT03559764 -NCT03562182 -NCT03559803 -NCT03562195 -NCT03559881 -NCT03562390 -NCT03559894 -NCT03562403 -NCT03560050 -NCT03562429 -NCT03560089 -NCT03562507 -NCT03560102 -NCT03562637 -NCT03560128 -NCT03562663 -NCT03560154 -NCT03562715 -NCT03560167 -NCT03562741 -NCT03560180 -NCT03562832 -NCT03560349 -NCT03562871 -NCT03560362 -NCT03562897 -NCT03560479 -NCT03562910 -NCT03560531 -NCT03562975 -NCT03560622 -NCT03563001 -NCT03560635 -NCT03563040 -NCT03560648 -NCT03563053 -NCT03560661 -NCT03563066 -NCT03560752 -NCT03563144 -NCT03560856 -NCT03563157 -NCT03560869 -NCT03563170 -NCT03560882 -NCT03563196 -NCT03560908 -NCT03563248 -NCT03560973 -NCT03563261 -NCT03561051 -NCT03563300 -NCT03561064 -NCT03563313 -NCT03561090 -NCT03563326 -NCT03561142 -NCT03563365 -NCT03561168 -NCT03563482 -NCT03561181 -NCT03563560 -NCT03561207 -NCT03563586 -NCT03561220 -NCT03563599 -NCT03561259 -NCT03563625 -NCT03561272 -NCT03563677 -NCT03561324 -NCT03563690 -NCT03561428 -NCT03569397 -NCT03563716 -NCT03566563 -NCT03563729 -NCT03566485 -NCT03563781 -NCT03566576 -NCT03563898 -NCT03566745 -NCT03564054 -NCT03566784 -NCT03564119 -NCT03566862 -NCT03564171 -NCT03567044 -NCT03564275 -NCT03567265 -NCT03564288 -NCT03567343 -NCT03564340 -NCT03567369 -NCT03564379 -NCT03567395 -NCT03564405 -NCT03567460 -NCT03564418 -NCT03567499 -NCT03564470 -NCT03567616 -NCT03564535 -NCT03567642 -NCT03564548 -NCT03567655 -NCT03564678 -NCT03567720 -NCT03564691 -NCT03567785 -NCT03564704 -NCT03567837 -NCT03564730 -NCT03567850 -NCT03564769 -NCT03567863 -NCT03564782 -NCT03567876 -NCT03564808 -NCT03567889 -NCT03564821 -NCT03568019 -NCT03564834 -NCT03568032 -NCT03564899 -NCT03568058 -NCT03564912 -NCT03568097 -NCT03564938 -NCT03568123 -NCT03564977 -NCT03568188 -NCT03565003 -NCT03568292 -NCT03565029 -NCT03568370 -NCT03565068 -NCT03568422 -NCT03565120 -NCT03568461 -NCT03565146 -NCT03568526 -NCT03565198 -NCT03568539 -NCT03565341 -NCT03568656 -NCT03565354 -NCT03568682 -NCT03565367 -NCT03568747 -NCT03565393 -NCT03568773 -NCT03565406 -NCT03568799 -NCT03565445 -NCT03568825 -NCT03565471 -NCT03568851 -NCT03565536 -NCT03568942 -NCT03565757 -NCT03568968 -NCT03565783 -NCT03568994 -NCT03565822 -NCT03569007 -NCT03565835 -NCT03569046 -NCT03565926 -NCT03569072 -NCT03565965 -NCT03569228 -NCT03565991 -NCT03569241 -NCT03566199 -NCT03569254 -NCT03566316 -NCT03569280 -NCT03566355 -NCT03569306 -NCT03566394 -NCT03569345 -NCT03566433 -NCT03569384 -NCT03566446 -NCT03574610 -NCT03569527 -NCT03572387 -NCT03569540 -NCT03572374 -NCT03569605 -NCT03572400 -NCT03569631 -NCT03572452 -NCT03569657 -NCT03572478 -NCT03569696 -NCT03572504 -NCT03569761 -NCT03572530 -NCT03569787 -NCT03572556 -NCT03569800 -NCT03572569 -NCT03569826 -NCT03572582 -NCT03569943 -NCT03572621 -NCT03569969 -NCT03572634 -NCT03569995 -NCT03572647 -NCT03570021 -NCT03572712 -NCT03570125 -NCT03572738 -NCT03570138 -NCT03572764 -NCT03570177 -NCT03572803 -NCT03570190 -NCT03572829 -NCT03570242 -NCT03572855 -NCT03570281 -NCT03572946 -NCT03570307 -NCT03572959 -NCT03570359 -NCT03572998 -NCT03570398 -NCT03573011 -NCT03570437 -NCT03573024 -NCT03570476 -NCT03573141 -NCT03570593 -NCT03573271 -NCT03570619 -NCT03573284 -NCT03570645 -NCT03573310 -NCT03570684 -NCT03573362 -NCT03570775 -NCT03573375 -NCT03570827 -NCT03573401 -NCT03570892 -NCT03573531 -NCT03570905 -NCT03573544 -NCT03570983 -NCT03573635 -NCT03570996 -NCT03573648 -NCT03571126 -NCT03573661 -NCT03571139 -NCT03573700 -NCT03571191 -NCT03573765 -NCT03571308 -NCT03573804 -NCT03571321 -NCT03573921 -NCT03571360 -NCT03573947 -NCT03571438 -NCT03573960 -NCT03571568 -NCT03573986 -NCT03571633 -NCT03574012 -NCT03571737 -NCT03574038 -NCT03571828 -NCT03574051 -NCT03571841 -NCT03574168 -NCT03571867 -NCT03574194 -NCT03571984 -NCT03574207 -NCT03571997 -NCT03574220 -NCT03572088 -NCT03574298 -NCT03572153 -NCT03574324 -NCT03572283 -NCT03574402 -NCT03572296 -NCT03574454 -NCT03572348 -NCT03574571 -NCT03572361 -NCT03579784 -NCT03574636 -NCT03576872 -NCT03574649 -NCT03576833 -NCT03574753 -NCT03576963 -NCT03574779 -NCT03577002 -NCT03574792 -NCT03577028 -NCT03574805 -NCT03577132 -NCT03574818 -NCT03577184 -NCT03574831 -NCT03577236 -NCT03574870 -NCT03577262 -NCT03574922 -NCT03577600 -NCT03575013 -NCT03577613 -NCT03575065 -NCT03577665 -NCT03575078 -NCT03577704 -NCT03575104 -NCT03577743 -NCT03575117 -NCT03577795 -NCT03575143 -NCT03577873 -NCT03575195 -NCT03577925 -NCT03575221 -NCT03577951 -NCT03575234 -NCT03578042 -NCT03575247 -NCT03578081 -NCT03575312 -NCT03578198 -NCT03575325 -NCT03578263 -NCT03575351 -NCT03578289 -NCT03575377 -NCT03578367 -NCT03575390 -NCT03578380 -NCT03575507 -NCT03578406 -NCT03575520 -NCT03578432 -NCT03575598 -NCT03578445 -NCT03575611 -NCT03578575 -NCT03575624 -NCT03578627 -NCT03575637 -NCT03578679 -NCT03575793 -NCT03578705 -NCT03575806 -NCT03578874 -NCT03575819 -NCT03578952 -NCT03575832 -NCT03578991 -NCT03575845 -NCT03579004 -NCT03575871 -NCT03579082 -NCT03575949 -NCT03579147 -NCT03576131 -NCT03579199 -NCT03576183 -NCT03579303 -NCT03576274 -NCT03579316 -NCT03576352 -NCT03579368 -NCT03576378 -NCT03579394 -NCT03576417 -NCT03579446 -NCT03576430 -NCT03579472 -NCT03576443 -NCT03579485 -NCT03576456 -NCT03579524 -NCT03576521 -NCT03579550 -NCT03576534 -NCT03579576 -NCT03576547 -NCT03579602 -NCT03576612 -NCT03579628 -NCT03576755 -NCT03579654 -NCT03576768 -NCT03579680 -NCT03576794 -NCT03579758 -NCT03576807 -NCT03579771 -NCT03576820 -NCT03585426 -NCT03579836 -NCT03582462 -NCT03579875 -NCT03582319 -NCT03579888 -NCT03582475 -NCT03579927 -NCT03582514 -NCT03579966 -NCT03582566 -NCT03579979 -NCT03582618 -NCT03580044 -NCT03582670 -NCT03580109 -NCT03582683 -NCT03580135 -NCT03582722 -NCT03580239 -NCT03582774 -NCT03580252 -NCT03582865 -NCT03580382 -NCT03582891 -NCT03580395 -NCT03582969 -NCT03580408 -NCT03583086 -NCT03580421 -NCT03583125 -NCT03580434 -NCT03583164 -NCT03580499 -NCT03583242 -NCT03580525 -NCT03583255 -NCT03580564 -NCT03583294 -NCT03580577 -NCT03583320 -NCT03580655 -NCT03583424 -NCT03580681 -NCT03583489 -NCT03580694 -NCT03583541 -NCT03580928 -NCT03583567 -NCT03580941 -NCT03583580 -NCT03580967 -NCT03583606 -NCT03580980 -NCT03583619 -NCT03581136 -NCT03583697 -NCT03581188 -NCT03583710 -NCT03581201 -NCT03583723 -NCT03581253 -NCT03583736 -NCT03581279 -NCT03583879 -NCT03581292 -NCT03583905 -NCT03581331 -NCT03583931 -NCT03581344 -NCT03583944 -NCT03581357 -NCT03583957 -NCT03581370 -NCT03584009 -NCT03581422 -NCT03584022 -NCT03581435 -NCT03584048 -NCT03581487 -NCT03584269 -NCT03581500 -NCT03584308 -NCT03581565 -NCT03584334 -NCT03581591 -NCT03584360 -NCT03581630 -NCT03584425 -NCT03581682 -NCT03584438 -NCT03581695 -NCT03584659 -NCT03581786 -NCT03584711 -NCT03581838 -NCT03584776 -NCT03581942 -NCT03584802 -NCT03582033 -NCT03584815 -NCT03582059 -NCT03584919 -NCT03582111 -NCT03585062 -NCT03582124 -NCT03585114 -NCT03582176 -NCT03585218 -NCT03582254 -NCT03585257 -NCT03582306 -NCT03590457 -NCT03585465 -NCT03588091 -NCT03585517 -NCT03588078 -NCT03585530 -NCT03588182 -NCT03585569 -NCT03588208 -NCT03585621 -NCT03588234 -NCT03585660 -NCT03588247 -NCT03585673 -NCT03588286 -NCT03585686 -NCT03588299 -NCT03585699 -NCT03588325 -NCT03585712 -NCT03588364 -NCT03585725 -NCT03588468 -NCT03585764 -NCT03588533 -NCT03585933 -NCT03588598 -NCT03585959 -NCT03588650 -NCT03585972 -NCT03588676 -NCT03585998 -NCT03588689 -NCT03586024 -NCT03588819 -NCT03586050 -NCT03588832 -NCT03586089 -NCT03588845 -NCT03586154 -NCT03588936 -NCT03586167 -NCT03588949 -NCT03586206 -NCT03589014 -NCT03586427 -NCT03589053 -NCT03586453 -NCT03589131 -NCT03586544 -NCT03589196 -NCT03586609 -NCT03589222 -NCT03586661 -NCT03589300 -NCT03586687 -NCT03589326 -NCT03586700 -NCT03589339 -NCT03586778 -NCT03589430 -NCT03586804 -NCT03589443 -NCT03586869 -NCT03589469 -NCT03586908 -NCT03589547 -NCT03586973 -NCT03589573 -NCT03586986 -NCT03589612 -NCT03586999 -NCT03589651 -NCT03587012 -NCT03589716 -NCT03587038 -NCT03589729 -NCT03587116 -NCT03589768 -NCT03587129 -NCT03589781 -NCT03587168 -NCT03589820 -NCT03587233 -NCT03589833 -NCT03587246 -NCT03589924 -NCT03587259 -NCT03589950 -NCT03587285 -NCT03590054 -NCT03587311 -NCT03590080 -NCT03587402 -NCT03590119 -NCT03587480 -NCT03590145 -NCT03587532 -NCT03590171 -NCT03587662 -NCT03590197 -NCT03587714 -NCT03590210 -NCT03587740 -NCT03590249 -NCT03587818 -NCT03590353 -NCT03587844 -NCT03590366 -NCT03588039 -NCT03590418 -NCT03588065 -NCT03596437 -NCT03590509 -NCT03593512 -NCT03590574 -NCT03593447 -NCT03590626 -NCT03593551 -NCT03590652 -NCT03593798 -NCT03590665 -NCT03593902 -NCT03590743 -NCT03593993 -NCT03590808 -NCT03594058 -NCT03590899 -NCT03594149 -NCT03590912 -NCT03594188 -NCT03591263 -NCT03594292 -NCT03591276 -NCT03594383 -NCT03591367 -NCT03594396 -NCT03591380 -NCT03594409 -NCT03591419 -NCT03594422 -NCT03591497 -NCT03594487 -NCT03591510 -NCT03594578 -NCT03591523 -NCT03594630 -NCT03591549 -NCT03594669 -NCT03591562 -NCT03594747 -NCT03591575 -NCT03594760 -NCT03591614 -NCT03594799 -NCT03591666 -NCT03594916 -NCT03591705 -NCT03594929 -NCT03591731 -NCT03594955 -NCT03591744 -NCT03595059 -NCT03591848 -NCT03595124 -NCT03591861 -NCT03595150 -NCT03591952 -NCT03595189 -NCT03591965 -NCT03595228 -NCT03591978 -NCT03595436 -NCT03592043 -NCT03595462 -NCT03592082 -NCT03595540 -NCT03592121 -NCT03595553 -NCT03592199 -NCT03595566 -NCT03592212 -NCT03595579 -NCT03592264 -NCT03595592 -NCT03592316 -NCT03595618 -NCT03592342 -NCT03595644 -NCT03592381 -NCT03595657 -NCT03592407 -NCT03595683 -NCT03592433 -NCT03595722 -NCT03592459 -NCT03595735 -NCT03592472 -NCT03595787 -NCT03592641 -NCT03595800 -NCT03592706 -NCT03595813 -NCT03592719 -NCT03595852 -NCT03592771 -NCT03595904 -NCT03592810 -NCT03595917 -NCT03592849 -NCT03595982 -NCT03592888 -NCT03596073 -NCT03593018 -NCT03596086 -NCT03593057 -NCT03596281 -NCT03593109 -NCT03596320 -NCT03593226 -NCT03596372 -NCT03593304 -NCT03596411 -NCT03593330 -NCT03752138 -NCT03596476 -NCT03598959 -NCT03596541 -NCT03598946 -NCT03596554 -NCT03598998 -NCT03596567 -NCT03599011 -NCT03596593 -NCT03599180 -NCT03596619 -NCT03599193 -NCT03596658 -NCT03599258 -NCT03596684 -NCT03599323 -NCT03596710 -NCT03599362 -NCT03596736 -NCT03599375 -NCT03596814 -NCT03599453 -NCT03596827 -NCT03599518 -NCT03596892 -NCT03599648 -NCT03597009 -NCT03599700 -NCT03597022 -NCT03599713 -NCT03597061 -NCT03599752 -NCT03597087 -NCT03599765 -NCT03597100 -NCT03599778 -NCT03597126 -NCT03599804 -NCT03597165 -NCT03599830 -NCT03597204 -NCT03599843 -NCT03597282 -NCT03599895 -NCT03597295 -NCT03599921 -NCT03597321 -NCT03599960 -NCT03597347 -NCT03600038 -NCT03597360 -NCT03600051 -NCT03597373 -NCT03600064 -NCT03597451 -NCT03600090 -NCT03597581 -NCT03600129 -NCT03597620 -NCT03600155 -NCT03597737 -NCT03600207 -NCT03597763 -NCT03600233 -NCT03597802 -NCT03600324 -NCT03597984 -NCT03600350 -NCT03598010 -NCT03600363 -NCT03598088 -NCT03600441 -NCT03598166 -NCT03600454 -NCT03598179 -NCT03600467 -NCT03598218 -NCT03600597 -NCT03598231 -NCT03600623 -NCT03598244 -NCT03600649 -NCT03598257 -NCT03751566 -NCT03598270 -NCT03751592 -NCT03598309 -NCT03751644 -NCT03598348 -NCT03751761 -NCT03598387 -NCT03751800 -NCT03598413 -NCT03751878 -NCT03598491 -NCT03751917 -NCT03598517 -NCT03751930 -NCT03598582 -NCT03751956 -NCT03598595 -NCT03751969 -NCT03598608 -NCT03751995 -NCT03598647 -NCT03752047 -NCT03598712 -NCT03752060 -NCT03598816 -NCT03752086 -NCT03598842 -NCT03752099 -NCT03600701 -NCT03750461 -NCT03600714 -NCT03750513 -NCT03600766 -NCT03750539 -NCT03600805 -NCT03750617 -NCT03600818 -NCT03750656 -NCT03600831 -NCT03750669 -NCT03600883 -NCT03750760 -NCT03600909 -NCT03750773 -NCT03600974 -NCT03750786 -NCT03601039 -NCT03750864 -NCT03601078 -NCT03750916 -NCT03601156 -NCT03750968 -NCT03601208 -NCT03750981 -NCT03601234 -NCT03751124 -NCT03601247 -NCT03751176 -NCT03601260 -NCT03751241 -NCT03601273 -NCT03751293 -NCT03601325 -NCT03751384 -NCT03601455 -NCT03751436 -NCT03601507 -NCT03751449 -NCT03601533 -NCT03751462 -NCT03601598 -NCT03745794 -NCT03745807 -NCT03745846 -NCT03745872 -NCT03745911 -NCT03745937 -NCT03745950 -NCT03745989 -NCT03746041 -NCT03746054 -NCT03746080 -NCT03746184 -NCT03746223 -NCT03746249 -NCT03746288 -NCT03746353 -NCT03746392 -NCT03746431 -NCT03746652 -NCT03746665 -NCT03746717 -NCT03746847 -NCT03747029 -NCT03747042 -NCT03747120 -NCT03747133 -NCT03747185 -NCT03747198 -NCT03747276 -NCT03747289 -NCT03747380 -NCT03747419 -NCT03747510 -NCT03747562 -NCT03747588 -NCT03747614 -NCT03747679 -NCT03747744 -NCT03747757 -NCT03747796 -NCT03747874 -NCT03747965 -NCT03748017 -NCT03748134 -NCT03748186 -NCT03748485 -NCT03748550 -NCT03748563 -NCT03748589 -NCT03748641 -NCT03748680 -NCT03748719 -NCT03748953 -NCT03748966 -NCT03749018 -NCT03749096 -NCT03749109 -NCT03749187 -NCT03749213 -NCT03749252 -NCT03749447 -NCT03749460 -NCT03749499 -NCT03749564 -NCT03749707 -NCT03749720 -NCT03749850 -NCT03749993 -NCT03750032 -NCT03750071 -NCT03750110 -NCT03750149 -NCT03750214 -NCT03750227 -NCT03750240 -NCT03750370 -NCT03750396 -NCT03601611 -NCT03603964 -NCT03601624 -NCT03603951 -NCT03601806 -NCT03604042 -NCT03601819 -NCT03604055 -NCT03601832 -NCT03604094 -NCT03601897 -NCT03604198 -NCT03601923 -NCT03604237 -NCT03601975 -NCT03604250 -NCT03601988 -NCT03604276 -NCT03602027 -NCT03604289 -NCT03602066 -NCT03604302 -NCT03602079 -NCT03604315 -NCT03602131 -NCT03604445 -NCT03602157 -NCT03604497 -NCT03602235 -NCT03604588 -NCT03602313 -NCT03604614 -NCT03602326 -NCT03604627 -NCT03602417 -NCT03604679 -NCT03602495 -NCT03604692 -NCT03602534 -NCT03604757 -NCT03602547 -NCT03604783 -NCT03602586 -NCT03604848 -NCT03602612 -NCT03604939 -NCT03602677 -NCT03604965 -NCT03602729 -NCT03604978 -NCT03602833 -NCT03604991 -NCT03602859 -NCT03605056 -NCT03602885 -NCT03605069 -NCT03602898 -NCT03605173 -NCT03602911 -NCT03605199 -NCT03602976 -NCT03605212 -NCT03603002 -NCT03605329 -NCT03603015 -NCT03605355 -NCT03603067 -NCT03605368 -NCT03603171 -NCT03605459 -NCT03603184 -NCT03744715 -NCT03603197 -NCT03744728 -NCT03603262 -NCT03744793 -NCT03603275 -NCT03744975 -NCT03603314 -NCT03744988 -NCT03603327 -NCT03745014 -NCT03603379 -NCT03745027 -NCT03603405 -NCT03745105 -NCT03603418 -NCT03745157 -NCT03603444 -NCT03745170 -NCT03603483 -NCT03745183 -NCT03603522 -NCT03745196 -NCT03603587 -NCT03745222 -NCT03603652 -NCT03745287 -NCT03603691 -NCT03745326 -NCT03603756 -NCT03745352 -NCT03603795 -NCT03745365 -NCT03603821 -NCT03745430 -NCT03603834 -NCT03745586 -NCT03603886 -NCT03745690 -NCT03603899 -NCT03745716 -NCT03605511 -NCT03743467 -NCT03605550 -NCT03743480 -NCT03605563 -NCT03743649 -NCT03605589 -NCT03743662 -NCT03605706 -NCT03743688 -NCT03605719 -NCT03743740 -NCT03605745 -NCT03743766 -NCT03605979 -NCT03743792 -NCT03606031 -NCT03743844 -NCT03606057 -NCT03744026 -NCT03606070 -NCT03744208 -NCT03606135 -NCT03744234 -NCT03606161 -NCT03744247 -NCT03606174 -NCT03744273 -NCT03606239 -NCT03744299 -NCT03606291 -NCT03744338 -NCT03606330 -NCT03744390 -NCT03606369 -NCT03744403 -NCT03606395 -NCT03744468 -NCT03606408 -NCT03744494 -NCT03606486 -NCT03744585 -NCT03606577 -NCT03744624 -NCT03606590 -NCT03744650 -NCT03606642 -NCT03623581 -NCT03623620 -NCT03623646 -NCT03623672 -NCT03623737 -NCT03623750 -NCT03623789 -NCT03623802 -NCT03623854 -NCT03623867 -NCT03623893 -NCT03623945 -NCT03623958 -NCT03623984 -NCT03624036 -NCT03624075 -NCT03624088 -NCT03624114 -NCT03624179 -NCT03624231 -NCT03624244 -NCT03624270 -NCT03624309 -NCT03624374 -NCT03624478 -NCT03624517 -NCT03624530 -NCT03624543 -NCT03624556 -NCT03624608 -NCT03624660 -NCT03624673 -NCT03624907 -NCT03624920 -NCT03624972 -NCT03625037 -NCT03625089 -NCT03625102 -NCT03625141 -NCT03625167 -NCT03625323 -NCT03625375 -NCT03625388 -NCT03742258 -NCT03742297 -NCT03742323 -NCT03742336 -NCT03742349 -NCT03742362 -NCT03742401 -NCT03742427 -NCT03742453 -NCT03742479 -NCT03742596 -NCT03742635 -NCT03742687 -NCT03742713 -NCT03742726 -NCT03742804 -NCT03742843 -NCT03742869 -NCT03742895 -NCT03742908 -NCT03742986 -NCT03743038 -NCT03743051 -NCT03743064 -NCT03743129 -NCT03743246 -NCT03743298 -NCT03743415 -NCT03743428 -NCT03744676 -NCT03606811 -NCT03609476 -NCT03606837 -NCT03609424 -NCT03606863 -NCT03609489 -NCT03606889 -NCT03609528 -NCT03606928 -NCT03609541 -NCT03606967 -NCT03609554 -NCT03607149 -NCT03609580 -NCT03607162 -NCT03609593 -NCT03607188 -NCT03609671 -NCT03607227 -NCT03609684 -NCT03607292 -NCT03609710 -NCT03607357 -NCT03609892 -NCT03607370 -NCT03609931 -NCT03607396 -NCT03609944 -NCT03607474 -NCT03610022 -NCT03607487 -NCT03610035 -NCT03607539 -NCT03610061 -NCT03607578 -NCT03610100 -NCT03607643 -NCT03610178 -NCT03607656 -NCT03610243 -NCT03607682 -NCT03610256 -NCT03607890 -NCT03610308 -NCT03607929 -NCT03610360 -NCT03607955 -NCT03610386 -NCT03608007 -NCT03610412 -NCT03608020 -NCT03610438 -NCT03608046 -NCT03610490 -NCT03608059 -NCT03610620 -NCT03608215 -NCT03610646 -NCT03608228 -NCT03621995 -NCT03608293 -NCT03622008 -NCT03608410 -NCT03622060 -NCT03608423 -NCT03622164 -NCT03608501 -NCT03622216 -NCT03608527 -NCT03622229 -NCT03608540 -NCT03622333 -NCT03608566 -NCT03622437 -NCT03608618 -NCT03622541 -NCT03608631 -NCT03622554 -NCT03608670 -NCT03622723 -NCT03608748 -NCT03622775 -NCT03608761 -NCT03622788 -NCT03608787 -NCT03622827 -NCT03608865 -NCT03622892 -NCT03608878 -NCT03622931 -NCT03608943 -NCT03623074 -NCT03609047 -NCT03623087 -NCT03609060 -NCT03623191 -NCT03609073 -NCT03623230 -NCT03609099 -NCT03623295 -NCT03609151 -NCT03623334 -NCT03609177 -NCT03623373 -NCT03609216 -NCT03623425 -NCT03609255 -NCT03623464 -NCT03609268 -NCT03623490 -NCT03609359 -NCT03623516 -NCT03610711 -NCT03613532 -NCT03610724 -NCT03613519 -NCT03610776 -NCT03613545 -NCT03610854 -NCT03613584 -NCT03610971 -NCT03613597 -NCT03610997 -NCT03613623 -NCT03611127 -NCT03613727 -NCT03611179 -NCT03613753 -NCT03611205 -NCT03613779 -NCT03611231 -NCT03613974 -NCT03611244 -NCT03614000 -NCT03611296 -NCT03614065 -NCT03611309 -NCT03614169 -NCT03611517 -NCT03614221 -NCT03611556 -NCT03614299 -NCT03611595 -NCT03614364 -NCT03611712 -NCT03614403 -NCT03611738 -NCT03614468 -NCT03611777 -NCT03614481 -NCT03611855 -NCT03614546 -NCT03611868 -NCT03614650 -NCT03611920 -NCT03614663 -NCT03611972 -NCT03614728 -NCT03611985 -NCT03614754 -NCT03612011 -NCT03614767 -NCT03612089 -NCT03614793 -NCT03612154 -NCT03614806 -NCT03612219 -NCT03614858 -NCT03612232 -NCT03614949 -NCT03612323 -NCT03614975 -NCT03612440 -NCT03614988 -NCT03612466 -NCT03615105 -NCT03612531 -NCT03615313 -NCT03612596 -NCT03615326 -NCT03612648 -NCT03615352 -NCT03612674 -NCT03615404 -NCT03612739 -NCT03615430 -NCT03612791 -NCT03615547 -NCT03612804 -NCT03615599 -NCT03612830 -NCT03615664 -NCT03612973 -NCT03615859 -NCT03612986 -NCT03615976 -NCT03613025 -NCT03616223 -NCT03613116 -NCT03616262 -NCT03613129 -NCT03616470 -NCT03613142 -NCT03616574 -NCT03613168 -NCT03616587 -NCT03613181 -NCT03621527 -NCT03613194 -NCT03621553 -NCT03613207 -NCT03621579 -NCT03613220 -NCT03621644 -NCT03613259 -NCT03621696 -NCT03613272 -NCT03621735 -NCT03613363 -NCT03621748 -NCT03613428 -NCT03621813 -NCT03613493 -NCT03621982 -NCT03616600 -NCT03619200 -NCT03616626 -NCT03619161 -NCT03616678 -NCT03619239 -NCT03616691 -NCT03619252 -NCT03616782 -NCT03619304 -NCT03616834 -NCT03619317 -NCT03616847 -NCT03619369 -NCT03616860 -NCT03619408 -NCT03616886 -NCT03619486 -NCT03617003 -NCT03619512 -NCT03617016 -NCT03619538 -NCT03617029 -NCT03619551 -NCT03617133 -NCT03619616 -NCT03617172 -NCT03619642 -NCT03617224 -NCT03619655 -NCT03617328 -NCT03619681 -NCT03617354 -NCT03619733 -NCT03617393 -NCT03619746 -NCT03617432 -NCT03619811 -NCT03617484 -NCT03619824 -NCT03617497 -NCT03619967 -NCT03617588 -NCT03619993 -NCT03617614 -NCT03620019 -NCT03617640 -NCT03620032 -NCT03617666 -NCT03620058 -NCT03617679 -NCT03620071 -NCT03617731 -NCT03620084 -NCT03617835 -NCT03620123 -NCT03617900 -NCT03620149 -NCT03617913 -NCT03620201 -NCT03617965 -NCT03620253 -NCT03618017 -NCT03620292 -NCT03618043 -NCT03620422 -NCT03618082 -NCT03620500 -NCT03618095 -NCT03620526 -NCT03618134 -NCT03620578 -NCT03618238 -NCT03620643 -NCT03618277 -NCT03620877 -NCT03618329 -NCT03620903 -NCT03618355 -NCT03620916 -NCT03618381 -NCT03620942 -NCT03618407 -NCT03620955 -NCT03618433 -NCT03620994 -NCT03618537 -NCT03621020 -NCT03618550 -NCT03621046 -NCT03618576 -NCT03621072 -NCT03618602 -NCT03621085 -NCT03618641 -NCT03621137 -NCT03618654 -NCT03621150 -NCT03618667 -NCT03621215 -NCT03618680 -NCT03621280 -NCT03618706 -NCT03621319 -NCT03618758 -NCT03621332 -NCT03618797 -NCT03621449 -NCT03618953 -NCT03621462 -NCT03619044 -NCT03742245 -NCT03625401 -NCT03741244 -NCT03625505 -NCT03741283 -NCT03625570 -NCT03741322 -NCT03625583 -NCT03741335 -NCT03625622 -NCT03741426 -NCT03625635 -NCT03741673 -NCT03625752 -NCT03741712 -NCT03625817 -NCT03741803 -NCT03625882 -NCT03741972 -NCT03625973 -NCT03742024 -NCT03626090 -NCT03742102 -NCT03626168 -NCT03742128 -NCT03626246 -NCT03742193 -NCT03626298 -NCT03736616 -NCT03736720 -NCT03736746 -NCT03736811 -NCT03736824 -NCT03736837 -NCT03736850 -NCT03736863 -NCT03736889 -NCT03736902 -NCT03736941 -NCT03737123 -NCT03737175 -NCT03737266 -NCT03737344 -NCT03737370 -NCT03737448 -NCT03737500 -NCT03737526 -NCT03737630 -NCT03737643 -NCT03737708 -NCT03737721 -NCT03737734 -NCT03737786 -NCT03737851 -NCT03737890 -NCT03737903 -NCT03737955 -NCT03737981 -NCT03737994 -NCT03738072 -NCT03738111 -NCT03738228 -NCT03738332 -NCT03738358 -NCT03738488 -NCT03738527 -NCT03738540 -NCT03738553 -NCT03738605 -NCT03738618 -NCT03738670 -NCT03738761 -NCT03738787 -NCT03738813 -NCT03738865 -NCT03738969 -NCT03738982 -NCT03739047 -NCT03739138 -NCT03739190 -NCT03739281 -NCT03739333 -NCT03739372 -NCT03739398 -NCT03739411 -NCT03739502 -NCT03739554 -NCT03739567 -NCT03739606 -NCT03739619 -NCT03739684 -NCT03739710 -NCT03739736 -NCT03739775 -NCT03739801 -NCT03739814 -NCT03739840 -NCT03739931 -NCT03739944 -NCT03739957 -NCT03740100 -NCT03740126 -NCT03740165 -NCT03740191 -NCT03740256 -NCT03740334 -NCT03740464 -NCT03740529 -NCT03740633 -NCT03740685 -NCT03740737 -NCT03740750 -NCT03740789 -NCT03740815 -NCT03740854 -NCT03740893 -NCT03740906 -NCT03740945 -NCT03740958 -NCT03740984 -NCT03741088 -NCT03741101 -NCT03741127 -NCT03626311 -NCT03629886 -NCT03626324 -NCT03629873 -NCT03626428 -NCT03629899 -NCT03626519 -NCT03629964 -NCT03626558 -NCT03629977 -NCT03626610 -NCT03630042 -NCT03626675 -NCT03630081 -NCT03626753 -NCT03630120 -NCT03626766 -NCT03630159 -NCT03626779 -NCT03630198 -NCT03626805 -NCT03630289 -NCT03626896 -NCT03630354 -NCT03626922 -NCT03630393 -NCT03626974 -NCT03630419 -NCT03627026 -NCT03630523 -NCT03627234 -NCT03630601 -NCT03627364 -NCT03630640 -NCT03627390 -NCT03630653 -NCT03627442 -NCT03630666 -NCT03627507 -NCT03630731 -NCT03627611 -NCT03630809 -NCT03627702 -NCT03735186 -NCT03627728 -NCT03735199 -NCT03627962 -NCT03735264 -NCT03627988 -NCT03735277 -NCT03628053 -NCT03735290 -NCT03628066 -NCT03735303 -NCT03628079 -NCT03735316 -NCT03628131 -NCT03735355 -NCT03628144 -NCT03735407 -NCT03628209 -NCT03735446 -NCT03628248 -NCT03735498 -NCT03628274 -NCT03735511 -NCT03628313 -NCT03735589 -NCT03628417 -NCT03735628 -NCT03628456 -NCT03735654 -NCT03628508 -NCT03735680 -NCT03628521 -NCT03735693 -NCT03628534 -NCT03735745 -NCT03628612 -NCT03735758 -NCT03628677 -NCT03735849 -NCT03628716 -NCT03735862 -NCT03628885 -NCT03735875 -NCT03629171 -NCT03735953 -NCT03629275 -NCT03735966 -NCT03629288 -NCT03735979 -NCT03629509 -NCT03735992 -NCT03629522 -NCT03736057 -NCT03629587 -NCT03736083 -NCT03629613 -NCT03736109 -NCT03629626 -NCT03736122 -NCT03629717 -NCT03736174 -NCT03629743 -NCT03736265 -NCT03629756 -NCT03736330 -NCT03629808 -NCT03736369 -NCT03629847 -NCT03736382 -NCT03630900 -NCT03633383 -NCT03630913 -NCT03633344 -NCT03630926 -NCT03633500 -NCT03630939 -NCT03633539 -NCT03630991 -NCT03633552 -NCT03631017 -NCT03633565 -NCT03631043 -NCT03633695 -NCT03631108 -NCT03633708 -NCT03631173 -NCT03633721 -NCT03631199 -NCT03633734 -NCT03631290 -NCT03633773 -NCT03631407 -NCT03633799 -NCT03631420 -NCT03633812 -NCT03631446 -NCT03633877 -NCT03631472 -NCT03633955 -NCT03631537 -NCT03634059 -NCT03631615 -NCT03634098 -NCT03631641 -NCT03634150 -NCT03631706 -NCT03634202 -NCT03631758 -NCT03634228 -NCT03631771 -NCT03634241 -NCT03631784 -NCT03634267 -NCT03631836 -NCT03634332 -NCT03631862 -NCT03634371 -NCT03631953 -NCT03634384 -NCT03631992 -NCT03634397 -NCT03632005 -NCT03634501 -NCT03632135 -NCT03634540 -NCT03632187 -NCT03634579 -NCT03632200 -NCT03634683 -NCT03632317 -NCT03634696 -NCT03632343 -NCT03634748 -NCT03632486 -NCT03634800 -NCT03632512 -NCT03634891 -NCT03632525 -NCT03634930 -NCT03632551 -NCT03634982 -NCT03632577 -NCT03635008 -NCT03632603 -NCT03635021 -NCT03632629 -NCT03635034 -NCT03632642 -NCT03635060 -NCT03632655 -NCT03635164 -NCT03632694 -NCT03635294 -NCT03632772 -NCT03635359 -NCT03632798 -NCT03635372 -NCT03632811 -NCT03635385 -NCT03632876 -NCT03635424 -NCT03632928 -NCT03635450 -NCT03632941 -NCT03635489 -NCT03632980 -NCT03635528 -NCT03633110 -NCT03635567 -NCT03633149 -NCT03635580 -NCT03633214 -NCT03635593 -NCT03633227 -NCT03635632 -NCT03633279 -NCT03735082 -NCT03633305 -NCT03735095 -NCT03633331 -NCT03735121 -NCT03635710 -NCT03732846 -NCT03635749 -NCT03732859 -NCT03635866 -NCT03732872 -NCT03635892 -NCT03732937 -NCT03635918 -NCT03732950 -NCT03635983 -NCT03733067 -NCT03636256 -NCT03733106 -NCT03636308 -NCT03733119 -NCT03636373 -NCT03733171 -NCT03636477 -NCT03733197 -NCT03636503 -NCT03733210 -NCT03636568 -NCT03733249 -NCT03636607 -NCT03733327 -NCT03636620 -NCT03733587 -NCT03636659 -NCT03733639 -NCT03636685 -NCT03733691 -NCT03636711 -NCT03733717 -NCT03636737 -NCT03733821 -NCT03636750 -NCT03733886 -NCT03636776 -NCT03733951 -NCT03636841 -NCT03733990 -NCT03636893 -NCT03734016 -NCT03636945 -NCT03734029 -NCT03636958 -NCT03734120 -NCT03637023 -NCT03734146 -NCT03637335 -NCT03734198 -NCT03637348 -NCT03734224 -NCT03637400 -NCT03734237 -NCT03637413 -NCT03734263 -NCT03637491 -NCT03734302 -NCT03637543 -NCT03734354 -NCT03637595 -NCT03734432 -NCT03637673 -NCT03734523 -NCT03637738 -NCT03734562 -NCT03637764 -NCT03734575 -NCT03637777 -NCT03734588 -NCT03637803 -NCT03734601 -NCT03637816 -NCT03734653 -NCT03637868 -NCT03734692 -NCT03637985 -NCT03734757 -NCT03638063 -NCT03734809 -NCT03638141 -NCT03734900 -NCT03638167 -NCT03734913 -NCT03638193 -NCT03734926 -NCT03638206 -NCT03735030 -NCT03638297 -NCT03731910 -NCT03731923 -NCT03731988 -NCT03732001 -NCT03732105 -NCT03732118 -NCT03732261 -NCT03732274 -NCT03732339 -NCT03732352 -NCT03732365 -NCT03732391 -NCT03732469 -NCT03732482 -NCT03732495 -NCT03732508 -NCT03732547 -NCT03732664 -NCT03732677 -NCT03732703 -NCT03732768 -NCT03732781 -NCT03732820 -NCT03638310 -NCT03730363 -NCT03638414 -NCT03730519 -NCT03638453 -NCT03730545 -NCT03638479 -NCT03730662 -NCT03638492 -NCT03730675 -NCT03638531 -NCT03730714 -NCT03638622 -NCT03730727 -NCT03638648 -NCT03730740 -NCT03638752 -NCT03730818 -NCT03638765 -NCT03730922 -NCT03638804 -NCT03730948 -NCT03638830 -NCT03730974 -NCT03638921 -NCT03731026 -NCT03639051 -NCT03731078 -NCT03639103 -NCT03731234 -NCT03639168 -NCT03731247 -NCT03639181 -NCT03731260 -NCT03639194 -NCT03731351 -NCT03639207 -NCT03731390 -NCT03639246 -NCT03731442 -NCT03639272 -NCT03731455 -NCT03639298 -NCT03731585 -NCT03639324 -NCT03731624 -NCT03639376 -NCT03731663 -NCT03639415 -NCT03731754 -NCT03639428 -NCT03731819 -NCT03639454 -NCT03731832 -NCT03639467 -NCT03731845 -NCT03639545 -NCT03731858 -NCT03639571 -NCT03727789 -NCT03727841 -NCT03727867 -NCT03727880 -NCT03727919 -NCT03728036 -NCT03728062 -NCT03728114 -NCT03728140 -NCT03728179 -NCT03728205 -NCT03728218 -NCT03728231 -NCT03728296 -NCT03728335 -NCT03728361 -NCT03728374 -NCT03728387 -NCT03728426 -NCT03728465 -NCT03728491 -NCT03728543 -NCT03728556 -NCT03728595 -NCT03728660 -NCT03728673 -NCT03728712 -NCT03728777 -NCT03728803 -NCT03728881 -NCT03728907 -NCT03728972 -NCT03729115 -NCT03729245 -NCT03729271 -NCT03729297 -NCT03729323 -NCT03729375 -NCT03729479 -NCT03729518 -NCT03729544 -NCT03729596 -NCT03729609 -NCT03729661 -NCT03729687 -NCT03729804 -NCT03729817 -NCT03729882 -NCT03729921 -NCT03729947 -NCT03730012 -NCT03730077 -NCT03730142 -NCT03730181 -NCT03730233 -NCT03730298 -NCT03730311 -NCT03730324 -NCT03730337 -NCT03639610 -NCT03724825 -NCT03639649 -NCT03724851 -NCT03639662 -NCT03724877 -NCT03639688 -NCT03724890 -NCT03639714 -NCT03724903 -NCT03639727 -NCT03724968 -NCT03639805 -NCT03725007 -NCT03639935 -NCT03725059 -NCT03639948 -NCT03725202 -NCT03640078 -NCT03725254 -NCT03640195 -NCT03725306 -NCT03640208 -NCT03725384 -NCT03640260 -NCT03725423 -NCT03640273 -NCT03725436 -NCT03640299 -NCT03725449 -NCT03640325 -NCT03725553 -NCT03640351 -NCT03725605 -NCT03640429 -NCT03725696 -NCT03640533 -NCT03725761 -NCT03640819 -NCT03726281 -NCT03640832 -NCT03726294 -NCT03640871 -NCT03726320 -NCT03640897 -NCT03726333 -NCT03640962 -NCT03726359 -NCT03640975 -NCT03726385 -NCT03641040 -NCT03726398 -NCT03641157 -NCT03726424 -NCT03641222 -NCT03726515 -NCT03641261 -NCT03726619 -NCT03641274 -NCT03726658 -NCT03641287 -NCT03726697 -NCT03641313 -NCT03726736 -NCT03641326 -NCT03726749 -NCT03641339 -NCT03726775 -NCT03641391 -NCT03726801 -NCT03641430 -NCT03726879 -NCT03641443 -NCT03726931 -NCT03641456 -NCT03726944 -NCT03641482 -NCT03726983 -NCT03641547 -NCT03727061 -NCT03641560 -NCT03727126 -NCT03641573 -NCT03727308 -NCT03641586 -NCT03727360 -NCT03641599 -NCT03727373 -NCT03641638 -NCT03727412 -NCT03641742 -NCT03727516 -NCT03641755 -NCT03727633 -NCT03641794 -NCT03727646 -NCT03641872 -NCT03727672 -NCT03641976 -NCT03727685 -NCT03642067 -NCT03727698 -NCT03642093 -NCT03727724 -NCT03642132 -NCT03724331 -NCT03724409 -NCT03724461 -NCT03724591 -NCT03724617 -NCT03724747 -NCT03724773 -NCT03727763 -NCT03642210 -NCT03722537 -NCT03642236 -NCT03722602 -NCT03642418 -NCT03722628 -NCT03642457 -NCT03722732 -NCT03642522 -NCT03722771 -NCT03642561 -NCT03722810 -NCT03642613 -NCT03722875 -NCT03642626 -NCT03722888 -NCT03642652 -NCT03722914 -NCT03642678 -NCT03723044 -NCT03642769 -NCT03723122 -NCT03642782 -NCT03723187 -NCT03642834 -NCT03723330 -NCT03642938 -NCT03723447 -NCT03642964 -NCT03723564 -NCT03642990 -NCT03723681 -NCT03643016 -NCT03723824 -NCT03643042 -NCT03723863 -NCT03643055 -NCT03723902 -NCT03643107 -NCT03723915 -NCT03643133 -NCT03723928 -NCT03643146 -NCT03723941 -NCT03643172 -NCT03723967 -NCT03643237 -NCT03724071 -NCT03643263 -NCT03724084 -NCT03643276 -NCT03724253 -NCT03643471 -NCT03719768 -NCT03719807 -NCT03719846 -NCT03719859 -NCT03719885 -NCT03719898 -NCT03719924 -NCT03719950 -NCT03719989 -NCT03720041 -NCT03720132 -NCT03720158 -NCT03720197 -NCT03720275 -NCT03720340 -NCT03720366 -NCT03720392 -NCT03720431 -NCT03720457 -NCT03720470 -NCT03720496 -NCT03720574 -NCT03720626 -NCT03720639 -NCT03720678 -NCT03720873 -NCT03720886 -NCT03721042 -NCT03721055 -NCT03721068 -NCT03721120 -NCT03721146 -NCT03721159 -NCT03721211 -NCT03721341 -NCT03721484 -NCT03721497 -NCT03721523 -NCT03721601 -NCT03721627 -NCT03721653 -NCT03721679 -NCT03721744 -NCT03721757 -NCT03721770 -NCT03721848 -NCT03721926 -NCT03721952 -NCT03721978 -NCT03721991 -NCT03722030 -NCT03722108 -NCT03722147 -NCT03722186 -NCT03722251 -NCT03722277 -NCT03722290 -NCT03722329 -NCT03722342 -NCT03722355 -NCT03722394 -NCT03722407 -NCT03722420 -NCT03722472 -NCT03722498 -NCT03722511 -NCT03643510 -NCT03718637 -NCT03643549 -NCT03718650 -NCT03643640 -NCT03718728 -NCT03643692 -NCT03718741 -NCT03643744 -NCT03718754 -NCT03643783 -NCT03718767 -NCT03643835 -NCT03718910 -NCT03643861 -NCT03718949 -NCT03643900 -NCT03719105 -NCT03643978 -NCT03719131 -NCT03644056 -NCT03719183 -NCT03644108 -NCT03719196 -NCT03644173 -NCT03719248 -NCT03644186 -NCT03719274 -NCT03644212 -NCT03719300 -NCT03644303 -NCT03719326 -NCT03644329 -NCT03719430 -NCT03644342 -NCT03719534 -NCT03644368 -NCT03719547 -NCT03644459 -NCT03719560 -NCT03644550 -NCT03719573 -NCT03644589 -NCT03719677 -NCT03644602 -NCT03719690 -NCT03644615 -NCT03719716 -NCT03644797 -NCT03715374 -NCT03715413 -NCT03715478 -NCT03715504 -NCT03715517 -NCT03715569 -NCT03715660 -NCT03715673 -NCT03715686 -NCT03715764 -NCT03715777 -NCT03715855 -NCT03715881 -NCT03715933 -NCT03715946 -NCT03715959 -NCT03715985 -NCT03716063 -NCT03716128 -NCT03716180 -NCT03716193 -NCT03716232 -NCT03716245 -NCT03716258 -NCT03716284 -NCT03716518 -NCT03716531 -NCT03716583 -NCT03716596 -NCT03716635 -NCT03716661 -NCT03716739 -NCT03716843 -NCT03716856 -NCT03716986 -NCT03717038 -NCT03717051 -NCT03717142 -NCT03717155 -NCT03717207 -NCT03717298 -NCT03717402 -NCT03717415 -NCT03717428 -NCT03717454 -NCT03717480 -NCT03717506 -NCT03717532 -NCT03717584 -NCT03717610 -NCT03717714 -NCT03717844 -NCT03717857 -NCT03717883 -NCT03717896 -NCT03718000 -NCT03718013 -NCT03718078 -NCT03718091 -NCT03718104 -NCT03718143 -NCT03718221 -NCT03718234 -NCT03718260 -NCT03718325 -NCT03718351 -NCT03718442 -NCT03718455 -NCT03718559 -NCT03718624 -NCT03719742 -NCT03644810 -NCT03714828 -NCT03644823 -NCT03714867 -NCT03644849 -NCT03714906 -NCT03644966 -NCT03714958 -NCT03645005 -NCT03715140 -NCT03645018 -NCT03715205 -NCT03645031 -NCT03715231 -NCT03645057 -NCT03715309 -NCT03645148 -NCT03715322 -NCT03645187 -NCT03709810 -NCT03709849 -NCT03709888 -NCT03709914 -NCT03709953 -NCT03710148 -NCT03710187 -NCT03710226 -NCT03710265 -NCT03710278 -NCT03710356 -NCT03710369 -NCT03710421 -NCT03710499 -NCT03710525 -NCT03710577 -NCT03710603 -NCT03710772 -NCT03710798 -NCT03710876 -NCT03710889 -NCT03710902 -NCT03710915 -NCT03710928 -NCT03710954 -NCT03710993 -NCT03711032 -NCT03711058 -NCT03711110 -NCT03711188 -NCT03711214 -NCT03711240 -NCT03711279 -NCT03711305 -NCT03711422 -NCT03711448 -NCT03711461 -NCT03711578 -NCT03711695 -NCT03711864 -NCT03711877 -NCT03711890 -NCT03711916 -NCT03712020 -NCT03712085 -NCT03712098 -NCT03712202 -NCT03712293 -NCT03712345 -NCT03712358 -NCT03712371 -NCT03712397 -NCT03712423 -NCT03712436 -NCT03712605 -NCT03712683 -NCT03712696 -NCT03712722 -NCT03712800 -NCT03712813 -NCT03712865 -NCT03712878 -NCT03712891 -NCT03712904 -NCT03712930 -NCT03712943 -NCT03712956 -NCT03712969 -NCT03712982 -NCT03712995 -NCT03713021 -NCT03713047 -NCT03713060 -NCT03713099 -NCT03713203 -NCT03713229 -NCT03713255 -NCT03713294 -NCT03713320 -NCT03713372 -NCT03713411 -NCT03713528 -NCT03713580 -NCT03713593 -NCT03713671 -NCT03713697 -NCT03713710 -NCT03713749 -NCT03713879 -NCT03713905 -NCT03714165 -NCT03714243 -NCT03714282 -NCT03714334 -NCT03714347 -NCT03714412 -NCT03714490 -NCT03714529 -NCT03714542 -NCT03714555 -NCT03714581 -NCT03714607 -NCT03714659 -NCT03714763 -NCT03645200 -NCT03654456 -NCT03645239 -NCT03654469 -NCT03645252 -NCT03654521 -NCT03645291 -NCT03654534 -NCT03645304 -NCT03654547 -NCT03645317 -NCT03654612 -NCT03645395 -NCT03654638 -NCT03645434 -NCT03654664 -NCT03645447 -NCT03654703 -NCT03645785 -NCT03654716 -NCT03645876 -NCT03654729 -NCT03645889 -NCT03654768 -NCT03645928 -NCT03654794 -NCT03645980 -NCT03654833 -NCT03645993 -NCT03654872 -NCT03646019 -NCT03708679 -NCT03646071 -NCT03708692 -NCT03646110 -NCT03708744 -NCT03646123 -NCT03708783 -NCT03646162 -NCT03708796 -NCT03646188 -NCT03708822 -NCT03646461 -NCT03708874 -NCT03646617 -NCT03708900 -NCT03646669 -NCT03708913 -NCT03646747 -NCT03708965 -NCT03646955 -NCT03708978 -NCT03646968 -NCT03709030 -NCT03646994 -NCT03709069 -NCT03647007 -NCT03709082 -NCT03647046 -NCT03709121 -NCT03647072 -NCT03709134 -NCT03647111 -NCT03709147 -NCT03647163 -NCT03709238 -NCT03647241 -NCT03709290 -NCT03647280 -NCT03709316 -NCT03647293 -NCT03709329 -NCT03647358 -NCT03709381 -NCT03647397 -NCT03709446 -NCT03647423 -NCT03709485 -NCT03647462 -NCT03709550 -NCT03647488 -NCT03709576 -NCT03647514 -NCT03709680 -NCT03647540 -NCT03709706 -NCT03647592 -NCT03709719 -NCT03647631 -NCT03709758 -NCT03647657 -NCT03653104 -NCT03653117 -NCT03653143 -NCT03653156 -NCT03653221 -NCT03653299 -NCT03653338 -NCT03653364 -NCT03653507 -NCT03653546 -NCT03653585 -NCT03653741 -NCT03653780 -NCT03653819 -NCT03653988 -NCT03654027 -NCT03654053 -NCT03654105 -NCT03654131 -NCT03654144 -NCT03654300 -NCT03654326 -NCT03654404 -NCT03647800 -NCT03650491 -NCT03647839 -NCT03650439 -NCT03647904 -NCT03650543 -NCT03647917 -NCT03650595 -NCT03647956 -NCT03650673 -NCT03647969 -NCT03650699 -NCT03647995 -NCT03650712 -NCT03648034 -NCT03650738 -NCT03648073 -NCT03650764 -NCT03648190 -NCT03650803 -NCT03648359 -NCT03650868 -NCT03648372 -NCT03650894 -NCT03648489 -NCT03650920 -NCT03648502 -NCT03650933 -NCT03648528 -NCT03651037 -NCT03648632 -NCT03651128 -NCT03648697 -NCT03651154 -NCT03648827 -NCT03651167 -NCT03648879 -NCT03651206 -NCT03648944 -NCT03651219 -NCT03648983 -NCT03651271 -NCT03648996 -NCT03651349 -NCT03649035 -NCT03651362 -NCT03649048 -NCT03651375 -NCT03649256 -NCT03651388 -NCT03649295 -NCT03651492 -NCT03649321 -NCT03651570 -NCT03649334 -NCT03651739 -NCT03649399 -NCT03651765 -NCT03649464 -NCT03651921 -NCT03649516 -NCT03651947 -NCT03649529 -NCT03651973 -NCT03649542 -NCT03651999 -NCT03649737 -NCT03652064 -NCT03649841 -NCT03652077 -NCT03649880 -NCT03652142 -NCT03649906 -NCT03652233 -NCT03649919 -NCT03652246 -NCT03649932 -NCT03652285 -NCT03649945 -NCT03652298 -NCT03649958 -NCT03652415 -NCT03649971 -NCT03652428 -NCT03649984 -NCT03652441 -NCT03650023 -NCT03652467 -NCT03650062 -NCT03652480 -NCT03650075 -NCT03652493 -NCT03650140 -NCT03652545 -NCT03650153 -NCT03652571 -NCT03650205 -NCT03652688 -NCT03650257 -NCT03652714 -NCT03650283 -NCT03652857 -NCT03650296 -NCT03652896 -NCT03650322 -NCT03652935 -NCT03650348 -NCT03653039 -NCT03650361 -NCT03653052 -NCT03650387 -NCT03708536 -NCT03654911 -NCT03706820 -NCT03654950 -NCT03706833 -NCT03655002 -NCT03707028 -NCT03655093 -NCT03707093 -NCT03655145 -NCT03707184 -NCT03655171 -NCT03707353 -NCT03655197 -NCT03707431 -NCT03655236 -NCT03707444 -NCT03655340 -NCT03707457 -NCT03655353 -NCT03707496 -NCT03655366 -NCT03707509 -NCT03655392 -NCT03707548 -NCT03655444 -NCT03707600 -NCT03655483 -NCT03707639 -NCT03655496 -NCT03707808 -NCT03655522 -NCT03707847 -NCT03655587 -NCT03707925 -NCT03655600 -NCT03707938 -NCT03655613 -NCT03708003 -NCT03655665 -NCT03708042 -NCT03655756 -NCT03708055 -NCT03655821 -NCT03708120 -NCT03655834 -NCT03708211 -NCT03655873 -NCT03708224 -NCT03655886 -NCT03708237 -NCT03655938 -NCT03708263 -NCT03655977 -NCT03708302 -NCT03656003 -NCT03708328 -NCT03656055 -NCT03708341 -NCT03656094 -NCT03708354 -NCT03656133 -NCT03708393 -NCT03656159 -NCT03708471 -NCT03656172 -NCT03708497 -NCT03656185 -NCT03704311 -NCT03704467 -NCT03704480 -NCT03704584 -NCT03704597 -NCT03704610 -NCT03704649 -NCT03704662 -NCT03704688 -NCT03704714 -NCT03704870 -NCT03704922 -NCT03704987 -NCT03705052 -NCT03705078 -NCT03705117 -NCT03705130 -NCT03705156 -NCT03705325 -NCT03705351 -NCT03705377 -NCT03705390 -NCT03705403 -NCT03705416 -NCT03705429 -NCT03705442 -NCT03705507 -NCT03705533 -NCT03705650 -NCT03705754 -NCT03705832 -NCT03705858 -NCT03705897 -NCT03706027 -NCT03706079 -NCT03706131 -NCT03706157 -NCT03706183 -NCT03706274 -NCT03706287 -NCT03706326 -NCT03706365 -NCT03706534 -NCT03706547 -NCT03706586 -NCT03706599 -NCT03706690 -NCT03706703 -NCT03706742 -NCT03706768 -NCT03656211 -NCT03659071 -NCT03656237 -NCT03659032 -NCT03656380 -NCT03659136 -NCT03656393 -NCT03659227 -NCT03656536 -NCT03659292 -NCT03656549 -NCT03659331 -NCT03656575 -NCT03659448 -NCT03656627 -NCT03659487 -NCT03656705 -NCT03659578 -NCT03656718 -NCT03659617 -NCT03656731 -NCT03659695 -NCT03656835 -NCT03659864 -NCT03657017 -NCT03659968 -NCT03657043 -NCT03659981 -NCT03657056 -NCT03660085 -NCT03657069 -NCT03660098 -NCT03657108 -NCT03702309 -NCT03657303 -NCT03702478 -NCT03657316 -NCT03702491 -NCT03657329 -NCT03702556 -NCT03657381 -NCT03702582 -NCT03657420 -NCT03702647 -NCT03657576 -NCT03702712 -NCT03657628 -NCT03702725 -NCT03657641 -NCT03702829 -NCT03657667 -NCT03702985 -NCT03657732 -NCT03702998 -NCT03657745 -NCT03703011 -NCT03657849 -NCT03703024 -NCT03657888 -NCT03703050 -NCT03657914 -NCT03703063 -NCT03657966 -NCT03703089 -NCT03658031 -NCT03703115 -NCT03658044 -NCT03703167 -NCT03658057 -NCT03703271 -NCT03658070 -NCT03703297 -NCT03658096 -NCT03703310 -NCT03658109 -NCT03703323 -NCT03658161 -NCT03703375 -NCT03658213 -NCT03703427 -NCT03658265 -NCT03703466 -NCT03658304 -NCT03703479 -NCT03658343 -NCT03703492 -NCT03658356 -NCT03703557 -NCT03658369 -NCT03703570 -NCT03658434 -NCT03703596 -NCT03658447 -NCT03703830 -NCT03658486 -NCT03703882 -NCT03658525 -NCT03703986 -NCT03658668 -NCT03703999 -NCT03658759 -NCT03704051 -NCT03658772 -NCT03704077 -NCT03658785 -NCT03704233 -NCT03658863 -NCT03704246 -NCT03658889 -NCT03704259 -NCT03658915 -NCT03704298 -NCT03660111 -NCT03700359 -NCT03660137 -NCT03700411 -NCT03660163 -NCT03700437 -NCT03660176 -NCT03700450 -NCT03660189 -NCT03700476 -NCT03660228 -NCT03700502 -NCT03660293 -NCT03700541 -NCT03660319 -NCT03700710 -NCT03660449 -NCT03700814 -NCT03660540 -NCT03700905 -NCT03660592 -NCT03700983 -NCT03660605 -NCT03701022 -NCT03660631 -NCT03701061 -NCT03660670 -NCT03701217 -NCT03660761 -NCT03701282 -NCT03660826 -NCT03701295 -NCT03660852 -NCT03701308 -NCT03660917 -NCT03701321 -NCT03660930 -NCT03701334 -NCT03661021 -NCT03701373 -NCT03661047 -NCT03701451 -NCT03661086 -NCT03701477 -NCT03661242 -NCT03701490 -NCT03661307 -NCT03701529 -NCT03661320 -NCT03701581 -NCT03661398 -NCT03701659 -NCT03661424 -NCT03701737 -NCT03661437 -NCT03701776 -NCT03661515 -NCT03702010 -NCT03661541 -NCT03702023 -NCT03661554 -NCT03702101 -NCT03661567 -NCT03702179 -NCT03661632 -NCT03702192 -NCT03661671 -NCT03702218 -NCT03661684 -NCT03702231 -NCT03661697 -NCT03702244 -NCT03661723 -NCT03702296 -NCT03661762 -NCT03668028 -NCT03668067 -NCT03668119 -NCT03668223 -NCT03668275 -NCT03668340 -NCT03668366 -NCT03668392 -NCT03668431 -NCT03668457 -NCT03668496 -NCT03668522 -NCT03668574 -NCT03668639 -NCT03668652 -NCT03668730 -NCT03668769 -NCT03668808 -NCT03668821 -NCT03668847 -NCT03668977 -NCT03669146 -NCT03669172 -NCT03669237 -NCT03669263 -NCT03669432 -NCT03669445 -NCT03669497 -NCT03669523 -NCT03669549 -NCT03669562 -NCT03669601 -NCT03669614 -NCT03669666 -NCT03669705 -NCT03669718 -NCT03669770 -NCT03669783 -NCT03700281 -NCT03700294 -NCT03700333 -NCT03661801 -NCT03665194 -NCT03661892 -NCT03665155 -NCT03662035 -NCT03665285 -NCT03662048 -NCT03665441 -NCT03662074 -NCT03665454 -NCT03662087 -NCT03665480 -NCT03662269 -NCT03665493 -NCT03662412 -NCT03665519 -NCT03662438 -NCT03665545 -NCT03662516 -NCT03665584 -NCT03662555 -NCT03665597 -NCT03662659 -NCT03665714 -NCT03662698 -NCT03665779 -NCT03662789 -NCT03665844 -NCT03662802 -NCT03665922 -NCT03662815 -NCT03665974 -NCT03662841 -NCT03666000 -NCT03662893 -NCT03666052 -NCT03662906 -NCT03666104 -NCT03662958 -NCT03666117 -NCT03663062 -NCT03666143 -NCT03663088 -NCT03666221 -NCT03663153 -NCT03666260 -NCT03663166 -NCT03666273 -NCT03663205 -NCT03666325 -NCT03663218 -NCT03666351 -NCT03663712 -NCT03666429 -NCT03663725 -NCT03666442 -NCT03663764 -NCT03666520 -NCT03663842 -NCT03666559 -NCT03663855 -NCT03666572 -NCT03663959 -NCT03666624 -NCT03664024 -NCT03666676 -NCT03664063 -NCT03666728 -NCT03664115 -NCT03666819 -NCT03664167 -NCT03666832 -NCT03664193 -NCT03666936 -NCT03664206 -NCT03666962 -NCT03664297 -NCT03666988 -NCT03664531 -NCT03667027 -NCT03664609 -NCT03667092 -NCT03664635 -NCT03667170 -NCT03664661 -NCT03667222 -NCT03664674 -NCT03667469 -NCT03664687 -NCT03667482 -NCT03664726 -NCT03667534 -NCT03664739 -NCT03667560 -NCT03664752 -NCT03667664 -NCT03664830 -NCT03667677 -NCT03664856 -NCT03667716 -NCT03664869 -NCT03667742 -NCT03664895 -NCT03667820 -NCT03664934 -NCT03667833 -NCT03665077 -NCT03667911 -NCT03665129 -NCT03667950 -NCT03665142 -NCT03700229 -NCT03669900 -NCT03672422 -NCT03669926 -NCT03672396 -NCT03669939 -NCT03697512 -NCT03669952 -NCT03697551 -NCT03669965 -NCT03697564 -NCT03669978 -NCT03697629 -NCT03670030 -NCT03697655 -NCT03670056 -NCT03697707 -NCT03670069 -NCT03697824 -NCT03670134 -NCT03697850 -NCT03670160 -NCT03697863 -NCT03670173 -NCT03697876 -NCT03670199 -NCT03697889 -NCT03670251 -NCT03697993 -NCT03670355 -NCT03698019 -NCT03670394 -NCT03698071 -NCT03670459 -NCT03698162 -NCT03670563 -NCT03698227 -NCT03670576 -NCT03698253 -NCT03670693 -NCT03698266 -NCT03670706 -NCT03698370 -NCT03670719 -NCT03698383 -NCT03670862 -NCT03698461 -NCT03670888 -NCT03698487 -NCT03670901 -NCT03698539 -NCT03670927 -NCT03698552 -NCT03670966 -NCT03698630 -NCT03671018 -NCT03698721 -NCT03671044 -NCT03698825 -NCT03671083 -NCT03698903 -NCT03671226 -NCT03698994 -NCT03671252 -NCT03699033 -NCT03671265 -NCT03699098 -NCT03671304 -NCT03699124 -NCT03671330 -NCT03699176 -NCT03671343 -NCT03699202 -NCT03671395 -NCT03699280 -NCT03671460 -NCT03699293 -NCT03671538 -NCT03699319 -NCT03671564 -NCT03699332 -NCT03671590 -NCT03699371 -NCT03671642 -NCT03699384 -NCT03671720 -NCT03699449 -NCT03671798 -NCT03699475 -NCT03671811 -NCT03699514 -NCT03671850 -NCT03699631 -NCT03671915 -NCT03699657 -NCT03671928 -NCT03699722 -NCT03672032 -NCT03699735 -NCT03672136 -NCT03699748 -NCT03672149 -NCT03699761 -NCT03672240 -NCT03699800 -NCT03672253 -NCT03699956 -NCT03672266 -NCT03699969 -NCT03672305 -NCT03699995 -NCT03672318 -NCT03700099 -NCT03672500 -NCT03696355 -NCT03672539 -NCT03696394 -NCT03672617 -NCT03696472 -NCT03672643 -NCT03696524 -NCT03672695 -NCT03696537 -NCT03672721 -NCT03696602 -NCT03672773 -NCT03696680 -NCT03672799 -NCT03696784 -NCT03672851 -NCT03696940 -NCT03672877 -NCT03696979 -NCT03672955 -NCT03697096 -NCT03672968 -NCT03697109 -NCT03672981 -NCT03697148 -NCT03672994 -NCT03697161 -NCT03673020 -NCT03697200 -NCT03673072 -NCT03697226 -NCT03673085 -NCT03697239 -NCT03673124 -NCT03697304 -NCT03673137 -NCT03697343 -NCT03673202 -NCT03697395 -NCT03673319 -NCT03697408 -NCT03673332 -NCT03692403 -NCT03692429 -NCT03692520 -NCT03692533 -NCT03692624 -NCT03692637 -NCT03692663 -NCT03692689 -NCT03692767 -NCT03692793 -NCT03692832 -NCT03692845 -NCT03692858 -NCT03693014 -NCT03693170 -NCT03693248 -NCT03693261 -NCT03693300 -NCT03693326 -NCT03693339 -NCT03693365 -NCT03693469 -NCT03693547 -NCT03693573 -NCT03693586 -NCT03693612 -NCT03693677 -NCT03693703 -NCT03693742 -NCT03693807 -NCT03693820 -NCT03693833 -NCT03693846 -NCT03693898 -NCT03693950 -NCT03694002 -NCT03694015 -NCT03694054 -NCT03694080 -NCT03694158 -NCT03694197 -NCT03694249 -NCT03694262 -NCT03694431 -NCT03694522 -NCT03694535 -NCT03694626 -NCT03694756 -NCT03694834 -NCT03694938 -NCT03694977 -NCT03694990 -NCT03695029 -NCT03695042 -NCT03695055 -NCT03695120 -NCT03695250 -NCT03695276 -NCT03695315 -NCT03695380 -NCT03695406 -NCT03695471 -NCT03695510 -NCT03695705 -NCT03695731 -NCT03695744 -NCT03695848 -NCT03695965 -NCT03695978 -NCT03696004 -NCT03696030 -NCT03696056 -NCT03696108 -NCT03696121 -NCT03696186 -NCT03696212 -NCT03696277 -NCT03673410 -NCT03679091 -NCT03679169 -NCT03679182 -NCT03679208 -NCT03679260 -NCT03679286 -NCT03679312 -NCT03679338 -NCT03679377 -NCT03679455 -NCT03679507 -NCT03679520 -NCT03679559 -NCT03679572 -NCT03679585 -NCT03679624 -NCT03679650 -NCT03679663 -NCT03679754 -NCT03679767 -NCT03679819 -NCT03679910 -NCT03679975 -NCT03680092 -NCT03680144 -NCT03680222 -NCT03680261 -NCT03680365 -NCT03680430 -NCT03680495 -NCT03680508 -NCT03680521 -NCT03680560 -NCT03680586 -NCT03680612 -NCT03680651 -NCT03680872 -NCT03680989 -NCT03681015 -NCT03681028 -NCT03681197 -NCT03681392 -NCT03681405 -NCT03681418 -NCT03681470 -NCT03681483 -NCT03681535 -NCT03681548 -NCT03681561 -NCT03681665 -NCT03681873 -NCT03681951 -NCT03681964 -NCT03682029 -NCT03682055 -NCT03682068 -NCT03682094 -NCT03682146 -NCT03682211 -NCT03682224 -NCT03682276 -NCT03682289 -NCT03682367 -NCT03682380 -NCT03682458 -NCT03682536 -NCT03682549 -NCT03682614 -NCT03682666 -NCT03682744 -NCT03682796 -NCT03682939 -NCT03683043 -NCT03683069 -NCT03683121 -NCT03683134 -NCT03683147 -NCT03683212 -NCT03683277 -NCT03683329 -NCT03683342 -NCT03683420 -NCT03683433 -NCT03683550 -NCT03683615 -NCT03683680 -NCT03683849 -NCT03683875 -NCT03683940 -NCT03684005 -NCT03684083 -NCT03684096 -NCT03684109 -NCT03684135 -NCT03684148 -NCT03684161 -NCT03684265 -NCT03684278 -NCT03684330 -NCT03684408 -NCT03684486 -NCT03684499 -NCT03684512 -NCT03684629 -NCT03684694 -NCT03684707 -NCT03684772 -NCT03684785 -NCT03691311 -NCT03691337 -NCT03691376 -NCT03691441 -NCT03691454 -NCT03691493 -NCT03691714 -NCT03691857 -NCT03691870 -NCT03691883 -NCT03691896 -NCT03691974 -NCT03692013 -NCT03692039 -NCT03692065 -NCT03692221 -NCT03692338 -NCT03673501 -NCT03676257 -NCT03673618 -NCT03676192 -NCT03673657 -NCT03676309 -NCT03673735 -NCT03676426 -NCT03673787 -NCT03676478 -NCT03673813 -NCT03676504 -NCT03673826 -NCT03676517 -NCT03673865 -NCT03676530 -NCT03673904 -NCT03676556 -NCT03673917 -NCT03676686 -NCT03673943 -NCT03676712 -NCT03674047 -NCT03676777 -NCT03674073 -NCT03676790 -NCT03674086 -NCT03676868 -NCT03674112 -NCT03676920 -NCT03674138 -NCT03676933 -NCT03674164 -NCT03676946 -NCT03674242 -NCT03676959 -NCT03674281 -NCT03676972 -NCT03674294 -NCT03676985 -NCT03674346 -NCT03677024 -NCT03674411 -NCT03677050 -NCT03674424 -NCT03677128 -NCT03674450 -NCT03677141 -NCT03674463 -NCT03677154 -NCT03674502 -NCT03677206 -NCT03674515 -NCT03677245 -NCT03674567 -NCT03677349 -NCT03674593 -NCT03677362 -NCT03674632 -NCT03677401 -NCT03674710 -NCT03677427 -NCT03674814 -NCT03677531 -NCT03674827 -NCT03677544 -NCT03674996 -NCT03677596 -NCT03675035 -NCT03677648 -NCT03675152 -NCT03677661 -NCT03675230 -NCT03677713 -NCT03675256 -NCT03677739 -NCT03675269 -NCT03677960 -NCT03675282 -NCT03678025 -NCT03675425 -NCT03678090 -NCT03675451 -NCT03678233 -NCT03675529 -NCT03678259 -NCT03675581 -NCT03678272 -NCT03675646 -NCT03678350 -NCT03675737 -NCT03678389 -NCT03675841 -NCT03678428 -NCT03675893 -NCT03678467 -NCT03675958 -NCT03678493 -NCT03675984 -NCT03678519 -NCT03676023 -NCT03678649 -NCT03676036 -NCT03678883 -NCT03676049 -NCT03678922 -NCT03676101 -NCT03678935 -NCT03676114 -NCT03678948 -NCT03676153 -NCT03691272 -NCT03684811 -NCT03687645 -NCT03684837 -NCT03687606 -NCT03684850 -NCT03687710 -NCT03684863 -NCT03687762 -NCT03684889 -NCT03687814 -NCT03684928 -NCT03687853 -NCT03684967 -NCT03687866 -NCT03684980 -NCT03687944 -NCT03685175 -NCT03687957 -NCT03685331 -NCT03688152 -NCT03685344 -NCT03688178 -NCT03685370 -NCT03688230 -NCT03685409 -NCT03688269 -NCT03685448 -NCT03688295 -NCT03685461 -NCT03688321 -NCT03685526 -NCT03688386 -NCT03685539 -NCT03688451 -NCT03685591 -NCT03688646 -NCT03685617 -NCT03688685 -NCT03685695 -NCT03688958 -NCT03685721 -NCT03688971 -NCT03685786 -NCT03688984 -NCT03685890 -NCT03689049 -NCT03685929 -NCT03689192 -NCT03686007 -NCT03689335 -NCT03686072 -NCT03689361 -NCT03686098 -NCT03689439 -NCT03686124 -NCT03689478 -NCT03686202 -NCT03689517 -NCT03686215 -NCT03689582 -NCT03686254 -NCT03689634 -NCT03686332 -NCT03689699 -NCT03686345 -NCT03689855 -NCT03686371 -NCT03689972 -NCT03686384 -NCT03690011 -NCT03686397 -NCT03690024 -NCT03686436 -NCT03690115 -NCT03686475 -NCT03690141 -NCT03686488 -NCT03690154 -NCT03686514 -NCT03690245 -NCT03686527 -NCT03690310 -NCT03686592 -NCT03690323 -NCT03686618 -NCT03690349 -NCT03686644 -NCT03690388 -NCT03686683 -NCT03690414 -NCT03686709 -NCT03690544 -NCT03686787 -NCT03690739 -NCT03686852 -NCT03690869 -NCT03686891 -NCT03690921 -NCT03687034 -NCT03690986 -NCT03687125 -NCT03691051 -NCT03687190 -NCT03691077 -NCT03687216 -NCT03691090 -NCT03687229 -NCT03691181 -NCT03687424 -NCT03691207 -NCT03687502 -NCT03757299 -NCT03752164 -NCT03754751 -NCT03752177 -NCT03754725 -NCT03752190 -NCT03754764 -NCT03752203 -NCT03754777 -NCT03752216 -NCT03754816 -NCT03752268 -NCT03754933 -NCT03752333 -NCT03754959 -NCT03752398 -NCT03754985 -NCT03752541 -NCT03754998 -NCT03752567 -NCT03755037 -NCT03752606 -NCT03755102 -NCT03752619 -NCT03755115 -NCT03752645 -NCT03755141 -NCT03752697 -NCT03755154 -NCT03752710 -NCT03755193 -NCT03752723 -NCT03755219 -NCT03752736 -NCT03755388 -NCT03752827 -NCT03755414 -NCT03752983 -NCT03755440 -NCT03753035 -NCT03755505 -NCT03753100 -NCT03755544 -NCT03753178 -NCT03755726 -NCT03753243 -NCT03755739 -NCT03753334 -NCT03755752 -NCT03753373 -NCT03755765 -NCT03753399 -NCT03755791 -NCT03753438 -NCT03755804 -NCT03753542 -NCT03755869 -NCT03753633 -NCT03755895 -NCT03753659 -NCT03755921 -NCT03753672 -NCT03755947 -NCT03753685 -NCT03755973 -NCT03753724 -NCT03756064 -NCT03753776 -NCT03756090 -NCT03753789 -NCT03756116 -NCT03753802 -NCT03756155 -NCT03753841 -NCT03756168 -NCT03753854 -NCT03756207 -NCT03753893 -NCT03756298 -NCT03753919 -NCT03756454 -NCT03753932 -NCT03756467 -NCT03754075 -NCT03756480 -NCT03754140 -NCT03756493 -NCT03754179 -NCT03756519 -NCT03754192 -NCT03756818 -NCT03754244 -NCT03756896 -NCT03754335 -NCT03756909 -NCT03754361 -NCT03757000 -NCT03754387 -NCT03757078 -NCT03754465 -NCT03757091 -NCT03754491 -NCT03757143 -NCT03754517 -NCT03757169 -NCT03754530 -NCT03757221 -NCT03754569 -NCT03757273 -NCT03754608 -NCT03757286 -NCT03754621 -NCT03763604 -NCT03757364 -NCT03760627 -NCT03757442 -NCT03760614 -NCT03757455 -NCT03760653 -NCT03757572 -NCT03760666 -NCT03757611 -NCT03760822 -NCT03757637 -NCT03760835 -NCT03757663 -NCT03760861 -NCT03757689 -NCT03760887 -NCT03757754 -NCT03761017 -NCT03757858 -NCT03761056 -NCT03757936 -NCT03761069 -NCT03757949 -NCT03761095 -NCT03758001 -NCT03761108 -NCT03758014 -NCT03761121 -NCT03758183 -NCT03761160 -NCT03758209 -NCT03761225 -NCT03758222 -NCT03761238 -NCT03758287 -NCT03761498 -NCT03758326 -NCT03761667 -NCT03758417 -NCT03761706 -NCT03758508 -NCT03761914 -NCT03758534 -NCT03762018 -NCT03758664 -NCT03762044 -NCT03758677 -NCT03762122 -NCT03758729 -NCT03762161 -NCT03758781 -NCT03762174 -NCT03758807 -NCT03762291 -NCT03758820 -NCT03762343 -NCT03758989 -NCT03762382 -NCT03759093 -NCT03762447 -NCT03759184 -NCT03762473 -NCT03759301 -NCT03762525 -NCT03759366 -NCT03762564 -NCT03759431 -NCT03762590 -NCT03759470 -NCT03762616 -NCT03759483 -NCT03762694 -NCT03759496 -NCT03762759 -NCT03759587 -NCT03762785 -NCT03759600 -NCT03762902 -NCT03759613 -NCT03762967 -NCT03759678 -NCT03762980 -NCT03759691 -NCT03763019 -NCT03759730 -NCT03763032 -NCT03759756 -NCT03763123 -NCT03759821 -NCT03763162 -NCT03759951 -NCT03763175 -NCT03760081 -NCT03763214 -NCT03760094 -NCT03763253 -NCT03760120 -NCT03763266 -NCT03760380 -NCT03763383 -NCT03760406 -NCT03763396 -NCT03760445 -NCT03763422 -NCT03760471 -NCT03763513 -NCT03760523 -NCT03763552 -NCT03760575 -NCT03763565 -NCT03760588 -NCT03769753 -NCT03763617 -NCT03766776 -NCT03763734 -NCT03766763 -NCT03763799 -NCT03766854 -NCT03763825 -NCT03766984 -NCT03763838 -NCT03767075 -NCT03763851 -NCT03767179 -NCT03763955 -NCT03767244 -NCT03764020 -NCT03767257 -NCT03764072 -NCT03767335 -NCT03764085 -NCT03767348 -NCT03764137 -NCT03767439 -NCT03764163 -NCT03767517 -NCT03764293 -NCT03767582 -NCT03764306 -NCT03767660 -NCT03764540 -NCT03767725 -NCT03764553 -NCT03767751 -NCT03764735 -NCT03767790 -NCT03764761 -NCT03767881 -NCT03764865 -NCT03767959 -NCT03764943 -NCT03767998 -NCT03764995 -NCT03768063 -NCT03765021 -NCT03768115 -NCT03765073 -NCT03768167 -NCT03765099 -NCT03768310 -NCT03765177 -NCT03768336 -NCT03765190 -NCT03768349 -NCT03765229 -NCT03768375 -NCT03765268 -NCT03768414 -NCT03765346 -NCT03768479 -NCT03765424 -NCT03768492 -NCT03765541 -NCT03768505 -NCT03765593 -NCT03768531 -NCT03765632 -NCT03768570 -NCT03765684 -NCT03768661 -NCT03765762 -NCT03768765 -NCT03765775 -NCT03768830 -NCT03765788 -NCT03768856 -NCT03765801 -NCT03768882 -NCT03765892 -NCT03768960 -NCT03765918 -NCT03769090 -NCT03765983 -NCT03769103 -NCT03765996 -NCT03769116 -NCT03766009 -NCT03769129 -NCT03766061 -NCT03769155 -NCT03766074 -NCT03769181 -NCT03766100 -NCT03769246 -NCT03766126 -NCT03769285 -NCT03766178 -NCT03769311 -NCT03766243 -NCT03769376 -NCT03766295 -NCT03769415 -NCT03766373 -NCT03769428 -NCT03766386 -NCT03769467 -NCT03766412 -NCT03769506 -NCT03766555 -NCT03769532 -NCT03766607 -NCT03769688 -NCT03766659 -NCT03775811 -NCT03769766 -NCT03773107 -NCT03769805 -NCT03773055 -NCT03769961 -NCT03773120 -NCT03769987 -NCT03773133 -NCT03770000 -NCT03773224 -NCT03770026 -NCT03773263 -NCT03770234 -NCT03773302 -NCT03770260 -NCT03773367 -NCT03770273 -NCT03773380 -NCT03770299 -NCT03773510 -NCT03770416 -NCT03773666 -NCT03770429 -NCT03773705 -NCT03770442 -NCT03773718 -NCT03770455 -NCT03773744 -NCT03770494 -NCT03773809 -NCT03770546 -NCT03773991 -NCT03770559 -NCT03774017 -NCT03770585 -NCT03774056 -NCT03770598 -NCT03774121 -NCT03770611 -NCT03774199 -NCT03770689 -NCT03774277 -NCT03770715 -NCT03774355 -NCT03770754 -NCT03774446 -NCT03770884 -NCT03774472 -NCT03770897 -NCT03774563 -NCT03770962 -NCT03774589 -NCT03770988 -NCT03774654 -NCT03771027 -NCT03774680 -NCT03771157 -NCT03774732 -NCT03771222 -NCT03774784 -NCT03771287 -NCT03774810 -NCT03771378 -NCT03774862 -NCT03771404 -NCT03774888 -NCT03771456 -NCT03774901 -NCT03771469 -NCT03774966 -NCT03771651 -NCT03774979 -NCT03771768 -NCT03774992 -NCT03771794 -NCT03775005 -NCT03771820 -NCT03775031 -NCT03771833 -NCT03775096 -NCT03771846 -NCT03775148 -NCT03771989 -NCT03775161 -NCT03772028 -NCT03775213 -NCT03772132 -NCT03775239 -NCT03772158 -NCT03775265 -NCT03772288 -NCT03775291 -NCT03772353 -NCT03775369 -NCT03772561 -NCT03775395 -NCT03772587 -NCT03775473 -NCT03772626 -NCT03775486 -NCT03772756 -NCT03775525 -NCT03772834 -NCT03775616 -NCT03772899 -NCT03775629 -NCT03772912 -NCT03775707 -NCT03772925 -NCT03775733 -NCT03773003 -NCT03781219 -NCT03775850 -NCT03778619 -NCT03775928 -NCT03778593 -NCT03776006 -NCT03778658 -NCT03776045 -NCT03778814 -NCT03776071 -NCT03778879 -NCT03776110 -NCT03778931 -NCT03776136 -NCT03778957 -NCT03776149 -NCT03778996 -NCT03776175 -NCT03779009 -NCT03776253 -NCT03779035 -NCT03776279 -NCT03779100 -NCT03776318 -NCT03779113 -NCT03776383 -NCT03779152 -NCT03776487 -NCT03779165 -NCT03776591 -NCT03779191 -NCT03776604 -NCT03779230 -NCT03776630 -NCT03779464 -NCT03776669 -NCT03779477 -NCT03776812 -NCT03779503 -NCT03776851 -NCT03779529 -NCT03776864 -NCT03779568 -NCT03776955 -NCT03779581 -NCT03776968 -NCT03779594 -NCT03777046 -NCT03779620 -NCT03777085 -NCT03779646 -NCT03777124 -NCT03779659 -NCT03777306 -NCT03779685 -NCT03777319 -NCT03779737 -NCT03777462 -NCT03779750 -NCT03777475 -NCT03779815 -NCT03777488 -NCT03779854 -NCT03777579 -NCT03779867 -NCT03777657 -NCT03780010 -NCT03777722 -NCT03780036 -NCT03777774 -NCT03780049 -NCT03777813 -NCT03780075 -NCT03777852 -NCT03780153 -NCT03777930 -NCT03780283 -NCT03777969 -NCT03780296 -NCT03777982 -NCT03780309 -NCT03778021 -NCT03780387 -NCT03778047 -NCT03780426 -NCT03778060 -NCT03780491 -NCT03778073 -NCT03780569 -NCT03778086 -NCT03780582 -NCT03778112 -NCT03780608 -NCT03778125 -NCT03780634 -NCT03778138 -NCT03780712 -NCT03778151 -NCT03780725 -NCT03778229 -NCT03780972 -NCT03778255 -NCT03781011 -NCT03778268 -NCT03781050 -NCT03778294 -NCT03781063 -NCT03778359 -NCT03781089 -NCT03778411 -NCT03781154 -NCT03778541 -NCT03786861 -NCT03781271 -NCT03784547 -NCT03781323 -NCT03784469 -NCT03781362 -NCT03784599 -NCT03781739 -NCT03784625 -NCT03781778 -NCT03784677 -NCT03781869 -NCT03784703 -NCT03781895 -NCT03784729 -NCT03781908 -NCT03784742 -NCT03781934 -NCT03784755 -NCT03781960 -NCT03784794 -NCT03781986 -NCT03784976 -NCT03782051 -NCT03785015 -NCT03782064 -NCT03785184 -NCT03782207 -NCT03785210 -NCT03782363 -NCT03785249 -NCT03782415 -NCT03785262 -NCT03782428 -NCT03785288 -NCT03782467 -NCT03785366 -NCT03782480 -NCT03785418 -NCT03782701 -NCT03785457 -NCT03782714 -NCT03785496 -NCT03782727 -NCT03785574 -NCT03782831 -NCT03785665 -NCT03782870 -NCT03785678 -NCT03783078 -NCT03785704 -NCT03783143 -NCT03785743 -NCT03783182 -NCT03785756 -NCT03783273 -NCT03785795 -NCT03783312 -NCT03785808 -NCT03783325 -NCT03785873 -NCT03783364 -NCT03785886 -NCT03783403 -NCT03785925 -NCT03783442 -NCT03785938 -NCT03783481 -NCT03785964 -NCT03783546 -NCT03786003 -NCT03783559 -NCT03786055 -NCT03783572 -NCT03786081 -NCT03783585 -NCT03786094 -NCT03783728 -NCT03786172 -NCT03783780 -NCT03786198 -NCT03783871 -NCT03786237 -NCT03783897 -NCT03786289 -NCT03783936 -NCT03786354 -NCT03783949 -NCT03786367 -NCT03784014 -NCT03786406 -NCT03784027 -NCT03786419 -NCT03784040 -NCT03786484 -NCT03784066 -NCT03786575 -NCT03784157 -NCT03786666 -NCT03784183 -NCT03786692 -NCT03784326 -NCT03786744 -NCT03784339 -NCT03786770 -NCT03784378 -NCT03786783 -NCT03784417 -NCT03786796 -NCT03784430 -NCT03786848 -NCT03784456 -NCT03792438 -NCT03786913 -NCT03789656 -NCT03786926 -NCT03789617 -NCT03787017 -NCT03789773 -NCT03787043 -NCT03789838 -NCT03787056 -NCT03789851 -NCT03787251 -NCT03789864 -NCT03787264 -NCT03789877 -NCT03787303 -NCT03789955 -NCT03787498 -NCT03790059 -NCT03787511 -NCT03790072 -NCT03787589 -NCT03790098 -NCT03787602 -NCT03790111 -NCT03787680 -NCT03790215 -NCT03787784 -NCT03790228 -NCT03787823 -NCT03790241 -NCT03787914 -NCT03790384 -NCT03787940 -NCT03790397 -NCT03787953 -NCT03790423 -NCT03787966 -NCT03790475 -NCT03787979 -NCT03790488 -NCT03787992 -NCT03790553 -NCT03788031 -NCT03790592 -NCT03788057 -NCT03790631 -NCT03788083 -NCT03790748 -NCT03788109 -NCT03790813 -NCT03788122 -NCT03790826 -NCT03788161 -NCT03790852 -NCT03788174 -NCT03790891 -NCT03788187 -NCT03791008 -NCT03788213 -NCT03791060 -NCT03788226 -NCT03791112 -NCT03788291 -NCT03791138 -NCT03788434 -NCT03791164 -NCT03788447 -NCT03791229 -NCT03788460 -NCT03791242 -NCT03788499 -NCT03791398 -NCT03788512 -NCT03791515 -NCT03788590 -NCT03791528 -NCT03788603 -NCT03791658 -NCT03788733 -NCT03791736 -NCT03788772 -NCT03791814 -NCT03788785 -NCT03791905 -NCT03788850 -NCT03791918 -NCT03788889 -NCT03791944 -NCT03788954 -NCT03792009 -NCT03788967 -NCT03792048 -NCT03789019 -NCT03792074 -NCT03789097 -NCT03792165 -NCT03789110 -NCT03792191 -NCT03789149 -NCT03792230 -NCT03789175 -NCT03792256 -NCT03789240 -NCT03792269 -NCT03789357 -NCT03792321 -NCT03789422 -NCT03792347 -NCT03789552 -NCT03792425 -NCT03789604 -NCT03796845 -NCT03792477 -NCT03794609 -NCT03792490 -NCT03794596 -NCT03792503 -NCT03794635 -NCT03792516 -NCT03794661 -NCT03792529 -NCT03794713 -NCT03792542 -NCT03794726 -NCT03792555 -NCT03794752 -NCT03792568 -NCT03794791 -NCT03792620 -NCT03794830 -NCT03792633 -NCT03794843 -NCT03792659 -NCT03794895 -NCT03792724 -NCT03794999 -NCT03792750 -NCT03795012 -NCT03792763 -NCT03795194 -NCT03792789 -NCT03795207 -NCT03792802 -NCT03795233 -NCT03792815 -NCT03795246 -NCT03792841 -NCT03795272 -NCT03792867 -NCT03795285 -NCT03792919 -NCT03795311 -NCT03792932 -NCT03795337 -NCT03792958 -NCT03795350 -NCT03792971 -NCT03795493 -NCT03793049 -NCT03795571 -NCT03793114 -NCT03795584 -NCT03793140 -NCT03795597 -NCT03793166 -NCT03795610 -NCT03793179 -NCT03795662 -NCT03793192 -NCT03795675 -NCT03793205 -NCT03795714 -NCT03793322 -NCT03795779 -NCT03793348 -NCT03795935 -NCT03793361 -NCT03795987 -NCT03793387 -NCT03796026 -NCT03793478 -NCT03796052 -NCT03793491 -NCT03796091 -NCT03793517 -NCT03796143 -NCT03793543 -NCT03796195 -NCT03793595 -NCT03796247 -NCT03793686 -NCT03796273 -NCT03793725 -NCT03796390 -NCT03793829 -NCT03796416 -NCT03793894 -NCT03796429 -NCT03793907 -NCT03796455 -NCT03794102 -NCT03796481 -NCT03794167 -NCT03796507 -NCT03794219 -NCT03796520 -NCT03794284 -NCT03796533 -NCT03794297 -NCT03796559 -NCT03794349 -NCT03796598 -NCT03794375 -NCT03796637 -NCT03794388 -NCT03796650 -NCT03794414 -NCT03796702 -NCT03794440 -NCT03796767 -NCT03794544 -NCT03796819 -NCT03794557 -NCT03825055 -NCT03796884 -NCT03799835 -NCT03796988 -NCT03799757 -NCT03797131 -NCT03799887 -NCT03797157 -NCT03799913 -NCT03797235 -NCT03799926 -NCT03797261 -NCT03799939 -NCT03797326 -NCT03799952 -NCT03797391 -NCT03799991 -NCT03797443 -NCT03800095 -NCT03797456 -NCT03800134 -NCT03797469 -NCT03800290 -NCT03797508 -NCT03800446 -NCT03797547 -NCT03800498 -NCT03797586 -NCT03800524 -NCT03797625 -NCT03800602 -NCT03797833 -NCT03800615 -NCT03797846 -NCT03800654 -NCT03797989 -NCT03800693 -NCT03798002 -NCT03800758 -NCT03798015 -NCT03800784 -NCT03798080 -NCT03800836 -NCT03798106 -NCT03800927 -NCT03798119 -NCT03800953 -NCT03798158 -NCT03801031 -NCT03798314 -NCT03801083 -NCT03798418 -NCT03824002 -NCT03798444 -NCT03824080 -NCT03798457 -NCT03824132 -NCT03798509 -NCT03824145 -NCT03798561 -NCT03824158 -NCT03798626 -NCT03824197 -NCT03798639 -NCT03824223 -NCT03798678 -NCT03824275 -NCT03798704 -NCT03824327 -NCT03798743 -NCT03824366 -NCT03798769 -NCT03824379 -NCT03798860 -NCT03824431 -NCT03798899 -NCT03824457 -NCT03798951 -NCT03824483 -NCT03799003 -NCT03824535 -NCT03799094 -NCT03824587 -NCT03799224 -NCT03824652 -NCT03799380 -NCT03824665 -NCT03799406 -NCT03824691 -NCT03799445 -NCT03824704 -NCT03799484 -NCT03824717 -NCT03799510 -NCT03824808 -NCT03799523 -NCT03824834 -NCT03799575 -NCT03824886 -NCT03799601 -NCT03824899 -NCT03799614 -NCT03824912 -NCT03799679 -NCT03824951 -NCT03799692 -NCT03824964 -NCT03799705 -NCT03824977 -NCT03799731 -NCT03824990 -NCT03799744 -NCT03825042 -NCT03801200 -NCT03821545 -NCT03801213 -NCT03821610 -NCT03801304 -NCT03821675 -NCT03801356 -NCT03821792 -NCT03801369 -NCT03821870 -NCT03801395 -NCT03821935 -NCT03801434 -NCT03822117 -NCT03801499 -NCT03822130 -NCT03801525 -NCT03822156 -NCT03801668 -NCT03822195 -NCT03801850 -NCT03822234 -NCT03801863 -NCT03822312 -NCT03801876 -NCT03822351 -NCT03801902 -NCT03822468 -NCT03801915 -NCT03822494 -NCT03802019 -NCT03822520 -NCT03802045 -NCT03822533 -NCT03802058 -NCT03822572 -NCT03802071 -NCT03822650 -NCT03802084 -NCT03822715 -NCT03802097 -NCT03822728 -NCT03802123 -NCT03822780 -NCT03802188 -NCT03822845 -NCT03802240 -NCT03822871 -NCT03802266 -NCT03822897 -NCT03802448 -NCT03822936 -NCT03802474 -NCT03823001 -NCT03802487 -NCT03823027 -NCT03802591 -NCT03823040 -NCT03802604 -NCT03823053 -NCT03802695 -NCT03823079 -NCT03802734 -NCT03823118 -NCT03802747 -NCT03823131 -NCT03802799 -NCT03823144 -NCT03802851 -NCT03823248 -NCT03802903 -NCT03823313 -NCT03802955 -NCT03823352 -NCT03802994 -NCT03823365 -NCT03803007 -NCT03823404 -NCT03803033 -NCT03823534 -NCT03803046 -NCT03823560 -NCT03803137 -NCT03823625 -NCT03803215 -NCT03823651 -NCT03803241 -NCT03823742 -NCT03803254 -NCT03823807 -NCT03803267 -NCT03823846 -NCT03803293 -NCT03823859 -NCT03803319 -NCT03823950 -NCT03803397 -NCT03820986 -NCT03820999 -NCT03821025 -NCT03821038 -NCT03821051 -NCT03821064 -NCT03821116 -NCT03821194 -NCT03821207 -NCT03821233 -NCT03821246 -NCT03821272 -NCT03821285 -NCT03821363 -NCT03821376 -NCT03821454 -NCT03823989 -NCT03803410 -NCT03820011 -NCT03803436 -NCT03820024 -NCT03803475 -NCT03820063 -NCT03803553 -NCT03820089 -NCT03803761 -NCT03820115 -NCT03803774 -NCT03820141 -NCT03803930 -NCT03820206 -NCT03803943 -NCT03820310 -NCT03803969 -NCT03820414 -NCT03804073 -NCT03820427 -NCT03804164 -NCT03820453 -NCT03804203 -NCT03820518 -NCT03804307 -NCT03820544 -NCT03804320 -NCT03820557 -NCT03804333 -NCT03820570 -NCT03804372 -NCT03820661 -NCT03804398 -NCT03820674 -NCT03804424 -NCT03820778 -NCT03804463 -NCT03820791 -NCT03804502 -NCT03820817 -NCT03804515 -NCT03820830 -NCT03804541 -NCT03820843 -NCT03804580 -NCT03820856 -NCT03804671 -NCT03816098 -NCT03816163 -NCT03816319 -NCT03816332 -NCT03816345 -NCT03816358 -NCT03816462 -NCT03816475 -NCT03816540 -NCT03816553 -NCT03816748 -NCT03816774 -NCT03816839 -NCT03817125 -NCT03817216 -NCT03817242 -NCT03817268 -NCT03817307 -NCT03817320 -NCT03817385 -NCT03817398 -NCT03817411 -NCT03817489 -NCT03817567 -NCT03817645 -NCT03817658 -NCT03817736 -NCT03817762 -NCT03817840 -NCT03817853 -NCT03817996 -NCT03818061 -NCT03818165 -NCT03818282 -NCT03818347 -NCT03818386 -NCT03818412 -NCT03818529 -NCT03818542 -NCT03818555 -NCT03818568 -NCT03818633 -NCT03818646 -NCT03818685 -NCT03818763 -NCT03818776 -NCT03818802 -NCT03818815 -NCT03818880 -NCT03818893 -NCT03818919 -NCT03818997 -NCT03819010 -NCT03819062 -NCT03819088 -NCT03819101 -NCT03819140 -NCT03819166 -NCT03819257 -NCT03819296 -NCT03819348 -NCT03819387 -NCT03819465 -NCT03819478 -NCT03819504 -NCT03819569 -NCT03819595 -NCT03819751 -NCT03819777 -NCT03819907 -NCT03819920 -NCT03819985 -NCT03820908 -NCT03804710 -NCT03807999 -NCT03804736 -NCT03807947 -NCT03804762 -NCT03808012 -NCT03804775 -NCT03808038 -NCT03804866 -NCT03808064 -NCT03804944 -NCT03808077 -NCT03804983 -NCT03808116 -NCT03804996 -NCT03808168 -NCT03805022 -NCT03808311 -NCT03805165 -NCT03808337 -NCT03805282 -NCT03808415 -NCT03805334 -NCT03808428 -NCT03805399 -NCT03808441 -NCT03805477 -NCT03808480 -NCT03805516 -NCT03814005 -NCT03805581 -NCT03814161 -NCT03805594 -NCT03814239 -NCT03805607 -NCT03814252 -NCT03805711 -NCT03814317 -NCT03805737 -NCT03814343 -NCT03805750 -NCT03814369 -NCT03805776 -NCT03814408 -NCT03805828 -NCT03814447 -NCT03805906 -NCT03814577 -NCT03805932 -NCT03814668 -NCT03806036 -NCT03814694 -NCT03806049 -NCT03814720 -NCT03806062 -NCT03814759 -NCT03806075 -NCT03814837 -NCT03806088 -NCT03815058 -NCT03806153 -NCT03815084 -NCT03806179 -NCT03815097 -NCT03806192 -NCT03815149 -NCT03806205 -NCT03815175 -NCT03806218 -NCT03815214 -NCT03806244 -NCT03815279 -NCT03806309 -NCT03815318 -NCT03806322 -NCT03815331 -NCT03806543 -NCT03815344 -NCT03806556 -NCT03815357 -NCT03806595 -NCT03815370 -NCT03806647 -NCT03815383 -NCT03806894 -NCT03815448 -NCT03806985 -NCT03815461 -NCT03807024 -NCT03815474 -NCT03807050 -NCT03815526 -NCT03807063 -NCT03815630 -NCT03807076 -NCT03815643 -NCT03807102 -NCT03815682 -NCT03807414 -NCT03815747 -NCT03807479 -NCT03815812 -NCT03807570 -NCT03815838 -NCT03807765 -NCT03815890 -NCT03807778 -NCT03815903 -NCT03807830 -NCT03815942 -NCT03807856 -NCT03815968 -NCT03808610 -NCT03811379 -NCT03808662 -NCT03811288 -NCT03808675 -NCT03811405 -NCT03808701 -NCT03811418 -NCT03808766 -NCT03811431 -NCT03808779 -NCT03811457 -NCT03808805 -NCT03811535 -NCT03808818 -NCT03811652 -NCT03808831 -NCT03811743 -NCT03808857 -NCT03811769 -NCT03808870 -NCT03811782 -NCT03808883 -NCT03811886 -NCT03808935 -NCT03811899 -NCT03809000 -NCT03811951 -NCT03809013 -NCT03811964 -NCT03809026 -NCT03812016 -NCT03809065 -NCT03812068 -NCT03809078 -NCT03812198 -NCT03809104 -NCT03812211 -NCT03809117 -NCT03812263 -NCT03809130 -NCT03812289 -NCT03809169 -NCT03812302 -NCT03809221 -NCT03812341 -NCT03809338 -NCT03812367 -NCT03809585 -NCT03812393 -NCT03809624 -NCT03812432 -NCT03809637 -NCT03812549 -NCT03809767 -NCT03812562 -NCT03809780 -NCT03812692 -NCT03809832 -NCT03812705 -NCT03809988 -NCT03812744 -NCT03810066 -NCT03812770 -NCT03810105 -NCT03812783 -NCT03810196 -NCT03812796 -NCT03810261 -NCT03812809 -NCT03810287 -NCT03812874 -NCT03810326 -NCT03812913 -NCT03810339 -NCT03813056 -NCT03810443 -NCT03813147 -NCT03810482 -NCT03813173 -NCT03810625 -NCT03813186 -NCT03810651 -NCT03813381 -NCT03810716 -NCT03813394 -NCT03810742 -NCT03813498 -NCT03810755 -NCT03813524 -NCT03810781 -NCT03813576 -NCT03810807 -NCT03813615 -NCT03810846 -NCT03813641 -NCT03810872 -NCT03813706 -NCT03810976 -NCT03813732 -NCT03811002 -NCT03813784 -NCT03811015 -NCT03813810 -NCT03811054 -NCT03813836 -NCT03811106 -NCT03813940 -NCT03811145 -NCT03813953 -NCT03811262 -NCT03990454 -NCT03825159 -NCT03828448 -NCT03825237 -NCT03828422 -NCT03825289 -NCT03828578 -NCT03825302 -NCT03828630 -NCT03825328 -NCT03828773 -NCT03825445 -NCT03828799 -NCT03825484 -NCT03828838 -NCT03825510 -NCT03828864 -NCT03825705 -NCT03828903 -NCT03825718 -NCT03828929 -NCT03825731 -NCT03829007 -NCT03825757 -NCT03829020 -NCT03825770 -NCT03829033 -NCT03825783 -NCT03829059 -NCT03825796 -NCT03829098 -NCT03825835 -NCT03829111 -NCT03825848 -NCT03829254 -NCT03825861 -NCT03829319 -NCT03825887 -NCT03829332 -NCT03825913 -NCT03829345 -NCT03825926 -NCT03829371 -NCT03825991 -NCT03988868 -NCT03826030 -NCT03988946 -NCT03826043 -NCT03988959 -NCT03826056 -NCT03988998 -NCT03826095 -NCT03989037 -NCT03826446 -NCT03989089 -NCT03826524 -NCT03989115 -NCT03826589 -NCT03989193 -NCT03826680 -NCT03989258 -NCT03826862 -NCT03989310 -NCT03826940 -NCT03989336 -NCT03826979 -NCT03989362 -NCT03826992 -NCT03989414 -NCT03827018 -NCT03989466 -NCT03827044 -NCT03989544 -NCT03827070 -NCT03989596 -NCT03827317 -NCT03989622 -NCT03827395 -NCT03989713 -NCT03827447 -NCT03989752 -NCT03827473 -NCT03989830 -NCT03827577 -NCT03989869 -NCT03827616 -NCT03989895 -NCT03827668 -NCT03989947 -NCT03827837 -NCT03989973 -NCT03827850 -NCT03989999 -NCT03827967 -NCT03990012 -NCT03827993 -NCT03990025 -NCT03828071 -NCT03990077 -NCT03828123 -NCT03990090 -NCT03828136 -NCT03990103 -NCT03828201 -NCT03990181 -NCT03828227 -NCT03990220 -NCT03828279 -NCT03990233 -NCT03828292 -NCT03990285 -NCT03828318 -NCT03990402 -NCT03829410 -NCT03988712 -NCT03829423 -NCT03988764 -NCT03829436 -NCT03988803 -NCT03829462 -NCT03988816 -NCT03829475 -NCT03983434 -NCT03983486 -NCT03983538 -NCT03983564 -NCT03983577 -NCT03983629 -NCT03983668 -NCT03983746 -NCT03983759 -NCT03983811 -NCT03983824 -NCT03983850 -NCT03983928 -NCT03983954 -NCT03983993 -NCT03984006 -NCT03984019 -NCT03984045 -NCT03984097 -NCT03984149 -NCT03984214 -NCT03984240 -NCT03984253 -NCT03984318 -NCT03984357 -NCT03984370 -NCT03984448 -NCT03984578 -NCT03984604 -NCT03984643 -NCT03984695 -NCT03984721 -NCT03984825 -NCT03984890 -NCT03984903 -NCT03984955 -NCT03984968 -NCT03985007 -NCT03985033 -NCT03985046 -NCT03985072 -NCT03985189 -NCT03985267 -NCT03985449 -NCT03985475 -NCT03985657 -NCT03985670 -NCT03985696 -NCT03985722 -NCT03985748 -NCT03985774 -NCT03985787 -NCT03985852 -NCT03985891 -NCT03986021 -NCT03986034 -NCT03986086 -NCT03986216 -NCT03986255 -NCT03986281 -NCT03986294 -NCT03986385 -NCT03986398 -NCT03986502 -NCT03986515 -NCT03986528 -NCT03986554 -NCT03986580 -NCT03986593 -NCT03986606 -NCT03986684 -NCT03986775 -NCT03987022 -NCT03987087 -NCT03987126 -NCT03987152 -NCT03987165 -NCT03987217 -NCT03987269 -NCT03987386 -NCT03987399 -NCT03987438 -NCT03987503 -NCT03987568 -NCT03987685 -NCT03987698 -NCT03987724 -NCT03987737 -NCT03987815 -NCT03987854 -NCT03987867 -NCT03987880 -NCT03987893 -NCT03987906 -NCT03987971 -NCT03987984 -NCT03988023 -NCT03988036 -NCT03988088 -NCT03988114 -NCT03988192 -NCT03988205 -NCT03988283 -NCT03988296 -NCT03988309 -NCT03988322 -NCT03988374 -NCT03988504 -NCT03988517 -NCT03988543 -NCT03988582 -NCT03988595 -NCT03988647 -NCT03988660 -NCT03988686 -NCT03988855 -NCT03829501 -NCT03981796 -NCT03829540 -NCT03981874 -NCT03829553 -NCT03981978 -NCT03829618 -NCT03982004 -NCT03829631 -NCT03982017 -NCT03829683 -NCT03982082 -NCT03829722 -NCT03982121 -NCT03829748 -NCT03982134 -NCT03829904 -NCT03982173 -NCT03829917 -NCT03982212 -NCT03829930 -NCT03982264 -NCT03829943 -NCT03982303 -NCT03829969 -NCT03982407 -NCT03830060 -NCT03982420 -NCT03830073 -NCT03982446 -NCT03830151 -NCT03982459 -NCT03830164 -NCT03982472 -NCT03830190 -NCT03982485 -NCT03830242 -NCT03982511 -NCT03830281 -NCT03982537 -NCT03830320 -NCT03982628 -NCT03830385 -NCT03982680 -NCT03830398 -NCT03982797 -NCT03830411 -NCT03982992 -NCT03830437 -NCT03983057 -NCT03830502 -NCT03983083 -NCT03830580 -NCT03983109 -NCT03830606 -NCT03983122 -NCT03830658 -NCT03983148 -NCT03830671 -NCT03983161 -NCT03830697 -NCT03983174 -NCT03830775 -NCT03983226 -NCT03830788 -NCT03979651 -NCT03979664 -NCT03979677 -NCT03979690 -NCT03979794 -NCT03979846 -NCT03979872 -NCT03979924 -NCT03979937 -NCT03980002 -NCT03980015 -NCT03980041 -NCT03980054 -NCT03980080 -NCT03980093 -NCT03980145 -NCT03980171 -NCT03980249 -NCT03980288 -NCT03980314 -NCT03980327 -NCT03980340 -NCT03980431 -NCT03980457 -NCT03980509 -NCT03980535 -NCT03980626 -NCT03980704 -NCT03980717 -NCT03980743 -NCT03980925 -NCT03980964 -NCT03980977 -NCT03981016 -NCT03981068 -NCT03981146 -NCT03981159 -NCT03981263 -NCT03981276 -NCT03981315 -NCT03981328 -NCT03981406 -NCT03981432 -NCT03981510 -NCT03981536 -NCT03981562 -NCT03981614 -NCT03981679 -NCT03981705 -NCT03981718 -NCT03981731 -NCT03981744 -NCT03983395 -NCT03830801 -NCT03979508 -NCT03830866 -NCT03979521 -NCT03830905 -NCT03979547 -NCT03830918 -NCT03979573 -NCT03830957 -NCT03979638 -NCT03831035 -NCT03973788 -NCT03973879 -NCT03973905 -NCT03973918 -NCT03973931 -NCT03973957 -NCT03974009 -NCT03974022 -NCT03974074 -NCT03974087 -NCT03974100 -NCT03974191 -NCT03974204 -NCT03974217 -NCT03974243 -NCT03974412 -NCT03974451 -NCT03974464 -NCT03974542 -NCT03974594 -NCT03974789 -NCT03974841 -NCT03974854 -NCT03974867 -NCT03975036 -NCT03975049 -NCT03975101 -NCT03975114 -NCT03975127 -NCT03975179 -NCT03975205 -NCT03975231 -NCT03975270 -NCT03975309 -NCT03975387 -NCT03975413 -NCT03975465 -NCT03975478 -NCT03975491 -NCT03975504 -NCT03975608 -NCT03975621 -NCT03975647 -NCT03975660 -NCT03975725 -NCT03975790 -NCT03975829 -NCT03975842 -NCT03975855 -NCT03975907 -NCT03975959 -NCT03975998 -NCT03976050 -NCT03976102 -NCT03976193 -NCT03976323 -NCT03976349 -NCT03976362 -NCT03976375 -NCT03976518 -NCT03976609 -NCT03976739 -NCT03976804 -NCT03976843 -NCT03976856 -NCT03976960 -NCT03976973 -NCT03976999 -NCT03977025 -NCT03977077 -NCT03977090 -NCT03977103 -NCT03977155 -NCT03977194 -NCT03977207 -NCT03977220 -NCT03977233 -NCT03977272 -NCT03977311 -NCT03977389 -NCT03977415 -NCT03977467 -NCT03977532 -NCT03977571 -NCT03977610 -NCT03977662 -NCT03977766 -NCT03977792 -NCT03977831 -NCT03977896 -NCT03977948 -NCT03978078 -NCT03978195 -NCT03978273 -NCT03978364 -NCT03978546 -NCT03978611 -NCT03978624 -NCT03978663 -NCT03978689 -NCT03978702 -NCT03978780 -NCT03978897 -NCT03978923 -NCT03979066 -NCT03979131 -NCT03979157 -NCT03979274 -NCT03979313 -NCT03979326 -NCT03979339 -NCT03979456 -NCT03979495 -NCT03831100 -NCT03972683 -NCT03831178 -NCT03972696 -NCT03831243 -NCT03972722 -NCT03831256 -NCT03972748 -NCT03831269 -NCT03972813 -NCT03831295 -NCT03972917 -NCT03831321 -NCT03972930 -NCT03831334 -NCT03972943 -NCT03831373 -NCT03973008 -NCT03831386 -NCT03973086 -NCT03831464 -NCT03973112 -NCT03831477 -NCT03973138 -NCT03831516 -NCT03973151 -NCT03831581 -NCT03973255 -NCT03831698 -NCT03973268 -NCT03831711 -NCT03973333 -NCT03831724 -NCT03973450 -NCT03831776 -NCT03973463 -NCT03831893 -NCT03973528 -NCT03831906 -NCT03973619 -NCT03831932 -NCT03973658 -NCT03831958 -NCT03973697 -NCT03831971 -NCT03969316 -NCT03969420 -NCT03969446 -NCT03969459 -NCT03969511 -NCT03969576 -NCT03969706 -NCT03969732 -NCT03969784 -NCT03969823 -NCT03969979 -NCT03970018 -NCT03970070 -NCT03970096 -NCT03970200 -NCT03970252 -NCT03970382 -NCT03970447 -NCT03970499 -NCT03970551 -NCT03970564 -NCT03970616 -NCT03970668 -NCT03970694 -NCT03970733 -NCT03970746 -NCT03970967 -NCT03970993 -NCT03971006 -NCT03971019 -NCT03971032 -NCT03971045 -NCT03971110 -NCT03971175 -NCT03971201 -NCT03971214 -NCT03971266 -NCT03971292 -NCT03971409 -NCT03971422 -NCT03971448 -NCT03971461 -NCT03971474 -NCT03971500 -NCT03971526 -NCT03971539 -NCT03971565 -NCT03971591 -NCT03971643 -NCT03971656 -NCT03971734 -NCT03971747 -NCT03971760 -NCT03971773 -NCT03971786 -NCT03971799 -NCT03971981 -NCT03972020 -NCT03972033 -NCT03972046 -NCT03972059 -NCT03972072 -NCT03972098 -NCT03972150 -NCT03972189 -NCT03972228 -NCT03972241 -NCT03972254 -NCT03972332 -NCT03972358 -NCT03972488 -NCT03972527 -NCT03972540 -NCT03972605 -NCT03972657 -NCT03832010 -NCT03965767 -NCT03832049 -NCT03965819 -NCT03832127 -NCT03965845 -NCT03832283 -NCT03966014 -NCT03832348 -NCT03966066 -NCT03832361 -NCT03966118 -NCT03832569 -NCT03966209 -NCT03832621 -NCT03966248 -NCT03832647 -NCT03966482 -NCT03832673 -NCT03966651 -NCT03832686 -NCT03966742 -NCT03832712 -NCT03966898 -NCT03832803 -NCT03967041 -NCT03832855 -NCT03967093 -NCT03832907 -NCT03967145 -NCT03832959 -NCT03967223 -NCT03832972 -NCT03967327 -NCT03832985 -NCT03967379 -NCT03832998 -NCT03967522 -NCT03833011 -NCT03967613 -NCT03833154 -NCT03967743 -NCT03833167 -NCT03967834 -NCT03833180 -NCT03967886 -NCT03833193 -NCT03967925 -NCT03833206 -NCT03967938 -NCT03833232 -NCT03967977 -NCT03833388 -NCT03967990 -NCT03833414 -NCT03968146 -NCT03833427 -NCT03968250 -NCT03833440 -NCT03968276 -NCT03833466 -NCT03968315 -NCT03833479 -NCT03968328 -NCT03833648 -NCT03968367 -NCT03833661 -NCT03968406 -NCT03833687 -NCT03968419 -NCT03833700 -NCT03968601 -NCT03833726 -NCT03968614 -NCT03833752 -NCT03968653 -NCT03833817 -NCT03968679 -NCT03833869 -NCT03968692 -NCT03833921 -NCT03968718 -NCT03833973 -NCT03968796 -NCT03834012 -NCT03968913 -NCT03834038 -NCT03968978 -NCT03834077 -NCT03969004 -NCT03834116 -NCT03969082 -NCT03834194 -NCT03969095 -NCT03834220 -NCT03969108 -NCT03834233 -NCT03969121 -NCT03834246 -NCT03969277 -NCT03834272 -NCT03964922 -NCT03965091 -NCT03965234 -NCT03965273 -NCT03965286 -NCT03965468 -NCT03965481 -NCT03965494 -NCT03965546 -NCT03965637 -NCT03965676 -NCT03965689 -NCT03834311 -NCT03962543 -NCT03834350 -NCT03962634 -NCT03834402 -NCT03962647 -NCT03834454 -NCT03962686 -NCT03834480 -NCT03962829 -NCT03834493 -NCT03963024 -NCT03834506 -NCT03963115 -NCT03834519 -NCT03963128 -NCT03834532 -NCT03963193 -NCT03834571 -NCT03963206 -NCT03834584 -NCT03963375 -NCT03834623 -NCT03963414 -NCT03834662 -NCT03963427 -NCT03834688 -NCT03963453 -NCT03834701 -NCT03963466 -NCT03834727 -NCT03963635 -NCT03834740 -NCT03963648 -NCT03834779 -NCT03963713 -NCT03834805 -NCT03963726 -NCT03834948 -NCT03963752 -NCT03834961 -NCT03963765 -NCT03834974 -NCT03963804 -NCT03835000 -NCT03963882 -NCT03835065 -NCT03963999 -NCT03835299 -NCT03964064 -NCT03835325 -NCT03964090 -NCT03835351 -NCT03964116 -NCT03835520 -NCT03964233 -NCT03835533 -NCT03964259 -NCT03835624 -NCT03964285 -NCT03835741 -NCT03964324 -NCT03835819 -NCT03964337 -NCT03835910 -NCT03964441 -NCT03835949 -NCT03964506 -NCT03836014 -NCT03964532 -NCT03836040 -NCT03964688 -NCT03836053 -NCT03964714 -NCT03836066 -NCT03964727 -NCT03836157 -NCT03964753 -NCT03836196 -NCT03964779 -NCT03836209 -NCT03964818 -NCT03836261 -NCT03964844 -NCT03836274 -NCT03964896 -NCT03836287 -NCT03960788 -NCT03960840 -NCT03960853 -NCT03960892 -NCT03961100 -NCT03961152 -NCT03961178 -NCT03961282 -NCT03961373 -NCT03961412 -NCT03961555 -NCT03961659 -NCT03961672 -NCT03961698 -NCT03961737 -NCT03961750 -NCT03961763 -NCT03961841 -NCT03961867 -NCT03961919 -NCT03961945 -NCT03961971 -NCT03962023 -NCT03962114 -NCT03962179 -NCT03962465 -NCT03962478 -NCT03964909 -NCT03836300 -NCT03958721 -NCT03836352 -NCT03958747 -NCT03836430 -NCT03958773 -NCT03836495 -NCT03958877 -NCT03836521 -NCT03958890 -NCT03836534 -NCT03959007 -NCT03836586 -NCT03959020 -NCT03836690 -NCT03959046 -NCT03836768 -NCT03959059 -NCT03836807 -NCT03959085 -NCT03836872 -NCT03959137 -NCT03836885 -NCT03959150 -NCT03836937 -NCT03959241 -NCT03837028 -NCT03959267 -NCT03837054 -NCT03959293 -NCT03837171 -NCT03959319 -NCT03837301 -NCT03959358 -NCT03837353 -NCT03959397 -NCT03837444 -NCT03959410 -NCT03837457 -NCT03959553 -NCT03837496 -NCT03959605 -NCT03837509 -NCT03959631 -NCT03837574 -NCT03959644 -NCT03837652 -NCT03959696 -NCT03837691 -NCT03959709 -NCT03837717 -NCT03959748 -NCT03837769 -NCT03959761 -NCT03837808 -NCT03959774 -NCT03837821 -NCT03959839 -NCT03837834 -NCT03959852 -NCT03837873 -NCT03959891 -NCT03837899 -NCT03959917 -NCT03837938 -NCT03959956 -NCT03837951 -NCT03959982 -NCT03837977 -NCT03960008 -NCT03838029 -NCT03960021 -NCT03838042 -NCT03960060 -NCT03838055 -NCT03960099 -NCT03838120 -NCT03960112 -NCT03838159 -NCT03960151 -NCT03838237 -NCT03960177 -NCT03838263 -NCT03960320 -NCT03838367 -NCT03960333 -NCT03838419 -NCT03960450 -NCT03838432 -NCT03960463 -NCT03838484 -NCT03960554 -NCT03838549 -NCT03960619 -NCT03838575 -NCT03957967 -NCT03958006 -NCT03958019 -NCT03958045 -NCT03958058 -NCT03958097 -NCT03958136 -NCT03958175 -NCT03958227 -NCT03958240 -NCT03958253 -NCT03958305 -NCT03958344 -NCT03958383 -NCT03958435 -NCT03958487 -NCT03958500 -NCT03958656 -NCT03960775 -NCT03838601 -NCT03841240 -NCT03838653 -NCT03841201 -NCT03838692 -NCT03841266 -NCT03838744 -NCT03841305 -NCT03838796 -NCT03841318 -NCT03838848 -NCT03841383 -NCT03838861 -NCT03841422 -NCT03838913 -NCT03841435 -NCT03838952 -NCT03841461 -NCT03838991 -NCT03841526 -NCT03839160 -NCT03841565 -NCT03839173 -NCT03841617 -NCT03839277 -NCT03841721 -NCT03839342 -NCT03841734 -NCT03839420 -NCT03841747 -NCT03839433 -NCT03841760 -NCT03839446 -NCT03841955 -NCT03839459 -NCT03842007 -NCT03839472 -NCT03842059 -NCT03839498 -NCT03842085 -NCT03839524 -NCT03842215 -NCT03839550 -NCT03842228 -NCT03839576 -NCT03842254 -NCT03839602 -NCT03842358 -NCT03839615 -NCT03842566 -NCT03839706 -NCT03842605 -NCT03839771 -NCT03842696 -NCT03839823 -NCT03842826 -NCT03839836 -NCT03842852 -NCT03839901 -NCT03842943 -NCT03839914 -NCT03842982 -NCT03839940 -NCT03843073 -NCT03839992 -NCT03843151 -NCT03840005 -NCT03843177 -NCT03840148 -NCT03843229 -NCT03840200 -NCT03843294 -NCT03840239 -NCT03843346 -NCT03840265 -NCT03843359 -NCT03840317 -NCT03843398 -NCT03840408 -NCT03843437 -NCT03840421 -NCT03843515 -NCT03840538 -NCT03843528 -NCT03840564 -NCT03843554 -NCT03840590 -NCT03843567 -NCT03840603 -NCT03843645 -NCT03840772 -NCT03843671 -NCT03840902 -NCT03957642 -NCT03840915 -NCT03957668 -NCT03840967 -NCT03957720 -NCT03840980 -NCT03957733 -NCT03841006 -NCT03957759 -NCT03841032 -NCT03957811 -NCT03841045 -NCT03957837 -NCT03841110 -NCT03957863 -NCT03841136 -NCT03957902 -NCT03841162 -NCT03957915 -NCT03843710 -NCT03957226 -NCT03843749 -NCT03957408 -NCT03843775 -NCT03957421 -NCT03843814 -NCT03957434 -NCT03843853 -NCT03957486 -NCT03843918 -NCT03957551 -NCT03843931 -NCT03957564 -NCT03843957 -NCT03957577 -NCT03844048 -NCT03952091 -NCT03952117 -NCT03952130 -NCT03952286 -NCT03952312 -NCT03952325 -NCT03952403 -NCT03952442 -NCT03952572 -NCT03952585 -NCT03952598 -NCT03952650 -NCT03952741 -NCT03952793 -NCT03952832 -NCT03952845 -NCT03952975 -NCT03953053 -NCT03953118 -NCT03953131 -NCT03953144 -NCT03953157 -NCT03953183 -NCT03953235 -NCT03953261 -NCT03953326 -NCT03953352 -NCT03953469 -NCT03953625 -NCT03953703 -NCT03953742 -NCT03953755 -NCT03953794 -NCT03953833 -NCT03953898 -NCT03953976 -NCT03954067 -NCT03954106 -NCT03954145 -NCT03954171 -NCT03954197 -NCT03954210 -NCT03954327 -NCT03954366 -NCT03954431 -NCT03954444 -NCT03954522 -NCT03954548 -NCT03954561 -NCT03954704 -NCT03954756 -NCT03954782 -NCT03954821 -NCT03955042 -NCT03955055 -NCT03955068 -NCT03955081 -NCT03955120 -NCT03955146 -NCT03955185 -NCT03955198 -NCT03955224 -NCT03955354 -NCT03955367 -NCT03955458 -NCT03955471 -NCT03955484 -NCT03955510 -NCT03955588 -NCT03955627 -NCT03955640 -NCT03955653 -NCT03955783 -NCT03955848 -NCT03955887 -NCT03955913 -NCT03955939 -NCT03955978 -NCT03956056 -NCT03956069 -NCT03956108 -NCT03956160 -NCT03956212 -NCT03956238 -NCT03956303 -NCT03956316 -NCT03956368 -NCT03956446 -NCT03956459 -NCT03956485 -NCT03956498 -NCT03956550 -NCT03956615 -NCT03956641 -NCT03956654 -NCT03956680 -NCT03956706 -NCT03956810 -NCT03956823 -NCT03956875 -NCT03956888 -NCT03956940 -NCT03956979 -NCT03957096 -NCT03957135 -NCT03957200 -NCT03957590 -NCT03844100 -NCT03951571 -NCT03844256 -NCT03951584 -NCT03844347 -NCT03951597 -NCT03844360 -NCT03951649 -NCT03844438 -NCT03951831 -NCT03844490 -NCT03951922 -NCT03844568 -NCT03951961 -NCT03844620 -NCT03952065 -NCT03844685 -NCT03946033 -NCT03946072 -NCT03946202 -NCT03946332 -NCT03946358 -NCT03946397 -NCT03946423 -NCT03946527 -NCT03946553 -NCT03946579 -NCT03946618 -NCT03946670 -NCT03946683 -NCT03946709 -NCT03946722 -NCT03946800 -NCT03946826 -NCT03946852 -NCT03946865 -NCT03946878 -NCT03946917 -NCT03946943 -NCT03946969 -NCT03947112 -NCT03947138 -NCT03947151 -NCT03947242 -NCT03947255 -NCT03947320 -NCT03947372 -NCT03947385 -NCT03947515 -NCT03947567 -NCT03947606 -NCT03947723 -NCT03947736 -NCT03947775 -NCT03947866 -NCT03948035 -NCT03948074 -NCT03948100 -NCT03948113 -NCT03948295 -NCT03948321 -NCT03948386 -NCT03948399 -NCT03948438 -NCT03948477 -NCT03948490 -NCT03948529 -NCT03948568 -NCT03948620 -NCT03948646 -NCT03948659 -NCT03948724 -NCT03948763 -NCT03948802 -NCT03948906 -NCT03948958 -NCT03948997 -NCT03949062 -NCT03949101 -NCT03949153 -NCT03949166 -NCT03949179 -NCT03949231 -NCT03949270 -NCT03949283 -NCT03949322 -NCT03949374 -NCT03949517 -NCT03949634 -NCT03949647 -NCT03949660 -NCT03949777 -NCT03949907 -NCT03949933 -NCT03950102 -NCT03950141 -NCT03950154 -NCT03950180 -NCT03950271 -NCT03950297 -NCT03950323 -NCT03950362 -NCT03950518 -NCT03950531 -NCT03950570 -NCT03950583 -NCT03950609 -NCT03950635 -NCT03950648 -NCT03950674 -NCT03950830 -NCT03950908 -NCT03951116 -NCT03951129 -NCT03951142 -NCT03951246 -NCT03951298 -NCT03951324 -NCT03951337 -NCT03951415 -NCT03951454 -NCT03951467 -NCT03951493 -NCT03952078 -NCT03844711 -NCT03944252 -NCT03844750 -NCT03944265 -NCT03844763 -NCT03944278 -NCT03844776 -NCT03944304 -NCT03844815 -NCT03944356 -NCT03844997 -NCT03944382 -NCT03845166 -NCT03944421 -NCT03845231 -NCT03944434 -NCT03845270 -NCT03944447 -NCT03845296 -NCT03944499 -NCT03845608 -NCT03944551 -NCT03845647 -NCT03944720 -NCT03845751 -NCT03944772 -NCT03845764 -NCT03944798 -NCT03845907 -NCT03944876 -NCT03846024 -NCT03944902 -NCT03846310 -NCT03944915 -NCT03846323 -NCT03944928 -NCT03846336 -NCT03944941 -NCT03846349 -NCT03944980 -NCT03846362 -NCT03945084 -NCT03846401 -NCT03945110 -NCT03846427 -NCT03945162 -NCT03846492 -NCT03945227 -NCT03846531 -NCT03945253 -NCT03846570 -NCT03945266 -NCT03846583 -NCT03945461 -NCT03846674 -NCT03945474 -NCT03846700 -NCT03945487 -NCT03846804 -NCT03945526 -NCT03846817 -NCT03945552 -NCT03846869 -NCT03945604 -NCT03846908 -NCT03945682 -NCT03846934 -NCT03945721 -NCT03847064 -NCT03945734 -NCT03847077 -NCT03945773 -NCT03847103 -NCT03945799 -NCT03847168 -NCT03945851 -NCT03847194 -NCT03942328 -NCT03942380 -NCT03942523 -NCT03942562 -NCT03942575 -NCT03942614 -NCT03942653 -NCT03942692 -NCT03942718 -NCT03942757 -NCT03942861 -NCT03942887 -NCT03942965 -NCT03943004 -NCT03943043 -NCT03943069 -NCT03943082 -NCT03943134 -NCT03943173 -NCT03943251 -NCT03943277 -NCT03943303 -NCT03943342 -NCT03943368 -NCT03943394 -NCT03943420 -NCT03943472 -NCT03943602 -NCT03943667 -NCT03943680 -NCT03943771 -NCT03943901 -NCT03943992 -NCT03944005 -NCT03944057 -NCT03944096 -NCT03944122 -NCT03944148 -NCT03944226 -NCT03847311 -NCT03941301 -NCT03847428 -NCT03941366 -NCT03847480 -NCT03941379 -NCT03847506 -NCT03941405 -NCT03847519 -NCT03941457 -NCT03847558 -NCT03941561 -NCT03847571 -NCT03941574 -NCT03847623 -NCT03941613 -NCT03847649 -NCT03941626 -NCT03847688 -NCT03941730 -NCT03847753 -NCT03941743 -NCT03847818 -NCT03941756 -NCT03847896 -NCT03941769 -NCT03848013 -NCT03941795 -NCT03848039 -NCT03941860 -NCT03848078 -NCT03941873 -NCT03848117 -NCT03941925 -NCT03848182 -NCT03941938 -NCT03848195 -NCT03941964 -NCT03848260 -NCT03942068 -NCT03848286 -NCT03942094 -NCT03848455 -NCT03942224 -NCT03848494 -NCT03942263 -NCT03848507 -NCT03937479 -NCT03937518 -NCT03937635 -NCT03937700 -NCT03937739 -NCT03937791 -NCT03937817 -NCT03937830 -NCT03937843 -NCT03937895 -NCT03937934 -NCT03937947 -NCT03937960 -NCT03937999 -NCT03938064 -NCT03938168 -NCT03938194 -NCT03938220 -NCT03938324 -NCT03938337 -NCT03938545 -NCT03938649 -NCT03938766 -NCT03938792 -NCT03938896 -NCT03938987 -NCT03939000 -NCT03939013 -NCT03939026 -NCT03939169 -NCT03939182 -NCT03939234 -NCT03939247 -NCT03939351 -NCT03939585 -NCT03939598 -NCT03939650 -NCT03939689 -NCT03939845 -NCT03939871 -NCT03939897 -NCT03939962 -NCT03939975 -NCT03940001 -NCT03940027 -NCT03940040 -NCT03940053 -NCT03940066 -NCT03940105 -NCT03940131 -NCT03940196 -NCT03940209 -NCT03940235 -NCT03940248 -NCT03940287 -NCT03940313 -NCT03940352 -NCT03940365 -NCT03940378 -NCT03940482 -NCT03940495 -NCT03940625 -NCT03940703 -NCT03940768 -NCT03940807 -NCT03940820 -NCT03940833 -NCT03940976 -NCT03941093 -NCT03941184 -NCT03941223 -NCT03941262 -NCT03942315 -NCT03848611 -NCT03851627 -NCT03848702 -NCT03851614 -NCT03848754 -NCT03851861 -NCT03848845 -NCT03851887 -NCT03849053 -NCT03851913 -NCT03849066 -NCT03851939 -NCT03849105 -NCT03851952 -NCT03849118 -NCT03851991 -NCT03849352 -NCT03852017 -NCT03849365 -NCT03852030 -NCT03849469 -NCT03852173 -NCT03849482 -NCT03852251 -NCT03849534 -NCT03852407 -NCT03849573 -NCT03852433 -NCT03849625 -NCT03852472 -NCT03849651 -NCT03852511 -NCT03849742 -NCT03852563 -NCT03849768 -NCT03852576 -NCT03849794 -NCT03852654 -NCT03849820 -NCT03852758 -NCT03849950 -NCT03852823 -NCT03850028 -NCT03852836 -NCT03850067 -NCT03936127 -NCT03850080 -NCT03936140 -NCT03850119 -NCT03936153 -NCT03850171 -NCT03936179 -NCT03850197 -NCT03936205 -NCT03850327 -NCT03936218 -NCT03850353 -NCT03936244 -NCT03850418 -NCT03936270 -NCT03850444 -NCT03936283 -NCT03850522 -NCT03936296 -NCT03850535 -NCT03936400 -NCT03850574 -NCT03936426 -NCT03850587 -NCT03936452 -NCT03850691 -NCT03936465 -NCT03850717 -NCT03936478 -NCT03850730 -NCT03936517 -NCT03850769 -NCT03936543 -NCT03850795 -NCT03936621 -NCT03850873 -NCT03936660 -NCT03850912 -NCT03936699 -NCT03850964 -NCT03936751 -NCT03851003 -NCT03936764 -NCT03851042 -NCT03936790 -NCT03851081 -NCT03936829 -NCT03851146 -NCT03936933 -NCT03851237 -NCT03936959 -NCT03851328 -NCT03937102 -NCT03851367 -NCT03937141 -NCT03851406 -NCT03937193 -NCT03851445 -NCT03937219 -NCT03851471 -NCT03937232 -NCT03851497 -NCT03937323 -NCT03851562 -NCT03937401 -NCT03851601 -NCT03937440 -NCT03852901 -NCT03855904 -NCT03852966 -NCT03855813 -NCT03852979 -NCT03856060 -NCT03853044 -NCT03856086 -NCT03853070 -NCT03856099 -NCT03853109 -NCT03856112 -NCT03853135 -NCT03856125 -NCT03853187 -NCT03856138 -NCT03853278 -NCT03856164 -NCT03853317 -NCT03856216 -NCT03853434 -NCT03856229 -NCT03853473 -NCT03856255 -NCT03853486 -NCT03856268 -NCT03853538 -NCT03856294 -NCT03853551 -NCT03856372 -NCT03853603 -NCT03856411 -NCT03853616 -NCT03856437 -NCT03853655 -NCT03856463 -NCT03853707 -NCT03856476 -NCT03853902 -NCT03856515 -NCT03853915 -NCT03856528 -NCT03853928 -NCT03856541 -NCT03853954 -NCT03856658 -NCT03853967 -NCT03856671 -NCT03854032 -NCT03856684 -NCT03854058 -NCT03856697 -NCT03854084 -NCT03934827 -NCT03854110 -NCT03934840 -NCT03854136 -NCT03934866 -NCT03854175 -NCT03934905 -NCT03854227 -NCT03935048 -NCT03854396 -NCT03935100 -NCT03854448 -NCT03935178 -NCT03854474 -NCT03935204 -NCT03854500 -NCT03935217 -NCT03854526 -NCT03935256 -NCT03854617 -NCT03935269 -NCT03854721 -NCT03935282 -NCT03854786 -NCT03935295 -NCT03854799 -NCT03935308 -NCT03854838 -NCT03935347 -NCT03854890 -NCT03935477 -NCT03854903 -NCT03935503 -NCT03854929 -NCT03935516 -NCT03854981 -NCT03935581 -NCT03854994 -NCT03935633 -NCT03855007 -NCT03935646 -NCT03855072 -NCT03935672 -NCT03855358 -NCT03935685 -NCT03855371 -NCT03935698 -NCT03855384 -NCT03935880 -NCT03855423 -NCT03935893 -NCT03855514 -NCT03935906 -NCT03855644 -NCT03935984 -NCT03855670 -NCT03936075 -NCT03855709 -NCT03936101 -NCT03856710 -NCT03862625 -NCT03862729 -NCT03862742 -NCT03862755 -NCT03862768 -NCT03927573 -NCT03927651 -NCT03927664 -NCT03927742 -NCT03927885 -NCT03927898 -NCT03927924 -NCT03928158 -NCT03928210 -NCT03928275 -NCT03928314 -NCT03928379 -NCT03928470 -NCT03928483 -NCT03928678 -NCT03928730 -NCT03928938 -NCT03928951 -NCT03929029 -NCT03929042 -NCT03929094 -NCT03929107 -NCT03929120 -NCT03929159 -NCT03929198 -NCT03929211 -NCT03929263 -NCT03929302 -NCT03929341 -NCT03929354 -NCT03929432 -NCT03929510 -NCT03929666 -NCT03929757 -NCT03929783 -NCT03929809 -NCT03929926 -NCT03929965 -NCT03930004 -NCT03930173 -NCT03930277 -NCT03930368 -NCT03930433 -NCT03930446 -NCT03930498 -NCT03930576 -NCT03930745 -NCT03930797 -NCT03930953 -NCT03931018 -NCT03931044 -NCT03931083 -NCT03931161 -NCT03931200 -NCT03931291 -NCT03931395 -NCT03931408 -NCT03931421 -NCT03931538 -NCT03931551 -NCT03931577 -NCT03931642 -NCT03931681 -NCT03931720 -NCT03931928 -NCT03931941 -NCT03931980 -NCT03932071 -NCT03932201 -NCT03932214 -NCT03932253 -NCT03932266 -NCT03932318 -NCT03932331 -NCT03932409 -NCT03932461 -NCT03932526 -NCT03932565 -NCT03932643 -NCT03932656 -NCT03932877 -NCT03932903 -NCT03932942 -NCT03932955 -NCT03932968 -NCT03932981 -NCT03933007 -NCT03933111 -NCT03933124 -NCT03933150 -NCT03933241 -NCT03933319 -NCT03933358 -NCT03933384 -NCT03933397 -NCT03933423 -NCT03933449 -NCT03933605 -NCT03933618 -NCT03933670 -NCT03933683 -NCT03933735 -NCT03933761 -NCT03933813 -NCT03933969 -NCT03933982 -NCT03934047 -NCT03934060 -NCT03934073 -NCT03934203 -NCT03934294 -NCT03934359 -NCT03934372 -NCT03934502 -NCT03934567 -NCT03934684 -NCT03934736 -NCT03934775 -NCT03934788 -NCT03934814 -NCT03856801 -NCT03859479 -NCT03856957 -NCT03859427 -NCT03856983 -NCT03859492 -NCT03857048 -NCT03859596 -NCT03857061 -NCT03859648 -NCT03857191 -NCT03859687 -NCT03857230 -NCT03859752 -NCT03857451 -NCT03859804 -NCT03857464 -NCT03859830 -NCT03857529 -NCT03859895 -NCT03857607 -NCT03859921 -NCT03857620 -NCT03860038 -NCT03857633 -NCT03860155 -NCT03857646 -NCT03860207 -NCT03857672 -NCT03860233 -NCT03857698 -NCT03860272 -NCT03857737 -NCT03860285 -NCT03857763 -NCT03860519 -NCT03857776 -NCT03860831 -NCT03857815 -NCT03860844 -NCT03857828 -NCT03860883 -NCT03857867 -NCT03860935 -NCT03857880 -NCT03860961 -NCT03857919 -NCT03860987 -NCT03857932 -NCT03861039 -NCT03857958 -NCT03861052 -NCT03857997 -NCT03861091 -NCT03858010 -NCT03861130 -NCT03858036 -NCT03861156 -NCT03858049 -NCT03861195 -NCT03858127 -NCT03861260 -NCT03858166 -NCT03861286 -NCT03858192 -NCT03861299 -NCT03858205 -NCT03861390 -NCT03858244 -NCT03861403 -NCT03858322 -NCT03861468 -NCT03858374 -NCT03861507 -NCT03858452 -NCT03861520 -NCT03858491 -NCT03861598 -NCT03858582 -NCT03861611 -NCT03858595 -NCT03861637 -NCT03858608 -NCT03861676 -NCT03858660 -NCT03861702 -NCT03858712 -NCT03861793 -NCT03858738 -NCT03861897 -NCT03858855 -NCT03861975 -NCT03858920 -NCT03862001 -NCT03858972 -NCT03862092 -NCT03859011 -NCT03862105 -NCT03859128 -NCT03862131 -NCT03859154 -NCT03862157 -NCT03859193 -NCT03862170 -NCT03859206 -NCT03862274 -NCT03859271 -NCT03862417 -NCT03859349 -NCT03862430 -NCT03859362 -NCT03927521 -NCT03862911 -NCT03927027 -NCT03862950 -NCT03927040 -NCT03862976 -NCT03927105 -NCT03862989 -NCT03927183 -NCT03863080 -NCT03927222 -NCT03863093 -NCT03927248 -NCT03863132 -NCT03927261 -NCT03863145 -NCT03927274 -NCT03863184 -NCT03927339 -NCT03863210 -NCT03927391 -NCT03863223 -NCT03927456 -NCT03863236 -NCT03869242 -NCT03869268 -NCT03869437 -NCT03869476 -NCT03869515 -NCT03869632 -NCT03869762 -NCT03869788 -NCT03869892 -NCT03869944 -NCT03870035 -NCT03870113 -NCT03870152 -NCT03870269 -NCT03870308 -NCT03870321 -NCT03870347 -NCT03870399 -NCT03870412 -NCT03870438 -NCT03870451 -NCT03870529 -NCT03870607 -NCT03870620 -NCT03870698 -NCT03870750 -NCT03870763 -NCT03870789 -NCT03870828 -NCT03870854 -NCT03870867 -NCT03870919 -NCT03870945 -NCT03871036 -NCT03871127 -NCT03871153 -NCT03871192 -NCT03871205 -NCT03871257 -NCT03871322 -NCT03871335 -NCT03871348 -NCT03871387 -NCT03871426 -NCT03871686 -NCT03871699 -NCT03871725 -NCT03871829 -NCT03871842 -NCT03871855 -NCT03871868 -NCT03871933 -NCT03871959 -NCT03872102 -NCT03872115 -NCT03872180 -NCT03872206 -NCT03872375 -NCT03872388 -NCT03872427 -NCT03872505 -NCT03872531 -NCT03872583 -NCT03872635 -NCT03872661 -NCT03872739 -NCT03872778 -NCT03872791 -NCT03872856 -NCT03872908 -NCT03872947 -NCT03873025 -NCT03873090 -NCT03873116 -NCT03873168 -NCT03873285 -NCT03925896 -NCT03925909 -NCT03925935 -NCT03925974 -NCT03926013 -NCT03926039 -NCT03926091 -NCT03926143 -NCT03926260 -NCT03926286 -NCT03926299 -NCT03926338 -NCT03926351 -NCT03926403 -NCT03926468 -NCT03926507 -NCT03926520 -NCT03926559 -NCT03926624 -NCT03926832 -NCT03926845 -NCT03926923 -NCT03926936 -NCT03927495 -NCT03863301 -NCT03866603 -NCT03863340 -NCT03866590 -NCT03863418 -NCT03866655 -NCT03863457 -NCT03866694 -NCT03863483 -NCT03866785 -NCT03863496 -NCT03866967 -NCT03863522 -NCT03866980 -NCT03863626 -NCT03866993 -NCT03863717 -NCT03867045 -NCT03863730 -NCT03867084 -NCT03863743 -NCT03867123 -NCT03863769 -NCT03867175 -NCT03863847 -NCT03867188 -NCT03863860 -NCT03867214 -NCT03863873 -NCT03867240 -NCT03863912 -NCT03867331 -NCT03863977 -NCT03867370 -NCT03864042 -NCT03867396 -NCT03864172 -NCT03867409 -NCT03864198 -NCT03867435 -NCT03864211 -NCT03867487 -NCT03864302 -NCT03867526 -NCT03864328 -NCT03867578 -NCT03864406 -NCT03867591 -NCT03864419 -NCT03867630 -NCT03864523 -NCT03867682 -NCT03864562 -NCT03867708 -NCT03864575 -NCT03867747 -NCT03864614 -NCT03867786 -NCT03865030 -NCT03867799 -NCT03865056 -NCT03867916 -NCT03865082 -NCT03868020 -NCT03865121 -NCT03868228 -NCT03865212 -NCT03868267 -NCT03865277 -NCT03868293 -NCT03865511 -NCT03868332 -NCT03865563 -NCT03868358 -NCT03865589 -NCT03868397 -NCT03865641 -NCT03868423 -NCT03865654 -NCT03868449 -NCT03865797 -NCT03868462 -NCT03865875 -NCT03868475 -NCT03865888 -NCT03868553 -NCT03865966 -NCT03868579 -NCT03865992 -NCT03868605 -NCT03866109 -NCT03868657 -NCT03866161 -NCT03868683 -NCT03866187 -NCT03868722 -NCT03866200 -NCT03868852 -NCT03866213 -NCT03868865 -NCT03866239 -NCT03868891 -NCT03866291 -NCT03868943 -NCT03866382 -NCT03869034 -NCT03866447 -NCT03869190 -NCT03866499 -NCT03869216 -NCT03866525 -NCT03925883 -NCT03873311 -NCT03875573 -NCT03873376 -NCT03875560 -NCT03873402 -NCT03875638 -NCT03873493 -NCT03875690 -NCT03873519 -NCT03875716 -NCT03873532 -NCT03875781 -NCT03873571 -NCT03875820 -NCT03873584 -NCT03875833 -NCT03873649 -NCT03875859 -NCT03873662 -NCT03875885 -NCT03873792 -NCT03875924 -NCT03873805 -NCT03876028 -NCT03873818 -NCT03876093 -NCT03873870 -NCT03876145 -NCT03873883 -NCT03876210 -NCT03873974 -NCT03876236 -NCT03874000 -NCT03876249 -NCT03874013 -NCT03876301 -NCT03874026 -NCT03876327 -NCT03874052 -NCT03876392 -NCT03874182 -NCT03876509 -NCT03874273 -NCT03876522 -NCT03874325 -NCT03876561 -NCT03874364 -NCT03876574 -NCT03874416 -NCT03876587 -NCT03874442 -NCT03876613 -NCT03874572 -NCT03876652 -NCT03874598 -NCT03876678 -NCT03874624 -NCT03876769 -NCT03874676 -NCT03876834 -NCT03874741 -NCT03876847 -NCT03874754 -NCT03876860 -NCT03874858 -NCT03876886 -NCT03874884 -NCT03876912 -NCT03874897 -NCT03876925 -NCT03874936 -NCT03876951 -NCT03874962 -NCT03876977 -NCT03874975 -NCT03877055 -NCT03875027 -NCT03877068 -NCT03875040 -NCT03877146 -NCT03875053 -NCT03877211 -NCT03875079 -NCT03877302 -NCT03875092 -NCT03877315 -NCT03875105 -NCT03877588 -NCT03875118 -NCT03925337 -NCT03875144 -NCT03925350 -NCT03875235 -NCT03925428 -NCT03875287 -NCT03925454 -NCT03875300 -NCT03925467 -NCT03875313 -NCT03925610 -NCT03875326 -NCT03925636 -NCT03875339 -NCT03925662 -NCT03875365 -NCT03925675 -NCT03875404 -NCT03925688 -NCT03875495 -NCT03925727 -NCT03875534 -NCT03925870 -NCT03877601 -NCT03923153 -NCT03877614 -NCT03923166 -NCT03877627 -NCT03923179 -NCT03877718 -NCT03923218 -NCT03877731 -NCT03923257 -NCT03877939 -NCT03923270 -NCT03878017 -NCT03923322 -NCT03878095 -NCT03923374 -NCT03878108 -NCT03923504 -NCT03878134 -NCT03923569 -NCT03878199 -NCT03923673 -NCT03878251 -NCT03923686 -NCT03878316 -NCT03923777 -NCT03878342 -NCT03923803 -NCT03878446 -NCT03923842 -NCT03878459 -NCT03923881 -NCT03878472 -NCT03923998 -NCT03878485 -NCT03924011 -NCT03878524 -NCT03924037 -NCT03878719 -NCT03924050 -NCT03878732 -NCT03924089 -NCT03878771 -NCT03924206 -NCT03878823 -NCT03924232 -NCT03878849 -NCT03924245 -NCT03878875 -NCT03924258 -NCT03878927 -NCT03924271 -NCT03878940 -NCT03924349 -NCT03878979 -NCT03924414 -NCT03879044 -NCT03924466 -NCT03879057 -NCT03924583 -NCT03879096 -NCT03924843 -NCT03879109 -NCT03924856 -NCT03879122 -NCT03924869 -NCT03879135 -NCT03924882 -NCT03879148 -NCT03924895 -NCT03879174 -NCT03924947 -NCT03879213 -NCT03924986 -NCT03879278 -NCT03924999 -NCT03879369 -NCT03925012 -NCT03879460 -NCT03925090 -NCT03879486 -NCT03925103 -NCT03879512 -NCT03925168 -NCT03879551 -NCT03925233 -NCT03879577 -NCT03925246 -NCT03879629 -NCT03925285 -NCT03879694 -NCT03925298 -NCT03879798 -NCT03922035 -NCT03922074 -NCT03922100 -NCT03922165 -NCT03922204 -NCT03922295 -NCT03922308 -NCT03922321 -NCT03922438 -NCT03922477 -NCT03922490 -NCT03922555 -NCT03922724 -NCT03922776 -NCT03922841 -NCT03922867 -NCT03922880 -NCT03922906 -NCT03922984 -NCT03922997 -NCT03923062 -NCT03879811 -NCT03920683 -NCT03880019 -NCT03920800 -NCT03880045 -NCT03920813 -NCT03880097 -NCT03920826 -NCT03880123 -NCT03920839 -NCT03880240 -NCT03921008 -NCT03880279 -NCT03921021 -NCT03880292 -NCT03921034 -NCT03880305 -NCT03921073 -NCT03880370 -NCT03921294 -NCT03880409 -NCT03921372 -NCT03880422 -NCT03921554 -NCT03880513 -NCT03921671 -NCT03880539 -NCT03921684 -NCT03880565 -NCT03921710 -NCT03880604 -NCT03921749 -NCT03880695 -NCT03921801 -NCT03880708 -NCT03921814 -NCT03880799 -NCT03921827 -NCT03880851 -NCT03921866 -NCT03880877 -NCT03921879 -NCT03880903 -NCT03921931 -NCT03881046 -NCT03921957 -NCT03881059 -NCT03921983 -NCT03881098 -NCT03916679 -NCT03916705 -NCT03916718 -NCT03916744 -NCT03916757 -NCT03916770 -NCT03916783 -NCT03916796 -NCT03916809 -NCT03916913 -NCT03916978 -NCT03917043 -NCT03917069 -NCT03917082 -NCT03917173 -NCT03917381 -NCT03917498 -NCT03917654 -NCT03917693 -NCT03917719 -NCT03917966 -NCT03917992 -NCT03918005 -NCT03918109 -NCT03918135 -NCT03918174 -NCT03918226 -NCT03918252 -NCT03918278 -NCT03918317 -NCT03918330 -NCT03918356 -NCT03918369 -NCT03918382 -NCT03918499 -NCT03918538 -NCT03918668 -NCT03918772 -NCT03918915 -NCT03919071 -NCT03919136 -NCT03919162 -NCT03919175 -NCT03919188 -NCT03919214 -NCT03919240 -NCT03919253 -NCT03919292 -NCT03919383 -NCT03919461 -NCT03919474 -NCT03919526 -NCT03919552 -NCT03919630 -NCT03919682 -NCT03919734 -NCT03919773 -NCT03919864 -NCT03920033 -NCT03920072 -NCT03920150 -NCT03920189 -NCT03920202 -NCT03920293 -NCT03920397 -NCT03920449 -NCT03920514 -NCT03920527 -NCT03920631 -NCT03920657 -NCT03921996 -NCT03881111 -NCT03916289 -NCT03881124 -NCT03916302 -NCT03881137 -NCT03916354 -NCT03881189 -NCT03916419 -NCT03881228 -NCT03916458 -NCT03881254 -NCT03916510 -NCT03881267 -NCT03916536 -NCT03881306 -NCT03916601 -NCT03881319 -NCT03916627 -NCT03881345 -NCT03910764 -NCT03910842 -NCT03910894 -NCT03910985 -NCT03911037 -NCT03911115 -NCT03911128 -NCT03911193 -NCT03911271 -NCT03911310 -NCT03911336 -NCT03911388 -NCT03911453 -NCT03911531 -NCT03911557 -NCT03911791 -NCT03911817 -NCT03911869 -NCT03911921 -NCT03911973 -NCT03912064 -NCT03912142 -NCT03912168 -NCT03912311 -NCT03912389 -NCT03912402 -NCT03912415 -NCT03912454 -NCT03912480 -NCT03912519 -NCT03912558 -NCT03912571 -NCT03912623 -NCT03912636 -NCT03912818 -NCT03912831 -NCT03912857 -NCT03912935 -NCT03912948 -NCT03913117 -NCT03913182 -NCT03913234 -NCT03913286 -NCT03913312 -NCT03913416 -NCT03913429 -NCT03913455 -NCT03913559 -NCT03913741 -NCT03913806 -NCT03913923 -NCT03913936 -NCT03913949 -NCT03913962 -NCT03914001 -NCT03914014 -NCT03914066 -NCT03914092 -NCT03914170 -NCT03914209 -NCT03914248 -NCT03914300 -NCT03914352 -NCT03914378 -NCT03914417 -NCT03914443 -NCT03914586 -NCT03914612 -NCT03914625 -NCT03914638 -NCT03914716 -NCT03914742 -NCT03914768 -NCT03914794 -NCT03914820 -NCT03914846 -NCT03914911 -NCT03914950 -NCT03915002 -NCT03915054 -NCT03915106 -NCT03915132 -NCT03915171 -NCT03915184 -NCT03915249 -NCT03915288 -NCT03915379 -NCT03915405 -NCT03915418 -NCT03915444 -NCT03915457 -NCT03915548 -NCT03915626 -NCT03915652 -NCT03915678 -NCT03915704 -NCT03915730 -NCT03915873 -NCT03915912 -NCT03915951 -NCT03916029 -NCT03916068 -NCT03916094 -NCT03916237 -NCT03881410 -NCT03884777 -NCT03881488 -NCT03884751 -NCT03881514 -NCT03884816 -NCT03881605 -NCT03884829 -NCT03881657 -NCT03884868 -NCT03881683 -NCT03884972 -NCT03881735 -NCT03884985 -NCT03881761 -NCT03884998 -NCT03881774 -NCT03885076 -NCT03881787 -NCT03885154 -NCT03881826 -NCT03885219 -NCT03881839 -NCT03885232 -NCT03881878 -NCT03885258 -NCT03882034 -NCT03885284 -NCT03882060 -NCT03885297 -NCT03882203 -NCT03885388 -NCT03882281 -NCT03885557 -NCT03882307 -NCT03885570 -NCT03882385 -NCT03885726 -NCT03882411 -NCT03885791 -NCT03882528 -NCT03885817 -NCT03882606 -NCT03885830 -NCT03882801 -NCT03885908 -NCT03882840 -NCT03885947 -NCT03882853 -NCT03886181 -NCT03882866 -NCT03886220 -NCT03882970 -NCT03886311 -NCT03883048 -NCT03886389 -NCT03883087 -NCT03886441 -NCT03883100 -NCT03886493 -NCT03883152 -NCT03886532 -NCT03883217 -NCT03886649 -NCT03883243 -NCT03886662 -NCT03883269 -NCT03886740 -NCT03883464 -NCT03886831 -NCT03883490 -NCT03886844 -NCT03883568 -NCT03886896 -NCT03883672 -NCT03887013 -NCT03883698 -NCT03887091 -NCT03883750 -NCT03887130 -NCT03883776 -NCT03887156 -NCT03883802 -NCT03887195 -NCT03883815 -NCT03887208 -NCT03883919 -NCT03887364 -NCT03883945 -NCT03887442 -NCT03883958 -NCT03887455 -NCT03884010 -NCT03887494 -NCT03884101 -NCT03887663 -NCT03884127 -NCT03887702 -NCT03884140 -NCT03887754 -NCT03884192 -NCT03910634 -NCT03884348 -NCT03910647 -NCT03884426 -NCT03910660 -NCT03884517 -NCT03910699 -NCT03884556 -NCT03910712 -NCT03884582 -NCT03910738 -NCT03887910 -NCT03891173 -NCT03887936 -NCT03891147 -NCT03887962 -NCT03891238 -NCT03887975 -NCT03891355 -NCT03888092 -NCT03891394 -NCT03888105 -NCT03891433 -NCT03888248 -NCT03891472 -NCT03888274 -NCT03891576 -NCT03888287 -NCT03891615 -NCT03888495 -NCT03891654 -NCT03888534 -NCT03891667 -NCT03888547 -NCT03891706 -NCT03888612 -NCT03891719 -NCT03888664 -NCT03891732 -NCT03888677 -NCT03891784 -NCT03888846 -NCT03891823 -NCT03888859 -NCT03891836 -NCT03888950 -NCT03891901 -NCT03889002 -NCT03891914 -NCT03889093 -NCT03891953 -NCT03889106 -NCT03891979 -NCT03889119 -NCT03892018 -NCT03889158 -NCT03892044 -NCT03889223 -NCT03892187 -NCT03889249 -NCT03892213 -NCT03889275 -NCT03892265 -NCT03889483 -NCT03892408 -NCT03889626 -NCT03892421 -NCT03889743 -NCT03892525 -NCT03889769 -NCT03892538 -NCT03889795 -NCT03892642 -NCT03889821 -NCT03892655 -NCT03889899 -NCT03892668 -NCT03889912 -NCT03892681 -NCT03889951 -NCT03892720 -NCT03889990 -NCT03892785 -NCT03890042 -NCT03892798 -NCT03890055 -NCT03892967 -NCT03890068 -NCT03892980 -NCT03890185 -NCT03892993 -NCT03890198 -NCT03893019 -NCT03890211 -NCT03893058 -NCT03890224 -NCT03910244 -NCT03890237 -NCT03910257 -NCT03890289 -NCT03910335 -NCT03890367 -NCT03910374 -NCT03890575 -NCT03910387 -NCT03890640 -NCT03910413 -NCT03890679 -NCT03910426 -NCT03890731 -NCT03910439 -NCT03890744 -NCT03910452 -NCT03890757 -NCT03910530 -NCT03890939 -NCT03910543 -NCT03890952 -NCT03910582 -NCT03891069 -NCT03910595 -NCT03891108 -NCT03910621 -NCT03893110 -NCT03908372 -NCT03893136 -NCT03908424 -NCT03893162 -NCT03908528 -NCT03893292 -NCT03908632 -NCT03893370 -NCT03908671 -NCT03893396 -NCT03908697 -NCT03893487 -NCT03908788 -NCT03893539 -NCT03908814 -NCT03893643 -NCT03908827 -NCT03893682 -NCT03908840 -NCT03893695 -NCT03908944 -NCT03893903 -NCT03908983 -NCT03893929 -NCT03908996 -NCT03893955 -NCT03909152 -NCT03893981 -NCT03909204 -NCT03894007 -NCT03909256 -NCT03894215 -NCT03909282 -NCT03894267 -NCT03909321 -NCT03894293 -NCT03909334 -NCT03894540 -NCT03909412 -NCT03894553 -NCT03909438 -NCT03894618 -NCT03909477 -NCT03894709 -NCT03909529 -NCT03894852 -NCT03909607 -NCT03894865 -NCT03909620 -NCT03894891 -NCT03909724 -NCT03894982 -NCT03909802 -NCT03895255 -NCT03909880 -NCT03895281 -NCT03909893 -NCT03895294 -NCT03909971 -NCT03895359 -NCT03910101 -NCT03895450 -NCT03910127 -NCT03895502 -NCT03910140 -NCT03895593 -NCT03910231 -NCT03895684 -NCT03905902 -NCT03905941 -NCT03905954 -NCT03905967 -NCT03906006 -NCT03906045 -NCT03906058 -NCT03906071 -NCT03906201 -NCT03906214 -NCT03906227 -NCT03906253 -NCT03906292 -NCT03906448 -NCT03906526 -NCT03906539 -NCT03906565 -NCT03906643 -NCT03906669 -NCT03906682 -NCT03906708 -NCT03906812 -NCT03906838 -NCT03907007 -NCT03907098 -NCT03907358 -NCT03907384 -NCT03907436 -NCT03907475 -NCT03907488 -NCT03907514 -NCT03907527 -NCT03907566 -NCT03907579 -NCT03907670 -NCT03907748 -NCT03907787 -NCT03907800 -NCT03907826 -NCT03907852 -NCT03907865 -NCT03908099 -NCT03908138 -NCT03908164 -NCT03908177 -NCT03908255 -NCT03908320 -NCT03908333 -NCT03895710 -NCT03898388 -NCT03895723 -NCT03898284 -NCT03895788 -NCT03898453 -NCT03895905 -NCT03898583 -NCT03895918 -NCT03898596 -NCT03895944 -NCT03898622 -NCT03895970 -NCT03898648 -NCT03895996 -NCT03898661 -NCT03896035 -NCT03898687 -NCT03896074 -NCT03898726 -NCT03896113 -NCT03898791 -NCT03896204 -NCT03898856 -NCT03896230 -NCT03898895 -NCT03896269 -NCT03898908 -NCT03896373 -NCT03898921 -NCT03896399 -NCT03898973 -NCT03896412 -NCT03899077 -NCT03896503 -NCT03899129 -NCT03896516 -NCT03899155 -NCT03896542 -NCT03899246 -NCT03896568 -NCT03899272 -NCT03896646 -NCT03899298 -NCT03896659 -NCT03899337 -NCT03896672 -NCT03899376 -NCT03896685 -NCT03899415 -NCT03896737 -NCT03899428 -NCT03896750 -NCT03899441 -NCT03896854 -NCT03899467 -NCT03896867 -NCT03899506 -NCT03896906 -NCT03904810 -NCT03896997 -NCT03904823 -NCT03897036 -NCT03904862 -NCT03897049 -NCT03904888 -NCT03897127 -NCT03904927 -NCT03897166 -NCT03904966 -NCT03897218 -NCT03905135 -NCT03897244 -NCT03905148 -NCT03897257 -NCT03905161 -NCT03897270 -NCT03905174 -NCT03897283 -NCT03905317 -NCT03897439 -NCT03905343 -NCT03897491 -NCT03905356 -NCT03897504 -NCT03905369 -NCT03897543 -NCT03905434 -NCT03897556 -NCT03905460 -NCT03897595 -NCT03905473 -NCT03897634 -NCT03905512 -NCT03897647 -NCT03905525 -NCT03897686 -NCT03905538 -NCT03897829 -NCT03905603 -NCT03897881 -NCT03905681 -NCT03897959 -NCT03905694 -NCT03898102 -NCT03905720 -NCT03898167 -NCT03905824 -NCT03898180 -NCT03905876 -NCT03898245 -NCT03905889 -NCT03899610 -NCT03902379 -NCT03899636 -NCT03902340 -NCT03899766 -NCT03902470 -NCT03899792 -NCT03902496 -NCT03899805 -NCT03902665 -NCT03899857 -NCT03902678 -NCT03899987 -NCT03902730 -NCT03900078 -NCT03902769 -NCT03900104 -NCT03902782 -NCT03900117 -NCT03902834 -NCT03900299 -NCT03902886 -NCT03900312 -NCT03902899 -NCT03900325 -NCT03902951 -NCT03900364 -NCT03902977 -NCT03900377 -NCT03903029 -NCT03900442 -NCT03903146 -NCT03900468 -NCT03903185 -NCT03900520 -NCT03903224 -NCT03900585 -NCT03903276 -NCT03900598 -NCT03903393 -NCT03900624 -NCT03903419 -NCT03900637 -NCT03903458 -NCT03900650 -NCT03903471 -NCT03900676 -NCT03903562 -NCT03900715 -NCT03903614 -NCT03900793 -NCT03903640 -NCT03900819 -NCT03903666 -NCT03900845 -NCT03903705 -NCT03900871 -NCT03903744 -NCT03900884 -NCT03903770 -NCT03900910 -NCT03903783 -NCT03900936 -NCT03903835 -NCT03900949 -NCT03903848 -NCT03900975 -NCT03903887 -NCT03901118 -NCT03903952 -NCT03901183 -NCT03904004 -NCT03901261 -NCT03904043 -NCT03901339 -NCT03904069 -NCT03901365 -NCT03904095 -NCT03901378 -NCT03904108 -NCT03901417 -NCT03904134 -NCT03901469 -NCT03904199 -NCT03901495 -NCT03904225 -NCT03901573 -NCT03904251 -NCT03901651 -NCT03904342 -NCT03901664 -NCT03904355 -NCT03901703 -NCT03904368 -NCT03901755 -NCT03904485 -NCT03901781 -NCT03904511 -NCT03901950 -NCT03904537 -NCT03901963 -NCT03904563 -NCT03902080 -NCT03904589 -NCT03902184 -NCT03904602 -NCT03902197 -NCT03904628 -NCT03902223 -NCT03904719 -NCT03902262 -NCT03996161 -NCT03990493 -NCT03993301 -NCT03990506 -NCT03993249 -NCT03990532 -NCT03993314 -NCT03990571 -NCT03993327 -NCT03990597 -NCT03993353 -NCT03990610 -NCT03993379 -NCT03990623 -NCT03993561 -NCT03990675 -NCT03993613 -NCT03990896 -NCT03993626 -NCT03990961 -NCT03993678 -NCT03990974 -NCT03993691 -NCT03991065 -NCT03993743 -NCT03991104 -NCT03993821 -NCT03991130 -NCT03993860 -NCT03991169 -NCT03993873 -NCT03991247 -NCT03993899 -NCT03991286 -NCT03993912 -NCT03991403 -NCT03993925 -NCT03991429 -NCT03993964 -NCT03991494 -NCT03994055 -NCT03991520 -NCT03994068 -NCT03991559 -NCT03994094 -NCT03991598 -NCT03994107 -NCT03991663 -NCT03994133 -NCT03991702 -NCT03994172 -NCT03991741 -NCT03994185 -NCT03991793 -NCT03994211 -NCT03991819 -NCT03994263 -NCT03991832 -NCT03994315 -NCT03991845 -NCT03994367 -NCT03991884 -NCT03994393 -NCT03991897 -NCT03994406 -NCT03991910 -NCT03994484 -NCT03991962 -NCT03994588 -NCT03991975 -NCT03994601 -NCT03992131 -NCT03994705 -NCT03992144 -NCT03994744 -NCT03992170 -NCT03994796 -NCT03992209 -NCT03994848 -NCT03992326 -NCT03994913 -NCT03992339 -NCT03995017 -NCT03992456 -NCT03995082 -NCT03992521 -NCT03995147 -NCT03992573 -NCT03995511 -NCT03992625 -NCT03995602 -NCT03992664 -NCT03995641 -NCT03992677 -NCT03995667 -NCT03992833 -NCT03995706 -NCT03992859 -NCT03995823 -NCT03992885 -NCT03995836 -NCT03992911 -NCT03995888 -NCT03993015 -NCT03995953 -NCT03993054 -NCT03996005 -NCT03993106 -NCT03996057 -NCT03993210 -NCT03996148 -NCT03993223 -NCT04001582 -NCT03996239 -NCT03998891 -NCT03996265 -NCT03998761 -NCT03996291 -NCT03998930 -NCT03996356 -NCT03998969 -NCT03996395 -NCT03999008 -NCT03996408 -NCT03999034 -NCT03996460 -NCT03999151 -NCT03996473 -NCT03999164 -NCT03996486 -NCT03999177 -NCT03996590 -NCT03999190 -NCT03996642 -NCT03999203 -NCT03996668 -NCT03999333 -NCT03996681 -NCT03999437 -NCT03996928 -NCT03999502 -NCT03996954 -NCT03999515 -NCT03997110 -NCT03999658 -NCT03997123 -NCT03999671 -NCT03997188 -NCT03999684 -NCT03997201 -NCT03999697 -NCT03997214 -NCT03999710 -NCT03997370 -NCT03999723 -NCT03997396 -NCT03999749 -NCT03997435 -NCT03999775 -NCT03997448 -NCT03999840 -NCT03997474 -NCT04000165 -NCT03997513 -NCT04000204 -NCT03997539 -NCT04000269 -NCT03997643 -NCT04000282 -NCT03997669 -NCT04000295 -NCT03997682 -NCT04000373 -NCT03997760 -NCT04000386 -NCT03997786 -NCT04000412 -NCT03997799 -NCT04000451 -NCT03997890 -NCT04000464 -NCT03997903 -NCT04000477 -NCT03997942 -NCT04000490 -NCT03997968 -NCT04000503 -NCT03997994 -NCT04000529 -NCT03998020 -NCT04000555 -NCT03998033 -NCT04000581 -NCT03998085 -NCT04000698 -NCT03998098 -NCT04000711 -NCT03998150 -NCT04000737 -NCT03998189 -NCT04000763 -NCT03998254 -NCT04000880 -NCT03998293 -NCT04000906 -NCT03998345 -NCT04001010 -NCT03998358 -NCT04001023 -NCT03998514 -NCT04001075 -NCT03998553 -NCT04001101 -NCT03998566 -NCT04001127 -NCT03998579 -NCT04001400 -NCT03998618 -NCT04001413 -NCT03998657 -NCT04001543 -NCT03998696 -NCT04001569 -NCT03998722 -NCT04007081 -NCT04001621 -NCT04004338 -NCT04001725 -NCT04004312 -NCT04001751 -NCT04004416 -NCT04001777 -NCT04004442 -NCT04001829 -NCT04004468 -NCT04001842 -NCT04004507 -NCT04001933 -NCT04004572 -NCT04002024 -NCT04004637 -NCT04002089 -NCT04004650 -NCT04002115 -NCT04004702 -NCT04002128 -NCT04004767 -NCT04002219 -NCT04004858 -NCT04002271 -NCT04004871 -NCT04002284 -NCT04004897 -NCT04002297 -NCT04004910 -NCT04002362 -NCT04004962 -NCT04002401 -NCT04004975 -NCT04002479 -NCT04005040 -NCT04002596 -NCT04005144 -NCT04002622 -NCT04005157 -NCT04002661 -NCT04005170 -NCT04002674 -NCT04005209 -NCT04002778 -NCT04005222 -NCT04002804 -NCT04005235 -NCT04002817 -NCT04005339 -NCT04002947 -NCT04005365 -NCT04002986 -NCT04005521 -NCT04003012 -NCT04005625 -NCT04003038 -NCT04005638 -NCT04003051 -NCT04005651 -NCT04003077 -NCT04005690 -NCT04003168 -NCT04005716 -NCT04003181 -NCT04005820 -NCT04003233 -NCT04006041 -NCT04003246 -NCT04006067 -NCT04003363 -NCT04006119 -NCT04003415 -NCT04006132 -NCT04003558 -NCT04006223 -NCT04003597 -NCT04006249 -NCT04003610 -NCT04006275 -NCT04003623 -NCT04006301 -NCT04003636 -NCT04006314 -NCT04003649 -NCT04006405 -NCT04003662 -NCT04006496 -NCT04003701 -NCT04006522 -NCT04003792 -NCT04006691 -NCT04003818 -NCT04006769 -NCT04003844 -NCT04006795 -NCT04003896 -NCT04006821 -NCT04003935 -NCT04006834 -NCT04004026 -NCT04006847 -NCT04004104 -NCT04006951 -NCT04004117 -NCT04006990 -NCT04004221 -NCT04007029 -NCT04004234 -NCT04007055 -NCT04004273 -NCT04012827 -NCT04007276 -NCT04009681 -NCT04007341 -NCT04009538 -NCT04007354 -NCT04009811 -NCT04007432 -NCT04009837 -NCT04007458 -NCT04009876 -NCT04007471 -NCT04009915 -NCT04007497 -NCT04009941 -NCT04007549 -NCT04009967 -NCT04007588 -NCT04010006 -NCT04007601 -NCT04010071 -NCT04007614 -NCT04010097 -NCT04007640 -NCT04010214 -NCT04007744 -NCT04010227 -NCT04007757 -NCT04010305 -NCT04007770 -NCT04010357 -NCT04007809 -NCT04010383 -NCT04007835 -NCT04010409 -NCT04007874 -NCT04010461 -NCT04007978 -NCT04010487 -NCT04008017 -NCT04010500 -NCT04008030 -NCT04010552 -NCT04008069 -NCT04010799 -NCT04008134 -NCT04010825 -NCT04008238 -NCT04010877 -NCT04008251 -NCT04010955 -NCT04008264 -NCT04010968 -NCT04008277 -NCT04010994 -NCT04008368 -NCT04011033 -NCT04008381 -NCT04011059 -NCT04008394 -NCT04011319 -NCT04008407 -NCT04011332 -NCT04008511 -NCT04011410 -NCT04008537 -NCT04011592 -NCT04008563 -NCT04011605 -NCT04008706 -NCT04011631 -NCT04008732 -NCT04011696 -NCT04008797 -NCT04011865 -NCT04008888 -NCT04011878 -NCT04008940 -NCT04011930 -NCT04008966 -NCT04011982 -NCT04009005 -NCT04012021 -NCT04009044 -NCT04012138 -NCT04009070 -NCT04012294 -NCT04009083 -NCT04012346 -NCT04009096 -NCT04012502 -NCT04009109 -NCT04012528 -NCT04009122 -NCT04012554 -NCT04009174 -NCT04012606 -NCT04009213 -NCT04012619 -NCT04009226 -NCT04012645 -NCT04009265 -NCT04012658 -NCT04009278 -NCT04012671 -NCT04009317 -NCT04012723 -NCT04009421 -NCT04012749 -NCT04009434 -NCT04012801 -NCT04009460 -NCT04019678 -NCT04012879 -NCT04015999 -NCT04012892 -NCT04015986 -NCT04012905 -NCT04016116 -NCT04012918 -NCT04016129 -NCT04012970 -NCT04016142 -NCT04013048 -NCT04016168 -NCT04013126 -NCT04016181 -NCT04013139 -NCT04016350 -NCT04013178 -NCT04016376 -NCT04013217 -NCT04016389 -NCT04013256 -NCT04016571 -NCT04013334 -NCT04016584 -NCT04013542 -NCT04016623 -NCT04013568 -NCT04016675 -NCT04013672 -NCT04016779 -NCT04013685 -NCT04016805 -NCT04013750 -NCT04016818 -NCT04013802 -NCT04016948 -NCT04013841 -NCT04016974 -NCT04013854 -NCT04017130 -NCT04013880 -NCT04017143 -NCT04013984 -NCT04017286 -NCT04014075 -NCT04017377 -NCT04014101 -NCT04017455 -NCT04014179 -NCT04017546 -NCT04014244 -NCT04017650 -NCT04014257 -NCT04017728 -NCT04014283 -NCT04017754 -NCT04014309 -NCT04017819 -NCT04014478 -NCT04017845 -NCT04014530 -NCT04017897 -NCT04014881 -NCT04017936 -NCT04014894 -NCT04018053 -NCT04014985 -NCT04018118 -NCT04015024 -NCT04018131 -NCT04015037 -NCT04018248 -NCT04015063 -NCT04018287 -NCT04015206 -NCT04018547 -NCT04015245 -NCT04018625 -NCT04015336 -NCT04018677 -NCT04015375 -NCT04018859 -NCT04015388 -NCT04018872 -NCT04015492 -NCT04018898 -NCT04015531 -NCT04018963 -NCT04015544 -NCT04019002 -NCT04015609 -NCT04019054 -NCT04015622 -NCT04019197 -NCT04015661 -NCT04019223 -NCT04015700 -NCT04019262 -NCT04015739 -NCT04019288 -NCT04015765 -NCT04019327 -NCT04015778 -NCT04019379 -NCT04015791 -NCT04019535 -NCT04015804 -NCT04019548 -NCT04015856 -NCT04019652 -NCT04015882 -NCT04024826 -NCT04019730 -NCT04022408 -NCT04019834 -NCT04022343 -NCT04019912 -NCT04022460 -NCT04019964 -NCT04022551 -NCT04019990 -NCT04022733 -NCT04020029 -NCT04022746 -NCT04020094 -NCT04022772 -NCT04020133 -NCT04022785 -NCT04020172 -NCT04022798 -NCT04020185 -NCT04022837 -NCT04020198 -NCT04022876 -NCT04020276 -NCT04023019 -NCT04020380 -NCT04023071 -NCT04020406 -NCT04023084 -NCT04020419 -NCT04023110 -NCT04020523 -NCT04023136 -NCT04020575 -NCT04023149 -NCT04020744 -NCT04023201 -NCT04020809 -NCT04023240 -NCT04020835 -NCT04023279 -NCT04020848 -NCT04023292 -NCT04020913 -NCT04023331 -NCT04020978 -NCT04023409 -NCT04021043 -NCT04023422 -NCT04021082 -NCT04023448 -NCT04021108 -NCT04023526 -NCT04021160 -NCT04023617 -NCT04021186 -NCT04023669 -NCT04021212 -NCT04023825 -NCT04021238 -NCT04023864 -NCT04021277 -NCT04023890 -NCT04021316 -NCT04023916 -NCT04021368 -NCT04024072 -NCT04021420 -NCT04024085 -NCT04021446 -NCT04024202 -NCT04021459 -NCT04024215 -NCT04021498 -NCT04024228 -NCT04021524 -NCT04024254 -NCT04021537 -NCT04024267 -NCT04021576 -NCT04024280 -NCT04021589 -NCT04024319 -NCT04021615 -NCT04024332 -NCT04021654 -NCT04024345 -NCT04021706 -NCT04024384 -NCT04021784 -NCT04024436 -NCT04021914 -NCT04024449 -NCT04021927 -NCT04024462 -NCT04021992 -NCT04024514 -NCT04022005 -NCT04024566 -NCT04022018 -NCT04024618 -NCT04022057 -NCT04024696 -NCT04022187 -NCT04024735 -NCT04022213 -NCT04024761 -NCT04022226 -NCT04024774 -NCT04022239 -NCT04024800 -NCT04022330 -NCT04030429 -NCT04024839 -NCT04027400 -NCT04024878 -NCT04027348 -NCT04024917 -NCT04027556 -NCT04024930 -NCT04027647 -NCT04025021 -NCT04027764 -NCT04025112 -NCT04027777 -NCT04025164 -NCT04027803 -NCT04025216 -NCT04027894 -NCT04025229 -NCT04027946 -NCT04025242 -NCT04027985 -NCT04025281 -NCT04028011 -NCT04025307 -NCT04028050 -NCT04025320 -NCT04028063 -NCT04025372 -NCT04028115 -NCT04025437 -NCT04028167 -NCT04025450 -NCT04028180 -NCT04025541 -NCT04028245 -NCT04025567 -NCT04028375 -NCT04025580 -NCT04028388 -NCT04025593 -NCT04028440 -NCT04025606 -NCT04028453 -NCT04025645 -NCT04028466 -NCT04025710 -NCT04028479 -NCT04025801 -NCT04028518 -NCT04025840 -NCT04028531 -NCT04025879 -NCT04028570 -NCT04025918 -NCT04028596 -NCT04025931 -NCT04028778 -NCT04025944 -NCT04029038 -NCT04026035 -NCT04029077 -NCT04026048 -NCT04029155 -NCT04026100 -NCT04029181 -NCT04026113 -NCT04029272 -NCT04026191 -NCT04029337 -NCT04026204 -NCT04029350 -NCT04026230 -NCT04029363 -NCT04026269 -NCT04029428 -NCT04026321 -NCT04029441 -NCT04026360 -NCT04029467 -NCT04026412 -NCT04029688 -NCT04026516 -NCT04029714 -NCT04026529 -NCT04029727 -NCT04026542 -NCT04029766 -NCT04026620 -NCT04029792 -NCT04026659 -NCT04029857 -NCT04026763 -NCT04029909 -NCT04026789 -NCT04029922 -NCT04026841 -NCT04029948 -NCT04026958 -NCT04030000 -NCT04026984 -NCT04030052 -NCT04027049 -NCT04030104 -NCT04027088 -NCT04030130 -NCT04027101 -NCT04030195 -NCT04027270 -NCT04030260 -NCT04027309 -NCT04030338 -NCT04027322 -NCT04035980 -NCT04030455 -NCT04033328 -NCT04030468 -NCT04033302 -NCT04030507 -NCT04033354 -NCT04030546 -NCT04033406 -NCT04030559 -NCT04033432 -NCT04030572 -NCT04033497 -NCT04030624 -NCT04033536 -NCT04030741 -NCT04033549 -NCT04030819 -NCT04033627 -NCT04030884 -NCT04033744 -NCT04030975 -NCT04033822 -NCT04031092 -NCT04033874 -NCT04031235 -NCT04033887 -NCT04031261 -NCT04034004 -NCT04031287 -NCT04034043 -NCT04031339 -NCT04034173 -NCT04031378 -NCT04034199 -NCT04031521 -NCT04034225 -NCT04031534 -NCT04034238 -NCT04031560 -NCT04034251 -NCT04031638 -NCT04034264 -NCT04031677 -NCT04034355 -NCT04031703 -NCT04034394 -NCT04031729 -NCT04034446 -NCT04031781 -NCT04034459 -NCT04031872 -NCT04034472 -NCT04031885 -NCT04034550 -NCT04032067 -NCT04034589 -NCT04032080 -NCT04034641 -NCT04032119 -NCT04034823 -NCT04032132 -NCT04034914 -NCT04032158 -NCT04034927 -NCT04032236 -NCT04034940 -NCT04032262 -NCT04034953 -NCT04032353 -NCT04035096 -NCT04032392 -NCT04035148 -NCT04032418 -NCT04035213 -NCT04032470 -NCT04035252 -NCT04032600 -NCT04035265 -NCT04032691 -NCT04035291 -NCT04032704 -NCT04035421 -NCT04032769 -NCT04035434 -NCT04032821 -NCT04035447 -NCT04032847 -NCT04035460 -NCT04032860 -NCT04035473 -NCT04032951 -NCT04035486 -NCT04032964 -NCT04035590 -NCT04032990 -NCT04035616 -NCT04033029 -NCT04035642 -NCT04033081 -NCT04035707 -NCT04033094 -NCT04035811 -NCT04033107 -NCT04035837 -NCT04033120 -NCT04035876 -NCT04033146 -NCT04035954 -NCT04033172 -NCT04035967 -NCT04033198 -NCT04042090 -NCT04036019 -NCT04038801 -NCT04036149 -NCT04038736 -NCT04036344 -NCT04038879 -NCT04036409 -NCT04039022 -NCT04036448 -NCT04039100 -NCT04036461 -NCT04039126 -NCT04036565 -NCT04039152 -NCT04036604 -NCT04039191 -NCT04036643 -NCT04039230 -NCT04036656 -NCT04039399 -NCT04036682 -NCT04039451 -NCT04036721 -NCT04039516 -NCT04036760 -NCT04039607 -NCT04036929 -NCT04039672 -NCT04036994 -NCT04039750 -NCT04037007 -NCT04039828 -NCT04037241 -NCT04039867 -NCT04037254 -NCT04039893 -NCT04037267 -NCT04040036 -NCT04037358 -NCT04040088 -NCT04037384 -NCT04040114 -NCT04037423 -NCT04040140 -NCT04037436 -NCT04040166 -NCT04037462 -NCT04040179 -NCT04037488 -NCT04040205 -NCT04037527 -NCT04040218 -NCT04037553 -NCT04040231 -NCT04037566 -NCT04040244 -NCT04037579 -NCT04040361 -NCT04037618 -NCT04040374 -NCT04037748 -NCT04040400 -NCT04037787 -NCT04040426 -NCT04037800 -NCT04040491 -NCT04037813 -NCT04040569 -NCT04037852 -NCT04040634 -NCT04037891 -NCT04040673 -NCT04037956 -NCT04040686 -NCT04037982 -NCT04040699 -NCT04037995 -NCT04040712 -NCT04038138 -NCT04040725 -NCT04038229 -NCT04040790 -NCT04038242 -NCT04040855 -NCT04038307 -NCT04040881 -NCT04038346 -NCT04040894 -NCT04038359 -NCT04041011 -NCT04038372 -NCT04041050 -NCT04038385 -NCT04041128 -NCT04038411 -NCT04041310 -NCT04038437 -NCT04041505 -NCT04038450 -NCT04041674 -NCT04038463 -NCT04041700 -NCT04038489 -NCT04041726 -NCT04038502 -NCT04041882 -NCT04038554 -NCT04041895 -NCT04038606 -NCT04042051 -NCT04038619 -NCT04047628 -NCT04042116 -NCT04044885 -NCT04042259 -NCT04044872 -NCT04042376 -NCT04044937 -NCT04042467 -NCT04044950 -NCT04042480 -NCT04045015 -NCT04042506 -NCT04045028 -NCT04042519 -NCT04045067 -NCT04042532 -NCT04045080 -NCT04042545 -NCT04045119 -NCT04042558 -NCT04045158 -NCT04042597 -NCT04045314 -NCT04042701 -NCT04045392 -NCT04042714 -NCT04045444 -NCT04042753 -NCT04045470 -NCT04042805 -NCT04045496 -NCT04042831 -NCT04045613 -NCT04042870 -NCT04045652 -NCT04042922 -NCT04045678 -NCT04042935 -NCT04045691 -NCT04042948 -NCT04045717 -NCT04043104 -NCT04045730 -NCT04043117 -NCT04045756 -NCT04043156 -NCT04045795 -NCT04043169 -NCT04045821 -NCT04043260 -NCT04045847 -NCT04043312 -NCT04045860 -NCT04043390 -NCT04045951 -NCT04043416 -NCT04046003 -NCT04043494 -NCT04046016 -NCT04043520 -NCT04046055 -NCT04043676 -NCT04046094 -NCT04043715 -NCT04046133 -NCT04043832 -NCT04046159 -NCT04043845 -NCT04046172 -NCT04043923 -NCT04046185 -NCT04044040 -NCT04046328 -NCT04044131 -NCT04046445 -NCT04044170 -NCT04046575 -NCT04044209 -NCT04046601 -NCT04044222 -NCT04046614 -NCT04044248 -NCT04046653 -NCT04044313 -NCT04046848 -NCT04044326 -NCT04046887 -NCT04044352 -NCT04047004 -NCT04044378 -NCT04047095 -NCT04044430 -NCT04047134 -NCT04044547 -NCT04047173 -NCT04044560 -NCT04047186 -NCT04044573 -NCT04047225 -NCT04044651 -NCT04047251 -NCT04044716 -NCT04047264 -NCT04044742 -NCT04047290 -NCT04044755 -NCT04047303 -NCT04044768 -NCT04047316 -NCT04044833 -NCT04047602 -NCT04044859 -NCT04053192 -NCT04047641 -NCT04050215 -NCT04047680 -NCT04050176 -NCT04047693 -NCT04050228 -NCT04047706 -NCT04050280 -NCT04047732 -NCT04050397 -NCT04047758 -NCT04050436 -NCT04047771 -NCT04050462 -NCT04047784 -NCT04050514 -NCT04047797 -NCT04050553 -NCT04047862 -NCT04050579 -NCT04047901 -NCT04050709 -NCT04047953 -NCT04050774 -NCT04047966 -NCT04050787 -NCT04047979 -NCT04050852 -NCT04048031 -NCT04050930 -NCT04048083 -NCT04051047 -NCT04048148 -NCT04051060 -NCT04048187 -NCT04051099 -NCT04048278 -NCT04051112 -NCT04048291 -NCT04051125 -NCT04048317 -NCT04051203 -NCT04048343 -NCT04051216 -NCT04048421 -NCT04051307 -NCT04048538 -NCT04051411 -NCT04048785 -NCT04051606 -NCT04048889 -NCT04051658 -NCT04048941 -NCT04051697 -NCT04048954 -NCT04051736 -NCT04049058 -NCT04051827 -NCT04049188 -NCT04051931 -NCT04049214 -NCT04051996 -NCT04049227 -NCT04052061 -NCT04049253 -NCT04052074 -NCT04049305 -NCT04052100 -NCT04049331 -NCT04052113 -NCT04049344 -NCT04052126 -NCT04049357 -NCT04052152 -NCT04049370 -NCT04052204 -NCT04049383 -NCT04052308 -NCT04049448 -NCT04052321 -NCT04049474 -NCT04052334 -NCT04049513 -NCT04052412 -NCT04049539 -NCT04052555 -NCT04049604 -NCT04052607 -NCT04049617 -NCT04052659 -NCT04049669 -NCT04052698 -NCT04049695 -NCT04052737 -NCT04049747 -NCT04052880 -NCT04049825 -NCT04052893 -NCT04049864 -NCT04052971 -NCT04049903 -NCT04052997 -NCT04049929 -NCT04053010 -NCT04049942 -NCT04053062 -NCT04049968 -NCT04053088 -NCT04050085 -NCT04053166 -NCT04050111 -NCT04059081 -NCT04053205 -NCT04056247 -NCT04053283 -NCT04056221 -NCT04053309 -NCT04056260 -NCT04053322 -NCT04056273 -NCT04053426 -NCT04056442 -NCT04053673 -NCT04056676 -NCT04053699 -NCT04056754 -NCT04053816 -NCT04056832 -NCT04053842 -NCT04056845 -NCT04053868 -NCT04056858 -NCT04053972 -NCT04056910 -NCT04053985 -NCT04056923 -NCT04054037 -NCT04056949 -NCT04054063 -NCT04056975 -NCT04054154 -NCT04057040 -NCT04054167 -NCT04057066 -NCT04054206 -NCT04057183 -NCT04054219 -NCT04057196 -NCT04054349 -NCT04057209 -NCT04054362 -NCT04057222 -NCT04054453 -NCT04057274 -NCT04054505 -NCT04057313 -NCT04054518 -NCT04057365 -NCT04054531 -NCT04057443 -NCT04054557 -NCT04057638 -NCT04054609 -NCT04057664 -NCT04054687 -NCT04057729 -NCT04054726 -NCT04057794 -NCT04054752 -NCT04057807 -NCT04054882 -NCT04057846 -NCT04054960 -NCT04057924 -NCT04054986 -NCT04057976 -NCT04055012 -NCT04058015 -NCT04055038 -NCT04058028 -NCT04055220 -NCT04058132 -NCT04055311 -NCT04058145 -NCT04055441 -NCT04058158 -NCT04055467 -NCT04058171 -NCT04055480 -NCT04058197 -NCT04055493 -NCT04058223 -NCT04055584 -NCT04058236 -NCT04055597 -NCT04058327 -NCT04055610 -NCT04058353 -NCT04055649 -NCT04058366 -NCT04055675 -NCT04058379 -NCT04055714 -NCT04058470 -NCT04055766 -NCT04058509 -NCT04055792 -NCT04058522 -NCT04055818 -NCT04058561 -NCT04055831 -NCT04058587 -NCT04055844 -NCT04058600 -NCT04055948 -NCT04058704 -NCT04056026 -NCT04058756 -NCT04056078 -NCT04058795 -NCT04056117 -NCT04058964 -NCT04056130 -NCT04064060 -NCT04059159 -NCT04061733 -NCT04059172 -NCT04061707 -NCT04059224 -NCT04061772 -NCT04059237 -NCT04061785 -NCT04059393 -NCT04061811 -NCT04059484 -NCT04061824 -NCT04059562 -NCT04061863 -NCT04059588 -NCT04061928 -NCT04059601 -NCT04061967 -NCT04059679 -NCT04061980 -NCT04059731 -NCT04062006 -NCT04059809 -NCT04062032 -NCT04059822 -NCT04062045 -NCT04059835 -NCT04062058 -NCT04059861 -NCT04062110 -NCT04059874 -NCT04062162 -NCT04059887 -NCT04062201 -NCT04059900 -NCT04062266 -NCT04060043 -NCT04062279 -NCT04060121 -NCT04062305 -NCT04060160 -NCT04062331 -NCT04060238 -NCT04062344 -NCT04060251 -NCT04062448 -NCT04060264 -NCT04062526 -NCT04060277 -NCT04062552 -NCT04060303 -NCT04062617 -NCT04060342 -NCT04062656 -NCT04060368 -NCT04062708 -NCT04060394 -NCT04062721 -NCT04060407 -NCT04062747 -NCT04060459 -NCT04062877 -NCT04060472 -NCT04062929 -NCT04060511 -NCT04063020 -NCT04060550 -NCT04063072 -NCT04060589 -NCT04063163 -NCT04060732 -NCT04063189 -NCT04060836 -NCT04063254 -NCT04060849 -NCT04063449 -NCT04060862 -NCT04063462 -NCT04060888 -NCT04063514 -NCT04060927 -NCT04063527 -NCT04061109 -NCT04063566 -NCT04061135 -NCT04063631 -NCT04061161 -NCT04063683 -NCT04061187 -NCT04063722 -NCT04061213 -NCT04063839 -NCT04061226 -NCT04063852 -NCT04061239 -NCT04063865 -NCT04061278 -NCT04063891 -NCT04061291 -NCT04063956 -NCT04061343 -NCT04063982 -NCT04061395 -NCT04063995 -NCT04061408 -NCT04064021 -NCT04061421 -NCT04064034 -NCT04061512 -NCT04064047 -NCT04061590 -NCT04069572 -NCT04064151 -NCT04067102 -NCT04064190 -NCT04067037 -NCT04064281 -NCT04067115 -NCT04064294 -NCT04067167 -NCT04064307 -NCT04067180 -NCT04064359 -NCT04067336 -NCT04064411 -NCT04067414 -NCT04064424 -NCT04067427 -NCT04064437 -NCT04067453 -NCT04064567 -NCT04067492 -NCT04064736 -NCT04067518 -NCT04064788 -NCT04067544 -NCT04064840 -NCT04067596 -NCT04064892 -NCT04067609 -NCT04064957 -NCT04067622 -NCT04064983 -NCT04067635 -NCT04065009 -NCT04067648 -NCT04065022 -NCT04067687 -NCT04065087 -NCT04067778 -NCT04065139 -NCT04067830 -NCT04065152 -NCT04067960 -NCT04065217 -NCT04067973 -NCT04065269 -NCT04067986 -NCT04065282 -NCT04068103 -NCT04065308 -NCT04068155 -NCT04065321 -NCT04068181 -NCT04065399 -NCT04068194 -NCT04065516 -NCT04068220 -NCT04065555 -NCT04068246 -NCT04065737 -NCT04068376 -NCT04065776 -NCT04068415 -NCT04065789 -NCT04068480 -NCT04065802 -NCT04068506 -NCT04065815 -NCT04068519 -NCT04065893 -NCT04068597 -NCT04065984 -NCT04068610 -NCT04066023 -NCT04068636 -NCT04066166 -NCT04068649 -NCT04066205 -NCT04068675 -NCT04066361 -NCT04068740 -NCT04066491 -NCT04068753 -NCT04066530 -NCT04068766 -NCT04066543 -NCT04068831 -NCT04066569 -NCT04068896 -NCT04066595 -NCT04068961 -NCT04066621 -NCT04068974 -NCT04066634 -NCT04069026 -NCT04066647 -NCT04069052 -NCT04066660 -NCT04069208 -NCT04066725 -NCT04069234 -NCT04066777 -NCT04069273 -NCT04066790 -NCT04069286 -NCT04066816 -NCT04069325 -NCT04066868 -NCT04069455 -NCT04066894 -NCT04069533 -NCT04066920 -NCT04074759 -NCT04069702 -NCT04072653 -NCT04069793 -NCT04072640 -NCT04069819 -NCT04072679 -NCT04069884 -NCT04072718 -NCT04069897 -NCT04072783 -NCT04069910 -NCT04072796 -NCT04069936 -NCT04072822 -NCT04069949 -NCT04072835 -NCT04069975 -NCT04072874 -NCT04070001 -NCT04072900 -NCT04070040 -NCT04072913 -NCT04070131 -NCT04072952 -NCT04070209 -NCT04073017 -NCT04070222 -NCT04073043 -NCT04070300 -NCT04073147 -NCT04070313 -NCT04073160 -NCT04070352 -NCT04073173 -NCT04070443 -NCT04073212 -NCT04070534 -NCT04073251 -NCT04070768 -NCT04073290 -NCT04070781 -NCT04073329 -NCT04070898 -NCT04073342 -NCT04070976 -NCT04073485 -NCT04071106 -NCT04073511 -NCT04071184 -NCT04073524 -NCT04071223 -NCT04073537 -NCT04071236 -NCT04073550 -NCT04071262 -NCT04073602 -NCT04071314 -NCT04073615 -NCT04071340 -NCT04073680 -NCT04071353 -NCT04073706 -NCT04071379 -NCT04073745 -NCT04071431 -NCT04073784 -NCT04071457 -NCT04073823 -NCT04071574 -NCT04073888 -NCT04071626 -NCT04073927 -NCT04071665 -NCT04073940 -NCT04071691 -NCT04073953 -NCT04071756 -NCT04074031 -NCT04071847 -NCT04074096 -NCT04071899 -NCT04074135 -NCT04071925 -NCT04074239 -NCT04072042 -NCT04074330 -NCT04072068 -NCT04074343 -NCT04072107 -NCT04074408 -NCT04072146 -NCT04074421 -NCT04072198 -NCT04074460 -NCT04072263 -NCT04074473 -NCT04072289 -NCT04074486 -NCT04072302 -NCT04074512 -NCT04072367 -NCT04074525 -NCT04072380 -NCT04074564 -NCT04072393 -NCT04074642 -NCT04072406 -NCT04074720 -NCT04072445 -NCT04074746 -NCT04072458 -NCT04080570 -NCT04074772 -NCT04077827 -NCT04074785 -NCT04077749 -NCT04074824 -NCT04077840 -NCT04074902 -NCT04077866 -NCT04074941 -NCT04077983 -NCT04074967 -NCT04077996 -NCT04074993 -NCT04078139 -NCT04075058 -NCT04078152 -NCT04075097 -NCT04078217 -NCT04075149 -NCT04078230 -NCT04075188 -NCT04078269 -NCT04075253 -NCT04078295 -NCT04075266 -NCT04078386 -NCT04075292 -NCT04078425 -NCT04075396 -NCT04078451 -NCT04075422 -NCT04078542 -NCT04075539 -NCT04078737 -NCT04075604 -NCT04078763 -NCT04075721 -NCT04078828 -NCT04075734 -NCT04078841 -NCT04075747 -NCT04078867 -NCT04075851 -NCT04078945 -NCT04075877 -NCT04079049 -NCT04075903 -NCT04079166 -NCT04076033 -NCT04079179 -NCT04076059 -NCT04079270 -NCT04076111 -NCT04079296 -NCT04076137 -NCT04079309 -NCT04076189 -NCT04079361 -NCT04076280 -NCT04079439 -NCT04076332 -NCT04079504 -NCT04076345 -NCT04079517 -NCT04076397 -NCT04079595 -NCT04076462 -NCT04079699 -NCT04076501 -NCT04079712 -NCT04076514 -NCT04079738 -NCT04076579 -NCT04079777 -NCT04076605 -NCT04079868 -NCT04076618 -NCT04079881 -NCT04076683 -NCT04079894 -NCT04076696 -NCT04079946 -NCT04076761 -NCT04079959 -NCT04077021 -NCT04079985 -NCT04077060 -NCT04080024 -NCT04077073 -NCT04080128 -NCT04077086 -NCT04080141 -NCT04077099 -NCT04080154 -NCT04077112 -NCT04080232 -NCT04077255 -NCT04080245 -NCT04077307 -NCT04080258 -NCT04077359 -NCT04080284 -NCT04077372 -NCT04080362 -NCT04077463 -NCT04080414 -NCT04077489 -NCT04080427 -NCT04077515 -NCT04080531 -NCT04077723 -NCT04085523 -NCT04080583 -NCT04083170 -NCT04080674 -NCT04083131 -NCT04080687 -NCT04083183 -NCT04080726 -NCT04083196 -NCT04080804 -NCT04083235 -NCT04080830 -NCT04083274 -NCT04080843 -NCT04083313 -NCT04080921 -NCT04083365 -NCT04080934 -NCT04083378 -NCT04080999 -NCT04083443 -NCT04081103 -NCT04083495 -NCT04081116 -NCT04083534 -NCT04081168 -NCT04083586 -NCT04081181 -NCT04083599 -NCT04081220 -NCT04083651 -NCT04081246 -NCT04083729 -NCT04081259 -NCT04083768 -NCT04081298 -NCT04083859 -NCT04081389 -NCT04083898 -NCT04081402 -NCT04083911 -NCT04081415 -NCT04083937 -NCT04081558 -NCT04083963 -NCT04081571 -NCT04083976 -NCT04081636 -NCT04084015 -NCT04081688 -NCT04084067 -NCT04081701 -NCT04084119 -NCT04081753 -NCT04084158 -NCT04081779 -NCT04084236 -NCT04081805 -NCT04084249 -NCT04081870 -NCT04084366 -NCT04082065 -NCT04084431 -NCT04082117 -NCT04084496 -NCT04082143 -NCT04084561 -NCT04082182 -NCT04084600 -NCT04082260 -NCT04084665 -NCT04082286 -NCT04084704 -NCT04082338 -NCT04084717 -NCT04082364 -NCT04084730 -NCT04082455 -NCT04084912 -NCT04082520 -NCT04084938 -NCT04082572 -NCT04084951 -NCT04082676 -NCT04085042 -NCT04082689 -NCT04085055 -NCT04082780 -NCT04085081 -NCT04082793 -NCT04085120 -NCT04082832 -NCT04085159 -NCT04082897 -NCT04085237 -NCT04082910 -NCT04085250 -NCT04082936 -NCT04085276 -NCT04082962 -NCT04085315 -NCT04083027 -NCT04085367 -NCT04083053 -NCT04085419 -NCT04083066 -NCT04085471 -NCT04083079 -NCT04085497 -NCT04083092 -NCT04085510 -NCT04083118 -NCT04091022 -NCT04085705 -NCT04088396 -NCT04085796 -NCT04088370 -NCT04085861 -NCT04088409 -NCT04085887 -NCT04088474 -NCT04085952 -NCT04088500 -NCT04085991 -NCT04088604 -NCT04086082 -NCT04088643 -NCT04086134 -NCT04088708 -NCT04086173 -NCT04088786 -NCT04086199 -NCT04088838 -NCT04086212 -NCT04088864 -NCT04086251 -NCT04088877 -NCT04086264 -NCT04088890 -NCT04086290 -NCT04088942 -NCT04086303 -NCT04088968 -NCT04086316 -NCT04089007 -NCT04086394 -NCT04089046 -NCT04086472 -NCT04089150 -NCT04086485 -NCT04089163 -NCT04086524 -NCT04089189 -NCT04086589 -NCT04089215 -NCT04086628 -NCT04089280 -NCT04086667 -NCT04089358 -NCT04086732 -NCT04089449 -NCT04086758 -NCT04089475 -NCT04086771 -NCT04089501 -NCT04086784 -NCT04089527 -NCT04086875 -NCT04089553 -NCT04086901 -NCT04089579 -NCT04086966 -NCT04089631 -NCT04087018 -NCT04089657 -NCT04087083 -NCT04089761 -NCT04087096 -NCT04089787 -NCT04087174 -NCT04089904 -NCT04087239 -NCT04089982 -NCT04087252 -NCT04089995 -NCT04087278 -NCT04090047 -NCT04087330 -NCT04090060 -NCT04087408 -NCT04090125 -NCT04087421 -NCT04090164 -NCT04087447 -NCT04090203 -NCT04087564 -NCT04090268 -NCT04087577 -NCT04090346 -NCT04087629 -NCT04090398 -NCT04087642 -NCT04090463 -NCT04087694 -NCT04090528 -NCT04087759 -NCT04090554 -NCT04087785 -NCT04090567 -NCT04087967 -NCT04090632 -NCT04087980 -NCT04090645 -NCT04088006 -NCT04090671 -NCT04088032 -NCT04090710 -NCT04088045 -NCT04090736 -NCT04088058 -NCT04090775 -NCT04088110 -NCT04090931 -NCT04088188 -NCT04096417 -NCT04091087 -NCT04093388 -NCT04091126 -NCT04093375 -NCT04091178 -NCT04093401 -NCT04091204 -NCT04093414 -NCT04091217 -NCT04093466 -NCT04091230 -NCT04093492 -NCT04091243 -NCT04093505 -NCT04091282 -NCT04093557 -NCT04091321 -NCT04093570 -NCT04091334 -NCT04093596 -NCT04091386 -NCT04093648 -NCT04091399 -NCT04093687 -NCT04091490 -NCT04093778 -NCT04091503 -NCT04093791 -NCT04091516 -NCT04093947 -NCT04091542 -NCT04094025 -NCT04091568 -NCT04094077 -NCT04091620 -NCT04094116 -NCT04091672 -NCT04094129 -NCT04091698 -NCT04094142 -NCT04091750 -NCT04094311 -NCT04091763 -NCT04094402 -NCT04091776 -NCT04094454 -NCT04091789 -NCT04094480 -NCT04091867 -NCT04094506 -NCT04091919 -NCT04094519 -NCT04091958 -NCT04094610 -NCT04091971 -NCT04094675 -NCT04092010 -NCT04094688 -NCT04092127 -NCT04094766 -NCT04092179 -NCT04094779 -NCT04092192 -NCT04094818 -NCT04092231 -NCT04094896 -NCT04092257 -NCT04094961 -NCT04092270 -NCT04095000 -NCT04092283 -NCT04095026 -NCT04092335 -NCT04095169 -NCT04092400 -NCT04095208 -NCT04092556 -NCT04095221 -NCT04092595 -NCT04095234 -NCT04092673 -NCT04095273 -NCT04092803 -NCT04095299 -NCT04092816 -NCT04095312 -NCT04092959 -NCT04095351 -NCT04092985 -NCT04095364 -NCT04093024 -NCT04095390 -NCT04093102 -NCT04095416 -NCT04093115 -NCT04095585 -NCT04093128 -NCT04095689 -NCT04093141 -NCT04095715 -NCT04093154 -NCT04095780 -NCT04093167 -NCT04095858 -NCT04093206 -NCT04095884 -NCT04093271 -NCT04096066 -NCT04093323 -NCT04096183 -NCT04093362 -NCT04102150 -NCT04096534 -NCT04099225 -NCT04096560 -NCT04099147 -NCT04096638 -NCT04099251 -NCT04096690 -NCT04099277 -NCT04096703 -NCT04099342 -NCT04096716 -NCT04099381 -NCT04096794 -NCT04099420 -NCT04096807 -NCT04099563 -NCT04096820 -NCT04099589 -NCT04096833 -NCT04099602 -NCT04096898 -NCT04099615 -NCT04096911 -NCT04099641 -NCT04096924 -NCT04099784 -NCT04097002 -NCT04099797 -NCT04097028 -NCT04099836 -NCT04097067 -NCT04099862 -NCT04097158 -NCT04099888 -NCT04097171 -NCT04099901 -NCT04097197 -NCT04099914 -NCT04097223 -NCT04099966 -NCT04097249 -NCT04100018 -NCT04097262 -NCT04100044 -NCT04097301 -NCT04100057 -NCT04097353 -NCT04100070 -NCT04097366 -NCT04100109 -NCT04097444 -NCT04100174 -NCT04097470 -NCT04100187 -NCT04097613 -NCT04100291 -NCT04097639 -NCT04100330 -NCT04097756 -NCT04100577 -NCT04097769 -NCT04100655 -NCT04097886 -NCT04100707 -NCT04098055 -NCT04100733 -NCT04098068 -NCT04100759 -NCT04098081 -NCT04100811 -NCT04098094 -NCT04100967 -NCT04098185 -NCT04101292 -NCT04098237 -NCT04101331 -NCT04098250 -NCT04101357 -NCT04098406 -NCT04101409 -NCT04098432 -NCT04101435 -NCT04098458 -NCT04101513 -NCT04098471 -NCT04101539 -NCT04098640 -NCT04101578 -NCT04098653 -NCT04101656 -NCT04098666 -NCT04101760 -NCT04098705 -NCT04101812 -NCT04098718 -NCT04101851 -NCT04098744 -NCT04101890 -NCT04098783 -NCT04101929 -NCT04098796 -NCT04101981 -NCT04098809 -NCT04102020 -NCT04098887 -NCT04102046 -NCT04098926 -NCT04102098 -NCT04099017 -NCT04102124 -NCT04099134 -NCT04107454 -NCT04102228 -NCT04105062 -NCT04102254 -NCT04105010 -NCT04102358 -NCT04105075 -NCT04102371 -NCT04105270 -NCT04102397 -NCT04105283 -NCT04102423 -NCT04105335 -NCT04102436 -NCT04105348 -NCT04102553 -NCT04105374 -NCT04102605 -NCT04105413 -NCT04102618 -NCT04105465 -NCT04102657 -NCT04105478 -NCT04102722 -NCT04105530 -NCT04102930 -NCT04105543 -NCT04103021 -NCT04105569 -NCT04103099 -NCT04105582 -NCT04103112 -NCT04105647 -NCT04103372 -NCT04105894 -NCT04103398 -NCT04105920 -NCT04103450 -NCT04105985 -NCT04103463 -NCT04106024 -NCT04103502 -NCT04106076 -NCT04103515 -NCT04106115 -NCT04103528 -NCT04106219 -NCT04103554 -NCT04106232 -NCT04103567 -NCT04106245 -NCT04103619 -NCT04106284 -NCT04103645 -NCT04106323 -NCT04103658 -NCT04106362 -NCT04103684 -NCT04106375 -NCT04103697 -NCT04106414 -NCT04103762 -NCT04106453 -NCT04103853 -NCT04106492 -NCT04103905 -NCT04106505 -NCT04104074 -NCT04106518 -NCT04104113 -NCT04106609 -NCT04104139 -NCT04106661 -NCT04104334 -NCT04106700 -NCT04104347 -NCT04106726 -NCT04104373 -NCT04106778 -NCT04104386 -NCT04106817 -NCT04104412 -NCT04106843 -NCT04104464 -NCT04106856 -NCT04104529 -NCT04106973 -NCT04104542 -NCT04106986 -NCT04104607 -NCT04106999 -NCT04104633 -NCT04107077 -NCT04104672 -NCT04107103 -NCT04104685 -NCT04107116 -NCT04104724 -NCT04107142 -NCT04104776 -NCT04107155 -NCT04104789 -NCT04107181 -NCT04104815 -NCT04107207 -NCT04104893 -NCT04107233 -NCT04104945 -NCT04107324 -NCT04104984 -NCT04107350 -NCT04104997 -NCT04113018 -NCT04107480 -NCT04109885 -NCT04107623 -NCT04109807 -NCT04107636 -NCT04109924 -NCT04107649 -NCT04109937 -NCT04107727 -NCT04110015 -NCT04107896 -NCT04110041 -NCT04108013 -NCT04110054 -NCT04108026 -NCT04110093 -NCT04108117 -NCT04110145 -NCT04108182 -NCT04110184 -NCT04108195 -NCT04110210 -NCT04108208 -NCT04110249 -NCT04108247 -NCT04110275 -NCT04108260 -NCT04110301 -NCT04108325 -NCT04110405 -NCT04108377 -NCT04110483 -NCT04108481 -NCT04110756 -NCT04108494 -NCT04110769 -NCT04108559 -NCT04110782 -NCT04108572 -NCT04110834 -NCT04108598 -NCT04110847 -NCT04108624 -NCT04110860 -NCT04108676 -NCT04110912 -NCT04108754 -NCT04110925 -NCT04108780 -NCT04111081 -NCT04108819 -NCT04111107 -NCT04108832 -NCT04111172 -NCT04108858 -NCT04111250 -NCT04108871 -NCT04111302 -NCT04108897 -NCT04111315 -NCT04108988 -NCT04111341 -NCT04109027 -NCT04111380 -NCT04109040 -NCT04111445 -NCT04109066 -NCT04111458 -NCT04109079 -NCT04111497 -NCT04109092 -NCT04111510 -NCT04109131 -NCT04111588 -NCT04109209 -NCT04111705 -NCT04109274 -NCT04111783 -NCT04109326 -NCT04111822 -NCT04109378 -NCT04111835 -NCT04109391 -NCT04111913 -NCT04109456 -NCT04111978 -NCT04109482 -NCT04112238 -NCT04109495 -NCT04112342 -NCT04109521 -NCT04112381 -NCT04109547 -NCT04112498 -NCT04109573 -NCT04112511 -NCT04109612 -NCT04112589 -NCT04109664 -NCT04112667 -NCT04109677 -NCT04112771 -NCT04109690 -NCT04112901 -NCT04109703 -NCT04112940 -NCT04109729 -NCT04112966 -NCT04109755 -NCT04113005 -NCT04109781 -NCT04119297 -NCT04113070 -NCT04116437 -NCT04113096 -NCT04116411 -NCT04113122 -NCT04116502 -NCT04113187 -NCT04116541 -NCT04113226 -NCT04116645 -NCT04113265 -NCT04116658 -NCT04113369 -NCT04116671 -NCT04113499 -NCT04116710 -NCT04113525 -NCT04116723 -NCT04113603 -NCT04116775 -NCT04113616 -NCT04116801 -NCT04113785 -NCT04116827 -NCT04113811 -NCT04116905 -NCT04113837 -NCT04116970 -NCT04113863 -NCT04117061 -NCT04113902 -NCT04117087 -NCT04113967 -NCT04117139 -NCT04114123 -NCT04117321 -NCT04114136 -NCT04117555 -NCT04114305 -NCT04117594 -NCT04114370 -NCT04117607 -NCT04114422 -NCT04117620 -NCT04114448 -NCT04117698 -NCT04114604 -NCT04117841 -NCT04114617 -NCT04117945 -NCT04114630 -NCT04117958 -NCT04114786 -NCT04118036 -NCT04114825 -NCT04118062 -NCT04114851 -NCT04118114 -NCT04114981 -NCT04118140 -NCT04115007 -NCT04118166 -NCT04115059 -NCT04118218 -NCT04115111 -NCT04118244 -NCT04115163 -NCT04118361 -NCT04115254 -NCT04118426 -NCT04115306 -NCT04118582 -NCT04115527 -NCT04118595 -NCT04115618 -NCT04118634 -NCT04115631 -NCT04118647 -NCT04115735 -NCT04118725 -NCT04115761 -NCT04118842 -NCT04115826 -NCT04118855 -NCT04115878 -NCT04118868 -NCT04115956 -NCT04118881 -NCT04116021 -NCT04118920 -NCT04116047 -NCT04118933 -NCT04116073 -NCT04118998 -NCT04116086 -NCT04119011 -NCT04116125 -NCT04119024 -NCT04116138 -NCT04119037 -NCT04116151 -NCT04119115 -NCT04116164 -NCT04119141 -NCT04116203 -NCT04119154 -NCT04116281 -NCT04119206 -NCT04116320 -NCT04119284 -NCT04116359 -NCT04125563 -NCT04119336 -NCT04122443 -NCT04119349 -NCT04122404 -NCT04119453 -NCT04122456 -NCT04119622 -NCT04122469 -NCT04119635 -NCT04122625 -NCT04119674 -NCT04122716 -NCT04119830 -NCT04122807 -NCT04119869 -NCT04122820 -NCT04120025 -NCT04122911 -NCT04120103 -NCT04123145 -NCT04120116 -NCT04123262 -NCT04120129 -NCT04123301 -NCT04120168 -NCT04123340 -NCT04120246 -NCT04123366 -NCT04120298 -NCT04123379 -NCT04120324 -NCT04123392 -NCT04120350 -NCT04123418 -NCT04120363 -NCT04123470 -NCT04120454 -NCT04123483 -NCT04120519 -NCT04123509 -NCT04120584 -NCT04123535 -NCT04120649 -NCT04123574 -NCT04120701 -NCT04123626 -NCT04120805 -NCT04123704 -NCT04120896 -NCT04123925 -NCT04120974 -NCT04123990 -NCT04121039 -NCT04124094 -NCT04121052 -NCT04124107 -NCT04121117 -NCT04124172 -NCT04121130 -NCT04124198 -NCT04121169 -NCT04124237 -NCT04121260 -NCT04124497 -NCT04121273 -NCT04124510 -NCT04121286 -NCT04124549 -NCT04121325 -NCT04124588 -NCT04121338 -NCT04124601 -NCT04121390 -NCT04124640 -NCT04121442 -NCT04124666 -NCT04121455 -NCT04124679 -NCT04121507 -NCT04124692 -NCT04121572 -NCT04124705 -NCT04121624 -NCT04124731 -NCT04121637 -NCT04124796 -NCT04121676 -NCT04124874 -NCT04121819 -NCT04124991 -NCT04121897 -NCT04125004 -NCT04121936 -NCT04125043 -NCT04121975 -NCT04125134 -NCT04121988 -NCT04125277 -NCT04122105 -NCT04125316 -NCT04122118 -NCT04125342 -NCT04122170 -NCT04125446 -NCT04122183 -NCT04125459 -NCT04122235 -NCT04125498 -NCT04122339 -NCT04125550 -NCT04122352 -NCT04131166 -NCT04125628 -NCT04128306 -NCT04125641 -NCT04128267 -NCT04125693 -NCT04128332 -NCT04125719 -NCT04128358 -NCT04125836 -NCT04128423 -NCT04125849 -NCT04128501 -NCT04125875 -NCT04128618 -NCT04125914 -NCT04128631 -NCT04125953 -NCT04128696 -NCT04125979 -NCT04128709 -NCT04126005 -NCT04128748 -NCT04126018 -NCT04128800 -NCT04126057 -NCT04129099 -NCT04126070 -NCT04129125 -NCT04126200 -NCT04129151 -NCT04126213 -NCT04129216 -NCT04126226 -NCT04129255 -NCT04126304 -NCT04129281 -NCT04126408 -NCT04129294 -NCT04126460 -NCT04129320 -NCT04126473 -NCT04129346 -NCT04126525 -NCT04129385 -NCT04126551 -NCT04129411 -NCT04126590 -NCT04129424 -NCT04126616 -NCT04129437 -NCT04126655 -NCT04129450 -NCT04126668 -NCT04129502 -NCT04126681 -NCT04129515 -NCT04126707 -NCT04129554 -NCT04126720 -NCT04129606 -NCT04126733 -NCT04129645 -NCT04126811 -NCT04129697 -NCT04126824 -NCT04129710 -NCT04126876 -NCT04129775 -NCT04126902 -NCT04129788 -NCT04126993 -NCT04129853 -NCT04127019 -NCT04129931 -NCT04127110 -NCT04129996 -NCT04127149 -NCT04130074 -NCT04127214 -NCT04130152 -NCT04127227 -NCT04130204 -NCT04127279 -NCT04130243 -NCT04127318 -NCT04130399 -NCT04127396 -NCT04130425 -NCT04127617 -NCT04130516 -NCT04127721 -NCT04130542 -NCT04127760 -NCT04130750 -NCT04127838 -NCT04130763 -NCT04127929 -NCT04130776 -NCT04127981 -NCT04130828 -NCT04127994 -NCT04130854 -NCT04128020 -NCT04130867 -NCT04128033 -NCT04130919 -NCT04128072 -NCT04131036 -NCT04128085 -NCT04131153 -NCT04128163 -NCT04137068 -NCT04131192 -NCT04134247 -NCT04131205 -NCT04134221 -NCT04131231 -NCT04134260 -NCT04131270 -NCT04134312 -NCT04131413 -NCT04134325 -NCT04131426 -NCT04134390 -NCT04131491 -NCT04134455 -NCT04131543 -NCT04134468 -NCT04131621 -NCT04134559 -NCT04131634 -NCT04134598 -NCT04131660 -NCT04134715 -NCT04131764 -NCT04134741 -NCT04131803 -NCT04134819 -NCT04131920 -NCT04134884 -NCT04131933 -NCT04134897 -NCT04131946 -NCT04134936 -NCT04131985 -NCT04135118 -NCT04131998 -NCT04135261 -NCT04132063 -NCT04135313 -NCT04132102 -NCT04135326 -NCT04132154 -NCT04135352 -NCT04132167 -NCT04135456 -NCT04132193 -NCT04135508 -NCT04132219 -NCT04135573 -NCT04132323 -NCT04135664 -NCT04132349 -NCT04135690 -NCT04132362 -NCT04135755 -NCT04132375 -NCT04135768 -NCT04132505 -NCT04135781 -NCT04132661 -NCT04135807 -NCT04132739 -NCT04135820 -NCT04132778 -NCT04135833 -NCT04132817 -NCT04135872 -NCT04132843 -NCT04136093 -NCT04132856 -NCT04136132 -NCT04132960 -NCT04136249 -NCT04133077 -NCT04136275 -NCT04133142 -NCT04136340 -NCT04133220 -NCT04136353 -NCT04133324 -NCT04136418 -NCT04133337 -NCT04136431 -NCT04133415 -NCT04136496 -NCT04133441 -NCT04136522 -NCT04133610 -NCT04136548 -NCT04133636 -NCT04136587 -NCT04133662 -NCT04136600 -NCT04133766 -NCT04136665 -NCT04133870 -NCT04136717 -NCT04133883 -NCT04136756 -NCT04133948 -NCT04136769 -NCT04134000 -NCT04136782 -NCT04134065 -NCT04136847 -NCT04134117 -NCT04136860 -NCT04134130 -NCT04136886 -NCT04134182 -NCT04136912 -NCT04134208 -NCT04142645 -NCT04137107 -NCT04139772 -NCT04137185 -NCT04139577 -NCT04137237 -NCT04139902 -NCT04137289 -NCT04139941 -NCT04137302 -NCT04139967 -NCT04137406 -NCT04139980 -NCT04137510 -NCT04139993 -NCT04137536 -NCT04140019 -NCT04137575 -NCT04140097 -NCT04137627 -NCT04140162 -NCT04137640 -NCT04140214 -NCT04137653 -NCT04140292 -NCT04137679 -NCT04140318 -NCT04137744 -NCT04140409 -NCT04137809 -NCT04140474 -NCT04137900 -NCT04140487 -NCT04137926 -NCT04140500 -NCT04138030 -NCT04140513 -NCT04138069 -NCT04140526 -NCT04138095 -NCT04140591 -NCT04138186 -NCT04140617 -NCT04138212 -NCT04140825 -NCT04138316 -NCT04140890 -NCT04138329 -NCT04140916 -NCT04138342 -NCT04141150 -NCT04138368 -NCT04141163 -NCT04138381 -NCT04141176 -NCT04138602 -NCT04141215 -NCT04138615 -NCT04141254 -NCT04138628 -NCT04141319 -NCT04138654 -NCT04141449 -NCT04138706 -NCT04141462 -NCT04138719 -NCT04141488 -NCT04138784 -NCT04141644 -NCT04138823 -NCT04141696 -NCT04138875 -NCT04141709 -NCT04138901 -NCT04141774 -NCT04138914 -NCT04141787 -NCT04139018 -NCT04141891 -NCT04139057 -NCT04141917 -NCT04139070 -NCT04141943 -NCT04139096 -NCT04141969 -NCT04139122 -NCT04141995 -NCT04139135 -NCT04142060 -NCT04139148 -NCT04142099 -NCT04139187 -NCT04142151 -NCT04139226 -NCT04142177 -NCT04139304 -NCT04142229 -NCT04139317 -NCT04142424 -NCT04139330 -NCT04142476 -NCT04139395 -NCT04142489 -NCT04139408 -NCT04142515 -NCT04139434 -NCT04142554 -NCT04139460 -NCT04142619 -NCT04139551 -NCT04142632 -NCT04139564 -NCT04148196 -NCT04142710 -NCT04145427 -NCT04142814 -NCT04145388 -NCT04142892 -NCT04145440 -NCT04142931 -NCT04145518 -NCT04142957 -NCT04145531 -NCT04143191 -NCT04145570 -NCT04143230 -NCT04145622 -NCT04143282 -NCT04145635 -NCT04143295 -NCT04145661 -NCT04143360 -NCT04145700 -NCT04143386 -NCT04145739 -NCT04143399 -NCT04145752 -NCT04143477 -NCT04145804 -NCT04143516 -NCT04145843 -NCT04143607 -NCT04145895 -NCT04143659 -NCT04146012 -NCT04143711 -NCT04146038 -NCT04143724 -NCT04146051 -NCT04143750 -NCT04146103 -NCT04143776 -NCT04146181 -NCT04143789 -NCT04146194 -NCT04143802 -NCT04146272 -NCT04143893 -NCT04146298 -NCT04143906 -NCT04146376 -NCT04143932 -NCT04146402 -NCT04143984 -NCT04146441 -NCT04144023 -NCT04146597 -NCT04144127 -NCT04146610 -NCT04144140 -NCT04146649 -NCT04144179 -NCT04146779 -NCT04144231 -NCT04146831 -NCT04144283 -NCT04146961 -NCT04144296 -NCT04147078 -NCT04144309 -NCT04147117 -NCT04144374 -NCT04147182 -NCT04144387 -NCT04147234 -NCT04144491 -NCT04147247 -NCT04144517 -NCT04147299 -NCT04144530 -NCT04147312 -NCT04144569 -NCT04147429 -NCT04144582 -NCT04147442 -NCT04144608 -NCT04147481 -NCT04144686 -NCT04147494 -NCT04144699 -NCT04147507 -NCT04144725 -NCT04147533 -NCT04144842 -NCT04147637 -NCT04144855 -NCT04147676 -NCT04144907 -NCT04147741 -NCT04145011 -NCT04147767 -NCT04145024 -NCT04147793 -NCT04145115 -NCT04147806 -NCT04145180 -NCT04147819 -NCT04145193 -NCT04147884 -NCT04145297 -NCT04148066 -NCT04145323 -NCT04148144 -NCT04145349 -NCT04152863 -NCT04148222 -NCT04150731 -NCT04148248 -NCT04150705 -NCT04148430 -NCT04150744 -NCT04148534 -NCT04150757 -NCT04148586 -NCT04150822 -NCT04148612 -NCT04150848 -NCT04148625 -NCT04150861 -NCT04148651 -NCT04150874 -NCT04148742 -NCT04150887 -NCT04148768 -NCT04150900 -NCT04148781 -NCT04150913 -NCT04148807 -NCT04150939 -NCT04148885 -NCT04150965 -NCT04148898 -NCT04150991 -NCT04148911 -NCT04151030 -NCT04148937 -NCT04151082 -NCT04148963 -NCT04151147 -NCT04149015 -NCT04151173 -NCT04149054 -NCT04151186 -NCT04149093 -NCT04151212 -NCT04149145 -NCT04151238 -NCT04149197 -NCT04151277 -NCT04149223 -NCT04151329 -NCT04149275 -NCT04151342 -NCT04149314 -NCT04151355 -NCT04149353 -NCT04151368 -NCT04149431 -NCT04151446 -NCT04149444 -NCT04151550 -NCT04149496 -NCT04151563 -NCT04149522 -NCT04151615 -NCT04149535 -NCT04151667 -NCT04149574 -NCT04151706 -NCT04149600 -NCT04151719 -NCT04149626 -NCT04151732 -NCT04149652 -NCT04151810 -NCT04149691 -NCT04151836 -NCT04149704 -NCT04151940 -NCT04149821 -NCT04152018 -NCT04149834 -NCT04152044 -NCT04149847 -NCT04152057 -NCT04150029 -NCT04152096 -NCT04150042 -NCT04152109 -NCT04150120 -NCT04152148 -NCT04150198 -NCT04152226 -NCT04150211 -NCT04152265 -NCT04150250 -NCT04152343 -NCT04150289 -NCT04152356 -NCT04150315 -NCT04152499 -NCT04150445 -NCT04152564 -NCT04150484 -NCT04152577 -NCT04150497 -NCT04152590 -NCT04150562 -NCT04152655 -NCT04150575 -NCT04152720 -NCT04150640 -NCT04152759 -NCT04150679 -NCT04152798 -NCT04150692 -NCT04158362 -NCT04152889 -NCT04155749 -NCT04152902 -NCT04155710 -NCT04152928 -NCT04155801 -NCT04153019 -NCT04155814 -NCT04153058 -NCT04155840 -NCT04153110 -NCT04155853 -NCT04153175 -NCT04155918 -NCT04153214 -NCT04155944 -NCT04153409 -NCT04155970 -NCT04153513 -NCT04156087 -NCT04153552 -NCT04156100 -NCT04153565 -NCT04156178 -NCT04153578 -NCT04156243 -NCT04153669 -NCT04156256 -NCT04153682 -NCT04156269 -NCT04153708 -NCT04156295 -NCT04153721 -NCT04156347 -NCT04153734 -NCT04156399 -NCT04153799 -NCT04156464 -NCT04154098 -NCT04156555 -NCT04154124 -NCT04156633 -NCT04154137 -NCT04156659 -NCT04154189 -NCT04156698 -NCT04154228 -NCT04156711 -NCT04154241 -NCT04156828 -NCT04154280 -NCT04156958 -NCT04154306 -NCT04156984 -NCT04154319 -NCT04156997 -NCT04154358 -NCT04157088 -NCT04154371 -NCT04157127 -NCT04154410 -NCT04157140 -NCT04154436 -NCT04157166 -NCT04154475 -NCT04157283 -NCT04154579 -NCT04157309 -NCT04154644 -NCT04157374 -NCT04154709 -NCT04157478 -NCT04154722 -NCT04157491 -NCT04154839 -NCT04157517 -NCT04154891 -NCT04157530 -NCT04154943 -NCT04157621 -NCT04154956 -NCT04157660 -NCT04155008 -NCT04157712 -NCT04155034 -NCT04157738 -NCT04155099 -NCT04157764 -NCT04155190 -NCT04157842 -NCT04155203 -NCT04157855 -NCT04155242 -NCT04157920 -NCT04155294 -NCT04157946 -NCT04155307 -NCT04157985 -NCT04155359 -NCT04158141 -NCT04155398 -NCT04158193 -NCT04155411 -NCT04158245 -NCT04155541 -NCT04158297 -NCT04155580 -NCT04158336 -NCT04155645 -NCT04158349 -NCT04155671 -NCT04163302 -NCT04158414 -NCT04161092 -NCT04158440 -NCT04161079 -NCT04158505 -NCT04161118 -NCT04158518 -NCT04161157 -NCT04158531 -NCT04161183 -NCT04158557 -NCT04161196 -NCT04158583 -NCT04161222 -NCT04158635 -NCT04161248 -NCT04158648 -NCT04161339 -NCT04158661 -NCT04161365 -NCT04158700 -NCT04161391 -NCT04158726 -NCT04161417 -NCT04158739 -NCT04161482 -NCT04158817 -NCT04161495 -NCT04158830 -NCT04161521 -NCT04158843 -NCT04161664 -NCT04158856 -NCT04161742 -NCT04158947 -NCT04161755 -NCT04158986 -NCT04161794 -NCT04159025 -NCT04161833 -NCT04159051 -NCT04161872 -NCT04159077 -NCT04161885 -NCT04159090 -NCT04162015 -NCT04159142 -NCT04162067 -NCT04159155 -NCT04162093 -NCT04159363 -NCT04162119 -NCT04159376 -NCT04162158 -NCT04159571 -NCT04162171 -NCT04159649 -NCT04162210 -NCT04159792 -NCT04162223 -NCT04159805 -NCT04162301 -NCT04159818 -NCT04162327 -NCT04159831 -NCT04162340 -NCT04159844 -NCT04162353 -NCT04159857 -NCT04162379 -NCT04159870 -NCT04162405 -NCT04159896 -NCT04162535 -NCT04159974 -NCT04162587 -NCT04160052 -NCT04162665 -NCT04160065 -NCT04162704 -NCT04160130 -NCT04162717 -NCT04160143 -NCT04162821 -NCT04160156 -NCT04162834 -NCT04160182 -NCT04162860 -NCT04160195 -NCT04162873 -NCT04160416 -NCT04162925 -NCT04160442 -NCT04162938 -NCT04160494 -NCT04163042 -NCT04160546 -NCT04163094 -NCT04160559 -NCT04163107 -NCT04160585 -NCT04163133 -NCT04160598 -NCT04163146 -NCT04160650 -NCT04163159 -NCT04160715 -NCT04163237 -NCT04160975 -NCT04163289 -NCT04161014 -NCT04169022 -NCT04163315 -NCT04166032 -NCT04163354 -NCT04166006 -NCT04163380 -NCT04166058 -NCT04163432 -NCT04166097 -NCT04163536 -NCT04166214 -NCT04163575 -NCT04166240 -NCT04163653 -NCT04166253 -NCT04163692 -NCT04166279 -NCT04163718 -NCT04166318 -NCT04163861 -NCT04166344 -NCT04163887 -NCT04166383 -NCT04163900 -NCT04166409 -NCT04163952 -NCT04166435 -NCT04164017 -NCT04166461 -NCT04164056 -NCT04166487 -NCT04164069 -NCT04166565 -NCT04164082 -NCT04166604 -NCT04164095 -NCT04166721 -NCT04164147 -NCT04166734 -NCT04164186 -NCT04166799 -NCT04164238 -NCT04166812 -NCT04164251 -NCT04166838 -NCT04164290 -NCT04166877 -NCT04164368 -NCT04166929 -NCT04164615 -NCT04167007 -NCT04164732 -NCT04167085 -NCT04164745 -NCT04167137 -NCT04164797 -NCT04167163 -NCT04164836 -NCT04167293 -NCT04164862 -NCT04167436 -NCT04164875 -NCT04167566 -NCT04164888 -NCT04167618 -NCT04164901 -NCT04167631 -NCT04164979 -NCT04167657 -NCT04164992 -NCT04167696 -NCT04165031 -NCT04167774 -NCT04165070 -NCT04167917 -NCT04165083 -NCT04167969 -NCT04165096 -NCT04168138 -NCT04165109 -NCT04168242 -NCT04165174 -NCT04168281 -NCT04165187 -NCT04168320 -NCT04165200 -NCT04168346 -NCT04165278 -NCT04168359 -NCT04165317 -NCT04168411 -NCT04165330 -NCT04168502 -NCT04165395 -NCT04168528 -NCT04165460 -NCT04168541 -NCT04165512 -NCT04168788 -NCT04165590 -NCT04168801 -NCT04165603 -NCT04168866 -NCT04165772 -NCT04168892 -NCT04165785 -NCT04168931 -NCT04165941 -NCT04168944 -NCT04165967 -NCT04168957 -NCT04165993 -NCT04175184 -NCT04169035 -NCT04172454 -NCT04169074 -NCT04172402 -NCT04169113 -NCT04172506 -NCT04169152 -NCT04172532 -NCT04169178 -NCT04172571 -NCT04169321 -NCT04172597 -NCT04169334 -NCT04172649 -NCT04169347 -NCT04172675 -NCT04169399 -NCT04172701 -NCT04169529 -NCT04172714 -NCT04169555 -NCT04172753 -NCT04169672 -NCT04172805 -NCT04169698 -NCT04172818 -NCT04169711 -NCT04172844 -NCT04169737 -NCT04173013 -NCT04169763 -NCT04173052 -NCT04169932 -NCT04173234 -NCT04169984 -NCT04173247 -NCT04169997 -NCT04173286 -NCT04170062 -NCT04173325 -NCT04170075 -NCT04173338 -NCT04170101 -NCT04173455 -NCT04170153 -NCT04173507 -NCT04170179 -NCT04173533 -NCT04170244 -NCT04173546 -NCT04170257 -NCT04173559 -NCT04170309 -NCT04173585 -NCT04170465 -NCT04173624 -NCT04170478 -NCT04173676 -NCT04170504 -NCT04173689 -NCT04170530 -NCT04173780 -NCT04170556 -NCT04173897 -NCT04170595 -NCT04173923 -NCT04170803 -NCT04174079 -NCT04170920 -NCT04174157 -NCT04170946 -NCT04174183 -NCT04170959 -NCT04174196 -NCT04171102 -NCT04174248 -NCT04171141 -NCT04174326 -NCT04171219 -NCT04174339 -NCT04171284 -NCT04174352 -NCT04171505 -NCT04174391 -NCT04171609 -NCT04174430 -NCT04171622 -NCT04174482 -NCT04171700 -NCT04174521 -NCT04171726 -NCT04174599 -NCT04171791 -NCT04174612 -NCT04171843 -NCT04174716 -NCT04171908 -NCT04174729 -NCT04171934 -NCT04174781 -NCT04171986 -NCT04174911 -NCT04172025 -NCT04174950 -NCT04172220 -NCT04175145 -NCT04172259 -NCT04175158 -NCT04172272 -NCT04175171 -NCT04172350 -NCT04181450 -NCT04175197 -NCT04178044 -NCT04175210 -NCT04178005 -NCT04175301 -NCT04178057 -NCT04175431 -NCT04178174 -NCT04175444 -NCT04178226 -NCT04175470 -NCT04178252 -NCT04175587 -NCT04178265 -NCT04175639 -NCT04178330 -NCT04175678 -NCT04178343 -NCT04175691 -NCT04178460 -NCT04175730 -NCT04178642 -NCT04175769 -NCT04178759 -NCT04175847 -NCT04178772 -NCT04175899 -NCT04178798 -NCT04175912 -NCT04178811 -NCT04175964 -NCT04178902 -NCT04176016 -NCT04178915 -NCT04176029 -NCT04178928 -NCT04176081 -NCT04178954 -NCT04176211 -NCT04178980 -NCT04176237 -NCT04179032 -NCT04176250 -NCT04179045 -NCT04176302 -NCT04179084 -NCT04176354 -NCT04179110 -NCT04176380 -NCT04179162 -NCT04176393 -NCT04179370 -NCT04176497 -NCT04179396 -NCT04176549 -NCT04179409 -NCT04176575 -NCT04179461 -NCT04176614 -NCT04179578 -NCT04176692 -NCT04179656 -NCT04176718 -NCT04179864 -NCT04176757 -NCT04179890 -NCT04176809 -NCT04179929 -NCT04176848 -NCT04179942 -NCT04176861 -NCT04179968 -NCT04176900 -NCT04180007 -NCT04176913 -NCT04180033 -NCT04176952 -NCT04180072 -NCT04176978 -NCT04180176 -NCT04177004 -NCT04180215 -NCT04177056 -NCT04180241 -NCT04177108 -NCT04180371 -NCT04177290 -NCT04180384 -NCT04177368 -NCT04180475 -NCT04177407 -NCT04180501 -NCT04177420 -NCT04180579 -NCT04177602 -NCT04180592 -NCT04177615 -NCT04180748 -NCT04177628 -NCT04180761 -NCT04177797 -NCT04180774 -NCT04177810 -NCT04180995 -NCT04177823 -NCT04181060 -NCT04177875 -NCT04181203 -NCT04177940 -NCT04181372 -NCT04177953 -NCT04187495 -NCT04181463 -NCT04184726 -NCT04181489 -NCT04184713 -NCT04181645 -NCT04184817 -NCT04181684 -NCT04184869 -NCT04181788 -NCT04184882 -NCT04181827 -NCT04184921 -NCT04181866 -NCT04185038 -NCT04181905 -NCT04185116 -NCT04181918 -NCT04185220 -NCT04181931 -NCT04185272 -NCT04181944 -NCT04185311 -NCT04182009 -NCT04185337 -NCT04182152 -NCT04185350 -NCT04182204 -NCT04185389 -NCT04182347 -NCT04185428 -NCT04182516 -NCT04185454 -NCT04182555 -NCT04185467 -NCT04182568 -NCT04185545 -NCT04182581 -NCT04185610 -NCT04182594 -NCT04185649 -NCT04182659 -NCT04185701 -NCT04182685 -NCT04185766 -NCT04182698 -NCT04185831 -NCT04182724 -NCT04185870 -NCT04182789 -NCT04185883 -NCT04182867 -NCT04185922 -NCT04182893 -NCT04185974 -NCT04182906 -NCT04186013 -NCT04182945 -NCT04186052 -NCT04182984 -NCT04186078 -NCT04182997 -NCT04186104 -NCT04183036 -NCT04186117 -NCT04183049 -NCT04186143 -NCT04183062 -NCT04186156 -NCT04183088 -NCT04186234 -NCT04183101 -NCT04186286 -NCT04183166 -NCT04186520 -NCT04183192 -NCT04186559 -NCT04183361 -NCT04186585 -NCT04183478 -NCT04186637 -NCT04183491 -NCT04186754 -NCT04183673 -NCT04186780 -NCT04183699 -NCT04186806 -NCT04183712 -NCT04186819 -NCT04183764 -NCT04186832 -NCT04183777 -NCT04186845 -NCT04184011 -NCT04186923 -NCT04184050 -NCT04186988 -NCT04184154 -NCT04187066 -NCT04184232 -NCT04187079 -NCT04184414 -NCT04187105 -NCT04184518 -NCT04187287 -NCT04184531 -NCT04187352 -NCT04184557 -NCT04187404 -NCT04184622 -NCT04187456 -NCT04184661 -NCT04192929 -NCT04187547 -NCT04190381 -NCT04187703 -NCT04190342 -NCT04187716 -NCT04190407 -NCT04187755 -NCT04190433 -NCT04187781 -NCT04190446 -NCT04187833 -NCT04190472 -NCT04187872 -NCT04190550 -NCT04187898 -NCT04190589 -NCT04187937 -NCT04190628 -NCT04188119 -NCT04190641 -NCT04188145 -NCT04190745 -NCT04188158 -NCT04190758 -NCT04188184 -NCT04190823 -NCT04188392 -NCT04190849 -NCT04188405 -NCT04190992 -NCT04188418 -NCT04191018 -NCT04188522 -NCT04191031 -NCT04188535 -NCT04191057 -NCT04188548 -NCT04191096 -NCT04188574 -NCT04191135 -NCT04188587 -NCT04191187 -NCT04188600 -NCT04191317 -NCT04188639 -NCT04191343 -NCT04188665 -NCT04191369 -NCT04188678 -NCT04191382 -NCT04188847 -NCT04191421 -NCT04188860 -NCT04191460 -NCT04188951 -NCT04191499 -NCT04188990 -NCT04191603 -NCT04189055 -NCT04191616 -NCT04189094 -NCT04191759 -NCT04189107 -NCT04191837 -NCT04189133 -NCT04191889 -NCT04189198 -NCT04191928 -NCT04189211 -NCT04191941 -NCT04189237 -NCT04191967 -NCT04189263 -NCT04192071 -NCT04189419 -NCT04192253 -NCT04189445 -NCT04192279 -NCT04189471 -NCT04192331 -NCT04189484 -NCT04192344 -NCT04189497 -NCT04192396 -NCT04189601 -NCT04192474 -NCT04189614 -NCT04192487 -NCT04189705 -NCT04192500 -NCT04189757 -NCT04192539 -NCT04189783 -NCT04192565 -NCT04189822 -NCT04192643 -NCT04189874 -NCT04192682 -NCT04189900 -NCT04192695 -NCT04189926 -NCT04192708 -NCT04189952 -NCT04192773 -NCT04190043 -NCT04192812 -NCT04190056 -NCT04192890 -NCT04190121 -NCT04192903 -NCT04190316 -NCT04197856 -NCT04192981 -NCT04195399 -NCT04193007 -NCT04195373 -NCT04193059 -NCT04195412 -NCT04193085 -NCT04195438 -NCT04193098 -NCT04195503 -NCT04193150 -NCT04195555 -NCT04193202 -NCT04195633 -NCT04193280 -NCT04195646 -NCT04193293 -NCT04195685 -NCT04193319 -NCT04195724 -NCT04193358 -NCT04195750 -NCT04193475 -NCT04195828 -NCT04193553 -NCT04195945 -NCT04193579 -NCT04195971 -NCT04193592 -NCT04195984 -NCT04193644 -NCT04196010 -NCT04193696 -NCT04196062 -NCT04193722 -NCT04196075 -NCT04193813 -NCT04196088 -NCT04193878 -NCT04196101 -NCT04193891 -NCT04196153 -NCT04193904 -NCT04196205 -NCT04193956 -NCT04196244 -NCT04193969 -NCT04196257 -NCT04193995 -NCT04196283 -NCT04194008 -NCT04196387 -NCT04194034 -NCT04196413 -NCT04194073 -NCT04196465 -NCT04194086 -NCT04196491 -NCT04194112 -NCT04196504 -NCT04194125 -NCT04196530 -NCT04194164 -NCT04196803 -NCT04194203 -NCT04196933 -NCT04194242 -NCT04196972 -NCT04194268 -NCT04196985 -NCT04194333 -NCT04197011 -NCT04194359 -NCT04197089 -NCT04194372 -NCT04197141 -NCT04194385 -NCT04197219 -NCT04194463 -NCT04197245 -NCT04194528 -NCT04197284 -NCT04194541 -NCT04197297 -NCT04194554 -NCT04197310 -NCT04194632 -NCT04197336 -NCT04194658 -NCT04197349 -NCT04194684 -NCT04197492 -NCT04194723 -NCT04197674 -NCT04194775 -NCT04197687 -NCT04194801 -NCT04197713 -NCT04194840 -NCT04197726 -NCT04194931 -NCT04197739 -NCT04194944 -NCT04197778 -NCT04194957 -NCT04197791 -NCT04195100 -NCT04197817 -NCT04195139 -NCT04197843 -NCT04195217 -NCT04204577 -NCT04197882 -NCT04201431 -NCT04197908 -NCT04201249 -NCT04197934 -NCT04201444 -NCT04197947 -NCT04201457 -NCT04197960 -NCT04201561 -NCT04197986 -NCT04201626 -NCT04197999 -NCT04201717 -NCT04198051 -NCT04201730 -NCT04198064 -NCT04201743 -NCT04198090 -NCT04201756 -NCT04198103 -NCT04201873 -NCT04198246 -NCT04201925 -NCT04198259 -NCT04201990 -NCT04198324 -NCT04202003 -NCT04198454 -NCT04202016 -NCT04198727 -NCT04202094 -NCT04198753 -NCT04202159 -NCT04198766 -NCT04202185 -NCT04198818 -NCT04202484 -NCT04198922 -NCT04202523 -NCT04199026 -NCT04202601 -NCT04199104 -NCT04202627 -NCT04199195 -NCT04202640 -NCT04199260 -NCT04202705 -NCT04199338 -NCT04202744 -NCT04199390 -NCT04202796 -NCT04199468 -NCT04202835 -NCT04199520 -NCT04202874 -NCT04199546 -NCT04202965 -NCT04199559 -NCT04202978 -NCT04199637 -NCT04203160 -NCT04199754 -NCT04203199 -NCT04199988 -NCT04203316 -NCT04200014 -NCT04203342 -NCT04200040 -NCT04203394 -NCT04200066 -NCT04203472 -NCT04200079 -NCT04203485 -NCT04200105 -NCT04203511 -NCT04200287 -NCT04203524 -NCT04200378 -NCT04203589 -NCT04200404 -NCT04203641 -NCT04200417 -NCT04203719 -NCT04200443 -NCT04203875 -NCT04200482 -NCT04203901 -NCT04200495 -NCT04203940 -NCT04200534 -NCT04203953 -NCT04200586 -NCT04204044 -NCT04200729 -NCT04204057 -NCT04200768 -NCT04204083 -NCT04200781 -NCT04204096 -NCT04200963 -NCT04204161 -NCT04201002 -NCT04204226 -NCT04201132 -NCT04204421 -NCT04201145 -NCT04204473 -NCT04201210 -NCT04204512 -NCT04201223 -NCT04209842 -NCT04204668 -NCT04207190 -NCT04204720 -NCT04207112 -NCT04204733 -NCT04207242 -NCT04204837 -NCT04207255 -NCT04204850 -NCT04207268 -NCT04204876 -NCT04207359 -NCT04204928 -NCT04207437 -NCT04204941 -NCT04207463 -NCT04205071 -NCT04207554 -NCT04205097 -NCT04207593 -NCT04205175 -NCT04207632 -NCT04205188 -NCT04207645 -NCT04205227 -NCT04207736 -NCT04205240 -NCT04207827 -NCT04205266 -NCT04207918 -NCT04205279 -NCT04207944 -NCT04205331 -NCT04208061 -NCT04205357 -NCT04208074 -NCT04205396 -NCT04208178 -NCT04205409 -NCT04208243 -NCT04205474 -NCT04208334 -NCT04205578 -NCT04208347 -NCT04205630 -NCT04208360 -NCT04205747 -NCT04208464 -NCT04205786 -NCT04208490 -NCT04205799 -NCT04208529 -NCT04205812 -NCT04208568 -NCT04205838 -NCT04208620 -NCT04205851 -NCT04208633 -NCT04205864 -NCT04208685 -NCT04205903 -NCT04208724 -NCT04205955 -NCT04208932 -NCT04205968 -NCT04208958 -NCT04206007 -NCT04208997 -NCT04206020 -NCT04209023 -NCT04206072 -NCT04209036 -NCT04206098 -NCT04209088 -NCT04206137 -NCT04209114 -NCT04206176 -NCT04209127 -NCT04206228 -NCT04209166 -NCT04206254 -NCT04209179 -NCT04206280 -NCT04209192 -NCT04206319 -NCT04209218 -NCT04206332 -NCT04209244 -NCT04206345 -NCT04209335 -NCT04206358 -NCT04209465 -NCT04206410 -NCT04209595 -NCT04206423 -NCT04209621 -NCT04206605 -NCT04209634 -NCT04206722 -NCT04209660 -NCT04206787 -NCT04209686 -NCT04206826 -NCT04209712 -NCT04206943 -NCT04209725 -NCT04206969 -NCT04209738 -NCT04207021 -NCT04209790 -NCT04207086 -NCT04214990 -NCT04209855 -NCT04212637 -NCT04209868 -NCT04212624 -NCT04209933 -NCT04212702 -NCT04209946 -NCT04212715 -NCT04210037 -NCT04212780 -NCT04210063 -NCT04212793 -NCT04210089 -NCT04212858 -NCT04210115 -NCT04212962 -NCT04210141 -NCT04213092 -NCT04210219 -NCT04213105 -NCT04210297 -NCT04213118 -NCT04210336 -NCT04213170 -NCT04210492 -NCT04213183 -NCT04210518 -NCT04213209 -NCT04210596 -NCT04213235 -NCT04210674 -NCT04213287 -NCT04210726 -NCT04213352 -NCT04210778 -NCT04213365 -NCT04210791 -NCT04213404 -NCT04210882 -NCT04213443 -NCT04211012 -NCT04213469 -NCT04211051 -NCT04213534 -NCT04211090 -NCT04213729 -NCT04211142 -NCT04213794 -NCT04211168 -NCT04213898 -NCT04211207 -NCT04213937 -NCT04211233 -NCT04214067 -NCT04211259 -NCT04214080 -NCT04211272 -NCT04214093 -NCT04211337 -NCT04214119 -NCT04211454 -NCT04214197 -NCT04211571 -NCT04214210 -NCT04211649 -NCT04214249 -NCT04211675 -NCT04214262 -NCT04211701 -NCT04214288 -NCT04211740 -NCT04214340 -NCT04211766 -NCT04214353 -NCT04211805 -NCT04214366 -NCT04211896 -NCT04214392 -NCT04211922 -NCT04214418 -NCT04211948 -NCT04214444 -NCT04211974 -NCT04214509 -NCT04212013 -NCT04214522 -NCT04212026 -NCT04214561 -NCT04212052 -NCT04214626 -NCT04212195 -NCT04214639 -NCT04212221 -NCT04214665 -NCT04212273 -NCT04214691 -NCT04212286 -NCT04214717 -NCT04212377 -NCT04214730 -NCT04212403 -NCT04214756 -NCT04212455 -NCT04214782 -NCT04212507 -NCT04214860 -NCT04212546 -NCT04214886 -NCT04212572 -NCT04214912 -NCT04212598 -NCT04220866 -NCT04215003 -NCT04217941 -NCT04215029 -NCT04217902 -NCT04215146 -NCT04217954 -NCT04215159 -NCT04217967 -NCT04215354 -NCT04218019 -NCT04215367 -NCT04218045 -NCT04215380 -NCT04218110 -NCT04215458 -NCT04218149 -NCT04215471 -NCT04218175 -NCT04215497 -NCT04218253 -NCT04215510 -NCT04218305 -NCT04215601 -NCT04218409 -NCT04215731 -NCT04218526 -NCT04215744 -NCT04218539 -NCT04215757 -NCT04218617 -NCT04215783 -NCT04218682 -NCT04215809 -NCT04218721 -NCT04215978 -NCT04218825 -NCT04216134 -NCT04218877 -NCT04216251 -NCT04218942 -NCT04216290 -NCT04219007 -NCT04216316 -NCT04219046 -NCT04216329 -NCT04219163 -NCT04216355 -NCT04219202 -NCT04216472 -NCT04219254 -NCT04216524 -NCT04219267 -NCT04216563 -NCT04219306 -NCT04216576 -NCT04219319 -NCT04216641 -NCT04219332 -NCT04216758 -NCT04219423 -NCT04216953 -NCT04219488 -NCT04216979 -NCT04219644 -NCT04216992 -NCT04219748 -NCT04217057 -NCT04219813 -NCT04217096 -NCT04219826 -NCT04217109 -NCT04219904 -NCT04217135 -NCT04219969 -NCT04217187 -NCT04220008 -NCT04217200 -NCT04220086 -NCT04217239 -NCT04220138 -NCT04217278 -NCT04220216 -NCT04217317 -NCT04220229 -NCT04217356 -NCT04220268 -NCT04217447 -NCT04220307 -NCT04217460 -NCT04220398 -NCT04217473 -NCT04220476 -NCT04217577 -NCT04220489 -NCT04217590 -NCT04220528 -NCT04217603 -NCT04220541 -NCT04217655 -NCT04220684 -NCT04217694 -NCT04220697 -NCT04217720 -NCT04220749 -NCT04217733 -NCT04220775 -NCT04217746 -NCT04220827 -NCT04217798 -NCT04220840 -NCT04217850 -NCT04225910 -NCT04220892 -NCT04223401 -NCT04220944 -NCT04223388 -NCT04220983 -NCT04223492 -NCT04221035 -NCT04223570 -NCT04221061 -NCT04223583 -NCT04221074 -NCT04223596 -NCT04221126 -NCT04223648 -NCT04221139 -NCT04223661 -NCT04221165 -NCT04223765 -NCT04221204 -NCT04223856 -NCT04221282 -NCT04223908 -NCT04221438 -NCT04223999 -NCT04221464 -NCT04224038 -NCT04221503 -NCT04224064 -NCT04221516 -NCT04224168 -NCT04221529 -NCT04224194 -NCT04221542 -NCT04224272 -NCT04221555 -NCT04224285 -NCT04221607 -NCT04224298 -NCT04221620 -NCT04224337 -NCT04221711 -NCT04224363 -NCT04221828 -NCT04224402 -NCT04221854 -NCT04224415 -NCT04221893 -NCT04224441 -NCT04221945 -NCT04224454 -NCT04221971 -NCT04224467 -NCT04222062 -NCT04224480 -NCT04222075 -NCT04224493 -NCT04222088 -NCT04224506 -NCT04222114 -NCT04224571 -NCT04222257 -NCT04224584 -NCT04222296 -NCT04224636 -NCT04222309 -NCT04224662 -NCT04222322 -NCT04224740 -NCT04222335 -NCT04224779 -NCT04222413 -NCT04224792 -NCT04222426 -NCT04224909 -NCT04222452 -NCT04224922 -NCT04222530 -NCT04224948 -NCT04222543 -NCT04224974 -NCT04222595 -NCT04225000 -NCT04222634 -NCT04225039 -NCT04222777 -NCT04225117 -NCT04222790 -NCT04225286 -NCT04222803 -NCT04225299 -NCT04222816 -NCT04225312 -NCT04222881 -NCT04225364 -NCT04222933 -NCT04225507 -NCT04222972 -NCT04225546 -NCT04223024 -NCT04225572 -NCT04223050 -NCT04225676 -NCT04223063 -NCT04225741 -NCT04223102 -NCT04225767 -NCT04223141 -NCT04225793 -NCT04223154 -NCT04225858 -NCT04223349 -NCT04232059 -NCT04226040 -NCT04229615 -NCT04226066 -NCT04229589 -NCT04226118 -NCT04229849 -NCT04226170 -NCT04229862 -NCT04226209 -NCT04229901 -NCT04226235 -NCT04229914 -NCT04226313 -NCT04229927 -NCT04226508 -NCT04229940 -NCT04226586 -NCT04229979 -NCT04226768 -NCT04229992 -NCT04226911 -NCT04230031 -NCT04226976 -NCT04230109 -NCT04226989 -NCT04230174 -NCT04227015 -NCT04230187 -NCT04227028 -NCT04230252 -NCT04227041 -NCT04230265 -NCT04227067 -NCT04230291 -NCT04227197 -NCT04230304 -NCT04227275 -NCT04230330 -NCT04227314 -NCT04230408 -NCT04227327 -NCT04230447 -NCT04227353 -NCT04230460 -NCT04227379 -NCT04230473 -NCT04227509 -NCT04230499 -NCT04227522 -NCT04230603 -NCT04227548 -NCT04230642 -NCT04227795 -NCT04230759 -NCT04227808 -NCT04230772 -NCT04227847 -NCT04230863 -NCT04227925 -NCT04230902 -NCT04227951 -NCT04230941 -NCT04227977 -NCT04230954 -NCT04228029 -NCT04231006 -NCT04228042 -NCT04231058 -NCT04228055 -NCT04231175 -NCT04228081 -NCT04231279 -NCT04228393 -NCT04231318 -NCT04228406 -NCT04231370 -NCT04228432 -NCT04231396 -NCT04228484 -NCT04231448 -NCT04228536 -NCT04231461 -NCT04228601 -NCT04231487 -NCT04228835 -NCT04231526 -NCT04228991 -NCT04231552 -NCT04229004 -NCT04231669 -NCT04229030 -NCT04231734 -NCT04229238 -NCT04231747 -NCT04229277 -NCT04231760 -NCT04229342 -NCT04231851 -NCT04229355 -NCT04231864 -NCT04229381 -NCT04231877 -NCT04229407 -NCT04231929 -NCT04229433 -NCT04231981 -NCT04229459 -NCT04232020 -NCT04229524 -NCT04232033 -NCT04229537 -NCT04237935 -NCT04232085 -NCT04235166 -NCT04232241 -NCT04235140 -NCT04232319 -NCT04235179 -NCT04232371 -NCT04235244 -NCT04232384 -NCT04235283 -NCT04232553 -NCT04235556 -NCT04232618 -NCT04235660 -NCT04232709 -NCT04235712 -NCT04232722 -NCT04235725 -NCT04232735 -NCT04235777 -NCT04232748 -NCT04235803 -NCT04232813 -NCT04235829 -NCT04232826 -NCT04235933 -NCT04232865 -NCT04235946 -NCT04232917 -NCT04235998 -NCT04232982 -NCT04236011 -NCT04233021 -NCT04236037 -NCT04233060 -NCT04236089 -NCT04233099 -NCT04236102 -NCT04233125 -NCT04236141 -NCT04233151 -NCT04236154 -NCT04233294 -NCT04236232 -NCT04233346 -NCT04236310 -NCT04233359 -NCT04236349 -NCT04233385 -NCT04236362 -NCT04233476 -NCT04236375 -NCT04233567 -NCT04236388 -NCT04233632 -NCT04236544 -NCT04233697 -NCT04236557 -NCT04233749 -NCT04236596 -NCT04233762 -NCT04236622 -NCT04233827 -NCT04236661 -NCT04233840 -NCT04236687 -NCT04233866 -NCT04236752 -NCT04233892 -NCT04236843 -NCT04234035 -NCT04236856 -NCT04234048 -NCT04236895 -NCT04234061 -NCT04236934 -NCT04234113 -NCT04236960 -NCT04234126 -NCT04236999 -NCT04234165 -NCT04237090 -NCT04234217 -NCT04237181 -NCT04234230 -NCT04237220 -NCT04234269 -NCT04237376 -NCT04234321 -NCT04237428 -NCT04234386 -NCT04237506 -NCT04234399 -NCT04237584 -NCT04234568 -NCT04237636 -NCT04234594 -NCT04237649 -NCT04234607 -NCT04237740 -NCT04234646 -NCT04237766 -NCT04234789 -NCT04237779 -NCT04234867 -NCT04237805 -NCT04234945 -NCT04237857 -NCT04235101 -NCT04237883 -NCT04235114 -NCT04243915 -NCT04237961 -NCT04241315 -NCT04238065 -NCT04241276 -NCT04238117 -NCT04241341 -NCT04238169 -NCT04241367 -NCT04238208 -NCT04241393 -NCT04238247 -NCT04241432 -NCT04238377 -NCT04241484 -NCT04238416 -NCT04241523 -NCT04238611 -NCT04241536 -NCT04238624 -NCT04241549 -NCT04238637 -NCT04241588 -NCT04238715 -NCT04241679 -NCT04238819 -NCT04241731 -NCT04238871 -NCT04241796 -NCT04238884 -NCT04241809 -NCT04238897 -NCT04241822 -NCT04238988 -NCT04241835 -NCT04239001 -NCT04241848 -NCT04239014 -NCT04241887 -NCT04239040 -NCT04242017 -NCT04239092 -NCT04242108 -NCT04239157 -NCT04242147 -NCT04239170 -NCT04242173 -NCT04239196 -NCT04242199 -NCT04239365 -NCT04242225 -NCT04239378 -NCT04242238 -NCT04239430 -NCT04242251 -NCT04239443 -NCT04242264 -NCT04239521 -NCT04242277 -NCT04239573 -NCT04242290 -NCT04239599 -NCT04242329 -NCT04239716 -NCT04242355 -NCT04239742 -NCT04242394 -NCT04239794 -NCT04242459 -NCT04239833 -NCT04242589 -NCT04239846 -NCT04242602 -NCT04239963 -NCT04242667 -NCT04239976 -NCT04242732 -NCT04240002 -NCT04242784 -NCT04240054 -NCT04242823 -NCT04240106 -NCT04242836 -NCT04240132 -NCT04243005 -NCT04240314 -NCT04243083 -NCT04240470 -NCT04243109 -NCT04240483 -NCT04243122 -NCT04240522 -NCT04243265 -NCT04240548 -NCT04243382 -NCT04240600 -NCT04243421 -NCT04240639 -NCT04243434 -NCT04240652 -NCT04243499 -NCT04240704 -NCT04243512 -NCT04240808 -NCT04243616 -NCT04240860 -NCT04243668 -NCT04240873 -NCT04243785 -NCT04241042 -NCT04243837 -NCT04241185 -NCT04250064 -NCT04243941 -NCT04247490 -NCT04243954 -NCT04247425 -NCT04244123 -NCT04247633 -NCT04244383 -NCT04247763 -NCT04244448 -NCT04247906 -NCT04244474 -NCT04247984 -NCT04244526 -NCT04248153 -NCT04244552 -NCT04248166 -NCT04244604 -NCT04248179 -NCT04244630 -NCT04248218 -NCT04244656 -NCT04248244 -NCT04244669 -NCT04248257 -NCT04244877 -NCT04248270 -NCT04245098 -NCT04248335 -NCT04245150 -NCT04248361 -NCT04245176 -NCT04248387 -NCT04245384 -NCT04248426 -NCT04245397 -NCT04248439 -NCT04245475 -NCT04248452 -NCT04245514 -NCT04248543 -NCT04245540 -NCT04248569 -NCT04245670 -NCT04248582 -NCT04245709 -NCT04248595 -NCT04245722 -NCT04248621 -NCT04245839 -NCT04248647 -NCT04245865 -NCT04248699 -NCT04245943 -NCT04248738 -NCT04245956 -NCT04248816 -NCT04246021 -NCT04248829 -NCT04246047 -NCT04248881 -NCT04246086 -NCT04248959 -NCT04246099 -NCT04248998 -NCT04246151 -NCT04249115 -NCT04246177 -NCT04249141 -NCT04246359 -NCT04249154 -NCT04246372 -NCT04249167 -NCT04246398 -NCT04249258 -NCT04246450 -NCT04249271 -NCT04246489 -NCT04249297 -NCT04246502 -NCT04249310 -NCT04246606 -NCT04249362 -NCT04246619 -NCT04249427 -NCT04246671 -NCT04249440 -NCT04246684 -NCT04249479 -NCT04246697 -NCT04249570 -NCT04246879 -NCT04249622 -NCT04246970 -NCT04249700 -NCT04247035 -NCT04249739 -NCT04247074 -NCT04249843 -NCT04247100 -NCT04249856 -NCT04247126 -NCT04249882 -NCT04247152 -NCT04249921 -NCT04247165 -NCT04249947 -NCT04247204 -NCT04249973 -NCT04247256 -NCT04250051 -NCT04247282 -NCT04256278 -NCT04250155 -NCT04253249 -NCT04250194 -NCT04253145 -NCT04250246 -NCT04253262 -NCT04250272 -NCT04253275 -NCT04250311 -NCT04253366 -NCT04250324 -NCT04253405 -NCT04250545 -NCT04253444 -NCT04250597 -NCT04253483 -NCT04250766 -NCT04253561 -NCT04250779 -NCT04253691 -NCT04250792 -NCT04253808 -NCT04250805 -NCT04253821 -NCT04250922 -NCT04253873 -NCT04250948 -NCT04253899 -NCT04251052 -NCT04253964 -NCT04251065 -NCT04254107 -NCT04251078 -NCT04254172 -NCT04251091 -NCT04254224 -NCT04251117 -NCT04254263 -NCT04251169 -NCT04254276 -NCT04251182 -NCT04254419 -NCT04251208 -NCT04254458 -NCT04251286 -NCT04254471 -NCT04251299 -NCT04254510 -NCT04251312 -NCT04254588 -NCT04251403 -NCT04254640 -NCT04251416 -NCT04254692 -NCT04251481 -NCT04254822 -NCT04251507 -NCT04254861 -NCT04251533 -NCT04254926 -NCT04251559 -NCT04254939 -NCT04251598 -NCT04254978 -NCT04251663 -NCT04255030 -NCT04251715 -NCT04255056 -NCT04251754 -NCT04255095 -NCT04251949 -NCT04255173 -NCT04252001 -NCT04255225 -NCT04252053 -NCT04255264 -NCT04252144 -NCT04255316 -NCT04252209 -NCT04255381 -NCT04252248 -NCT04255420 -NCT04252339 -NCT04255576 -NCT04252365 -NCT04255693 -NCT04252456 -NCT04255758 -NCT04252508 -NCT04255836 -NCT04252521 -NCT04255849 -NCT04252612 -NCT04255953 -NCT04252625 -NCT04256005 -NCT04252729 -NCT04256018 -NCT04252768 -NCT04256057 -NCT04252846 -NCT04256096 -NCT04252859 -NCT04256135 -NCT04252963 -NCT04256200 -NCT04253054 -NCT04256213 -NCT04253080 -NCT04256265 -NCT04253106 -NCT04261595 -NCT04256304 -NCT04258852 -NCT04256317 -NCT04258813 -NCT04256421 -NCT04258930 -NCT04256434 -NCT04258943 -NCT04256486 -NCT04258956 -NCT04256512 -NCT04258969 -NCT04256525 -NCT04259021 -NCT04256668 -NCT04259034 -NCT04256707 -NCT04259099 -NCT04256733 -NCT04259177 -NCT04256941 -NCT04259359 -NCT04256980 -NCT04259398 -NCT04257058 -NCT04259411 -NCT04257097 -NCT04259450 -NCT04257110 -NCT04259593 -NCT04257123 -NCT04259619 -NCT04257136 -NCT04259658 -NCT04257162 -NCT04259697 -NCT04257175 -NCT04259736 -NCT04257396 -NCT04259762 -NCT04257422 -NCT04259905 -NCT04257448 -NCT04259931 -NCT04257461 -NCT04259944 -NCT04257487 -NCT04260009 -NCT04257500 -NCT04260022 -NCT04257526 -NCT04260126 -NCT04257578 -NCT04260191 -NCT04257604 -NCT04260204 -NCT04257617 -NCT04260217 -NCT04257643 -NCT04260230 -NCT04257682 -NCT04260256 -NCT04257786 -NCT04260360 -NCT04257968 -NCT04260477 -NCT04258020 -NCT04260529 -NCT04258033 -NCT04260568 -NCT04258046 -NCT04260737 -NCT04258072 -NCT04260802 -NCT04258111 -NCT04260932 -NCT04258137 -NCT04260945 -NCT04258150 -NCT04260971 -NCT04258163 -NCT04260984 -NCT04258189 -NCT04261010 -NCT04258215 -NCT04261075 -NCT04258280 -NCT04261153 -NCT04258423 -NCT04261179 -NCT04258449 -NCT04261218 -NCT04258462 -NCT04261244 -NCT04258527 -NCT04261283 -NCT04258566 -NCT04261296 -NCT04258592 -NCT04261309 -NCT04258618 -NCT04261413 -NCT04258631 -NCT04261439 -NCT04258644 -NCT04261465 -NCT04258657 -NCT04261478 -NCT04258683 -NCT04261504 -NCT04258735 -NCT04267302 -NCT04261777 -NCT04264949 -NCT04261790 -NCT04264936 -NCT04261803 -NCT04264962 -NCT04261855 -NCT04264975 -NCT04261894 -NCT04265209 -NCT04262089 -NCT04265222 -NCT04262115 -NCT04265274 -NCT04262128 -NCT04265339 -NCT04262141 -NCT04265430 -NCT04262154 -NCT04265521 -NCT04262180 -NCT04265534 -NCT04262219 -NCT04265547 -NCT04262336 -NCT04265638 -NCT04262375 -NCT04265651 -NCT04262388 -NCT04265703 -NCT04262414 -NCT04265742 -NCT04262427 -NCT04265781 -NCT04262466 -NCT04265820 -NCT04262518 -NCT04265833 -NCT04262557 -NCT04265872 -NCT04262570 -NCT04265963 -NCT04262635 -NCT04266015 -NCT04262687 -NCT04266041 -NCT04262713 -NCT04266080 -NCT04262739 -NCT04266158 -NCT04262752 -NCT04266223 -NCT04262804 -NCT04266249 -NCT04262843 -NCT04266262 -NCT04262856 -NCT04266275 -NCT04262869 -NCT04266301 -NCT04263025 -NCT04266327 -NCT04263051 -NCT04266392 -NCT04263090 -NCT04266418 -NCT04263298 -NCT04266431 -NCT04263376 -NCT04266457 -NCT04263467 -NCT04266470 -NCT04263480 -NCT04266509 -NCT04263584 -NCT04266522 -NCT04263779 -NCT04266548 -NCT04263870 -NCT04266561 -NCT04263948 -NCT04266587 -NCT04263974 -NCT04266665 -NCT04264039 -NCT04266730 -NCT04264078 -NCT04266756 -NCT04264091 -NCT04266782 -NCT04264143 -NCT04266795 -NCT04264169 -NCT04266847 -NCT04264195 -NCT04266886 -NCT04264208 -NCT04266912 -NCT04264260 -NCT04266977 -NCT04264325 -NCT04266990 -NCT04264377 -NCT04267081 -NCT04264455 -NCT04267120 -NCT04264481 -NCT04267146 -NCT04264676 -NCT04267237 -NCT04264806 -NCT04272944 -NCT04267315 -NCT04269694 -NCT04267341 -NCT04269629 -NCT04267445 -NCT04269837 -NCT04267549 -NCT04269902 -NCT04267562 -NCT04270110 -NCT04267575 -NCT04270136 -NCT04267627 -NCT04270149 -NCT04267796 -NCT04270175 -NCT04267835 -NCT04270266 -NCT04267848 -NCT04270409 -NCT04267874 -NCT04270461 -NCT04267887 -NCT04270500 -NCT04267900 -NCT04270591 -NCT04267913 -NCT04270617 -NCT04267939 -NCT04270864 -NCT04267965 -NCT04270877 -NCT04267978 -NCT04270890 -NCT04268017 -NCT04270929 -NCT04268121 -NCT04271020 -NCT04268134 -NCT04271033 -NCT04268186 -NCT04271085 -NCT04268199 -NCT04271163 -NCT04268251 -NCT04271176 -NCT04268277 -NCT04271254 -NCT04268290 -NCT04271384 -NCT04268303 -NCT04271410 -NCT04268329 -NCT04271436 -NCT04268420 -NCT04271527 -NCT04268433 -NCT04271579 -NCT04268485 -NCT04271605 -NCT04268498 -NCT04271644 -NCT04268524 -NCT04271800 -NCT04268550 -NCT04271813 -NCT04268589 -NCT04271826 -NCT04268602 -NCT04271878 -NCT04268641 -NCT04271891 -NCT04268706 -NCT04271930 -NCT04268732 -NCT04271956 -NCT04268758 -NCT04272034 -NCT04268810 -NCT04272060 -NCT04268836 -NCT04272125 -NCT04268862 -NCT04272151 -NCT04268888 -NCT04272190 -NCT04268940 -NCT04272203 -NCT04268979 -NCT04272294 -NCT04269018 -NCT04272333 -NCT04269083 -NCT04272346 -NCT04269148 -NCT04272398 -NCT04269174 -NCT04272424 -NCT04269200 -NCT04272619 -NCT04269213 -NCT04272645 -NCT04269291 -NCT04272775 -NCT04269330 -NCT04272801 -NCT04269369 -NCT04272879 -NCT04269499 -NCT04272931 -NCT04269512 -NCT04278690 -NCT04272957 -NCT04276142 -NCT04272970 -NCT04276090 -NCT04273061 -NCT04276194 -NCT04273100 -NCT04276207 -NCT04273139 -NCT04276220 -NCT04273282 -NCT04276324 -NCT04273373 -NCT04276337 -NCT04273464 -NCT04276376 -NCT04273490 -NCT04276415 -NCT04273542 -NCT04276454 -NCT04273555 -NCT04276493 -NCT04273620 -NCT04276532 -NCT04273724 -NCT04276597 -NCT04273802 -NCT04276610 -NCT04273815 -NCT04276636 -NCT04273828 -NCT04276649 -NCT04273854 -NCT04276753 -NCT04273893 -NCT04276779 -NCT04273971 -NCT04276857 -NCT04274023 -NCT04276883 -NCT04274179 -NCT04276909 -NCT04274426 -NCT04276974 -NCT04274465 -NCT04277000 -NCT04274556 -NCT04277039 -NCT04274569 -NCT04277052 -NCT04274634 -NCT04277078 -NCT04274738 -NCT04277130 -NCT04274790 -NCT04277221 -NCT04274816 -NCT04277273 -NCT04274842 -NCT04277338 -NCT04274868 -NCT04277364 -NCT04274894 -NCT04277403 -NCT04274907 -NCT04277442 -NCT04274920 -NCT04277572 -NCT04274933 -NCT04277663 -NCT04274946 -NCT04277689 -NCT04275050 -NCT04277728 -NCT04275076 -NCT04277741 -NCT04275102 -NCT04277845 -NCT04275219 -NCT04277858 -NCT04275414 -NCT04278014 -NCT04275453 -NCT04278092 -NCT04275505 -NCT04278118 -NCT04275518 -NCT04278144 -NCT04275544 -NCT04278183 -NCT04275583 -NCT04278222 -NCT04275661 -NCT04278261 -NCT04275713 -NCT04278287 -NCT04275765 -NCT04278326 -NCT04275791 -NCT04278469 -NCT04275869 -NCT04278495 -NCT04275882 -NCT04278534 -NCT04275921 -NCT04278599 -NCT04275960 -NCT04278638 -NCT04275986 -NCT04278651 -NCT04276038 -NCT04284696 -NCT04278729 -NCT04281875 -NCT04278768 -NCT04281784 -NCT04278781 -NCT04281888 -NCT04278859 -NCT04282018 -NCT04278963 -NCT04282031 -NCT04278989 -NCT04282044 -NCT04279288 -NCT04282070 -NCT04279327 -NCT04282109 -NCT04279379 -NCT04282148 -NCT04279405 -NCT04282174 -NCT04279457 -NCT04282187 -NCT04279509 -NCT04282278 -NCT04279535 -NCT04282317 -NCT04279561 -NCT04282343 -NCT04279600 -NCT04282356 -NCT04279678 -NCT04282408 -NCT04279717 -NCT04282434 -NCT04279782 -NCT04282538 -NCT04279795 -NCT04282642 -NCT04279808 -NCT04282668 -NCT04279821 -NCT04282707 -NCT04279847 -NCT04282720 -NCT04279912 -NCT04282824 -NCT04279938 -NCT04282863 -NCT04280081 -NCT04282902 -NCT04280094 -NCT04282954 -NCT04280133 -NCT04282967 -NCT04280146 -NCT04282980 -NCT04280185 -NCT04283019 -NCT04280315 -NCT04283032 -NCT04280328 -NCT04283175 -NCT04280341 -NCT04283266 -NCT04280367 -NCT04283292 -NCT04280393 -NCT04283370 -NCT04280406 -NCT04283409 -NCT04280497 -NCT04283435 -NCT04280523 -NCT04283461 -NCT04280536 -NCT04283643 -NCT04280757 -NCT04283669 -NCT04280822 -NCT04283682 -NCT04280848 -NCT04283773 -NCT04280952 -NCT04283890 -NCT04281043 -NCT04283929 -NCT04281199 -NCT04283994 -NCT04281251 -NCT04284020 -NCT04281290 -NCT04284228 -NCT04281316 -NCT04284241 -NCT04281355 -NCT04284267 -NCT04281420 -NCT04284423 -NCT04281446 -NCT04284436 -NCT04281498 -NCT04284488 -NCT04281576 -NCT04284501 -NCT04281641 -NCT04284540 -NCT04281667 -NCT04284605 -NCT04281732 -NCT04284618 -NCT04281771 -NCT04290793 -NCT04284748 -NCT04287881 -NCT04284761 -NCT04287868 -NCT04284774 -NCT04287894 -NCT04284787 -NCT04287920 -NCT04284826 -NCT04288089 -NCT04284852 -NCT04288206 -NCT04284943 -NCT04288323 -NCT04284969 -NCT04288336 -NCT04285008 -NCT04288375 -NCT04285021 -NCT04288505 -NCT04285086 -NCT04288518 -NCT04285177 -NCT04288661 -NCT04285190 -NCT04288674 -NCT04285229 -NCT04288687 -NCT04285268 -NCT04288700 -NCT04285437 -NCT04288726 -NCT04285450 -NCT04288739 -NCT04285476 -NCT04288765 -NCT04285528 -NCT04288804 -NCT04285567 -NCT04288921 -NCT04285606 -NCT04288999 -NCT04285671 -NCT04289168 -NCT04285684 -NCT04289220 -NCT04285697 -NCT04289246 -NCT04285736 -NCT04289285 -NCT04285749 -NCT04289311 -NCT04285775 -NCT04289441 -NCT04285827 -NCT04289506 -NCT04285996 -NCT04289532 -NCT04286113 -NCT04289558 -NCT04286152 -NCT04289571 -NCT04286217 -NCT04289688 -NCT04286243 -NCT04289701 -NCT04286269 -NCT04289766 -NCT04286308 -NCT04289779 -NCT04286451 -NCT04289792 -NCT04286464 -NCT04289805 -NCT04286698 -NCT04289831 -NCT04286711 -NCT04289935 -NCT04286828 -NCT04289961 -NCT04286958 -NCT04290013 -NCT04287010 -NCT04290039 -NCT04287088 -NCT04290078 -NCT04287127 -NCT04290091 -NCT04287140 -NCT04290247 -NCT04287218 -NCT04290273 -NCT04287231 -NCT04290325 -NCT04287257 -NCT04290442 -NCT04287478 -NCT04290455 -NCT04287569 -NCT04290507 -NCT04287582 -NCT04290546 -NCT04287660 -NCT04290585 -NCT04287686 -NCT04290663 -NCT04287764 -NCT04290689 -NCT04287829 -NCT04290767 -NCT04287855 -NCT04296162 -NCT04290858 -NCT04293562 -NCT04290897 -NCT04293523 -NCT04290962 -NCT04293679 -NCT04291079 -NCT04293692 -NCT04291092 -NCT04293796 -NCT04291105 -NCT04293835 -NCT04291209 -NCT04293861 -NCT04291248 -NCT04293874 -NCT04291261 -NCT04293887 -NCT04291287 -NCT04293939 -NCT04291300 -NCT04293965 -NCT04291313 -NCT04294056 -NCT04291365 -NCT04294095 -NCT04291378 -NCT04294160 -NCT04291430 -NCT04294186 -NCT04291547 -NCT04294212 -NCT04291664 -NCT04294225 -NCT04291742 -NCT04294264 -NCT04291768 -NCT04294277 -NCT04291859 -NCT04294316 -NCT04291885 -NCT04294381 -NCT04291898 -NCT04294498 -NCT04291976 -NCT04294511 -NCT04292119 -NCT04294524 -NCT04292353 -NCT04294576 -NCT04292366 -NCT04294628 -NCT04292496 -NCT04294784 -NCT04292574 -NCT04294810 -NCT04292587 -NCT04294836 -NCT04292613 -NCT04294875 -NCT04292626 -NCT04294927 -NCT04292665 -NCT04294953 -NCT04292678 -NCT04295018 -NCT04292704 -NCT04295109 -NCT04292743 -NCT04295122 -NCT04292756 -NCT04295187 -NCT04292769 -NCT04295213 -NCT04292795 -NCT04295317 -NCT04292821 -NCT04295330 -NCT04292847 -NCT04295408 -NCT04292873 -NCT04295447 -NCT04292886 -NCT04295473 -NCT04292990 -NCT04295642 -NCT04293055 -NCT04295655 -NCT04293094 -NCT04295681 -NCT04293172 -NCT04295759 -NCT04293224 -NCT04295785 -NCT04293276 -NCT04295811 -NCT04293289 -NCT04295824 -NCT04293315 -NCT04295863 -NCT04293380 -NCT04295889 -NCT04293393 -NCT04295980 -NCT04293419 -NCT04296019 -NCT04293458 -NCT04296084 -NCT04293484 -NCT04296149 -NCT04293497 -NCT04301336 -NCT04296175 -NCT04298541 -NCT04296240 -NCT04298489 -NCT04296266 -NCT04298554 -NCT04296279 -NCT04298606 -NCT04296305 -NCT04298632 -NCT04296357 -NCT04298827 -NCT04296370 -NCT04298840 -NCT04296383 -NCT04298879 -NCT04296409 -NCT04298892 -NCT04296422 -NCT04298918 -NCT04296448 -NCT04298957 -NCT04296461 -NCT04298983 -NCT04296513 -NCT04299048 -NCT04296539 -NCT04299087 -NCT04296578 -NCT04299100 -NCT04296630 -NCT04299113 -NCT04296721 -NCT04299191 -NCT04296747 -NCT04299334 -NCT04296786 -NCT04299399 -NCT04296799 -NCT04299425 -NCT04296890 -NCT04299451 -NCT04296903 -NCT04299542 -NCT04296929 -NCT04299568 -NCT04296942 -NCT04299581 -NCT04296994 -NCT04299620 -NCT04297007 -NCT04299646 -NCT04297033 -NCT04299724 -NCT04297124 -NCT04299750 -NCT04297202 -NCT04299971 -NCT04297254 -NCT04300062 -NCT04297267 -NCT04300101 -NCT04297280 -NCT04300114 -NCT04297293 -NCT04300140 -NCT04297332 -NCT04300166 -NCT04297384 -NCT04300244 -NCT04297410 -NCT04300283 -NCT04297423 -NCT04300335 -NCT04297540 -NCT04300465 -NCT04297553 -NCT04300478 -NCT04297605 -NCT04300530 -NCT04297618 -NCT04300556 -NCT04297657 -NCT04300634 -NCT04297683 -NCT04300647 -NCT04297748 -NCT04300673 -NCT04297839 -NCT04300686 -NCT04297995 -NCT04300699 -NCT04298008 -NCT04300790 -NCT04298021 -NCT04300829 -NCT04298086 -NCT04300855 -NCT04298229 -NCT04300959 -NCT04298242 -NCT04301011 -NCT04298255 -NCT04301050 -NCT04298294 -NCT04301063 -NCT04298320 -NCT04301076 -NCT04298333 -NCT04301284 -NCT04298398 -NCT04306666 -NCT04301375 -NCT04304183 -NCT04301414 -NCT04304170 -NCT04301453 -NCT04304196 -NCT04301557 -NCT04304209 -NCT04301726 -NCT04304248 -NCT04301739 -NCT04304339 -NCT04301765 -NCT04304352 -NCT04301778 -NCT04304404 -NCT04301843 -NCT04304495 -NCT04301882 -NCT04304508 -NCT04301986 -NCT04304560 -NCT04301999 -NCT04304573 -NCT04302025 -NCT04304781 -NCT04302272 -NCT04304820 -NCT04302324 -NCT04304898 -NCT04302350 -NCT04304924 -NCT04302389 -NCT04305028 -NCT04302402 -NCT04305041 -NCT04302441 -NCT04305054 -NCT04302454 -NCT04305067 -NCT04302649 -NCT04305145 -NCT04302701 -NCT04305184 -NCT04302714 -NCT04305236 -NCT04302792 -NCT04305249 -NCT04303013 -NCT04305275 -NCT04303026 -NCT04305379 -NCT04303052 -NCT04305444 -NCT04303091 -NCT04305470 -NCT04303117 -NCT04305496 -NCT04303130 -NCT04305509 -NCT04303169 -NCT04305535 -NCT04303208 -NCT04305548 -NCT04303221 -NCT04305639 -NCT04303247 -NCT04305652 -NCT04303351 -NCT04305691 -NCT04303364 -NCT04305730 -NCT04303403 -NCT04305769 -NCT04303429 -NCT04305795 -NCT04303442 -NCT04305834 -NCT04303559 -NCT04305860 -NCT04303572 -NCT04305925 -NCT04303715 -NCT04305964 -NCT04303741 -NCT04306003 -NCT04303780 -NCT04306224 -NCT04303858 -NCT04306263 -NCT04303884 -NCT04306367 -NCT04303936 -NCT04306419 -NCT04303988 -NCT04306432 -NCT04304001 -NCT04306458 -NCT04304014 -NCT04306523 -NCT04304040 -NCT04306562 -NCT04304066 -NCT04306575 -NCT04304079 -NCT04306614 -NCT04304092 -NCT04306627 -NCT04304131 -NCT04306653 -NCT04304144 -NCT04312204 -NCT04306692 -NCT04309552 -NCT04306783 -NCT04309500 -NCT04306874 -NCT04309578 -NCT04306887 -NCT04309695 -NCT04306900 -NCT04309747 -NCT04306926 -NCT04309812 -NCT04306952 -NCT04309942 -NCT04306991 -NCT04309955 -NCT04307004 -NCT04309968 -NCT04307056 -NCT04309981 -NCT04307147 -NCT04310007 -NCT04307173 -NCT04310020 -NCT04307212 -NCT04310046 -NCT04307277 -NCT04310111 -NCT04307329 -NCT04310176 -NCT04307407 -NCT04310345 -NCT04307433 -NCT04310397 -NCT04307472 -NCT04310410 -NCT04307537 -NCT04310449 -NCT04307576 -NCT04310462 -NCT04307784 -NCT04310540 -NCT04307823 -NCT04310553 -NCT04307914 -NCT04310579 -NCT04307979 -NCT04310592 -NCT04308122 -NCT04310618 -NCT04308135 -NCT04310696 -NCT04308174 -NCT04310709 -NCT04308226 -NCT04310774 -NCT04308252 -NCT04310826 -NCT04308265 -NCT04310852 -NCT04308278 -NCT04310943 -NCT04308330 -NCT04311034 -NCT04308395 -NCT04311047 -NCT04308421 -NCT04311060 -NCT04308486 -NCT04311099 -NCT04308499 -NCT04311242 -NCT04308590 -NCT04311268 -NCT04308629 -NCT04311385 -NCT04308759 -NCT04311502 -NCT04308785 -NCT04311528 -NCT04308824 -NCT04311567 -NCT04308837 -NCT04311580 -NCT04308850 -NCT04311606 -NCT04308863 -NCT04311645 -NCT04308876 -NCT04311710 -NCT04308954 -NCT04311762 -NCT04309032 -NCT04311840 -NCT04309084 -NCT04311866 -NCT04309097 -NCT04311970 -NCT04309136 -NCT04312087 -NCT04309188 -NCT04312139 -NCT04309227 -NCT04312152 -NCT04309240 -NCT04312165 -NCT04309253 -NCT04312178 -NCT04309409 -NCT04312191 -NCT04309474 -NCT04318067 -NCT04312243 -NCT04315597 -NCT04312282 -NCT04315584 -NCT04312347 -NCT04315623 -NCT04312360 -NCT04315701 -NCT04312607 -NCT04315714 -NCT04312776 -NCT04315753 -NCT04312815 -NCT04315779 -NCT04312841 -NCT04315792 -NCT04313062 -NCT04316013 -NCT04313088 -NCT04316026 -NCT04313101 -NCT04316039 -NCT04313114 -NCT04316078 -NCT04313140 -NCT04316091 -NCT04313192 -NCT04316117 -NCT04313205 -NCT04316156 -NCT04313296 -NCT04316169 -NCT04313374 -NCT04316182 -NCT04313465 -NCT04316208 -NCT04313478 -NCT04316273 -NCT04313504 -NCT04316286 -NCT04313530 -NCT04316364 -NCT04313608 -NCT04316429 -NCT04313660 -NCT04316494 -NCT04313764 -NCT04316507 -NCT04313868 -NCT04316520 -NCT04313881 -NCT04316546 -NCT04313907 -NCT04316559 -NCT04313946 -NCT04316624 -NCT04314089 -NCT04316637 -NCT04314219 -NCT04316689 -NCT04314245 -NCT04316728 -NCT04314284 -NCT04316780 -NCT04314297 -NCT04316793 -NCT04314479 -NCT04316871 -NCT04314518 -NCT04316962 -NCT04314609 -NCT04316975 -NCT04314674 -NCT04317066 -NCT04314700 -NCT04317105 -NCT04314778 -NCT04317118 -NCT04314843 -NCT04317222 -NCT04314856 -NCT04317248 -NCT04314895 -NCT04317261 -NCT04314999 -NCT04317274 -NCT04315012 -NCT04317391 -NCT04315051 -NCT04317417 -NCT04315064 -NCT04317456 -NCT04315142 -NCT04317521 -NCT04315155 -NCT04317625 -NCT04315194 -NCT04317677 -NCT04315207 -NCT04317690 -NCT04315233 -NCT04317742 -NCT04315246 -NCT04317781 -NCT04315324 -NCT04317885 -NCT04315337 -NCT04317937 -NCT04315350 -NCT04318028 -NCT04315467 -NCT04323722 -NCT04318080 -NCT04321135 -NCT04318184 -NCT04321109 -NCT04318223 -NCT04321161 -NCT04318327 -NCT04321174 -NCT04318340 -NCT04321278 -NCT04318392 -NCT04321330 -NCT04318535 -NCT04321356 -NCT04318561 -NCT04321369 -NCT04318574 -NCT04321486 -NCT04318678 -NCT04321538 -NCT04318717 -NCT04321629 -NCT04318730 -NCT04321668 -NCT04318795 -NCT04321707 -NCT04318808 -NCT04321811 -NCT04318834 -NCT04321837 -NCT04318886 -NCT04321902 -NCT04318925 -NCT04321954 -NCT04318938 -NCT04322006 -NCT04318964 -NCT04322045 -NCT04319042 -NCT04322071 -NCT04319107 -NCT04322136 -NCT04319146 -NCT04322149 -NCT04319198 -NCT04322175 -NCT04319224 -NCT04322227 -NCT04319263 -NCT04322240 -NCT04319276 -NCT04322292 -NCT04319289 -NCT04322318 -NCT04319354 -NCT04322357 -NCT04319432 -NCT04322383 -NCT04319471 -NCT04322422 -NCT04319484 -NCT04322435 -NCT04319510 -NCT04322487 -NCT04319601 -NCT04322539 -NCT04319757 -NCT04322552 -NCT04319783 -NCT04322565 -NCT04319861 -NCT04322578 -NCT04319874 -NCT04322617 -NCT04319991 -NCT04322643 -NCT04320030 -NCT04322695 -NCT04320108 -NCT04322786 -NCT04320147 -NCT04322890 -NCT04320277 -NCT04322929 -NCT04320316 -NCT04322955 -NCT04320329 -NCT04322981 -NCT04320342 -NCT04323046 -NCT04320407 -NCT04323098 -NCT04320420 -NCT04323137 -NCT04320485 -NCT04323202 -NCT04320498 -NCT04323306 -NCT04320550 -NCT04323436 -NCT04320654 -NCT04323566 -NCT04320875 -NCT04323605 -NCT04320888 -NCT04323618 -NCT04320901 -NCT04323631 -NCT04320979 -NCT04323657 -NCT04321096 -NCT04330430 -NCT04323735 -NCT04327011 -NCT04323774 -NCT04326972 -NCT04323904 -NCT04327037 -NCT04323956 -NCT04327050 -NCT04324112 -NCT04327063 -NCT04324125 -NCT04327206 -NCT04324294 -NCT04327336 -NCT04324307 -NCT04327375 -NCT04324372 -NCT04327583 -NCT04324385 -NCT04327622 -NCT04324437 -NCT04327700 -NCT04324450 -NCT04327752 -NCT04324463 -NCT04327869 -NCT04324476 -NCT04327882 -NCT04324580 -NCT04327908 -NCT04324632 -NCT04327986 -NCT04324671 -NCT04327999 -NCT04324814 -NCT04328181 -NCT04324840 -NCT04328194 -NCT04324879 -NCT04328480 -NCT04324905 -NCT04328506 -NCT04324931 -NCT04328597 -NCT04324970 -NCT04328610 -NCT04324983 -NCT04328675 -NCT04325243 -NCT04328714 -NCT04325282 -NCT04328740 -NCT04325425 -NCT04328818 -NCT04325438 -NCT04328844 -NCT04325490 -NCT04328948 -NCT04325711 -NCT04328961 -NCT04325763 -NCT04329000 -NCT04325776 -NCT04329013 -NCT04325828 -NCT04329065 -NCT04325841 -NCT04329130 -NCT04325854 -NCT04329143 -NCT04325867 -NCT04329169 -NCT04326049 -NCT04329208 -NCT04326153 -NCT04329221 -NCT04326257 -NCT04329325 -NCT04326296 -NCT04329351 -NCT04326374 -NCT04329403 -NCT04326387 -NCT04329429 -NCT04326439 -NCT04329481 -NCT04326517 -NCT04329494 -NCT04326530 -NCT04329689 -NCT04326569 -NCT04329715 -NCT04326582 -NCT04329923 -NCT04326595 -NCT04329949 -NCT04326660 -NCT04329962 -NCT04326712 -NCT04330040 -NCT04326725 -NCT04330092 -NCT04326764 -NCT04330118 -NCT04326790 -NCT04330183 -NCT04326829 -NCT04330209 -NCT04326842 -NCT04330339 -NCT04326894 -NCT04337112 -NCT04330456 -NCT04333875 -NCT04330664 -NCT04333836 -NCT04330716 -NCT04333914 -NCT04330781 -NCT04333927 -NCT04330820 -NCT04334005 -NCT04330833 -NCT04334096 -NCT04330885 -NCT04334135 -NCT04330963 -NCT04334174 -NCT04331015 -NCT04334330 -NCT04331041 -NCT04334369 -NCT04331067 -NCT04334460 -NCT04331093 -NCT04334590 -NCT04331119 -NCT04334759 -NCT04331184 -NCT04334772 -NCT04331262 -NCT04334785 -NCT04331301 -NCT04334850 -NCT04331327 -NCT04334863 -NCT04331405 -NCT04334941 -NCT04331431 -NCT04334993 -NCT04331457 -NCT04335006 -NCT04331483 -NCT04335058 -NCT04331535 -NCT04335253 -NCT04331548 -NCT04335292 -NCT04331561 -NCT04335357 -NCT04331626 -NCT04335409 -NCT04331691 -NCT04335474 -NCT04331717 -NCT04335578 -NCT04331743 -NCT04335604 -NCT04331938 -NCT04335630 -NCT04331990 -NCT04335669 -NCT04332055 -NCT04335682 -NCT04332198 -NCT04335864 -NCT04332367 -NCT04335890 -NCT04332484 -NCT04335994 -NCT04332549 -NCT04336046 -NCT04332588 -NCT04336098 -NCT04332627 -NCT04336111 -NCT04332653 -NCT04336124 -NCT04332744 -NCT04336163 -NCT04332770 -NCT04336202 -NCT04332796 -NCT04336241 -NCT04332822 -NCT04336280 -NCT04332874 -NCT04336397 -NCT04332900 -NCT04336436 -NCT04333004 -NCT04336501 -NCT04333108 -NCT04336683 -NCT04333160 -NCT04336696 -NCT04333173 -NCT04336826 -NCT04333212 -NCT04336852 -NCT04333342 -NCT04336878 -NCT04333524 -NCT04336891 -NCT04333537 -NCT04336917 -NCT04333602 -NCT04336943 -NCT04333693 -NCT04336982 -NCT04333706 -NCT04337060 -NCT04333823 -NCT04343079 -NCT04337151 -NCT04339920 -NCT04337177 -NCT04339829 -NCT04337203 -NCT04340089 -NCT04337333 -NCT04340141 -NCT04337372 -NCT04340154 -NCT04337463 -NCT04340167 -NCT04337580 -NCT04340180 -NCT04337593 -NCT04340193 -NCT04337606 -NCT04340258 -NCT04337632 -NCT04340401 -NCT04337658 -NCT04340440 -NCT04337736 -NCT04340531 -NCT04337749 -NCT04340583 -NCT04337827 -NCT04340765 -NCT04337840 -NCT04340843 -NCT04337853 -NCT04340882 -NCT04337879 -NCT04340934 -NCT04337918 -NCT04341025 -NCT04337931 -NCT04341064 -NCT04337970 -NCT04341129 -NCT04338100 -NCT04341181 -NCT04338191 -NCT04341194 -NCT04338230 -NCT04341207 -NCT04338269 -NCT04341259 -NCT04338282 -NCT04341298 -NCT04338399 -NCT04341311 -NCT04338438 -NCT04341324 -NCT04338529 -NCT04341441 -NCT04338620 -NCT04341545 -NCT04338646 -NCT04341558 -NCT04338659 -NCT04341571 -NCT04338685 -NCT04341675 -NCT04338724 -NCT04341740 -NCT04338763 -NCT04341857 -NCT04338828 -NCT04341870 -NCT04338854 -NCT04341883 -NCT04339036 -NCT04342026 -NCT04339062 -NCT04342052 -NCT04339101 -NCT04342234 -NCT04339127 -NCT04342377 -NCT04339140 -NCT04342403 -NCT04339192 -NCT04342429 -NCT04339205 -NCT04342520 -NCT04339218 -NCT04342546 -NCT04339231 -NCT04342559 -NCT04339270 -NCT04342572 -NCT04339322 -NCT04342637 -NCT04339335 -NCT04342663 -NCT04339400 -NCT04342676 -NCT04339504 -NCT04342728 -NCT04339517 -NCT04342871 -NCT04339660 -NCT04342910 -NCT04339686 -NCT04342936 -NCT04339738 -NCT04342962 -NCT04339751 -NCT04343027 -NCT04339764 -NCT04351009 -NCT04343157 -NCT04347590 -NCT04343170 -NCT04347434 -NCT04343183 -NCT04347616 -NCT04343313 -NCT04347681 -NCT04343573 -NCT04347915 -NCT04343586 -NCT04348006 -NCT04343742 -NCT04348032 -NCT04343781 -NCT04348045 -NCT04343807 -NCT04348123 -NCT04343859 -NCT04348136 -NCT04343885 -NCT04348149 -NCT04343911 -NCT04348175 -NCT04343950 -NCT04348188 -NCT04343963 -NCT04348253 -NCT04344132 -NCT04348292 -NCT04344158 -NCT04348422 -NCT04344223 -NCT04348565 -NCT04344353 -NCT04348643 -NCT04344392 -NCT04348747 -NCT04344444 -NCT04348799 -NCT04344561 -NCT04348877 -NCT04344626 -NCT04348916 -NCT04344652 -NCT04348955 -NCT04344730 -NCT04349111 -NCT04344795 -NCT04349241 -NCT04344860 -NCT04349267 -NCT04344925 -NCT04349280 -NCT04344977 -NCT04349293 -NCT04345003 -NCT04349306 -NCT04345068 -NCT04349358 -NCT04345146 -NCT04349436 -NCT04345224 -NCT04349501 -NCT04345471 -NCT04349527 -NCT04345770 -NCT04349605 -NCT04345783 -NCT04349761 -NCT04345913 -NCT04349891 -NCT04345939 -NCT04349904 -NCT04345952 -NCT04349969 -NCT04345978 -NCT04350164 -NCT04346043 -NCT04350190 -NCT04346173 -NCT04350229 -NCT04346225 -NCT04350346 -NCT04346368 -NCT04350372 -NCT04346381 -NCT04350398 -NCT04346498 -NCT04350411 -NCT04346511 -NCT04350450 -NCT04346550 -NCT04350463 -NCT04346823 -NCT04350619 -NCT04346888 -NCT04350671 -NCT04346914 -NCT04350684 -NCT04346927 -NCT04350762 -NCT04347122 -NCT04350788 -NCT04347148 -NCT04350905 -NCT04347161 -NCT04350957 -NCT04347226 -NCT04350996 -NCT04347330 -NCT04357912 -NCT04351022 -NCT04354454 -NCT04351074 -NCT04354324 -NCT04351113 -NCT04354649 -NCT04351165 -NCT04354662 -NCT04351204 -NCT04354675 -NCT04351230 -NCT04354805 -NCT04351282 -NCT04354818 -NCT04351308 -NCT04354857 -NCT04351321 -NCT04354961 -NCT04351334 -NCT04355039 -NCT04351373 -NCT04355104 -NCT04351425 -NCT04355156 -NCT04351529 -NCT04355247 -NCT04351555 -NCT04355260 -NCT04351841 -NCT04355312 -NCT04351854 -NCT04355455 -NCT04351867 -NCT04355520 -NCT04351880 -NCT04355572 -NCT04351893 -NCT04355676 -NCT04351984 -NCT04355858 -NCT04352023 -NCT04355871 -NCT04352062 -NCT04355897 -NCT04352153 -NCT04356001 -NCT04352205 -NCT04356040 -NCT04352218 -NCT04356079 -NCT04352257 -NCT04356118 -NCT04352348 -NCT04356131 -NCT04352413 -NCT04356170 -NCT04352439 -NCT04356196 -NCT04352491 -NCT04356209 -NCT04352530 -NCT04356222 -NCT04352634 -NCT04356235 -NCT04352712 -NCT04356378 -NCT04352777 -NCT04356404 -NCT04352855 -NCT04356430 -NCT04352894 -NCT04356456 -NCT04352920 -NCT04356664 -NCT04353050 -NCT04356690 -NCT04353063 -NCT04356729 -NCT04353180 -NCT04356781 -NCT04353271 -NCT04356846 -NCT04353375 -NCT04356872 -NCT04353479 -NCT04357080 -NCT04353596 -NCT04357119 -NCT04353622 -NCT04357132 -NCT04353687 -NCT04357158 -NCT04353700 -NCT04357171 -NCT04353973 -NCT04357184 -NCT04354012 -NCT04357483 -NCT04354025 -NCT04357509 -NCT04354038 -NCT04357561 -NCT04354155 -NCT04357587 -NCT04354233 -NCT04357665 -NCT04354246 -NCT04357756 -NCT04354285 -NCT04357873 -NCT04354298 -NCT04364256 -NCT04358185 -NCT04361409 -NCT04358237 -NCT04361396 -NCT04358276 -NCT04361526 -NCT04358328 -NCT04361552 -NCT04358341 -NCT04361656 -NCT04358354 -NCT04361708 -NCT04358367 -NCT04361825 -NCT04358393 -NCT04361851 -NCT04358445 -NCT04361929 -NCT04358458 -NCT04362007 -NCT04358523 -NCT04362046 -NCT04358562 -NCT04362072 -NCT04358575 -NCT04362202 -NCT04358601 -NCT04362436 -NCT04358614 -NCT04362449 -NCT04358666 -NCT04362462 -NCT04358718 -NCT04362618 -NCT04358731 -NCT04362657 -NCT04358913 -NCT04362670 -NCT04359004 -NCT04362722 -NCT04359069 -NCT04362748 -NCT04359147 -NCT04362761 -NCT04359316 -NCT04362774 -NCT04359381 -NCT04362787 -NCT04359420 -NCT04362826 -NCT04359472 -NCT04362839 -NCT04359550 -NCT04362956 -NCT04359589 -NCT04362969 -NCT04359615 -NCT04363099 -NCT04359732 -NCT04363125 -NCT04359758 -NCT04363164 -NCT04359784 -NCT04363177 -NCT04359823 -NCT04363190 -NCT04359888 -NCT04363242 -NCT04359901 -NCT04363255 -NCT04359979 -NCT04363294 -NCT04360044 -NCT04363385 -NCT04360096 -NCT04363489 -NCT04360252 -NCT04363528 -NCT04360317 -NCT04363541 -NCT04360330 -NCT04363593 -NCT04360382 -NCT04363723 -NCT04360577 -NCT04363762 -NCT04360629 -NCT04363801 -NCT04360668 -NCT04363892 -NCT04360798 -NCT04363957 -NCT04360824 -NCT04363970 -NCT04360915 -NCT04363983 -NCT04360941 -NCT04364048 -NCT04360980 -NCT04364074 -NCT04361058 -NCT04364087 -NCT04361162 -NCT04364113 -NCT04361279 -NCT04364139 -NCT04361292 -NCT04364191 -NCT04361331 -NCT04364230 -NCT04361370 -NCT04372004 -NCT04364373 -NCT04368702 -NCT04364451 -NCT04368611 -NCT04364672 -NCT04368806 -NCT04364711 -NCT04368845 -NCT04364724 -NCT04369066 -NCT04364737 -NCT04369118 -NCT04364893 -NCT04369131 -NCT04365036 -NCT04369209 -NCT04365179 -NCT04369222 -NCT04365205 -NCT04369313 -NCT04365231 -NCT04369339 -NCT04365374 -NCT04369430 -NCT04365413 -NCT04369560 -NCT04365478 -NCT04369638 -NCT04365491 -NCT04369729 -NCT04365530 -NCT04369872 -NCT04365569 -NCT04369885 -NCT04365660 -NCT04369911 -NCT04365751 -NCT04369937 -NCT04365868 -NCT04370093 -NCT04365946 -NCT04370236 -NCT04365998 -NCT04370275 -NCT04366102 -NCT04370405 -NCT04366128 -NCT04370418 -NCT04366557 -NCT04370457 -NCT04366648 -NCT04370483 -NCT04366661 -NCT04370496 -NCT04366674 -NCT04370509 -NCT04366713 -NCT04370574 -NCT04366726 -NCT04370587 -NCT04366778 -NCT04370652 -NCT04367025 -NCT04370691 -NCT04367090 -NCT04370704 -NCT04367194 -NCT04370782 -NCT04367207 -NCT04370795 -NCT04367311 -NCT04370834 -NCT04367350 -NCT04370899 -NCT04367376 -NCT04370925 -NCT04367480 -NCT04370990 -NCT04367493 -NCT04371146 -NCT04367571 -NCT04371198 -NCT04367727 -NCT04371224 -NCT04367909 -NCT04371276 -NCT04367948 -NCT04371289 -NCT04367961 -NCT04371328 -NCT04367987 -NCT04371406 -NCT04368078 -NCT04371536 -NCT04368130 -NCT04371562 -NCT04368182 -NCT04371588 -NCT04368195 -NCT04371679 -NCT04368273 -NCT04371796 -NCT04368286 -NCT04371822 -NCT04368390 -NCT04371887 -NCT04368468 -NCT04371900 -NCT04368481 -NCT04371913 -NCT04368507 -NCT04379167 -NCT04372173 -NCT04375332 -NCT04372212 -NCT04375267 -NCT04372433 -NCT04375358 -NCT04372459 -NCT04375384 -NCT04372498 -NCT04375410 -NCT04372563 -NCT04375527 -NCT04372628 -NCT04375605 -NCT04372641 -NCT04375631 -NCT04372706 -NCT04375683 -NCT04372719 -NCT04375709 -NCT04372797 -NCT04375813 -NCT04372862 -NCT04375891 -NCT04372914 -NCT04375904 -NCT04372927 -NCT04375917 -NCT04372992 -NCT04375930 -NCT04373031 -NCT04375956 -NCT04373044 -NCT04376008 -NCT04373070 -NCT04376073 -NCT04373083 -NCT04376125 -NCT04373239 -NCT04376203 -NCT04373265 -NCT04376502 -NCT04373317 -NCT04376632 -NCT04373369 -NCT04376671 -NCT04373395 -NCT04376684 -NCT04373447 -NCT04376749 -NCT04373616 -NCT04376762 -NCT04373642 -NCT04376866 -NCT04373720 -NCT04376931 -NCT04373785 -NCT04376957 -NCT04373928 -NCT04377048 -NCT04373941 -NCT04377061 -NCT04373980 -NCT04377087 -NCT04373993 -NCT04377178 -NCT04374019 -NCT04377217 -NCT04374240 -NCT04377360 -NCT04374292 -NCT04377425 -NCT04374305 -NCT04377477 -NCT04374422 -NCT04377685 -NCT04374435 -NCT04377724 -NCT04374448 -NCT04377828 -NCT04374461 -NCT04377867 -NCT04374591 -NCT04377932 -NCT04374604 -NCT04377971 -NCT04374630 -NCT04378036 -NCT04374695 -NCT04378062 -NCT04374721 -NCT04378101 -NCT04374747 -NCT04378335 -NCT04374760 -NCT04378647 -NCT04374773 -NCT04378751 -NCT04374799 -NCT04378829 -NCT04374825 -NCT04378868 -NCT04374877 -NCT04378959 -NCT04375124 -NCT04378998 -NCT04375163 -NCT04379024 -NCT04375228 -NCT04379050 -NCT04375241 -NCT04385368 -NCT04379362 -NCT04382365 -NCT04379414 -NCT04382352 -NCT04379479 -NCT04382391 -NCT04379505 -NCT04382469 -NCT04379518 -NCT04382521 -NCT04379570 -NCT04382573 -NCT04379596 -NCT04382612 -NCT04379635 -NCT04382625 -NCT04379713 -NCT04382638 -NCT04379739 -NCT04382664 -NCT04379804 -NCT04382807 -NCT04379817 -NCT04382898 -NCT04379830 -NCT04383067 -NCT04379895 -NCT04383093 -NCT04379999 -NCT04383119 -NCT04380012 -NCT04383158 -NCT04380038 -NCT04383210 -NCT04380103 -NCT04383249 -NCT04380142 -NCT04383275 -NCT04380220 -NCT04383457 -NCT04380298 -NCT04383522 -NCT04380337 -NCT04383717 -NCT04380389 -NCT04383743 -NCT04380480 -NCT04383847 -NCT04380493 -NCT04383938 -NCT04380506 -NCT04383977 -NCT04380545 -NCT04383990 -NCT04380584 -NCT04384055 -NCT04380610 -NCT04384146 -NCT04380623 -NCT04384185 -NCT04380636 -NCT04384198 -NCT04380662 -NCT04384263 -NCT04380753 -NCT04384354 -NCT04380805 -NCT04384380 -NCT04380974 -NCT04384484 -NCT04380987 -NCT04384536 -NCT04381130 -NCT04384588 -NCT04381169 -NCT04384601 -NCT04381208 -NCT04384627 -NCT04381325 -NCT04384640 -NCT04381416 -NCT04384757 -NCT04381468 -NCT04384809 -NCT04381624 -NCT04384848 -NCT04381650 -NCT04384913 -NCT04381741 -NCT04384978 -NCT04381806 -NCT04385056 -NCT04381832 -NCT04385069 -NCT04381858 -NCT04385121 -NCT04381897 -NCT04385147 -NCT04381910 -NCT04385173 -NCT04381988 -NCT04385225 -NCT04382001 -NCT04385277 -NCT04382014 -NCT04385290 -NCT04382131 -NCT04385303 -NCT04382144 -NCT04385316 -NCT04382300 -NCT04392102 -NCT04385420 -NCT04388475 -NCT04385433 -NCT04388436 -NCT04385459 -NCT04388501 -NCT04385485 -NCT04388566 -NCT04385550 -NCT04388826 -NCT04385563 -NCT04388839 -NCT04385589 -NCT04388852 -NCT04385628 -NCT04388995 -NCT04385641 -NCT04389073 -NCT04385654 -NCT04389086 -NCT04385732 -NCT04389112 -NCT04385979 -NCT04389151 -NCT04385992 -NCT04389177 -NCT04386005 -NCT04389216 -NCT04386057 -NCT04389229 -NCT04386343 -NCT04389281 -NCT04386473 -NCT04389502 -NCT04386525 -NCT04389632 -NCT04386564 -NCT04389918 -NCT04386642 -NCT04389970 -NCT04386746 -NCT04390126 -NCT04386772 -NCT04390191 -NCT04386837 -NCT04390243 -NCT04386876 -NCT04390269 -NCT04386902 -NCT04390308 -NCT04386941 -NCT04390321 -NCT04386967 -NCT04390399 -NCT04386980 -NCT04390542 -NCT04386993 -NCT04390737 -NCT04387071 -NCT04390763 -NCT04387084 -NCT04390802 -NCT04387227 -NCT04390828 -NCT04387344 -NCT04390867 -NCT04387370 -NCT04390880 -NCT04387396 -NCT04390945 -NCT04387461 -NCT04390958 -NCT04387474 -NCT04390984 -NCT04387500 -NCT04391049 -NCT04387526 -NCT04391062 -NCT04387539 -NCT04391114 -NCT04387591 -NCT04391283 -NCT04387630 -NCT04391296 -NCT04387682 -NCT04391348 -NCT04387695 -NCT04391504 -NCT04387734 -NCT04391543 -NCT04387773 -NCT04391556 -NCT04387799 -NCT04391595 -NCT04387864 -NCT04391673 -NCT04387916 -NCT04391790 -NCT04388033 -NCT04391816 -NCT04388085 -NCT04391842 -NCT04388254 -NCT04391894 -NCT04388267 -NCT04391933 -NCT04388280 -NCT04391946 -NCT04388384 -NCT04392037 -NCT04388397 -NCT04397783 -NCT04392128 -NCT04395118 -NCT04392167 -NCT04395092 -NCT04392193 -NCT04395196 -NCT04392232 -NCT04395209 -NCT04392414 -NCT04395222 -NCT04392466 -NCT04395339 -NCT04392479 -NCT04395417 -NCT04392505 -NCT04395469 -NCT04392518 -NCT04395495 -NCT04392583 -NCT04395547 -NCT04392596 -NCT04395612 -NCT04392648 -NCT04395677 -NCT04392661 -NCT04395820 -NCT04392687 -NCT04395989 -NCT04392700 -NCT04396041 -NCT04392804 -NCT04396067 -NCT04392882 -NCT04396145 -NCT04392960 -NCT04396171 -NCT04392986 -NCT04396184 -NCT04393025 -NCT04396223 -NCT04393038 -NCT04396236 -NCT04393051 -NCT04396262 -NCT04393155 -NCT04396327 -NCT04393285 -NCT04396340 -NCT04393298 -NCT04396379 -NCT04393337 -NCT04396431 -NCT04393350 -NCT04396457 -NCT04393376 -NCT04396535 -NCT04393454 -NCT04396626 -NCT04393467 -NCT04396639 -NCT04393480 -NCT04396665 -NCT04393506 -NCT04396717 -NCT04393532 -NCT04396808 -NCT04393558 -NCT04396821 -NCT04393584 -NCT04396860 -NCT04393753 -NCT04396886 -NCT04393779 -NCT04396912 -NCT04393831 -NCT04396977 -NCT04393883 -NCT04397003 -NCT04393909 -NCT04397016 -NCT04394221 -NCT04397029 -NCT04394325 -NCT04397055 -NCT04394338 -NCT04397185 -NCT04394507 -NCT04397224 -NCT04394559 -NCT04397276 -NCT04394585 -NCT04397341 -NCT04394598 -NCT04397380 -NCT04394624 -NCT04397419 -NCT04394650 -NCT04397445 -NCT04394676 -NCT04397484 -NCT04394689 -NCT04397601 -NCT04394858 -NCT04397640 -NCT04394871 -NCT04397679 -NCT04394975 -NCT04397744 -NCT04395027 -NCT04397770 -NCT04395079 -NCT04403815 -NCT04397887 -NCT04401293 -NCT04397926 -NCT04401241 -NCT04398030 -NCT04401397 -NCT04398056 -NCT04401410 -NCT04398095 -NCT04401501 -NCT04398108 -NCT04401579 -NCT04398199 -NCT04401670 -NCT04398212 -NCT04401709 -NCT04398316 -NCT04401722 -NCT04398368 -NCT04401748 -NCT04398446 -NCT04401774 -NCT04398485 -NCT04401787 -NCT04398524 -NCT04401800 -NCT04398628 -NCT04401813 -NCT04398667 -NCT04401969 -NCT04398680 -NCT04401995 -NCT04398732 -NCT04402008 -NCT04398745 -NCT04402034 -NCT04398862 -NCT04402047 -NCT04398875 -NCT04402073 -NCT04398914 -NCT04402125 -NCT04398927 -NCT04402138 -NCT04398940 -NCT04402151 -NCT04398953 -NCT04402203 -NCT04399018 -NCT04402281 -NCT04399239 -NCT04402307 -NCT04399395 -NCT04402398 -NCT04399486 -NCT04402411 -NCT04399525 -NCT04402502 -NCT04399785 -NCT04402541 -NCT04399824 -NCT04402567 -NCT04399863 -NCT04402580 -NCT04399876 -NCT04402593 -NCT04399889 -NCT04402606 -NCT04400019 -NCT04402671 -NCT04400045 -NCT04402723 -NCT04400071 -NCT04402762 -NCT04400136 -NCT04402788 -NCT04400188 -NCT04402905 -NCT04400253 -NCT04402918 -NCT04400292 -NCT04402931 -NCT04400357 -NCT04402957 -NCT04400383 -NCT04403022 -NCT04400474 -NCT04403100 -NCT04400513 -NCT04403152 -NCT04400539 -NCT04403191 -NCT04400552 -NCT04403308 -NCT04400578 -NCT04403386 -NCT04400682 -NCT04403464 -NCT04400695 -NCT04403477 -NCT04400851 -NCT04403529 -NCT04400968 -NCT04403568 -NCT04401007 -NCT04403620 -NCT04401020 -NCT04403659 -NCT04401046 -NCT04403672 -NCT04401059 -NCT04410354 -NCT04403893 -NCT04407247 -NCT04404023 -NCT04407234 -NCT04404036 -NCT04407312 -NCT04404088 -NCT04407377 -NCT04404140 -NCT04407416 -NCT04404166 -NCT04407442 -NCT04404244 -NCT04407585 -NCT04404283 -NCT04407611 -NCT04404491 -NCT04407663 -NCT04404543 -NCT04407676 -NCT04404569 -NCT04407741 -NCT04404595 -NCT04407806 -NCT04404647 -NCT04407897 -NCT04404660 -NCT04407988 -NCT04404738 -NCT04408040 -NCT04404790 -NCT04408053 -NCT04404881 -NCT04408079 -NCT04405011 -NCT04408092 -NCT04405154 -NCT04408118 -NCT04405167 -NCT04408170 -NCT04405297 -NCT04408300 -NCT04405349 -NCT04408391 -NCT04405375 -NCT04408508 -NCT04405388 -NCT04408560 -NCT04405401 -NCT04408599 -NCT04405466 -NCT04408612 -NCT04405479 -NCT04408625 -NCT04405505 -NCT04408638 -NCT04405531 -NCT04408872 -NCT04405622 -NCT04408898 -NCT04405674 -NCT04408924 -NCT04405687 -NCT04408950 -NCT04405713 -NCT04408963 -NCT04405778 -NCT04408976 -NCT04405921 -NCT04409002 -NCT04405960 -NCT04409054 -NCT04406155 -NCT04409184 -NCT04406194 -NCT04409223 -NCT04406272 -NCT04409236 -NCT04406285 -NCT04409288 -NCT04406337 -NCT04409301 -NCT04406376 -NCT04409522 -NCT04406402 -NCT04409561 -NCT04406493 -NCT04409639 -NCT04406506 -NCT04409782 -NCT04406519 -NCT04409860 -NCT04406532 -NCT04409886 -NCT04406597 -NCT04409990 -NCT04406610 -NCT04410042 -NCT04406623 -NCT04410107 -NCT04406714 -NCT04410133 -NCT04406857 -NCT04410185 -NCT04406961 -NCT04410224 -NCT04407000 -NCT04410237 -NCT04407013 -NCT04410276 -NCT04407182 -NCT04416685 -NCT04410367 -NCT04413643 -NCT04410445 -NCT04413448 -NCT04410484 -NCT04413656 -NCT04410536 -NCT04413734 -NCT04410549 -NCT04413760 -NCT04410562 -NCT04413890 -NCT04410601 -NCT04413968 -NCT04410653 -NCT04414033 -NCT04410796 -NCT04414059 -NCT04410809 -NCT04414124 -NCT04410848 -NCT04414163 -NCT04410874 -NCT04414254 -NCT04410887 -NCT04414306 -NCT04410900 -NCT04414358 -NCT04410939 -NCT04414384 -NCT04411069 -NCT04414475 -NCT04411134 -NCT04414514 -NCT04411147 -NCT04414540 -NCT04411251 -NCT04414566 -NCT04411433 -NCT04414631 -NCT04411485 -NCT04414644 -NCT04411524 -NCT04414722 -NCT04411537 -NCT04414748 -NCT04411563 -NCT04414787 -NCT04411589 -NCT04414800 -NCT04411706 -NCT04414904 -NCT04411810 -NCT04414956 -NCT04411849 -NCT04414969 -NCT04411888 -NCT04415008 -NCT04411901 -NCT04415034 -NCT04411966 -NCT04415086 -NCT04411992 -NCT04415138 -NCT04412018 -NCT04415255 -NCT04412174 -NCT04415281 -NCT04412213 -NCT04415294 -NCT04412408 -NCT04415307 -NCT04412564 -NCT04415320 -NCT04412616 -NCT04415385 -NCT04412629 -NCT04415463 -NCT04412642 -NCT04415476 -NCT04412798 -NCT04415502 -NCT04412863 -NCT04415619 -NCT04412889 -NCT04415710 -NCT04413058 -NCT04415736 -NCT04413084 -NCT04415853 -NCT04413123 -NCT04415944 -NCT04413149 -NCT04415983 -NCT04413175 -NCT04416035 -NCT04413214 -NCT04416087 -NCT04413227 -NCT04416113 -NCT04413292 -NCT04416165 -NCT04413331 -NCT04416451 -NCT04413357 -NCT04416516 -NCT04413383 -NCT04416568 -NCT04413409 -NCT04416633 -NCT04413435 -NCT04422639 -NCT04416750 -NCT04419402 -NCT04416802 -NCT04419389 -NCT04416828 -NCT04419519 -NCT04416854 -NCT04419532 -NCT04416984 -NCT04419545 -NCT04417023 -NCT04419558 -NCT04417062 -NCT04419623 -NCT04417088 -NCT04419649 -NCT04417166 -NCT04419753 -NCT04417192 -NCT04419792 -NCT04417231 -NCT04419857 -NCT04417361 -NCT04419909 -NCT04417400 -NCT04420026 -NCT04417465 -NCT04420130 -NCT04417530 -NCT04420208 -NCT04417556 -NCT04420234 -NCT04417569 -NCT04420260 -NCT04417608 -NCT04420273 -NCT04417621 -NCT04420533 -NCT04417647 -NCT04420598 -NCT04417660 -NCT04420637 -NCT04417673 -NCT04420663 -NCT04417686 -NCT04420689 -NCT04417699 -NCT04420702 -NCT04417764 -NCT04420754 -NCT04417777 -NCT04420884 -NCT04417790 -NCT04420949 -NCT04417803 -NCT04420975 -NCT04417829 -NCT04421027 -NCT04417933 -NCT04421053 -NCT04417985 -NCT04421131 -NCT04418089 -NCT04421157 -NCT04418141 -NCT04421183 -NCT04418154 -NCT04421222 -NCT04418167 -NCT04421352 -NCT04418180 -NCT04421378 -NCT04418219 -NCT04421469 -NCT04418401 -NCT04421482 -NCT04418414 -NCT04421547 -NCT04418635 -NCT04421560 -NCT04418648 -NCT04421820 -NCT04418661 -NCT04421859 -NCT04418700 -NCT04421963 -NCT04418713 -NCT04422132 -NCT04418739 -NCT04422184 -NCT04418804 -NCT04422210 -NCT04418843 -NCT04422223 -NCT04418856 -NCT04422249 -NCT04418895 -NCT04422288 -NCT04419025 -NCT04422314 -NCT04419038 -NCT04422366 -NCT04419077 -NCT04422392 -NCT04419168 -NCT04422431 -NCT04419181 -NCT04422457 -NCT04419272 -NCT04422600 -NCT04419324 -NCT04428905 -NCT04422691 -NCT04425655 -NCT04422912 -NCT04425642 -NCT04423029 -NCT04425681 -NCT04423055 -NCT04425824 -NCT04423146 -NCT04425863 -NCT04423172 -NCT04425876 -NCT04423185 -NCT04425915 -NCT04423211 -NCT04425967 -NCT04423354 -NCT04426006 -NCT04423380 -NCT04426019 -NCT04423406 -NCT04426123 -NCT04423419 -NCT04426344 -NCT04423679 -NCT04426435 -NCT04423718 -NCT04426578 -NCT04423835 -NCT04426669 -NCT04423848 -NCT04426721 -NCT04423913 -NCT04426825 -NCT04423926 -NCT04426877 -NCT04423965 -NCT04426955 -NCT04424004 -NCT04427072 -NCT04424043 -NCT04427111 -NCT04424121 -NCT04427215 -NCT04424134 -NCT04427228 -NCT04424147 -NCT04427293 -NCT04424407 -NCT04427306 -NCT04424472 -NCT04427449 -NCT04424485 -NCT04427501 -NCT04424576 -NCT04427527 -NCT04424602 -NCT04427553 -NCT04424641 -NCT04427631 -NCT04424654 -NCT04427670 -NCT04424680 -NCT04427709 -NCT04424719 -NCT04427774 -NCT04424732 -NCT04427787 -NCT04424758 -NCT04427800 -NCT04424901 -NCT04427813 -NCT04424914 -NCT04427826 -NCT04424940 -NCT04427891 -NCT04424966 -NCT04428047 -NCT04424979 -NCT04428073 -NCT04425018 -NCT04428086 -NCT04425070 -NCT04428138 -NCT04425083 -NCT04428151 -NCT04425122 -NCT04428203 -NCT04425135 -NCT04428333 -NCT04425148 -NCT04428398 -NCT04425226 -NCT04428411 -NCT04425239 -NCT04428463 -NCT04425252 -NCT04428554 -NCT04425265 -NCT04428567 -NCT04425291 -NCT04428619 -NCT04425421 -NCT04428671 -NCT04425447 -NCT04428749 -NCT04425512 -NCT04428788 -NCT04425577 -NCT04428879 -NCT04425616 -NCT04434989 -NCT04429061 -NCT04432337 -NCT04429087 -NCT04432233 -NCT04429139 -NCT04432376 -NCT04429191 -NCT04432402 -NCT04429204 -NCT04432454 -NCT04429321 -NCT04432506 -NCT04429438 -NCT04432597 -NCT04429451 -NCT04432649 -NCT04429490 -NCT04432714 -NCT04429503 -NCT04432727 -NCT04429542 -NCT04432753 -NCT04429581 -NCT04432818 -NCT04429633 -NCT04432857 -NCT04429698 -NCT04433013 -NCT04429880 -NCT04433039 -NCT04429893 -NCT04433143 -NCT04429906 -NCT04433156 -NCT04429919 -NCT04433169 -NCT04429945 -NCT04433182 -NCT04430023 -NCT04433221 -NCT04430036 -NCT04433494 -NCT04430166 -NCT04433507 -NCT04430192 -NCT04433546 -NCT04430335 -NCT04433611 -NCT04430348 -NCT04433650 -NCT04430361 -NCT04433754 -NCT04430452 -NCT04433793 -NCT04430530 -NCT04433819 -NCT04430569 -NCT04433871 -NCT04430595 -NCT04433923 -NCT04430699 -NCT04433936 -NCT04430738 -NCT04433949 -NCT04430842 -NCT04434040 -NCT04430855 -NCT04434053 -NCT04430881 -NCT04434144 -NCT04430894 -NCT04434196 -NCT04430933 -NCT04434222 -NCT04430946 -NCT04434274 -NCT04430985 -NCT04434326 -NCT04431024 -NCT04434378 -NCT04431089 -NCT04434404 -NCT04431193 -NCT04434443 -NCT04431206 -NCT04434469 -NCT04431258 -NCT04434482 -NCT04431271 -NCT04434508 -NCT04431414 -NCT04434521 -NCT04431518 -NCT04434547 -NCT04431609 -NCT04434560 -NCT04431622 -NCT04434612 -NCT04431635 -NCT04434651 -NCT04431648 -NCT04434677 -NCT04431674 -NCT04434768 -NCT04431726 -NCT04434898 -NCT04431830 -NCT04434937 -NCT04431895 -NCT04434976 -NCT04432207 -NCT04441203 -NCT04435197 -NCT04438538 -NCT04435210 -NCT04438525 -NCT04435444 -NCT04438564 -NCT04435652 -NCT04438577 -NCT04435665 -NCT04438655 -NCT04435691 -NCT04438824 -NCT04435704 -NCT04438902 -NCT04435860 -NCT04439006 -NCT04435938 -NCT04439071 -NCT04435951 -NCT04439084 -NCT04435977 -NCT04439110 -NCT04436029 -NCT04439123 -NCT04436042 -NCT04439136 -NCT04436081 -NCT04439149 -NCT04436107 -NCT04439162 -NCT04436133 -NCT04439175 -NCT04436159 -NCT04439188 -NCT04436341 -NCT04439201 -NCT04436367 -NCT04439214 -NCT04436406 -NCT04439227 -NCT04436601 -NCT04439240 -NCT04436692 -NCT04439253 -NCT04436705 -NCT04439266 -NCT04436744 -NCT04439279 -NCT04436796 -NCT04439292 -NCT04436809 -NCT04439305 -NCT04436835 -NCT04439318 -NCT04436965 -NCT04439331 -NCT04436991 -NCT04439344 -NCT04437030 -NCT04439357 -NCT04437043 -NCT04439565 -NCT04437108 -NCT04439721 -NCT04437134 -NCT04439799 -NCT04437147 -NCT04439890 -NCT04437160 -NCT04439955 -NCT04437212 -NCT04440150 -NCT04437277 -NCT04440189 -NCT04437290 -NCT04440267 -NCT04437329 -NCT04440358 -NCT04437381 -NCT04440436 -NCT04437407 -NCT04440579 -NCT04437563 -NCT04440605 -NCT04437602 -NCT04440644 -NCT04437784 -NCT04440683 -NCT04437810 -NCT04440735 -NCT04437953 -NCT04440865 -NCT04437979 -NCT04440917 -NCT04438005 -NCT04440930 -NCT04438044 -NCT04440943 -NCT04438057 -NCT04440956 -NCT04438083 -NCT04440982 -NCT04438239 -NCT04440995 -NCT04438304 -NCT04441099 -NCT04438382 -NCT04441138 -NCT04438447 -NCT04441164 -NCT04438486 -NCT04448002 -NCT04441216 -NCT04445025 -NCT04441242 -NCT04445012 -NCT04441281 -NCT04445064 -NCT04441411 -NCT04445415 -NCT04441450 -NCT04445675 -NCT04441489 -NCT04445701 -NCT04441541 -NCT04445792 -NCT04441580 -NCT04445844 -NCT04441606 -NCT04445896 -NCT04441645 -NCT04445974 -NCT04441762 -NCT04445987 -NCT04441827 -NCT04446052 -NCT04441840 -NCT04446091 -NCT04442022 -NCT04446117 -NCT04442035 -NCT04446130 -NCT04442048 -NCT04446260 -NCT04442126 -NCT04446325 -NCT04442321 -NCT04446338 -NCT04442412 -NCT04446351 -NCT04442490 -NCT04446377 -NCT04442555 -NCT04446416 -NCT04442581 -NCT04446429 -NCT04442646 -NCT04446494 -NCT04442672 -NCT04446559 -NCT04442724 -NCT04446624 -NCT04442841 -NCT04446663 -NCT04442984 -NCT04446728 -NCT04443010 -NCT04446949 -NCT04443036 -NCT04446962 -NCT04443049 -NCT04447027 -NCT04443062 -NCT04447066 -NCT04443088 -NCT04447079 -NCT04443296 -NCT04447092 -NCT04443309 -NCT04447105 -NCT04443322 -NCT04447118 -NCT04443348 -NCT04447144 -NCT04443413 -NCT04447183 -NCT04443452 -NCT04447235 -NCT04443543 -NCT04447274 -NCT04443686 -NCT04447313 -NCT04443751 -NCT04447326 -NCT04443829 -NCT04447352 -NCT04444024 -NCT04447391 -NCT04444141 -NCT04447482 -NCT04444167 -NCT04447547 -NCT04444193 -NCT04447573 -NCT04444219 -NCT04447612 -NCT04444232 -NCT04447664 -NCT04444297 -NCT04447677 -NCT04444427 -NCT04447703 -NCT04444531 -NCT04447716 -NCT04444609 -NCT04447755 -NCT04444622 -NCT04447768 -NCT04444869 -NCT04447872 -NCT04444921 -NCT04447989 -NCT04444986 -NCT04454125 -NCT04448145 -NCT04451473 -NCT04448184 -NCT04451369 -NCT04448249 -NCT04451616 -NCT04448301 -NCT04451629 -NCT04448340 -NCT04451707 -NCT04448379 -NCT04451928 -NCT04448522 -NCT04452019 -NCT04448574 -NCT04452032 -NCT04448600 -NCT04452084 -NCT04448613 -NCT04452162 -NCT04448678 -NCT04452214 -NCT04448691 -NCT04452227 -NCT04448834 -NCT04452253 -NCT04448873 -NCT04452292 -NCT04448886 -NCT04452305 -NCT04448964 -NCT04452357 -NCT04449133 -NCT04452370 -NCT04449146 -NCT04452396 -NCT04449237 -NCT04452409 -NCT04449289 -NCT04452422 -NCT04449419 -NCT04452461 -NCT04449445 -NCT04452526 -NCT04449458 -NCT04452578 -NCT04449510 -NCT04452591 -NCT04449523 -NCT04452604 -NCT04449549 -NCT04452734 -NCT04449614 -NCT04452760 -NCT04449666 -NCT04452799 -NCT04449679 -NCT04452812 -NCT04449809 -NCT04452825 -NCT04449822 -NCT04452864 -NCT04449848 -NCT04452877 -NCT04449861 -NCT04452890 -NCT04449874 -NCT04452929 -NCT04450043 -NCT04452955 -NCT04450069 -NCT04453020 -NCT04450082 -NCT04453046 -NCT04450160 -NCT04453072 -NCT04450173 -NCT04453241 -NCT04450264 -NCT04453306 -NCT04450290 -NCT04453345 -NCT04450316 -NCT04453384 -NCT04450407 -NCT04453423 -NCT04450498 -NCT04453501 -NCT04450524 -NCT04453527 -NCT04450563 -NCT04453813 -NCT04450628 -NCT04453826 -NCT04450654 -NCT04453839 -NCT04450706 -NCT04453878 -NCT04450732 -NCT04453904 -NCT04450836 -NCT04453930 -NCT04450901 -NCT04454047 -NCT04451200 -NCT04454060 -NCT04451252 -NCT04454086 -NCT04451265 -NCT04454099 -NCT04451330 -NCT04460274 -NCT04454164 -NCT04457297 -NCT04454177 -NCT04457284 -NCT04454268 -NCT04457349 -NCT04454320 -NCT04457362 -NCT04454437 -NCT04457401 -NCT04454450 -NCT04457440 -NCT04454476 -NCT04457492 -NCT04454489 -NCT04457518 -NCT04454502 -NCT04457596 -NCT04454528 -NCT04457674 -NCT04454541 -NCT04457700 -NCT04454697 -NCT04457778 -NCT04454723 -NCT04457830 -NCT04454762 -NCT04457843 -NCT04454866 -NCT04457869 -NCT04454892 -NCT04457882 -NCT04454905 -NCT04457895 -NCT04454970 -NCT04458168 -NCT04454983 -NCT04458194 -NCT04455139 -NCT04458207 -NCT04455425 -NCT04458259 -NCT04455438 -NCT04458272 -NCT04455503 -NCT04458311 -NCT04455555 -NCT04458376 -NCT04455568 -NCT04458389 -NCT04455594 -NCT04458402 -NCT04455620 -NCT04458532 -NCT04455698 -NCT04458597 -NCT04455750 -NCT04458610 -NCT04455802 -NCT04458636 -NCT04455828 -NCT04458662 -NCT04455932 -NCT04458688 -NCT04455958 -NCT04458753 -NCT04456023 -NCT04458792 -NCT04456140 -NCT04458909 -NCT04456192 -NCT04458922 -NCT04456205 -NCT04458974 -NCT04456218 -NCT04459065 -NCT04456322 -NCT04459078 -NCT04456387 -NCT04459169 -NCT04456426 -NCT04459273 -NCT04456517 -NCT04459286 -NCT04456582 -NCT04459416 -NCT04456699 -NCT04459611 -NCT04456894 -NCT04459663 -NCT04456920 -NCT04459702 -NCT04456972 -NCT04459715 -NCT04457011 -NCT04459754 -NCT04457024 -NCT04459897 -NCT04457076 -NCT04460014 -NCT04457089 -NCT04460040 -NCT04457128 -NCT04460053 -NCT04457180 -NCT04460066 -NCT04457232 -NCT04460235 -NCT04457245 -NCT04460248 -NCT04457258 -NCT04465734 -NCT04460300 -NCT04462913 -NCT04460326 -NCT04462848 -NCT04460352 -NCT04462926 -NCT04460391 -NCT04462965 -NCT04460404 -NCT04462991 -NCT04460430 -NCT04463056 -NCT04460456 -NCT04463069 -NCT04460495 -NCT04463082 -NCT04460508 -NCT04463095 -NCT04460599 -NCT04463121 -NCT04460625 -NCT04463186 -NCT04460729 -NCT04463316 -NCT04460807 -NCT04463368 -NCT04460872 -NCT04463420 -NCT04460937 -NCT04463459 -NCT04460963 -NCT04463524 -NCT04460989 -NCT04463537 -NCT04461171 -NCT04463719 -NCT04461275 -NCT04463732 -NCT04461327 -NCT04463758 -NCT04461340 -NCT04463771 -NCT04461418 -NCT04463927 -NCT04461457 -NCT04463992 -NCT04461509 -NCT04464174 -NCT04461561 -NCT04464200 -NCT04461574 -NCT04464226 -NCT04461587 -NCT04464382 -NCT04461600 -NCT04464512 -NCT04461626 -NCT04464551 -NCT04461639 -NCT04464603 -NCT04461652 -NCT04464759 -NCT04461678 -NCT04464798 -NCT04461730 -NCT04464811 -NCT04461808 -NCT04464837 -NCT04461821 -NCT04464876 -NCT04461886 -NCT04464889 -NCT04461938 -NCT04464915 -NCT04462003 -NCT04464967 -NCT04462042 -NCT04465045 -NCT04462068 -NCT04465084 -NCT04462081 -NCT04465097 -NCT04462185 -NCT04465123 -NCT04462198 -NCT04465162 -NCT04462276 -NCT04465253 -NCT04462302 -NCT04465331 -NCT04462328 -NCT04465396 -NCT04462354 -NCT04465435 -NCT04462367 -NCT04465487 -NCT04462406 -NCT04465500 -NCT04462445 -NCT04465513 -NCT04462471 -NCT04465539 -NCT04462601 -NCT04465591 -NCT04462666 -NCT04465604 -NCT04462705 -NCT04465643 -NCT04462770 -NCT04465682 -NCT04462809 -NCT04472910 -NCT04465760 -NCT04470076 -NCT04465786 -NCT04470024 -NCT04465968 -NCT04470141 -NCT04466020 -NCT04470323 -NCT04466072 -NCT04470336 -NCT04466241 -NCT04470479 -NCT04466254 -NCT04470518 -NCT04466475 -NCT04470531 -NCT04466592 -NCT04470583 -NCT04466774 -NCT04470674 -NCT04466826 -NCT04470726 -NCT04466891 -NCT04470843 -NCT04466917 -NCT04470856 -NCT04467021 -NCT04471064 -NCT04467190 -NCT04471155 -NCT04467203 -NCT04471194 -NCT04467242 -NCT04471220 -NCT04467281 -NCT04471233 -NCT04467515 -NCT04471259 -NCT04467541 -NCT04471272 -NCT04467554 -NCT04471285 -NCT04467593 -NCT04471298 -NCT04467684 -NCT04471415 -NCT04467710 -NCT04471428 -NCT04467736 -NCT04471480 -NCT04467853 -NCT04471597 -NCT04467983 -NCT04471675 -NCT04468061 -NCT04471727 -NCT04468165 -NCT04471740 -NCT04468191 -NCT04471805 -NCT04468243 -NCT04471818 -NCT04468516 -NCT04471831 -NCT04468542 -NCT04471844 -NCT04468607 -NCT04471961 -NCT04468841 -NCT04471974 -NCT04468867 -NCT04471987 -NCT04468919 -NCT04472026 -NCT04469075 -NCT04472039 -NCT04469127 -NCT04472052 -NCT04469140 -NCT04472130 -NCT04469153 -NCT04472169 -NCT04469179 -NCT04472312 -NCT04469205 -NCT04472364 -NCT04469244 -NCT04472377 -NCT04469296 -NCT04472429 -NCT04469309 -NCT04472468 -NCT04469426 -NCT04472546 -NCT04469478 -NCT04472572 -NCT04469504 -NCT04472650 -NCT04469517 -NCT04472702 -NCT04469530 -NCT04472767 -NCT04469556 -NCT04472806 -NCT04469699 -NCT04472832 -NCT04469725 -NCT04472845 -NCT04469764 -NCT04472858 -NCT04469946 -NCT04479241 -NCT04472923 -NCT04476420 -NCT04472949 -NCT04476394 -NCT04472988 -NCT04476459 -NCT04473040 -NCT04476485 -NCT04473066 -NCT04476511 -NCT04473170 -NCT04476537 -NCT04473339 -NCT04476563 -NCT04473430 -NCT04476641 -NCT04473443 -NCT04476654 -NCT04473716 -NCT04476719 -NCT04473742 -NCT04476745 -NCT04473768 -NCT04476797 -NCT04473781 -NCT04476875 -NCT04473833 -NCT04476888 -NCT04473859 -NCT04476927 -NCT04473872 -NCT04477005 -NCT04473911 -NCT04477057 -NCT04473937 -NCT04477096 -NCT04474119 -NCT04477135 -NCT04474184 -NCT04477200 -NCT04474353 -NCT04477291 -NCT04474405 -NCT04477343 -NCT04474470 -NCT04477486 -NCT04474613 -NCT04477512 -NCT04474626 -NCT04477616 -NCT04474678 -NCT04477746 -NCT04474808 -NCT04477759 -NCT04474821 -NCT04477772 -NCT04474847 -NCT04477785 -NCT04474912 -NCT04477837 -NCT04474925 -NCT04477850 -NCT04474951 -NCT04478110 -NCT04474964 -NCT04478123 -NCT04475016 -NCT04478162 -NCT04475029 -NCT04478175 -NCT04475133 -NCT04478227 -NCT04475159 -NCT04478266 -NCT04475198 -NCT04478279 -NCT04475523 -NCT04478292 -NCT04475640 -NCT04478318 -NCT04475705 -NCT04478344 -NCT04475731 -NCT04478409 -NCT04475796 -NCT04478461 -NCT04475809 -NCT04478487 -NCT04475874 -NCT04478513 -NCT04475939 -NCT04478526 -NCT04476004 -NCT04478578 -NCT04476030 -NCT04478669 -NCT04476095 -NCT04478695 -NCT04476121 -NCT04478851 -NCT04476199 -NCT04479085 -NCT04476251 -NCT04479098 -NCT04476264 -NCT04479111 -NCT04476303 -NCT04479163 -NCT04476329 -NCT04479202 -NCT04476342 -NCT04484532 -NCT04479267 -NCT04481633 -NCT04479280 -NCT04481620 -NCT04479306 -NCT04481659 -NCT04479319 -NCT04481672 -NCT04479423 -NCT04481763 -NCT04479436 -NCT04481802 -NCT04479449 -NCT04481841 -NCT04479501 -NCT04481867 -NCT04479514 -NCT04481893 -NCT04479527 -NCT04481932 -NCT04479579 -NCT04481958 -NCT04479592 -NCT04482036 -NCT04479657 -NCT04482075 -NCT04479696 -NCT04482114 -NCT04479761 -NCT04482127 -NCT04479787 -NCT04482244 -NCT04479826 -NCT04482257 -NCT04479904 -NCT04482309 -NCT04480008 -NCT04482595 -NCT04480034 -NCT04482686 -NCT04480060 -NCT04482699 -NCT04480099 -NCT04482712 -NCT04480125 -NCT04482738 -NCT04480164 -NCT04482829 -NCT04480190 -NCT04482855 -NCT04480203 -NCT04482894 -NCT04480216 -NCT04482907 -NCT04480229 -NCT04482933 -NCT04480268 -NCT04482946 -NCT04480307 -NCT04483076 -NCT04480372 -NCT04483154 -NCT04480398 -NCT04483206 -NCT04480437 -NCT04483219 -NCT04480502 -NCT04483284 -NCT04480541 -NCT04483362 -NCT04480619 -NCT04483414 -NCT04480645 -NCT04483505 -NCT04480723 -NCT04483544 -NCT04480788 -NCT04483557 -NCT04480853 -NCT04483726 -NCT04480866 -NCT04483739 -NCT04480983 -NCT04483778 -NCT04481009 -NCT04483830 -NCT04481022 -NCT04483947 -NCT04481035 -NCT04484012 -NCT04481048 -NCT04484038 -NCT04481061 -NCT04484064 -NCT04481100 -NCT04484077 -NCT04481113 -NCT04484103 -NCT04481204 -NCT04484142 -NCT04481230 -NCT04484415 -NCT04481256 -NCT04484467 -NCT04481321 -NCT04484480 -NCT04481360 -NCT04484493 -NCT04481464 -NCT04484506 -NCT04481607 -NCT04491565 -NCT04484545 -NCT04487704 -NCT04484597 -NCT04487639 -NCT04484623 -NCT04487756 -NCT04484636 -NCT04487847 -NCT04484649 -NCT04487912 -NCT04484701 -NCT04488003 -NCT04484714 -NCT04488016 -NCT04484818 -NCT04488068 -NCT04484909 -NCT04488107 -NCT04485013 -NCT04488120 -NCT04485026 -NCT04488159 -NCT04485039 -NCT04488224 -NCT04485052 -NCT04488354 -NCT04485065 -NCT04488614 -NCT04485247 -NCT04488679 -NCT04485286 -NCT04488705 -NCT04485312 -NCT04488783 -NCT04485403 -NCT04488822 -NCT04485416 -NCT04488965 -NCT04485559 -NCT04489134 -NCT04485637 -NCT04489173 -NCT04485650 -NCT04489212 -NCT04485767 -NCT04489420 -NCT04485923 -NCT04489693 -NCT04485949 -NCT04489706 -NCT04486105 -NCT04489745 -NCT04486131 -NCT04489758 -NCT04486183 -NCT04489771 -NCT04486287 -NCT04489862 -NCT04486326 -NCT04489888 -NCT04486352 -NCT04489940 -NCT04486378 -NCT04490161 -NCT04486391 -NCT04490239 -NCT04486573 -NCT04490252 -NCT04486651 -NCT04490421 -NCT04486716 -NCT04490512 -NCT04486742 -NCT04490551 -NCT04486755 -NCT04490590 -NCT04486781 -NCT04490603 -NCT04486833 -NCT04490694 -NCT04486846 -NCT04490707 -NCT04486872 -NCT04490733 -NCT04486911 -NCT04490746 -NCT04486937 -NCT04490824 -NCT04486976 -NCT04490889 -NCT04487002 -NCT04490954 -NCT04487067 -NCT04490967 -NCT04487080 -NCT04490993 -NCT04487093 -NCT04491006 -NCT04487106 -NCT04491084 -NCT04487223 -NCT04491110 -NCT04487236 -NCT04491162 -NCT04487327 -NCT04491370 -NCT04487340 -NCT04491435 -NCT04487561 -NCT04491513 -NCT04487587 -NCT04497688 -NCT04491591 -NCT04494945 -NCT04491643 -NCT04494763 -NCT04491734 -NCT04494958 -NCT04491747 -NCT04495010 -NCT04491799 -NCT04495088 -NCT04491851 -NCT04495127 -NCT04491916 -NCT04495153 -NCT04491942 -NCT04495179 -NCT04491955 -NCT04495218 -NCT04492007 -NCT04495257 -NCT04492033 -NCT04495296 -NCT04492046 -NCT04495309 -NCT04492150 -NCT04495348 -NCT04492163 -NCT04495387 -NCT04492176 -NCT04495439 -NCT04492215 -NCT04495556 -NCT04492293 -NCT04495569 -NCT04492397 -NCT04495621 -NCT04492410 -NCT04495660 -NCT04492488 -NCT04495699 -NCT04492553 -NCT04495764 -NCT04492566 -NCT04495777 -NCT04492592 -NCT04495894 -NCT04492865 -NCT04495920 -NCT04492904 -NCT04496011 -NCT04492995 -NCT04496089 -NCT04493034 -NCT04496219 -NCT04493060 -NCT04496310 -NCT04493099 -NCT04496349 -NCT04493125 -NCT04496440 -NCT04493138 -NCT04496479 -NCT04493164 -NCT04496492 -NCT04493177 -NCT04496609 -NCT04493203 -NCT04496635 -NCT04493307 -NCT04496674 -NCT04493333 -NCT04496726 -NCT04493411 -NCT04496739 -NCT04493489 -NCT04496778 -NCT04493593 -NCT04496791 -NCT04493619 -NCT04496960 -NCT04493658 -NCT04496973 -NCT04493853 -NCT04496986 -NCT04493892 -NCT04497012 -NCT04494009 -NCT04497038 -NCT04494022 -NCT04497116 -NCT04494061 -NCT04497142 -NCT04494113 -NCT04497194 -NCT04494204 -NCT04497285 -NCT04494295 -NCT04497298 -NCT04494334 -NCT04497311 -NCT04494373 -NCT04497337 -NCT04494425 -NCT04497428 -NCT04494503 -NCT04497454 -NCT04494529 -NCT04497493 -NCT04494542 -NCT04497584 -NCT04494620 -NCT04503473 -NCT04497701 -NCT04500704 -NCT04497714 -NCT04500587 -NCT04497831 -NCT04500717 -NCT04497844 -NCT04501029 -NCT04497961 -NCT04501055 -NCT04497987 -NCT04501081 -NCT04498052 -NCT04501094 -NCT04498117 -NCT04501120 -NCT04498130 -NCT04501159 -NCT04498221 -NCT04501250 -NCT04498325 -NCT04501263 -NCT04498520 -NCT04501276 -NCT04498533 -NCT04501419 -NCT04498546 -NCT04501445 -NCT04498572 -NCT04501484 -NCT04498611 -NCT04501510 -NCT04498650 -NCT04501523 -NCT04498689 -NCT04501614 -NCT04498702 -NCT04501705 -NCT04498767 -NCT04501718 -NCT04498793 -NCT04501744 -NCT04498936 -NCT04501770 -NCT04499053 -NCT04501874 -NCT04499118 -NCT04501926 -NCT04499157 -NCT04501939 -NCT04499339 -NCT04502030 -NCT04499352 -NCT04502082 -NCT04499365 -NCT04502095 -NCT04499378 -NCT04502186 -NCT04499430 -NCT04502199 -NCT04499469 -NCT04502264 -NCT04499521 -NCT04502394 -NCT04499573 -NCT04502407 -NCT04499586 -NCT04502446 -NCT04499677 -NCT04502459 -NCT04499833 -NCT04502524 -NCT04499924 -NCT04502550 -NCT04499950 -NCT04502602 -NCT04500041 -NCT04502641 -NCT04500067 -NCT04502680 -NCT04500080 -NCT04502706 -NCT04500106 -NCT04502719 -NCT04500145 -NCT04502745 -NCT04500171 -NCT04502797 -NCT04500223 -NCT04502888 -NCT04500262 -NCT04502927 -NCT04500288 -NCT04503044 -NCT04500301 -NCT04503070 -NCT04500314 -NCT04503096 -NCT04500353 -NCT04503148 -NCT04500392 -NCT04503200 -NCT04500405 -NCT04503265 -NCT04500418 -NCT04503278 -NCT04500431 -NCT04503330 -NCT04500548 -NCT04503460 -NCT04500561 -NCT04509323 -NCT04503538 -NCT04506671 -NCT04503564 -NCT04506658 -NCT04503668 -NCT04506684 -NCT04503681 -NCT04506775 -NCT04503694 -NCT04506840 -NCT04503733 -NCT04506853 -NCT04503772 -NCT04506879 -NCT04503785 -NCT04506983 -NCT04503850 -NCT04507009 -NCT04503902 -NCT04507035 -NCT04503941 -NCT04507048 -NCT04503967 -NCT04507217 -NCT04503980 -NCT04507347 -NCT04504032 -NCT04507373 -NCT04504071 -NCT04507477 -NCT04504110 -NCT04507555 -NCT04504227 -NCT04507568 -NCT04504331 -NCT04507698 -NCT04504461 -NCT04507789 -NCT04504487 -NCT04507828 -NCT04504526 -NCT04507841 -NCT04504565 -NCT04507893 -NCT04504604 -NCT04507932 -NCT04504669 -NCT04507984 -NCT04504708 -NCT04508023 -NCT04504825 -NCT04508088 -NCT04504838 -NCT04508140 -NCT04504916 -NCT04508179 -NCT04504942 -NCT04508205 -NCT04505150 -NCT04508257 -NCT04505215 -NCT04508283 -NCT04505254 -NCT04508309 -NCT04505267 -NCT04508348 -NCT04505293 -NCT04508361 -NCT04505475 -NCT04508387 -NCT04505553 -NCT04508400 -NCT04505592 -NCT04508426 -NCT04505683 -NCT04508452 -NCT04505696 -NCT04508491 -NCT04505735 -NCT04508647 -NCT04505813 -NCT04508660 -NCT04505826 -NCT04508686 -NCT04505839 -NCT04508725 -NCT04505956 -NCT04508764 -NCT04505995 -NCT04508790 -NCT04506008 -NCT04508816 -NCT04506086 -NCT04508829 -NCT04506138 -NCT04508842 -NCT04506242 -NCT04509063 -NCT04506281 -NCT04509154 -NCT04506359 -NCT04509167 -NCT04506411 -NCT04509180 -NCT04506476 -NCT04509271 -NCT04506528 -NCT04509284 -NCT04506554 -NCT04509310 -NCT04506567 -NCT04514419 -NCT04509349 -NCT04512144 -NCT04509362 -NCT04512105 -NCT04509466 -NCT04512170 -NCT04509492 -NCT04512196 -NCT04509557 -NCT04512209 -NCT04509570 -NCT04512235 -NCT04509596 -NCT04512261 -NCT04509609 -NCT04512352 -NCT04509622 -NCT04512417 -NCT04509635 -NCT04512430 -NCT04509648 -NCT04512495 -NCT04509661 -NCT04512508 -NCT04509726 -NCT04512534 -NCT04509765 -NCT04512547 -NCT04509921 -NCT04512599 -NCT04509960 -NCT04512716 -NCT04510051 -NCT04512820 -NCT04510064 -NCT04512885 -NCT04510077 -NCT04512911 -NCT04510103 -NCT04512937 -NCT04510246 -NCT04512963 -NCT04510259 -NCT04513002 -NCT04510285 -NCT04513028 -NCT04510311 -NCT04513054 -NCT04510402 -NCT04513067 -NCT04510415 -NCT04513093 -NCT04510428 -NCT04513171 -NCT04510454 -NCT04513197 -NCT04510584 -NCT04513223 -NCT04510597 -NCT04513288 -NCT04510610 -NCT04513301 -NCT04510636 -NCT04513366 -NCT04510714 -NCT04513405 -NCT04510727 -NCT04513418 -NCT04510818 -NCT04513431 -NCT04510896 -NCT04513444 -NCT04510935 -NCT04513522 -NCT04511013 -NCT04513639 -NCT04511026 -NCT04513665 -NCT04511039 -NCT04513678 -NCT04511052 -NCT04513704 -NCT04511078 -NCT04513717 -NCT04511130 -NCT04513808 -NCT04511351 -NCT04513821 -NCT04511455 -NCT04513860 -NCT04511533 -NCT04513925 -NCT04511689 -NCT04513951 -NCT04511702 -NCT04513977 -NCT04511793 -NCT04514029 -NCT04511832 -NCT04514042 -NCT04511845 -NCT04514081 -NCT04511871 -NCT04514159 -NCT04511936 -NCT04514250 -NCT04511975 -NCT04514328 -NCT04511988 -NCT04514393 -NCT04512092 -NCT04520412 -NCT04514445 -NCT04517539 -NCT04514484 -NCT04517526 -NCT04514497 -NCT04517630 -NCT04514510 -NCT04517643 -NCT04514614 -NCT04517708 -NCT04514692 -NCT04517747 -NCT04514718 -NCT04517955 -NCT04514796 -NCT04518046 -NCT04514809 -NCT04518085 -NCT04514822 -NCT04518098 -NCT04514835 -NCT04518124 -NCT04514887 -NCT04518137 -NCT04515004 -NCT04518280 -NCT04515043 -NCT04518345 -NCT04515238 -NCT04518410 -NCT04515394 -NCT04518436 -NCT04515420 -NCT04518475 -NCT04515459 -NCT04518488 -NCT04515498 -NCT04518514 -NCT04515550 -NCT04518527 -NCT04515576 -NCT04518540 -NCT04515602 -NCT04518579 -NCT04515615 -NCT04518709 -NCT04515693 -NCT04518774 -NCT04515810 -NCT04518800 -NCT04515836 -NCT04518852 -NCT04515966 -NCT04518917 -NCT04515979 -NCT04518969 -NCT04516005 -NCT04519021 -NCT04516070 -NCT04519086 -NCT04516135 -NCT04519125 -NCT04516174 -NCT04519138 -NCT04516200 -NCT04519151 -NCT04516330 -NCT04519346 -NCT04516382 -NCT04519398 -NCT04516447 -NCT04519463 -NCT04516473 -NCT04519476 -NCT04516551 -NCT04519502 -NCT04516616 -NCT04519515 -NCT04516655 -NCT04519593 -NCT04516681 -NCT04519879 -NCT04516733 -NCT04519905 -NCT04516759 -NCT04519983 -NCT04516915 -NCT04520022 -NCT04517019 -NCT04520061 -NCT04517058 -NCT04520074 -NCT04517162 -NCT04520126 -NCT04517214 -NCT04520139 -NCT04517227 -NCT04520230 -NCT04517240 -NCT04520256 -NCT04517266 -NCT04520269 -NCT04517292 -NCT04520295 -NCT04517357 -NCT04520334 -NCT04517370 -NCT04520347 -NCT04517422 -NCT04520386 -NCT04517435 -NCT04525859 -NCT04520464 -NCT04523402 -NCT04520516 -NCT04523350 -NCT04520529 -NCT04523428 -NCT04520646 -NCT04523441 -NCT04520711 -NCT04523454 -NCT04520737 -NCT04523467 -NCT04520828 -NCT04523480 -NCT04520906 -NCT04523493 -NCT04520932 -NCT04523571 -NCT04521075 -NCT04523597 -NCT04521153 -NCT04523623 -NCT04521179 -NCT04523662 -NCT04521218 -NCT04523688 -NCT04521231 -NCT04523818 -NCT04521335 -NCT04523857 -NCT04521348 -NCT04523883 -NCT04521361 -NCT04523896 -NCT04521387 -NCT04523987 -NCT04521400 -NCT04524000 -NCT04521452 -NCT04524117 -NCT04521478 -NCT04524156 -NCT04521491 -NCT04524195 -NCT04521621 -NCT04524208 -NCT04521686 -NCT04524260 -NCT04521764 -NCT04524273 -NCT04521790 -NCT04524299 -NCT04521803 -NCT04524338 -NCT04521881 -NCT04524442 -NCT04521894 -NCT04524455 -NCT04521946 -NCT04524468 -NCT04521972 -NCT04524481 -NCT04522050 -NCT04524507 -NCT04522076 -NCT04524624 -NCT04522180 -NCT04524676 -NCT04522232 -NCT04524689 -NCT04522284 -NCT04524702 -NCT04522323 -NCT04524728 -NCT04522336 -NCT04524832 -NCT04522375 -NCT04524871 -NCT04522414 -NCT04524884 -NCT04522479 -NCT04524897 -NCT04522544 -NCT04524910 -NCT04522557 -NCT04525014 -NCT04522570 -NCT04525027 -NCT04522648 -NCT04525066 -NCT04522700 -NCT04525131 -NCT04522804 -NCT04525144 -NCT04522895 -NCT04525183 -NCT04522908 -NCT04525222 -NCT04522960 -NCT04525248 -NCT04522999 -NCT04525326 -NCT04523025 -NCT04525339 -NCT04523116 -NCT04525612 -NCT04523207 -NCT04525638 -NCT04523272 -NCT04525833 -NCT04523285 -NCT04531618 -NCT04525885 -NCT04528563 -NCT04525924 -NCT04528472 -NCT04525989 -NCT04528615 -NCT04526028 -NCT04528628 -NCT04526080 -NCT04528680 -NCT04526106 -NCT04528784 -NCT04526275 -NCT04528836 -NCT04526288 -NCT04528875 -NCT04526405 -NCT04528914 -NCT04526418 -NCT04528927 -NCT04526470 -NCT04528953 -NCT04526483 -NCT04529044 -NCT04526509 -NCT04529135 -NCT04526561 -NCT04529174 -NCT04526613 -NCT04529343 -NCT04526691 -NCT04529356 -NCT04526704 -NCT04529369 -NCT04526730 -NCT04529577 -NCT04526782 -NCT04529603 -NCT04526795 -NCT04529707 -NCT04526808 -NCT04529772 -NCT04526834 -NCT04529850 -NCT04526847 -NCT04529941 -NCT04526886 -NCT04529954 -NCT04526899 -NCT04529980 -NCT04526912 -NCT04529993 -NCT04526925 -NCT04530006 -NCT04526964 -NCT04530149 -NCT04527029 -NCT04530201 -NCT04527068 -NCT04530227 -NCT04527211 -NCT04530253 -NCT04527263 -NCT04530370 -NCT04527367 -NCT04530487 -NCT04527419 -NCT04530513 -NCT04527536 -NCT04530552 -NCT04527549 -NCT04530565 -NCT04527575 -NCT04530578 -NCT04527588 -NCT04530695 -NCT04527679 -NCT04530708 -NCT04527783 -NCT04530721 -NCT04527796 -NCT04530812 -NCT04527861 -NCT04530890 -NCT04527900 -NCT04530981 -NCT04527939 -NCT04531046 -NCT04527991 -NCT04531072 -NCT04528082 -NCT04531150 -NCT04528121 -NCT04531163 -NCT04528199 -NCT04531176 -NCT04528225 -NCT04531189 -NCT04528238 -NCT04531228 -NCT04528277 -NCT04531267 -NCT04528316 -NCT04531280 -NCT04528342 -NCT04531293 -NCT04528381 -NCT04531319 -NCT04528394 -NCT04531579 -NCT04528420 -NCT04537312 -NCT04531644 -NCT04534543 -NCT04531683 -NCT04534465 -NCT04531696 -NCT04534634 -NCT04531917 -NCT04534660 -NCT04532073 -NCT04534725 -NCT04532177 -NCT04534738 -NCT04532203 -NCT04534842 -NCT04532229 -NCT04534855 -NCT04532268 -NCT04534868 -NCT04532281 -NCT04534881 -NCT04532320 -NCT04534894 -NCT04532372 -NCT04534998 -NCT04532398 -NCT04535024 -NCT04532463 -NCT04535063 -NCT04532515 -NCT04535102 -NCT04532606 -NCT04535167 -NCT04532645 -NCT04535271 -NCT04532710 -NCT04535323 -NCT04532775 -NCT04535349 -NCT04532931 -NCT04535401 -NCT04532970 -NCT04535414 -NCT04532983 -NCT04535492 -NCT04533048 -NCT04535609 -NCT04533165 -NCT04535674 -NCT04533178 -NCT04535687 -NCT04533217 -NCT04535713 -NCT04533243 -NCT04535739 -NCT04533269 -NCT04535765 -NCT04533321 -NCT04535804 -NCT04533347 -NCT04535843 -NCT04533373 -NCT04535869 -NCT04533412 -NCT04535895 -NCT04533425 -NCT04535908 -NCT04533438 -NCT04535921 -NCT04533451 -NCT04535986 -NCT04533490 -NCT04536077 -NCT04533555 -NCT04536142 -NCT04533581 -NCT04536207 -NCT04533620 -NCT04536298 -NCT04533672 -NCT04536454 -NCT04533750 -NCT04536545 -NCT04533763 -NCT04536558 -NCT04533854 -NCT04536584 -NCT04533958 -NCT04536649 -NCT04534010 -NCT04536675 -NCT04534023 -NCT04536805 -NCT04534036 -NCT04536857 -NCT04534062 -NCT04536922 -NCT04534075 -NCT04536948 -NCT04534127 -NCT04537078 -NCT04534179 -NCT04537104 -NCT04534205 -NCT04537156 -NCT04534218 -NCT04537195 -NCT04534283 -NCT04537247 -NCT04534309 -NCT04537286 -NCT04534387 -NCT04543110 -NCT04537377 -NCT04540692 -NCT04537390 -NCT04540588 -NCT04537442 -NCT04540705 -NCT04537572 -NCT04540757 -NCT04537650 -NCT04540796 -NCT04537702 -NCT04540900 -NCT04537715 -NCT04541017 -NCT04537936 -NCT04541030 -NCT04537949 -NCT04541056 -NCT04538027 -NCT04541069 -NCT04538209 -NCT04541082 -NCT04538313 -NCT04541095 -NCT04538352 -NCT04541108 -NCT04538378 -NCT04541134 -NCT04538430 -NCT04541160 -NCT04538456 -NCT04541173 -NCT04538482 -NCT04541225 -NCT04538495 -NCT04541238 -NCT04538547 -NCT04541251 -NCT04538625 -NCT04541277 -NCT04538664 -NCT04541290 -NCT04538703 -NCT04541316 -NCT04538742 -NCT04541342 -NCT04538833 -NCT04541355 -NCT04538950 -NCT04541368 -NCT04538976 -NCT04541381 -NCT04539015 -NCT04541407 -NCT04539119 -NCT04541433 -NCT04539223 -NCT04541537 -NCT04539236 -NCT04541563 -NCT04539366 -NCT04541615 -NCT04539392 -NCT04541706 -NCT04539444 -NCT04541784 -NCT04539496 -NCT04542005 -NCT04539522 -NCT04542057 -NCT04539535 -NCT04542135 -NCT04539574 -NCT04542187 -NCT04539600 -NCT04542278 -NCT04539613 -NCT04542291 -NCT04539678 -NCT04542343 -NCT04539769 -NCT04542356 -NCT04539808 -NCT04542369 -NCT04539938 -NCT04542447 -NCT04539977 -NCT04542512 -NCT04540042 -NCT04542551 -NCT04540081 -NCT04542590 -NCT04540107 -NCT04542603 -NCT04540120 -NCT04542629 -NCT04540133 -NCT04542655 -NCT04540198 -NCT04542798 -NCT04540211 -NCT04542811 -NCT04540237 -NCT04542824 -NCT04540341 -NCT04542837 -NCT04540406 -NCT04542863 -NCT04540471 -NCT04543071 -NCT04540549 -NCT04548934 -NCT04543149 -NCT04546256 -NCT04543188 -NCT04546191 -NCT04543201 -NCT04546282 -NCT04543253 -NCT04546321 -NCT04543305 -NCT04546399 -NCT04543318 -NCT04546425 -NCT04543383 -NCT04546607 -NCT04543617 -NCT04546620 -NCT04543630 -NCT04546633 -NCT04543643 -NCT04546646 -NCT04543695 -NCT04546659 -NCT04543760 -NCT04546802 -NCT04543851 -NCT04546828 -NCT04543890 -NCT04546958 -NCT04543903 -NCT04546984 -NCT04543916 -NCT04546997 -NCT04543955 -NCT04547049 -NCT04543981 -NCT04547062 -NCT04544007 -NCT04547088 -NCT04544046 -NCT04547101 -NCT04544059 -NCT04547153 -NCT04544098 -NCT04547166 -NCT04544111 -NCT04547205 -NCT04544189 -NCT04547309 -NCT04544215 -NCT04547361 -NCT04544241 -NCT04547491 -NCT04544501 -NCT04547504 -NCT04544592 -NCT04547556 -NCT04544644 -NCT04547621 -NCT04544657 -NCT04547634 -NCT04544722 -NCT04547725 -NCT04544735 -NCT04547738 -NCT04544748 -NCT04547764 -NCT04544852 -NCT04547777 -NCT04544904 -NCT04547829 -NCT04544917 -NCT04547842 -NCT04544995 -NCT04547855 -NCT04545034 -NCT04547881 -NCT04545177 -NCT04547907 -NCT04545398 -NCT04548063 -NCT04545424 -NCT04548102 -NCT04545450 -NCT04548193 -NCT04545515 -NCT04548206 -NCT04545567 -NCT04548232 -NCT04545606 -NCT04548271 -NCT04545671 -NCT04548297 -NCT04545697 -NCT04548349 -NCT04545710 -NCT04548440 -NCT04545762 -NCT04548531 -NCT04545814 -NCT04548648 -NCT04545944 -NCT04548700 -NCT04545957 -NCT04548752 -NCT04545983 -NCT04548765 -NCT04546009 -NCT04548791 -NCT04546074 -NCT04548830 -NCT04546165 -NCT04554459 -NCT04548947 -NCT04552223 -NCT04548960 -NCT04552158 -NCT04549025 -NCT04552249 -NCT04549129 -NCT04552288 -NCT04549207 -NCT04552327 -NCT04549246 -NCT04552418 -NCT04549363 -NCT04552496 -NCT04549402 -NCT04552509 -NCT04549571 -NCT04552587 -NCT04549584 -NCT04552613 -NCT04549597 -NCT04552704 -NCT04549649 -NCT04552743 -NCT04549675 -NCT04552756 -NCT04549688 -NCT04552769 -NCT04549857 -NCT04552847 -NCT04550104 -NCT04552886 -NCT04550156 -NCT04552912 -NCT04550169 -NCT04552977 -NCT04550260 -NCT04552990 -NCT04550390 -NCT04553068 -NCT04550416 -NCT04553094 -NCT04550442 -NCT04553133 -NCT04550468 -NCT04553172 -NCT04550481 -NCT04553211 -NCT04550494 -NCT04553224 -NCT04550624 -NCT04553276 -NCT04550663 -NCT04553302 -NCT04550689 -NCT04553315 -NCT04550819 -NCT04553341 -NCT04550845 -NCT04553354 -NCT04550897 -NCT04553393 -NCT04550949 -NCT04553406 -NCT04550988 -NCT04553471 -NCT04551001 -NCT04553510 -NCT04551014 -NCT04553562 -NCT04551079 -NCT04553575 -NCT04551105 -NCT04553601 -NCT04551131 -NCT04553653 -NCT04551170 -NCT04553692 -NCT04551339 -NCT04553770 -NCT04551352 -NCT04553809 -NCT04551417 -NCT04553874 -NCT04551430 -NCT04553887 -NCT04551495 -NCT04553913 -NCT04551521 -NCT04553939 -NCT04551599 -NCT04553991 -NCT04551612 -NCT04554056 -NCT04551664 -NCT04554082 -NCT04551833 -NCT04554147 -NCT04551885 -NCT04554160 -NCT04551898 -NCT04554290 -NCT04551924 -NCT04554316 -NCT04551950 -NCT04554342 -NCT04552028 -NCT04554355 -NCT04552054 -NCT04554381 -NCT04552093 -NCT04559854 -NCT04554472 -NCT04556994 -NCT04554485 -NCT04556981 -NCT04554524 -NCT04557020 -NCT04554615 -NCT04557046 -NCT04554667 -NCT04557059 -NCT04554680 -NCT04557085 -NCT04554719 -NCT04557150 -NCT04554771 -NCT04557215 -NCT04554823 -NCT04557306 -NCT04554836 -NCT04557371 -NCT04554914 -NCT04557384 -NCT04554927 -NCT04557410 -NCT04554940 -NCT04557423 -NCT04554953 -NCT04557436 -NCT04555057 -NCT04557449 -NCT04555135 -NCT04557501 -NCT04555161 -NCT04557540 -NCT04555226 -NCT04557553 -NCT04555239 -NCT04557579 -NCT04555265 -NCT04557618 -NCT04555278 -NCT04557644 -NCT04555291 -NCT04557774 -NCT04555304 -NCT04557826 -NCT04555317 -NCT04557865 -NCT04555343 -NCT04557943 -NCT04555356 -NCT04557956 -NCT04555369 -NCT04558021 -NCT04555382 -NCT04558125 -NCT04555421 -NCT04558216 -NCT04555499 -NCT04558242 -NCT04555525 -NCT04558268 -NCT04555538 -NCT04558372 -NCT04555551 -NCT04558398 -NCT04555564 -NCT04558567 -NCT04555577 -NCT04558619 -NCT04555772 -NCT04558645 -NCT04555785 -NCT04558684 -NCT04555811 -NCT04558697 -NCT04555837 -NCT04558736 -NCT04555902 -NCT04558853 -NCT04556045 -NCT04558866 -NCT04556071 -NCT04558931 -NCT04556084 -NCT04558996 -NCT04556214 -NCT04559009 -NCT04556253 -NCT04559087 -NCT04556266 -NCT04559139 -NCT04556292 -NCT04559217 -NCT04556344 -NCT04559230 -NCT04556409 -NCT04559269 -NCT04556461 -NCT04559308 -NCT04556539 -NCT04559503 -NCT04556617 -NCT04559607 -NCT04556669 -NCT04559620 -NCT04556773 -NCT04559685 -NCT04556916 -NCT04559724 -NCT04556929 -NCT04565665 -NCT04559919 -NCT04562636 -NCT04559945 -NCT04562558 -NCT04560036 -NCT04562701 -NCT04560127 -NCT04562727 -NCT04560166 -NCT04562792 -NCT04560205 -NCT04562818 -NCT04560244 -NCT04562831 -NCT04560257 -NCT04562987 -NCT04560270 -NCT04563013 -NCT04560322 -NCT04563091 -NCT04560426 -NCT04563130 -NCT04560439 -NCT04563208 -NCT04560673 -NCT04563221 -NCT04560686 -NCT04563234 -NCT04560712 -NCT04563338 -NCT04560725 -NCT04563468 -NCT04560842 -NCT04563507 -NCT04560894 -NCT04563520 -NCT04560907 -NCT04563767 -NCT04560933 -NCT04563806 -NCT04560972 -NCT04563871 -NCT04560985 -NCT04563936 -NCT04561063 -NCT04563975 -NCT04561089 -NCT04564040 -NCT04561102 -NCT04564144 -NCT04561206 -NCT04564157 -NCT04561219 -NCT04564235 -NCT04561297 -NCT04564313 -NCT04561323 -NCT04564417 -NCT04561336 -NCT04564430 -NCT04561362 -NCT04564456 -NCT04561401 -NCT04564469 -NCT04561414 -NCT04564482 -NCT04561492 -NCT04564521 -NCT04561505 -NCT04564703 -NCT04561583 -NCT04564729 -NCT04561661 -NCT04564768 -NCT04561765 -NCT04564846 -NCT04561791 -NCT04564898 -NCT04561804 -NCT04565054 -NCT04561817 -NCT04565093 -NCT04561830 -NCT04565106 -NCT04561869 -NCT04565210 -NCT04561882 -NCT04565236 -NCT04561921 -NCT04565275 -NCT04561960 -NCT04565314 -NCT04561999 -NCT04565327 -NCT04562129 -NCT04565353 -NCT04562233 -NCT04565392 -NCT04562298 -NCT04565431 -NCT04562311 -NCT04565457 -NCT04562337 -NCT04565483 -NCT04562350 -NCT04565496 -NCT04562428 -NCT04565509 -NCT04562441 -NCT04565548 -NCT04562480 -NCT04571541 -NCT04565847 -NCT04569136 -NCT04565873 -NCT04569110 -NCT04566068 -NCT04569149 -NCT04566133 -NCT04569279 -NCT04566315 -NCT04569292 -NCT04566328 -NCT04569331 -NCT04566367 -NCT04569370 -NCT04566380 -NCT04569422 -NCT04566419 -NCT04569461 -NCT04566458 -NCT04569591 -NCT04566718 -NCT04569682 -NCT04566887 -NCT04569708 -NCT04566952 -NCT04569721 -NCT04566978 -NCT04569747 -NCT04566991 -NCT04569786 -NCT04567069 -NCT04569799 -NCT04567147 -NCT04569825 -NCT04567225 -NCT04569838 -NCT04567277 -NCT04569916 -NCT04567355 -NCT04570046 -NCT04567368 -NCT04570176 -NCT04567420 -NCT04570215 -NCT04567433 -NCT04570254 -NCT04567459 -NCT04570332 -NCT04567511 -NCT04570397 -NCT04567615 -NCT04570410 -NCT04567758 -NCT04570423 -NCT04567771 -NCT04570540 -NCT04567797 -NCT04570553 -NCT04567914 -NCT04570566 -NCT04568005 -NCT04570592 -NCT04568031 -NCT04570631 -NCT04568044 -NCT04570683 -NCT04568148 -NCT04570696 -NCT04568161 -NCT04570709 -NCT04568174 -NCT04570722 -NCT04568200 -NCT04570761 -NCT04568226 -NCT04570839 -NCT04568252 -NCT04570852 -NCT04568278 -NCT04570943 -NCT04568291 -NCT04570956 -NCT04568304 -NCT04571008 -NCT04568330 -NCT04571034 -NCT04568356 -NCT04571060 -NCT04568460 -NCT04571138 -NCT04568499 -NCT04571255 -NCT04568512 -NCT04571294 -NCT04568564 -NCT04571307 -NCT04568616 -NCT04571333 -NCT04568759 -NCT04571372 -NCT04568811 -NCT04571411 -NCT04568902 -NCT04571437 -NCT04568941 -NCT04571450 -NCT04568954 -NCT04571476 -NCT04569006 -NCT04571489 -NCT04569032 -NCT04576936 -NCT04571632 -NCT04574635 -NCT04571645 -NCT04574609 -NCT04571710 -NCT04574700 -NCT04571762 -NCT04574765 -NCT04571788 -NCT04574817 -NCT04571801 -NCT04574856 -NCT04571840 -NCT04574947 -NCT04571892 -NCT04574960 -NCT04572022 -NCT04574999 -NCT04572074 -NCT04575025 -NCT04572100 -NCT04575077 -NCT04572152 -NCT04575090 -NCT04572282 -NCT04575129 -NCT04572295 -NCT04575194 -NCT04572308 -NCT04575337 -NCT04572451 -NCT04575363 -NCT04572503 -NCT04575376 -NCT04572542 -NCT04575389 -NCT04572555 -NCT04575415 -NCT04572568 -NCT04575493 -NCT04572633 -NCT04575610 -NCT04572672 -NCT04575636 -NCT04572763 -NCT04575649 -NCT04572776 -NCT04575714 -NCT04572802 -NCT04575766 -NCT04572815 -NCT04575831 -NCT04572867 -NCT04575844 -NCT04572984 -NCT04575857 -NCT04573049 -NCT04575883 -NCT04573062 -NCT04575909 -NCT04573088 -NCT04575922 -NCT04573140 -NCT04575935 -NCT04573192 -NCT04575948 -NCT04573231 -NCT04575961 -NCT04573257 -NCT04575974 -NCT04573309 -NCT04576039 -NCT04573504 -NCT04576078 -NCT04573582 -NCT04576091 -NCT04573621 -NCT04576104 -NCT04573686 -NCT04576117 -NCT04573738 -NCT04576143 -NCT04573777 -NCT04576182 -NCT04573881 -NCT04576208 -NCT04573907 -NCT04576221 -NCT04574050 -NCT04576247 -NCT04574063 -NCT04576273 -NCT04574102 -NCT04576286 -NCT04574115 -NCT04576299 -NCT04574284 -NCT04576403 -NCT04574297 -NCT04576416 -NCT04574323 -NCT04576429 -NCT04574336 -NCT04576455 -NCT04574375 -NCT04576676 -NCT04574401 -NCT04576793 -NCT04574518 -NCT04576871 -NCT04574583 -NCT04583124 -NCT04577014 -NCT04579965 -NCT04577040 -NCT04579952 -NCT04577053 -NCT04580069 -NCT04577105 -NCT04580121 -NCT04577170 -NCT04580199 -NCT04577222 -NCT04580225 -NCT04577248 -NCT04580238 -NCT04577274 -NCT04580264 -NCT04577300 -NCT04580329 -NCT04577326 -NCT04580381 -NCT04577378 -NCT04580407 -NCT04577482 -NCT04580433 -NCT04577521 -NCT04580446 -NCT04577599 -NCT04580485 -NCT04577625 -NCT04580498 -NCT04577638 -NCT04580511 -NCT04577703 -NCT04580563 -NCT04577729 -NCT04580628 -NCT04577755 -NCT04580641 -NCT04577807 -NCT04580771 -NCT04577833 -NCT04580784 -NCT04577937 -NCT04580823 -NCT04577950 -NCT04580836 -NCT04577963 -NCT04581005 -NCT04578080 -NCT04581109 -NCT04578106 -NCT04581148 -NCT04578301 -NCT04581239 -NCT04578457 -NCT04581265 -NCT04578600 -NCT04581291 -NCT04578613 -NCT04581343 -NCT04578639 -NCT04581382 -NCT04578691 -NCT04581408 -NCT04578769 -NCT04581421 -NCT04578847 -NCT04581473 -NCT04578860 -NCT04581512 -NCT04578977 -NCT04581824 -NCT04579029 -NCT04581837 -NCT04579107 -NCT04581876 -NCT04579133 -NCT04581941 -NCT04579146 -NCT04581980 -NCT04579224 -NCT04582292 -NCT04579237 -NCT04582383 -NCT04579250 -NCT04582487 -NCT04579315 -NCT04582500 -NCT04579367 -NCT04582539 -NCT04579380 -NCT04582565 -NCT04579445 -NCT04582656 -NCT04579497 -NCT04582721 -NCT04579523 -NCT04582825 -NCT04579588 -NCT04582864 -NCT04579614 -NCT04582955 -NCT04579666 -NCT04582968 -NCT04579731 -NCT04582981 -NCT04579757 -NCT04583020 -NCT04579848 -NCT04583046 -NCT04579913 -NCT04588545 -NCT04583189 -NCT04585958 -NCT04583215 -NCT04585932 -NCT04583228 -NCT04585997 -NCT04583254 -NCT04586075 -NCT04583280 -NCT04586088 -NCT04583384 -NCT04586127 -NCT04583488 -NCT04586179 -NCT04583527 -NCT04586231 -NCT04583618 -NCT04586244 -NCT04583683 -NCT04586270 -NCT04583735 -NCT04586283 -NCT04583761 -NCT04586335 -NCT04583826 -NCT04586400 -NCT04584008 -NCT04586426 -NCT04584034 -NCT04586452 -NCT04584060 -NCT04586465 -NCT04584073 -NCT04586478 -NCT04584086 -NCT04586491 -NCT04584112 -NCT04586517 -NCT04584138 -NCT04586543 -NCT04584203 -NCT04586660 -NCT04584255 -NCT04586686 -NCT04584307 -NCT04586751 -NCT04584333 -NCT04586816 -NCT04584437 -NCT04586959 -NCT04584489 -NCT04587050 -NCT04584515 -NCT04587128 -NCT04584528 -NCT04587206 -NCT04584580 -NCT04587440 -NCT04584775 -NCT04587479 -NCT04584801 -NCT04587544 -NCT04584840 -NCT04587635 -NCT04584853 -NCT04587648 -NCT04584866 -NCT04587674 -NCT04584957 -NCT04587687 -NCT04584970 -NCT04587726 -NCT04585035 -NCT04587739 -NCT04585061 -NCT04587830 -NCT04585100 -NCT04587856 -NCT04585113 -NCT04588025 -NCT04585152 -NCT04588038 -NCT04585243 -NCT04588051 -NCT04585256 -NCT04588064 -NCT04585269 -NCT04588077 -NCT04585373 -NCT04588090 -NCT04585438 -NCT04588168 -NCT04585477 -NCT04588207 -NCT04585490 -NCT04588233 -NCT04585542 -NCT04588246 -NCT04585594 -NCT04588272 -NCT04585724 -NCT04588298 -NCT04585750 -NCT04588324 -NCT04585815 -NCT04588337 -NCT04585828 -NCT04588376 -NCT04585841 -NCT04588454 -NCT04585919 -NCT04594512 -NCT04588558 -NCT04591652 -NCT04588636 -NCT04591613 -NCT04588688 -NCT04591782 -NCT04588857 -NCT04591860 -NCT04588935 -NCT04591951 -NCT04588974 -NCT04591977 -NCT04588987 -NCT04592029 -NCT04589234 -NCT04592094 -NCT04589273 -NCT04592133 -NCT04589286 -NCT04592211 -NCT04589299 -NCT04592237 -NCT04589312 -NCT04592289 -NCT04589403 -NCT04592302 -NCT04589468 -NCT04592393 -NCT04589481 -NCT04592471 -NCT04589598 -NCT04592484 -NCT04589624 -NCT04592549 -NCT04589650 -NCT04592601 -NCT04589741 -NCT04592627 -NCT04589754 -NCT04592653 -NCT04589819 -NCT04592666 -NCT04589832 -NCT04592692 -NCT04589845 -NCT04592822 -NCT04589858 -NCT04592861 -NCT04589910 -NCT04592887 -NCT04589949 -NCT04592913 -NCT04590066 -NCT04593004 -NCT04590079 -NCT04593134 -NCT04590105 -NCT04593173 -NCT04590235 -NCT04593186 -NCT04590248 -NCT04593277 -NCT04590326 -NCT04593303 -NCT04590391 -NCT04593381 -NCT04590456 -NCT04593407 -NCT04590560 -NCT04593446 -NCT04590599 -NCT04593485 -NCT04590625 -NCT04593563 -NCT04590638 -NCT04593589 -NCT04590664 -NCT04593615 -NCT04590716 -NCT04593758 -NCT04590755 -NCT04593771 -NCT04590781 -NCT04593862 -NCT04590807 -NCT04593914 -NCT04590820 -NCT04593966 -NCT04590885 -NCT04594005 -NCT04590963 -NCT04594057 -NCT04591002 -NCT04594096 -NCT04591028 -NCT04594135 -NCT04591054 -NCT04594148 -NCT04591093 -NCT04594187 -NCT04591132 -NCT04594252 -NCT04591275 -NCT04594304 -NCT04591301 -NCT04594369 -NCT04591379 -NCT04594473 -NCT04591405 -NCT04594486 -NCT04591431 -NCT04600674 -NCT04594590 -NCT04597138 -NCT04594642 -NCT04597125 -NCT04594720 -NCT04597151 -NCT04594772 -NCT04597203 -NCT04594798 -NCT04597294 -NCT04594811 -NCT04597359 -NCT04594954 -NCT04597411 -NCT04595006 -NCT04597437 -NCT04595019 -NCT04597476 -NCT04595032 -NCT04597541 -NCT04595045 -NCT04597554 -NCT04595058 -NCT04597671 -NCT04595149 -NCT04597801 -NCT04595162 -NCT04597970 -NCT04595227 -NCT04598009 -NCT04595240 -NCT04598087 -NCT04595266 -NCT04598126 -NCT04595331 -NCT04598152 -NCT04595344 -NCT04598295 -NCT04595396 -NCT04598321 -NCT04595422 -NCT04598334 -NCT04595474 -NCT04598425 -NCT04595513 -NCT04598490 -NCT04595526 -NCT04598568 -NCT04595565 -NCT04598646 -NCT04595604 -NCT04598789 -NCT04595747 -NCT04598815 -NCT04595760 -NCT04598841 -NCT04595786 -NCT04598971 -NCT04595851 -NCT04599062 -NCT04595864 -NCT04599140 -NCT04595929 -NCT04599153 -NCT04595942 -NCT04599179 -NCT04595955 -NCT04599205 -NCT04595981 -NCT04599218 -NCT04595994 -NCT04599283 -NCT04596007 -NCT04599374 -NCT04596020 -NCT04599426 -NCT04596033 -NCT04599452 -NCT04596085 -NCT04599543 -NCT04596150 -NCT04599556 -NCT04596241 -NCT04599621 -NCT04596319 -NCT04599634 -NCT04596384 -NCT04599777 -NCT04596527 -NCT04599790 -NCT04596540 -NCT04599803 -NCT04596670 -NCT04599829 -NCT04596683 -NCT04599855 -NCT04596787 -NCT04599920 -NCT04596800 -NCT04600011 -NCT04596826 -NCT04600063 -NCT04596917 -NCT04600154 -NCT04596930 -NCT04600336 -NCT04596969 -NCT04600349 -NCT04596982 -NCT04600479 -NCT04597086 -NCT04605614 -NCT04600739 -NCT04603105 -NCT04600752 -NCT04603040 -NCT04600817 -NCT04603118 -NCT04600869 -NCT04603157 -NCT04600895 -NCT04603183 -NCT04600947 -NCT04603248 -NCT04600973 -NCT04603287 -NCT04601051 -NCT04603339 -NCT04601077 -NCT04603365 -NCT04601116 -NCT04603469 -NCT04601233 -NCT04603508 -NCT04601285 -NCT04603560 -NCT04601298 -NCT04603612 -NCT04601324 -NCT04603703 -NCT04601402 -NCT04603716 -NCT04601428 -NCT04603807 -NCT04601441 -NCT04603833 -NCT04601467 -NCT04603846 -NCT04601558 -NCT04603872 -NCT04601584 -NCT04603911 -NCT04601766 -NCT04604015 -NCT04601792 -NCT04604028 -NCT04601831 -NCT04604041 -NCT04601857 -NCT04604067 -NCT04601883 -NCT04604132 -NCT04601909 -NCT04604158 -NCT04601935 -NCT04604223 -NCT04601948 -NCT04604353 -NCT04601961 -NCT04604366 -NCT04601987 -NCT04604405 -NCT04602013 -NCT04604444 -NCT04602026 -NCT04604509 -NCT04602065 -NCT04604522 -NCT04602078 -NCT04604535 -NCT04602117 -NCT04604548 -NCT04602130 -NCT04604587 -NCT04602195 -NCT04604600 -NCT04602234 -NCT04604691 -NCT04602286 -NCT04604730 -NCT04602299 -NCT04604873 -NCT04602377 -NCT04604951 -NCT04602390 -NCT04604977 -NCT04602442 -NCT04605042 -NCT04602533 -NCT04605107 -NCT04602572 -NCT04605146 -NCT04602611 -NCT04605159 -NCT04602663 -NCT04605185 -NCT04602676 -NCT04605198 -NCT04602689 -NCT04605211 -NCT04602754 -NCT04605263 -NCT04602780 -NCT04605302 -NCT04602793 -NCT04605419 -NCT04602819 -NCT04605510 -NCT04602858 -NCT04605562 -NCT04602910 -NCT04605575 -NCT04603001 -NCT04611139 -NCT04605627 -NCT04608409 -NCT04605666 -NCT04608357 -NCT04605705 -NCT04608435 -NCT04605731 -NCT04608474 -NCT04605770 -NCT04608487 -NCT04605796 -NCT04608500 -NCT04605848 -NCT04608604 -NCT04605861 -NCT04608773 -NCT04605913 -NCT04608786 -NCT04605978 -NCT04608812 -NCT04606004 -NCT04608851 -NCT04606108 -NCT04608864 -NCT04606147 -NCT04608955 -NCT04606238 -NCT04609020 -NCT04606316 -NCT04609046 -NCT04606355 -NCT04609176 -NCT04606433 -NCT04609215 -NCT04606446 -NCT04609241 -NCT04606472 -NCT04609280 -NCT04606550 -NCT04609319 -NCT04606693 -NCT04609410 -NCT04606771 -NCT04609436 -NCT04606849 -NCT04609540 -NCT04606914 -NCT04609566 -NCT04606992 -NCT04609579 -NCT04607057 -NCT04609592 -NCT04607109 -NCT04609709 -NCT04607135 -NCT04609735 -NCT04607200 -NCT04609787 -NCT04607265 -NCT04609826 -NCT04607291 -NCT04609839 -NCT04607330 -NCT04609852 -NCT04607356 -NCT04609982 -NCT04607369 -NCT04610125 -NCT04607408 -NCT04610138 -NCT04607421 -NCT04610229 -NCT04607473 -NCT04610372 -NCT04607525 -NCT04610385 -NCT04607564 -NCT04610424 -NCT04607603 -NCT04610437 -NCT04607642 -NCT04610450 -NCT04607668 -NCT04610528 -NCT04607694 -NCT04610606 -NCT04607772 -NCT04610632 -NCT04607824 -NCT04610658 -NCT04607850 -NCT04610671 -NCT04607863 -NCT04610684 -NCT04607954 -NCT04610736 -NCT04607967 -NCT04610814 -NCT04608045 -NCT04610918 -NCT04608071 -NCT04610957 -NCT04608084 -NCT04610970 -NCT04608136 -NCT04611100 -NCT04608162 -NCT04611113 -NCT04608175 -NCT04611126 -NCT04608318 -NCT04617054 -NCT04611165 -NCT04614246 -NCT04611321 -NCT04614194 -NCT04611373 -NCT04614324 -NCT04611464 -NCT04614337 -NCT04611477 -NCT04614363 -NCT04611516 -NCT04614402 -NCT04611568 -NCT04614480 -NCT04611594 -NCT04614493 -NCT04611672 -NCT04614519 -NCT04611685 -NCT04614545 -NCT04611711 -NCT04614610 -NCT04611724 -NCT04614636 -NCT04611776 -NCT04614662 -NCT04611828 -NCT04614740 -NCT04611867 -NCT04614766 -NCT04611958 -NCT04614779 -NCT04611971 -NCT04614896 -NCT04611997 -NCT04614909 -NCT04612036 -NCT04614935 -NCT04612218 -NCT04614974 -NCT04612283 -NCT04615013 -NCT04612413 -NCT04615065 -NCT04612439 -NCT04615078 -NCT04612478 -NCT04615143 -NCT04612504 -NCT04615312 -NCT04612530 -NCT04615468 -NCT04612556 -NCT04615624 -NCT04612634 -NCT04615663 -NCT04612660 -NCT04615702 -NCT04612673 -NCT04615728 -NCT04612712 -NCT04615767 -NCT04612751 -NCT04615780 -NCT04612803 -NCT04615806 -NCT04612894 -NCT04615845 -NCT04612907 -NCT04615884 -NCT04612946 -NCT04616066 -NCT04613089 -NCT04616183 -NCT04613206 -NCT04616196 -NCT04613232 -NCT04616209 -NCT04613284 -NCT04616248 -NCT04613323 -NCT04616326 -NCT04613440 -NCT04616339 -NCT04613492 -NCT04616352 -NCT04613557 -NCT04616443 -NCT04613570 -NCT04616508 -NCT04613596 -NCT04616534 -NCT04613674 -NCT04616547 -NCT04613791 -NCT04616560 -NCT04613830 -NCT04616625 -NCT04613869 -NCT04616651 -NCT04613973 -NCT04616729 -NCT04613986 -NCT04616768 -NCT04614051 -NCT04616846 -NCT04614103 -NCT04616924 -NCT04614129 -NCT04616989 -NCT04614142 -NCT04629157 -NCT04617067 -NCT04620161 -NCT04617145 -NCT04620096 -NCT04617223 -NCT04620174 -NCT04617236 -NCT04620187 -NCT04617314 -NCT04620200 -NCT04617327 -NCT04620239 -NCT04617418 -NCT04620330 -NCT04617457 -NCT04620369 -NCT04617522 -NCT04620473 -NCT04617600 -NCT04620538 -NCT04617678 -NCT04620603 -NCT04617704 -NCT04620629 -NCT04617756 -NCT04620655 -NCT04617808 -NCT04620681 -NCT04617821 -NCT04620837 -NCT04617847 -NCT04620915 -NCT04617925 -NCT04620954 -NCT04618081 -NCT04620980 -NCT04618120 -NCT04620993 -NCT04618224 -NCT04621032 -NCT04618237 -NCT04621045 -NCT04618367 -NCT04621110 -NCT04618393 -NCT04621136 -NCT04618510 -NCT04621188 -NCT04618627 -NCT04621240 -NCT04618666 -NCT04621331 -NCT04618679 -NCT04621370 -NCT04618692 -NCT04621435 -NCT04618809 -NCT04621461 -NCT04618822 -NCT04621500 -NCT04618874 -NCT04621539 -NCT04619004 -NCT04621565 -NCT04619030 -NCT04621604 -NCT04619056 -NCT04621721 -NCT04619069 -NCT04621799 -NCT04619095 -NCT04621825 -NCT04619199 -NCT04621916 -NCT04619290 -NCT04621942 -NCT04619316 -NCT04622007 -NCT04619329 -NCT04622072 -NCT04619342 -NCT04622098 -NCT04619433 -NCT04622228 -NCT04619472 -NCT04622319 -NCT04619485 -NCT04622410 -NCT04619524 -NCT04622449 -NCT04619537 -NCT04622566 -NCT04619563 -NCT04628650 -NCT04619589 -NCT04628585 -NCT04619628 -NCT04628767 -NCT04619680 -NCT04628780 -NCT04619719 -NCT04628871 -NCT04619797 -NCT04628884 -NCT04619810 -NCT04628975 -NCT04619849 -NCT04628988 -NCT04619862 -NCT04629014 -NCT04620057 -NCT04629040 -NCT04625517 -NCT04622579 -NCT04625530 -NCT04622670 -NCT04625543 -NCT04622761 -NCT04625647 -NCT04622774 -NCT04625699 -NCT04622891 -NCT04625803 -NCT04622956 -NCT04625816 -NCT04622969 -NCT04625881 -NCT04623008 -NCT04625894 -NCT04623073 -NCT04625907 -NCT04623086 -NCT04626024 -NCT04623190 -NCT04626063 -NCT04623203 -NCT04626219 -NCT04623216 -NCT04626349 -NCT04623333 -NCT04626479 -NCT04623502 -NCT04626518 -NCT04623541 -NCT04626544 -NCT04623554 -NCT04626635 -NCT04623580 -NCT04626674 -NCT04623749 -NCT04626726 -NCT04623775 -NCT04626739 -NCT04623801 -NCT04626752 -NCT04623840 -NCT04626765 -NCT04623866 -NCT04626791 -NCT04623892 -NCT04626817 -NCT04623931 -NCT04626830 -NCT04623944 -NCT04626843 -NCT04624087 -NCT04626895 -NCT04624113 -NCT04626986 -NCT04624178 -NCT04627064 -NCT04624204 -NCT04627142 -NCT04624217 -NCT04627168 -NCT04624230 -NCT04627246 -NCT04624256 -NCT04627363 -NCT04624308 -NCT04627376 -NCT04624334 -NCT04627714 -NCT04624399 -NCT04627727 -NCT04624412 -NCT04627740 -NCT04624425 -NCT04627753 -NCT04624477 -NCT04627766 -NCT04624568 -NCT04627818 -NCT04624633 -NCT04627896 -NCT04624711 -NCT04627909 -NCT04624789 -NCT04627961 -NCT04624828 -NCT04627987 -NCT04624906 -NCT04628000 -NCT04624958 -NCT04628026 -NCT04624971 -NCT04628182 -NCT04624984 -NCT04628312 -NCT04625205 -NCT04628338 -NCT04625270 -NCT04628416 -NCT04625322 -NCT04628429 -NCT04625361 -NCT04628455 -NCT04625374 -NCT04628468 -NCT04625413 -NCT04628494 -NCT04625439 -NCT04634097 -NCT04628572 -NCT04629183 -NCT04631614 -NCT04629209 -NCT04631601 -NCT04629235 -NCT04631640 -NCT04629300 -NCT04631692 -NCT04629326 -NCT04631718 -NCT04629339 -NCT04631731 -NCT04629378 -NCT04631744 -NCT04629430 -NCT04631757 -NCT04629443 -NCT04631770 -NCT04629482 -NCT04631796 -NCT04629508 -NCT04631809 -NCT04629599 -NCT04631835 -NCT04629612 -NCT04632108 -NCT04629651 -NCT04632173 -NCT04629664 -NCT04632199 -NCT04629677 -NCT04632225 -NCT04629729 -NCT04632251 -NCT04629781 -NCT04632303 -NCT04629846 -NCT04632316 -NCT04629859 -NCT04632342 -NCT04630028 -NCT04632381 -NCT04630067 -NCT04632394 -NCT04630080 -NCT04632433 -NCT04630145 -NCT04632459 -NCT04630210 -NCT04632485 -NCT04630275 -NCT04632628 -NCT04630301 -NCT04632654 -NCT04630353 -NCT04632758 -NCT04630379 -NCT04632836 -NCT04630431 -NCT04632888 -NCT04630444 -NCT04632901 -NCT04630522 -NCT04632914 -NCT04630574 -NCT04632992 -NCT04630678 -NCT04633057 -NCT04630730 -NCT04633122 -NCT04630743 -NCT04633148 -NCT04630769 -NCT04633213 -NCT04630886 -NCT04633239 -NCT04630951 -NCT04633252 -NCT04631003 -NCT04633278 -NCT04631016 -NCT04633330 -NCT04631029 -NCT04633356 -NCT04631068 -NCT04633382 -NCT04631094 -NCT04633447 -NCT04631107 -NCT04633473 -NCT04631211 -NCT04633486 -NCT04631224 -NCT04633512 -NCT04631237 -NCT04633668 -NCT04631250 -NCT04633772 -NCT04631341 -NCT04633785 -NCT04631354 -NCT04633902 -NCT04631445 -NCT04634032 -NCT04631471 -NCT04634045 -NCT04631484 -NCT04634058 -NCT04631536 -NCT04634071 -NCT04631575 -NCT04640220 -NCT04634110 -NCT04636918 -NCT04634227 -NCT04636892 -NCT04634240 -NCT04636957 -NCT04634305 -NCT04636996 -NCT04634344 -NCT04637009 -NCT04634357 -NCT04637022 -NCT04634383 -NCT04637035 -NCT04634409 -NCT04637165 -NCT04634435 -NCT04637217 -NCT04634448 -NCT04637269 -NCT04634539 -NCT04637373 -NCT04634747 -NCT04637464 -NCT04634773 -NCT04637503 -NCT04634825 -NCT04637516 -NCT04634877 -NCT04637594 -NCT04635007 -NCT04637672 -NCT04635059 -NCT04637698 -NCT04635098 -NCT04637763 -NCT04635137 -NCT04638010 -NCT04635176 -NCT04638036 -NCT04635189 -NCT04638049 -NCT04635228 -NCT04638153 -NCT04635423 -NCT04638270 -NCT04635436 -NCT04638309 -NCT04635488 -NCT04638335 -NCT04635514 -NCT04638491 -NCT04635527 -NCT04638517 -NCT04635566 -NCT04638569 -NCT04635631 -NCT04638582 -NCT04635683 -NCT04638660 -NCT04635735 -NCT04638699 -NCT04635761 -NCT04638712 -NCT04635826 -NCT04638790 -NCT04635852 -NCT04638816 -NCT04635865 -NCT04638868 -NCT04635891 -NCT04639024 -NCT04635930 -NCT04639076 -NCT04635943 -NCT04639180 -NCT04635956 -NCT04639219 -NCT04635969 -NCT04639245 -NCT04635995 -NCT04639258 -NCT04636008 -NCT04639271 -NCT04636034 -NCT04639284 -NCT04636164 -NCT04639323 -NCT04636229 -NCT04639362 -NCT04636255 -NCT04639518 -NCT04636320 -NCT04639531 -NCT04636515 -NCT04639609 -NCT04636593 -NCT04639674 -NCT04636619 -NCT04639739 -NCT04636632 -NCT04639843 -NCT04636684 -NCT04639869 -NCT04636710 -NCT04639986 -NCT04636762 -NCT04640077 -NCT04636788 -NCT04640116 -NCT04636840 -NCT04646291 -NCT04640246 -NCT04643275 -NCT04640480 -NCT04643262 -NCT04640545 -NCT04643327 -NCT04640558 -NCT04643366 -NCT04640623 -NCT04643379 -NCT04640701 -NCT04643392 -NCT04640714 -NCT04643405 -NCT04640727 -NCT04643418 -NCT04640779 -NCT04643470 -NCT04640805 -NCT04643574 -NCT04640870 -NCT04643613 -NCT04640909 -NCT04643639 -NCT04641013 -NCT04643730 -NCT04641078 -NCT04643756 -NCT04641182 -NCT04643821 -NCT04641195 -NCT04643847 -NCT04641247 -NCT04643873 -NCT04641325 -NCT04644016 -NCT04641364 -NCT04644068 -NCT04641377 -NCT04644211 -NCT04641403 -NCT04644224 -NCT04641455 -NCT04644237 -NCT04641507 -NCT04644250 -NCT04641598 -NCT04644289 -NCT04641611 -NCT04644315 -NCT04641637 -NCT04644393 -NCT04641676 -NCT04644406 -NCT04641728 -NCT04644432 -NCT04641754 -NCT04644471 -NCT04641767 -NCT04644575 -NCT04641780 -NCT04644705 -NCT04641819 -NCT04644770 -NCT04641871 -NCT04644822 -NCT04641923 -NCT04644835 -NCT04642027 -NCT04644848 -NCT04642105 -NCT04644965 -NCT04642183 -NCT04645030 -NCT04642287 -NCT04645069 -NCT04642313 -NCT04645160 -NCT04642326 -NCT04645173 -NCT04642352 -NCT04645238 -NCT04642365 -NCT04645264 -NCT04642443 -NCT04645459 -NCT04642469 -NCT04645563 -NCT04642508 -NCT04645680 -NCT04642547 -NCT04645732 -NCT04642573 -NCT04645797 -NCT04642664 -NCT04645810 -NCT04642924 -NCT04645862 -NCT04642937 -NCT04645966 -NCT04642963 -NCT04646005 -NCT04643002 -NCT04646018 -NCT04643041 -NCT04646083 -NCT04643054 -NCT04646213 -NCT04643158 -NCT04646252 -NCT04643223 -NCT04652037 -NCT04646304 -NCT04649112 -NCT04646330 -NCT04649073 -NCT04646356 -NCT04649242 -NCT04646395 -NCT04649255 -NCT04646434 -NCT04649268 -NCT04646447 -NCT04649294 -NCT04646486 -NCT04649359 -NCT04646564 -NCT04649372 -NCT04646577 -NCT04649385 -NCT04646759 -NCT04649424 -NCT04646772 -NCT04649476 -NCT04646811 -NCT04649528 -NCT04646824 -NCT04649593 -NCT04646837 -NCT04649619 -NCT04646863 -NCT04649671 -NCT04646954 -NCT04649684 -NCT04647045 -NCT04649775 -NCT04647097 -NCT04649827 -NCT04647110 -NCT04649931 -NCT04647227 -NCT04649983 -NCT04647305 -NCT04650035 -NCT04647344 -NCT04650113 -NCT04647357 -NCT04650204 -NCT04647383 -NCT04650347 -NCT04647448 -NCT04650425 -NCT04647487 -NCT04650451 -NCT04647513 -NCT04650464 -NCT04647526 -NCT04650490 -NCT04647578 -NCT04650581 -NCT04647721 -NCT04650594 -NCT04647825 -NCT04650633 -NCT04647838 -NCT04650711 -NCT04647851 -NCT04650724 -NCT04647877 -NCT04650919 -NCT04647916 -NCT04650971 -NCT04647981 -NCT04650984 -NCT04647994 -NCT04651127 -NCT04648033 -NCT04651140 -NCT04648085 -NCT04651218 -NCT04648189 -NCT04651244 -NCT04648202 -NCT04651257 -NCT04648254 -NCT04651335 -NCT04648319 -NCT04651452 -NCT04648332 -NCT04651504 -NCT04648397 -NCT04651608 -NCT04648475 -NCT04651634 -NCT04648527 -NCT04651712 -NCT04648631 -NCT04651738 -NCT04648683 -NCT04651764 -NCT04648696 -NCT04651855 -NCT04648722 -NCT04651894 -NCT04648826 -NCT04651946 -NCT04648904 -NCT04651959 -NCT04648917 -NCT04651998 -NCT04648969 -NCT04652024 -NCT04649060 -NCT04658316 -NCT04652076 -NCT04655365 -NCT04652141 -NCT04655313 -NCT04652167 -NCT04655391 -NCT04652180 -NCT04655404 -NCT04652206 -NCT04655443 -NCT04652219 -NCT04655508 -NCT04652414 -NCT04655547 -NCT04652440 -NCT04655599 -NCT04652492 -NCT04655677 -NCT04652609 -NCT04655755 -NCT04652713 -NCT04655820 -NCT04652765 -NCT04655885 -NCT04652843 -NCT04655976 -NCT04653038 -NCT04656002 -NCT04653129 -NCT04656028 -NCT04653142 -NCT04656041 -NCT04653155 -NCT04656067 -NCT04653181 -NCT04656171 -NCT04653220 -NCT04656184 -NCT04653246 -NCT04656236 -NCT04653337 -NCT04656249 -NCT04653389 -NCT04656262 -NCT04653428 -NCT04656275 -NCT04653480 -NCT04656353 -NCT04653493 -NCT04656392 -NCT04653623 -NCT04656431 -NCT04653649 -NCT04656457 -NCT04653662 -NCT04656496 -NCT04653714 -NCT04656535 -NCT04653740 -NCT04656652 -NCT04653753 -NCT04656678 -NCT04653818 -NCT04656730 -NCT04653870 -NCT04656886 -NCT04653896 -NCT04656951 -NCT04653909 -NCT04657068 -NCT04653935 -NCT04657081 -NCT04654026 -NCT04657094 -NCT04654182 -NCT04657120 -NCT04654247 -NCT04657224 -NCT04654338 -NCT04657276 -NCT04654377 -NCT04657302 -NCT04654403 -NCT04657315 -NCT04654429 -NCT04657406 -NCT04654520 -NCT04657562 -NCT04654559 -NCT04657679 -NCT04654637 -NCT04657822 -NCT04654689 -NCT04657848 -NCT04654832 -NCT04657861 -NCT04654845 -NCT04657874 -NCT04655014 -NCT04657887 -NCT04655118 -NCT04657913 -NCT04655131 -NCT04657952 -NCT04655144 -NCT04657991 -NCT04655157 -NCT04658004 -NCT04655183 -NCT04658147 -NCT04655300 -NCT04663490 -NCT04658342 -NCT04660929 -NCT04658381 -NCT04660864 -NCT04658524 -NCT04661007 -NCT04658589 -NCT04661020 -NCT04658641 -NCT04661046 -NCT04658667 -NCT04661098 -NCT04658706 -NCT04661111 -NCT04658797 -NCT04661137 -NCT04658836 -NCT04661150 -NCT04658849 -NCT04661176 -NCT04658862 -NCT04661189 -NCT04658888 -NCT04661202 -NCT04659005 -NCT04661241 -NCT04659044 -NCT04661267 -NCT04659096 -NCT04661306 -NCT04659109 -NCT04661319 -NCT04659200 -NCT04661371 -NCT04659265 -NCT04661384 -NCT04659330 -NCT04661475 -NCT04659369 -NCT04661605 -NCT04659382 -NCT04661670 -NCT04659421 -NCT04661696 -NCT04659434 -NCT04661722 -NCT04659499 -NCT04661748 -NCT04659525 -NCT04661800 -NCT04659551 -NCT04661826 -NCT04659564 -NCT04661852 -NCT04659603 -NCT04661943 -NCT04659616 -NCT04661969 -NCT04659629 -NCT04662099 -NCT04659733 -NCT04662112 -NCT04659785 -NCT04662255 -NCT04659798 -NCT04662294 -NCT04659811 -NCT04662346 -NCT04659889 -NCT04662398 -NCT04659980 -NCT04662437 -NCT04660006 -NCT04662515 -NCT04660019 -NCT04662528 -NCT04660045 -NCT04662554 -NCT04660123 -NCT04662580 -NCT04660188 -NCT04662645 -NCT04660201 -NCT04662710 -NCT04660214 -NCT04662879 -NCT04660292 -NCT04662944 -NCT04660344 -NCT04662996 -NCT04660357 -NCT04663035 -NCT04660370 -NCT04663100 -NCT04660461 -NCT04663113 -NCT04660500 -NCT04663126 -NCT04660591 -NCT04663165 -NCT04660630 -NCT04663178 -NCT04660643 -NCT04663230 -NCT04660760 -NCT04663334 -NCT04660799 -NCT04663347 -NCT04660812 -NCT04663412 -NCT04660825 -NCT04668833 -NCT04663516 -NCT04666090 -NCT04663568 -NCT04666038 -NCT04663659 -NCT04666103 -NCT04663685 -NCT04666129 -NCT04663698 -NCT04666168 -NCT04663763 -NCT04666259 -NCT04663789 -NCT04666272 -NCT04663997 -NCT04666480 -NCT04664075 -NCT04666558 -NCT04664179 -NCT04666623 -NCT04664231 -NCT04666649 -NCT04664244 -NCT04666688 -NCT04664478 -NCT04666740 -NCT04664504 -NCT04666805 -NCT04664543 -NCT04666909 -NCT04664582 -NCT04666948 -NCT04664647 -NCT04666961 -NCT04664725 -NCT04667065 -NCT04664764 -NCT04667195 -NCT04664816 -NCT04667221 -NCT04664829 -NCT04667325 -NCT04664894 -NCT04667338 -NCT04664972 -NCT04667351 -NCT04665011 -NCT04667403 -NCT04665063 -NCT04667429 -NCT04665076 -NCT04667481 -NCT04665115 -NCT04667520 -NCT04665128 -NCT04667585 -NCT04665154 -NCT04667650 -NCT04665206 -NCT04667663 -NCT04665245 -NCT04667689 -NCT04665258 -NCT04667715 -NCT04665284 -NCT04667741 -NCT04665362 -NCT04667793 -NCT04665414 -NCT04667845 -NCT04665531 -NCT04667884 -NCT04665544 -NCT04667910 -NCT04665596 -NCT04667936 -NCT04665609 -NCT04667975 -NCT04665635 -NCT04668001 -NCT04665661 -NCT04668014 -NCT04665674 -NCT04668053 -NCT04665700 -NCT04668300 -NCT04665713 -NCT04668365 -NCT04665739 -NCT04668404 -NCT04665752 -NCT04668495 -NCT04665765 -NCT04668508 -NCT04665843 -NCT04668547 -NCT04665856 -NCT04668599 -NCT04665869 -NCT04668625 -NCT04665882 -NCT04668690 -NCT04665908 -NCT04668716 -NCT04665921 -NCT04668768 -NCT04665947 -NCT04668781 -NCT04665973 -NCT04668794 -NCT04665986 -NCT04673708 -NCT04668885 -NCT04671329 -NCT04668924 -NCT04671303 -NCT04668950 -NCT04671368 -NCT04668976 -NCT04671420 -NCT04668989 -NCT04671446 -NCT04669002 -NCT04671459 -NCT04669015 -NCT04671472 -NCT04669028 -NCT04671485 -NCT04669067 -NCT04671511 -NCT04669119 -NCT04671524 -NCT04669145 -NCT04671667 -NCT04669171 -NCT04671693 -NCT04669197 -NCT04671719 -NCT04669210 -NCT04671823 -NCT04669223 -NCT04671849 -NCT04669275 -NCT04671862 -NCT04669288 -NCT04671901 -NCT04669301 -NCT04671979 -NCT04669327 -NCT04672005 -NCT04669496 -NCT04672031 -NCT04669574 -NCT04672174 -NCT04669587 -NCT04672187 -NCT04669613 -NCT04672265 -NCT04669704 -NCT04672304 -NCT04669730 -NCT04672317 -NCT04669808 -NCT04672330 -NCT04669847 -NCT04672356 -NCT04669873 -NCT04672369 -NCT04669899 -NCT04672408 -NCT04669938 -NCT04672421 -NCT04669951 -NCT04672434 -NCT04670016 -NCT04672460 -NCT04670029 -NCT04672473 -NCT04670055 -NCT04672551 -NCT04670068 -NCT04672603 -NCT04670107 -NCT04672642 -NCT04670120 -NCT04672681 -NCT04670146 -NCT04672837 -NCT04670250 -NCT04672876 -NCT04670289 -NCT04672928 -NCT04670393 -NCT04672980 -NCT04670445 -NCT04673019 -NCT04670484 -NCT04673123 -NCT04670549 -NCT04673136 -NCT04670562 -NCT04673175 -NCT04670679 -NCT04673201 -NCT04670718 -NCT04673266 -NCT04670809 -NCT04673396 -NCT04670887 -NCT04673448 -NCT04670952 -NCT04673526 -NCT04670991 -NCT04673591 -NCT04671095 -NCT04673604 -NCT04671147 -NCT04673617 -NCT04671251 -NCT04673682 -NCT04671264 -NCT04673695 -NCT04671290 -NCT04678167 -NCT04673864 -NCT04675983 -NCT04673903 -NCT04675944 -NCT04673942 -NCT04675996 -NCT04673955 -NCT04676009 -NCT04673968 -NCT04676035 -NCT04673981 -NCT04676048 -NCT04674072 -NCT04676087 -NCT04674137 -NCT04676113 -NCT04674150 -NCT04676243 -NCT04674202 -NCT04676269 -NCT04674241 -NCT04676334 -NCT04674267 -NCT04676360 -NCT04674293 -NCT04676399 -NCT04674306 -NCT04676412 -NCT04674345 -NCT04676477 -NCT04674423 -NCT04676516 -NCT04674488 -NCT04676594 -NCT04674514 -NCT04676607 -NCT04674527 -NCT04676633 -NCT04674579 -NCT04676646 -NCT04674605 -NCT04676659 -NCT04674683 -NCT04676685 -NCT04674696 -NCT04676776 -NCT04674709 -NCT04676789 -NCT04674722 -NCT04676828 -NCT04674735 -NCT04676867 -NCT04674748 -NCT04676997 -NCT04674813 -NCT04677049 -NCT04674852 -NCT04677088 -NCT04674956 -NCT04677140 -NCT04675008 -NCT04677192 -NCT04675021 -NCT04677244 -NCT04675034 -NCT04677296 -NCT04675060 -NCT04677348 -NCT04675164 -NCT04677361 -NCT04675177 -NCT04677413 -NCT04675190 -NCT04677439 -NCT04675216 -NCT04677465 -NCT04675294 -NCT04677504 -NCT04675333 -NCT04677517 -NCT04675385 -NCT04677543 -NCT04675398 -NCT04677569 -NCT04675450 -NCT04677595 -NCT04675463 -NCT04677621 -NCT04675476 -NCT04677634 -NCT04675515 -NCT04677673 -NCT04675528 -NCT04677777 -NCT04675541 -NCT04677803 -NCT04675697 -NCT04677816 -NCT04675710 -NCT04677842 -NCT04675723 -NCT04677855 -NCT04675775 -NCT04677972 -NCT04675827 -NCT04678050 -NCT04675866 -NCT04678089 -NCT04675892 -NCT04678102 -NCT04675918 -NCT04683952 -NCT04678336 -NCT04681560 -NCT04678349 -NCT04681469 -NCT04678362 -NCT04681573 -NCT04678401 -NCT04681599 -NCT04678427 -NCT04681612 -NCT04678440 -NCT04681625 -NCT04678453 -NCT04681677 -NCT04678492 -NCT04681768 -NCT04678544 -NCT04681820 -NCT04678583 -NCT04681833 -NCT04678648 -NCT04681911 -NCT04678791 -NCT04681963 -NCT04678804 -NCT04681989 -NCT04678830 -NCT04682093 -NCT04678895 -NCT04682119 -NCT04678908 -NCT04682158 -NCT04678921 -NCT04682171 -NCT04679012 -NCT04682210 -NCT04679038 -NCT04682249 -NCT04679064 -NCT04682340 -NCT04679090 -NCT04682405 -NCT04679116 -NCT04682431 -NCT04679129 -NCT04682457 -NCT04679194 -NCT04682548 -NCT04679233 -NCT04682808 -NCT04679324 -NCT04682834 -NCT04679389 -NCT04682860 -NCT04679454 -NCT04682873 -NCT04679480 -NCT04682964 -NCT04679519 -NCT04682977 -NCT04679662 -NCT04683003 -NCT04679675 -NCT04683068 -NCT04679727 -NCT04683107 -NCT04679883 -NCT04683120 -NCT04679935 -NCT04683172 -NCT04679987 -NCT04683185 -NCT04680013 -NCT04683198 -NCT04680052 -NCT04683250 -NCT04680182 -NCT04683263 -NCT04680260 -NCT04683315 -NCT04680442 -NCT04683354 -NCT04680468 -NCT04683367 -NCT04680598 -NCT04683406 -NCT04680702 -NCT04683419 -NCT04680715 -NCT04683497 -NCT04680806 -NCT04683549 -NCT04680832 -NCT04683575 -NCT04680923 -NCT04683653 -NCT04680936 -NCT04683679 -NCT04680988 -NCT04683731 -NCT04681066 -NCT04683796 -NCT04681105 -NCT04683887 -NCT04681131 -NCT04683913 -NCT04681183 -NCT04683926 -NCT04681287 -NCT04683939 -NCT04681417 -NCT04689295 -NCT04683965 -NCT04686799 -NCT04684017 -NCT04686682 -NCT04684095 -NCT04686851 -NCT04684108 -NCT04687020 -NCT04684147 -NCT04687033 -NCT04684199 -NCT04687098 -NCT04684290 -NCT04687124 -NCT04684355 -NCT04687163 -NCT04684368 -NCT04687176 -NCT04684381 -NCT04687189 -NCT04684459 -NCT04687215 -NCT04684472 -NCT04687241 -NCT04684563 -NCT04687254 -NCT04684628 -NCT04687371 -NCT04684641 -NCT04687384 -NCT04684654 -NCT04687410 -NCT04684667 -NCT04687423 -NCT04684862 -NCT04687631 -NCT04684927 -NCT04687657 -NCT04684940 -NCT04687761 -NCT04684979 -NCT04687878 -NCT04685005 -NCT04687943 -NCT04685070 -NCT04687956 -NCT04685109 -NCT04687995 -NCT04685135 -NCT04688021 -NCT04685200 -NCT04688034 -NCT04685213 -NCT04688112 -NCT04685226 -NCT04688125 -NCT04685343 -NCT04688151 -NCT04685434 -NCT04688190 -NCT04685460 -NCT04688333 -NCT04685473 -NCT04688385 -NCT04685499 -NCT04688398 -NCT04685525 -NCT04688437 -NCT04685551 -NCT04688463 -NCT04685577 -NCT04688476 -NCT04685616 -NCT04688528 -NCT04685694 -NCT04688658 -NCT04685759 -NCT04688697 -NCT04685772 -NCT04688788 -NCT04685785 -NCT04688801 -NCT04685798 -NCT04688853 -NCT04685811 -NCT04688905 -NCT04685863 -NCT04688931 -NCT04685915 -NCT04688983 -NCT04685928 -NCT04689009 -NCT04686006 -NCT04689048 -NCT04686071 -NCT04689087 -NCT04686305 -NCT04689100 -NCT04686318 -NCT04689165 -NCT04686357 -NCT04689178 -NCT04686383 -NCT04689191 -NCT04686435 -NCT04689204 -NCT04686500 -NCT04689230 -NCT04686617 -NCT04689243 -NCT04686630 -NCT04695171 -NCT04689347 -NCT04692090 -NCT04689529 -NCT04692051 -NCT04689594 -NCT04692103 -NCT04689607 -NCT04692155 -NCT04689659 -NCT04692233 -NCT04689815 -NCT04692337 -NCT04689828 -NCT04692454 -NCT04689893 -NCT04692597 -NCT04689906 -NCT04692675 -NCT04690075 -NCT04692740 -NCT04690166 -NCT04692805 -NCT04690192 -NCT04692818 -NCT04690205 -NCT04692831 -NCT04690283 -NCT04692844 -NCT04690322 -NCT04692948 -NCT04690348 -NCT04692987 -NCT04690374 -NCT04693104 -NCT04690439 -NCT04693156 -NCT04690491 -NCT04693169 -NCT04690543 -NCT04693234 -NCT04690595 -NCT04693247 -NCT04690634 -NCT04693299 -NCT04690686 -NCT04693312 -NCT04690699 -NCT04693338 -NCT04690803 -NCT04693377 -NCT04690816 -NCT04693468 -NCT04690855 -NCT04693624 -NCT04691011 -NCT04693676 -NCT04691063 -NCT04693689 -NCT04691089 -NCT04693702 -NCT04691128 -NCT04693832 -NCT04691141 -NCT04693871 -NCT04691258 -NCT04693910 -NCT04691284 -NCT04693936 -NCT04691297 -NCT04694040 -NCT04691310 -NCT04694053 -NCT04691349 -NCT04694066 -NCT04691375 -NCT04694079 -NCT04691388 -NCT04694092 -NCT04691414 -NCT04694183 -NCT04691440 -NCT04694313 -NCT04691453 -NCT04694508 -NCT04691544 -NCT04694521 -NCT04691583 -NCT04694534 -NCT04691648 -NCT04694560 -NCT04691687 -NCT04694586 -NCT04691713 -NCT04694612 -NCT04691752 -NCT04694677 -NCT04691765 -NCT04694729 -NCT04691791 -NCT04694781 -NCT04691804 -NCT04694820 -NCT04691817 -NCT04694846 -NCT04691830 -NCT04694859 -NCT04691947 -NCT04694885 -NCT04691960 -NCT04694989 -NCT04691999 -NCT04700163 -NCT04695184 -NCT04697940 -NCT04695223 -NCT04697875 -NCT04695275 -NCT04697992 -NCT04695327 -NCT04698083 -NCT04695379 -NCT04698187 -NCT04695418 -NCT04698213 -NCT04695431 -NCT04698239 -NCT04695470 -NCT04698252 -NCT04695483 -NCT04698265 -NCT04695600 -NCT04698304 -NCT04695626 -NCT04698421 -NCT04695782 -NCT04698460 -NCT04695795 -NCT04698499 -NCT04695847 -NCT04698525 -NCT04695860 -NCT04698551 -NCT04695912 -NCT04698564 -NCT04695925 -NCT04698668 -NCT04695964 -NCT04698759 -NCT04695977 -NCT04698772 -NCT04696029 -NCT04698785 -NCT04696055 -NCT04698915 -NCT04696133 -NCT04698928 -NCT04696263 -NCT04698941 -NCT04696276 -NCT04698967 -NCT04696289 -NCT04698993 -NCT04696341 -NCT04699045 -NCT04696432 -NCT04699071 -NCT04696497 -NCT04699123 -NCT04696510 -NCT04699136 -NCT04696575 -NCT04699175 -NCT04696640 -NCT04699188 -NCT04696666 -NCT04699279 -NCT04696692 -NCT04699292 -NCT04696705 -NCT04699344 -NCT04696731 -NCT04699357 -NCT04696757 -NCT04699461 -NCT04696770 -NCT04699487 -NCT04696848 -NCT04699513 -NCT04696874 -NCT04699578 -NCT04696939 -NCT04699591 -NCT04696952 -NCT04699630 -NCT04697043 -NCT04699643 -NCT04697069 -NCT04699656 -NCT04697186 -NCT04699721 -NCT04697264 -NCT04699760 -NCT04697290 -NCT04699773 -NCT04697368 -NCT04699786 -NCT04697498 -NCT04699838 -NCT04697524 -NCT04699929 -NCT04697563 -NCT04699968 -NCT04697576 -NCT04699994 -NCT04697628 -NCT04700059 -NCT04697641 -NCT04700072 -NCT04697693 -NCT04700111 -NCT04697784 -NCT04700124 -NCT04697797 -NCT04706169 -NCT04700176 -NCT04703322 -NCT04700280 -NCT04703231 -NCT04700319 -NCT04703426 -NCT04700332 -NCT04703439 -NCT04700410 -NCT04703543 -NCT04700436 -NCT04703569 -NCT04700475 -NCT04703595 -NCT04700488 -NCT04703608 -NCT04700501 -NCT04703647 -NCT04700514 -NCT04703686 -NCT04700540 -NCT04703699 -NCT04700579 -NCT04703803 -NCT04700592 -NCT04703920 -NCT04700748 -NCT04703959 -NCT04700761 -NCT04704076 -NCT04701021 -NCT04704141 -NCT04701034 -NCT04704154 -NCT04701060 -NCT04704193 -NCT04701086 -NCT04704219 -NCT04701229 -NCT04704245 -NCT04701242 -NCT04704258 -NCT04701281 -NCT04704284 -NCT04701307 -NCT04704297 -NCT04701476 -NCT04704336 -NCT04701554 -NCT04704349 -NCT04701645 -NCT04704401 -NCT04701736 -NCT04704414 -NCT04701853 -NCT04704453 -NCT04701879 -NCT04704466 -NCT04701918 -NCT04704505 -NCT04701944 -NCT04704531 -NCT04701957 -NCT04704661 -NCT04702009 -NCT04704856 -NCT04702022 -NCT04704934 -NCT04702061 -NCT04704947 -NCT04702139 -NCT04705025 -NCT04702152 -NCT04705038 -NCT04702204 -NCT04705090 -NCT04702217 -NCT04705129 -NCT04702373 -NCT04705337 -NCT04702425 -NCT04705350 -NCT04702503 -NCT04705363 -NCT04702581 -NCT04705389 -NCT04702620 -NCT04705467 -NCT04702737 -NCT04705519 -NCT04702750 -NCT04705558 -NCT04702776 -NCT04705571 -NCT04702841 -NCT04705597 -NCT04702854 -NCT04705649 -NCT04702880 -NCT04705727 -NCT04702893 -NCT04705753 -NCT04702932 -NCT04705818 -NCT04703062 -NCT04705883 -NCT04703101 -NCT04705909 -NCT04703192 -NCT04706104 -NCT04703218 -NCT04712448 -NCT04706338 -NCT04709146 -NCT04706364 -NCT04709133 -NCT04706416 -NCT04709276 -NCT04706455 -NCT04709302 -NCT04706520 -NCT04709380 -NCT04706533 -NCT04709393 -NCT04706559 -NCT04709445 -NCT04706598 -NCT04709458 -NCT04706676 -NCT04709601 -NCT04706689 -NCT04709653 -NCT04706715 -NCT04709731 -NCT04706819 -NCT04709744 -NCT04706910 -NCT04709770 -NCT04706936 -NCT04709822 -NCT04706949 -NCT04709965 -NCT04706962 -NCT04709978 -NCT04707001 -NCT04710043 -NCT04707079 -NCT04710160 -NCT04707092 -NCT04710186 -NCT04707118 -NCT04710238 -NCT04707196 -NCT04710290 -NCT04707209 -NCT04710407 -NCT04707248 -NCT04710459 -NCT04707274 -NCT04710472 -NCT04707287 -NCT04710498 -NCT04707300 -NCT04710628 -NCT04707365 -NCT04710641 -NCT04707521 -NCT04710654 -NCT04707547 -NCT04710745 -NCT04707560 -NCT04710758 -NCT04707573 -NCT04710797 -NCT04707664 -NCT04710862 -NCT04707820 -NCT04711109 -NCT04707885 -NCT04711122 -NCT04707937 -NCT04711135 -NCT04707963 -NCT04711148 -NCT04708041 -NCT04711161 -NCT04708054 -NCT04711252 -NCT04708067 -NCT04711356 -NCT04708093 -NCT04711421 -NCT04708158 -NCT04711447 -NCT04708210 -NCT04711473 -NCT04708249 -NCT04711551 -NCT04708288 -NCT04711642 -NCT04708314 -NCT04711655 -NCT04708327 -NCT04711720 -NCT04708418 -NCT04711824 -NCT04708444 -NCT04711863 -NCT04708470 -NCT04711876 -NCT04708483 -NCT04712032 -NCT04708639 -NCT04712097 -NCT04708743 -NCT04712149 -NCT04708860 -NCT04712201 -NCT04708925 -NCT04712214 -NCT04708951 -NCT04712396 -NCT04709055 -NCT04717583 -NCT04712539 -NCT04715100 -NCT04712552 -NCT04715087 -NCT04712643 -NCT04715113 -NCT04712721 -NCT04715126 -NCT04712760 -NCT04715139 -NCT04712799 -NCT04715191 -NCT04712825 -NCT04715217 -NCT04712851 -NCT04715256 -NCT04712864 -NCT04715438 -NCT04712903 -NCT04715542 -NCT04712942 -NCT04715568 -NCT04713007 -NCT04715581 -NCT04713046 -NCT04715620 -NCT04713085 -NCT04715633 -NCT04713098 -NCT04715685 -NCT04713150 -NCT04715724 -NCT04713189 -NCT04715867 -NCT04713202 -NCT04715932 -NCT04713241 -NCT04715945 -NCT04713293 -NCT04715958 -NCT04713332 -NCT04715971 -NCT04713345 -NCT04716010 -NCT04713371 -NCT04716049 -NCT04713423 -NCT04716075 -NCT04713449 -NCT04716114 -NCT04713475 -NCT04716127 -NCT04713514 -NCT04716153 -NCT04713527 -NCT04716166 -NCT04713579 -NCT04716244 -NCT04713761 -NCT04716309 -NCT04713852 -NCT04716322 -NCT04713891 -NCT04716374 -NCT04713917 -NCT04716452 -NCT04713930 -NCT04716543 -NCT04713956 -NCT04716582 -NCT04713969 -NCT04716634 -NCT04714021 -NCT04716686 -NCT04714086 -NCT04716699 -NCT04714099 -NCT04716712 -NCT04714190 -NCT04716725 -NCT04714203 -NCT04716738 -NCT04714372 -NCT04716751 -NCT04714398 -NCT04716868 -NCT04714424 -NCT04716920 -NCT04714567 -NCT04716933 -NCT04714593 -NCT04716946 -NCT04714619 -NCT04716985 -NCT04714658 -NCT04717050 -NCT04714697 -NCT04717154 -NCT04714736 -NCT04717206 -NCT04714827 -NCT04717219 -NCT04714840 -NCT04717271 -NCT04714931 -NCT04717362 -NCT04714983 -NCT04717375 -NCT04715061 -NCT04717531 -NCT04715074 -NCT04723173 -NCT04717609 -NCT04720209 -NCT04717622 -NCT04720170 -NCT04717661 -NCT04720235 -NCT04717674 -NCT04720339 -NCT04717687 -NCT04720417 -NCT04717700 -NCT04720469 -NCT04717765 -NCT04720521 -NCT04717804 -NCT04720651 -NCT04717999 -NCT04720664 -NCT04718038 -NCT04720690 -NCT04718103 -NCT04720716 -NCT04718233 -NCT04720729 -NCT04718246 -NCT04720768 -NCT04718285 -NCT04720794 -NCT04718298 -NCT04720807 -NCT04718324 -NCT04720950 -NCT04718337 -NCT04720976 -NCT04718376 -NCT04721002 -NCT04718389 -NCT04721015 -NCT04718402 -NCT04721028 -NCT04718415 -NCT04721041 -NCT04718545 -NCT04721106 -NCT04718558 -NCT04721132 -NCT04718584 -NCT04721223 -NCT04718597 -NCT04721301 -NCT04718610 -NCT04721470 -NCT04718649 -NCT04721756 -NCT04718662 -NCT04721795 -NCT04718675 -NCT04721886 -NCT04718701 -NCT04721977 -NCT04718740 -NCT04722120 -NCT04718766 -NCT04722133 -NCT04718831 -NCT04722146 -NCT04718883 -NCT04722172 -NCT04718909 -NCT04722237 -NCT04718948 -NCT04722341 -NCT04718987 -NCT04722393 -NCT04719065 -NCT04722432 -NCT04719104 -NCT04722458 -NCT04719156 -NCT04722523 -NCT04719273 -NCT04722575 -NCT04719416 -NCT04722588 -NCT04719455 -NCT04722601 -NCT04719468 -NCT04722614 -NCT04719572 -NCT04722692 -NCT04719624 -NCT04722718 -NCT04719715 -NCT04722796 -NCT04719754 -NCT04722848 -NCT04719819 -NCT04722952 -NCT04719832 -NCT04722965 -NCT04719910 -NCT04722978 -NCT04719962 -NCT04723004 -NCT04719988 -NCT04723030 -NCT04720092 -NCT04723121 -NCT04720131 -NCT04723147 -NCT04720157 -NCT04729608 -NCT04723342 -NCT04726397 -NCT04723394 -NCT04726345 -NCT04723524 -NCT04726501 -NCT04723589 -NCT04726748 -NCT04723719 -NCT04726787 -NCT04723745 -NCT04726878 -NCT04723758 -NCT04727008 -NCT04723810 -NCT04727034 -NCT04723862 -NCT04727112 -NCT04723875 -NCT04727151 -NCT04723901 -NCT04727164 -NCT04723914 -NCT04727177 -NCT04724018 -NCT04727242 -NCT04724135 -NCT04727307 -NCT04724226 -NCT04727424 -NCT04724239 -NCT04727541 -NCT04724291 -NCT04727554 -NCT04724330 -NCT04727593 -NCT04724356 -NCT04727606 -NCT04724369 -NCT04727632 -NCT04724460 -NCT04727710 -NCT04724499 -NCT04727736 -NCT04724512 -NCT04727853 -NCT04724577 -NCT04727866 -NCT04724590 -NCT04727892 -NCT04724876 -NCT04727918 -NCT04724928 -NCT04727996 -NCT04725032 -NCT04728035 -NCT04725045 -NCT04728113 -NCT04725123 -NCT04728139 -NCT04725175 -NCT04728191 -NCT04725188 -NCT04728217 -NCT04725214 -NCT04728230 -NCT04725305 -NCT04728269 -NCT04725331 -NCT04728321 -NCT04725396 -NCT04728334 -NCT04725448 -NCT04728386 -NCT04725474 -NCT04728399 -NCT04725565 -NCT04728412 -NCT04725734 -NCT04728425 -NCT04725786 -NCT04728438 -NCT04725812 -NCT04728568 -NCT04725903 -NCT04728633 -NCT04725929 -NCT04728685 -NCT04725994 -NCT04728724 -NCT04726020 -NCT04728841 -NCT04726033 -NCT04728880 -NCT04726046 -NCT04728893 -NCT04726059 -NCT04729114 -NCT04726085 -NCT04729205 -NCT04726150 -NCT04729218 -NCT04726215 -NCT04729322 -NCT04726241 -NCT04729348 -NCT04726306 -NCT04729387 -NCT04726319 -NCT04729543 -NCT04726332 -NCT04735068 -NCT04729621 -NCT04732572 -NCT04729634 -NCT04732546 -NCT04729647 -NCT04732598 -NCT04729725 -NCT04732650 -NCT04729842 -NCT04732663 -NCT04729933 -NCT04732728 -NCT04729959 -NCT04732793 -NCT04730076 -NCT04732845 -NCT04730154 -NCT04732897 -NCT04730219 -NCT04733027 -NCT04730232 -NCT04733040 -NCT04730245 -NCT04733079 -NCT04730258 -NCT04733092 -NCT04730349 -NCT04733118 -NCT04730505 -NCT04733170 -NCT04730544 -NCT04733183 -NCT04730583 -NCT04733248 -NCT04730713 -NCT04733274 -NCT04730752 -NCT04733326 -NCT04730765 -NCT04733417 -NCT04730843 -NCT04733469 -NCT04730869 -NCT04733495 -NCT04730973 -NCT04733521 -NCT04730986 -NCT04733534 -NCT04730999 -NCT04733573 -NCT04731038 -NCT04733755 -NCT04731129 -NCT04733768 -NCT04731233 -NCT04733781 -NCT04731246 -NCT04733794 -NCT04731376 -NCT04733820 -NCT04731428 -NCT04733924 -NCT04731441 -NCT04733937 -NCT04731467 -NCT04733950 -NCT04731493 -NCT04733963 -NCT04731558 -NCT04733976 -NCT04731610 -NCT04734080 -NCT04731636 -NCT04734093 -NCT04731675 -NCT04734119 -NCT04731727 -NCT04734184 -NCT04731740 -NCT04734236 -NCT04731805 -NCT04734249 -NCT04731818 -NCT04734262 -NCT04731844 -NCT04734444 -NCT04731909 -NCT04734457 -NCT04731974 -NCT04734522 -NCT04732026 -NCT04734561 -NCT04732052 -NCT04734665 -NCT04732065 -NCT04734691 -NCT04732156 -NCT04734704 -NCT04732260 -NCT04734730 -NCT04732286 -NCT04734795 -NCT04732442 -NCT04734821 -NCT04732455 -NCT04734925 -NCT04732494 -NCT04734990 -NCT04732520 -NCT04735055 -NCT04732533 -NCT04740307 -NCT04735094 -NCT04737681 -NCT04735107 -NCT04737642 -NCT04735133 -NCT04737837 -NCT04735198 -NCT04737889 -NCT04735302 -NCT04737954 -NCT04735432 -NCT04738058 -NCT04735445 -NCT04738162 -NCT04735458 -NCT04738188 -NCT04735471 -NCT04738201 -NCT04735484 -NCT04738240 -NCT04735575 -NCT04738292 -NCT04735614 -NCT04738305 -NCT04735627 -NCT04738409 -NCT04735705 -NCT04738422 -NCT04735783 -NCT04738487 -NCT04735796 -NCT04738630 -NCT04735861 -NCT04738643 -NCT04735874 -NCT04738786 -NCT04735900 -NCT04738812 -NCT04735978 -NCT04738851 -NCT04736030 -NCT04738864 -NCT04736056 -NCT04738890 -NCT04736095 -NCT04738955 -NCT04736108 -NCT04738968 -NCT04736121 -NCT04739033 -NCT04736173 -NCT04739046 -NCT04736186 -NCT04739085 -NCT04736199 -NCT04739111 -NCT04736264 -NCT04739202 -NCT04736394 -NCT04739293 -NCT04736472 -NCT04739319 -NCT04736485 -NCT04739345 -NCT04736537 -NCT04739358 -NCT04736563 -NCT04739423 -NCT04736576 -NCT04739436 -NCT04736589 -NCT04739527 -NCT04736602 -NCT04739553 -NCT04736706 -NCT04739566 -NCT04736758 -NCT04739592 -NCT04736810 -NCT04739618 -NCT04736823 -NCT04739644 -NCT04736836 -NCT04739670 -NCT04736914 -NCT04739696 -NCT04737031 -NCT04739722 -NCT04737070 -NCT04739761 -NCT04737109 -NCT04739800 -NCT04737187 -NCT04739813 -NCT04737213 -NCT04739839 -NCT04737265 -NCT04739891 -NCT04737278 -NCT04740021 -NCT04737330 -NCT04740034 -NCT04737343 -NCT04740164 -NCT04737382 -NCT04740190 -NCT04737395 -NCT04740203 -NCT04737538 -NCT04740255 -NCT04737577 -NCT04746469 -NCT04740320 -NCT04743310 -NCT04740333 -NCT04743232 -NCT04740346 -NCT04743323 -NCT04740359 -NCT04743349 -NCT04740398 -NCT04743362 -NCT04740424 -NCT04743505 -NCT04740554 -NCT04743583 -NCT04740697 -NCT04743596 -NCT04740749 -NCT04743609 -NCT04740788 -NCT04743661 -NCT04740866 -NCT04743804 -NCT04740918 -NCT04743921 -NCT04741126 -NCT04743934 -NCT04741139 -NCT04743999 -NCT04741165 -NCT04744064 -NCT04741204 -NCT04744116 -NCT04741256 -NCT04744168 -NCT04741295 -NCT04744285 -NCT04741308 -NCT04744506 -NCT04741334 -NCT04744532 -NCT04741438 -NCT04744636 -NCT04741477 -NCT04744649 -NCT04741490 -NCT04744675 -NCT04741503 -NCT04744701 -NCT04741620 -NCT04744753 -NCT04741737 -NCT04744766 -NCT04741763 -NCT04744818 -NCT04741802 -NCT04744831 -NCT04741880 -NCT04744935 -NCT04741932 -NCT04744974 -NCT04741945 -NCT04745039 -NCT04741958 -NCT04745156 -NCT04741971 -NCT04745195 -NCT04741984 -NCT04745234 -NCT04741997 -NCT04745247 -NCT04742075 -NCT04745299 -NCT04742088 -NCT04745390 -NCT04742101 -NCT04745403 -NCT04742114 -NCT04745559 -NCT04742127 -NCT04745676 -NCT04742153 -NCT04745689 -NCT04742205 -NCT04745754 -NCT04742231 -NCT04745832 -NCT04742361 -NCT04745858 -NCT04742465 -NCT04745871 -NCT04742543 -NCT04745897 -NCT04742556 -NCT04745910 -NCT04742595 -NCT04745949 -NCT04742608 -NCT04745975 -NCT04742634 -NCT04745988 -NCT04742959 -NCT04746066 -NCT04742972 -NCT04746092 -NCT04743089 -NCT04746131 -NCT04743102 -NCT04746209 -NCT04743115 -NCT04746235 -NCT04743167 -NCT04752215 -NCT04746599 -NCT04749875 -NCT04746612 -NCT04749810 -NCT04746638 -NCT04749914 -NCT04746742 -NCT04749992 -NCT04746768 -NCT04750044 -NCT04746859 -NCT04750083 -NCT04746924 -NCT04750122 -NCT04747002 -NCT04750226 -NCT04747054 -NCT04750239 -NCT04747093 -NCT04750252 -NCT04747145 -NCT04750317 -NCT04747236 -NCT04750369 -NCT04747249 -NCT04750382 -NCT04747262 -NCT04750421 -NCT04747275 -NCT04750460 -NCT04747353 -NCT04750473 -NCT04747444 -NCT04750590 -NCT04747470 -NCT04750772 -NCT04747483 -NCT04750824 -NCT04747561 -NCT04750850 -NCT04747652 -NCT04750928 -NCT04747717 -NCT04750941 -NCT04747808 -NCT04750954 -NCT04747912 -NCT04750993 -NCT04747925 -NCT04751006 -NCT04747951 -NCT04751019 -NCT04747964 -NCT04751058 -NCT04748042 -NCT04751123 -NCT04748237 -NCT04751136 -NCT04748263 -NCT04751149 -NCT04748302 -NCT04751201 -NCT04748380 -NCT04751214 -NCT04748393 -NCT04751305 -NCT04748406 -NCT04751370 -NCT04748419 -NCT04751383 -NCT04748523 -NCT04751409 -NCT04748640 -NCT04751435 -NCT04748731 -NCT04751552 -NCT04748796 -NCT04751656 -NCT04748848 -NCT04751734 -NCT04748978 -NCT04751747 -NCT04748991 -NCT04751773 -NCT04749017 -NCT04751786 -NCT04749056 -NCT04751799 -NCT04749108 -NCT04751877 -NCT04749303 -NCT04751929 -NCT04749355 -NCT04751942 -NCT04749381 -NCT04751955 -NCT04749394 -NCT04751994 -NCT04749472 -NCT04752007 -NCT04749485 -NCT04752059 -NCT04749563 -NCT04752137 -NCT04749589 -NCT04752150 -NCT04749602 -NCT04752163 -NCT04749641 -NCT04752202 -NCT04749693 -NCT04758897 -NCT04752267 -NCT04755517 -NCT04752280 -NCT04755465 -NCT04752332 -NCT04755543 -NCT04752358 -NCT04755647 -NCT04752371 -NCT04755738 -NCT04752384 -NCT04755868 -NCT04752410 -NCT04755881 -NCT04752449 -NCT04755920 -NCT04752475 -NCT04756050 -NCT04752527 -NCT04756141 -NCT04752553 -NCT04756193 -NCT04752592 -NCT04756271 -NCT04752696 -NCT04756362 -NCT04752722 -NCT04756401 -NCT04752813 -NCT04756440 -NCT04752826 -NCT04756505 -NCT04752930 -NCT04756557 -NCT04753034 -NCT04756596 -NCT04753190 -NCT04756648 -NCT04753203 -NCT04756713 -NCT04753216 -NCT04756726 -NCT04753255 -NCT04756739 -NCT04753307 -NCT04756765 -NCT04753359 -NCT04756778 -NCT04753879 -NCT04756921 -NCT04753918 -NCT04756934 -NCT04754035 -NCT04756986 -NCT04754100 -NCT04757064 -NCT04754126 -NCT04757090 -NCT04754152 -NCT04757116 -NCT04754178 -NCT04757155 -NCT04754191 -NCT04757337 -NCT04754243 -NCT04757363 -NCT04754321 -NCT04757376 -NCT04754347 -NCT04757441 -NCT04754399 -NCT04757545 -NCT04754412 -NCT04757571 -NCT04754425 -NCT04757597 -NCT04754503 -NCT04757662 -NCT04754516 -NCT04757688 -NCT04754529 -NCT04757779 -NCT04754594 -NCT04758000 -NCT04754607 -NCT04758117 -NCT04754633 -NCT04758338 -NCT04754672 -NCT04758351 -NCT04754815 -NCT04758455 -NCT04754880 -NCT04758481 -NCT04754945 -NCT04758507 -NCT04754997 -NCT04758533 -NCT04755010 -NCT04758624 -NCT04755023 -NCT04758650 -NCT04755101 -NCT04758767 -NCT04755114 -NCT04758780 -NCT04755179 -NCT04758871 -NCT04755244 -NCT04758884 -NCT04755452 -NCT04764513 -NCT04758923 -NCT04762277 -NCT04758949 -NCT04762225 -NCT04758962 -NCT04762446 -NCT04758975 -NCT04762459 -NCT04758988 -NCT04762485 -NCT04759131 -NCT04762498 -NCT04759144 -NCT04762563 -NCT04759183 -NCT04762615 -NCT04759248 -NCT04762641 -NCT04759261 -NCT04762667 -NCT04759352 -NCT04762745 -NCT04759378 -NCT04762810 -NCT04759430 -NCT04762823 -NCT04759534 -NCT04762875 -NCT04759586 -NCT04762888 -NCT04759833 -NCT04762901 -NCT04759846 -NCT04762940 -NCT04759859 -NCT04762953 -NCT04759911 -NCT04762979 -NCT04759937 -NCT04763031 -NCT04759989 -NCT04763057 -NCT04760080 -NCT04763083 -NCT04760145 -NCT04763109 -NCT04760210 -NCT04763122 -NCT04760288 -NCT04763135 -NCT04760327 -NCT04763174 -NCT04760340 -NCT04763187 -NCT04760366 -NCT04763395 -NCT04760379 -NCT04763538 -NCT04760405 -NCT04763616 -NCT04760431 -NCT04763629 -NCT04760483 -NCT04763642 -NCT04760548 -NCT04763694 -NCT04760561 -NCT04763824 -NCT04760821 -NCT04763876 -NCT04761003 -NCT04763902 -NCT04761042 -NCT04763915 -NCT04761146 -NCT04763928 -NCT04761172 -NCT04763941 -NCT04761185 -NCT04763967 -NCT04761198 -NCT04763980 -NCT04761250 -NCT04764006 -NCT04761289 -NCT04764084 -NCT04761419 -NCT04764097 -NCT04761549 -NCT04764110 -NCT04761562 -NCT04764136 -NCT04761601 -NCT04764188 -NCT04761614 -NCT04764227 -NCT04761744 -NCT04764253 -NCT04761757 -NCT04764292 -NCT04761770 -NCT04764344 -NCT04762030 -NCT04764370 -NCT04762069 -NCT04764396 -NCT04762108 -NCT04764461 -NCT04762160 -NCT04764487 -NCT04762199 -NCT04770688 -NCT04764552 -NCT04767659 -NCT04764578 -NCT04767620 -NCT04764643 -NCT04767698 -NCT04764682 -NCT04767802 -NCT04764695 -NCT04767906 -NCT04764760 -NCT04767919 -NCT04764903 -NCT04767945 -NCT04764942 -NCT04767984 -NCT04765020 -NCT04768010 -NCT04765059 -NCT04768062 -NCT04765072 -NCT04768075 -NCT04765098 -NCT04768088 -NCT04765111 -NCT04768257 -NCT04765228 -NCT04768296 -NCT04765241 -NCT04768400 -NCT04765293 -NCT04768426 -NCT04765423 -NCT04768439 -NCT04765514 -NCT04768465 -NCT04765527 -NCT04768491 -NCT04765618 -NCT04768517 -NCT04765644 -NCT04768608 -NCT04765709 -NCT04768647 -NCT04765722 -NCT04768660 -NCT04765930 -NCT04768686 -NCT04765943 -NCT04768699 -NCT04766190 -NCT04768803 -NCT04766216 -NCT04768868 -NCT04766229 -NCT04768881 -NCT04766242 -NCT04768894 -NCT04766268 -NCT04769050 -NCT04766307 -NCT04769076 -NCT04766320 -NCT04769180 -NCT04766359 -NCT04769323 -NCT04766489 -NCT04769375 -NCT04766502 -NCT04769388 -NCT04766593 -NCT04769401 -NCT04766632 -NCT04769414 -NCT04766645 -NCT04769479 -NCT04766723 -NCT04769531 -NCT04766827 -NCT04769661 -NCT04766840 -NCT04769713 -NCT04766853 -NCT04769895 -NCT04766931 -NCT04769908 -NCT04767048 -NCT04769973 -NCT04767074 -NCT04770090 -NCT04767152 -NCT04770142 -NCT04767165 -NCT04770207 -NCT04767295 -NCT04770220 -NCT04767308 -NCT04770246 -NCT04767412 -NCT04770272 -NCT04767425 -NCT04770337 -NCT04767464 -NCT04770441 -NCT04767503 -NCT04770454 -NCT04767516 -NCT04770467 -NCT04767542 -NCT04770623 -NCT04767568 -NCT04776525 -NCT04770701 -NCT04773535 -NCT04770714 -NCT04773522 -NCT04770727 -NCT04773613 -NCT04770740 -NCT04773626 -NCT04770792 -NCT04773639 -NCT04770896 -NCT04773652 -NCT04770909 -NCT04773769 -NCT04770935 -NCT04773782 -NCT04770948 -NCT04773821 -NCT04770961 -NCT04773899 -NCT04771065 -NCT04773951 -NCT04771130 -NCT04774029 -NCT04771221 -NCT04774068 -NCT04771390 -NCT04774133 -NCT04771481 -NCT04774172 -NCT04771507 -NCT04774367 -NCT04771520 -NCT04774380 -NCT04771533 -NCT04774393 -NCT04771559 -NCT04774419 -NCT04771572 -NCT04774445 -NCT04771663 -NCT04774497 -NCT04771741 -NCT04774536 -NCT04771871 -NCT04774679 -NCT04771897 -NCT04774718 -NCT04771910 -NCT04774744 -NCT04771936 -NCT04774757 -NCT04771975 -NCT04774796 -NCT04772001 -NCT04774952 -NCT04772053 -NCT04775069 -NCT04772105 -NCT04775108 -NCT04772118 -NCT04775121 -NCT04772183 -NCT04775290 -NCT04772196 -NCT04775381 -NCT04772235 -NCT04775394 -NCT04772287 -NCT04775485 -NCT04772378 -NCT04775498 -NCT04772456 -NCT04775550 -NCT04772573 -NCT04775602 -NCT04772677 -NCT04775680 -NCT04772690 -NCT04775745 -NCT04772755 -NCT04775758 -NCT04772846 -NCT04775810 -NCT04772937 -NCT04775836 -NCT04772963 -NCT04775862 -NCT04772989 -NCT04775901 -NCT04773028 -NCT04775940 -NCT04773093 -NCT04776018 -NCT04773184 -NCT04776057 -NCT04773197 -NCT04776083 -NCT04773249 -NCT04776109 -NCT04773275 -NCT04776148 -NCT04773327 -NCT04776291 -NCT04773353 -NCT04776330 -NCT04773366 -NCT04776395 -NCT04773470 -NCT04776447 -NCT04773509 -NCT04782791 -NCT04776590 -NCT04779788 -NCT04776616 -NCT04779749 -NCT04776655 -NCT04780165 -NCT04776668 -NCT04780217 -NCT04776681 -NCT04780230 -NCT04776876 -NCT04780347 -NCT04776889 -NCT04780399 -NCT04776941 -NCT04780464 -NCT04776980 -NCT04780477 -NCT04777071 -NCT04780529 -NCT04777084 -NCT04780568 -NCT04777162 -NCT04780750 -NCT04777188 -NCT04780802 -NCT04777396 -NCT04780828 -NCT04777409 -NCT04780893 -NCT04777474 -NCT04780906 -NCT04777526 -NCT04780945 -NCT04777682 -NCT04780958 -NCT04777708 -NCT04780997 -NCT04777734 -NCT04781062 -NCT04777786 -NCT04781088 -NCT04777851 -NCT04781192 -NCT04777903 -NCT04781270 -NCT04777942 -NCT04781374 -NCT04777981 -NCT04781387 -NCT04777994 -NCT04781413 -NCT04778176 -NCT04781426 -NCT04778254 -NCT04781452 -NCT04778306 -NCT04781582 -NCT04778345 -NCT04781686 -NCT04778358 -NCT04781712 -NCT04778384 -NCT04781725 -NCT04778397 -NCT04781738 -NCT04778579 -NCT04781842 -NCT04778670 -NCT04781855 -NCT04778683 -NCT04781894 -NCT04778748 -NCT04781959 -NCT04778800 -NCT04781985 -NCT04778826 -NCT04782037 -NCT04778839 -NCT04782063 -NCT04778865 -NCT04782076 -NCT04778956 -NCT04782089 -NCT04778982 -NCT04782167 -NCT04779047 -NCT04782193 -NCT04779125 -NCT04782206 -NCT04779151 -NCT04782349 -NCT04779190 -NCT04782440 -NCT04779255 -NCT04782479 -NCT04779359 -NCT04782557 -NCT04779450 -NCT04782596 -NCT04779489 -NCT04782609 -NCT04779515 -NCT04782687 -NCT04779554 -NCT04782713 -NCT04779567 -NCT04782726 -NCT04779593 -NCT04782752 -NCT04779645 -NCT04789668 -NCT04782804 -NCT04786353 -NCT04782856 -NCT04786262 -NCT04782895 -NCT04786457 -NCT04782986 -NCT04786522 -NCT04783038 -NCT04786535 -NCT04783129 -NCT04786587 -NCT04783168 -NCT04786600 -NCT04783259 -NCT04786743 -NCT04783337 -NCT04786795 -NCT04783363 -NCT04786847 -NCT04783402 -NCT04786873 -NCT04783415 -NCT04786886 -NCT04783441 -NCT04786951 -NCT04783467 -NCT04786964 -NCT04783532 -NCT04787003 -NCT04783636 -NCT04787029 -NCT04783714 -NCT04787042 -NCT04783727 -NCT04787263 -NCT04783805 -NCT04787289 -NCT04783922 -NCT04787328 -NCT04783974 -NCT04787341 -NCT04784052 -NCT04787354 -NCT04784065 -NCT04787744 -NCT04784104 -NCT04787757 -NCT04784182 -NCT04787939 -NCT04784208 -NCT04787991 -NCT04784221 -NCT04788043 -NCT04784234 -NCT04788095 -NCT04784247 -NCT04788147 -NCT04784312 -NCT04788264 -NCT04784351 -NCT04788407 -NCT04784507 -NCT04788420 -NCT04784520 -NCT04788433 -NCT04784546 -NCT04788459 -NCT04784585 -NCT04788472 -NCT04784715 -NCT04788745 -NCT04784780 -NCT04788758 -NCT04784988 -NCT04788771 -NCT04785014 -NCT04788914 -NCT04785040 -NCT04789057 -NCT04785196 -NCT04789083 -NCT04785235 -NCT04789096 -NCT04785248 -NCT04789109 -NCT04785287 -NCT04789135 -NCT04785365 -NCT04789187 -NCT04785534 -NCT04789200 -NCT04785599 -NCT04789317 -NCT04785612 -NCT04789408 -NCT04785768 -NCT04789421 -NCT04785820 -NCT04789434 -NCT04785833 -NCT04789447 -NCT04785924 -NCT04789486 -NCT04785950 -NCT04789538 -NCT04786028 -NCT04789629 -NCT04786041 -NCT04789655 -NCT04786093 -NCT04795466 -NCT04789681 -NCT04792385 -NCT04789694 -NCT04792255 -NCT04789720 -NCT04792450 -NCT04789733 -NCT04792489 -NCT04789824 -NCT04792502 -NCT04789902 -NCT04792515 -NCT04789941 -NCT04792749 -NCT04789993 -NCT04792892 -NCT04790006 -NCT04792931 -NCT04790019 -NCT04792944 -NCT04790045 -NCT04792957 -NCT04790058 -NCT04792970 -NCT04790097 -NCT04793035 -NCT04790110 -NCT04793256 -NCT04790253 -NCT04793321 -NCT04790305 -NCT04793399 -NCT04790370 -NCT04793412 -NCT04790409 -NCT04793646 -NCT04790435 -NCT04793724 -NCT04790448 -NCT04793737 -NCT04790474 -NCT04793763 -NCT04790487 -NCT04793776 -NCT04790500 -NCT04793789 -NCT04790513 -NCT04793815 -NCT04790539 -NCT04793919 -NCT04790578 -NCT04793932 -NCT04790591 -NCT04793958 -NCT04790669 -NCT04794023 -NCT04790682 -NCT04794049 -NCT04790695 -NCT04794075 -NCT04790708 -NCT04794088 -NCT04790799 -NCT04794127 -NCT04790903 -NCT04794140 -NCT04790968 -NCT04794244 -NCT04790994 -NCT04794595 -NCT04791033 -NCT04794634 -NCT04791059 -NCT04794660 -NCT04791111 -NCT04794673 -NCT04791176 -NCT04794699 -NCT04791202 -NCT04794777 -NCT04791228 -NCT04794803 -NCT04791241 -NCT04794842 -NCT04791384 -NCT04794881 -NCT04791397 -NCT04794972 -NCT04791410 -NCT04794985 -NCT04791462 -NCT04795063 -NCT04791475 -NCT04795089 -NCT04791579 -NCT04795128 -NCT04791683 -NCT04795180 -NCT04791735 -NCT04795245 -NCT04791839 -NCT04795271 -NCT04791930 -NCT04795310 -NCT04791956 -NCT04795349 -NCT04791982 -NCT04795427 -NCT04792073 -NCT04795440 -NCT04792164 -NCT04801082 -NCT04795557 -NCT04798053 -NCT04795570 -NCT04797936 -NCT04795596 -NCT04798079 -NCT04795609 -NCT04798248 -NCT04795661 -NCT04798313 -NCT04795713 -NCT04798326 -NCT04795869 -NCT04798339 -NCT04795882 -NCT04798365 -NCT04795934 -NCT04798378 -NCT04795947 -NCT04798469 -NCT04796012 -NCT04798547 -NCT04796025 -NCT04798586 -NCT04796051 -NCT04798612 -NCT04796090 -NCT04798625 -NCT04796129 -NCT04798690 -NCT04796155 -NCT04798703 -NCT04796194 -NCT04798768 -NCT04796220 -NCT04798781 -NCT04796246 -NCT04798820 -NCT04796324 -NCT04798859 -NCT04796350 -NCT04798898 -NCT04796363 -NCT04798911 -NCT04796441 -NCT04798963 -NCT04796454 -NCT04799002 -NCT04796467 -NCT04799015 -NCT04796532 -NCT04799054 -NCT04796597 -NCT04799132 -NCT04796623 -NCT04799223 -NCT04796675 -NCT04799249 -NCT04796688 -NCT04799275 -NCT04796740 -NCT04799314 -NCT04796753 -NCT04799392 -NCT04796818 -NCT04799405 -NCT04796857 -NCT04799418 -NCT04796922 -NCT04799431 -NCT04796935 -NCT04799548 -NCT04796948 -NCT04799561 -NCT04796987 -NCT04799639 -NCT04797000 -NCT04799834 -NCT04797013 -NCT04799847 -NCT04797078 -NCT04800185 -NCT04797182 -NCT04800393 -NCT04797468 -NCT04800406 -NCT04797494 -NCT04800419 -NCT04797507 -NCT04800445 -NCT04797520 -NCT04800458 -NCT04797572 -NCT04800510 -NCT04797611 -NCT04800562 -NCT04797702 -NCT04800627 -NCT04797715 -NCT04800783 -NCT04797728 -NCT04800822 -NCT04797767 -NCT04800887 -NCT04797780 -NCT04800939 -NCT04797806 -NCT04800978 -NCT04797884 -NCT04800991 -NCT04797923 -NCT04806139 -NCT04801095 -NCT04803604 -NCT04801121 -NCT04803539 -NCT04801147 -NCT04803630 -NCT04801160 -NCT04803643 -NCT04801212 -NCT04803760 -NCT04801238 -NCT04803773 -NCT04801251 -NCT04803825 -NCT04801264 -NCT04803851 -NCT04801342 -NCT04803877 -NCT04801355 -NCT04803916 -NCT04801459 -NCT04803929 -NCT04801472 -NCT04803994 -NCT04801511 -NCT04804007 -NCT04801550 -NCT04804020 -NCT04801719 -NCT04804111 -NCT04801732 -NCT04804163 -NCT04801771 -NCT04804254 -NCT04801797 -NCT04804267 -NCT04801862 -NCT04804280 -NCT04801875 -NCT04804293 -NCT04801953 -NCT04804371 -NCT04801966 -NCT04804410 -NCT04802018 -NCT04804592 -NCT04802031 -NCT04804618 -NCT04802044 -NCT04804644 -NCT04802070 -NCT04804683 -NCT04802161 -NCT04804696 -NCT04802174 -NCT04804709 -NCT04802291 -NCT04804787 -NCT04802356 -NCT04804800 -NCT04802486 -NCT04804839 -NCT04802551 -NCT04804943 -NCT04802590 -NCT04805021 -NCT04802603 -NCT04805060 -NCT04802668 -NCT04805112 -NCT04802720 -NCT04805138 -NCT04802759 -NCT04805177 -NCT04802837 -NCT04805190 -NCT04802850 -NCT04805203 -NCT04802876 -NCT04805229 -NCT04802954 -NCT04805268 -NCT04802980 -NCT04805307 -NCT04803019 -NCT04805320 -NCT04803032 -NCT04805333 -NCT04803110 -NCT04805515 -NCT04803123 -NCT04805528 -NCT04803136 -NCT04805580 -NCT04803188 -NCT04805710 -NCT04803201 -NCT04805723 -NCT04803266 -NCT04805736 -NCT04803305 -NCT04805775 -NCT04803318 -NCT04805788 -NCT04803331 -NCT04805801 -NCT04803474 -NCT04806035 -NCT04803487 -NCT04806100 -NCT04803526 -NCT04811027 -NCT04806178 -NCT04808648 -NCT04806243 -NCT04808609 -NCT04806269 -NCT04808674 -NCT04806282 -NCT04808687 -NCT04806334 -NCT04808726 -NCT04806373 -NCT04808752 -NCT04806399 -NCT04808765 -NCT04806412 -NCT04808778 -NCT04806464 -NCT04808791 -NCT04806646 -NCT04808817 -NCT04806659 -NCT04808843 -NCT04806698 -NCT04808856 -NCT04806711 -NCT04808869 -NCT04806724 -NCT04808921 -NCT04806763 -NCT04808999 -NCT04806789 -NCT04809012 -NCT04806815 -NCT04809025 -NCT04806828 -NCT04809103 -NCT04806854 -NCT04809142 -NCT04806867 -NCT04809181 -NCT04806906 -NCT04809324 -NCT04806945 -NCT04809376 -NCT04807010 -NCT04809389 -NCT04807023 -NCT04809441 -NCT04807140 -NCT04809467 -NCT04807166 -NCT04809714 -NCT04807192 -NCT04809727 -NCT04807244 -NCT04809740 -NCT04807335 -NCT04809766 -NCT04807361 -NCT04809779 -NCT04807426 -NCT04809792 -NCT04807465 -NCT04809805 -NCT04807569 -NCT04809883 -NCT04807673 -NCT04809909 -NCT04807777 -NCT04809935 -NCT04807803 -NCT04809974 -NCT04807816 -NCT04810052 -NCT04807881 -NCT04810078 -NCT04807894 -NCT04810091 -NCT04807972 -NCT04810104 -NCT04808037 -NCT04810156 -NCT04808115 -NCT04810208 -NCT04808232 -NCT04810299 -NCT04808245 -NCT04810325 -NCT04808323 -NCT04810351 -NCT04808349 -NCT04810429 -NCT04808362 -NCT04810442 -NCT04808375 -NCT04810585 -NCT04808427 -NCT04810611 -NCT04808453 -NCT04810832 -NCT04808466 -NCT04810871 -NCT04808518 -NCT04810910 -NCT04808531 -NCT04810936 -NCT04808570 -NCT04810949 -NCT04808583 -NCT04811001 -NCT04808596 -NCT04817241 -NCT04811079 -NCT04814108 -NCT04811118 -NCT04814095 -NCT04811196 -NCT04814147 -NCT04811248 -NCT04814173 -NCT04811365 -NCT04814186 -NCT04811378 -NCT04814212 -NCT04811495 -NCT04814251 -NCT04811534 -NCT04814303 -NCT04811560 -NCT04814368 -NCT04811586 -NCT04814420 -NCT04811703 -NCT04814485 -NCT04811846 -NCT04814524 -NCT04811898 -NCT04814563 -NCT04811950 -NCT04814615 -NCT04811963 -NCT04814875 -NCT04812002 -NCT04814940 -NCT04812054 -NCT04815083 -NCT04812093 -NCT04815213 -NCT04812119 -NCT04815226 -NCT04812132 -NCT04815291 -NCT04812197 -NCT04815317 -NCT04812327 -NCT04815330 -NCT04812340 -NCT04815356 -NCT04812366 -NCT04815369 -NCT04812418 -NCT04815408 -NCT04812470 -NCT04815421 -NCT04812509 -NCT04815551 -NCT04812535 -NCT04815577 -NCT04812652 -NCT04815694 -NCT04812691 -NCT04815707 -NCT04812704 -NCT04815720 -NCT04812730 -NCT04815811 -NCT04812743 -NCT04815889 -NCT04812756 -NCT04815928 -NCT04812808 -NCT04815954 -NCT04812860 -NCT04815980 -NCT04813055 -NCT04816006 -NCT04813107 -NCT04816045 -NCT04813172 -NCT04816136 -NCT04813380 -NCT04816214 -NCT04813406 -NCT04816370 -NCT04813471 -NCT04816409 -NCT04813523 -NCT04816448 -NCT04813575 -NCT04816461 -NCT04813614 -NCT04816513 -NCT04813640 -NCT04816526 -NCT04813653 -NCT04816630 -NCT04813705 -NCT04816786 -NCT04813887 -NCT04816838 -NCT04813900 -NCT04816851 -NCT04813965 -NCT04816864 -NCT04814004 -NCT04816877 -NCT04814030 -NCT04816916 -NCT04814043 -NCT04816981 -NCT04814056 -NCT04817033 -NCT04814069 -NCT04823351 -NCT04817254 -NCT04820621 -NCT04817293 -NCT04820569 -NCT04817462 -NCT04820764 -NCT04817514 -NCT04820829 -NCT04817540 -NCT04821141 -NCT04817566 -NCT04821167 -NCT04817592 -NCT04821219 -NCT04817631 -NCT04821232 -NCT04817683 -NCT04821245 -NCT04817735 -NCT04821258 -NCT04817761 -NCT04821284 -NCT04817826 -NCT04821297 -NCT04817865 -NCT04821349 -NCT04817956 -NCT04821375 -NCT04818021 -NCT04821466 -NCT04818112 -NCT04821505 -NCT04818125 -NCT04821583 -NCT04818138 -NCT04821609 -NCT04818203 -NCT04821622 -NCT04818268 -NCT04821726 -NCT04818307 -NCT04821765 -NCT04818333 -NCT04821778 -NCT04818359 -NCT04821830 -NCT04818372 -NCT04821843 -NCT04818411 -NCT04821869 -NCT04818437 -NCT04821882 -NCT04818502 -NCT04821908 -NCT04818632 -NCT04821960 -NCT04818853 -NCT04822077 -NCT04818931 -NCT04822090 -NCT04818996 -NCT04822272 -NCT04819009 -NCT04822298 -NCT04819100 -NCT04822337 -NCT04819139 -NCT04822363 -NCT04819178 -NCT04822389 -NCT04819243 -NCT04822402 -NCT04819269 -NCT04822506 -NCT04819373 -NCT04822519 -NCT04819399 -NCT04822584 -NCT04819451 -NCT04822597 -NCT04819477 -NCT04822675 -NCT04819516 -NCT04822701 -NCT04819646 -NCT04822753 -NCT04819685 -NCT04822766 -NCT04819763 -NCT04822805 -NCT04819854 -NCT04822831 -NCT04819958 -NCT04822844 -NCT04819971 -NCT04822909 -NCT04819997 -NCT04822935 -NCT04820010 -NCT04822974 -NCT04820023 -NCT04823052 -NCT04820036 -NCT04823065 -NCT04820049 -NCT04823091 -NCT04820114 -NCT04823195 -NCT04820179 -NCT04823221 -NCT04820413 -NCT04828733 -NCT04823377 -NCT04825769 -NCT04823403 -NCT04825639 -NCT04823416 -NCT04825808 -NCT04823468 -NCT04825912 -NCT04823494 -NCT04825925 -NCT04823520 -NCT04825938 -NCT04823559 -NCT04825977 -NCT04823624 -NCT04825990 -NCT04823637 -NCT04826003 -NCT04823741 -NCT04826016 -NCT04823767 -NCT04826029 -NCT04823780 -NCT04826042 -NCT04823832 -NCT04826107 -NCT04823845 -NCT04826185 -NCT04823858 -NCT04826198 -NCT04823871 -NCT04826211 -NCT04823897 -NCT04826237 -NCT04823923 -NCT04826315 -NCT04823936 -NCT04826341 -NCT04824014 -NCT04826367 -NCT04824027 -NCT04826393 -NCT04824053 -NCT04826406 -NCT04824079 -NCT04826432 -NCT04824092 -NCT04826458 -NCT04824183 -NCT04826575 -NCT04824339 -NCT04826614 -NCT04824365 -NCT04826679 -NCT04824391 -NCT04826835 -NCT04824417 -NCT04826887 -NCT04824443 -NCT04826952 -NCT04824599 -NCT04826978 -NCT04824625 -NCT04827004 -NCT04824742 -NCT04827069 -NCT04824794 -NCT04827238 -NCT04824833 -NCT04827446 -NCT04824859 -NCT04827459 -NCT04824911 -NCT04827485 -NCT04824924 -NCT04827524 -NCT04824937 -NCT04827576 -NCT04824950 -NCT04827602 -NCT04825002 -NCT04827641 -NCT04825067 -NCT04827719 -NCT04825080 -NCT04827732 -NCT04825119 -NCT04827745 -NCT04825223 -NCT04827810 -NCT04825275 -NCT04827862 -NCT04825288 -NCT04827875 -NCT04825314 -NCT04827953 -NCT04825392 -NCT04828161 -NCT04825418 -NCT04828174 -NCT04825457 -NCT04828395 -NCT04825470 -NCT04828486 -NCT04825483 -NCT04828616 -NCT04825496 -NCT04828655 -NCT04825574 -NCT04828707 -NCT04825626 -NCT04835129 -NCT04828798 -NCT04832399 -NCT04828850 -NCT04832204 -NCT04828889 -NCT04832438 -NCT04828928 -NCT04832490 -NCT04829032 -NCT04832529 -NCT04829097 -NCT04832542 -NCT04829136 -NCT04832555 -NCT04829214 -NCT04832594 -NCT04829383 -NCT04832763 -NCT04829461 -NCT04832776 -NCT04829539 -NCT04832854 -NCT04829565 -NCT04832880 -NCT04829604 -NCT04832906 -NCT04829643 -NCT04832919 -NCT04829708 -NCT04832958 -NCT04829734 -NCT04832997 -NCT04829890 -NCT04833023 -NCT04830085 -NCT04833036 -NCT04830124 -NCT04833075 -NCT04830137 -NCT04833114 -NCT04830267 -NCT04833192 -NCT04830332 -NCT04833205 -NCT04830488 -NCT04833257 -NCT04830501 -NCT04833335 -NCT04830579 -NCT04833387 -NCT04830592 -NCT04833426 -NCT04830748 -NCT04833439 -NCT04830787 -NCT04833491 -NCT04830813 -NCT04833582 -NCT04830852 -NCT04833608 -NCT04831034 -NCT04833621 -NCT04831047 -NCT04833790 -NCT04831099 -NCT04833894 -NCT04831125 -NCT04833946 -NCT04831138 -NCT04833959 -NCT04831190 -NCT04833985 -NCT04831307 -NCT04834024 -NCT04831320 -NCT04834089 -NCT04831437 -NCT04834154 -NCT04831450 -NCT04834167 -NCT04831476 -NCT04834206 -NCT04831528 -NCT04834349 -NCT04831541 -NCT04834362 -NCT04831567 -NCT04834479 -NCT04831580 -NCT04834531 -NCT04831593 -NCT04834544 -NCT04831645 -NCT04834622 -NCT04831658 -NCT04834635 -NCT04831671 -NCT04834674 -NCT04831710 -NCT04834778 -NCT04831788 -NCT04834791 -NCT04831814 -NCT04834843 -NCT04831827 -NCT04834973 -NCT04831905 -NCT04834986 -NCT04831957 -NCT04835064 -NCT04832113 -NCT04840303 -NCT04835142 -NCT04837716 -NCT04835155 -NCT04837677 -NCT04835246 -NCT04837742 -NCT04835298 -NCT04837794 -NCT04835389 -NCT04837820 -NCT04835402 -NCT04837833 -NCT04835415 -NCT04837859 -NCT04835428 -NCT04837885 -NCT04835519 -NCT04837950 -NCT04835558 -NCT04837963 -NCT04835571 -NCT04838002 -NCT04835584 -NCT04838015 -NCT04835610 -NCT04838028 -NCT04835623 -NCT04838041 -NCT04835649 -NCT04838080 -NCT04835662 -NCT04838210 -NCT04835688 -NCT04838249 -NCT04835714 -NCT04838301 -NCT04835766 -NCT04838353 -NCT04835792 -NCT04838496 -NCT04835805 -NCT04838548 -NCT04835857 -NCT04838613 -NCT04835870 -NCT04838626 -NCT04835896 -NCT04838652 -NCT04836013 -NCT04838678 -NCT04836091 -NCT04838756 -NCT04836156 -NCT04838782 -NCT04836195 -NCT04838873 -NCT04836221 -NCT04838886 -NCT04836286 -NCT04838899 -NCT04836390 -NCT04838964 -NCT04836429 -NCT04839003 -NCT04836507 -NCT04839029 -NCT04836520 -NCT04839055 -NCT04836598 -NCT04839081 -NCT04836663 -NCT04839120 -NCT04836676 -NCT04839367 -NCT04836728 -NCT04839419 -NCT04836741 -NCT04839445 -NCT04836832 -NCT04839471 -NCT04836871 -NCT04839497 -NCT04836884 -NCT04839510 -NCT04836897 -NCT04839614 -NCT04836949 -NCT04839731 -NCT04837027 -NCT04839835 -NCT04837040 -NCT04839848 -NCT04837066 -NCT04839900 -NCT04837079 -NCT04839952 -NCT04837118 -NCT04839991 -NCT04837196 -NCT04840004 -NCT04837209 -NCT04840017 -NCT04837248 -NCT04840069 -NCT04837326 -NCT04840186 -NCT04837378 -NCT04840264 -NCT04837508 -NCT04840290 -NCT04837547 -NCT04845932 -NCT04840394 -NCT04843033 -NCT04840433 -NCT04842994 -NCT04840472 -NCT04843098 -NCT04840511 -NCT04843176 -NCT04840576 -NCT04843215 -NCT04840589 -NCT04843267 -NCT04840602 -NCT04843293 -NCT04840615 -NCT04843306 -NCT04840693 -NCT04843319 -NCT04840719 -NCT04843332 -NCT04840758 -NCT04843345 -NCT04840771 -NCT04843358 -NCT04840784 -NCT04843397 -NCT04840875 -NCT04843423 -NCT04841057 -NCT04843579 -NCT04841135 -NCT04843709 -NCT04841148 -NCT04843787 -NCT04841174 -NCT04843800 -NCT04841187 -NCT04843865 -NCT04841213 -NCT04843891 -NCT04841239 -NCT04843904 -NCT04841265 -NCT04843943 -NCT04841356 -NCT04843956 -NCT04841421 -NCT04844073 -NCT04841434 -NCT04844086 -NCT04841460 -NCT04844112 -NCT04841538 -NCT04844164 -NCT04841590 -NCT04844177 -NCT04841616 -NCT04844190 -NCT04841629 -NCT04844385 -NCT04841733 -NCT04844424 -NCT04841811 -NCT04844437 -NCT04841928 -NCT04844489 -NCT04842006 -NCT04844528 -NCT04842019 -NCT04844645 -NCT04842071 -NCT04844736 -NCT04842162 -NCT04844749 -NCT04842318 -NCT04844801 -NCT04842370 -NCT04844814 -NCT04842474 -NCT04844866 -NCT04842487 -NCT04844970 -NCT04842513 -NCT04844983 -NCT04842526 -NCT04845009 -NCT04842552 -NCT04845022 -NCT04842565 -NCT04845035 -NCT04842604 -NCT04845139 -NCT04842617 -NCT04845165 -NCT04842630 -NCT04845347 -NCT04842656 -NCT04845490 -NCT04842669 -NCT04845503 -NCT04842799 -NCT04845555 -NCT04842812 -NCT04845633 -NCT04842877 -NCT04845776 -NCT04842890 -NCT04845828 -NCT04842942 -NCT04845919 -NCT04842968 -NCT04852497 -NCT04846010 -NCT04849273 -NCT04846140 -NCT04849260 -NCT04846179 -NCT04849351 -NCT04846231 -NCT04849364 -NCT04846296 -NCT04849377 -NCT04846309 -NCT04849416 -NCT04846413 -NCT04849572 -NCT04846439 -NCT04849650 -NCT04846452 -NCT04849676 -NCT04846465 -NCT04849715 -NCT04846478 -NCT04849858 -NCT04846634 -NCT04849871 -NCT04846803 -NCT04849910 -NCT04846829 -NCT04850001 -NCT04846842 -NCT04850040 -NCT04846855 -NCT04850053 -NCT04846894 -NCT04850157 -NCT04846920 -NCT04850170 -NCT04847050 -NCT04850235 -NCT04847063 -NCT04850300 -NCT04847089 -NCT04850430 -NCT04847141 -NCT04850495 -NCT04847167 -NCT04850547 -NCT04847284 -NCT04850599 -NCT04847414 -NCT04850664 -NCT04847453 -NCT04850742 -NCT04847466 -NCT04850755 -NCT04847505 -NCT04850846 -NCT04847544 -NCT04850885 -NCT04847661 -NCT04851067 -NCT04847700 -NCT04851119 -NCT04847726 -NCT04851132 -NCT04847752 -NCT04851145 -NCT04847908 -NCT04851184 -NCT04847934 -NCT04851275 -NCT04847999 -NCT04851444 -NCT04848051 -NCT04851483 -NCT04848064 -NCT04851496 -NCT04848116 -NCT04851613 -NCT04848181 -NCT04851639 -NCT04848311 -NCT04851717 -NCT04848337 -NCT04851730 -NCT04848389 -NCT04851769 -NCT04848415 -NCT04851834 -NCT04848454 -NCT04852081 -NCT04848480 -NCT04852172 -NCT04848519 -NCT04852185 -NCT04848532 -NCT04852198 -NCT04848545 -NCT04852211 -NCT04848597 -NCT04852237 -NCT04848753 -NCT04852328 -NCT04848870 -NCT04852367 -NCT04848909 -NCT04852406 -NCT04848974 -NCT04852419 -NCT04849078 -NCT04852471 -NCT04849234 -NCT04859088 -NCT04852510 -NCT04856150 -NCT04852588 -NCT04856137 -NCT04852679 -NCT04856176 -NCT04852731 -NCT04856189 -NCT04852887 -NCT04856215 -NCT04853017 -NCT04856228 -NCT04853043 -NCT04856254 -NCT04853056 -NCT04856267 -NCT04853095 -NCT04856280 -NCT04853199 -NCT04856306 -NCT04853277 -NCT04856371 -NCT04853303 -NCT04856475 -NCT04853316 -NCT04856514 -NCT04853329 -NCT04856566 -NCT04853342 -NCT04856631 -NCT04853498 -NCT04856644 -NCT04853589 -NCT04856696 -NCT04853680 -NCT04856735 -NCT04853693 -NCT04856774 -NCT04853745 -NCT04856787 -NCT04853784 -NCT04856852 -NCT04853901 -NCT04856865 -NCT04853914 -NCT04856969 -NCT04854018 -NCT04856995 -NCT04854044 -NCT04857008 -NCT04854122 -NCT04857021 -NCT04854213 -NCT04857138 -NCT04854434 -NCT04857164 -NCT04854447 -NCT04857372 -NCT04854499 -NCT04857489 -NCT04854668 -NCT04857502 -NCT04854681 -NCT04857645 -NCT04854746 -NCT04857684 -NCT04854967 -NCT04857697 -NCT04854993 -NCT04857749 -NCT04855110 -NCT04857905 -NCT04855136 -NCT04858009 -NCT04855214 -NCT04858074 -NCT04855253 -NCT04858256 -NCT04855266 -NCT04858269 -NCT04855331 -NCT04858282 -NCT04855370 -NCT04858334 -NCT04855435 -NCT04858386 -NCT04855448 -NCT04858464 -NCT04855487 -NCT04858516 -NCT04855552 -NCT04858529 -NCT04855656 -NCT04858581 -NCT04855695 -NCT04858763 -NCT04855812 -NCT04858841 -NCT04855838 -NCT04858867 -NCT04855929 -NCT04858880 -NCT04855955 -NCT04858919 -NCT04856020 -NCT04858958 -NCT04856072 -NCT04858997 -NCT04856085 -NCT04859075 -NCT04856111 -NCT04865159 -NCT04859127 -NCT04861480 -NCT04859205 -NCT04861467 -NCT04859218 -NCT04861506 -NCT04859335 -NCT04861558 -NCT04859361 -NCT04861571 -NCT04859400 -NCT04861584 -NCT04859465 -NCT04861649 -NCT04859504 -NCT04861701 -NCT04859517 -NCT04861753 -NCT04859530 -NCT04861779 -NCT04859543 -NCT04861805 -NCT04859569 -NCT04861896 -NCT04859582 -NCT04861922 -NCT04859608 -NCT04861948 -NCT04859621 -NCT04861987 -NCT04859712 -NCT04862000 -NCT04859725 -NCT04862039 -NCT04859751 -NCT04862078 -NCT04859777 -NCT04862091 -NCT04859829 -NCT04862143 -NCT04859959 -NCT04862195 -NCT04860037 -NCT04862208 -NCT04860063 -NCT04862260 -NCT04860154 -NCT04862273 -NCT04860180 -NCT04862325 -NCT04860232 -NCT04862429 -NCT04860245 -NCT04862455 -NCT04860310 -NCT04862533 -NCT04860362 -NCT04862585 -NCT04860375 -NCT04862650 -NCT04860453 -NCT04862663 -NCT04860466 -NCT04862676 -NCT04860622 -NCT04862767 -NCT04860674 -NCT04862780 -NCT04860700 -NCT04862793 -NCT04860726 -NCT04862806 -NCT04860752 -NCT04863079 -NCT04860804 -NCT04863092 -NCT04860817 -NCT04863157 -NCT04860856 -NCT04863248 -NCT04860934 -NCT04863339 -NCT04861038 -NCT04863430 -NCT04861077 -NCT04863456 -NCT04861090 -NCT04863885 -NCT04861129 -NCT04863950 -NCT04861155 -NCT04864054 -NCT04861181 -NCT04864067 -NCT04861194 -NCT04864379 -NCT04861207 -NCT04864405 -NCT04861220 -NCT04864418 -NCT04861246 -NCT04864431 -NCT04861259 -NCT04864522 -NCT04861298 -NCT04864717 -NCT04861337 -NCT04864782 -NCT04861415 -NCT04864821 -NCT04861454 -NCT04875585 -NCT04865289 -NCT04870762 -NCT04865471 -NCT04870697 -NCT04865549 -NCT04870788 -NCT04865705 -NCT04870840 -NCT04865731 -NCT04870866 -NCT04865887 -NCT04870879 -NCT04865939 -NCT04870905 -NCT04866017 -NCT04870944 -NCT04866056 -NCT04871139 -NCT04866108 -NCT04871204 -NCT04866134 -NCT04871282 -NCT04866381 -NCT04871334 -NCT04866394 -NCT04871347 -NCT04866485 -NCT04871399 -NCT04866641 -NCT04871412 -NCT04866654 -NCT04871490 -NCT04866680 -NCT04871516 -NCT04866810 -NCT04871529 -NCT04866836 -NCT04871594 -NCT04866862 -NCT04871607 -NCT04867096 -NCT04871854 -NCT04867122 -NCT04872023 -NCT04867330 -NCT04872166 -NCT04867590 -NCT04872413 -NCT04867850 -NCT04872478 -NCT04867928 -NCT04872517 -NCT04868045 -NCT04872543 -NCT04868097 -NCT04872556 -NCT04868149 -NCT04872582 -NCT04868162 -NCT04872595 -NCT04868227 -NCT04872608 -NCT04868344 -NCT04872634 -NCT04868604 -NCT04872790 -NCT04868708 -NCT04872985 -NCT04868747 -NCT04873284 -NCT04868773 -NCT04873362 -NCT04868812 -NCT04873375 -NCT04868877 -NCT04873440 -NCT04869137 -NCT04873661 -NCT04869267 -NCT04873895 -NCT04869371 -NCT04874025 -NCT04869449 -NCT04874038 -NCT04869475 -NCT04874194 -NCT04869488 -NCT04874207 -NCT04869618 -NCT04874246 -NCT04869683 -NCT04874259 -NCT04869943 -NCT04874311 -NCT04869956 -NCT04874480 -NCT04870034 -NCT04874506 -NCT04870112 -NCT04874831 -NCT04870177 -NCT04874844 -NCT04870190 -NCT04874883 -NCT04870320 -NCT04874935 -NCT04870515 -NCT04875195 -NCT04870580 -NCT04875325 -NCT04870645 -NCT04886986 -NCT04875611 -NCT04880811 -NCT04875728 -NCT04880798 -NCT04875793 -NCT04880837 -NCT04875806 -NCT04880863 -NCT04875871 -NCT04881032 -NCT04875975 -NCT04881045 -NCT04876092 -NCT04881240 -NCT04876248 -NCT04881487 -NCT04876313 -NCT04881604 -NCT04876456 -NCT04881669 -NCT04876560 -NCT04881838 -NCT04876599 -NCT04881929 -NCT04876651 -NCT04881981 -NCT04876755 -NCT04882033 -NCT04877080 -NCT04882111 -NCT04877275 -NCT04882163 -NCT04877340 -NCT04882241 -NCT04877522 -NCT04882306 -NCT04877587 -NCT04882345 -NCT04877613 -NCT04882423 -NCT04877717 -NCT04882462 -NCT04877821 -NCT04882618 -NCT04877860 -NCT04882917 -NCT04877925 -NCT04883125 -NCT04878016 -NCT04883242 -NCT04878029 -NCT04883281 -NCT04878094 -NCT04883437 -NCT04878107 -NCT04883645 -NCT04878185 -NCT04883671 -NCT04878250 -NCT04883749 -NCT04878484 -NCT04883775 -NCT04878692 -NCT04883814 -NCT04878952 -NCT04883970 -NCT04879004 -NCT04884009 -NCT04879017 -NCT04884035 -NCT04879043 -NCT04884282 -NCT04879121 -NCT04884360 -NCT04879264 -NCT04884906 -NCT04879329 -NCT04884984 -NCT04879368 -NCT04884997 -NCT04879563 -NCT04885127 -NCT04879589 -NCT04885270 -NCT04879654 -NCT04885309 -NCT04879849 -NCT04885413 -NCT04879888 -NCT04885439 -NCT04879927 -NCT04885998 -NCT04879940 -NCT04886193 -NCT04880044 -NCT04886206 -NCT04880148 -NCT04886271 -NCT04880369 -NCT04886531 -NCT04880382 -NCT04886622 -NCT04880434 -NCT04886700 -NCT04880603 -NCT04886765 -NCT04880681 -NCT04886804 -NCT04880746 -NCT04886921 -NCT04880772 -NCT04895358 -NCT04887012 -NCT04891068 -NCT04887025 -NCT04891016 -NCT04887194 -NCT04891185 -NCT04887259 -NCT04891198 -NCT04887298 -NCT04891289 -NCT04887311 -NCT04891536 -NCT04887506 -NCT04891653 -NCT04887805 -NCT04891744 -NCT04887831 -NCT04891757 -NCT04887857 -NCT04891809 -NCT04887870 -NCT04891874 -NCT04887935 -NCT04891900 -NCT04887961 -NCT04892017 -NCT04888312 -NCT04892043 -NCT04888403 -NCT04892160 -NCT04888429 -NCT04892173 -NCT04888442 -NCT04892264 -NCT04888468 -NCT04892277 -NCT04888481 -NCT04892303 -NCT04888546 -NCT04892329 -NCT04888611 -NCT04892342 -NCT04888663 -NCT04892446 -NCT04888741 -NCT04892472 -NCT04888806 -NCT04892498 -NCT04888975 -NCT04892524 -NCT04889066 -NCT04892667 -NCT04889118 -NCT04892693 -NCT04889144 -NCT04892875 -NCT04889352 -NCT04892914 -NCT04889456 -NCT04892953 -NCT04889651 -NCT04892966 -NCT04889716 -NCT04893018 -NCT04889742 -NCT04893109 -NCT04889755 -NCT04893252 -NCT04889768 -NCT04893421 -NCT04889820 -NCT04893434 -NCT04889859 -NCT04893551 -NCT04889924 -NCT04893564 -NCT04889989 -NCT04893759 -NCT04890015 -NCT04893785 -NCT04890028 -NCT04893889 -NCT04890054 -NCT04893915 -NCT04890093 -NCT04894123 -NCT04890132 -NCT04894149 -NCT04890171 -NCT04894188 -NCT04890184 -NCT04894370 -NCT04890197 -NCT04894565 -NCT04890236 -NCT04894643 -NCT04890327 -NCT04894825 -NCT04890392 -NCT04894955 -NCT04890522 -NCT04894994 -NCT04890587 -NCT04895020 -NCT04890613 -NCT04895046 -NCT04890795 -NCT04895137 -NCT04890834 -NCT04895345 -NCT04890912 -NCT04906096 -NCT04895397 -NCT04900792 -NCT04895410 -NCT04900766 -NCT04895436 -NCT04900818 -NCT04895579 -NCT04900935 -NCT04895592 -NCT04901234 -NCT04895709 -NCT04901299 -NCT04895722 -NCT04901416 -NCT04895735 -NCT04901702 -NCT04895748 -NCT04901741 -NCT04895761 -NCT04901754 -NCT04895839 -NCT04901806 -NCT04895917 -NCT04901936 -NCT04895930 -NCT04901988 -NCT04896073 -NCT04902027 -NCT04896112 -NCT04902040 -NCT04896320 -NCT04902144 -NCT04896580 -NCT04902261 -NCT04896658 -NCT04902313 -NCT04896697 -NCT04902352 -NCT04896801 -NCT04902443 -NCT04897022 -NCT04902586 -NCT04897139 -NCT04902872 -NCT04897321 -NCT04902885 -NCT04897477 -NCT04903080 -NCT04897542 -NCT04903119 -NCT04897568 -NCT04903197 -NCT04897763 -NCT04903249 -NCT04897854 -NCT04903561 -NCT04897880 -NCT04903652 -NCT04898374 -NCT04903795 -NCT04898426 -NCT04903873 -NCT04898504 -NCT04903899 -NCT04898543 -NCT04904042 -NCT04898634 -NCT04904120 -NCT04898647 -NCT04904185 -NCT04898790 -NCT04904211 -NCT04898842 -NCT04904237 -NCT04898855 -NCT04904302 -NCT04898894 -NCT04904588 -NCT04899128 -NCT04904653 -NCT04899180 -NCT04905030 -NCT04899349 -NCT04905069 -NCT04899414 -NCT04905082 -NCT04899427 -NCT04905134 -NCT04899453 -NCT04905147 -NCT04899492 -NCT04905316 -NCT04899570 -NCT04905407 -NCT04899739 -NCT04905550 -NCT04899882 -NCT04905576 -NCT04899908 -NCT04905667 -NCT04899921 -NCT04905810 -NCT04900311 -NCT04905914 -NCT04900350 -NCT04906031 -NCT04900363 -NCT04906044 -NCT04900519 -NCT04906070 -NCT04900623 -NCT04916613 -NCT04906187 -NCT04911907 -NCT04906200 -NCT04911894 -NCT04906343 -NCT04911959 -NCT04906382 -NCT04912063 -NCT04906395 -NCT04912258 -NCT04906434 -NCT04912427 -NCT04906473 -NCT04912466 -NCT04906746 -NCT04912687 -NCT04906876 -NCT04912765 -NCT04906902 -NCT04913025 -NCT04906954 -NCT04913064 -NCT04906993 -NCT04913077 -NCT04907227 -NCT04913103 -NCT04907344 -NCT04913155 -NCT04907370 -NCT04913220 -NCT04907539 -NCT04913259 -NCT04907591 -NCT04913285 -NCT04907643 -NCT04913337 -NCT04907864 -NCT04913415 -NCT04907968 -NCT04913454 -NCT04908046 -NCT04913480 -NCT04908111 -NCT04913532 -NCT04908176 -NCT04913571 -NCT04908228 -NCT04913662 -NCT04908254 -NCT04913922 -NCT04908566 -NCT04914000 -NCT04908709 -NCT04914117 -NCT04908787 -NCT04914143 -NCT04908813 -NCT04914195 -NCT04908956 -NCT04914286 -NCT04909073 -NCT04914338 -NCT04909125 -NCT04914351 -NCT04909294 -NCT04914390 -NCT04909515 -NCT04914663 -NCT04909684 -NCT04914676 -NCT04909775 -NCT04914741 -NCT04909866 -NCT04914780 -NCT04910022 -NCT04914845 -NCT04910126 -NCT04914897 -NCT04910308 -NCT04915144 -NCT04910347 -NCT04915183 -NCT04910386 -NCT04915248 -NCT04910425 -NCT04915274 -NCT04910568 -NCT04915404 -NCT04910594 -NCT04915417 -NCT04910685 -NCT04915495 -NCT04910789 -NCT04915508 -NCT04910802 -NCT04915612 -NCT04910854 -NCT04915755 -NCT04911114 -NCT04915833 -NCT04911166 -NCT04916002 -NCT04911517 -NCT04916223 -NCT04911621 -NCT04916236 -NCT04911647 -NCT04916249 -NCT04911816 -NCT04916509 -NCT04911881 -NCT04926753 -NCT04916860 -NCT04922658 -NCT04916990 -NCT04922567 -NCT04917042 -NCT04922697 -NCT04917224 -NCT04922723 -NCT04917250 -NCT04922853 -NCT04917289 -NCT04923048 -NCT04917484 -NCT04923126 -NCT04917770 -NCT04923412 -NCT04917809 -NCT04923529 -NCT04917900 -NCT04923542 -NCT04918186 -NCT04923620 -NCT04918381 -NCT04923646 -NCT04918511 -NCT04923672 -NCT04918589 -NCT04923776 -NCT04918628 -NCT04923893 -NCT04918810 -NCT04923906 -NCT04918940 -NCT04923919 -NCT04919226 -NCT04923932 -NCT04919369 -NCT04923945 -NCT04919382 -NCT04923997 -NCT04919460 -NCT04924010 -NCT04919512 -NCT04924062 -NCT04919616 -NCT04924075 -NCT04919629 -NCT04924101 -NCT04919642 -NCT04924179 -NCT04919811 -NCT04924192 -NCT04919824 -NCT04924218 -NCT04919993 -NCT04924374 -NCT04920019 -NCT04924413 -NCT04920032 -NCT04924608 -NCT04920084 -NCT04924647 -NCT04920149 -NCT04924699 -NCT04920162 -NCT04925063 -NCT04920344 -NCT04925141 -NCT04920383 -NCT04925193 -NCT04920500 -NCT04925284 -NCT04920617 -NCT04925479 -NCT04920708 -NCT04925544 -NCT04920929 -NCT04925583 -NCT04920968 -NCT04925609 -NCT04921137 -NCT04925648 -NCT04921358 -NCT04925700 -NCT04921488 -NCT04925713 -NCT04921527 -NCT04925817 -NCT04921722 -NCT04925856 -NCT04921878 -NCT04925947 -NCT04921904 -NCT04925986 -NCT04921917 -NCT04926155 -NCT04921995 -NCT04926181 -NCT04922008 -NCT04926194 -NCT04922047 -NCT04926324 -NCT04922112 -NCT04926376 -NCT04922138 -NCT04926467 -NCT04922307 -NCT04926532 -NCT04922450 -NCT04926545 -NCT04922515 -NCT04937309 -NCT04926766 -NCT04931576 -NCT04926831 -NCT04931420 -NCT04926948 -NCT04931615 -NCT04927013 -NCT04931654 -NCT04927260 -NCT04931823 -NCT04927416 -NCT04931979 -NCT04927481 -NCT04932187 -NCT04927494 -NCT04932460 -NCT04927663 -NCT04932525 -NCT04927780 -NCT04932720 -NCT04927884 -NCT04933175 -NCT04927910 -NCT04933227 -NCT04928105 -NCT04933266 -NCT04928222 -NCT04933357 -NCT04928261 -NCT04933422 -NCT04928365 -NCT04933435 -NCT04928508 -NCT04933526 -NCT04928612 -NCT04933539 -NCT04928625 -NCT04933617 -NCT04928677 -NCT04933669 -NCT04928807 -NCT04933695 -NCT04928820 -NCT04933903 -NCT04928846 -NCT04933942 -NCT04928950 -NCT04934098 -NCT04929015 -NCT04934293 -NCT04929028 -NCT04934475 -NCT04929041 -NCT04934514 -NCT04929080 -NCT04934579 -NCT04929197 -NCT04934618 -NCT04929223 -NCT04934722 -NCT04929353 -NCT04934774 -NCT04929392 -NCT04934865 -NCT04929535 -NCT04934930 -NCT04929548 -NCT04934982 -NCT04929652 -NCT04935229 -NCT04929769 -NCT04935359 -NCT04929899 -NCT04935528 -NCT04930133 -NCT04935580 -NCT04930159 -NCT04935684 -NCT04930315 -NCT04936139 -NCT04930341 -NCT04936178 -NCT04930354 -NCT04936230 -NCT04930432 -NCT04936243 -NCT04930536 -NCT04936295 -NCT04930653 -NCT04936334 -NCT04930692 -NCT04936451 -NCT04930783 -NCT04936529 -NCT04930991 -NCT04936568 -NCT04931017 -NCT04936841 -NCT04931069 -NCT04936932 -NCT04931251 -NCT04936997 -NCT04931342 -NCT04937153 -NCT04931368 -NCT04937166 -NCT04931381 -NCT04937244 -NCT04931394 -NCT04937283 -NCT04931407 -NCT04947189 -NCT04937413 -NCT04941937 -NCT04937673 -NCT04941885 -NCT04937738 -NCT04942054 -NCT04937842 -NCT04942067 -NCT04937972 -NCT04942080 -NCT04938115 -NCT04942275 -NCT04938180 -NCT04942301 -NCT04938232 -NCT04942626 -NCT04938297 -NCT04942665 -NCT04938583 -NCT04942730 -NCT04938609 -NCT04942756 -NCT04938804 -NCT04942899 -NCT04938817 -NCT04943029 -NCT04938869 -NCT04943198 -NCT04938973 -NCT04943211 -NCT04938986 -NCT04943224 -NCT04939051 -NCT04943302 -NCT04939090 -NCT04943445 -NCT04939142 -NCT04943536 -NCT04939194 -NCT04943627 -NCT04939246 -NCT04943653 -NCT04939272 -NCT04943718 -NCT04939324 -NCT04943757 -NCT04939480 -NCT04943848 -NCT04939597 -NCT04943900 -NCT04939610 -NCT04943913 -NCT04939662 -NCT04944030 -NCT04939701 -NCT04944069 -NCT04939831 -NCT04944173 -NCT04939844 -NCT04944563 -NCT04939883 -NCT04944875 -NCT04940000 -NCT04944888 -NCT04940026 -NCT04944914 -NCT04940052 -NCT04945148 -NCT04940221 -NCT04945187 -NCT04940286 -NCT04945317 -NCT04940299 -NCT04945330 -NCT04940325 -NCT04945421 -NCT04940442 -NCT04945512 -NCT04940468 -NCT04945642 -NCT04940507 -NCT04945720 -NCT04940546 -NCT04945733 -NCT04940637 -NCT04945928 -NCT04940754 -NCT04946019 -NCT04940936 -NCT04946214 -NCT04941040 -NCT04946227 -NCT04941274 -NCT04946279 -NCT04941287 -NCT04946357 -NCT04941300 -NCT04946370 -NCT04941339 -NCT04946864 -NCT04941365 -NCT04946890 -NCT04941378 -NCT04946968 -NCT04941417 -NCT04947033 -NCT04941430 -NCT04947059 -NCT04941716 -NCT04947150 -NCT04941872 -NCT04959604 -NCT04947241 -NCT04952961 -NCT04947254 -NCT04952766 -NCT04947280 -NCT04953104 -NCT04947319 -NCT04953312 -NCT04947371 -NCT04953351 -NCT04947501 -NCT04953377 -NCT04947709 -NCT04953780 -NCT04947826 -NCT04953871 -NCT04947917 -NCT04953897 -NCT04947969 -NCT04953910 -NCT04948034 -NCT04953962 -NCT04948060 -NCT04954001 -NCT04948125 -NCT04954326 -NCT04948333 -NCT04954339 -NCT04948619 -NCT04954456 -NCT04948697 -NCT04954599 -NCT04948788 -NCT04954625 -NCT04948840 -NCT04954781 -NCT04948983 -NCT04954794 -NCT04949113 -NCT04954820 -NCT04949256 -NCT04955119 -NCT04949464 -NCT04955236 -NCT04949646 -NCT04955262 -NCT04949776 -NCT04955340 -NCT04950010 -NCT04955743 -NCT04950075 -NCT04955886 -NCT04950166 -NCT04955938 -NCT04950322 -NCT04956042 -NCT04950400 -NCT04956068 -NCT04950452 -NCT04956133 -NCT04950608 -NCT04956146 -NCT04950777 -NCT04956302 -NCT04950907 -NCT04956601 -NCT04951063 -NCT04956640 -NCT04951115 -NCT04956666 -NCT04951141 -NCT04956692 -NCT04951245 -NCT04956926 -NCT04951323 -NCT04957030 -NCT04951492 -NCT04957186 -NCT04951583 -NCT04957212 -NCT04951635 -NCT04957290 -NCT04951648 -NCT04957615 -NCT04951778 -NCT04957693 -NCT04951804 -NCT04958044 -NCT04951817 -NCT04958239 -NCT04951921 -NCT04958434 -NCT04951947 -NCT04958473 -NCT04952116 -NCT04958785 -NCT04952272 -NCT04958811 -NCT04952480 -NCT04958967 -NCT04952493 -NCT04958993 -NCT04952571 -NCT04959175 -NCT04952584 -NCT04959474 -NCT04952597 -NCT04959500 -NCT04952688 -NCT04959539 -NCT04952753 -NCT04970368 -NCT04959630 -NCT04965714 -NCT04959981 -NCT04965701 -NCT04960072 -NCT04965753 -NCT04960332 -NCT04965766 -NCT04960579 -NCT04965818 -NCT04960618 -NCT04965831 -NCT04960709 -NCT04965909 -NCT04960735 -NCT04966143 -NCT04960748 -NCT04966156 -NCT04960761 -NCT04966195 -NCT04960787 -NCT04966377 -NCT04960839 -NCT04966481 -NCT04960943 -NCT04966520 -NCT04961138 -NCT04966663 -NCT04961320 -NCT04966676 -NCT04961515 -NCT04966715 -NCT04961619 -NCT04966819 -NCT04961632 -NCT04966949 -NCT04961788 -NCT04967001 -NCT04961801 -NCT04967027 -NCT04961827 -NCT04967079 -NCT04961918 -NCT04967183 -NCT04961970 -NCT04967196 -NCT04961996 -NCT04967248 -NCT04962126 -NCT04967391 -NCT04962425 -NCT04967417 -NCT04962672 -NCT04967482 -NCT04962867 -NCT04967495 -NCT04962958 -NCT04967521 -NCT04963088 -NCT04967625 -NCT04963153 -NCT04967690 -NCT04963283 -NCT04967833 -NCT04963413 -NCT04967976 -NCT04963517 -NCT04968002 -NCT04963595 -NCT04968015 -NCT04963946 -NCT04968106 -NCT04963972 -NCT04968119 -NCT04964284 -NCT04968145 -NCT04964297 -NCT04968366 -NCT04964375 -NCT04968730 -NCT04964479 -NCT04968964 -NCT04964505 -NCT04968990 -NCT04964934 -NCT04969029 -NCT04964960 -NCT04969315 -NCT04965064 -NCT04969601 -NCT04965077 -NCT04969731 -NCT04965090 -NCT04969835 -NCT04965129 -NCT04969861 -NCT04965155 -NCT04969887 -NCT04965220 -NCT04969952 -NCT04965311 -NCT04969965 -NCT04965428 -NCT04969978 -NCT04965454 -NCT04970043 -NCT04965493 -NCT04970121 -NCT04965597 -NCT04970290 -NCT04965688 -NCT04981899 -NCT04970693 -NCT04975620 -NCT04970901 -NCT04975555 -NCT04970914 -NCT04975698 -NCT04970992 -NCT04975919 -NCT04971187 -NCT04975958 -NCT04971226 -NCT04975997 -NCT04971369 -NCT04976218 -NCT04971473 -NCT04976257 -NCT04971499 -NCT04976634 -NCT04972097 -NCT04976647 -NCT04972110 -NCT04976660 -NCT04972253 -NCT04977024 -NCT04972422 -NCT04977128 -NCT04972630 -NCT04977167 -NCT04972682 -NCT04977180 -NCT04972942 -NCT04977193 -NCT04972981 -NCT04977271 -NCT04972994 -NCT04977375 -NCT04973007 -NCT04977401 -NCT04973020 -NCT04977453 -NCT04973098 -NCT04977882 -NCT04973163 -NCT04978012 -NCT04973293 -NCT04978519 -NCT04973306 -NCT04978584 -NCT04973319 -NCT04978675 -NCT04973436 -NCT04978727 -NCT04973475 -NCT04978740 -NCT04973527 -NCT04978753 -NCT04973605 -NCT04978779 -NCT04973618 -NCT04978805 -NCT04973683 -NCT04979169 -NCT04973904 -NCT04979390 -NCT04973930 -NCT04979442 -NCT04974008 -NCT04979585 -NCT04974047 -NCT04979611 -NCT04974125 -NCT04979663 -NCT04974216 -NCT04979715 -NCT04974281 -NCT04980118 -NCT04974346 -NCT04980222 -NCT04974398 -NCT04980404 -NCT04974632 -NCT04980443 -NCT04974671 -NCT04980521 -NCT04974827 -NCT04980690 -NCT04974866 -NCT04980716 -NCT04974879 -NCT04980729 -NCT04974944 -NCT04980859 -NCT04974957 -NCT04980885 -NCT04974996 -NCT04980950 -NCT04975152 -NCT04980989 -NCT04975204 -NCT04981223 -NCT04975217 -NCT04981509 -NCT04975256 -NCT04981665 -NCT04975308 -NCT04981691 -NCT04975399 -NCT04981821 -NCT04975451 -NCT04981834 -NCT04975516 -NCT04991129 -NCT04981912 -NCT04986930 -NCT04982146 -NCT04986865 -NCT04982237 -NCT04987086 -NCT04982276 -NCT04987112 -NCT04982354 -NCT04987203 -NCT04982536 -NCT04987281 -NCT04982653 -NCT04987359 -NCT04982900 -NCT04987463 -NCT04982926 -NCT04987788 -NCT04982939 -NCT04987931 -NCT04983095 -NCT04987996 -NCT04983121 -NCT04988074 -NCT04983134 -NCT04988165 -NCT04983238 -NCT04988191 -NCT04983342 -NCT04988295 -NCT04983407 -NCT04988555 -NCT04983550 -NCT04988607 -NCT04983706 -NCT04988750 -NCT04983745 -NCT04988841 -NCT04983810 -NCT04988945 -NCT04983862 -NCT04989010 -NCT04983901 -NCT04989140 -NCT04984018 -NCT04989192 -NCT04984330 -NCT04989218 -NCT04984343 -NCT04989283 -NCT04984356 -NCT04989322 -NCT04984369 -NCT04989335 -NCT04984434 -NCT04989387 -NCT04984551 -NCT04989504 -NCT04984668 -NCT04989556 -NCT04984733 -NCT04989621 -NCT04984811 -NCT04989647 -NCT04984837 -NCT04989725 -NCT04984980 -NCT04989803 -NCT04985084 -NCT04989816 -NCT04985110 -NCT04989829 -NCT04985136 -NCT04989855 -NCT04985201 -NCT04989946 -NCT04985266 -NCT04989959 -NCT04985409 -NCT04989985 -NCT04985552 -NCT04990037 -NCT04985565 -NCT04990063 -NCT04985604 -NCT04990102 -NCT04985721 -NCT04990271 -NCT04985734 -NCT04990479 -NCT04985825 -NCT04990609 -NCT04985851 -NCT04990739 -NCT04986189 -NCT04990778 -NCT04986293 -NCT04990856 -NCT04986423 -NCT04990895 -NCT04986566 -NCT04990921 -NCT04986579 -NCT04990960 -NCT04986657 -NCT04991025 -NCT04986670 -NCT04991090 -NCT04986696 -NCT04991103 -NCT04986852 -NCT05000892 -NCT04991428 -NCT04996758 -NCT04991480 -NCT04996745 -NCT04991506 -NCT04996771 -NCT04991740 -NCT04996823 -NCT04991870 -NCT04996836 -NCT04991948 -NCT04996875 -NCT04992013 -NCT04996914 -NCT04992026 -NCT04997018 -NCT04992143 -NCT04997096 -NCT04992507 -NCT04997252 -NCT04992559 -NCT04997317 -NCT04992715 -NCT04997382 -NCT04992780 -NCT04997798 -NCT04992949 -NCT04997837 -NCT04992988 -NCT04997850 -NCT04993014 -NCT04997902 -NCT04993040 -NCT04997941 -NCT04993131 -NCT04997993 -NCT04993261 -NCT04998318 -NCT04993313 -NCT04998422 -NCT04993391 -NCT04998474 -NCT04993430 -NCT04998552 -NCT04993508 -NCT04998669 -NCT04993625 -NCT04998682 -NCT04993677 -NCT04998747 -NCT04993690 -NCT04998760 -NCT04994132 -NCT04998786 -NCT04994236 -NCT04999007 -NCT04994587 -NCT04999085 -NCT04994626 -NCT04999176 -NCT04994639 -NCT04999202 -NCT04994717 -NCT04999306 -NCT04994808 -NCT04999332 -NCT04994977 -NCT04999384 -NCT04995003 -NCT04999540 -NCT04995016 -NCT04999605 -NCT04995042 -NCT04999618 -NCT04995094 -NCT04999696 -NCT04995120 -NCT04999761 -NCT04995185 -NCT04999800 -NCT04995198 -NCT04999878 -NCT04995419 -NCT04999917 -NCT04995523 -NCT04999943 -NCT04995536 -NCT04999969 -NCT04995848 -NCT05000294 -NCT04995978 -NCT05000359 -NCT04996004 -NCT05000372 -NCT04996017 -NCT05000450 -NCT04996030 -NCT05000502 -NCT04996121 -NCT05000554 -NCT04996160 -NCT05000684 -NCT04996446 -NCT05000697 -NCT04996498 -NCT05000710 -NCT04996602 -NCT05000801 -NCT04996641 -NCT05000827 -NCT04996693 -NCT05117372 -NCT05000905 -NCT05005728 -NCT05001009 -NCT05005715 -NCT05001113 -NCT05005845 -NCT05001204 -NCT05006040 -NCT05001282 -NCT05006092 -NCT05001347 -NCT05006326 -NCT05001360 -NCT05006469 -NCT05001412 -NCT05006482 -NCT05001451 -NCT05006664 -NCT05001516 -NCT05006716 -NCT05001724 -NCT05007015 -NCT05001763 -NCT05007093 -NCT05001828 -NCT05007106 -NCT05001880 -NCT05007132 -NCT05001971 -NCT05007145 -NCT05002127 -NCT05007418 -NCT05002140 -NCT05007444 -NCT05002270 -NCT05007548 -NCT05002569 -NCT05007587 -NCT05002608 -NCT05007613 -NCT05002686 -NCT05007652 -NCT05002816 -NCT05007769 -NCT05002842 -NCT05007782 -NCT05002868 -NCT05007873 -NCT05003037 -NCT05007938 -NCT05003141 -NCT05008055 -NCT05003349 -NCT05008224 -NCT05003427 -NCT05008237 -NCT05003622 -NCT05008445 -NCT05003635 -NCT05008471 -NCT05003700 -NCT05115344 -NCT05003752 -NCT05115422 -NCT05003856 -NCT05115500 -NCT05003895 -NCT05115630 -NCT05003973 -NCT05115760 -NCT05004025 -NCT05115799 -NCT05004064 -NCT05115825 -NCT05004116 -NCT05115916 -NCT05004142 -NCT05116072 -NCT05004285 -NCT05116085 -NCT05004350 -NCT05116137 -NCT05004376 -NCT05116189 -NCT05004441 -NCT05116202 -NCT05004623 -NCT05116254 -NCT05004792 -NCT05116462 -NCT05004831 -NCT05116475 -NCT05004974 -NCT05116683 -NCT05005091 -NCT05116709 -NCT05005117 -NCT05116800 -NCT05005182 -NCT05116878 -NCT05005195 -NCT05116891 -NCT05005273 -NCT05116917 -NCT05005299 -NCT05117008 -NCT05005403 -NCT05117138 -NCT05005429 -NCT05117177 -NCT05005468 -NCT05117242 -NCT05008510 -NCT05114798 -NCT05008536 -NCT05114837 -NCT05008575 -NCT05114915 -NCT05008783 -NCT05115279 -NCT05008809 -NCT05115292 -NCT05008848 -NCT05115331 -NCT05008861 -NCT05081492 -NCT05081531 -NCT05081609 -NCT05081674 -NCT05081687 -NCT05081908 -NCT05082025 -NCT05082259 -NCT05082441 -NCT05082493 -NCT05082519 -NCT05082545 -NCT05082597 -NCT05094336 -NCT05094466 -NCT05094544 -NCT05094804 -NCT05095207 -NCT05095376 -NCT05095441 -NCT05095467 -NCT05095519 -NCT05095558 -NCT05095636 -NCT05095714 -NCT05096234 -NCT05096286 -NCT05096390 -NCT05096468 -NCT05096481 -NCT05096663 -NCT05096715 -NCT05097209 -NCT05097248 -NCT05097378 -NCT05097417 -NCT05097443 -NCT05097599 -NCT05097781 -NCT05108012 -NCT05108077 -NCT05108090 -NCT05108298 -NCT05108428 -NCT05108623 -NCT05108779 -NCT05108805 -NCT05108870 -NCT05109052 -NCT05109182 -NCT05109208 -NCT05109442 -NCT05109494 -NCT05109728 -NCT05109819 -NCT05109832 -NCT05109884 -NCT05109910 -NCT05109975 -NCT05110118 -NCT05110131 -NCT05110170 -NCT05110196 -NCT05110495 -NCT05110781 -NCT05110807 -NCT05110924 -NCT05110950 -NCT05111197 -NCT05111314 -NCT05111353 -NCT05111366 -NCT05111444 -NCT05111509 -NCT05111561 -NCT05111574 -NCT05111626 -NCT05111860 -NCT05111964 -NCT05112458 -NCT05112536 -NCT05112601 -NCT05112965 -NCT05112991 -NCT05113069 -NCT05113134 -NCT05113186 -NCT05113199 -NCT05113251 -NCT05113264 -NCT05113290 -NCT05113342 -NCT05113355 -NCT05113368 -NCT05113459 -NCT05113485 -NCT05113537 -NCT05113927 -NCT05113966 -NCT05114005 -NCT05114109 -NCT05114148 -NCT05114213 -NCT05114421 -NCT05114525 -NCT05114603 -NCT05114668 -NCT05114707 -NCT05114720 -NCT05114746 -NCT05114759 -NCT05008900 -NCT05077072 -NCT05008913 -NCT05077098 -NCT05009069 -NCT05077111 -NCT05009082 -NCT05077137 -NCT05009290 -NCT05077215 -NCT05009329 -NCT05077280 -NCT05009394 -NCT05077358 -NCT05009446 -NCT05077371 -NCT05009550 -NCT05077384 -NCT05009693 -NCT05077449 -NCT05009719 -NCT05077527 -NCT05009836 -NCT05077709 -NCT05009849 -NCT05077735 -NCT05009927 -NCT05077800 -NCT05009953 -NCT05077839 -NCT05009966 -NCT05078047 -NCT05009979 -NCT05078151 -NCT05009992 -NCT05078398 -NCT05010005 -NCT05078528 -NCT05010031 -NCT05078593 -NCT05010096 -NCT05078671 -NCT05010109 -NCT05078775 -NCT05010122 -NCT05078918 -NCT05010200 -NCT05078931 -NCT05010239 -NCT05079022 -NCT05010343 -NCT05079230 -NCT05010356 -NCT05079282 -NCT05010369 -NCT05079334 -NCT05010434 -NCT05079360 -NCT05010525 -NCT05079438 -NCT05010564 -NCT05079503 -NCT05010629 -NCT05079698 -NCT05010668 -NCT05079828 -NCT05010681 -NCT05080010 -NCT05010694 -NCT05080166 -NCT05010759 -NCT05080556 -NCT05010772 -NCT05080621 -NCT05010850 -NCT05080673 -NCT05011019 -NCT05080790 -NCT05011058 -NCT05080829 -NCT05011097 -NCT05080842 -NCT05011188 -NCT05080920 -NCT05011227 -NCT05080946 -NCT05011279 -NCT05081180 -NCT05011383 -NCT05081193 -NCT05011461 -NCT05081479 -NCT05011487 -NCT05075577 -NCT05075603 -NCT05075655 -NCT05075759 -NCT05075889 -NCT05075980 -NCT05075993 -NCT05076097 -NCT05076279 -NCT05076396 -NCT05076513 -NCT05076552 -NCT05076591 -NCT05076682 -NCT05076695 -NCT05076760 -NCT05076786 -NCT05076851 -NCT05076916 -NCT05076942 -NCT05077033 -NCT05011500 -NCT05016518 -NCT05011721 -NCT05016349 -NCT05011799 -NCT05016544 -NCT05011890 -NCT05016570 -NCT05012007 -NCT05016622 -NCT05012098 -NCT05016778 -NCT05012124 -NCT05016869 -NCT05012176 -NCT05016947 -NCT05012254 -NCT05016973 -NCT05012371 -NCT05017012 -NCT05012397 -NCT05017025 -NCT05012618 -NCT05017103 -NCT05012644 -NCT05017246 -NCT05012813 -NCT05017597 -NCT05012904 -NCT05071053 -NCT05012917 -NCT05071105 -NCT05013086 -NCT05071183 -NCT05013099 -NCT05071209 -NCT05013125 -NCT05071482 -NCT05013216 -NCT05071560 -NCT05013255 -NCT05071703 -NCT05013268 -NCT05071846 -NCT05013372 -NCT05071937 -NCT05013437 -NCT05072041 -NCT05013450 -NCT05072106 -NCT05013515 -NCT05072197 -NCT05013554 -NCT05072314 -NCT05013697 -NCT05072327 -NCT05013892 -NCT05072522 -NCT05014035 -NCT05072561 -NCT05014100 -NCT05072600 -NCT05014139 -NCT05072639 -NCT05014295 -NCT05073172 -NCT05014360 -NCT05073198 -NCT05014412 -NCT05073250 -NCT05014464 -NCT05073432 -NCT05014646 -NCT05073484 -NCT05014698 -NCT05073653 -NCT05014776 -NCT05074264 -NCT05014815 -NCT05074290 -NCT05014828 -NCT05074355 -NCT05014841 -NCT05074472 -NCT05015010 -NCT05074550 -NCT05015179 -NCT05074589 -NCT05015309 -NCT05074810 -NCT05015426 -NCT05074914 -NCT05015543 -NCT05074940 -NCT05015608 -NCT05074966 -NCT05015621 -NCT05074992 -NCT05015790 -NCT05075122 -NCT05015816 -NCT05075356 -NCT05015907 -NCT05075395 -NCT05015972 -NCT05075460 -NCT05016063 -NCT05075512 -NCT05016245 -NCT05075538 -NCT05016310 -NCT05075564 -NCT05017610 -NCT05029999 -NCT05017623 -NCT05030077 -NCT05017662 -NCT05030090 -NCT05017883 -NCT05030207 -NCT05017922 -NCT05030246 -NCT05018000 -NCT05030298 -NCT05018078 -NCT05030363 -NCT05018156 -NCT05030454 -NCT05018182 -NCT05030506 -NCT05018195 -NCT05030519 -NCT05018273 -NCT05030597 -NCT05018325 -NCT05030675 -NCT05018442 -NCT05030792 -NCT05018520 -NCT05030870 -NCT05018676 -NCT05031325 -NCT05018702 -NCT05031494 -NCT05019144 -NCT05031533 -NCT05019534 -NCT05031897 -NCT05019677 -NCT05041478 -NCT05019690 -NCT05041504 -NCT05019703 -NCT05041751 -NCT05019716 -NCT05041842 -NCT05019794 -NCT05041920 -NCT05019846 -NCT05041946 -NCT05019976 -NCT05041972 -NCT05019989 -NCT05042128 -NCT05020015 -NCT05042336 -NCT05020067 -NCT05042375 -NCT05020119 -NCT05042479 -NCT05020236 -NCT05042531 -NCT05020392 -NCT05042687 -NCT05020444 -NCT05042791 -NCT05020457 -NCT05042908 -NCT05020522 -NCT05042934 -NCT05020561 -NCT05042999 -NCT05020574 -NCT05043012 -NCT05020613 -NCT05043090 -NCT05020665 -NCT05043298 -NCT05020678 -NCT05043402 -NCT05020769 -NCT05043532 -NCT05020860 -NCT05043571 -NCT05020912 -NCT05043649 -NCT05020925 -NCT05043688 -NCT05020964 -NCT05070039 -NCT05021120 -NCT05070156 -NCT05021133 -NCT05070208 -NCT05021172 -NCT05070221 -NCT05021185 -NCT05070247 -NCT05021237 -NCT05070299 -NCT05021250 -NCT05070403 -NCT05021263 -NCT05070598 -NCT05021328 -NCT05070637 -NCT05021367 -NCT05071001 -NCT05021393 -NCT05071014 -NCT05021770 -NCT05029882 -NCT05029960 -NCT05029973 -NCT05021900 -NCT05025423 -NCT05021952 -NCT05025358 -NCT05022030 -NCT05025488 -NCT05022160 -NCT05025527 -NCT05022342 -NCT05025631 -NCT05022394 -NCT05025735 -NCT05022511 -NCT05025748 -NCT05022576 -NCT05025800 -NCT05022602 -NCT05025813 -NCT05022628 -NCT05025826 -NCT05022641 -NCT05025930 -NCT05022654 -NCT05026229 -NCT05022667 -NCT05026268 -NCT05022719 -NCT05026593 -NCT05022797 -NCT05026606 -NCT05022823 -NCT05026736 -NCT05022849 -NCT05026983 -NCT05022901 -NCT05027009 -NCT05022927 -NCT05027100 -NCT05023018 -NCT05027139 -NCT05023109 -NCT05027204 -NCT05023265 -NCT05027321 -NCT05023486 -NCT05027386 -NCT05023551 -NCT05027412 -NCT05023655 -NCT05027425 -NCT05023707 -NCT05027477 -NCT05023772 -NCT05027490 -NCT05023785 -NCT05027594 -NCT05023889 -NCT05027633 -NCT05023928 -NCT05027711 -NCT05023967 -NCT05027737 -NCT05023980 -NCT05027776 -NCT05023993 -NCT05027867 -NCT05024019 -NCT05028218 -NCT05024045 -NCT05028296 -NCT05024097 -NCT05028348 -NCT05024162 -NCT05028374 -NCT05024214 -NCT05028400 -NCT05024253 -NCT05028439 -NCT05024266 -NCT05028452 -NCT05024318 -NCT05028478 -NCT05024357 -NCT05028504 -NCT05024383 -NCT05028556 -NCT05024513 -NCT05028725 -NCT05024552 -NCT05028751 -NCT05024734 -NCT05028933 -NCT05024773 -NCT05029024 -NCT05024812 -NCT05029063 -NCT05024877 -NCT05029102 -NCT05024968 -NCT05029141 -NCT05024994 -NCT05029154 -NCT05025020 -NCT05029453 -NCT05025033 -NCT05029531 -NCT05025059 -NCT05029596 -NCT05025085 -NCT05029791 -NCT05025098 -NCT05041335 -NCT05031910 -NCT05036681 -NCT05031949 -NCT05036577 -NCT05031975 -NCT05036798 -NCT05032014 -NCT05037019 -NCT05032027 -NCT05037149 -NCT05032040 -NCT05037279 -NCT05032079 -NCT05037461 -NCT05032092 -NCT05037500 -NCT05032183 -NCT05037669 -NCT05032404 -NCT05038007 -NCT05032599 -NCT05038098 -NCT05032716 -NCT05038124 -NCT05032794 -NCT05038137 -NCT05032820 -NCT05038150 -NCT05033067 -NCT05038254 -NCT05033132 -NCT05038332 -NCT05033158 -NCT05038397 -NCT05033301 -NCT05038592 -NCT05033392 -NCT05038644 -NCT05033522 -NCT05038657 -NCT05033587 -NCT05038696 -NCT05033691 -NCT05038735 -NCT05033756 -NCT05038800 -NCT05033769 -NCT05038813 -NCT05033795 -NCT05038839 -NCT05033925 -NCT05039060 -NCT05034055 -NCT05039073 -NCT05034133 -NCT05039177 -NCT05034146 -NCT05039281 -NCT05034354 -NCT05039606 -NCT05034497 -NCT05039632 -NCT05034536 -NCT05039658 -NCT05034562 -NCT05039736 -NCT05034614 -NCT05039762 -NCT05034627 -NCT05039801 -NCT05034692 -NCT05039892 -NCT05034783 -NCT05039905 -NCT05034887 -NCT05039931 -NCT05035147 -NCT05039944 -NCT05035173 -NCT05040152 -NCT05035381 -NCT05040360 -NCT05035407 -NCT05040425 -NCT05035706 -NCT05040438 -NCT05035732 -NCT05040555 -NCT05035745 -NCT05040568 -NCT05035836 -NCT05040685 -NCT05035914 -NCT05040815 -NCT05036005 -NCT05040867 -NCT05036083 -NCT05040932 -NCT05036096 -NCT05041062 -NCT05036109 -NCT05041075 -NCT05036226 -NCT05041101 -NCT05036291 -NCT05041127 -NCT05036408 -NCT05041153 -NCT05036434 -NCT05041257 -NCT05036564 -NCT05069935 -NCT05043701 -NCT05048498 -NCT05043714 -NCT05048459 -NCT05043857 -NCT05048524 -NCT05043922 -NCT05048537 -NCT05043987 -NCT05048615 -NCT05044039 -NCT05048641 -NCT05044065 -NCT05048732 -NCT05044117 -NCT05048797 -NCT05044312 -NCT05066022 -NCT05044468 -NCT05066139 -NCT05044624 -NCT05066165 -NCT05044728 -NCT05066412 -NCT05044819 -NCT05066607 -NCT05044871 -NCT05066646 -NCT05044897 -NCT05066802 -NCT05044975 -NCT05066958 -NCT05044988 -NCT05067023 -NCT05045027 -NCT05067101 -NCT05045040 -NCT05067140 -NCT05045066 -NCT05067153 -NCT05045287 -NCT05067257 -NCT05045404 -NCT05067283 -NCT05045443 -NCT05067413 -NCT05045664 -NCT05067530 -NCT05045911 -NCT05067556 -NCT05045950 -NCT05067660 -NCT05045976 -NCT05067738 -NCT05046028 -NCT05067777 -NCT05046067 -NCT05067972 -NCT05046171 -NCT05068024 -NCT05046262 -NCT05068076 -NCT05046314 -NCT05068102 -NCT05046665 -NCT05068141 -NCT05046756 -NCT05068180 -NCT05046782 -NCT05068193 -NCT05046808 -NCT05068206 -NCT05046847 -NCT05068232 -NCT05047042 -NCT05068401 -NCT05047094 -NCT05068427 -NCT05047250 -NCT05068440 -NCT05047276 -NCT05068453 -NCT05047510 -NCT05068687 -NCT05047536 -NCT05068739 -NCT05047575 -NCT05068752 -NCT05047848 -NCT05068856 -NCT05047913 -NCT05068869 -NCT05047926 -NCT05068921 -NCT05047965 -NCT05068973 -NCT05047991 -NCT05069038 -NCT05048017 -NCT05069051 -NCT05048082 -NCT05069220 -NCT05048160 -NCT05069467 -NCT05048212 -NCT05069519 -NCT05048316 -NCT05069584 -NCT05048368 -NCT05069766 -NCT05048407 -NCT05069857 -NCT05048810 -NCT05061628 -NCT05048901 -NCT05061654 -NCT05049031 -NCT05061823 -NCT05049083 -NCT05062005 -NCT05049148 -NCT05062096 -NCT05049265 -NCT05062174 -NCT05049317 -NCT05062278 -NCT05049473 -NCT05062317 -NCT05049681 -NCT05062720 -NCT05049707 -NCT05062837 -NCT05049746 -NCT05062889 -NCT05049785 -NCT05062980 -NCT05049811 -NCT05063019 -NCT05049863 -NCT05063058 -NCT05050006 -NCT05063123 -NCT05050084 -NCT05063136 -NCT05050097 -NCT05063292 -NCT05050162 -NCT05063318 -NCT05050305 -NCT05063357 -NCT05050370 -NCT05063396 -NCT05050461 -NCT05063552 -NCT05050539 -NCT05063565 -NCT05050630 -NCT05063591 -NCT05050760 -NCT05063604 -NCT05050864 -NCT05063682 -NCT05050929 -NCT05063760 -NCT05050942 -NCT05063786 -NCT05051046 -NCT05063916 -NCT05051059 -NCT05064046 -NCT05051241 -NCT05064059 -NCT05051345 -NCT05064085 -NCT05051384 -NCT05064280 -NCT05051475 -NCT05064358 -NCT05051631 -NCT05064410 -NCT05051670 -NCT05064618 -NCT05051696 -NCT05064670 -NCT05051735 -NCT05064787 -NCT05051800 -NCT05065021 -NCT05051865 -NCT05065047 -NCT05051891 -NCT05065268 -NCT05052086 -NCT05065346 -NCT05052099 -NCT05065398 -NCT05052255 -NCT05065411 -NCT05052268 -NCT05065554 -NCT05052372 -NCT05065710 -NCT05052437 -NCT05065736 -NCT05052528 -NCT05065801 -NCT05052567 -NCT05065866 -NCT05052723 -NCT05060237 -NCT05060263 -NCT05060276 -NCT05060432 -NCT05060471 -NCT05060627 -NCT05060653 -NCT05060796 -NCT05061017 -NCT05061134 -NCT05061147 -NCT05061251 -NCT05061316 -NCT05061420 -NCT05061537 -NCT05061550 -NCT05065957 -NCT05052801 -NCT05056051 -NCT05052931 -NCT05055908 -NCT05052957 -NCT05056064 -NCT05052970 -NCT05056077 -NCT05053113 -NCT05056116 -NCT05053152 -NCT05056337 -NCT05053191 -NCT05056350 -NCT05053230 -NCT05056389 -NCT05053295 -NCT05056402 -NCT05053308 -NCT05056688 -NCT05053386 -NCT05056805 -NCT05053425 -NCT05056831 -NCT05053555 -NCT05056844 -NCT05053607 -NCT05056896 -NCT05053659 -NCT05057013 -NCT05053737 -NCT05057052 -NCT05053750 -NCT05057078 -NCT05053802 -NCT05057130 -NCT05053841 -NCT05057143 -NCT05053854 -NCT05057195 -NCT05053867 -NCT05057234 -NCT05053880 -NCT05057247 -NCT05053971 -NCT05057494 -NCT05053997 -NCT05057598 -NCT05054062 -NCT05057702 -NCT05054231 -NCT05057715 -NCT05054257 -NCT05057845 -NCT05054296 -NCT05058183 -NCT05054335 -NCT05058196 -NCT05054348 -NCT05058352 -NCT05054374 -NCT05058404 -NCT05054400 -NCT05058495 -NCT05054426 -NCT05058508 -NCT05054439 -NCT05058560 -NCT05054465 -NCT05058651 -NCT05054478 -NCT05058755 -NCT05054569 -NCT05058937 -NCT05054725 -NCT05059015 -NCT05054751 -NCT05059132 -NCT05054959 -NCT05059236 -NCT05054998 -NCT05059262 -NCT05055050 -NCT05059327 -NCT05055063 -NCT05059379 -NCT05055167 -NCT05059522 -NCT05055206 -NCT05059678 -NCT05055232 -NCT05059717 -NCT05055323 -NCT05059756 -NCT05055518 -NCT05059782 -NCT05055583 -NCT05059821 -NCT05055609 -NCT05059847 -NCT05055635 -NCT05059912 -NCT05055648 -NCT05059990 -NCT05055726 -NCT05060003 -NCT05055739 -NCT05060016 -NCT05055791 -NCT05060068 -NCT05055843 -NCT05094310 -NCT05082610 -NCT05088252 -NCT05082675 -NCT05088070 -NCT05082948 -NCT05088330 -NCT05082961 -NCT05088356 -NCT05083169 -NCT05088395 -NCT05083208 -NCT05088733 -NCT05083247 -NCT05088785 -NCT05083416 -NCT05088889 -NCT05083481 -NCT05088967 -NCT05083754 -NCT05089266 -NCT05083780 -NCT05089370 -NCT05083936 -NCT05089461 -NCT05084027 -NCT05089643 -NCT05084092 -NCT05089734 -NCT05084430 -NCT05089825 -NCT05084456 -NCT05089903 -NCT05084586 -NCT05089916 -NCT05084625 -NCT05090215 -NCT05084677 -NCT05090358 -NCT05084833 -NCT05090566 -NCT05084859 -NCT05090956 -NCT05084872 -NCT05091151 -NCT05085002 -NCT05091190 -NCT05085028 -NCT05091346 -NCT05085054 -NCT05091372 -NCT05085496 -NCT05091424 -NCT05085548 -NCT05091528 -NCT05085626 -NCT05091541 -NCT05085678 -NCT05091567 -NCT05085977 -NCT05091866 -NCT05085990 -NCT05092022 -NCT05086250 -NCT05092217 -NCT05086315 -NCT05092360 -NCT05086354 -NCT05092373 -NCT05086497 -NCT05092412 -NCT05086614 -NCT05092451 -NCT05086627 -NCT05092477 -NCT05086666 -NCT05092750 -NCT05086692 -NCT05092763 -NCT05086705 -NCT05092802 -NCT05086731 -NCT05092815 -NCT05086770 -NCT05092880 -NCT05086783 -NCT05092958 -NCT05086822 -NCT05093140 -NCT05086848 -NCT05093192 -NCT05087095 -NCT05093231 -NCT05087134 -NCT05093322 -NCT05087251 -NCT05093335 -NCT05087264 -NCT05093387 -NCT05087485 -NCT05093608 -NCT05087602 -NCT05093907 -NCT05087706 -NCT05093920 -NCT05087745 -NCT05094102 -NCT05087875 -NCT05094167 -NCT05087992 -NCT05094206 -NCT05088057 -NCT05107856 -NCT05097911 -NCT05102292 -NCT05098002 -NCT05102214 -NCT05098119 -NCT05102721 -NCT05098132 -NCT05102747 -NCT05098171 -NCT05103007 -NCT05098184 -NCT05103020 -NCT05098197 -NCT05103046 -NCT05098210 -NCT05103345 -NCT05098327 -NCT05103358 -NCT05098405 -NCT05103488 -NCT05098613 -NCT05103501 -NCT05098847 -NCT05103605 -NCT05098951 -NCT05103631 -NCT05098990 -NCT05103644 -NCT05099003 -NCT05103683 -NCT05099068 -NCT05103722 -NCT05099172 -NCT05103826 -NCT05099211 -NCT05103891 -NCT05099237 -NCT05103904 -NCT05099471 -NCT05103917 -NCT05099536 -NCT05104099 -NCT05099549 -NCT05104281 -NCT05099562 -NCT05104515 -NCT05099666 -NCT05104567 -NCT05099679 -NCT05104736 -NCT05099848 -NCT05104788 -NCT05099952 -NCT05104801 -NCT05100069 -NCT05104866 -NCT05100095 -NCT05104905 -NCT05100121 -NCT05104983 -NCT05100251 -NCT05105087 -NCT05100303 -NCT05105152 -NCT05100316 -NCT05105412 -NCT05100329 -NCT05105464 -NCT05100446 -NCT05105672 -NCT05100472 -NCT05105815 -NCT05100498 -NCT05105841 -NCT05100628 -NCT05105867 -NCT05100641 -NCT05105945 -NCT05100862 -NCT05105971 -NCT05100914 -NCT05106023 -NCT05101070 -NCT05106127 -NCT05101096 -NCT05106179 -NCT05101109 -NCT05106192 -NCT05101148 -NCT05106244 -NCT05101213 -NCT05106296 -NCT05101265 -NCT05106608 -NCT05101356 -NCT05106699 -NCT05101551 -NCT05106777 -NCT05101564 -NCT05107011 -NCT05101616 -NCT05107219 -NCT05101629 -NCT05107388 -NCT05101759 -NCT05107427 -NCT05101798 -NCT05107674 -NCT05101824 -NCT05107739 -NCT05102006 -NCT05128903 -NCT05117476 -NCT05123209 -NCT05117658 -NCT05123131 -NCT05117814 -NCT05123300 -NCT05117931 -NCT05123365 -NCT05117957 -NCT05123391 -NCT05118334 -NCT05123404 -NCT05118347 -NCT05123456 -NCT05118451 -NCT05123482 -NCT05118464 -NCT05123534 -NCT05118724 -NCT05123625 -NCT05118776 -NCT05123807 -NCT05118789 -NCT05124002 -NCT05118841 -NCT05124106 -NCT05118854 -NCT05124236 -NCT05119010 -NCT05124405 -NCT05119036 -NCT05124431 -NCT05119049 -NCT05124704 -NCT05119296 -NCT05124795 -NCT05119335 -NCT05124912 -NCT05119582 -NCT05124951 -NCT05119907 -NCT05125016 -NCT05119933 -NCT05125055 -NCT05119998 -NCT05125380 -NCT05120167 -NCT05125393 -NCT05120180 -NCT05125432 -NCT05120271 -NCT05125523 -NCT05120284 -NCT05125666 -NCT05120349 -NCT05125991 -NCT05120375 -NCT05126342 -NCT05120570 -NCT05126433 -NCT05120596 -NCT05126472 -NCT05120622 -NCT05126719 -NCT05120947 -NCT05126797 -NCT05120960 -NCT05126823 -NCT05121038 -NCT05126875 -NCT05121051 -NCT05126927 -NCT05121103 -NCT05127135 -NCT05121207 -NCT05127174 -NCT05121233 -NCT05127590 -NCT05121259 -NCT05127668 -NCT05121350 -NCT05127759 -NCT05121363 -NCT05127798 -NCT05121545 -NCT05127811 -NCT05121571 -NCT05127824 -NCT05121805 -NCT05127850 -NCT05121948 -NCT05128032 -NCT05121987 -NCT05128201 -NCT05122091 -NCT05128318 -NCT05122221 -NCT05128487 -NCT05122377 -NCT05128539 -NCT05122494 -NCT05128708 -NCT05122546 -NCT05128734 -NCT05122572 -NCT05128773 -NCT05122585 -NCT05128825 -NCT05122806 -NCT05128838 -NCT05123001 -NCT05139082 -NCT05129059 -NCT05134532 -NCT05129280 -NCT05134519 -NCT05129774 -NCT05134558 -NCT05129787 -NCT05134636 -NCT05130021 -NCT05134740 -NCT05130060 -NCT05134948 -NCT05130138 -NCT05135052 -NCT05130177 -NCT05135104 -NCT05130255 -NCT05135260 -NCT05130515 -NCT05135351 -NCT05130580 -NCT05135364 -NCT05130606 -NCT05135520 -NCT05130684 -NCT05135650 -NCT05130801 -NCT05135715 -NCT05130827 -NCT05135832 -NCT05130840 -NCT05135845 -NCT05130866 -NCT05135858 -NCT05131022 -NCT05135975 -NCT05131113 -NCT05136079 -NCT05131243 -NCT05136092 -NCT05131386 -NCT05136144 -NCT05131490 -NCT05136196 -NCT05131581 -NCT05136300 -NCT05131607 -NCT05136326 -NCT05131698 -NCT05136378 -NCT05131711 -NCT05136677 -NCT05131763 -NCT05136768 -NCT05131776 -NCT05136846 -NCT05131815 -NCT05136898 -NCT05131841 -NCT05136937 -NCT05131919 -NCT05137054 -NCT05132075 -NCT05137067 -NCT05132101 -NCT05137171 -NCT05132114 -NCT05137262 -NCT05132205 -NCT05137275 -NCT05132244 -NCT05137561 -NCT05132283 -NCT05137639 -NCT05132296 -NCT05137782 -NCT05132413 -NCT05137860 -NCT05132478 -NCT05137886 -NCT05132504 -NCT05137899 -NCT05132582 -NCT05138042 -NCT05132738 -NCT05138094 -NCT05132777 -NCT05138146 -NCT05132790 -NCT05138159 -NCT05132803 -NCT05138328 -NCT05132985 -NCT05138458 -NCT05133154 -NCT05138627 -NCT05133310 -NCT05138848 -NCT05133349 -NCT05138900 -NCT05133427 -NCT05138991 -NCT05133440 -NCT05139004 -NCT05133544 -NCT05139017 -NCT05133674 -NCT05139043 -NCT05133882 -NCT05139056 -NCT05134194 -NCT05149339 -NCT05139095 -NCT05144061 -NCT05139199 -NCT05144009 -NCT05139225 -NCT05144100 -NCT05139277 -NCT05144243 -NCT05139368 -NCT05144334 -NCT05139641 -NCT05144347 -NCT05140252 -NCT05144516 -NCT05140382 -NCT05144529 -NCT05140512 -NCT05144542 -NCT05140655 -NCT05144698 -NCT05140746 -NCT05144841 -NCT05140785 -NCT05144854 -NCT05140811 -NCT05144867 -NCT05140902 -NCT05144997 -NCT05141149 -NCT05145218 -NCT05141253 -NCT05145400 -NCT05141357 -NCT05145569 -NCT05141383 -NCT05145647 -NCT05141474 -NCT05145660 -NCT05141513 -NCT05145816 -NCT05141539 -NCT05145829 -NCT05141617 -NCT05145907 -NCT05141630 -NCT05146219 -NCT05141643 -NCT05146297 -NCT05141682 -NCT05146440 -NCT05141708 -NCT05146635 -NCT05141721 -NCT05146739 -NCT05141747 -NCT05146778 -NCT05141760 -NCT05146843 -NCT05141786 -NCT05146973 -NCT05141825 -NCT05147272 -NCT05141877 -NCT05147311 -NCT05142189 -NCT05147350 -NCT05142202 -NCT05147467 -NCT05142241 -NCT05147493 -NCT05142345 -NCT05147545 -NCT05142358 -NCT05147558 -NCT05142371 -NCT05147727 -NCT05142423 -NCT05147844 -NCT05142475 -NCT05148078 -NCT05142605 -NCT05148195 -NCT05142631 -NCT05148234 -NCT05142696 -NCT05148325 -NCT05142787 -NCT05148442 -NCT05142865 -NCT05148494 -NCT05142982 -NCT05148533 -NCT05143099 -NCT05148546 -NCT05143112 -NCT05148728 -NCT05143125 -NCT05148767 -NCT05143151 -NCT05148910 -NCT05143229 -NCT05149027 -NCT05143775 -NCT05149170 -NCT05143788 -NCT05149196 -NCT05143840 -NCT05149248 -NCT05143970 -NCT05149326 -NCT05143996 -NCT05161143 -NCT05149378 -NCT05156060 -NCT05149391 -NCT05155839 -NCT05149807 -NCT05156203 -NCT05150210 -NCT05156229 -NCT05150236 -NCT05156268 -NCT05150353 -NCT05156372 -NCT05150405 -NCT05156424 -NCT05150457 -NCT05156450 -NCT05150522 -NCT05156463 -NCT05150535 -NCT05156515 -NCT05150652 -NCT05156554 -NCT05150691 -NCT05156606 -NCT05151341 -NCT05156788 -NCT05151419 -NCT05156866 -NCT05151549 -NCT05156892 -NCT05151588 -NCT05156905 -NCT05152147 -NCT05156970 -NCT05152212 -NCT05157451 -NCT05152407 -NCT05157542 -NCT05152459 -NCT05157659 -NCT05152472 -NCT05157763 -NCT05152498 -NCT05157776 -NCT05152797 -NCT05157971 -NCT05152927 -NCT05158062 -NCT05153096 -NCT05158374 -NCT05153226 -NCT05158491 -NCT05153239 -NCT05158530 -NCT05153304 -NCT05158608 -NCT05153330 -NCT05158907 -NCT05153343 -NCT05159050 -NCT05153408 -NCT05159193 -NCT05153447 -NCT05159245 -NCT05153733 -NCT05159323 -NCT05153746 -NCT05159388 -NCT05153772 -NCT05159440 -NCT05153785 -NCT05159518 -NCT05154162 -NCT05159700 -NCT05154305 -NCT05159778 -NCT05154344 -NCT05160051 -NCT05154396 -NCT05160168 -NCT05154487 -NCT05160285 -NCT05154630 -NCT05160324 -NCT05154812 -NCT05160480 -NCT05154994 -NCT05160545 -NCT05155033 -NCT05160597 -NCT05155046 -NCT05160714 -NCT05155124 -NCT05160727 -NCT05155189 -NCT05160740 -NCT05155215 -NCT05160753 -NCT05155254 -NCT05160818 -NCT05155332 -NCT05160857 -NCT05155501 -NCT05160896 -NCT05155605 -NCT05160922 -NCT05155618 -NCT05161013 -NCT05155709 -NCT05161026 -NCT05155722 -NCT05171374 -NCT05161195 -NCT05167149 -NCT05161260 -NCT05167071 -NCT05161312 -NCT05167175 -NCT05161390 -NCT05167370 -NCT05161533 -NCT05167409 -NCT05161572 -NCT05167448 -NCT05161585 -NCT05167500 -NCT05161728 -NCT05167643 -NCT05162118 -NCT05167669 -NCT05162196 -NCT05167851 -NCT05162235 -NCT05167916 -NCT05162352 -NCT05167994 -NCT05162404 -NCT05168163 -NCT05162469 -NCT05168202 -NCT05162573 -NCT05168423 -NCT05162755 -NCT05168527 -NCT05162807 -NCT05168566 -NCT05162846 -NCT05168618 -NCT05162872 -NCT05168696 -NCT05162898 -NCT05168748 -NCT05162976 -NCT05168839 -NCT05163028 -NCT05168904 -NCT05163041 -NCT05168930 -NCT05163080 -NCT05169112 -NCT05163106 -NCT05169203 -NCT05163223 -NCT05169437 -NCT05163249 -NCT05169489 -NCT05163483 -NCT05169515 -NCT05163509 -NCT05169528 -NCT05163665 -NCT05169567 -NCT05163873 -NCT05169658 -NCT05163977 -NCT05169684 -NCT05164042 -NCT05169697 -NCT05164315 -NCT05169801 -NCT05164354 -NCT05169944 -NCT05164445 -NCT05169957 -NCT05164458 -NCT05169970 -NCT05164510 -NCT05170035 -NCT05164666 -NCT05170204 -NCT05164770 -NCT05170230 -NCT05164848 -NCT05170256 -NCT05164874 -NCT05170334 -NCT05164952 -NCT05170399 -NCT05165160 -NCT05170438 -NCT05165225 -NCT05170503 -NCT05165355 -NCT05170555 -NCT05165407 -NCT05170581 -NCT05165433 -NCT05170594 -NCT05165849 -NCT05170789 -NCT05166070 -NCT05170828 -NCT05166148 -NCT05170958 -NCT05166239 -NCT05171062 -NCT05166577 -NCT05171166 -NCT05166616 -NCT05171309 -NCT05166694 -NCT05171335 -NCT05166772 -NCT05180695 -NCT05171387 -NCT05176665 -NCT05171439 -NCT05176509 -NCT05171530 -NCT05176691 -NCT05171647 -NCT05176743 -NCT05171660 -NCT05176756 -NCT05171777 -NCT05176834 -NCT05171790 -NCT05176860 -NCT05171816 -NCT05176873 -NCT05172245 -NCT05176925 -NCT05172258 -NCT05177042 -NCT05172310 -NCT05177068 -NCT05172518 -NCT05177133 -NCT05172596 -NCT05177185 -NCT05172739 -NCT05177211 -NCT05172856 -NCT05177237 -NCT05172986 -NCT05177276 -NCT05173142 -NCT05177380 -NCT05173246 -NCT05177432 -NCT05173272 -NCT05177484 -NCT05173337 -NCT05177536 -NCT05173415 -NCT05177770 -NCT05173467 -NCT05177796 -NCT05173545 -NCT05178043 -NCT05173610 -NCT05178082 -NCT05173623 -NCT05178095 -NCT05173792 -NCT05178186 -NCT05173805 -NCT05178342 -NCT05173961 -NCT05178472 -NCT05173987 -NCT05178511 -NCT05174026 -NCT05178524 -NCT05174117 -NCT05178576 -NCT05174156 -NCT05178628 -NCT05174169 -NCT05178693 -NCT05174286 -NCT05178888 -NCT05174325 -NCT05178927 -NCT05174455 -NCT05179122 -NCT05174585 -NCT05179161 -NCT05174637 -NCT05179213 -NCT05174650 -NCT05179239 -NCT05174832 -NCT05179304 -NCT05175092 -NCT05179317 -NCT05175235 -NCT05179408 -NCT05175404 -NCT05179447 -NCT05175469 -NCT05179603 -NCT05175508 -NCT05179694 -NCT05176002 -NCT05179720 -NCT05176067 -NCT05179733 -NCT05176080 -NCT05179837 -NCT05176119 -NCT05179889 -NCT05176145 -NCT05180006 -NCT05176223 -NCT05180097 -NCT05176275 -NCT05180422 -NCT05176288 -NCT05180474 -NCT05176405 -NCT05180565 -NCT05176470 -NCT05180656 -NCT05176483 -NCT05190952 -NCT05180734 -NCT05186116 -NCT05180799 -NCT05186064 -NCT05180825 -NCT05186493 -NCT05180851 -NCT05186506 -NCT05180864 -NCT05186545 -NCT05180942 -NCT05186558 -NCT05181033 -NCT05186753 -NCT05181228 -NCT05186974 -NCT05181462 -NCT05187091 -NCT05181488 -NCT05187130 -NCT05181501 -NCT05187182 -NCT05181540 -NCT05187208 -NCT05181592 -NCT05187338 -NCT05181605 -NCT05187481 -NCT05181722 -NCT05187624 -NCT05181735 -NCT05187832 -NCT05181865 -NCT05187858 -NCT05182073 -NCT05187884 -NCT05182112 -NCT05188118 -NCT05182164 -NCT05188170 -NCT05182229 -NCT05188209 -NCT05182866 -NCT05188313 -NCT05182905 -NCT05188326 -NCT05182931 -NCT05188508 -NCT05182944 -NCT05188573 -NCT05182957 -NCT05188586 -NCT05183035 -NCT05188664 -NCT05183048 -NCT05188729 -NCT05183074 -NCT05188755 -NCT05183126 -NCT05188859 -NCT05183139 -NCT05189028 -NCT05183204 -NCT05189067 -NCT05183243 -NCT05189093 -NCT05183295 -NCT05189184 -NCT05183776 -NCT05189197 -NCT05183828 -NCT05189366 -NCT05183854 -NCT05189457 -NCT05183958 -NCT05189483 -NCT05183984 -NCT05189535 -NCT05184088 -NCT05189717 -NCT05184140 -NCT05189730 -NCT05184582 -NCT05190042 -NCT05184595 -NCT05190068 -NCT05184712 -NCT05190094 -NCT05184725 -NCT05190172 -NCT05184803 -NCT05190185 -NCT05184816 -NCT05190315 -NCT05184842 -NCT05190445 -NCT05184946 -NCT05190471 -NCT05185245 -NCT05190549 -NCT05185505 -NCT05190575 -NCT05185531 -NCT05190627 -NCT05185739 -NCT05190653 -NCT05185752 -NCT05190705 -NCT05185869 -NCT05190770 -NCT05185947 -NCT05201118 -NCT05190978 -NCT05196854 -NCT05191004 -NCT05196386 -NCT05191017 -NCT05197192 -NCT05191225 -NCT05197257 -NCT05191472 -NCT05197322 -NCT05191498 -NCT05197348 -NCT05191667 -NCT05197426 -NCT05191680 -NCT05197881 -NCT05191784 -NCT05197894 -NCT05191797 -NCT05197933 -NCT05191849 -NCT05198089 -NCT05191914 -NCT05198349 -NCT05191940 -NCT05198479 -NCT05192018 -NCT05198505 -NCT05192031 -NCT05198531 -NCT05192044 -NCT05198609 -NCT05192122 -NCT05198622 -NCT05192174 -NCT05198752 -NCT05192278 -NCT05198804 -NCT05192447 -NCT05198817 -NCT05192460 -NCT05198830 -NCT05192486 -NCT05198843 -NCT05192512 -NCT05198856 -NCT05192525 -NCT05198934 -NCT05192681 -NCT05198960 -NCT05192694 -NCT05199051 -NCT05192798 -NCT05199168 -NCT05192837 -NCT05199272 -NCT05192889 -NCT05199285 -NCT05192980 -NCT05199311 -NCT05193149 -NCT05199337 -NCT05193188 -NCT05199363 -NCT05193214 -NCT05199376 -NCT05193240 -NCT05199519 -NCT05193292 -NCT05199584 -NCT05193357 -NCT05199649 -NCT05193604 -NCT05199753 -NCT05193617 -NCT05199961 -NCT05193721 -NCT05200013 -NCT05194072 -NCT05200143 -NCT05194293 -NCT05200260 -NCT05194397 -NCT05200273 -NCT05194709 -NCT05200299 -NCT05194735 -NCT05200312 -NCT05194878 -NCT05200325 -NCT05194982 -NCT05200364 -NCT05194995 -NCT05200442 -NCT05195281 -NCT05200481 -NCT05195294 -NCT05200559 -NCT05195385 -NCT05200572 -NCT05195619 -NCT05200650 -NCT05195632 -NCT05200897 -NCT05195710 -NCT05200988 -NCT05195970 -NCT05201001 -NCT05196269 -NCT05201066 -NCT05196360 -NCT05213195 -NCT05201183 -NCT05207475 -NCT05201248 -NCT05207371 -NCT05201326 -NCT05207514 -NCT05201352 -NCT05207670 -NCT05201404 -NCT05207709 -NCT05201430 -NCT05207722 -NCT05201547 -NCT05207735 -NCT05201612 -NCT05207787 -NCT05201781 -NCT05207904 -NCT05201859 -NCT05208047 -NCT05201963 -NCT05208177 -NCT05202236 -NCT05208307 -NCT05202249 -NCT05208606 -NCT05202275 -NCT05208762 -NCT05202314 -NCT05208775 -NCT05202561 -NCT05208853 -NCT05202782 -NCT05208944 -NCT05202860 -NCT05209074 -NCT05202899 -NCT05209152 -NCT05202925 -NCT05209243 -NCT05203029 -NCT05209256 -NCT05203120 -NCT05209295 -NCT05203172 -NCT05209308 -NCT05203276 -NCT05209360 -NCT05203328 -NCT05209529 -NCT05203445 -NCT05209620 -NCT05203497 -NCT05209750 -NCT05203601 -NCT05209880 -NCT05203614 -NCT05210049 -NCT05203627 -NCT05210270 -NCT05203913 -NCT05210374 -NCT05204147 -NCT05210413 -NCT05204160 -NCT05210790 -NCT05204173 -NCT05210907 -NCT05204290 -NCT05210946 -NCT05204524 -NCT05211232 -NCT05204628 -NCT05211323 -NCT05204758 -NCT05211336 -NCT05204862 -NCT05211388 -NCT05204927 -NCT05211427 -NCT05205109 -NCT05211557 -NCT05205161 -NCT05211570 -NCT05205200 -NCT05211778 -NCT05205330 -NCT05211895 -NCT05205408 -NCT05212012 -NCT05205421 -NCT05212025 -NCT05205512 -NCT05212246 -NCT05205850 -NCT05212454 -NCT05205902 -NCT05212584 -NCT05206071 -NCT05212701 -NCT05206331 -NCT05212857 -NCT05206357 -NCT05212896 -NCT05206526 -NCT05212922 -NCT05206656 -NCT05212987 -NCT05206812 -NCT05213078 -NCT05206942 -NCT05255133 -NCT05213221 -NCT05219721 -NCT05213312 -NCT05219695 -NCT05213637 -NCT05219981 -NCT05213741 -NCT05220020 -NCT05213767 -NCT05220033 -NCT05213884 -NCT05220046 -NCT05214183 -NCT05220098 -NCT05214339 -NCT05220124 -NCT05214482 -NCT05220267 -NCT05214820 -NCT05220345 -NCT05214937 -NCT05220501 -NCT05214976 -NCT05220722 -NCT05215015 -NCT05220748 -NCT05215067 -NCT05240937 -NCT05215106 -NCT05240950 -NCT05215340 -NCT05241028 -NCT05215379 -NCT05241093 -NCT05215470 -NCT05241106 -NCT05215496 -NCT05241119 -NCT05215535 -NCT05241132 -NCT05215574 -NCT05252078 -NCT05215665 -NCT05252091 -NCT05215769 -NCT05252364 -NCT05215860 -NCT05252390 -NCT05215925 -NCT05252403 -NCT05215951 -NCT05252416 -NCT05216029 -NCT05252546 -NCT05216120 -NCT05252572 -NCT05216237 -NCT05252585 -NCT05216302 -NCT05252780 -NCT05216380 -NCT05252884 -NCT05216432 -NCT05252975 -NCT05216653 -NCT05252988 -NCT05216835 -NCT05253053 -NCT05216900 -NCT05253066 -NCT05216965 -NCT05253118 -NCT05216978 -NCT05253131 -NCT05217069 -NCT05253144 -NCT05217303 -NCT05253170 -NCT05217446 -NCT05253313 -NCT05217693 -NCT05253495 -NCT05217940 -NCT05253651 -NCT05217966 -NCT05253716 -NCT05218044 -NCT05253807 -NCT05218148 -NCT05253846 -NCT05218408 -NCT05253872 -NCT05218499 -NCT05254171 -NCT05218759 -NCT05254184 -NCT05218811 -NCT05254327 -NCT05218876 -NCT05254665 -NCT05218889 -NCT05254678 -NCT05219318 -NCT05254743 -NCT05219435 -NCT05254795 -NCT05219500 -NCT05254847 -NCT05219513 -NCT05254899 -NCT05219578 -NCT05255003 -NCT05220800 -NCT05226455 -NCT05221320 -NCT05226169 -NCT05221385 -NCT05226468 -NCT05221606 -NCT05226494 -NCT05221645 -NCT05226507 -NCT05221658 -NCT05226598 -NCT05221736 -NCT05226663 -NCT05221775 -NCT05226728 -NCT05221840 -NCT05226871 -NCT05221957 -NCT05227027 -NCT05221970 -NCT05227131 -NCT05222087 -NCT05227144 -NCT05222165 -NCT05227326 -NCT05222204 -NCT05227378 -NCT05222269 -NCT05227482 -NCT05222308 -NCT05227534 -NCT05222438 -NCT05227651 -NCT05222464 -NCT05227664 -NCT05222555 -NCT05227807 -NCT05222620 -NCT05227898 -NCT05222802 -NCT05228015 -NCT05222932 -NCT05228093 -NCT05222971 -NCT05228119 -NCT05222984 -NCT05228249 -NCT05223036 -NCT05228431 -NCT05223088 -NCT05228470 -NCT05223231 -NCT05228496 -NCT05223322 -NCT05228600 -NCT05223413 -NCT05228743 -NCT05223491 -NCT05228951 -NCT05223582 -NCT05229003 -NCT05223595 -NCT05229029 -NCT05223608 -NCT05229081 -NCT05223647 -NCT05229315 -NCT05223673 -NCT05229341 -NCT05223686 -NCT05229497 -NCT05223699 -NCT05229575 -NCT05223803 -NCT05239325 -NCT05223816 -NCT05239533 -NCT05224024 -NCT05239546 -NCT05224141 -NCT05239624 -NCT05224310 -NCT05239650 -NCT05224518 -NCT05239663 -NCT05224869 -NCT05239676 -NCT05224934 -NCT05239689 -NCT05224999 -NCT05239728 -NCT05225038 -NCT05239741 -NCT05225090 -NCT05239910 -NCT05225116 -NCT05240131 -NCT05225363 -NCT05240209 -NCT05225428 -NCT05240235 -NCT05225584 -NCT05240404 -NCT05225844 -NCT05240625 -NCT05225870 -NCT05240690 -NCT05226078 -NCT05240898 -NCT05226117 -NCT05240911 -NCT05229601 -NCT05234606 -NCT05229614 -NCT05234502 -NCT05229679 -NCT05234658 -NCT05229783 -NCT05234684 -NCT05229809 -NCT05234853 -NCT05229874 -NCT05234905 -NCT05229900 -NCT05234996 -NCT05230004 -NCT05235074 -NCT05230251 -NCT05235100 -NCT05230290 -NCT05235165 -NCT05230381 -NCT05235269 -NCT05230563 -NCT05235516 -NCT05230654 -NCT05235542 -NCT05230680 -NCT05235594 -NCT05230758 -NCT05235607 -NCT05230771 -NCT05235737 -NCT05230810 -NCT05235750 -NCT05231044 -NCT05235906 -NCT05231070 -NCT05235932 -NCT05231122 -NCT05235997 -NCT05231278 -NCT05236036 -NCT05231382 -NCT05236049 -NCT05231629 -NCT05236296 -NCT05231733 -NCT05236608 -NCT05231746 -NCT05236621 -NCT05231850 -NCT05236647 -NCT05231915 -NCT05236686 -NCT05231993 -NCT05236699 -NCT05232006 -NCT05236764 -NCT05232084 -NCT05236790 -NCT05232136 -NCT05236894 -NCT05232357 -NCT05236946 -NCT05232409 -NCT05236972 -NCT05232552 -NCT05237258 -NCT05232578 -NCT05237310 -NCT05232851 -NCT05237349 -NCT05232916 -NCT05237453 -NCT05233033 -NCT05237713 -NCT05233059 -NCT05237921 -NCT05233163 -NCT05237947 -NCT05233215 -NCT05238064 -NCT05233293 -NCT05238363 -NCT05233332 -NCT05238376 -NCT05233358 -NCT05238558 -NCT05233397 -NCT05238584 -NCT05233436 -NCT05238688 -NCT05233618 -NCT05238792 -NCT05233683 -NCT05238818 -NCT05233696 -NCT05238831 -NCT05233787 -NCT05238883 -NCT05233800 -NCT05238922 -NCT05233904 -NCT05239000 -NCT05233982 -NCT05239143 -NCT05234112 -NCT05239169 -NCT05234307 -NCT05239182 -NCT05234437 -NCT05251948 -NCT05241210 -NCT05245812 -NCT05241249 -NCT05245786 -NCT05241340 -NCT05245877 -NCT05241392 -NCT05245968 -NCT05241405 -NCT05245994 -NCT05241561 -NCT05246111 -NCT05241574 -NCT05246384 -NCT05241613 -NCT05246462 -NCT05241717 -NCT05246475 -NCT05241834 -NCT05246514 -NCT05241860 -NCT05246670 -NCT05241873 -NCT05246735 -NCT05241899 -NCT05246982 -NCT05241925 -NCT05246995 -NCT05242146 -NCT05247164 -NCT05242562 -NCT05247268 -NCT05242757 -NCT05247346 -NCT05242770 -NCT05247476 -NCT05242783 -NCT05247515 -NCT05242822 -NCT05247619 -NCT05242926 -NCT05247684 -NCT05242965 -NCT05247749 -NCT05243056 -NCT05247905 -NCT05243082 -NCT05247996 -NCT05243212 -NCT05248009 -NCT05243342 -NCT05248022 -NCT05243355 -NCT05248048 -NCT05243524 -NCT05248074 -NCT05243550 -NCT05248256 -NCT05243641 -NCT05248425 -NCT05243693 -NCT05248685 -NCT05243797 -NCT05248789 -NCT05243862 -NCT05249101 -NCT05243888 -NCT05249114 -NCT05244070 -NCT05249127 -NCT05244174 -NCT05249426 -NCT05244213 -NCT05249569 -NCT05244239 -NCT05249712 -NCT05244382 -NCT05249959 -NCT05244434 -NCT05250362 -NCT05244551 -NCT05250518 -NCT05244577 -NCT05250648 -NCT05244642 -NCT05250687 -NCT05244798 -NCT05250791 -NCT05244811 -NCT05250843 -NCT05244915 -NCT05250895 -NCT05244993 -NCT05250973 -NCT05245006 -NCT05251038 -NCT05245058 -NCT05251233 -NCT05245071 -NCT05251389 -NCT05245435 -NCT05251662 -NCT05245474 -NCT05251714 -NCT05245500 -NCT05251766 -NCT05245656 -NCT05251805 -NCT05245682 -NCT05251896 -NCT05245760 -NCT05264896 -NCT05255159 -NCT05260203 -NCT05255302 -NCT05259839 -NCT05255406 -NCT05260385 -NCT05255471 -NCT05260528 -NCT05255484 -NCT05260619 -NCT05255523 -NCT05260671 -NCT05255601 -NCT05260723 -NCT05255653 -NCT05260957 -NCT05255666 -NCT05261269 -NCT05256225 -NCT05261399 -NCT05256238 -NCT05261490 -NCT05256277 -NCT05261750 -NCT05256290 -NCT05262010 -NCT05256381 -NCT05262101 -NCT05256472 -NCT05262166 -NCT05256537 -NCT05262192 -NCT05256576 -NCT05262335 -NCT05256641 -NCT05262400 -NCT05256745 -NCT05262413 -NCT05256888 -NCT05262452 -NCT05256966 -NCT05262465 -NCT05257018 -NCT05262491 -NCT05257083 -NCT05262530 -NCT05257122 -NCT05262556 -NCT05257135 -NCT05262582 -NCT05257382 -NCT05262608 -NCT05257395 -NCT05262621 -NCT05257408 -NCT05262673 -NCT05257512 -NCT05262842 -NCT05257590 -NCT05262855 -NCT05257707 -NCT05263050 -NCT05257785 -NCT05263141 -NCT05257850 -NCT05263180 -NCT05257876 -NCT05263219 -NCT05257967 -NCT05263245 -NCT05257993 -NCT05263271 -NCT05258136 -NCT05263284 -NCT05258266 -NCT05263336 -NCT05258279 -NCT05263453 -NCT05258461 -NCT05263466 -NCT05258526 -NCT05263479 -NCT05258539 -NCT05263492 -NCT05258747 -NCT05263583 -NCT05258799 -NCT05263609 -NCT05259072 -NCT05263648 -NCT05259267 -NCT05263700 -NCT05259319 -NCT05263817 -NCT05259384 -NCT05263869 -NCT05259397 -NCT05263882 -NCT05259410 -NCT05263947 -NCT05259540 -NCT05263960 -NCT05259553 -NCT05263986 -NCT05259657 -NCT05264038 -NCT05259696 -NCT05264532 -NCT05259709 -NCT05264883 -NCT05259813 -NCT05296746 -NCT05264974 -NCT05269550 -NCT05265013 -NCT05269485 -NCT05265052 -NCT05269693 -NCT05265091 -NCT05269914 -NCT05265169 -NCT05269940 -NCT05265208 -NCT05270044 -NCT05265650 -NCT05270057 -NCT05265663 -NCT05270200 -NCT05265715 -NCT05270213 -NCT05265754 -NCT05270395 -NCT05265793 -NCT05270564 -NCT05265819 -NCT05270577 -NCT05265897 -NCT05270642 -NCT05265962 -NCT05270655 -NCT05265975 -NCT05270720 -NCT05265988 -NCT05270824 -NCT05266105 -NCT05270889 -NCT05266157 -NCT05270928 -NCT05266196 -NCT05293041 -NCT05266274 -NCT05293158 -NCT05266313 -NCT05293197 -NCT05266378 -NCT05293496 -NCT05266534 -NCT05293912 -NCT05266612 -NCT05293964 -NCT05266768 -NCT05293990 -NCT05266820 -NCT05294016 -NCT05266846 -NCT05294055 -NCT05266898 -NCT05294120 -NCT05266937 -NCT05294172 -NCT05266950 -NCT05294302 -NCT05267041 -NCT05294367 -NCT05267054 -NCT05294640 -NCT05267106 -NCT05294731 -NCT05267171 -NCT05294900 -NCT05267353 -NCT05294991 -NCT05267392 -NCT05295043 -NCT05267470 -NCT05295212 -NCT05267496 -NCT05295589 -NCT05267587 -NCT05295927 -NCT05267626 -NCT05295992 -NCT05267899 -NCT05296005 -NCT05267912 -NCT05296070 -NCT05268003 -NCT05296096 -NCT05268263 -NCT05296109 -NCT05268315 -NCT05296122 -NCT05268510 -NCT05296278 -NCT05268614 -NCT05296304 -NCT05268666 -NCT05296317 -NCT05268692 -NCT05296369 -NCT05268952 -NCT05296421 -NCT05269160 -NCT05296512 -NCT05269186 -NCT05296525 -NCT05269316 -NCT05296564 -NCT05269342 -NCT05296577 -NCT05269355 -NCT05296603 -NCT05269381 -NCT05296681 -NCT05271110 -NCT05276726 -NCT05271240 -NCT05276609 -NCT05271279 -NCT05276791 -NCT05271292 -NCT05276973 -NCT05271318 -NCT05277051 -NCT05271344 -NCT05277168 -NCT05271604 -NCT05277402 -NCT05271682 -NCT05277454 -NCT05271916 -NCT05277675 -NCT05272293 -NCT05277688 -NCT05272371 -NCT05277701 -NCT05272384 -NCT05277753 -NCT05272462 -NCT05277766 -NCT05272553 -NCT05277844 -NCT05272696 -NCT05277909 -NCT05272709 -NCT05277935 -NCT05272813 -NCT05278039 -NCT05272826 -NCT05278052 -NCT05272865 -NCT05278078 -NCT05272917 -NCT05278208 -NCT05273255 -NCT05278351 -NCT05273307 -NCT05278364 -NCT05273541 -NCT05278546 -NCT05273554 -NCT05278598 -NCT05273593 -NCT05278715 -NCT05273814 -NCT05278728 -NCT05273931 -NCT05278741 -NCT05273944 -NCT05278806 -NCT05274048 -NCT05278832 -NCT05274139 -NCT05278871 -NCT05274191 -NCT05278975 -NCT05274438 -NCT05279027 -NCT05274451 -NCT05279300 -NCT05274763 -NCT05279521 -NCT05274893 -NCT05279677 -NCT05274945 -NCT05279690 -NCT05274997 -NCT05279859 -NCT05275062 -NCT05280067 -NCT05275361 -NCT05290935 -NCT05275374 -NCT05291052 -NCT05275426 -NCT05291156 -NCT05275439 -NCT05291182 -NCT05275478 -NCT05291390 -NCT05275530 -NCT05291403 -NCT05275543 -NCT05291494 -NCT05275569 -NCT05291507 -NCT05275673 -NCT05291780 -NCT05275777 -NCT05291910 -NCT05275868 -NCT05291988 -NCT05275881 -NCT05292027 -NCT05275946 -NCT05292417 -NCT05276167 -NCT05292521 -NCT05276284 -NCT05292664 -NCT05276310 -NCT05292742 -NCT05276492 -NCT05292898 -NCT05276505 -NCT05293028 -NCT05280210 -NCT05286294 -NCT05280275 -NCT05286229 -NCT05280288 -NCT05286320 -NCT05280314 -NCT05286437 -NCT05280444 -NCT05286619 -NCT05280457 -NCT05286684 -NCT05280470 -NCT05286749 -NCT05280483 -NCT05286788 -NCT05280626 -NCT05286801 -NCT05280873 -NCT05286814 -NCT05281003 -NCT05286827 -NCT05281159 -NCT05286840 -NCT05281211 -NCT05286957 -NCT05281237 -NCT05287113 -NCT05281250 -NCT05287165 -NCT05281276 -NCT05287295 -NCT05281354 -NCT05287308 -NCT05281380 -NCT05287386 -NCT05281471 -NCT05287399 -NCT05281731 -NCT05287451 -NCT05281783 -NCT05287568 -NCT05281809 -NCT05287750 -NCT05281926 -NCT05287854 -NCT05282433 -NCT05287945 -NCT05282459 -NCT05287984 -NCT05282719 -NCT05288036 -NCT05282784 -NCT05288062 -NCT05282901 -NCT05288127 -NCT05283044 -NCT05288166 -NCT05283109 -NCT05288205 -NCT05283226 -NCT05288244 -NCT05283330 -NCT05288439 -NCT05283421 -NCT05288595 -NCT05283460 -NCT05288647 -NCT05283564 -NCT05288686 -NCT05283577 -NCT05288777 -NCT05283720 -NCT05289076 -NCT05283837 -NCT05289193 -NCT05284032 -NCT05289258 -NCT05284214 -NCT05289336 -NCT05284539 -NCT05289492 -NCT05284552 -NCT05289648 -NCT05284643 -NCT05289687 -NCT05284825 -NCT05289726 -NCT05284864 -NCT05289830 -NCT05284942 -NCT05289856 -NCT05284968 -NCT05289908 -NCT05284994 -NCT05290090 -NCT05285319 -NCT05290116 -NCT05285332 -NCT05290155 -NCT05285358 -NCT05290194 -NCT05285813 -NCT05290220 -NCT05286034 -NCT05290337 -NCT05286060 -NCT05290480 -NCT05286086 -NCT05290597 -NCT05286164 -NCT05306132 -NCT05296772 -NCT05301842 -NCT05296798 -NCT05301764 -NCT05296811 -NCT05301881 -NCT05296941 -NCT05301998 -NCT05297123 -NCT05302011 -NCT05297162 -NCT05302037 -NCT05297552 -NCT05302284 -NCT05297565 -NCT05302336 -NCT05297617 -NCT05302375 -NCT05297643 -NCT05302466 -NCT05297734 -NCT05302557 -NCT05297773 -NCT05302570 -NCT05297864 -NCT05302583 -NCT05297890 -NCT05302648 -NCT05297903 -NCT05302817 -NCT05298020 -NCT05302843 -NCT05298176 -NCT05302921 -NCT05298293 -NCT05303038 -NCT05298423 -NCT05303090 -NCT05298592 -NCT05303129 -NCT05298605 -NCT05303298 -NCT05298683 -NCT05303467 -NCT05298696 -NCT05303480 -NCT05298722 -NCT05303493 -NCT05298930 -NCT05303519 -NCT05298969 -NCT05303532 -NCT05298995 -NCT05303675 -NCT05299021 -NCT05303714 -NCT05299047 -NCT05303727 -NCT05299125 -NCT05303792 -NCT05299164 -NCT05303818 -NCT05299203 -NCT05304169 -NCT05299385 -NCT05304208 -NCT05299411 -NCT05304234 -NCT05299424 -NCT05304377 -NCT05299437 -NCT05304390 -NCT05299476 -NCT05304468 -NCT05299580 -NCT05304481 -NCT05299606 -NCT05304546 -NCT05299671 -NCT05304585 -NCT05299840 -NCT05304663 -NCT05300048 -NCT05304754 -NCT05300269 -NCT05304793 -NCT05300282 -NCT05304936 -NCT05300438 -NCT05304962 -NCT05300464 -NCT05305131 -NCT05300945 -NCT05305365 -NCT05300958 -NCT05305378 -NCT05301010 -NCT05305820 -NCT05301101 -NCT05305859 -NCT05301114 -NCT05305885 -NCT05301283 -NCT05305924 -NCT05301296 -NCT05305937 -NCT05301530 -NCT05306028 -NCT05301556 -NCT05306041 -NCT05301595 -NCT05317403 -NCT05306301 -NCT05312801 -NCT05306340 -NCT05312710 -NCT05306444 -NCT05312840 -NCT05306509 -NCT05313009 -NCT05306652 -NCT05313074 -NCT05306808 -NCT05313191 -NCT05306847 -NCT05313243 -NCT05306912 -NCT05313282 -NCT05307198 -NCT05313724 -NCT05307289 -NCT05313737 -NCT05307367 -NCT05313815 -NCT05307705 -NCT05313906 -NCT05307835 -NCT05313958 -NCT05307874 -NCT05314023 -NCT05307939 -NCT05314101 -NCT05308225 -NCT05314114 -NCT05308407 -NCT05314179 -NCT05308446 -NCT05314400 -NCT05308654 -NCT05314803 -NCT05308732 -NCT05314907 -NCT05308771 -NCT05314946 -NCT05308875 -NCT05314998 -NCT05308901 -NCT05315011 -NCT05309187 -NCT05315128 -NCT05309213 -NCT05315154 -NCT05309265 -NCT05315167 -NCT05309421 -NCT05315180 -NCT05309512 -NCT05315258 -NCT05309629 -NCT05315570 -NCT05309655 -NCT05315687 -NCT05309668 -NCT05315700 -NCT05310331 -NCT05315713 -NCT05310344 -NCT05315830 -NCT05310383 -NCT05315908 -NCT05310448 -NCT05315999 -NCT05310565 -NCT05316103 -NCT05310591 -NCT05316116 -NCT05310643 -NCT05316129 -NCT05311176 -NCT05316155 -NCT05311189 -NCT05316181 -NCT05311319 -NCT05316246 -NCT05311397 -NCT05316324 -NCT05311527 -NCT05316376 -NCT05311566 -NCT05316467 -NCT05311579 -NCT05316480 -NCT05311618 -NCT05316688 -NCT05311709 -NCT05316701 -NCT05311774 -NCT05316818 -NCT05311943 -NCT05316831 -NCT05312216 -NCT05316935 -NCT05312255 -NCT05317000 -NCT05312372 -NCT05317026 -NCT05312398 -NCT05317078 -NCT05312411 -NCT05317325 -NCT05312476 -NCT05317351 -NCT05312671 -NCT05327621 -NCT05317416 -NCT05322408 -NCT05317819 -NCT05322356 -NCT05317858 -NCT05322460 -NCT05317936 -NCT05322499 -NCT05318027 -NCT05322512 -NCT05318131 -NCT05322577 -NCT05318274 -NCT05322590 -NCT05318339 -NCT05322720 -NCT05318404 -NCT05322733 -NCT05318443 -NCT05322850 -NCT05318469 -NCT05323045 -NCT05318495 -NCT05323201 -NCT05318573 -NCT05323253 -NCT05318612 -NCT05323409 -NCT05318625 -NCT05323656 -NCT05318794 -NCT05323734 -NCT05318807 -NCT05323890 -NCT05318833 -NCT05323929 -NCT05318963 -NCT05323955 -NCT05319015 -NCT05324020 -NCT05319028 -NCT05324098 -NCT05319145 -NCT05324202 -NCT05319249 -NCT05324332 -NCT05319314 -NCT05324501 -NCT05319431 -NCT05325151 -NCT05319457 -NCT05325164 -NCT05319574 -NCT05325216 -NCT05319587 -NCT05325229 -NCT05319639 -NCT05325281 -NCT05319730 -NCT05325528 -NCT05319873 -NCT05325632 -NCT05320029 -NCT05325801 -NCT05320081 -NCT05325866 -NCT05320380 -NCT05326035 -NCT05320406 -NCT05326165 -NCT05320458 -NCT05326243 -NCT05320497 -NCT05326282 -NCT05320588 -NCT05326360 -NCT05320640 -NCT05326425 -NCT05320692 -NCT05326464 -NCT05320757 -NCT05326516 -NCT05320809 -NCT05326984 -NCT05320874 -NCT05327010 -NCT05321134 -NCT05327023 -NCT05321147 -NCT05327153 -NCT05321316 -NCT05327231 -NCT05321329 -NCT05327270 -NCT05321615 -NCT05327309 -NCT05321784 -NCT05327452 -NCT05321823 -NCT05327465 -NCT05321862 -NCT05327517 -NCT05321940 -NCT05327530 -NCT05321992 -NCT05327543 -NCT05322135 -NCT05327582 -NCT05322187 -NCT05327608 -NCT05322330 -NCT05339581 -NCT05327647 -NCT05333809 -NCT05327686 -NCT05333705 -NCT05327725 -NCT05333874 -NCT05327738 -NCT05334238 -NCT05327751 -NCT05334277 -NCT05327894 -NCT05334329 -NCT05327946 -NCT05334641 -NCT05328102 -NCT05334693 -NCT05328167 -NCT05334732 -NCT05328258 -NCT05334810 -NCT05328336 -NCT05334823 -NCT05328388 -NCT05335018 -NCT05328440 -NCT05335226 -NCT05328505 -NCT05335369 -NCT05328739 -NCT05335460 -NCT05328908 -NCT05335473 -NCT05328973 -NCT05335668 -NCT05329025 -NCT05335928 -NCT05329103 -NCT05335941 -NCT05329298 -NCT05335967 -NCT05329402 -NCT05335993 -NCT05329532 -NCT05336266 -NCT05329545 -NCT05336279 -NCT05329623 -NCT05336318 -NCT05329688 -NCT05336383 -NCT05329792 -NCT05336409 -NCT05329974 -NCT05336643 -NCT05330364 -NCT05336721 -NCT05330377 -NCT05336786 -NCT05330429 -NCT05336812 -NCT05331105 -NCT05336916 -NCT05331131 -NCT05337137 -NCT05331326 -NCT05337280 -NCT05331391 -NCT05337657 -NCT05331521 -NCT05337735 -NCT05331625 -NCT05338047 -NCT05331638 -NCT05338125 -NCT05331807 -NCT05338281 -NCT05331911 -NCT05338307 -NCT05332002 -NCT05338346 -NCT05332171 -NCT05338541 -NCT05332340 -NCT05338580 -NCT05332483 -NCT05338619 -NCT05332561 -NCT05338658 -NCT05332574 -NCT05338723 -NCT05333016 -NCT05338775 -NCT05333250 -NCT05338905 -NCT05333276 -NCT05338931 -NCT05333302 -NCT05338957 -NCT05333328 -NCT05338970 -NCT05333367 -NCT05339022 -NCT05333432 -NCT05339113 -NCT05333458 -NCT05339204 -NCT05333523 -NCT05339230 -NCT05333588 -NCT05339321 -NCT05333601 -NCT05350943 -NCT05339685 -NCT05346198 -NCT05339763 -NCT05346146 -NCT05340231 -NCT05346224 -NCT05340270 -NCT05346276 -NCT05340309 -NCT05346328 -NCT05340322 -NCT05346367 -NCT05340374 -NCT05346380 -NCT05340413 -NCT05346484 -NCT05340491 -NCT05346510 -NCT05340569 -NCT05346536 -NCT05340621 -NCT05346692 -NCT05340673 -NCT05346757 -NCT05340829 -NCT05346796 -NCT05340881 -NCT05346809 -NCT05340985 -NCT05346848 -NCT05341141 -NCT05346861 -NCT05341193 -NCT05346874 -NCT05341206 -NCT05346952 -NCT05341349 -NCT05347134 -NCT05341492 -NCT05347212 -NCT05341557 -NCT05347485 -NCT05341570 -NCT05347628 -NCT05341583 -NCT05347641 -NCT05341622 -NCT05347745 -NCT05341739 -NCT05347797 -NCT05341947 -NCT05347979 -NCT05342194 -NCT05348161 -NCT05342389 -NCT05348174 -NCT05342506 -NCT05348187 -NCT05342571 -NCT05348213 -NCT05342584 -NCT05348356 -NCT05342636 -NCT05348486 -NCT05342675 -NCT05348577 -NCT05342792 -NCT05348668 -NCT05342805 -NCT05348811 -NCT05342883 -NCT05348876 -NCT05343013 -NCT05348889 -NCT05343260 -NCT05349227 -NCT05343325 -NCT05349266 -NCT05343377 -NCT05349331 -NCT05343689 -NCT05349409 -NCT05344339 -NCT05349487 -NCT05344625 -NCT05349643 -NCT05344729 -NCT05349890 -NCT05344742 -NCT05350059 -NCT05344820 -NCT05350137 -NCT05344833 -NCT05350163 -NCT05344924 -NCT05350475 -NCT05345002 -NCT05350501 -NCT05345158 -NCT05350527 -NCT05345444 -NCT05350631 -NCT05345587 -NCT05350722 -NCT05345613 -NCT05350826 -NCT05345860 -NCT05350891 -NCT05345938 -NCT05350917 -NCT05346107 -NCT05361057 -NCT05350956 -NCT05356897 -NCT05351021 -NCT05356741 -NCT05351268 -NCT05357027 -NCT05351294 -NCT05357196 -NCT05351320 -NCT05357417 -NCT05351346 -NCT05357508 -NCT05351424 -NCT05357573 -NCT05351502 -NCT05357651 -NCT05351593 -NCT05357794 -NCT05351762 -NCT05357820 -NCT05351788 -NCT05357846 -NCT05351931 -NCT05357898 -NCT05351983 -NCT05357911 -NCT05352178 -NCT05358158 -NCT05352321 -NCT05358249 -NCT05352542 -NCT05358340 -NCT05352646 -NCT05358379 -NCT05352672 -NCT05358548 -NCT05352685 -NCT05358639 -NCT05352750 -NCT05358691 -NCT05352802 -NCT05358704 -NCT05352828 -NCT05358808 -NCT05353257 -NCT05358938 -NCT05353361 -NCT05358951 -NCT05353374 -NCT05359016 -NCT05353387 -NCT05359042 -NCT05353439 -NCT05359211 -NCT05353530 -NCT05359354 -NCT05353582 -NCT05359393 -NCT05353894 -NCT05359406 -NCT05354076 -NCT05359419 -NCT05354102 -NCT05359445 -NCT05354323 -NCT05359497 -NCT05354362 -NCT05359692 -NCT05354557 -NCT05359783 -NCT05354570 -NCT05359861 -NCT05354596 -NCT05359874 -NCT05354700 -NCT05359913 -NCT05354765 -NCT05359939 -NCT05354817 -NCT05359952 -NCT05354843 -NCT05360160 -NCT05354856 -NCT05360238 -NCT05354882 -NCT05360264 -NCT05355051 -NCT05360277 -NCT05355155 -NCT05360290 -NCT05355298 -NCT05360368 -NCT05355363 -NCT05360381 -NCT05355558 -NCT05360407 -NCT05355701 -NCT05360420 -NCT05355727 -NCT05360498 -NCT05355753 -NCT05360680 -NCT05355987 -NCT05360732 -NCT05356117 -NCT05360745 -NCT05356156 -NCT05360979 -NCT05356169 -NCT05361018 -NCT05356520 -NCT05371301 -NCT05361083 -NCT05365243 -NCT05361161 -NCT05365230 -NCT05361174 -NCT05365256 -NCT05361356 -NCT05365581 -NCT05361395 -NCT05365659 -NCT05361538 -NCT05365893 -NCT05361564 -NCT05365997 -NCT05361668 -NCT05366062 -NCT05361720 -NCT05366166 -NCT05361798 -NCT05366179 -NCT05361811 -NCT05366218 -NCT05361902 -NCT05366413 -NCT05361915 -NCT05366478 -NCT05361954 -NCT05366699 -NCT05362032 -NCT05366816 -NCT05362318 -NCT05366829 -NCT05362331 -NCT05366842 -NCT05362409 -NCT05367076 -NCT05362539 -NCT05367180 -NCT05362617 -NCT05367206 -NCT05362669 -NCT05367232 -NCT05362708 -NCT05367401 -NCT05362760 -NCT05367440 -NCT05362773 -NCT05367635 -NCT05362942 -NCT05367687 -NCT05362955 -NCT05367778 -NCT05363007 -NCT05367830 -NCT05363111 -NCT05367856 -NCT05363267 -NCT05368116 -NCT05363280 -NCT05368207 -NCT05363605 -NCT05368428 -NCT05363631 -NCT05368506 -NCT05363644 -NCT05368805 -NCT05363709 -NCT05369000 -NCT05363722 -NCT05369117 -NCT05363800 -NCT05369221 -NCT05363826 -NCT05369234 -NCT05364008 -NCT05369286 -NCT05364073 -NCT05369312 -NCT05364177 -NCT05369429 -NCT05364229 -NCT05369650 -NCT05364255 -NCT05370001 -NCT05364372 -NCT05370079 -NCT05364411 -NCT05370144 -NCT05364424 -NCT05370430 -NCT05364450 -NCT05370469 -NCT05364489 -NCT05370547 -NCT05364645 -NCT05370755 -NCT05364762 -NCT05370807 -NCT05364879 -NCT05371054 -NCT05364918 -NCT05371093 -NCT05365035 -NCT05371132 -NCT05365100 -NCT05371158 -NCT05365178 -NCT05371197 -NCT05365191 -NCT05371223 -NCT05365204 -NCT05381909 -NCT05371847 -NCT05377008 -NCT05371860 -NCT05376878 -NCT05371899 -NCT05377034 -NCT05372016 -NCT05377047 -NCT05372120 -NCT05377528 -NCT05372198 -NCT05377632 -NCT05372354 -NCT05377658 -NCT05372367 -NCT05377736 -NCT05372484 -NCT05377749 -NCT05372536 -NCT05377827 -NCT05372614 -NCT05377905 -NCT05372640 -NCT05377996 -NCT05372692 -NCT05378087 -NCT05373069 -NCT05378152 -NCT05373147 -NCT05378178 -NCT05373251 -NCT05378204 -NCT05373316 -NCT05378256 -NCT05373381 -NCT05378334 -NCT05373628 -NCT05378425 -NCT05373823 -NCT05378464 -NCT05373901 -NCT05378542 -NCT05374122 -NCT05378633 -NCT05374161 -NCT05378737 -NCT05374226 -NCT05378763 -NCT05374252 -NCT05378854 -NCT05374304 -NCT05378867 -NCT05374512 -NCT05378919 -NCT05374538 -NCT05378971 -NCT05374603 -NCT05379153 -NCT05374876 -NCT05379166 -NCT05374915 -NCT05379205 -NCT05375084 -NCT05379569 -NCT05375162 -NCT05379595 -NCT05375253 -NCT05379647 -NCT05375370 -NCT05379790 -NCT05375461 -NCT05379803 -NCT05375526 -NCT05379946 -NCT05375539 -NCT05379972 -NCT05375604 -NCT05379985 -NCT05375643 -NCT05380024 -NCT05375708 -NCT05380271 -NCT05375734 -NCT05380349 -NCT05375825 -NCT05380414 -NCT05375903 -NCT05380635 -NCT05375994 -NCT05380713 -NCT05376111 -NCT05380882 -NCT05376202 -NCT05380986 -NCT05376293 -NCT05381038 -NCT05376345 -NCT05381077 -NCT05376423 -NCT05381103 -NCT05376553 -NCT05381181 -NCT05376631 -NCT05381506 -NCT05376644 -NCT05381597 -NCT05376709 -NCT05381636 -NCT05376800 -NCT05381662 -NCT05376852 -NCT05391867 -NCT05381935 -NCT05387226 -NCT05382286 -NCT05387109 -NCT05382299 -NCT05387265 -NCT05382325 -NCT05387603 -NCT05382338 -NCT05387616 -NCT05382364 -NCT05387681 -NCT05382377 -NCT05387863 -NCT05382390 -NCT05387876 -NCT05382442 -NCT05387915 -NCT05382559 -NCT05387928 -NCT05382728 -NCT05388006 -NCT05382741 -NCT05388058 -NCT05382936 -NCT05388123 -NCT05383079 -NCT05388136 -NCT05383092 -NCT05388149 -NCT05383170 -NCT05388162 -NCT05383196 -NCT05388214 -NCT05383352 -NCT05388279 -NCT05383482 -NCT05388305 -NCT05383703 -NCT05388435 -NCT05383716 -NCT05388487 -NCT05383872 -NCT05388500 -NCT05383898 -NCT05388669 -NCT05384015 -NCT05388695 -NCT05384119 -NCT05388734 -NCT05384366 -NCT05388773 -NCT05384444 -NCT05388838 -NCT05384496 -NCT05388851 -NCT05384535 -NCT05388877 -NCT05384587 -NCT05389085 -NCT05384626 -NCT05389202 -NCT05384691 -NCT05389293 -NCT05384769 -NCT05389306 -NCT05384821 -NCT05389332 -NCT05384873 -NCT05389423 -NCT05385068 -NCT05389462 -NCT05385081 -NCT05389527 -NCT05385146 -NCT05390021 -NCT05385185 -NCT05390398 -NCT05385250 -NCT05390476 -NCT05385263 -NCT05390528 -NCT05385406 -NCT05390645 -NCT05385549 -NCT05390710 -NCT05385692 -NCT05390723 -NCT05385705 -NCT05390749 -NCT05385900 -NCT05390814 -NCT05385926 -NCT05390944 -NCT05385965 -NCT05391022 -NCT05386056 -NCT05391048 -NCT05386108 -NCT05391126 -NCT05386355 -NCT05391243 -NCT05386524 -NCT05391321 -NCT05386550 -NCT05391477 -NCT05386576 -NCT05391490 -NCT05386628 -NCT05391750 -NCT05386719 -NCT05403333 -NCT05392205 -NCT05396885 -NCT05392608 -NCT05396872 -NCT05392634 -NCT05396937 -NCT05392647 -NCT05396950 -NCT05392686 -NCT05397093 -NCT05392699 -NCT05397171 -NCT05392946 -NCT05397262 -NCT05393063 -NCT05397457 -NCT05393258 -NCT05397496 -NCT05393297 -NCT05397522 -NCT05393427 -NCT05397769 -NCT05393440 -NCT05397860 -NCT05393466 -NCT05397873 -NCT05393492 -NCT05398094 -NCT05393635 -NCT05398224 -NCT05393713 -NCT05398302 -NCT05393791 -NCT05398380 -NCT05393804 -NCT05398484 -NCT05393869 -NCT05398497 -NCT05393947 -NCT05398614 -NCT05393986 -NCT05398861 -NCT05393999 -NCT05399394 -NCT05394103 -NCT05399524 -NCT05394168 -NCT05399654 -NCT05394233 -NCT05399953 -NCT05394246 -NCT05400070 -NCT05394259 -NCT05400109 -NCT05394285 -NCT05400122 -NCT05394337 -NCT05400226 -NCT05394350 -NCT05400265 -NCT05394415 -NCT05400408 -NCT05394558 -NCT05400577 -NCT05394675 -NCT05400603 -NCT05394714 -NCT05400876 -NCT05394740 -NCT05400902 -NCT05394818 -NCT05400915 -NCT05394831 -NCT05400941 -NCT05395052 -NCT05400993 -NCT05395260 -NCT05401045 -NCT05395533 -NCT05401097 -NCT05395741 -NCT05401110 -NCT05395780 -NCT05401162 -NCT05395871 -NCT05401175 -NCT05395910 -NCT05401279 -NCT05395936 -NCT05401370 -NCT05395962 -NCT05401643 -NCT05396118 -NCT05401786 -NCT05396222 -NCT05401942 -NCT05396300 -NCT05402046 -NCT05396326 -NCT05402124 -NCT05396339 -NCT05402592 -NCT05396391 -NCT05402722 -NCT05396807 -NCT05402930 -NCT05396833 -NCT05403190 -NCT05396846 -NCT05403242 -NCT05396859 -NCT05412758 -NCT05403385 -NCT05408195 -NCT05403450 -NCT05408169 -NCT05403554 -NCT05408221 -NCT05403580 -NCT05408260 -NCT05403671 -NCT05408507 -NCT05403723 -NCT05408676 -NCT05403736 -NCT05408845 -NCT05403801 -NCT05408871 -NCT05404022 -NCT05409066 -NCT05404048 -NCT05409248 -NCT05404139 -NCT05409352 -NCT05404230 -NCT05409417 -NCT05404282 -NCT05409638 -NCT05404308 -NCT05409664 -NCT05404516 -NCT05409872 -NCT05404685 -NCT05410002 -NCT05404906 -NCT05410041 -NCT05404945 -NCT05410197 -NCT05405166 -NCT05410301 -NCT05405179 -NCT05410418 -NCT05405192 -NCT05410444 -NCT05405309 -NCT05410509 -NCT05405387 -NCT05410535 -NCT05405413 -NCT05410574 -NCT05405439 -NCT05410717 -NCT05405530 -NCT05410743 -NCT05405595 -NCT05410821 -NCT05405621 -NCT05410847 -NCT05406063 -NCT05411081 -NCT05406206 -NCT05411094 -NCT05406401 -NCT05411107 -NCT05406466 -NCT05411133 -NCT05406531 -NCT05411224 -NCT05406635 -NCT05411237 -NCT05406674 -NCT05411380 -NCT05406687 -NCT05411432 -NCT05406700 -NCT05411497 -NCT05406713 -NCT05411666 -NCT05406765 -NCT05411679 -NCT05406817 -NCT05411705 -NCT05406856 -NCT05411718 -NCT05406999 -NCT05411757 -NCT05407038 -NCT05411783 -NCT05407155 -NCT05411848 -NCT05407168 -NCT05412082 -NCT05407311 -NCT05412225 -NCT05407441 -NCT05412290 -NCT05407519 -NCT05412329 -NCT05407584 -NCT05412420 -NCT05407649 -NCT05412446 -NCT05407675 -NCT05412576 -NCT05407714 -NCT05412589 -NCT05407844 -NCT05412628 -NCT05407909 -NCT05412680 -NCT05407987 -NCT05412706 -NCT05408026 -NCT05567185 -NCT05412875 -NCT05418309 -NCT05412953 -NCT05418088 -NCT05413018 -NCT05418387 -NCT05413304 -NCT05418543 -NCT05413356 -NCT05418842 -NCT05413421 -NCT05418972 -NCT05413473 -NCT05419076 -NCT05413798 -NCT05419089 -NCT05413811 -NCT05419362 -NCT05413850 -NCT05419375 -NCT05413915 -NCT05419388 -NCT05414032 -NCT05419479 -NCT05414045 -NCT05419518 -NCT05414136 -NCT05419817 -NCT05414188 -NCT05420064 -NCT05414357 -NCT05420220 -NCT05414396 -NCT05420259 -NCT05414448 -NCT05420324 -NCT05414461 -NCT05420454 -NCT05414500 -NCT05420467 -NCT05414630 -NCT05420480 -NCT05414812 -NCT05420493 -NCT05414929 -NCT05420519 -NCT05415007 -NCT05420545 -NCT05415072 -NCT05420584 -NCT05415098 -NCT05420597 -NCT05415215 -NCT05420636 -NCT05415475 -NCT05420727 -NCT05415527 -NCT05420779 -NCT05415696 -NCT05420870 -NCT05415709 -NCT05420948 -NCT05415800 -NCT05421312 -NCT05415917 -NCT05421650 -NCT05415943 -NCT05421663 -NCT05416073 -NCT05421702 -NCT05416164 -NCT05421884 -NCT05416359 -NCT05421897 -NCT05416424 -NCT05421988 -NCT05416554 -NCT05422027 -NCT05416567 -NCT05422183 -NCT05416749 -NCT05422521 -NCT05416775 -NCT05422690 -NCT05417139 -NCT05422781 -NCT05417165 -NCT05422794 -NCT05417230 -NCT05566054 -NCT05417308 -NCT05566093 -NCT05417321 -NCT05566223 -NCT05417386 -NCT05566405 -NCT05417438 -NCT05566457 -NCT05417451 -NCT05566574 -NCT05417516 -NCT05566743 -NCT05417529 -NCT05566795 -NCT05417581 -NCT05566834 -NCT05417750 -NCT05566899 -NCT05417789 -NCT05566951 -NCT05417932 -NCT05567055 -NCT05422911 -NCT05563207 -NCT05423197 -NCT05563220 -NCT05423210 -NCT05563272 -NCT05423262 -NCT05563467 -NCT05423704 -NCT05563480 -NCT05423730 -NCT05563545 -NCT05423886 -NCT05563558 -NCT05423964 -NCT05563766 -NCT05423977 -NCT05563844 -NCT05424016 -NCT05563870 -NCT05424055 -NCT05563922 -NCT05424068 -NCT05564052 -NCT05424159 -NCT05564234 -NCT05424328 -NCT05564286 -NCT05424380 -NCT05564338 -NCT05424432 -NCT05564377 -NCT05424666 -NCT05564390 -NCT05424692 -NCT05564403 -NCT05424783 -NCT05564416 -NCT05424822 -NCT05564468 -NCT05424835 -NCT05564624 -NCT05425004 -NCT05564650 -NCT05425043 -NCT05564806 -NCT05425472 -NCT05564858 -NCT05425550 -NCT05564897 -NCT05425576 -NCT05564949 -NCT05425602 -NCT05565040 -NCT05425654 -NCT05565105 -NCT05425862 -NCT05565118 -NCT05425940 -NCT05565378 -NCT05426005 -NCT05565417 -NCT05426148 -NCT05565521 -NCT05426213 -NCT05565534 -NCT05426317 -NCT05565638 -NCT05426486 -NCT05565794 -NCT05426642 -NCT05565807 -NCT05426798 -NCT05558722 -NCT05558904 -NCT05558917 -NCT05558956 -NCT05558982 -NCT05559008 -NCT05559164 -NCT05559177 -NCT05559450 -NCT05559541 -NCT05559645 -NCT05559775 -NCT05559879 -NCT05560035 -NCT05560308 -NCT05560334 -NCT05560360 -NCT05560399 -NCT05560412 -NCT05560659 -NCT05560685 -NCT05560776 -NCT05561023 -NCT05561036 -NCT05561374 -NCT05561387 -NCT05561413 -NCT05561491 -NCT05561595 -NCT05561634 -NCT05561699 -NCT05561751 -NCT05561894 -NCT05562024 -NCT05562193 -NCT05562297 -NCT05562375 -NCT05562440 -NCT05562518 -NCT05562570 -NCT05562778 -NCT05562791 -NCT05562830 -NCT05566041 -NCT05426811 -NCT05557578 -NCT05426824 -NCT05557591 -NCT05427058 -NCT05557604 -NCT05427071 -NCT05557708 -NCT05427214 -NCT05557838 -NCT05427240 -NCT05557851 -NCT05427344 -NCT05557877 -NCT05427383 -NCT05557903 -NCT05427396 -NCT05558007 -NCT05427461 -NCT05558124 -NCT05427487 -NCT05558241 -NCT05427669 -NCT05558280 -NCT05427812 -NCT05558319 -NCT05427825 -NCT05558384 -NCT05427864 -NCT05558397 -NCT05428007 -NCT05558644 -NCT05428098 -NCT05438329 -NCT05438342 -NCT05438368 -NCT05438394 -NCT05438420 -NCT05438459 -NCT05438563 -NCT05438667 -NCT05438706 -NCT05438771 -NCT05438784 -NCT05438797 -NCT05438810 -NCT05438927 -NCT05438940 -NCT05439005 -NCT05439278 -NCT05439499 -NCT05439993 -NCT05440006 -NCT05440045 -NCT05440149 -NCT05440227 -NCT05440240 -NCT05440552 -NCT05440565 -NCT05440708 -NCT05440760 -NCT05440786 -NCT05440864 -NCT05440916 -NCT05440942 -NCT05441046 -NCT05441163 -NCT05441254 -NCT05441384 -NCT05441475 -NCT05441501 -NCT05441514 -NCT05441722 -NCT05441761 -NCT05441943 -NCT05441956 -NCT05442060 -NCT05442151 -NCT05442216 -NCT05442333 -NCT05442515 -NCT05442554 -NCT05442580 -NCT05442749 -NCT05442866 -NCT05442957 -NCT05442996 -NCT05443087 -NCT05443126 -NCT05443165 -NCT05443425 -NCT05443646 -NCT05443737 -NCT05443854 -NCT05443971 -NCT05444088 -NCT05555212 -NCT05555251 -NCT05555316 -NCT05555329 -NCT05555342 -NCT05555550 -NCT05555706 -NCT05555732 -NCT05555862 -NCT05555888 -NCT05555901 -NCT05556200 -NCT05556239 -NCT05556473 -NCT05556525 -NCT05556616 -NCT05556720 -NCT05556772 -NCT05556798 -NCT05557045 -NCT05557110 -NCT05557240 -NCT05557292 -NCT05557552 -NCT05557565 -NCT05558696 -NCT05428111 -NCT05432375 -NCT05428176 -NCT05432297 -NCT05428358 -NCT05432401 -NCT05428553 -NCT05432414 -NCT05428670 -NCT05432492 -NCT05428709 -NCT05432518 -NCT05428735 -NCT05432635 -NCT05428852 -NCT05432687 -NCT05428969 -NCT05432791 -NCT05429008 -NCT05432804 -NCT05429099 -NCT05432934 -NCT05429203 -NCT05432947 -NCT05429216 -NCT05433116 -NCT05429268 -NCT05433142 -NCT05429294 -NCT05433155 -NCT05429320 -NCT05433402 -NCT05429398 -NCT05433467 -NCT05429463 -NCT05433480 -NCT05429502 -NCT05433532 -NCT05429515 -NCT05433597 -NCT05429632 -NCT05433636 -NCT05429684 -NCT05433701 -NCT05429697 -NCT05433805 -NCT05429762 -NCT05433974 -NCT05429814 -NCT05434208 -NCT05429866 -NCT05434234 -NCT05429905 -NCT05434299 -NCT05429970 -NCT05434312 -NCT05430009 -NCT05434598 -NCT05430035 -NCT05434689 -NCT05430347 -NCT05434871 -NCT05430360 -NCT05435014 -NCT05430373 -NCT05435053 -NCT05430386 -NCT05435248 -NCT05430399 -NCT05435274 -NCT05430555 -NCT05435313 -NCT05430698 -NCT05435339 -NCT05430737 -NCT05435846 -NCT05430802 -NCT05435859 -NCT05430841 -NCT05435885 -NCT05430906 -NCT05436093 -NCT05430945 -NCT05436223 -NCT05431179 -NCT05436327 -NCT05431244 -NCT05436808 -NCT05431257 -NCT05436990 -NCT05431270 -NCT05437315 -NCT05431504 -NCT05437341 -NCT05431569 -NCT05437380 -NCT05431582 -NCT05437692 -NCT05431608 -NCT05437718 -NCT05431738 -NCT05438043 -NCT05431764 -NCT05438108 -NCT05431907 -NCT05438147 -NCT05432193 -NCT05438212 -NCT05432219 -NCT05438290 -NCT05432232 -NCT05555199 -NCT05444101 -NCT05554211 -NCT05444231 -NCT05554276 -NCT05444270 -NCT05554302 -NCT05444322 -NCT05554328 -NCT05444348 -NCT05554341 -NCT05444374 -NCT05554354 -NCT05444478 -NCT05554367 -NCT05444530 -NCT05554380 -NCT05444634 -NCT05554393 -NCT05444673 -NCT05554406 -NCT05444686 -NCT05554419 -NCT05444712 -NCT05554575 -NCT05444725 -NCT05554666 -NCT05444998 -NCT05554744 -NCT05445011 -NCT05554900 -NCT05445050 -NCT05554939 -NCT05445154 -NCT05555017 -NCT05445271 -NCT05546021 -NCT05546255 -NCT05546268 -NCT05546372 -NCT05546411 -NCT05546476 -NCT05546580 -NCT05546619 -NCT05546723 -NCT05546736 -NCT05546827 -NCT05546853 -NCT05546866 -NCT05546879 -NCT05546892 -NCT05547061 -NCT05547282 -NCT05547321 -NCT05547386 -NCT05547516 -NCT05547529 -NCT05547594 -NCT05547828 -NCT05547906 -NCT05547919 -NCT05547932 -NCT05548088 -NCT05548127 -NCT05548296 -NCT05548348 -NCT05548504 -NCT05548634 -NCT05548686 -NCT05549024 -NCT05549037 -NCT05549167 -NCT05549284 -NCT05549297 -NCT05549414 -NCT05549466 -NCT05549479 -NCT05549505 -NCT05549557 -NCT05549661 -NCT05549687 -NCT05549778 -NCT05549804 -NCT05549921 -NCT05549960 -NCT05549973 -NCT05550025 -NCT05550415 -NCT05550558 -NCT05550831 -NCT05550948 -NCT05551117 -NCT05551208 -NCT05551247 -NCT05551286 -NCT05551299 -NCT05551507 -NCT05551767 -NCT05551832 -NCT05551936 -NCT05552001 -NCT05552066 -NCT05552222 -NCT05552651 -NCT05552664 -NCT05552729 -NCT05552781 -NCT05552807 -NCT05552846 -NCT05552937 -NCT05552976 -NCT05553041 -NCT05553327 -NCT05553522 -NCT05553639 -NCT05553782 -NCT05553795 -NCT05553808 -NCT05553834 -NCT05553899 -NCT05554003 -NCT05554159 -NCT05445310 -NCT05450562 -NCT05445401 -NCT05450484 -NCT05445609 -NCT05450692 -NCT05445648 -NCT05450744 -NCT05445765 -NCT05450835 -NCT05445778 -NCT05450965 -NCT05445791 -NCT05451004 -NCT05445843 -NCT05451043 -NCT05445882 -NCT05451056 -NCT05445908 -NCT05451160 -NCT05445973 -NCT05451173 -NCT05446129 -NCT05451290 -NCT05446298 -NCT05451407 -NCT05446324 -NCT05451576 -NCT05446441 -NCT05451602 -NCT05446467 -NCT05451680 -NCT05446558 -NCT05451719 -NCT05446688 -NCT05451771 -NCT05446870 -NCT05451784 -NCT05446883 -NCT05540899 -NCT05446935 -NCT05540951 -NCT05447195 -NCT05541016 -NCT05447234 -NCT05541146 -NCT05447663 -NCT05541211 -NCT05447702 -NCT05541445 -NCT05447715 -NCT05541783 -NCT05447910 -NCT05541822 -NCT05447923 -NCT05542030 -NCT05447949 -NCT05542342 -NCT05447988 -NCT05542407 -NCT05448183 -NCT05542433 -NCT05448196 -NCT05542680 -NCT05448209 -NCT05542706 -NCT05448404 -NCT05543070 -NCT05448547 -NCT05543317 -NCT05448560 -NCT05543512 -NCT05448599 -NCT05543629 -NCT05448638 -NCT05543954 -NCT05448677 -NCT05544019 -NCT05448781 -NCT05544084 -NCT05448820 -NCT05544136 -NCT05448846 -NCT05544227 -NCT05448885 -NCT05544240 -NCT05448963 -NCT05544253 -NCT05449184 -NCT05544526 -NCT05449340 -NCT05544552 -NCT05449366 -NCT05544929 -NCT05449483 -NCT05544968 -NCT05449691 -NCT05545007 -NCT05449860 -NCT05545124 -NCT05449873 -NCT05545150 -NCT05449886 -NCT05545202 -NCT05449899 -NCT05545436 -NCT05450029 -NCT05545787 -NCT05450055 -NCT05545852 -NCT05450419 -NCT05545969 -NCT05451810 -NCT05540340 -NCT05451849 -NCT05540392 -NCT05451862 -NCT05540483 -NCT05451979 -NCT05540847 -NCT05452005 -NCT05462873 -NCT05462951 -NCT05463055 -NCT05463224 -NCT05463263 -NCT05463328 -NCT05463432 -NCT05463601 -NCT05463640 -NCT05463848 -NCT05463913 -NCT05463952 -NCT05464030 -NCT05464082 -NCT05464173 -NCT05464329 -NCT05464433 -NCT05464576 -NCT05464667 -NCT05464706 -NCT05464719 -NCT05529667 -NCT05529862 -NCT05529940 -NCT05530057 -NCT05530200 -NCT05530343 -NCT05530421 -NCT05530603 -NCT05530655 -NCT05530785 -NCT05530876 -NCT05531123 -NCT05531331 -NCT05531422 -NCT05531695 -NCT05531708 -NCT05531864 -NCT05531890 -NCT05531916 -NCT05532059 -NCT05532319 -NCT05532384 -NCT05532397 -NCT05532527 -NCT05532696 -NCT05532722 -NCT05533203 -NCT05533242 -NCT05533320 -NCT05533424 -NCT05533463 -NCT05533697 -NCT05533775 -NCT05533892 -NCT05533983 -NCT05534087 -NCT05534113 -NCT05534282 -NCT05534321 -NCT05534386 -NCT05534438 -NCT05534594 -NCT05534620 -NCT05534646 -NCT05534672 -NCT05535023 -NCT05535166 -NCT05535192 -NCT05535218 -NCT05535244 -NCT05535413 -NCT05535569 -NCT05535647 -NCT05535855 -NCT05536037 -NCT05536102 -NCT05536128 -NCT05536141 -NCT05536154 -NCT05536349 -NCT05536362 -NCT05536427 -NCT05537129 -NCT05537350 -NCT05537402 -NCT05537740 -NCT05537766 -NCT05537870 -NCT05537987 -NCT05538000 -NCT05538091 -NCT05538130 -NCT05538169 -NCT05538195 -NCT05538533 -NCT05538572 -NCT05538624 -NCT05538663 -NCT05538689 -NCT05538897 -NCT05538988 -NCT05539118 -NCT05539144 -NCT05539157 -NCT05539183 -NCT05539300 -NCT05539339 -NCT05539365 -NCT05539430 -NCT05539768 -NCT05539794 -NCT05539833 -NCT05540054 -NCT05540275 -NCT05540873 -NCT05452200 -NCT05457244 -NCT05452213 -NCT05457153 -NCT05452408 -NCT05457257 -NCT05452499 -NCT05457478 -NCT05452668 -NCT05457517 -NCT05452681 -NCT05457556 -NCT05452824 -NCT05457595 -NCT05453006 -NCT05457699 -NCT05453292 -NCT05457829 -NCT05453318 -NCT05457842 -NCT05453383 -NCT05457959 -NCT05453396 -NCT05458180 -NCT05453435 -NCT05458219 -NCT05453500 -NCT05458284 -NCT05453552 -NCT05458297 -NCT05453591 -NCT05458388 -NCT05453604 -NCT05458544 -NCT05453630 -NCT05458674 -NCT05453669 -NCT05458726 -NCT05453682 -NCT05458856 -NCT05453721 -NCT05458960 -NCT05453773 -NCT05458986 -NCT05453799 -NCT05459129 -NCT05453825 -NCT05459168 -NCT05453851 -NCT05459415 -NCT05453903 -NCT05459441 -NCT05454098 -NCT05459454 -NCT05454280 -NCT05459571 -NCT05454358 -NCT05459844 -NCT05454371 -NCT05460000 -NCT05454488 -NCT05460195 -NCT05454553 -NCT05460273 -NCT05454865 -NCT05460481 -NCT05455086 -NCT05460507 -NCT05455268 -NCT05460533 -NCT05455294 -NCT05460650 -NCT05455320 -NCT05460767 -NCT05455385 -NCT05460780 -NCT05455424 -NCT05460819 -NCT05455606 -NCT05461209 -NCT05455619 -NCT05461248 -NCT05455658 -NCT05461261 -NCT05455697 -NCT05461287 -NCT05455840 -NCT05461313 -NCT05455918 -NCT05461534 -NCT05456022 -NCT05461625 -NCT05456100 -NCT05461690 -NCT05456165 -NCT05461768 -NCT05456191 -NCT05461794 -NCT05456256 -NCT05462236 -NCT05456269 -NCT05462379 -NCT05456373 -NCT05462392 -NCT05456685 -NCT05462496 -NCT05456698 -NCT05462613 -NCT05456841 -NCT05462717 -NCT05457010 -NCT05529615 -NCT05464810 -NCT05469893 -NCT05464823 -NCT05469750 -NCT05464836 -NCT05470010 -NCT05464992 -NCT05470036 -NCT05465031 -NCT05470140 -NCT05465161 -NCT05470283 -NCT05465174 -NCT05470348 -NCT05465343 -NCT05470374 -NCT05465408 -NCT05470452 -NCT05465577 -NCT05470595 -NCT05465590 -NCT05470699 -NCT05465876 -NCT05470777 -NCT05465941 -NCT05470920 -NCT05465954 -NCT05470933 -NCT05466019 -NCT05471271 -NCT05466149 -NCT05471323 -NCT05466318 -NCT05525767 -NCT05466357 -NCT05525806 -NCT05466474 -NCT05526040 -NCT05466799 -NCT05526079 -NCT05466812 -NCT05526248 -NCT05466916 -NCT05526313 -NCT05466994 -NCT05526339 -NCT05467111 -NCT05526417 -NCT05467137 -NCT05526638 -NCT05467202 -NCT05526755 -NCT05467254 -NCT05526846 -NCT05467319 -NCT05526872 -NCT05467397 -NCT05526924 -NCT05467540 -NCT05526989 -NCT05467670 -NCT05527184 -NCT05467748 -NCT05527275 -NCT05467891 -NCT05527340 -NCT05467943 -NCT05527392 -NCT05468034 -NCT05527470 -NCT05468138 -NCT05527782 -NCT05468177 -NCT05527808 -NCT05468190 -NCT05527821 -NCT05468242 -NCT05527912 -NCT05468294 -NCT05528055 -NCT05468307 -NCT05528120 -NCT05468359 -NCT05528133 -NCT05468489 -NCT05528237 -NCT05468554 -NCT05528263 -NCT05468671 -NCT05528341 -NCT05468697 -NCT05528367 -NCT05468827 -NCT05528406 -NCT05468892 -NCT05528458 -NCT05468944 -NCT05528887 -NCT05469022 -NCT05528939 -NCT05469061 -NCT05528952 -NCT05469178 -NCT05529069 -NCT05469269 -NCT05529251 -NCT05469425 -NCT05529303 -NCT05469490 -NCT05529316 -NCT05469737 -NCT05529355 -NCT05471401 -NCT05525338 -NCT05471414 -NCT05525455 -NCT05471648 -NCT05525481 -NCT05471674 -NCT05514990 -NCT05515029 -NCT05515185 -NCT05515289 -NCT05515315 -NCT05515406 -NCT05515575 -NCT05515692 -NCT05515783 -NCT05515796 -NCT05515978 -NCT05516329 -NCT05516485 -NCT05516589 -NCT05516628 -NCT05516641 -NCT05516914 -NCT05517083 -NCT05517213 -NCT05517239 -NCT05517330 -NCT05517343 -NCT05517408 -NCT05517590 -NCT05518032 -NCT05518045 -NCT05518071 -NCT05518110 -NCT05518201 -NCT05518253 -NCT05518292 -NCT05518318 -NCT05518357 -NCT05518383 -NCT05518526 -NCT05518591 -NCT05518799 -NCT05518812 -NCT05518903 -NCT05518929 -NCT05518942 -NCT05518994 -NCT05519059 -NCT05519085 -NCT05519202 -NCT05519241 -NCT05519293 -NCT05519319 -NCT05519384 -NCT05519410 -NCT05519449 -NCT05519488 -NCT05519527 -NCT05519579 -NCT05519670 -NCT05519865 -NCT05519878 -NCT05519956 -NCT05519982 -NCT05520255 -NCT05520281 -NCT05520372 -NCT05520515 -NCT05520567 -NCT05520619 -NCT05520723 -NCT05520814 -NCT05520840 -NCT05520866 -NCT05521048 -NCT05521087 -NCT05521204 -NCT05521412 -NCT05521698 -NCT05521789 -NCT05521802 -NCT05521984 -NCT05521997 -NCT05522114 -NCT05522192 -NCT05522231 -NCT05522257 -NCT05522309 -NCT05522491 -NCT05522582 -NCT05522660 -NCT05522738 -NCT05522868 -NCT05522894 -NCT05522985 -NCT05523154 -NCT05523271 -NCT05523323 -NCT05523440 -NCT05523609 -NCT05523700 -NCT05523778 -NCT05523947 -NCT05523960 -NCT05524064 -NCT05524155 -NCT05524168 -NCT05524194 -NCT05524389 -NCT05524428 -NCT05524454 -NCT05524480 -NCT05524545 -NCT05524584 -NCT05524610 -NCT05524857 -NCT05524935 -NCT05524974 -NCT05525247 -NCT05525260 -NCT05525273 -NCT05525286 -NCT05525559 -NCT05471700 -NCT05477615 -NCT05471843 -NCT05477589 -NCT05471856 -NCT05477667 -NCT05472220 -NCT05477680 -NCT05472259 -NCT05477784 -NCT05472311 -NCT05477823 -NCT05472350 -NCT05477836 -NCT05472467 -NCT05477849 -NCT05472506 -NCT05477927 -NCT05472532 -NCT05477992 -NCT05472558 -NCT05478239 -NCT05472610 -NCT05478343 -NCT05472623 -NCT05478473 -NCT05472714 -NCT05478486 -NCT05472753 -NCT05478512 -NCT05472792 -NCT05478785 -NCT05472857 -NCT05478837 -NCT05472896 -NCT05478876 -NCT05472948 -NCT05478993 -NCT05473026 -NCT05479045 -NCT05473052 -NCT05479123 -NCT05473156 -NCT05479136 -NCT05473221 -NCT05479409 -NCT05473624 -NCT05479487 -NCT05473845 -NCT05479578 -NCT05473910 -NCT05479812 -NCT05473923 -NCT05479994 -NCT05474170 -NCT05480280 -NCT05474573 -NCT05480306 -NCT05474690 -NCT05480384 -NCT05474794 -NCT05480449 -NCT05474846 -NCT05480501 -NCT05474859 -NCT05480735 -NCT05475106 -NCT05480865 -NCT05475171 -NCT05481151 -NCT05475184 -NCT05481372 -NCT05475210 -NCT05481463 -NCT05475366 -NCT05481476 -NCT05475522 -NCT05481502 -NCT05475613 -NCT05481645 -NCT05475678 -NCT05481658 -NCT05475847 -NCT05481775 -NCT05475925 -NCT05482074 -NCT05475938 -NCT05482516 -NCT05476341 -NCT05482568 -NCT05476380 -NCT05482893 -NCT05476432 -NCT05482971 -NCT05476770 -NCT05483010 -NCT05476796 -NCT05483023 -NCT05476939 -NCT05483075 -NCT05476965 -NCT05483166 -NCT05477251 -NCT05483283 -NCT05477264 -NCT05514496 -NCT05477316 -NCT05514717 -NCT05477446 -NCT05514769 -NCT05477576 -NCT05514912 -NCT05483400 -NCT05488821 -NCT05483439 -NCT05488717 -NCT05483491 -NCT05488860 -NCT05483530 -NCT05510388 -NCT05483543 -NCT05510427 -NCT05483712 -NCT05510544 -NCT05483868 -NCT05510596 -NCT05483933 -NCT05510609 -NCT05484011 -NCT05510635 -NCT05484024 -NCT05510674 -NCT05484180 -NCT05510700 -NCT05484219 -NCT05510830 -NCT05484245 -NCT05510895 -NCT05484375 -NCT05510973 -NCT05484583 -NCT05511051 -NCT05484622 -NCT05511324 -NCT05484687 -NCT05511428 -NCT05484908 -NCT05511623 -NCT05484973 -NCT05511740 -NCT05485038 -NCT05511844 -NCT05485350 -NCT05512182 -NCT05485753 -NCT05512195 -NCT05485766 -NCT05512208 -NCT05485792 -NCT05512260 -NCT05485883 -NCT05512286 -NCT05485896 -NCT05512351 -NCT05485909 -NCT05512364 -NCT05485948 -NCT05512377 -NCT05485974 -NCT05512390 -NCT05486182 -NCT05512403 -NCT05486260 -NCT05512416 -NCT05486273 -NCT05512468 -NCT05486481 -NCT05512481 -NCT05486520 -NCT05512520 -NCT05486572 -NCT05512663 -NCT05486871 -NCT05512767 -NCT05486975 -NCT05512780 -NCT05487170 -NCT05512793 -NCT05487235 -NCT05513027 -NCT05487248 -NCT05513131 -NCT05487391 -NCT05513261 -NCT05487443 -NCT05513365 -NCT05487495 -NCT05513443 -NCT05487651 -NCT05513469 -NCT05487846 -NCT05513573 -NCT05487859 -NCT05513612 -NCT05488132 -NCT05513703 -NCT05488145 -NCT05513742 -NCT05488184 -NCT05513859 -NCT05488314 -NCT05514054 -NCT05488353 -NCT05514158 -NCT05488366 -NCT05514275 -NCT05488444 -NCT05514301 -NCT05488522 -NCT05514314 -NCT05488548 -NCT05514327 -NCT05488626 -NCT05514444 -NCT05489211 -NCT05504707 -NCT05489237 -NCT05504720 -NCT05489276 -NCT05505006 -NCT05489289 -NCT05505045 -NCT05489354 -NCT05505357 -NCT05489380 -NCT05505370 -NCT05489419 -NCT05505461 -NCT05489679 -NCT05505643 -NCT05489731 -NCT05505812 -NCT05489848 -NCT05505864 -NCT05489887 -NCT05505877 -NCT05489926 -NCT05506332 -NCT05489978 -NCT05506566 -NCT05489991 -NCT05506683 -NCT05490043 -NCT05506696 -NCT05490121 -NCT05506878 -NCT05490147 -NCT05506943 -NCT05490264 -NCT05506956 -NCT05490381 -NCT05506982 -NCT05490407 -NCT05507112 -NCT05490433 -NCT05507398 -NCT05490446 -NCT05507411 -NCT05490472 -NCT05507541 -NCT05490485 -NCT05507606 -NCT05490524 -NCT05507632 -NCT05490641 -NCT05507658 -NCT05490719 -NCT05507736 -NCT05490771 -NCT05507775 -NCT05490849 -NCT05507827 -NCT05490953 -NCT05508100 -NCT05491044 -NCT05508347 -NCT05491083 -NCT05508373 -NCT05491213 -NCT05508412 -NCT05491226 -NCT05508464 -NCT05491239 -NCT05508555 -NCT05491317 -NCT05508620 -NCT05491395 -NCT05508659 -NCT05491512 -NCT05508737 -NCT05491616 -NCT05508867 -NCT05491694 -NCT05508906 -NCT05491811 -NCT05509374 -NCT05492045 -NCT05509439 -NCT05492123 -NCT05509478 -NCT05492136 -NCT05509530 -NCT05492682 -NCT05509699 -NCT05493033 -NCT05509751 -NCT05493215 -NCT05509790 -NCT05493228 -NCT05509829 -NCT05493319 -NCT05509985 -NCT05493332 -NCT05503108 -NCT05503134 -NCT05503251 -NCT05503667 -NCT05503797 -NCT05503888 -NCT05503914 -NCT05504148 -NCT05504213 -NCT05504252 -NCT05504265 -NCT05504278 -NCT05504603 -NCT05504642 -NCT05493501 -NCT05498220 -NCT05493566 -NCT05498155 -NCT05493618 -NCT05498259 -NCT05493683 -NCT05498272 -NCT05493800 -NCT05498311 -NCT05493956 -NCT05498389 -NCT05493995 -NCT05498402 -NCT05494021 -NCT05498428 -NCT05494060 -NCT05498480 -NCT05494086 -NCT05498519 -NCT05494190 -NCT05498545 -NCT05494281 -NCT05498597 -NCT05494502 -NCT05498636 -NCT05494580 -NCT05498792 -NCT05494658 -NCT05498805 -NCT05494697 -NCT05498896 -NCT05494762 -NCT05499013 -NCT05494866 -NCT05499065 -NCT05494918 -NCT05499390 -NCT05495035 -NCT05499663 -NCT05495048 -NCT05499715 -NCT05495100 -NCT05499936 -NCT05495152 -NCT05499975 -NCT05495165 -NCT05500092 -NCT05495295 -NCT05500248 -NCT05495399 -NCT05500391 -NCT05495425 -NCT05500508 -NCT05495464 -NCT05500846 -NCT05495672 -NCT05501054 -NCT05495724 -NCT05501158 -NCT05496036 -NCT05501171 -NCT05496101 -NCT05501262 -NCT05496166 -NCT05501548 -NCT05496192 -NCT05501665 -NCT05496231 -NCT05501704 -NCT05496491 -NCT05501769 -NCT05496556 -NCT05501821 -NCT05496569 -NCT05501886 -NCT05496595 -NCT05501899 -NCT05496686 -NCT05501912 -NCT05496777 -NCT05501990 -NCT05496829 -NCT05502224 -NCT05496959 -NCT05502237 -NCT05497102 -NCT05502250 -NCT05497310 -NCT05502276 -NCT05497336 -NCT05502315 -NCT05497453 -NCT05502354 -NCT05497531 -NCT05502367 -NCT05497544 -NCT05502393 -NCT05497726 -NCT05502458 -NCT05497739 -NCT05502523 -NCT05497778 -NCT05502666 -NCT05497804 -NCT05502900 -NCT05497843 -NCT05502913 -NCT05497973 -NCT05502991 -NCT05498051 -NCT05579184 -NCT05567341 -NCT05573815 -NCT05567588 -NCT05573802 -NCT05567601 -NCT05574101 -NCT05567679 -NCT05574114 -NCT05567770 -NCT05574504 -NCT05567835 -NCT05574608 -NCT05567887 -NCT05574647 -NCT05568017 -NCT05574686 -NCT05568095 -NCT05574712 -NCT05568212 -NCT05574816 -NCT05568316 -NCT05574881 -NCT05568472 -NCT05574907 -NCT05568537 -NCT05574920 -NCT05568550 -NCT05574998 -NCT05568667 -NCT05575323 -NCT05568680 -NCT05575635 -NCT05569057 -NCT05575804 -NCT05569200 -NCT05575973 -NCT05569291 -NCT05575986 -NCT05569434 -NCT05576077 -NCT05569512 -NCT05576272 -NCT05569629 -NCT05576389 -NCT05569707 -NCT05576480 -NCT05569811 -NCT05576532 -NCT05570188 -NCT05576545 -NCT05570227 -NCT05576766 -NCT05570253 -NCT05576831 -NCT05570422 -NCT05576896 -NCT05570604 -NCT05576909 -NCT05570825 -NCT05576961 -NCT05570851 -NCT05576974 -NCT05570942 -NCT05577000 -NCT05570994 -NCT05577052 -NCT05571098 -NCT05577091 -NCT05571293 -NCT05577364 -NCT05571540 -NCT05577416 -NCT05571644 -NCT05577442 -NCT05571787 -NCT05577611 -NCT05571839 -NCT05577702 -NCT05571956 -NCT05577715 -NCT05571969 -NCT05577819 -NCT05572216 -NCT05577923 -NCT05572229 -NCT05578092 -NCT05572463 -NCT05578274 -NCT05572476 -NCT05578287 -NCT05572515 -NCT05578326 -NCT05572684 -NCT05578378 -NCT05572801 -NCT05578430 -NCT05572983 -NCT05578664 -NCT05573022 -NCT05578677 -NCT05573035 -NCT05578820 -NCT05573126 -NCT05578872 -NCT05573373 -NCT05578898 -NCT05573503 -NCT05578976 -NCT05573555 -NCT05579132 -NCT05573776 -NCT05589844 -NCT05579275 -NCT05583916 -NCT05579340 -NCT05583851 -NCT05579366 -NCT05584111 -NCT05579769 -NCT05584137 -NCT05579782 -NCT05584163 -NCT05580107 -NCT05584267 -NCT05580224 -NCT05584332 -NCT05580328 -NCT05584449 -NCT05580341 -NCT05584540 -NCT05580354 -NCT05584592 -NCT05580445 -NCT05584670 -NCT05580562 -NCT05584709 -NCT05580588 -NCT05584761 -NCT05580601 -NCT05584787 -NCT05580770 -NCT05584800 -NCT05580796 -NCT05584826 -NCT05580835 -NCT05584930 -NCT05580861 -NCT05585034 -NCT05580991 -NCT05585281 -NCT05581004 -NCT05585320 -NCT05581030 -NCT05585476 -NCT05581121 -NCT05585554 -NCT05581342 -NCT05585580 -NCT05581550 -NCT05585788 -NCT05581589 -NCT05585814 -NCT05581719 -NCT05585840 -NCT05581784 -NCT05585996 -NCT05581875 -NCT05586061 -NCT05582018 -NCT05586074 -NCT05582031 -NCT05586100 -NCT05582122 -NCT05586321 -NCT05582265 -NCT05586360 -NCT05582278 -NCT05586516 -NCT05582499 -NCT05586841 -NCT05582538 -NCT05587088 -NCT05582551 -NCT05587192 -NCT05582590 -NCT05587296 -NCT05582759 -NCT05587374 -NCT05582772 -NCT05587543 -NCT05582850 -NCT05587972 -NCT05582876 -NCT05588141 -NCT05582889 -NCT05588206 -NCT05583071 -NCT05588219 -NCT05583097 -NCT05588297 -NCT05583110 -NCT05588388 -NCT05583149 -NCT05588414 -NCT05583175 -NCT05588453 -NCT05583188 -NCT05588609 -NCT05583201 -NCT05588648 -NCT05583383 -NCT05588700 -NCT05583409 -NCT05588973 -NCT05583422 -NCT05589558 -NCT05583552 -NCT05589597 -NCT05583617 -NCT05589675 -NCT05583708 -NCT05589818 -NCT05583734 -NCT05623267 -NCT05589857 -NCT05595499 -NCT05589896 -NCT05595473 -NCT05589961 -NCT05595577 -NCT05590091 -NCT05595590 -NCT05590117 -NCT05595603 -NCT05590221 -NCT05595889 -NCT05590273 -NCT05596097 -NCT05590377 -NCT05596266 -NCT05590559 -NCT05596409 -NCT05590572 -NCT05596565 -NCT05590624 -NCT05596630 -NCT05590650 -NCT05596760 -NCT05590689 -NCT05596890 -NCT05590793 -NCT05597228 -NCT05590962 -NCT05597306 -NCT05591053 -NCT05597345 -NCT05591131 -NCT05597384 -NCT05591456 -NCT05597527 -NCT05591534 -NCT05597683 -NCT05591547 -NCT05597839 -NCT05591560 -NCT05597852 -NCT05592015 -NCT05597878 -NCT05592132 -NCT05597917 -NCT05592171 -NCT05598060 -NCT05592197 -NCT05598151 -NCT05592262 -NCT05598229 -NCT05592626 -NCT05598268 -NCT05592639 -NCT05598515 -NCT05592665 -NCT05598593 -NCT05592886 -NCT05598827 -NCT05592938 -NCT05598853 -NCT05593016 -NCT05599048 -NCT05593094 -NCT05599139 -NCT05593107 -NCT05599360 -NCT05593146 -NCT05599698 -NCT05593328 -NCT05599737 -NCT05593458 -NCT05599789 -NCT05593497 -NCT05599984 -NCT05594043 -NCT05600127 -NCT05594069 -NCT05600153 -NCT05594095 -NCT05600309 -NCT05594290 -NCT05600322 -NCT05594381 -NCT05621902 -NCT05594459 -NCT05622071 -NCT05594498 -NCT05622136 -NCT05594576 -NCT05622162 -NCT05594784 -NCT05622227 -NCT05594797 -NCT05622240 -NCT05594875 -NCT05622344 -NCT05594914 -NCT05622357 -NCT05594927 -NCT05622474 -NCT05595109 -NCT05622591 -NCT05595122 -NCT05622760 -NCT05595135 -NCT05622825 -NCT05595330 -NCT05622890 -NCT05595447 -NCT05623020 -NCT05600400 -NCT05605899 -NCT05600491 -NCT05605808 -NCT05600556 -NCT05605964 -NCT05600582 -NCT05606081 -NCT05600608 -NCT05606133 -NCT05600660 -NCT05606263 -NCT05600686 -NCT05606380 -NCT05600894 -NCT05606549 -NCT05600998 -NCT05606588 -NCT05601037 -NCT05606692 -NCT05601206 -NCT05606848 -NCT05601219 -NCT05607004 -NCT05601232 -NCT05607017 -NCT05601323 -NCT05607095 -NCT05601401 -NCT05607108 -NCT05601440 -NCT05607199 -NCT05601505 -NCT05607329 -NCT05601700 -NCT05607342 -NCT05601726 -NCT05607407 -NCT05601752 -NCT05607420 -NCT05601973 -NCT05607498 -NCT05602051 -NCT05607550 -NCT05602168 -NCT05607563 -NCT05602194 -NCT05607693 -NCT05602259 -NCT05607849 -NCT05602363 -NCT05607953 -NCT05602415 -NCT05608044 -NCT05602597 -NCT05608148 -NCT05602792 -NCT05619913 -NCT05602935 -NCT05620004 -NCT05602974 -NCT05620017 -NCT05603013 -NCT05620134 -NCT05603039 -NCT05620199 -NCT05603065 -NCT05620290 -NCT05603078 -NCT05620342 -NCT05603299 -NCT05620472 -NCT05603351 -NCT05620498 -NCT05603559 -NCT05620628 -NCT05603572 -NCT05620654 -NCT05603884 -NCT05620680 -NCT05603910 -NCT05620693 -NCT05604170 -NCT05620706 -NCT05604235 -NCT05620732 -NCT05604365 -NCT05620758 -NCT05604417 -NCT05620771 -NCT05604560 -NCT05620862 -NCT05604820 -NCT05620914 -NCT05604963 -NCT05620979 -NCT05605119 -NCT05621096 -NCT05605171 -NCT05621291 -NCT05605197 -NCT05621434 -NCT05605496 -NCT05621486 -NCT05605509 -NCT05621499 -NCT05605522 -NCT05621525 -NCT05605535 -NCT05621668 -NCT05605613 -NCT05621707 -NCT05608200 -NCT05613738 -NCT05608213 -NCT05613699 -NCT05608252 -NCT05613842 -NCT05608291 -NCT05613881 -NCT05608369 -NCT05613894 -NCT05608395 -NCT05614102 -NCT05608694 -NCT05614258 -NCT05608746 -NCT05614453 -NCT05608759 -NCT05614466 -NCT05608785 -NCT05614518 -NCT05608876 -NCT05614700 -NCT05609019 -NCT05614739 -NCT05609058 -NCT05614843 -NCT05609227 -NCT05615142 -NCT05609331 -NCT05615285 -NCT05609370 -NCT05615376 -NCT05609396 -NCT05615623 -NCT05609435 -NCT05615636 -NCT05609448 -NCT05615753 -NCT05609578 -NCT05615818 -NCT05609656 -NCT05615857 -NCT05609968 -NCT05615883 -NCT05609994 -NCT05615974 -NCT05610163 -NCT05616039 -NCT05610202 -NCT05616390 -NCT05610332 -NCT05616468 -NCT05610579 -NCT05616494 -NCT05610735 -NCT05616572 -NCT05610826 -NCT05616624 -NCT05610852 -NCT05616650 -NCT05610891 -NCT05617040 -NCT05610982 -NCT05617313 -NCT05611034 -NCT05617430 -NCT05611086 -NCT05617625 -NCT05611151 -NCT05617716 -NCT05611359 -NCT05617742 -NCT05611450 -NCT05617755 -NCT05611463 -NCT05617872 -NCT05611632 -NCT05617885 -NCT05611645 -NCT05617963 -NCT05611853 -NCT05618028 -NCT05611931 -NCT05618041 -NCT05612048 -NCT05618158 -NCT05612204 -NCT05618327 -NCT05612347 -NCT05618366 -NCT05612477 -NCT05618613 -NCT05613023 -NCT05618821 -NCT05613036 -NCT05618912 -NCT05613088 -NCT05618925 -NCT05613270 -NCT05619016 -NCT05613348 -NCT05619172 -NCT05613413 -NCT05619471 -NCT05613452 -NCT05619731 -NCT05613465 -NCT05619744 -NCT05613478 -NCT05619861 -NCT05613504 -NCT05634564 -NCT05623488 -NCT05629494 -NCT05623774 -NCT05629429 -NCT05623787 -NCT05629507 -NCT05623878 -NCT05629546 -NCT05623891 -NCT05629585 -NCT05623982 -NCT05629611 -NCT05624099 -NCT05629689 -NCT05624463 -NCT05629702 -NCT05624554 -NCT05629845 -NCT05624827 -NCT05629949 -NCT05624918 -NCT05630183 -NCT05624996 -NCT05630209 -NCT05625087 -NCT05630794 -NCT05625217 -NCT05630937 -NCT05625360 -NCT05630950 -NCT05625399 -NCT05631028 -NCT05625412 -NCT05631041 -NCT05625594 -NCT05631080 -NCT05625659 -NCT05631249 -NCT05625698 -NCT05631262 -NCT05625737 -NCT05631327 -NCT05625893 -NCT05631574 -NCT05625919 -NCT05631587 -NCT05625932 -NCT05631678 -NCT05626101 -NCT05631795 -NCT05626309 -NCT05631873 -NCT05626322 -NCT05631886 -NCT05626400 -NCT05631899 -NCT05626569 -NCT05631912 -NCT05626829 -NCT05631964 -NCT05627063 -NCT05632328 -NCT05627115 -NCT05632380 -NCT05627180 -NCT05632562 -NCT05627232 -NCT05632744 -NCT05627245 -NCT05632809 -NCT05627323 -NCT05632848 -NCT05627414 -NCT05632874 -NCT05627427 -NCT05632913 -NCT05627635 -NCT05632939 -NCT05627752 -NCT05633134 -NCT05627778 -NCT05633160 -NCT05627856 -NCT05633381 -NCT05627960 -NCT05633589 -NCT05628038 -NCT05633602 -NCT05628246 -NCT05633615 -NCT05628363 -NCT05633654 -NCT05628454 -NCT05633667 -NCT05628545 -NCT05633836 -NCT05628610 -NCT05633914 -NCT05628623 -NCT05633979 -NCT05628857 -NCT05634252 -NCT05628870 -NCT05634369 -NCT05628883 -NCT05634395 -NCT05628922 -NCT05634499 -NCT05629065 -NCT05634525 -NCT05629234 -NCT05724563 -NCT05634577 -NCT05722977 -NCT05634590 -NCT05723055 -NCT05634681 -NCT05723107 -NCT05634707 -NCT05723237 -NCT05634720 -NCT05723250 -NCT05634785 -NCT05723432 -NCT05634889 -NCT05723471 -NCT05634915 -NCT05723562 -NCT05634954 -NCT05723640 -NCT05635162 -NCT05723835 -NCT05635344 -NCT05723991 -NCT05635487 -NCT05724004 -NCT05635591 -NCT05724030 -NCT05635630 -NCT05724108 -NCT05635643 -NCT05724264 -NCT05635708 -NCT05724329 -NCT05635734 -NCT05656235 -NCT05656248 -NCT05656573 -NCT05656612 -NCT05656651 -NCT05656716 -NCT05656794 -NCT05656937 -NCT05656976 -NCT05657249 -NCT05657418 -NCT05657639 -NCT05657652 -NCT05657743 -NCT05657873 -NCT05658003 -NCT05658172 -NCT05658263 -NCT05658341 -NCT05658562 -NCT05658640 -NCT05658731 -NCT05659056 -NCT05659186 -NCT05659251 -NCT05659290 -NCT05659381 -NCT05659433 -NCT05659524 -NCT05659563 -NCT05659628 -NCT05659732 -NCT05659797 -NCT05659914 -NCT05659992 -NCT05660083 -NCT05660213 -NCT05660343 -NCT05660369 -NCT05660395 -NCT05660408 -NCT05660421 -NCT05660473 -NCT05660590 -NCT05660616 -NCT05660694 -NCT05660915 -NCT05660954 -NCT05660967 -NCT05660993 -NCT05661188 -NCT05671900 -NCT05672082 -NCT05672095 -NCT05672108 -NCT05672147 -NCT05672173 -NCT05672251 -NCT05672316 -NCT05672342 -NCT05672355 -NCT05672394 -NCT05672420 -NCT05672459 -NCT05672485 -NCT05672524 -NCT05672537 -NCT05673018 -NCT05673057 -NCT05673109 -NCT05673148 -NCT05673200 -NCT05673304 -NCT05673434 -NCT05673447 -NCT05673460 -NCT05673538 -NCT05673551 -NCT05673577 -NCT05673590 -NCT05673629 -NCT05673694 -NCT05673772 -NCT05673785 -NCT05722418 -NCT05722795 -NCT05722886 -NCT05722925 -NCT05724355 -NCT05636111 -NCT05641961 -NCT05636150 -NCT05641935 -NCT05636215 -NCT05642195 -NCT05636267 -NCT05642455 -NCT05636384 -NCT05642572 -NCT05636514 -NCT05642611 -NCT05636540 -NCT05642780 -NCT05636566 -NCT05642884 -NCT05636618 -NCT05642897 -NCT05636696 -NCT05642949 -NCT05636774 -NCT05642962 -NCT05636787 -NCT05643027 -NCT05636943 -NCT05643235 -NCT05637034 -NCT05643248 -NCT05637268 -NCT05643391 -NCT05637307 -NCT05643417 -NCT05637346 -NCT05643469 -NCT05637567 -NCT05643677 -NCT05638048 -NCT05643742 -NCT05638152 -NCT05643755 -NCT05638256 -NCT05643807 -NCT05638295 -NCT05643859 -NCT05638334 -NCT05643937 -NCT05638451 -NCT05643989 -NCT05638594 -NCT05644041 -NCT05638698 -NCT05644080 -NCT05638763 -NCT05644197 -NCT05638828 -NCT05644249 -NCT05639062 -NCT05644379 -NCT05639153 -NCT05644509 -NCT05639179 -NCT05644626 -NCT05639413 -NCT05644821 -NCT05639686 -NCT05645107 -NCT05639751 -NCT05645146 -NCT05639829 -NCT05645198 -NCT05639972 -NCT05645276 -NCT05640115 -NCT05645315 -NCT05640193 -NCT05645328 -NCT05640609 -NCT05645380 -NCT05640726 -NCT05645471 -NCT05640765 -NCT05645523 -NCT05640778 -NCT05645536 -NCT05640791 -NCT05645653 -NCT05640804 -NCT05645692 -NCT05640830 -NCT05645718 -NCT05640843 -NCT05646030 -NCT05640999 -NCT05646043 -NCT05641233 -NCT05646082 -NCT05641259 -NCT05646316 -NCT05641324 -NCT05646355 -NCT05641428 -NCT05646485 -NCT05641493 -NCT05655715 -NCT05641506 -NCT05655949 -NCT05641545 -NCT05656079 -NCT05641896 -NCT05656131 -NCT05641922 -NCT05656144 -NCT05646511 -NCT05651178 -NCT05646537 -NCT05651100 -NCT05646550 -NCT05651191 -NCT05646576 -NCT05651269 -NCT05646680 -NCT05651282 -NCT05646758 -NCT05651594 -NCT05646797 -NCT05651672 -NCT05646836 -NCT05651802 -NCT05646862 -NCT05651828 -NCT05647122 -NCT05651867 -NCT05647265 -NCT05651932 -NCT05647330 -NCT05652192 -NCT05647447 -NCT05652283 -NCT05647512 -NCT05652335 -NCT05647564 -NCT05652361 -NCT05647590 -NCT05652530 -NCT05647954 -NCT05652673 -NCT05648006 -NCT05652686 -NCT05648019 -NCT05652764 -NCT05648071 -NCT05652855 -NCT05648253 -NCT05652868 -NCT05648318 -NCT05652894 -NCT05648461 -NCT05652920 -NCT05648487 -NCT05653180 -NCT05648604 -NCT05653271 -NCT05648682 -NCT05653284 -NCT05648955 -NCT05653427 -NCT05648994 -NCT05653453 -NCT05649046 -NCT05653531 -NCT05649072 -NCT05653596 -NCT05649345 -NCT05653622 -NCT05649371 -NCT05653635 -NCT05649618 -NCT05653661 -NCT05649683 -NCT05653752 -NCT05649761 -NCT05653817 -NCT05649943 -NCT05653856 -NCT05649956 -NCT05653869 -NCT05649969 -NCT05653882 -NCT05650021 -NCT05653934 -NCT05650034 -NCT05654038 -NCT05650151 -NCT05654077 -NCT05650203 -NCT05654155 -NCT05650216 -NCT05654194 -NCT05650242 -NCT05654454 -NCT05650385 -NCT05654532 -NCT05650580 -NCT05654623 -NCT05650632 -NCT05654779 -NCT05650710 -NCT05655078 -NCT05650723 -NCT05655260 -NCT05650749 -NCT05655312 -NCT05650814 -NCT05655494 -NCT05650827 -NCT05655546 -NCT05650879 -NCT05655598 -NCT05650918 -NCT05655663 -NCT05651022 -NCT05655676 -NCT05651087 -NCT05671861 -NCT05661201 -NCT05665738 -NCT05661240 -NCT05665725 -NCT05661357 -NCT05665790 -NCT05661370 -NCT05665868 -NCT05661461 -NCT05665920 -NCT05661578 -NCT05666193 -NCT05661591 -NCT05666349 -NCT05661643 -NCT05666583 -NCT05661656 -NCT05666635 -NCT05661955 -NCT05666700 -NCT05662397 -NCT05666908 -NCT05662527 -NCT05666947 -NCT05662540 -NCT05667155 -NCT05662553 -NCT05667181 -NCT05662644 -NCT05667194 -NCT05662670 -NCT05667298 -NCT05662683 -NCT05667402 -NCT05662813 -NCT05667415 -NCT05662839 -NCT05667506 -NCT05662904 -NCT05667636 -NCT05662956 -NCT05667766 -NCT05663021 -NCT05667857 -NCT05663112 -NCT05668351 -NCT05663125 -NCT05668585 -NCT05663203 -NCT05668650 -NCT05663242 -NCT05668767 -NCT05663294 -NCT05668858 -NCT05663710 -NCT05668884 -NCT05663723 -NCT05668949 -NCT05663775 -NCT05668962 -NCT05663788 -NCT05668988 -NCT05663801 -NCT05669287 -NCT05663866 -NCT05669326 -NCT05664009 -NCT05669339 -NCT05664139 -NCT05669352 -NCT05664178 -NCT05669430 -NCT05664217 -NCT05669443 -NCT05664243 -NCT05669482 -NCT05664464 -NCT05669586 -NCT05664607 -NCT05669664 -NCT05664867 -NCT05669768 -NCT05664893 -NCT05669807 -NCT05664906 -NCT05669820 -NCT05664971 -NCT05669846 -NCT05665023 -NCT05669872 -NCT05665062 -NCT05669989 -NCT05665140 -NCT05670054 -NCT05665257 -NCT05670106 -NCT05665322 -NCT05670561 -NCT05665348 -NCT05670574 -NCT05665361 -NCT05670925 -NCT05665439 -NCT05671094 -NCT05665530 -NCT05671458 -NCT05665543 -NCT05671510 -NCT05665595 -NCT05671822 -NCT05665660 -NCT05722405 -NCT05673811 -NCT05721300 -NCT05673928 -NCT05721326 -NCT05674123 -NCT05721443 -NCT05674175 -NCT05721651 -NCT05674305 -NCT05721755 -NCT05674396 -NCT05721846 -NCT05674526 -NCT05721872 -NCT05674539 -NCT05721885 -NCT05674578 -NCT05721976 -NCT05674825 -NCT05722015 -NCT05675033 -NCT05722171 -NCT05675059 -NCT05722223 -NCT05675085 -NCT05722288 -NCT05675319 -NCT05722327 -NCT05675358 -NCT05712694 -NCT05712889 -NCT05712902 -NCT05712941 -NCT05713006 -NCT05713110 -NCT05713760 -NCT05713838 -NCT05713903 -NCT05714033 -NCT05714202 -NCT05714306 -NCT05714345 -NCT05714553 -NCT05714592 -NCT05714644 -NCT05714657 -NCT05714748 -NCT05714774 -NCT05714826 -NCT05714839 -NCT05714878 -NCT05714891 -NCT05715047 -NCT05715216 -NCT05715229 -NCT05715255 -NCT05715281 -NCT05715398 -NCT05715502 -NCT05715606 -NCT05715632 -NCT05715684 -NCT05715840 -NCT05715931 -NCT05715996 -NCT05716009 -NCT05716087 -NCT05716113 -NCT05716217 -NCT05716295 -NCT05716516 -NCT05716542 -NCT05716815 -NCT05716893 -NCT05716919 -NCT05717140 -NCT05717153 -NCT05717166 -NCT05717348 -NCT05717400 -NCT05717582 -NCT05717621 -NCT05717660 -NCT05717699 -NCT05717712 -NCT05717764 -NCT05717790 -NCT05717803 -NCT05718128 -NCT05718167 -NCT05718219 -NCT05718232 -NCT05718284 -NCT05718466 -NCT05718492 -NCT05718557 -NCT05718778 -NCT05718869 -NCT05718882 -NCT05718895 -NCT05719558 -NCT05719701 -NCT05719779 -NCT05720026 -NCT05720039 -NCT05720052 -NCT05720078 -NCT05720117 -NCT05720130 -NCT05720260 -NCT05720338 -NCT05720533 -NCT05720559 -NCT05720598 -NCT05720624 -NCT05720767 -NCT05720832 -NCT05720858 -NCT05720910 -NCT05720988 -NCT05721222 -NCT05721248 -NCT05675410 -NCT05706129 -NCT05675449 -NCT05680116 -NCT05675462 -NCT05706207 -NCT05675579 -NCT05706610 -NCT05675605 -NCT05706766 -NCT05675709 -NCT05706779 -NCT05675787 -NCT05707078 -NCT05675813 -NCT05707182 -NCT05675982 -NCT05707273 -NCT05676190 -NCT05707325 -NCT05676203 -NCT05707338 -NCT05676255 -NCT05707468 -NCT05676450 -NCT05707572 -NCT05676463 -NCT05707676 -NCT05676489 -NCT05707767 -NCT05676710 -NCT05707910 -NCT05676749 -NCT05708144 -NCT05676788 -NCT05708235 -NCT05676866 -NCT05708326 -NCT05676931 -NCT05708352 -NCT05677022 -NCT05708391 -NCT05677048 -NCT05708599 -NCT05677113 -NCT05708664 -NCT05677373 -NCT05708716 -NCT05677490 -NCT05708872 -NCT05677737 -NCT05708924 -NCT05677802 -NCT05708950 -NCT05677919 -NCT05709171 -NCT05677958 -NCT05709197 -NCT05678010 -NCT05709249 -NCT05678205 -NCT05709314 -NCT05678257 -NCT05709496 -NCT05678270 -NCT05709574 -NCT05678283 -NCT05709821 -NCT05678322 -NCT05709886 -NCT05678348 -NCT05709899 -NCT05678608 -NCT05709912 -NCT05678673 -NCT05710133 -NCT05678933 -NCT05710328 -NCT05678998 -NCT05710380 -NCT05679050 -NCT05710406 -NCT05679193 -NCT05710666 -NCT05679258 -NCT05710679 -NCT05679349 -NCT05710809 -NCT05679388 -NCT05710848 -NCT05679427 -NCT05710861 -NCT05679518 -NCT05711030 -NCT05679557 -NCT05711602 -NCT05679583 -NCT05711615 -NCT05679674 -NCT05711628 -NCT05679687 -NCT05711667 -NCT05679817 -NCT05711823 -NCT05679856 -NCT05712083 -NCT05679895 -NCT05712174 -NCT05679921 -NCT05712278 -NCT05679960 -NCT05712356 -NCT05680311 -NCT05705687 -NCT05680389 -NCT05705700 -NCT05680558 -NCT05705791 -NCT05680662 -NCT05705921 -NCT05680675 -NCT05706025 -NCT05680922 -NCT05693649 -NCT05693766 -NCT05693844 -NCT05694013 -NCT05694208 -NCT05694312 -NCT05694364 -NCT05694416 -NCT05694559 -NCT05694715 -NCT05694819 -NCT05694871 -NCT05694936 -NCT05695313 -NCT05695508 -NCT05695898 -NCT05696275 -NCT05696288 -NCT05696314 -NCT05696457 -NCT05696548 -NCT05696626 -NCT05696782 -NCT05697224 -NCT05697237 -NCT05697406 -NCT05697510 -NCT05697913 -NCT05698082 -NCT05698147 -NCT05698186 -NCT05698199 -NCT05698238 -NCT05698264 -NCT05698303 -NCT05698459 -NCT05698524 -NCT05698576 -NCT05698667 -NCT05698706 -NCT05698888 -NCT05699603 -NCT05699655 -NCT05699746 -NCT05699811 -NCT05699902 -NCT05699915 -NCT05700019 -NCT05700071 -NCT05700084 -NCT05700227 -NCT05700370 -NCT05700396 -NCT05700448 -NCT05700461 -NCT05700656 -NCT05700669 -NCT05700721 -NCT05700747 -NCT05700799 -NCT05700903 -NCT05700955 -NCT05701176 -NCT05701215 -NCT05701241 -NCT05701306 -NCT05701332 -NCT05701384 -NCT05701436 -NCT05701488 -NCT05701709 -NCT05701735 -NCT05702229 -NCT05702385 -NCT05702398 -NCT05702424 -NCT05702723 -NCT05702749 -NCT05702853 -NCT05702944 -NCT05703126 -NCT05703178 -NCT05703204 -NCT05703269 -NCT05703542 -NCT05703555 -NCT05703854 -NCT05703971 -NCT05703997 -NCT05704010 -NCT05704049 -NCT05704231 -NCT05704244 -NCT05704283 -NCT05704530 -NCT05704621 -NCT05704634 -NCT05704647 -NCT05704790 -NCT05704829 -NCT05704842 -NCT05704855 -NCT05704894 -NCT05704920 -NCT05704933 -NCT05704985 -NCT05705219 -NCT05705401 -NCT05705466 -NCT05705492 -NCT05705505 -NCT05705570 -NCT05705635 -NCT05681000 -NCT05687357 -NCT05681026 -NCT05687266 -NCT05681039 -NCT05687513 -NCT05681195 -NCT05687617 -NCT05681234 -NCT05687682 -NCT05681260 -NCT05687721 -NCT05681390 -NCT05687747 -NCT05681403 -NCT05687838 -NCT05681416 -NCT05687851 -NCT05681650 -NCT05688020 -NCT05681728 -NCT05688033 -NCT05681780 -NCT05688215 -NCT05681949 -NCT05688241 -NCT05682131 -NCT05688280 -NCT05682170 -NCT05688384 -NCT05682443 -NCT05688475 -NCT05682742 -NCT05688488 -NCT05682755 -NCT05688605 -NCT05682885 -NCT05688904 -NCT05682950 -NCT05689021 -NCT05683041 -NCT05689359 -NCT05683171 -NCT05689619 -NCT05683197 -NCT05689671 -NCT05683418 -NCT05689853 -NCT05683652 -NCT05690035 -NCT05683691 -NCT05690230 -NCT05683704 -NCT05690295 -NCT05683808 -NCT05690425 -NCT05683886 -NCT05690581 -NCT05683964 -NCT05690828 -NCT05684211 -NCT05690906 -NCT05684276 -NCT05690945 -NCT05684367 -NCT05690984 -NCT05684458 -NCT05691010 -NCT05684692 -NCT05691153 -NCT05684731 -NCT05691465 -NCT05684874 -NCT05691478 -NCT05684965 -NCT05691491 -NCT05685004 -NCT05691504 -NCT05685160 -NCT05691517 -NCT05685173 -NCT05691608 -NCT05685472 -NCT05691855 -NCT05685602 -NCT05691881 -NCT05685680 -NCT05691894 -NCT05686122 -NCT05692024 -NCT05686226 -NCT05692037 -NCT05686499 -NCT05692284 -NCT05686538 -NCT05692323 -NCT05686590 -NCT05692622 -NCT05686720 -NCT05692635 -NCT05686798 -NCT05692661 -NCT05687032 -NCT05692674 -NCT05687084 -NCT05692999 -NCT05687110 -NCT05693090 -NCT05687123 -NCT05693363 -NCT05687136 -NCT05735171 -NCT05724602 -NCT05730777 -NCT05724732 -NCT05730712 -NCT05724849 -NCT05730816 -NCT05724875 -NCT05730972 -NCT05724992 -NCT05731219 -NCT05725070 -NCT05731271 -NCT05725200 -NCT05731453 -NCT05725265 -NCT05731518 -NCT05725291 -NCT05731661 -NCT05725343 -NCT05731726 -NCT05725421 -NCT05731752 -NCT05725473 -NCT05731791 -NCT05726097 -NCT05731934 -NCT05726110 -NCT05731947 -NCT05726136 -NCT05732051 -NCT05726175 -NCT05732064 -NCT05726292 -NCT05732103 -NCT05726370 -NCT05732129 -NCT05726383 -NCT05732181 -NCT05726604 -NCT05732389 -NCT05726643 -NCT05732428 -NCT05726786 -NCT05732441 -NCT05726864 -NCT05732493 -NCT05726929 -NCT05732558 -NCT05727007 -NCT05732662 -NCT05727098 -NCT05732688 -NCT05727163 -NCT05732805 -NCT05727176 -NCT05732831 -NCT05727410 -NCT05732857 -NCT05727605 -NCT05732896 -NCT05727683 -NCT05732922 -NCT05727735 -NCT05732948 -NCT05727787 -NCT05732961 -NCT05727813 -NCT05733000 -NCT05727839 -NCT05733156 -NCT05727904 -NCT05733312 -NCT05728112 -NCT05733351 -NCT05728268 -NCT05733416 -NCT05728372 -NCT05733572 -NCT05728515 -NCT05733598 -NCT05728541 -NCT05733611 -NCT05728606 -NCT05733689 -NCT05728619 -NCT05733715 -NCT05728632 -NCT05733910 -NCT05728879 -NCT05733949 -NCT05729139 -NCT05734066 -NCT05729399 -NCT05734105 -NCT05729646 -NCT05734300 -NCT05729867 -NCT05734495 -NCT05730036 -NCT05734560 -NCT05730192 -NCT05734820 -NCT05730361 -NCT05734898 -NCT05730439 -NCT05735028 -NCT05730595 -NCT05735080 -NCT05730608 -NCT05735145 -NCT05730673 -NCT05744375 -NCT05735184 -NCT05739942 -NCT05735223 -NCT05739838 -NCT05735275 -NCT05739968 -NCT05735366 -NCT05739981 -NCT05735392 -NCT05740033 -NCT05735496 -NCT05740111 -NCT05735717 -NCT05740137 -NCT05735795 -NCT05740189 -NCT05735834 -NCT05740202 -NCT05735912 -NCT05740215 -NCT05735977 -NCT05740267 -NCT05736094 -NCT05740449 -NCT05736224 -NCT05740475 -NCT05736315 -NCT05740488 -NCT05736367 -NCT05740566 -NCT05736406 -NCT05740774 -NCT05736588 -NCT05740839 -NCT05736705 -NCT05740891 -NCT05736731 -NCT05740917 -NCT05736952 -NCT05740943 -NCT05736978 -NCT05740956 -NCT05737199 -NCT05741008 -NCT05737212 -NCT05741021 -NCT05737303 -NCT05741164 -NCT05737368 -NCT05741242 -NCT05737563 -NCT05741255 -NCT05737602 -NCT05741294 -NCT05737615 -NCT05741359 -NCT05737628 -NCT05741944 -NCT05737706 -NCT05742178 -NCT05737732 -NCT05742334 -NCT05737745 -NCT05742425 -NCT05737797 -NCT05742438 -NCT05738005 -NCT05742568 -NCT05738057 -NCT05742607 -NCT05738161 -NCT05742711 -NCT05738187 -NCT05742750 -NCT05738317 -NCT05742945 -NCT05738434 -NCT05743023 -NCT05738447 -NCT05743036 -NCT05738603 -NCT05743270 -NCT05738616 -NCT05743491 -NCT05738694 -NCT05743504 -NCT05738980 -NCT05743517 -NCT05738993 -NCT05743595 -NCT05739006 -NCT05743621 -NCT05739045 -NCT05743686 -NCT05739071 -NCT05743725 -NCT05739175 -NCT05743777 -NCT05739188 -NCT05743842 -NCT05739227 -NCT05744037 -NCT05739409 -NCT05744089 -NCT05739565 -NCT05744115 -NCT05739630 -NCT05744128 -NCT05739695 -NCT05744219 -NCT05739812 -NCT05754684 -NCT05744427 -NCT05749432 -NCT05744440 -NCT05749302 -NCT05744557 -NCT05749549 -NCT05744687 -NCT05749575 -NCT05744739 -NCT05749588 -NCT05745038 -NCT05749627 -NCT05745181 -NCT05749887 -NCT05745246 -NCT05749900 -NCT05745285 -NCT05750030 -NCT05745350 -NCT05750290 -NCT05745363 -NCT05750329 -NCT05745454 -NCT05750693 -NCT05745558 -NCT05750953 -NCT05745623 -NCT05751018 -NCT05745714 -NCT05751044 -NCT05745740 -NCT05751265 -NCT05745844 -NCT05751343 -NCT05745857 -NCT05751356 -NCT05745909 -NCT05751434 -NCT05746104 -NCT05751486 -NCT05746156 -NCT05751512 -NCT05746195 -NCT05751629 -NCT05746208 -NCT05751668 -NCT05746325 -NCT05751733 -NCT05746429 -NCT05751798 -NCT05746481 -NCT05751837 -NCT05746728 -NCT05751850 -NCT05746754 -NCT05751928 -NCT05746806 -NCT05751941 -NCT05746897 -NCT05752136 -NCT05746962 -NCT05752149 -NCT05747157 -NCT05752448 -NCT05747313 -NCT05752552 -NCT05747326 -NCT05752877 -NCT05747339 -NCT05753007 -NCT05747443 -NCT05753046 -NCT05747482 -NCT05753163 -NCT05747521 -NCT05753306 -NCT05747625 -NCT05753384 -NCT05747716 -NCT05753501 -NCT05747729 -NCT05753566 -NCT05747794 -NCT05753618 -NCT05748093 -NCT05753657 -NCT05748145 -NCT05753722 -NCT05748171 -NCT05753748 -NCT05748197 -NCT05753826 -NCT05748704 -NCT05753839 -NCT05748834 -NCT05753865 -NCT05748938 -NCT05753995 -NCT05749016 -NCT05754203 -NCT05749042 -NCT05754216 -NCT05749120 -NCT05754229 -NCT05749133 -NCT05754346 -NCT05749211 -NCT05754528 -NCT05749276 -NCT05754580 -NCT05749289 -NCT05765851 -NCT05754736 -NCT05760391 -NCT05754749 -NCT05760378 -NCT05754801 -NCT05760430 -NCT05754840 -NCT05760599 -NCT05754853 -NCT05760612 -NCT05754892 -NCT05760690 -NCT05755009 -NCT05760755 -NCT05755048 -NCT05761054 -NCT05755087 -NCT05761132 -NCT05755113 -NCT05761171 -NCT05755295 -NCT05761223 -NCT05755490 -NCT05761314 -NCT05755581 -NCT05761366 -NCT05755594 -NCT05761470 -NCT05755607 -NCT05761561 -NCT05755646 -NCT05761717 -NCT05755659 -NCT05761951 -NCT05755685 -NCT05762042 -NCT05755828 -NCT05762172 -NCT05755984 -NCT05762198 -NCT05756153 -NCT05762250 -NCT05756166 -NCT05762419 -NCT05756192 -NCT05762536 -NCT05756556 -NCT05762757 -NCT05756569 -NCT05762900 -NCT05756725 -NCT05763004 -NCT05756777 -NCT05763199 -NCT05756907 -NCT05763355 -NCT05756972 -NCT05763563 -NCT05757219 -NCT05763615 -NCT05757336 -NCT05763667 -NCT05757427 -NCT05763797 -NCT05757466 -NCT05763836 -NCT05757492 -NCT05763927 -NCT05757700 -NCT05763992 -NCT05757817 -NCT05764005 -NCT05757882 -NCT05764044 -NCT05758025 -NCT05764330 -NCT05758116 -NCT05764395 -NCT05758389 -NCT05764447 -NCT05758493 -NCT05764486 -NCT05758571 -NCT05764551 -NCT05758636 -NCT05764720 -NCT05758688 -NCT05764915 -NCT05759195 -NCT05764928 -NCT05759234 -NCT05764954 -NCT05759312 -NCT05765032 -NCT05759546 -NCT05765084 -NCT05759572 -NCT05765214 -NCT05759728 -NCT05765357 -NCT05759741 -NCT05765500 -NCT05759793 -NCT05765643 -NCT05759923 -NCT05765734 -NCT05759949 -NCT05765812 -NCT05759975 -NCT05765825 -NCT05760222 -NCT05776667 -NCT05765877 -NCT05772208 -NCT05765916 -NCT05772130 -NCT05766046 -NCT05772273 -NCT05766163 -NCT05772377 -NCT05766371 -NCT05772390 -NCT05766410 -NCT05772455 -NCT05766514 -NCT05772546 -NCT05766527 -NCT05772728 -NCT05766605 -NCT05772741 -NCT05766748 -NCT05772767 -NCT05766800 -NCT05772923 -NCT05766891 -NCT05773040 -NCT05767060 -NCT05773079 -NCT05767359 -NCT05773092 -NCT05767684 -NCT05773105 -NCT05767879 -NCT05773144 -NCT05767892 -NCT05773274 -NCT05768087 -NCT05773326 -NCT05768139 -NCT05773391 -NCT05768178 -NCT05773664 -NCT05768256 -NCT05773703 -NCT05768282 -NCT05773820 -NCT05768321 -NCT05773859 -NCT05768347 -NCT05773937 -NCT05768464 -NCT05774028 -NCT05768490 -NCT05774197 -NCT05768503 -NCT05774275 -NCT05768529 -NCT05774483 -NCT05768711 -NCT05774561 -NCT05768880 -NCT05774600 -NCT05768919 -NCT05774678 -NCT05768932 -NCT05774873 -NCT05768984 -NCT05774886 -NCT05769010 -NCT05774899 -NCT05769062 -NCT05774951 -NCT05769075 -NCT05774964 -NCT05769205 -NCT05775094 -NCT05769660 -NCT05775146 -NCT05769725 -NCT05775159 -NCT05769959 -NCT05775289 -NCT05770037 -NCT05775406 -NCT05770063 -NCT05775419 -NCT05770102 -NCT05775471 -NCT05770310 -NCT05775575 -NCT05770531 -NCT05775666 -NCT05770544 -NCT05775705 -NCT05770635 -NCT05775796 -NCT05770869 -NCT05775822 -NCT05770882 -NCT05775874 -NCT05771025 -NCT05775900 -NCT05771181 -NCT05775939 -NCT05771207 -NCT05776355 -NCT05771480 -NCT05776381 -NCT05771584 -NCT05776407 -NCT05771883 -NCT05776524 -NCT05771896 -NCT05788939 -NCT05776680 -NCT05783622 -NCT05776706 -NCT05783609 -NCT05776758 -NCT05783882 -NCT05776875 -NCT05783908 -NCT05776979 -NCT05783921 -NCT05777278 -NCT05784012 -NCT05777369 -NCT05784142 -NCT05777499 -NCT05784311 -NCT05777603 -NCT05784428 -NCT05777707 -NCT05784441 -NCT05777824 -NCT05784597 -NCT05778097 -NCT05784688 -NCT05778136 -NCT05784766 -NCT05778149 -NCT05784870 -NCT05778708 -NCT05784974 -NCT05778825 -NCT05784987 -NCT05778851 -NCT05785039 -NCT05779163 -NCT05785208 -NCT05779423 -NCT05785234 -NCT05779605 -NCT05785325 -NCT05779631 -NCT05785494 -NCT05779917 -NCT05785728 -NCT05779930 -NCT05785741 -NCT05779943 -NCT05785754 -NCT05780294 -NCT05785767 -NCT05780307 -NCT05785780 -NCT05780372 -NCT05785845 -NCT05780567 -NCT05785975 -NCT05780684 -NCT05786014 -NCT05780814 -NCT05786040 -NCT05780879 -NCT05786430 -NCT05781048 -NCT05786456 -NCT05781074 -NCT05786482 -NCT05781217 -NCT05786716 -NCT05781308 -NCT05786742 -NCT05781321 -NCT05786924 -NCT05781360 -NCT05786989 -NCT05781386 -NCT05787145 -NCT05781555 -NCT05787249 -NCT05781633 -NCT05787496 -NCT05781672 -NCT05787535 -NCT05781919 -NCT05787561 -NCT05781958 -NCT05787587 -NCT05782127 -NCT05787639 -NCT05782361 -NCT05787834 -NCT05782504 -NCT05788029 -NCT05782608 -NCT05788081 -NCT05782686 -NCT05788107 -NCT05782764 -NCT05788289 -NCT05782959 -NCT05788445 -NCT05783076 -NCT05788484 -NCT05783089 -NCT05788679 -NCT05783310 -NCT05788744 -NCT05783323 -NCT05788835 -NCT05783570 -NCT05788926 -NCT05783596 -NCT05799469 -NCT05789043 -NCT05794971 -NCT05789069 -NCT05794958 -NCT05789082 -NCT05795101 -NCT05789303 -NCT05795244 -NCT05789316 -NCT05795296 -NCT05789394 -NCT05795595 -NCT05789433 -NCT05795725 -NCT05789485 -NCT05795920 -NCT05789589 -NCT05795959 -NCT05789602 -NCT05796089 -NCT05789862 -NCT05796102 -NCT05789901 -NCT05796219 -NCT05790096 -NCT05796271 -NCT05790200 -NCT05796375 -NCT05790213 -NCT05796518 -NCT05790226 -NCT05796570 -NCT05790447 -NCT05796895 -NCT05790460 -NCT05796973 -NCT05790590 -NCT05797077 -NCT05790850 -NCT05797168 -NCT05791097 -NCT05797233 -NCT05791136 -NCT05797246 -NCT05791149 -NCT05797454 -NCT05791409 -NCT05797467 -NCT05791448 -NCT05797545 -NCT05791474 -NCT05797662 -NCT05791942 -NCT05797727 -NCT05791955 -NCT05797805 -NCT05792007 -NCT05797831 -NCT05792228 -NCT05797870 -NCT05792254 -NCT05797883 -NCT05792410 -NCT05797948 -NCT05792475 -NCT05798026 -NCT05792566 -NCT05798156 -NCT05792722 -NCT05798273 -NCT05792735 -NCT05798312 -NCT05792995 -NCT05798455 -NCT05793021 -NCT05798507 -NCT05793034 -NCT05798533 -NCT05793151 -NCT05798546 -NCT05793320 -NCT05798611 -NCT05793489 -NCT05798663 -NCT05793593 -NCT05798780 -NCT05793710 -NCT05798793 -NCT05793749 -NCT05798819 -NCT05793788 -NCT05798845 -NCT05793801 -NCT05798884 -NCT05793957 -NCT05798897 -NCT05794035 -NCT05799027 -NCT05794048 -NCT05799079 -NCT05794477 -NCT05799144 -NCT05794607 -NCT05799183 -NCT05794659 -NCT05799248 -NCT05794750 -NCT05799274 -NCT05794880 -NCT05799443 -NCT05794906 -NCT05808608 -NCT05799612 -NCT05803915 -NCT05799820 -NCT05803746 -NCT05799976 -NCT05803928 -NCT05800015 -NCT05803941 -NCT05800054 -NCT05804032 -NCT05800080 -NCT05804045 -NCT05800106 -NCT05804227 -NCT05800132 -NCT05804318 -NCT05800210 -NCT05804370 -NCT05800223 -NCT05804435 -NCT05800236 -NCT05804864 -NCT05800249 -NCT05804916 -NCT05800275 -NCT05805098 -NCT05800340 -NCT05805319 -NCT05800366 -NCT05805358 -NCT05800405 -NCT05805371 -NCT05800418 -NCT05805436 -NCT05800483 -NCT05805501 -NCT05800574 -NCT05805605 -NCT05800587 -NCT05805631 -NCT05800665 -NCT05805722 -NCT05800756 -NCT05805943 -NCT05800834 -NCT05805956 -NCT05800964 -NCT05805982 -NCT05800977 -NCT05806047 -NCT05801029 -NCT05806060 -NCT05801094 -NCT05806073 -NCT05801107 -NCT05806099 -NCT05801133 -NCT05806138 -NCT05801237 -NCT05806307 -NCT05801666 -NCT05806333 -NCT05801783 -NCT05806385 -NCT05801835 -NCT05806515 -NCT05801887 -NCT05806580 -NCT05801913 -NCT05806671 -NCT05801939 -NCT05806814 -NCT05801965 -NCT05806853 -NCT05802056 -NCT05806931 -NCT05802121 -NCT05806983 -NCT05802186 -NCT05807022 -NCT05802225 -NCT05807035 -NCT05802290 -NCT05807048 -NCT05802342 -NCT05807074 -NCT05802381 -NCT05807126 -NCT05802394 -NCT05807295 -NCT05802407 -NCT05807308 -NCT05802420 -NCT05807347 -NCT05802485 -NCT05807542 -NCT05802654 -NCT05807646 -NCT05802693 -NCT05807776 -NCT05802992 -NCT05807880 -NCT05803018 -NCT05807893 -NCT05803057 -NCT05807932 -NCT05803096 -NCT05807984 -NCT05803382 -NCT05808582 -NCT05803629 -NCT05854394 -NCT05808634 -NCT05851625 -NCT05808790 -NCT05851924 -NCT05809024 -NCT05852002 -NCT05809167 -NCT05852041 -NCT05809180 -NCT05852223 -NCT05809336 -NCT05852665 -NCT05809557 -NCT05852691 -NCT05809752 -NCT05852717 -NCT05809830 -NCT05852990 -NCT05809869 -NCT05853094 -NCT05809895 -NCT05853172 -NCT05809999 -NCT05853198 -NCT05810025 -NCT05853367 -NCT05810103 -NCT05853458 -NCT05810246 -NCT05853549 -NCT05810324 -NCT05853575 -NCT05810350 -NCT05853848 -NCT05810402 -NCT05853887 -NCT05810454 -NCT05853965 -NCT05810532 -NCT05854277 -NCT05810571 -NCT05854368 -NCT05810623 -NCT05833763 -NCT05833815 -NCT05833841 -NCT05833867 -NCT05833893 -NCT05833919 -NCT05833971 -NCT05833984 -NCT05833997 -NCT05834231 -NCT05834244 -NCT05834270 -NCT05834413 -NCT05834543 -NCT05834569 -NCT05834582 -NCT05834712 -NCT05834751 -NCT05834764 -NCT05834933 -NCT05835011 -NCT05835154 -NCT05835245 -NCT05835609 -NCT05835687 -NCT05835804 -NCT05836064 -NCT05836077 -NCT05836324 -NCT05836337 -NCT05836571 -NCT05836584 -NCT05836623 -NCT05836688 -NCT05836870 -NCT05836896 -NCT05836948 -NCT05837052 -NCT05837169 -NCT05837299 -NCT05837429 -NCT05837455 -NCT05837533 -NCT05837598 -NCT05837741 -NCT05837767 -NCT05838001 -NCT05838066 -NCT05838131 -NCT05838391 -NCT05838417 -NCT05838521 -NCT05838599 -NCT05838638 -NCT05838716 -NCT05838729 -NCT05838768 -NCT05839106 -NCT05839119 -NCT05839197 -NCT05839210 -NCT05839275 -NCT05839470 -NCT05839600 -NCT05839626 -NCT05839912 -NCT05840016 -NCT05840068 -NCT05840094 -NCT05840107 -NCT05851365 -NCT05851378 -NCT05851456 -NCT05851521 -NCT05851534 -NCT05851547 -NCT05851560 -NCT05810701 -NCT05816785 -NCT05810714 -NCT05816746 -NCT05810740 -NCT05816980 -NCT05810792 -NCT05817058 -NCT05810870 -NCT05828511 -NCT05811195 -NCT05828589 -NCT05811793 -NCT05828927 -NCT05811936 -NCT05829057 -NCT05811975 -NCT05829070 -NCT05812040 -NCT05829213 -NCT05812274 -NCT05829226 -NCT05812326 -NCT05829291 -NCT05812430 -NCT05829434 -NCT05812521 -NCT05829616 -NCT05812534 -NCT05829629 -NCT05812677 -NCT05829707 -NCT05812807 -NCT05829824 -NCT05812924 -NCT05830019 -NCT05813015 -NCT05830045 -NCT05813028 -NCT05830058 -NCT05813132 -NCT05830084 -NCT05813145 -NCT05830097 -NCT05813327 -NCT05830123 -NCT05813509 -NCT05830240 -NCT05813522 -NCT05830292 -NCT05813626 -NCT05830461 -NCT05813665 -NCT05830500 -NCT05813808 -NCT05830539 -NCT05814224 -NCT05830838 -NCT05814354 -NCT05830890 -NCT05814536 -NCT05830929 -NCT05814601 -NCT05831033 -NCT05814666 -NCT05831293 -NCT05814744 -NCT05831358 -NCT05814835 -NCT05831540 -NCT05814848 -NCT05831579 -NCT05814900 -NCT05831878 -NCT05815082 -NCT05831891 -NCT05815160 -NCT05831917 -NCT05815173 -NCT05831930 -NCT05815186 -NCT05831995 -NCT05815290 -NCT05832008 -NCT05815303 -NCT05832086 -NCT05815316 -NCT05832112 -NCT05815394 -NCT05832138 -NCT05815472 -NCT05832320 -NCT05815862 -NCT05832398 -NCT05815927 -NCT05832736 -NCT05816187 -NCT05832827 -NCT05816252 -NCT05832892 -NCT05816369 -NCT05833126 -NCT05816460 -NCT05833321 -NCT05816538 -NCT05833334 -NCT05816642 -NCT05833438 -NCT05816655 -NCT05833672 -NCT05816668 -NCT05833724 -NCT05817201 -NCT05823623 -NCT05817214 -NCT05823571 -NCT05817903 -NCT05823701 -NCT05817955 -NCT05823714 -NCT05818072 -NCT05823740 -NCT05818267 -NCT05823987 -NCT05818449 -NCT05824273 -NCT05818683 -NCT05824299 -NCT05818865 -NCT05824325 -NCT05818917 -NCT05824455 -NCT05818982 -NCT05824468 -NCT05819060 -NCT05824481 -NCT05819346 -NCT05824494 -NCT05819684 -NCT05824559 -NCT05819892 -NCT05824585 -NCT05819996 -NCT05824663 -NCT05820087 -NCT05824975 -NCT05820113 -NCT05825001 -NCT05820126 -NCT05825066 -NCT05820191 -NCT05825365 -NCT05820373 -NCT05825482 -NCT05820633 -NCT05825547 -NCT05820711 -NCT05825625 -NCT05820724 -NCT05825664 -NCT05820763 -NCT05825768 -NCT05820841 -NCT05826015 -NCT05820906 -NCT05826158 -NCT05821023 -NCT05826275 -NCT05821088 -NCT05826288 -NCT05821192 -NCT05826470 -NCT05821231 -NCT05826483 -NCT05821244 -NCT05826509 -NCT05821361 -NCT05826535 -NCT05821556 -NCT05826600 -NCT05821595 -NCT05826743 -NCT05821686 -NCT05826964 -NCT05821738 -NCT05827016 -NCT05821751 -NCT05827055 -NCT05821777 -NCT05827081 -NCT05821933 -NCT05827289 -NCT05822037 -NCT05827523 -NCT05822453 -NCT05827549 -NCT05822518 -NCT05827614 -NCT05822557 -NCT05827770 -NCT05822726 -NCT05827796 -NCT05822752 -NCT05827835 -NCT05822817 -NCT05828004 -NCT05822934 -NCT05828069 -NCT05823194 -NCT05828082 -NCT05823246 -NCT05828238 -NCT05823272 -NCT05828277 -NCT05823285 -NCT05828303 -NCT05823311 -NCT05828381 -NCT05823402 -NCT05828446 -NCT05823467 -NCT05828459 -NCT05823480 -NCT05851235 -NCT05840211 -NCT05845450 -NCT05840224 -NCT05845307 -NCT05840341 -NCT05845476 -NCT05840445 -NCT05845502 -NCT05840510 -NCT05845671 -NCT05840549 -NCT05845814 -NCT05840770 -NCT05846165 -NCT05840835 -NCT05846295 -NCT05841134 -NCT05846516 -NCT05841186 -NCT05846594 -NCT05841355 -NCT05846646 -NCT05841381 -NCT05846724 -NCT05841420 -NCT05846737 -NCT05841472 -NCT05846750 -NCT05841550 -NCT05846789 -NCT05841563 -NCT05846867 -NCT05841706 -NCT05846880 -NCT05841771 -NCT05846971 -NCT05841849 -NCT05847166 -NCT05841966 -NCT05847179 -NCT05841992 -NCT05847348 -NCT05842018 -NCT05847569 -NCT05842044 -NCT05847673 -NCT05842057 -NCT05847686 -NCT05842174 -NCT05847764 -NCT05842187 -NCT05847868 -NCT05842317 -NCT05848011 -NCT05842421 -NCT05848050 -NCT05842525 -NCT05848141 -NCT05842603 -NCT05848466 -NCT05842707 -NCT05848557 -NCT05842746 -NCT05848687 -NCT05842785 -NCT05848739 -NCT05842902 -NCT05848765 -NCT05843032 -NCT05848843 -NCT05843058 -NCT05848947 -NCT05843188 -NCT05848999 -NCT05843253 -NCT05849129 -NCT05843292 -NCT05849142 -NCT05843305 -NCT05849246 -NCT05843448 -NCT05849298 -NCT05843877 -NCT05849480 -NCT05844046 -NCT05849610 -NCT05844150 -NCT05849662 -NCT05844306 -NCT05849792 -NCT05844371 -NCT05849857 -NCT05844605 -NCT05850130 -NCT05844670 -NCT05850182 -NCT05844683 -NCT05850234 -NCT05844761 -NCT05850286 -NCT05844813 -NCT05850637 -NCT05844865 -NCT05850663 -NCT05844956 -NCT05850702 -NCT05845138 -NCT05851014 -NCT05845268 -NCT05851092 -NCT05845294 -NCT05866432 -NCT05854498 -NCT05860621 -NCT05854589 -NCT05860582 -NCT05854823 -NCT05860868 -NCT05854849 -NCT05860881 -NCT05854966 -NCT05860907 -NCT05855122 -NCT05861050 -NCT05855200 -NCT05861245 -NCT05855265 -NCT05861271 -NCT05855278 -NCT05861336 -NCT05855291 -NCT05861362 -NCT05855694 -NCT05861505 -NCT05855811 -NCT05861557 -NCT05856292 -NCT05861635 -NCT05856305 -NCT05861778 -NCT05856370 -NCT05861830 -NCT05856500 -NCT05861895 -NCT05856630 -NCT05861947 -NCT05856643 -NCT05862012 -NCT05856656 -NCT05862051 -NCT05856695 -NCT05862064 -NCT05856773 -NCT05862168 -NCT05856864 -NCT05862285 -NCT05856981 -NCT05862324 -NCT05857332 -NCT05862337 -NCT05857631 -NCT05862610 -NCT05857982 -NCT05862740 -NCT05857995 -NCT05862831 -NCT05858164 -NCT05862844 -NCT05858177 -NCT05863013 -NCT05858229 -NCT05863195 -NCT05858359 -NCT05863234 -NCT05858398 -NCT05863325 -NCT05858424 -NCT05863351 -NCT05858567 -NCT05863845 -NCT05858593 -NCT05864105 -NCT05858710 -NCT05864131 -NCT05858736 -NCT05864144 -NCT05858814 -NCT05864196 -NCT05859074 -NCT05864274 -NCT05859100 -NCT05864534 -NCT05859217 -NCT05864573 -NCT05859334 -NCT05864742 -NCT05859373 -NCT05864755 -NCT05859464 -NCT05864794 -NCT05859477 -NCT05864924 -NCT05859581 -NCT05865002 -NCT05859711 -NCT05865028 -NCT05859750 -NCT05865132 -NCT05859971 -NCT05865548 -NCT05860036 -NCT05865730 -NCT05860075 -NCT05865743 -NCT05860296 -NCT05865756 -NCT05860335 -NCT05865925 -NCT05860374 -NCT05865990 -NCT05860465 -NCT05866172 -NCT05860530 -NCT05876754 -NCT05866510 -NCT05871333 -NCT05866653 -NCT05871320 -NCT05866679 -NCT05871437 -NCT05866692 -NCT05871684 -NCT05866757 -NCT05871892 -NCT05866887 -NCT05871918 -NCT05867030 -NCT05872126 -NCT05867095 -NCT05872204 -NCT05867121 -NCT05872295 -NCT05867251 -NCT05872334 -NCT05867303 -NCT05872347 -NCT05867420 -NCT05872412 -NCT05867563 -NCT05872451 -NCT05867576 -NCT05872685 -NCT05867615 -NCT05872724 -NCT05867667 -NCT05872841 -NCT05867771 -NCT05872854 -NCT05867953 -NCT05872867 -NCT05867966 -NCT05872893 -NCT05868057 -NCT05873036 -NCT05868083 -NCT05873192 -NCT05868174 -NCT05873205 -NCT05868187 -NCT05873244 -NCT05868226 -NCT05873296 -NCT05868265 -NCT05873439 -NCT05868317 -NCT05873608 -NCT05868395 -NCT05873621 -NCT05868486 -NCT05873686 -NCT05868707 -NCT05873712 -NCT05868876 -NCT05873829 -NCT05868915 -NCT05873972 -NCT05869123 -NCT05874063 -NCT05869162 -NCT05874193 -NCT05869227 -NCT05874297 -NCT05869240 -NCT05874401 -NCT05869279 -NCT05874414 -NCT05869474 -NCT05874492 -NCT05869539 -NCT05874778 -NCT05869604 -NCT05874934 -NCT05869682 -NCT05875129 -NCT05870176 -NCT05875168 -NCT05870319 -NCT05875402 -NCT05870423 -NCT05875428 -NCT05870449 -NCT05875558 -NCT05870475 -NCT05875753 -NCT05870579 -NCT05875805 -NCT05870748 -NCT05875870 -NCT05870761 -NCT05875935 -NCT05870800 -NCT05876052 -NCT05870917 -NCT05876065 -NCT05870995 -NCT05876091 -NCT05871008 -NCT05876130 -NCT05871021 -NCT05876325 -NCT05871099 -NCT05876338 -NCT05871125 -NCT05876715 -NCT05871307 -NCT05886751 -NCT05876806 -NCT05880706 -NCT05876832 -NCT05880667 -NCT05876923 -NCT05880927 -NCT05877001 -NCT05880992 -NCT05877144 -NCT05881070 -NCT05877352 -NCT05881265 -NCT05877430 -NCT05881525 -NCT05877521 -NCT05881746 -NCT05877573 -NCT05881902 -NCT05877599 -NCT05882019 -NCT05877651 -NCT05882058 -NCT05877664 -NCT05882253 -NCT05877820 -NCT05882292 -NCT05877872 -NCT05882305 -NCT05877911 -NCT05882370 -NCT05877924 -NCT05882396 -NCT05878028 -NCT05882513 -NCT05878106 -NCT05882578 -NCT05878184 -NCT05882630 -NCT05878288 -NCT05882734 -NCT05878405 -NCT05882890 -NCT05878678 -NCT05883007 -NCT05878691 -NCT05883085 -NCT05878782 -NCT05883176 -NCT05878977 -NCT05883449 -NCT05879055 -NCT05883644 -NCT05879068 -NCT05883800 -NCT05879120 -NCT05883852 -NCT05879133 -NCT05883956 -NCT05879146 -NCT05884047 -NCT05879172 -NCT05884099 -NCT05879185 -NCT05884255 -NCT05879211 -NCT05884320 -NCT05879250 -NCT05884333 -NCT05879354 -NCT05884398 -NCT05879367 -NCT05884463 -NCT05879458 -NCT05884632 -NCT05879471 -NCT05884723 -NCT05879484 -NCT05884801 -NCT05879497 -NCT05885386 -NCT05879510 -NCT05885399 -NCT05879627 -NCT05885464 -NCT05879653 -NCT05885776 -NCT05879744 -NCT05885880 -NCT05879783 -NCT05885984 -NCT05879822 -NCT05886036 -NCT05879913 -NCT05886049 -NCT05879926 -NCT05886075 -NCT05879978 -NCT05886140 -NCT05880043 -NCT05886257 -NCT05880082 -NCT05886374 -NCT05880160 -NCT05886439 -NCT05880394 -NCT05886465 -NCT05880446 -NCT05886491 -NCT05880472 -NCT05886634 -NCT05880485 -NCT05898789 -NCT05886764 -NCT05893056 -NCT05886868 -NCT05892718 -NCT05886920 -NCT05893381 -NCT05887102 -NCT05893472 -NCT05887154 -NCT05893654 -NCT05887167 -NCT05893693 -NCT05887297 -NCT05893810 -NCT05887401 -NCT05893888 -NCT05887492 -NCT05893940 -NCT05887505 -NCT05894018 -NCT05887531 -NCT05894083 -NCT05887609 -NCT05894239 -NCT05887661 -NCT05894421 -NCT05887687 -NCT05894447 -NCT05887726 -NCT05894486 -NCT05887882 -NCT05894694 -NCT05887921 -NCT05894824 -NCT05887986 -NCT05894837 -NCT05888402 -NCT05894889 -NCT05888493 -NCT05894915 -NCT05888532 -NCT05895201 -NCT05888584 -NCT05895279 -NCT05888675 -NCT05895344 -NCT05888831 -NCT05895370 -NCT05888844 -NCT05895825 -NCT05888857 -NCT05895864 -NCT05889091 -NCT05895994 -NCT05889221 -NCT05896046 -NCT05889247 -NCT05896059 -NCT05889390 -NCT05896163 -NCT05889728 -NCT05896189 -NCT05889780 -NCT05896228 -NCT05889871 -NCT05896371 -NCT05890287 -NCT05896449 -NCT05890339 -NCT05896566 -NCT05890352 -NCT05896774 -NCT05890677 -NCT05896787 -NCT05890781 -NCT05896813 -NCT05890859 -NCT05896839 -NCT05890872 -NCT05896865 -NCT05891028 -NCT05896904 -NCT05891080 -NCT05897138 -NCT05891093 -NCT05897268 -NCT05891171 -NCT05897658 -NCT05891340 -NCT05897749 -NCT05891431 -NCT05897983 -NCT05891470 -NCT05898009 -NCT05891561 -NCT05898074 -NCT05891821 -NCT05898256 -NCT05892068 -NCT05898373 -NCT05892146 -NCT05898399 -NCT05892237 -NCT05898451 -NCT05892289 -NCT05898594 -NCT05892354 -NCT05898646 -NCT05892393 -NCT05898763 -NCT05892653 -NCT05909423 -NCT05898828 -NCT05904340 -NCT05898854 -NCT05904236 -NCT05899049 -NCT05904379 -NCT05899270 -NCT05904457 -NCT05899361 -NCT05904496 -NCT05899465 -NCT05904522 -NCT05899608 -NCT05904665 -NCT05899647 -NCT05904704 -NCT05899985 -NCT05904730 -NCT05900089 -NCT05904886 -NCT05900206 -NCT05904964 -NCT05900219 -NCT05905250 -NCT05900258 -NCT05905276 -NCT05900648 -NCT05905315 -NCT05900765 -NCT05905341 -NCT05900882 -NCT05905354 -NCT05900895 -NCT05905614 -NCT05900908 -NCT05905887 -NCT05900921 -NCT05906277 -NCT05900973 -NCT05906329 -NCT05900986 -NCT05906524 -NCT05901142 -NCT05906537 -NCT05901194 -NCT05906615 -NCT05901285 -NCT05906862 -NCT05901324 -NCT05906914 -NCT05901428 -NCT05907057 -NCT05901519 -NCT05907122 -NCT05901545 -NCT05907187 -NCT05901779 -NCT05907265 -NCT05901844 -NCT05907304 -NCT05901935 -NCT05907512 -NCT05901974 -NCT05907603 -NCT05902169 -NCT05907642 -NCT05902247 -NCT05907759 -NCT05902260 -NCT05907941 -NCT05902377 -NCT05907954 -NCT05902390 -NCT05907980 -NCT05902520 -NCT05908396 -NCT05902533 -NCT05908409 -NCT05902585 -NCT05908435 -NCT05902637 -NCT05908643 -NCT05902728 -NCT05908734 -NCT05902845 -NCT05908747 -NCT05902988 -NCT05908773 -NCT05903092 -NCT05908786 -NCT05903131 -NCT05908838 -NCT05903456 -NCT05908916 -NCT05903703 -NCT05909059 -NCT05903807 -NCT05909098 -NCT05903833 -NCT05909111 -NCT05903885 -NCT05909202 -NCT05903937 -NCT05909241 -NCT05904015 -NCT05909293 -NCT05904080 -NCT05909332 -NCT05904106 -NCT05909397 -NCT05904119 -NCT05919147 -NCT05909436 -NCT05914142 -NCT05909527 -NCT05914116 -NCT05909618 -NCT05914168 -NCT05909813 -NCT05914376 -NCT05909826 -NCT05914389 -NCT05909904 -NCT05914402 -NCT05909995 -NCT05914415 -NCT05910034 -NCT05914545 -NCT05910177 -NCT05914597 -NCT05910190 -NCT05914610 -NCT05910229 -NCT05914662 -NCT05910398 -NCT05914753 -NCT05910541 -NCT05914766 -NCT05910697 -NCT05914831 -NCT05910801 -NCT05914935 -NCT05910827 -NCT05915221 -NCT05910970 -NCT05915325 -NCT05911217 -NCT05915351 -NCT05911230 -NCT05915442 -NCT05911243 -NCT05915481 -NCT05911295 -NCT05915572 -NCT05911308 -NCT05916001 -NCT05911321 -NCT05916196 -NCT05911373 -NCT05916248 -NCT05911425 -NCT05916261 -NCT05911464 -NCT05916313 -NCT05911633 -NCT05916690 -NCT05911672 -NCT05917145 -NCT05911789 -NCT05917158 -NCT05911867 -NCT05917171 -NCT05911958 -NCT05917301 -NCT05911984 -NCT05917405 -NCT05912075 -NCT05917431 -NCT05912166 -NCT05917470 -NCT05912205 -NCT05917860 -NCT05912231 -NCT05917964 -NCT05912244 -NCT05917990 -NCT05912257 -NCT05918055 -NCT05912465 -NCT05918094 -NCT05912569 -NCT05918198 -NCT05912816 -NCT05918224 -NCT05912881 -NCT05918250 -NCT05913037 -NCT05918263 -NCT05913089 -NCT05918276 -NCT05913115 -NCT05918302 -NCT05913245 -NCT05918328 -NCT05913388 -NCT05918419 -NCT05913414 -NCT05918445 -NCT05913427 -NCT05918640 -NCT05913570 -NCT05918692 -NCT05913661 -NCT05918770 -NCT05913674 -NCT05918783 -NCT05913713 -NCT05919030 -NCT05913804 -NCT05919095 -NCT05913895 -NCT05919108 -NCT05914077 -NCT05932212 -NCT05919212 -NCT05926102 -NCT05919238 -NCT05925530 -NCT05919264 -NCT05926128 -NCT05919290 -NCT05926180 -NCT05919329 -NCT05926206 -NCT05919381 -NCT05926336 -NCT05919524 -NCT05926427 -NCT05919537 -NCT05926492 -NCT05920135 -NCT05926700 -NCT05920343 -NCT05926726 -NCT05920356 -NCT05926765 -NCT05920798 -NCT05926960 -NCT05920850 -NCT05927142 -NCT05920863 -NCT05927571 -NCT05920876 -NCT05927610 -NCT05920928 -NCT05927779 -NCT05920980 -NCT05927818 -NCT05921149 -NCT05927844 -NCT05921253 -NCT05927857 -NCT05921331 -NCT05928156 -NCT05921552 -NCT05928312 -NCT05921760 -NCT05928325 -NCT05921786 -NCT05928429 -NCT05921812 -NCT05928780 -NCT05921916 -NCT05928806 -NCT05921942 -NCT05928897 -NCT05922345 -NCT05928962 -NCT05922358 -NCT05929222 -NCT05922384 -NCT05929235 -NCT05922423 -NCT05929300 -NCT05922501 -NCT05929456 -NCT05922553 -NCT05929495 -NCT05922566 -NCT05929612 -NCT05922904 -NCT05929664 -NCT05922930 -NCT05929690 -NCT05923008 -NCT05929716 -NCT05923177 -NCT05929768 -NCT05923190 -NCT05929820 -NCT05923242 -NCT05929885 -NCT05923255 -NCT05930119 -NCT05923268 -NCT05930288 -NCT05923684 -NCT05930457 -NCT05924074 -NCT05930483 -NCT05924100 -NCT05930496 -NCT05924256 -NCT05930665 -NCT05924672 -NCT05930938 -NCT05924750 -NCT05930951 -NCT05924776 -NCT05931263 -NCT05924841 -NCT05931302 -NCT05924880 -NCT05931328 -NCT05924906 -NCT05931393 -NCT05924997 -NCT05931445 -NCT05925257 -NCT05931874 -NCT05925361 -NCT05932173 -NCT05925413 -NCT05932199 -NCT05925491 -NCT05943795 -NCT05932264 -NCT05939180 -NCT05932511 -NCT05939063 -NCT05932667 -NCT05939310 -NCT05932680 -NCT05939414 -NCT05932758 -NCT05939440 -NCT05932810 -NCT05939661 -NCT05932862 -NCT05939687 -NCT05933070 -NCT05939791 -NCT05933122 -NCT05939830 -NCT05933239 -NCT05939856 -NCT05933265 -NCT05940051 -NCT05933395 -NCT05940064 -NCT05933577 -NCT05940116 -NCT05933668 -NCT05940181 -NCT05933811 -NCT05940259 -NCT05933980 -NCT05940298 -NCT05934084 -NCT05940493 -NCT05934097 -NCT05940532 -NCT05934331 -NCT05940571 -NCT05934448 -NCT05940740 -NCT05934513 -NCT05940844 -NCT05934539 -NCT05940896 -NCT05934838 -NCT05940961 -NCT05934851 -NCT05941156 -NCT05934929 -NCT05941169 -NCT05934981 -NCT05941234 -NCT05935098 -NCT05941299 -NCT05935150 -NCT05941325 -NCT05935579 -NCT05941338 -NCT05935748 -NCT05941481 -NCT05935774 -NCT05941507 -NCT05935995 -NCT05941520 -NCT05936034 -NCT05941585 -NCT05936229 -NCT05941741 -NCT05936359 -NCT05941858 -NCT05936658 -NCT05941897 -NCT05936736 -NCT05941936 -NCT05936853 -NCT05942001 -NCT05936931 -NCT05942300 -NCT05937269 -NCT05942378 -NCT05937295 -NCT05942508 -NCT05937399 -NCT05942560 -NCT05937425 -NCT05942573 -NCT05937438 -NCT05942794 -NCT05937620 -NCT05942885 -NCT05937906 -NCT05943041 -NCT05937919 -NCT05943067 -NCT05938127 -NCT05943106 -NCT05938270 -NCT05943119 -NCT05938296 -NCT05943210 -NCT05938322 -NCT05943262 -NCT05938374 -NCT05943301 -NCT05938387 -NCT05943314 -NCT05938504 -NCT05943444 -NCT05938686 -NCT05943496 -NCT05939037 -NCT05954117 -NCT05943990 -NCT05949541 -NCT05944185 -NCT05949424 -NCT05944224 -NCT05949606 -NCT05944237 -NCT05949619 -NCT05944276 -NCT05949632 -NCT05944562 -NCT05949684 -NCT05944783 -NCT05949762 -NCT05944809 -NCT05949775 -NCT05944900 -NCT05949931 -NCT05944913 -NCT05949944 -NCT05944978 -NCT05949983 -NCT05945082 -NCT05949996 -NCT05945368 -NCT05950113 -NCT05945407 -NCT05950165 -NCT05945524 -NCT05950204 -NCT05945797 -NCT05950334 -NCT05945823 -NCT05950399 -NCT05945849 -NCT05950464 -NCT05945875 -NCT05950594 -NCT05945901 -NCT05950737 -NCT05946070 -NCT05950802 -NCT05946161 -NCT05950815 -NCT05946213 -NCT05950867 -NCT05946226 -NCT05950945 -NCT05946460 -NCT05950997 -NCT05946603 -NCT05951127 -NCT05946759 -NCT05951179 -NCT05946824 -NCT05951231 -NCT05946993 -NCT05951608 -NCT05947045 -NCT05951816 -NCT05947136 -NCT05951842 -NCT05947188 -NCT05951855 -NCT05947357 -NCT05951959 -NCT05947383 -NCT05952024 -NCT05947474 -NCT05952037 -NCT05947487 -NCT05952128 -NCT05947500 -NCT05952141 -NCT05947513 -NCT05952310 -NCT05947695 -NCT05952375 -NCT05947825 -NCT05952453 -NCT05947838 -NCT05952492 -NCT05947851 -NCT05952557 -NCT05948033 -NCT05952687 -NCT05948072 -NCT05952804 -NCT05948449 -NCT05952934 -NCT05948462 -NCT05952947 -NCT05948475 -NCT05953168 -NCT05948618 -NCT05953181 -NCT05948657 -NCT05953337 -NCT05948813 -NCT05953350 -NCT05948826 -NCT05953662 -NCT05948865 -NCT05953883 -NCT05949021 -NCT05953961 -NCT05949099 -NCT05954078 -NCT05949125 -NCT05954091 -NCT05949333 -NCT05965479 -NCT05954143 -NCT05959473 -NCT05954312 -NCT05959395 -NCT05954429 -NCT05959564 -NCT05954442 -NCT05959694 -NCT05954676 -NCT05959811 -NCT05954702 -NCT05959889 -NCT05954858 -NCT05960149 -NCT05954871 -NCT05960188 -NCT05954897 -NCT05960201 -NCT05955105 -NCT05960578 -NCT05955157 -NCT05960630 -NCT05955170 -NCT05960669 -NCT05955209 -NCT05960773 -NCT05955222 -NCT05960955 -NCT05955248 -NCT05961111 -NCT05955261 -NCT05961124 -NCT05955391 -NCT05961215 -NCT05955508 -NCT05961410 -NCT05955521 -NCT05961423 -NCT05955677 -NCT05961514 -NCT05955833 -NCT05961696 -NCT05955924 -NCT05961709 -NCT05956041 -NCT05961761 -NCT05956093 -NCT05961839 -NCT05956457 -NCT05961982 -NCT05956587 -NCT05962021 -NCT05956639 -NCT05962242 -NCT05956782 -NCT05962450 -NCT05956821 -NCT05962502 -NCT05956977 -NCT05962541 -NCT05956990 -NCT05963035 -NCT05957016 -NCT05963074 -NCT05957042 -NCT05963087 -NCT05957068 -NCT05963217 -NCT05957081 -NCT05963334 -NCT05957250 -NCT05963347 -NCT05957289 -NCT05963386 -NCT05957367 -NCT05963412 -NCT05957471 -NCT05963490 -NCT05957510 -NCT05963724 -NCT05957536 -NCT05963867 -NCT05957640 -NCT05963971 -NCT05957653 -NCT05963984 -NCT05957679 -NCT05963997 -NCT05957757 -NCT05964101 -NCT05957822 -NCT05964153 -NCT05957939 -NCT05964270 -NCT05958082 -NCT05964361 -NCT05958121 -NCT05964530 -NCT05958199 -NCT05964543 -NCT05958316 -NCT05964569 -NCT05958719 -NCT05965102 -NCT05959226 -NCT05965141 -NCT05959265 -NCT05965154 -NCT05959291 -NCT05965466 -NCT05959356 -NCT05977998 -NCT05965505 -NCT05972135 -NCT05965531 -NCT05971862 -NCT05965817 -NCT05972460 -NCT05965856 -NCT05972577 -NCT05966233 -NCT05972655 -NCT05966246 -NCT05972720 -NCT05966584 -NCT05972941 -NCT05967104 -NCT05973149 -NCT05967182 -NCT05973162 -NCT05967286 -NCT05973227 -NCT05967416 -NCT05973266 -NCT05967533 -NCT05973487 -NCT05967689 -NCT05973656 -NCT05967884 -NCT05973773 -NCT05968144 -NCT05973864 -NCT05968157 -NCT05973903 -NCT05968170 -NCT05974059 -NCT05968326 -NCT05974085 -NCT05968677 -NCT05974449 -NCT05968690 -NCT05974774 -NCT05968768 -NCT05974995 -NCT05968846 -NCT05975073 -NCT05968898 -NCT05975151 -NCT05968963 -NCT05975190 -NCT05969041 -NCT05975307 -NCT05969171 -NCT05975333 -NCT05969184 -NCT05975463 -NCT05969314 -NCT05975619 -NCT05969470 -NCT05975645 -NCT05969496 -NCT05975736 -NCT05969691 -NCT05975749 -NCT05969704 -NCT05975944 -NCT05969847 -NCT05976282 -NCT05969860 -NCT05976334 -NCT05969899 -NCT05976412 -NCT05970016 -NCT05976490 -NCT05970107 -NCT05976555 -NCT05970133 -NCT05976568 -NCT05970198 -NCT05976763 -NCT05970250 -NCT05976815 -NCT05970302 -NCT05976828 -NCT05970497 -NCT05976893 -NCT05970627 -NCT05976906 -NCT05970666 -NCT05976997 -NCT05970705 -NCT05977036 -NCT05970757 -NCT05977062 -NCT05970822 -NCT05977322 -NCT05970900 -NCT05977478 -NCT05971056 -NCT05977504 -NCT05971069 -NCT05977673 -NCT05971108 -NCT05977738 -NCT05971199 -NCT05977764 -NCT05971251 -NCT05977777 -NCT05971576 -NCT05977803 -NCT05971589 -NCT05977907 -NCT05971628 -NCT05986851 -NCT05978050 -NCT05982301 -NCT05978102 -NCT05982275 -NCT05978128 -NCT05982379 -NCT05978193 -NCT05982418 -NCT05978232 -NCT05982496 -NCT05978284 -NCT05982522 -NCT05978349 -NCT05982626 -NCT05978401 -NCT05982678 -NCT05978492 -NCT05982756 -NCT05978570 -NCT05982834 -NCT05978609 -NCT05983094 -NCT05978648 -NCT05983107 -NCT05978661 -NCT05983133 -NCT05978739 -NCT05983146 -NCT05978882 -NCT05983198 -NCT05978960 -NCT05983237 -NCT05979064 -NCT05983276 -NCT05979155 -NCT05983367 -NCT05979220 -NCT05983380 -NCT05979298 -NCT05983406 -NCT05979363 -NCT05983432 -NCT05979610 -NCT05983523 -NCT05979740 -NCT05983783 -NCT05979792 -NCT05983835 -NCT05979818 -NCT05983965 -NCT05979857 -NCT05984147 -NCT05979883 -NCT05984199 -NCT05979909 -NCT05984277 -NCT05979961 -NCT05984342 -NCT05979987 -NCT05984485 -NCT05980000 -NCT05984511 -NCT05980169 -NCT05984589 -NCT05980182 -NCT05984602 -NCT05980325 -NCT05984680 -NCT05980416 -NCT05984797 -NCT05980481 -NCT05984810 -NCT05980507 -NCT05984888 -NCT05980598 -NCT05984914 -NCT05980624 -NCT05985109 -NCT05980689 -NCT05985161 -NCT05980702 -NCT05985187 -NCT05980715 -NCT05985252 -NCT05981001 -NCT05985278 -NCT05981014 -NCT05985655 -NCT05981066 -NCT05985681 -NCT05981157 -NCT05985707 -NCT05981209 -NCT05985798 -NCT05981235 -NCT05985824 -NCT05981326 -NCT05985954 -NCT05981703 -NCT05986071 -NCT05981924 -NCT05986227 -NCT05982080 -NCT05986240 -NCT05982093 -NCT05986266 -NCT05982184 -NCT05986318 -NCT05982197 -NCT05986331 -NCT05982223 -NCT05998135 -NCT05986981 -NCT05991583 -NCT05987098 -NCT05991544 -NCT05987176 -NCT05991752 -NCT05987241 -NCT05991908 -NCT05987332 -NCT05991973 -NCT05987345 -NCT05992220 -NCT05987358 -NCT05992363 -NCT05987514 -NCT05992584 -NCT05987644 -NCT05992597 -NCT05987709 -NCT05992610 -NCT05987826 -NCT05992740 -NCT05987930 -NCT05992870 -NCT05987956 -NCT05993273 -NCT05988060 -NCT05993299 -NCT05988372 -NCT05993559 -NCT05988645 -NCT05993858 -NCT05988736 -NCT05993949 -NCT05988814 -NCT05994001 -NCT05988892 -NCT05994131 -NCT05988918 -NCT05994157 -NCT05988970 -NCT05994170 -NCT05989022 -NCT05994235 -NCT05989204 -NCT05994300 -NCT05989347 -NCT05994339 -NCT05989425 -NCT05994456 -NCT05989542 -NCT05994521 -NCT05989724 -NCT05994690 -NCT05989776 -NCT05994859 -NCT05989789 -NCT05995028 -NCT05989828 -NCT05995041 -NCT05989854 -NCT05995483 -NCT05989893 -NCT05995808 -NCT05989997 -NCT05995860 -NCT05990127 -NCT05995990 -NCT05990192 -NCT05996107 -NCT05990231 -NCT05996185 -NCT05990244 -NCT05996367 -NCT05990257 -NCT05996432 -NCT05990270 -NCT05996445 -NCT05990426 -NCT05996484 -NCT05990452 -NCT05996523 -NCT05990465 -NCT05996653 -NCT05990543 -NCT05996783 -NCT05990556 -NCT05996796 -NCT05990621 -NCT05996952 -NCT05990634 -NCT05997017 -NCT05990738 -NCT05997056 -NCT05990751 -NCT05997329 -NCT05990803 -NCT05997342 -NCT05990920 -NCT05997459 -NCT05990946 -NCT05997524 -NCT05990985 -NCT05997589 -NCT05990998 -NCT05997602 -NCT05991102 -NCT05997615 -NCT05991349 -NCT05998122 -NCT05991388 -NCT06008275 -NCT05998278 -NCT06003998 -NCT05998447 -NCT06003673 -NCT05998460 -NCT06004011 -NCT05998642 -NCT06004141 -NCT05998655 -NCT06004167 -NCT05998928 -NCT06004245 -NCT05998941 -NCT06004336 -NCT05998993 -NCT06004661 -NCT05999149 -NCT06004765 -NCT05999214 -NCT06004921 -NCT05999227 -NCT06005025 -NCT05999292 -NCT06005116 -NCT05999357 -NCT06005259 -NCT05999396 -NCT06005324 -NCT05999630 -NCT06005337 -NCT05999812 -NCT06005493 -NCT05999968 -NCT06005649 -NCT05999994 -NCT06005740 -NCT06000033 -NCT06005818 -NCT06000046 -NCT06005870 -NCT06000358 -NCT06005974 -NCT06000553 -NCT06006013 -NCT06000683 -NCT06006026 -NCT06000787 -NCT06006104 -NCT06000917 -NCT06006117 -NCT06001086 -NCT06006169 -NCT06001151 -NCT06006273 -NCT06001255 -NCT06006286 -NCT06001268 -NCT06006299 -NCT06001281 -NCT06006338 -NCT06001372 -NCT06006390 -NCT06001385 -NCT06006403 -NCT06001476 -NCT06006650 -NCT06001567 -NCT06006741 -NCT06001580 -NCT06006793 -NCT06001619 -NCT06006806 -NCT06001658 -NCT06006923 -NCT06001671 -NCT06006949 -NCT06001684 -NCT06007001 -NCT06001723 -NCT06007092 -NCT06001749 -NCT06007118 -NCT06001762 -NCT06007482 -NCT06001788 -NCT06007586 -NCT06002022 -NCT06007690 -NCT06002126 -NCT06007729 -NCT06002269 -NCT06007794 -NCT06002425 -NCT06007846 -NCT06002659 -NCT06007911 -NCT06002789 -NCT06007924 -NCT06003075 -NCT06007937 -NCT06003179 -NCT06008054 -NCT06003218 -NCT06008093 -NCT06003231 -NCT06008106 -NCT06003335 -NCT06008119 -NCT06003556 -NCT06008158 -NCT06003621 -NCT06018363 -NCT06008288 -NCT06014372 -NCT06008301 -NCT06014255 -NCT06008366 -NCT06014398 -NCT06008379 -NCT06014450 -NCT06008405 -NCT06014502 -NCT06008483 -NCT06014528 -NCT06008522 -NCT06014658 -NCT06008574 -NCT06014762 -NCT06008730 -NCT06014827 -NCT06008925 -NCT06014853 -NCT06008977 -NCT06014905 -NCT06009029 -NCT06014944 -NCT06009107 -NCT06015048 -NCT06009224 -NCT06015100 -NCT06009627 -NCT06015113 -NCT06009848 -NCT06015126 -NCT06009861 -NCT06015269 -NCT06009926 -NCT06015295 -NCT06010017 -NCT06015321 -NCT06010095 -NCT06015360 -NCT06010160 -NCT06015503 -NCT06010212 -NCT06015542 -NCT06010277 -NCT06015568 -NCT06010303 -NCT06015659 -NCT06010329 -NCT06015724 -NCT06010342 -NCT06015854 -NCT06010355 -NCT06015880 -NCT06010381 -NCT06015932 -NCT06010680 -NCT06016062 -NCT06010862 -NCT06016075 -NCT06010875 -NCT06016270 -NCT06010888 -NCT06016335 -NCT06010901 -NCT06016387 -NCT06011109 -NCT06016400 -NCT06011278 -NCT06016413 -NCT06011291 -NCT06016452 -NCT06011304 -NCT06016504 -NCT06011473 -NCT06016569 -NCT06011499 -NCT06016725 -NCT06011772 -NCT06016738 -NCT06012435 -NCT06016855 -NCT06012695 -NCT06016920 -NCT06012708 -NCT06017063 -NCT06012734 -NCT06017141 -NCT06012929 -NCT06017258 -NCT06013111 -NCT06017284 -NCT06013176 -NCT06017297 -NCT06013423 -NCT06017323 -NCT06013527 -NCT06017557 -NCT06013618 -NCT06017583 -NCT06013774 -NCT06018116 -NCT06013904 -NCT06018129 -NCT06013943 -NCT06018246 -NCT06014073 -NCT06018311 -NCT06014086 -NCT06018337 -NCT06014190 -NCT06029998 -NCT06018506 -NCT06024343 -NCT06018688 -NCT06024187 -NCT06018714 -NCT06024603 -NCT06018883 -NCT06024772 -NCT06018896 -NCT06024824 -NCT06019013 -NCT06024941 -NCT06019130 -NCT06024954 -NCT06019312 -NCT06024980 -NCT06019325 -NCT06025747 -NCT06019468 -NCT06025799 -NCT06019702 -NCT06026046 -NCT06019988 -NCT06026111 -NCT06020066 -NCT06026189 -NCT06020352 -NCT06026254 -NCT06020430 -NCT06026319 -NCT06020443 -NCT06026371 -NCT06020573 -NCT06026384 -NCT06020651 -NCT06026410 -NCT06020755 -NCT06026501 -NCT06020833 -NCT06026605 -NCT06020885 -NCT06026631 -NCT06020989 -NCT06026657 -NCT06021015 -NCT06026774 -NCT06021496 -NCT06026800 -NCT06021600 -NCT06026878 -NCT06021626 -NCT06026943 -NCT06021678 -NCT06026995 -NCT06022003 -NCT06027086 -NCT06022029 -NCT06027242 -NCT06022159 -NCT06027268 -NCT06022250 -NCT06027346 -NCT06022276 -NCT06027515 -NCT06022289 -NCT06027567 -NCT06022341 -NCT06027619 -NCT06022692 -NCT06027632 -NCT06022757 -NCT06027892 -NCT06022770 -NCT06027957 -NCT06022822 -NCT06027983 -NCT06022861 -NCT06028022 -NCT06022887 -NCT06028048 -NCT06022900 -NCT06028152 -NCT06022939 -NCT06028373 -NCT06022965 -NCT06028633 -NCT06022978 -NCT06028672 -NCT06023147 -NCT06028737 -NCT06023212 -NCT06028932 -NCT06023277 -NCT06029036 -NCT06023368 -NCT06029127 -NCT06023420 -NCT06029218 -NCT06023576 -NCT06029270 -NCT06023641 -NCT06029309 -NCT06023758 -NCT06029517 -NCT06023862 -NCT06029621 -NCT06023875 -NCT06029816 -NCT06024031 -NCT06029829 -NCT06024174 -NCT06041490 -NCT06030011 -NCT06035679 -NCT06030037 -NCT06035614 -NCT06030089 -NCT06035731 -NCT06030180 -NCT06035744 -NCT06030258 -NCT06035757 -NCT06030427 -NCT06036121 -NCT06030440 -NCT06036355 -NCT06030622 -NCT06036407 -NCT06030804 -NCT06036706 -NCT06030817 -NCT06036745 -NCT06030895 -NCT06036810 -NCT06030934 -NCT06036836 -NCT06031129 -NCT06037018 -NCT06031181 -NCT06037239 -NCT06031246 -NCT06037317 -NCT06031285 -NCT06037382 -NCT06031441 -NCT06037655 -NCT06031480 -NCT06037733 -NCT06031493 -NCT06037863 -NCT06031558 -NCT06037902 -NCT06031584 -NCT06037941 -NCT06031597 -NCT06037954 -NCT06031688 -NCT06037980 -NCT06032052 -NCT06038032 -NCT06032104 -NCT06038396 -NCT06032338 -NCT06038461 -NCT06032390 -NCT06038526 -NCT06032663 -NCT06038539 -NCT06032728 -NCT06038578 -NCT06032845 -NCT06038604 -NCT06032910 -NCT06039111 -NCT06032936 -NCT06039202 -NCT06032962 -NCT06039280 -NCT06033092 -NCT06039306 -NCT06033118 -NCT06039371 -NCT06033183 -NCT06039384 -NCT06033586 -NCT06039488 -NCT06033729 -NCT06039631 -NCT06033794 -NCT06039644 -NCT06033820 -NCT06039709 -NCT06034002 -NCT06039891 -NCT06034015 -NCT06039956 -NCT06034197 -NCT06040099 -NCT06034275 -NCT06040125 -NCT06034431 -NCT06040177 -NCT06034470 -NCT06040320 -NCT06034561 -NCT06040541 -NCT06034860 -NCT06040762 -NCT06034977 -NCT06040801 -NCT06035133 -NCT06040970 -NCT06035211 -NCT06040983 -NCT06035224 -NCT06041035 -NCT06035263 -NCT06041061 -NCT06035497 -NCT06041425 -NCT06035510 -NCT06041477 -NCT06035549 -NCT06050954 -NCT06041503 -NCT06046664 -NCT06041516 -NCT06046586 -NCT06041607 -NCT06046742 -NCT06041698 -NCT06046755 -NCT06041724 -NCT06046794 -NCT06041776 -NCT06046846 -NCT06041802 -NCT06046963 -NCT06041945 -NCT06047015 -NCT06042023 -NCT06047080 -NCT06042400 -NCT06047184 -NCT06042569 -NCT06047197 -NCT06042725 -NCT06047301 -NCT06042816 -NCT06047379 -NCT06042894 -NCT06047431 -NCT06042998 -NCT06047509 -NCT06043323 -NCT06047535 -NCT06043427 -NCT06047626 -NCT06043466 -NCT06047808 -NCT06043674 -NCT06047860 -NCT06043713 -NCT06047886 -NCT06043765 -NCT06047990 -NCT06043817 -NCT06048094 -NCT06043973 -NCT06048133 -NCT06043999 -NCT06048146 -NCT06044025 -NCT06048250 -NCT06044142 -NCT06048315 -NCT06044220 -NCT06048367 -NCT06044311 -NCT06048484 -NCT06044441 -NCT06048601 -NCT06044506 -NCT06048705 -NCT06044623 -NCT06048718 -NCT06044857 -NCT06048822 -NCT06045052 -NCT06048913 -NCT06045091 -NCT06048926 -NCT06045195 -NCT06049030 -NCT06045247 -NCT06049134 -NCT06045260 -NCT06049212 -NCT06045286 -NCT06049290 -NCT06045572 -NCT06049355 -NCT06045585 -NCT06049576 -NCT06045689 -NCT06049667 -NCT06045767 -NCT06049693 -NCT06045806 -NCT06049836 -NCT06045910 -NCT06049901 -NCT06045975 -NCT06049966 -NCT06046014 -NCT06050122 -NCT06046040 -NCT06050200 -NCT06046066 -NCT06050239 -NCT06046131 -NCT06050252 -NCT06046274 -NCT06050317 -NCT06046287 -NCT06050395 -NCT06046313 -NCT06050512 -NCT06046469 -NCT06050694 -NCT06046482 -NCT06050707 -NCT06046495 -NCT06050941 -NCT06046573 -NCT06059560 -NCT06050980 -NCT06055621 -NCT06051136 -NCT06055543 -NCT06051162 -NCT06055738 -NCT06051214 -NCT06055790 -NCT06051240 -NCT06055803 -NCT06051331 -NCT06055816 -NCT06051695 -NCT06055894 -NCT06051747 -NCT06056024 -NCT06051760 -NCT06056115 -NCT06051851 -NCT06056128 -NCT06051942 -NCT06056310 -NCT06052033 -NCT06056323 -NCT06052085 -NCT06056336 -NCT06052098 -NCT06056362 -NCT06052202 -NCT06056414 -NCT06052306 -NCT06056505 -NCT06052332 -NCT06056752 -NCT06052423 -NCT06056791 -NCT06052449 -NCT06056804 -NCT06052488 -NCT06056830 -NCT06052618 -NCT06056843 -NCT06052683 -NCT06056895 -NCT06052696 -NCT06057038 -NCT06052826 -NCT06057168 -NCT06052839 -NCT06057298 -NCT06052852 -NCT06057350 -NCT06053086 -NCT06057402 -NCT06053099 -NCT06057571 -NCT06053268 -NCT06057610 -NCT06053658 -NCT06057636 -NCT06053996 -NCT06057675 -NCT06054048 -NCT06057766 -NCT06054113 -NCT06057831 -NCT06054178 -NCT06057922 -NCT06054191 -NCT06057935 -NCT06054308 -NCT06057948 -NCT06054477 -NCT06058312 -NCT06054555 -NCT06058377 -NCT06054776 -NCT06058572 -NCT06054789 -NCT06058650 -NCT06054841 -NCT06058663 -NCT06054867 -NCT06058793 -NCT06054906 -NCT06058936 -NCT06054932 -NCT06058988 -NCT06054984 -NCT06059001 -NCT06055075 -NCT06059014 -NCT06055088 -NCT06059118 -NCT06055153 -NCT06059170 -NCT06055166 -NCT06059261 -NCT06055231 -NCT06059300 -NCT06055296 -NCT06059391 -NCT06055348 -NCT06059469 -NCT06055387 -NCT06059495 -NCT06055439 -NCT06059508 -NCT06055465 -NCT06059547 -NCT06055517 -NCT06071052 -NCT06059690 -NCT06065371 -NCT06059859 -NCT06065358 -NCT06059885 -NCT06065423 -NCT06060080 -NCT06065449 -NCT06060405 -NCT06065462 -NCT06060431 -NCT06065592 -NCT06060587 -NCT06065748 -NCT06060613 -NCT06065813 -NCT06060704 -NCT06065891 -NCT06060782 -NCT06066138 -NCT06060847 -NCT06066203 -NCT06060899 -NCT06066216 -NCT06060938 -NCT06066242 -NCT06060964 -NCT06066333 -NCT06061094 -NCT06066346 -NCT06061146 -NCT06066359 -NCT06061172 -NCT06066424 -NCT06061276 -NCT06066437 -NCT06061302 -NCT06066931 -NCT06061328 -NCT06067048 -NCT06061432 -NCT06067061 -NCT06061445 -NCT06067269 -NCT06061666 -NCT06067321 -NCT06061705 -NCT06067438 -NCT06061809 -NCT06067503 -NCT06061835 -NCT06067581 -NCT06061874 -NCT06067620 -NCT06062225 -NCT06067776 -NCT06062355 -NCT06067841 -NCT06062420 -NCT06068075 -NCT06062485 -NCT06068153 -NCT06062498 -NCT06068387 -NCT06062563 -NCT06068400 -NCT06062602 -NCT06068621 -NCT06062641 -NCT06068868 -NCT06062745 -NCT06068881 -NCT06062810 -NCT06068985 -NCT06062823 -NCT06069297 -NCT06062901 -NCT06069453 -NCT06063018 -NCT06069570 -NCT06063070 -NCT06069648 -NCT06063317 -NCT06069726 -NCT06063343 -NCT06069778 -NCT06063486 -NCT06069830 -NCT06063551 -NCT06069947 -NCT06063603 -NCT06069960 -NCT06063681 -NCT06070012 -NCT06063941 -NCT06070155 -NCT06064019 -NCT06070324 -NCT06064097 -NCT06070363 -NCT06064149 -NCT06070376 -NCT06064344 -NCT06070636 -NCT06064812 -NCT06070740 -NCT06064877 -NCT06070870 -NCT06064903 -NCT06071013 -NCT06065059 -NCT06082570 -NCT06071234 -NCT06077877 -NCT06071286 -NCT06077760 -NCT06071624 -NCT06077981 -NCT06071650 -NCT06078306 -NCT06071845 -NCT06078384 -NCT06071871 -NCT06078657 -NCT06071897 -NCT06078670 -NCT06072027 -NCT06078709 -NCT06072131 -NCT06078787 -NCT06072586 -NCT06078800 -NCT06072612 -NCT06078813 -NCT06072781 -NCT06078982 -NCT06072807 -NCT06079112 -NCT06072833 -NCT06079164 -NCT06072911 -NCT06079333 -NCT06072989 -NCT06079346 -NCT06073067 -NCT06079671 -NCT06073184 -NCT06079697 -NCT06073223 -NCT06079879 -NCT06073353 -NCT06079970 -NCT06073483 -NCT06079983 -NCT06073496 -NCT06080009 -NCT06073626 -NCT06080061 -NCT06073717 -NCT06080113 -NCT06073730 -NCT06080165 -NCT06073821 -NCT06080191 -NCT06073951 -NCT06080204 -NCT06074029 -NCT06080503 -NCT06074107 -NCT06080620 -NCT06074484 -NCT06080711 -NCT06074497 -NCT06080776 -NCT06074510 -NCT06080841 -NCT06074536 -NCT06080854 -NCT06074588 -NCT06080984 -NCT06074666 -NCT06081127 -NCT06074692 -NCT06081244 -NCT06074705 -NCT06081322 -NCT06074757 -NCT06081400 -NCT06075043 -NCT06081478 -NCT06075238 -NCT06081582 -NCT06075264 -NCT06081595 -NCT06075498 -NCT06081647 -NCT06075810 -NCT06081673 -NCT06075849 -NCT06081686 -NCT06075953 -NCT06081829 -NCT06076135 -NCT06081907 -NCT06076252 -NCT06081920 -NCT06076291 -NCT06081959 -NCT06076616 -NCT06082102 -NCT06076837 -NCT06082128 -NCT06077071 -NCT06082167 -NCT06077110 -NCT06082180 -NCT06077123 -NCT06082492 -NCT06077487 -NCT06082505 -NCT06077500 -NCT06082557 -NCT06077591 -NCT06091696 -NCT06082596 -NCT06086522 -NCT06082635 -NCT06086457 -NCT06082648 -NCT06086704 -NCT06082804 -NCT06086925 -NCT06082882 -NCT06086990 -NCT06082934 -NCT06087068 -NCT06082947 -NCT06087237 -NCT06082960 -NCT06087263 -NCT06083207 -NCT06087289 -NCT06083454 -NCT06087341 -NCT06083662 -NCT06087393 -NCT06083701 -NCT06087419 -NCT06083844 -NCT06087432 -NCT06083857 -NCT06087614 -NCT06083870 -NCT06087653 -NCT06083883 -NCT06087718 -NCT06083896 -NCT06087770 -NCT06083922 -NCT06087783 -NCT06084195 -NCT06087861 -NCT06084208 -NCT06088004 -NCT06084234 -NCT06088030 -NCT06084286 -NCT06088056 -NCT06084299 -NCT06088290 -NCT06084338 -NCT06088381 -NCT06084416 -NCT06088459 -NCT06084481 -NCT06088472 -NCT06084689 -NCT06088654 -NCT06084767 -NCT06088771 -NCT06084780 -NCT06088888 -NCT06084806 -NCT06088940 -NCT06084819 -NCT06089330 -NCT06084845 -NCT06089369 -NCT06084884 -NCT06089382 -NCT06084897 -NCT06089408 -NCT06084936 -NCT06089421 -NCT06084962 -NCT06089954 -NCT06085274 -NCT06090162 -NCT06085313 -NCT06090214 -NCT06085365 -NCT06090266 -NCT06085404 -NCT06090318 -NCT06085495 -NCT06090539 -NCT06085560 -NCT06090630 -NCT06085638 -NCT06090643 -NCT06085664 -NCT06090656 -NCT06085716 -NCT06090747 -NCT06085729 -NCT06090864 -NCT06085742 -NCT06090903 -NCT06085755 -NCT06090916 -NCT06085781 -NCT06090994 -NCT06085833 -NCT06091072 -NCT06085976 -NCT06091124 -NCT06086002 -NCT06091254 -NCT06086054 -NCT06091267 -NCT06086197 -NCT06091423 -NCT06086288 -NCT06091683 -NCT06086327 -NCT06102330 -NCT06091748 -NCT06096974 -NCT06091865 -NCT06096870 -NCT06091930 -NCT06097364 -NCT06091943 -NCT06097416 -NCT06092086 -NCT06097455 -NCT06092112 -NCT06097468 -NCT06092242 -NCT06097728 -NCT06092255 -NCT06097793 -NCT06092268 -NCT06097962 -NCT06092580 -NCT06097975 -NCT06092606 -NCT06098118 -NCT06092645 -NCT06098248 -NCT06092892 -NCT06098313 -NCT06092944 -NCT06098326 -NCT06092957 -NCT06098547 -NCT06093061 -NCT06098599 -NCT06093165 -NCT06098651 -NCT06093334 -NCT06098898 -NCT06093425 -NCT06099093 -NCT06093438 -NCT06099119 -NCT06093503 -NCT06099366 -NCT06093672 -NCT06099418 -NCT06093698 -NCT06099431 -NCT06093841 -NCT06099743 -NCT06093854 -NCT06099769 -NCT06093945 -NCT06099782 -NCT06093971 -NCT06099821 -NCT06094101 -NCT06099951 -NCT06094140 -NCT06099977 -NCT06094296 -NCT06099990 -NCT06094322 -NCT06100068 -NCT06094426 -NCT06100081 -NCT06094556 -NCT06100237 -NCT06094777 -NCT06100263 -NCT06094842 -NCT06100367 -NCT06094868 -NCT06100497 -NCT06095089 -NCT06100653 -NCT06095141 -NCT06100705 -NCT06095154 -NCT06100874 -NCT06095167 -NCT06101043 -NCT06095323 -NCT06101069 -NCT06095362 -NCT06101082 -NCT06095375 -NCT06101134 -NCT06095505 -NCT06101277 -NCT06095583 -NCT06101290 -NCT06095674 -NCT06101381 -NCT06095726 -NCT06101394 -NCT06095882 -NCT06101758 -NCT06095934 -NCT06101836 -NCT06096038 -NCT06101849 -NCT06096220 -NCT06101927 -NCT06096272 -NCT06102057 -NCT06096545 -NCT06102161 -NCT06096623 -NCT06102213 -NCT06096779 -NCT06102252 -NCT06096844 -NCT06113016 -NCT06102395 -NCT06107673 -NCT06102447 -NCT06107608 -NCT06102525 -NCT06107686 -NCT06102707 -NCT06107738 -NCT06102824 -NCT06107790 -NCT06102863 -NCT06107868 -NCT06102902 -NCT06107894 -NCT06102928 -NCT06107920 -NCT06103214 -NCT06108024 -NCT06103279 -NCT06108050 -NCT06103318 -NCT06108206 -NCT06103526 -NCT06108232 -NCT06103617 -NCT06108375 -NCT06103669 -NCT06108479 -NCT06103682 -NCT06108492 -NCT06103838 -NCT06108596 -NCT06103864 -NCT06108726 -NCT06104085 -NCT06108739 -NCT06104215 -NCT06109064 -NCT06104241 -NCT06109207 -NCT06104267 -NCT06109272 -NCT06104449 -NCT06109402 -NCT06104488 -NCT06109467 -NCT06104553 -NCT06109558 -NCT06104566 -NCT06109779 -NCT06104592 -NCT06110195 -NCT06104618 -NCT06110208 -NCT06104774 -NCT06110312 -NCT06104930 -NCT06110572 -NCT06105008 -NCT06110598 -NCT06105021 -NCT06110650 -NCT06105203 -NCT06110663 -NCT06105359 -NCT06110702 -NCT06105515 -NCT06110793 -NCT06105554 -NCT06110832 -NCT06105619 -NCT06111235 -NCT06105632 -NCT06111274 -NCT06105658 -NCT06111313 -NCT06105684 -NCT06111326 -NCT06105749 -NCT06111625 -NCT06105801 -NCT06111781 -NCT06105918 -NCT06111872 -NCT06106152 -NCT06112002 -NCT06106165 -NCT06112041 -NCT06106308 -NCT06112314 -NCT06106477 -NCT06112379 -NCT06106529 -NCT06112509 -NCT06106633 -NCT06112522 -NCT06106750 -NCT06112535 -NCT06106802 -NCT06112613 -NCT06106841 -NCT06112704 -NCT06106945 -NCT06112808 -NCT06106997 -NCT06112847 -NCT06107114 -NCT06112977 -NCT06107374 -NCT06112990 -NCT06107413 -NCT06124157 -NCT06113289 -NCT06119581 -NCT06113302 -NCT06119438 -NCT06113627 -NCT06119633 -NCT06113705 -NCT06119685 -NCT06113809 -NCT06119724 -NCT06114004 -NCT06119789 -NCT06114082 -NCT06119867 -NCT06114108 -NCT06120036 -NCT06114173 -NCT06120075 -NCT06114225 -NCT06120127 -NCT06114511 -NCT06120140 -NCT06114940 -NCT06120166 -NCT06115135 -NCT06120283 -NCT06115174 -NCT06120439 -NCT06115330 -NCT06120491 -NCT06115395 -NCT06120504 -NCT06115408 -NCT06120595 -NCT06115486 -NCT06120712 -NCT06115499 -NCT06120764 -NCT06115629 -NCT06120803 -NCT06115642 -NCT06120972 -NCT06115733 -NCT06121089 -NCT06115850 -NCT06121102 -NCT06115902 -NCT06121180 -NCT06116084 -NCT06121258 -NCT06116136 -NCT06121271 -NCT06116240 -NCT06121401 -NCT06116253 -NCT06121453 -NCT06116461 -NCT06121505 -NCT06116578 -NCT06121557 -NCT06116682 -NCT06121570 -NCT06116734 -NCT06121700 -NCT06116786 -NCT06121752 -NCT06116812 -NCT06121843 -NCT06116864 -NCT06122064 -NCT06116903 -NCT06122480 -NCT06116929 -NCT06122493 -NCT06117059 -NCT06122584 -NCT06117241 -NCT06122610 -NCT06117371 -NCT06122896 -NCT06117540 -NCT06123117 -NCT06117566 -NCT06123156 -NCT06117709 -NCT06123286 -NCT06117774 -NCT06123338 -NCT06117878 -NCT06123455 -NCT06118047 -NCT06123468 -NCT06118060 -NCT06123494 -NCT06118086 -NCT06123637 -NCT06118333 -NCT06123676 -NCT06118645 -NCT06123754 -NCT06118658 -NCT06123884 -NCT06118710 -NCT06123988 -NCT06118762 -NCT06124001 -NCT06118788 -NCT06124118 -NCT06119217 -NCT06124131 -NCT06119425 -NCT06134284 -NCT06124378 -NCT06129734 -NCT06124508 -NCT06129604 -NCT06124963 -NCT06129747 -NCT06124976 -NCT06129760 -NCT06125028 -NCT06129851 -NCT06125041 -NCT06129864 -NCT06125080 -NCT06129903 -NCT06125106 -NCT06129955 -NCT06125145 -NCT06130007 -NCT06125171 -NCT06130254 -NCT06125197 -NCT06130280 -NCT06125353 -NCT06130332 -NCT06125522 -NCT06130436 -NCT06125652 -NCT06130579 -NCT06125769 -NCT06130722 -NCT06125834 -NCT06130787 -NCT06125886 -NCT06130826 -NCT06125964 -NCT06130995 -NCT06126159 -NCT06131216 -NCT06126172 -NCT06131398 -NCT06126237 -NCT06131632 -NCT06126276 -NCT06131775 -NCT06126406 -NCT06131840 -NCT06126419 -NCT06131853 -NCT06126432 -NCT06132087 -NCT06126510 -NCT06132113 -NCT06126588 -NCT06132165 -NCT06126640 -NCT06132217 -NCT06126666 -NCT06132295 -NCT06126705 -NCT06132438 -NCT06126731 -NCT06132503 -NCT06126744 -NCT06132607 -NCT06127238 -NCT06132685 -NCT06127303 -NCT06132698 -NCT06127329 -NCT06132711 -NCT06127407 -NCT06132737 -NCT06127654 -NCT06132828 -NCT06127784 -NCT06132932 -NCT06127836 -NCT06132945 -NCT06127940 -NCT06132958 -NCT06127979 -NCT06133062 -NCT06128044 -NCT06133088 -NCT06128070 -NCT06133218 -NCT06128148 -NCT06133348 -NCT06128252 -NCT06133426 -NCT06128304 -NCT06133439 -NCT06128460 -NCT06133517 -NCT06128525 -NCT06133543 -NCT06128551 -NCT06133556 -NCT06128694 -NCT06133699 -NCT06128785 -NCT06133816 -NCT06128798 -NCT06133959 -NCT06128837 -NCT06134193 -NCT06128863 -NCT06134232 -NCT06129422 -NCT06134271 -NCT06129487 -NCT06145750 -NCT06134375 -NCT06140576 -NCT06134388 -NCT06140524 -NCT06134440 -NCT06140628 -NCT06134531 -NCT06140732 -NCT06134687 -NCT06140836 -NCT06134700 -NCT06140875 -NCT06134765 -NCT06140927 -NCT06134960 -NCT06140966 -NCT06135545 -NCT06141005 -NCT06135714 -NCT06141031 -NCT06135896 -NCT06141070 -NCT06136065 -NCT06141226 -NCT06136312 -NCT06141265 -NCT06136351 -NCT06141304 -NCT06136364 -NCT06141369 -NCT06136377 -NCT06141772 -NCT06136559 -NCT06141785 -NCT06136598 -NCT06142318 -NCT06136611 -NCT06142344 -NCT06136624 -NCT06142396 -NCT06136650 -NCT06142500 -NCT06136702 -NCT06142617 -NCT06136884 -NCT06142760 -NCT06136897 -NCT06143007 -NCT06136910 -NCT06143020 -NCT06136923 -NCT06143189 -NCT06136988 -NCT06143553 -NCT06137118 -NCT06143579 -NCT06137144 -NCT06143631 -NCT06137248 -NCT06143722 -NCT06137274 -NCT06143735 -NCT06137378 -NCT06143748 -NCT06137651 -NCT06143774 -NCT06137833 -NCT06144099 -NCT06137950 -NCT06144164 -NCT06138028 -NCT06144346 -NCT06138067 -NCT06144385 -NCT06138145 -NCT06144606 -NCT06138223 -NCT06144671 -NCT06138275 -NCT06144723 -NCT06138496 -NCT06144736 -NCT06138587 -NCT06144762 -NCT06138769 -NCT06144827 -NCT06139107 -NCT06144944 -NCT06139211 -NCT06145048 -NCT06139367 -NCT06145074 -NCT06139406 -NCT06145243 -NCT06139419 -NCT06145295 -NCT06139458 -NCT06145308 -NCT06139536 -NCT06145321 -NCT06139575 -NCT06145399 -NCT06139627 -NCT06145412 -NCT06139783 -NCT06145464 -NCT06139926 -NCT06145581 -NCT06140160 -NCT06145633 -NCT06140407 -NCT06158516 -NCT06145763 -NCT06152471 -NCT06145802 -NCT06152419 -NCT06146231 -NCT06152523 -NCT06146257 -NCT06152575 -NCT06146777 -NCT06152731 -NCT06146920 -NCT06152757 -NCT06146946 -NCT06152809 -NCT06146985 -NCT06152822 -NCT06147037 -NCT06152978 -NCT06147362 -NCT06153238 -NCT06147492 -NCT06153251 -NCT06147505 -NCT06153368 -NCT06147570 -NCT06153797 -NCT06148038 -NCT06153836 -NCT06148077 -NCT06154109 -NCT06148129 -NCT06154291 -NCT06148155 -NCT06154343 -NCT06148220 -NCT06154538 -NCT06148402 -NCT06154967 -NCT06148636 -NCT06155084 -NCT06149130 -NCT06155188 -NCT06149169 -NCT06155279 -NCT06149247 -NCT06155331 -NCT06149286 -NCT06155383 -NCT06149312 -NCT06155396 -NCT06149481 -NCT06155994 -NCT06149533 -NCT06156020 -NCT06149546 -NCT06156267 -NCT06149598 -NCT06156332 -NCT06149611 -NCT06156397 -NCT06149637 -NCT06156410 -NCT06149689 -NCT06156514 -NCT06149741 -NCT06156579 -NCT06149767 -NCT06156761 -NCT06150027 -NCT06156878 -NCT06150040 -NCT06156891 -NCT06150131 -NCT06156943 -NCT06150144 -NCT06157099 -NCT06150157 -NCT06157151 -NCT06150183 -NCT06157216 -NCT06150365 -NCT06157359 -NCT06150417 -NCT06157541 -NCT06150664 -NCT06157814 -NCT06150885 -NCT06157827 -NCT06150898 -NCT06157892 -NCT06150976 -NCT06157957 -NCT06151080 -NCT06157996 -NCT06151106 -NCT06158100 -NCT06151236 -NCT06158139 -NCT06151249 -NCT06158269 -NCT06151262 -NCT06158347 -NCT06151574 -NCT06158386 -NCT06151743 -NCT06158399 -NCT06151847 -NCT06158412 -NCT06152276 -NCT06158477 -NCT06152367 -NCT06170489 -NCT06158828 -NCT06164275 -NCT06158841 -NCT06164119 -NCT06158919 -NCT06164327 -NCT06158958 -NCT06164392 -NCT06158971 -NCT06164691 -NCT06159166 -NCT06164769 -NCT06159335 -NCT06165302 -NCT06159478 -NCT06165380 -NCT06159491 -NCT06165419 -NCT06159504 -NCT06165614 -NCT06159621 -NCT06165653 -NCT06159634 -NCT06165809 -NCT06159790 -NCT06165822 -NCT06159842 -NCT06165874 -NCT06160206 -NCT06165900 -NCT06160323 -NCT06166420 -NCT06160362 -NCT06166472 -NCT06160570 -NCT06166576 -NCT06160609 -NCT06166589 -NCT06160752 -NCT06166758 -NCT06160843 -NCT06166836 -NCT06161025 -NCT06166888 -NCT06161181 -NCT06166953 -NCT06161207 -NCT06167057 -NCT06161233 -NCT06167096 -NCT06161272 -NCT06167109 -NCT06161441 -NCT06167291 -NCT06161493 -NCT06167317 -NCT06161519 -NCT06167421 -NCT06161532 -NCT06167486 -NCT06161545 -NCT06167694 -NCT06161558 -NCT06167785 -NCT06161610 -NCT06167967 -NCT06161779 -NCT06167993 -NCT06161792 -NCT06168032 -NCT06161818 -NCT06168084 -NCT06161909 -NCT06168292 -NCT06161974 -NCT06168435 -NCT06162221 -NCT06168487 -NCT06162351 -NCT06168552 -NCT06162377 -NCT06168786 -NCT06162468 -NCT06168812 -NCT06162559 -NCT06169072 -NCT06162572 -NCT06169124 -NCT06162650 -NCT06169215 -NCT06162663 -NCT06169267 -NCT06162767 -NCT06169280 -NCT06162988 -NCT06169371 -NCT06163261 -NCT06169410 -NCT06163391 -NCT06169449 -NCT06163430 -NCT06169579 -NCT06163664 -NCT06169605 -NCT06163729 -NCT06170190 -NCT06163820 -NCT06170294 -NCT06163898 -NCT06170385 -NCT06163963 -NCT06182332 -NCT06170697 -NCT06176261 -NCT06170710 -NCT06176066 -NCT06170788 -NCT06176274 -NCT06171139 -NCT06176339 -NCT06171152 -NCT06176534 -NCT06171178 -NCT06176690 -NCT06171269 -NCT06176729 -NCT06171282 -NCT06176885 -NCT06171321 -NCT06176989 -NCT06171581 -NCT06177015 -NCT06171607 -NCT06177041 -NCT06171685 -NCT06177067 -NCT06171750 -NCT06177093 -NCT06171789 -NCT06177171 -NCT06171854 -NCT06177236 -NCT06171945 -NCT06177288 -NCT06172036 -NCT06177301 -NCT06172088 -NCT06177522 -NCT06172127 -NCT06177561 -NCT06172205 -NCT06177795 -NCT06172283 -NCT06177925 -NCT06172296 -NCT06177964 -NCT06172309 -NCT06178159 -NCT06172322 -NCT06178198 -NCT06172478 -NCT06178211 -NCT06172595 -NCT06178237 -NCT06172634 -NCT06178354 -NCT06172894 -NCT06178445 -NCT06172907 -NCT06178549 -NCT06172959 -NCT06178588 -NCT06173011 -NCT06178601 -NCT06173037 -NCT06178614 -NCT06173219 -NCT06178848 -NCT06173310 -NCT06178861 -NCT06173349 -NCT06178926 -NCT06173362 -NCT06178939 -NCT06173375 -NCT06179069 -NCT06173401 -NCT06179160 -NCT06173466 -NCT06179303 -NCT06173505 -NCT06179524 -NCT06173518 -NCT06179732 -NCT06173726 -NCT06179888 -NCT06173986 -NCT06180174 -NCT06173999 -NCT06180356 -NCT06174259 -NCT06180460 -NCT06174363 -NCT06180733 -NCT06174532 -NCT06180863 -NCT06174987 -NCT06181266 -NCT06175000 -NCT06181331 -NCT06175208 -NCT06181344 -NCT06175221 -NCT06181643 -NCT06175273 -NCT06182046 -NCT06175390 -NCT06182072 -NCT06175780 -NCT06182163 -NCT06175845 -NCT06182241 -NCT06176027 -NCT06193239 -NCT06182410 -NCT06188286 -NCT06182579 -NCT06188208 -NCT06182592 -NCT06188455 -NCT06182644 -NCT06188468 -NCT06182696 -NCT06188520 -NCT06182735 -NCT06188559 -NCT06182761 -NCT06188624 -NCT06182774 -NCT06188650 -NCT06182800 -NCT06188676 -NCT06182865 -NCT06188702 -NCT06183164 -NCT06188741 -NCT06183268 -NCT06189183 -NCT06183437 -NCT06189209 -NCT06183489 -NCT06189391 -NCT06183736 -NCT06189482 -NCT06183905 -NCT06189833 -NCT06183931 -NCT06190067 -NCT06183983 -NCT06190197 -NCT06184009 -NCT06190249 -NCT06184035 -NCT06190275 -NCT06184256 -NCT06190301 -NCT06184321 -NCT06190600 -NCT06184516 -NCT06190639 -NCT06184594 -NCT06190665 -NCT06184698 -NCT06190730 -NCT06184750 -NCT06190782 -NCT06184841 -NCT06190886 -NCT06184867 -NCT06190899 -NCT06184880 -NCT06190951 -NCT06185205 -NCT06191120 -NCT06185374 -NCT06191133 -NCT06185400 -NCT06191185 -NCT06185478 -NCT06191250 -NCT06185556 -NCT06191263 -NCT06185738 -NCT06191666 -NCT06185751 -NCT06191679 -NCT06185777 -NCT06191744 -NCT06185972 -NCT06191796 -NCT06186011 -NCT06191887 -NCT06186076 -NCT06191900 -NCT06186401 -NCT06191939 -NCT06186414 -NCT06191978 -NCT06186427 -NCT06192186 -NCT06186440 -NCT06192680 -NCT06186609 -NCT06192758 -NCT06186700 -NCT06192771 -NCT06186726 -NCT06192784 -NCT06186778 -NCT06192797 -NCT06186986 -NCT06192849 -NCT06187103 -NCT06192862 -NCT06187402 -NCT06192888 -NCT06187441 -NCT06192979 -NCT06187506 -NCT06193070 -NCT06187597 -NCT06193174 -NCT06187740 -NCT06193200 -NCT06187961 -NCT06204159 -NCT06193356 -NCT06199115 -NCT06193369 -NCT06199050 -NCT06193486 -NCT06199232 -NCT06193525 -NCT06199271 -NCT06193538 -NCT06199453 -NCT06193707 -NCT06199466 -NCT06193733 -NCT06199557 -NCT06193759 -NCT06199570 -NCT06193902 -NCT06199752 -NCT06193993 -NCT06199882 -NCT06194448 -NCT06199895 -NCT06194565 -NCT06199908 -NCT06194630 -NCT06199947 -NCT06194656 -NCT06199973 -NCT06194734 -NCT06199986 -NCT06194786 -NCT06200103 -NCT06194825 -NCT06200155 -NCT06194877 -NCT06200233 -NCT06194929 -NCT06200259 -NCT06195189 -NCT06200363 -NCT06195228 -NCT06200831 -NCT06195293 -NCT06200948 -NCT06195306 -NCT06201039 -NCT06195384 -NCT06201065 -NCT06195618 -NCT06201078 -NCT06195670 -NCT06201234 -NCT06195683 -NCT06201247 -NCT06195709 -NCT06201507 -NCT06195865 -NCT06201585 -NCT06195891 -NCT06201741 -NCT06196008 -NCT06202001 -NCT06196255 -NCT06202014 -NCT06196294 -NCT06202066 -NCT06196658 -NCT06202105 -NCT06196671 -NCT06202118 -NCT06196697 -NCT06202183 -NCT06196736 -NCT06202222 -NCT06196762 -NCT06202248 -NCT06196775 -NCT06202261 -NCT06196788 -NCT06202313 -NCT06196918 -NCT06202339 -NCT06197139 -NCT06202690 -NCT06197178 -NCT06202716 -NCT06197425 -NCT06202820 -NCT06197438 -NCT06203145 -NCT06197581 -NCT06203197 -NCT06197672 -NCT06203210 -NCT06198010 -NCT06203301 -NCT06198296 -NCT06203574 -NCT06198387 -NCT06203587 -NCT06198426 -NCT06203600 -NCT06198465 -NCT06203613 -NCT06198556 -NCT06203821 -NCT06198751 -NCT06203912 -NCT06198842 -NCT06204094 -NCT06198907 -NCT06214793 -NCT06204315 -NCT06209294 -NCT06204341 -NCT06209229 -NCT06204484 -NCT06209385 -NCT06204497 -NCT06209567 -NCT06204510 -NCT06209580 -NCT06204614 -NCT06209606 -NCT06204835 -NCT06209619 -NCT06204991 -NCT06209671 -NCT06205082 -NCT06209970 -NCT06205173 -NCT06209996 -NCT06205251 -NCT06210243 -NCT06205290 -NCT06210334 -NCT06205316 -NCT06210360 -NCT06205472 -NCT06210438 -NCT06205485 -NCT06210490 -NCT06205706 -NCT06210529 -NCT06205836 -NCT06210750 -NCT06205849 -NCT06210815 -NCT06205927 -NCT06210971 -NCT06206096 -NCT06211023 -NCT06206174 -NCT06211036 -NCT06206278 -NCT06211114 -NCT06206642 -NCT06211257 -NCT06206707 -NCT06211335 -NCT06206733 -NCT06211452 -NCT06206837 -NCT06211647 -NCT06206863 -NCT06211751 -NCT06206876 -NCT06211764 -NCT06206902 -NCT06211790 -NCT06206993 -NCT06211881 -NCT06207006 -NCT06211933 -NCT06207123 -NCT06212076 -NCT06207292 -NCT06212388 -NCT06207305 -NCT06212414 -NCT06207435 -NCT06212440 -NCT06207474 -NCT06212570 -NCT06207656 -NCT06212583 -NCT06207734 -NCT06212596 -NCT06207747 -NCT06212700 -NCT06207786 -NCT06212752 -NCT06207799 -NCT06212817 -NCT06207864 -NCT06212908 -NCT06207981 -NCT06213298 -NCT06208033 -NCT06213311 -NCT06208124 -NCT06213519 -NCT06208150 -NCT06213532 -NCT06208371 -NCT06213571 -NCT06208410 -NCT06213636 -NCT06208462 -NCT06214143 -NCT06208657 -NCT06214156 -NCT06208735 -NCT06214195 -NCT06208748 -NCT06214533 -NCT06208826 -NCT06214572 -NCT06208917 -NCT06214598 -NCT06209099 -NCT06214611 -NCT06209190 -NCT06224673 -NCT06214988 -NCT06219941 -NCT06215027 -NCT06219746 -NCT06215118 -NCT06220032 -NCT06215326 -NCT06220045 -NCT06215365 -NCT06220058 -NCT06215469 -NCT06220097 -NCT06215495 -NCT06220123 -NCT06215612 -NCT06220162 -NCT06215677 -NCT06220188 -NCT06215846 -NCT06220214 -NCT06215950 -NCT06220318 -NCT06215976 -NCT06220435 -NCT06216002 -NCT06220487 -NCT06216158 -NCT06220552 -NCT06216171 -NCT06220656 -NCT06216249 -NCT06220838 -NCT06216301 -NCT06220864 -NCT06216405 -NCT06221072 -NCT06216496 -NCT06221462 -NCT06216561 -NCT06221475 -NCT06216574 -NCT06221553 -NCT06216743 -NCT06221670 -NCT06216938 -NCT06221683 -NCT06217003 -NCT06221748 -NCT06217016 -NCT06221774 -NCT06217042 -NCT06222125 -NCT06217094 -NCT06222138 -NCT06217185 -NCT06222242 -NCT06217250 -NCT06222255 -NCT06217458 -NCT06222489 -NCT06217536 -NCT06222580 -NCT06217666 -NCT06222593 -NCT06217757 -NCT06222606 -NCT06217822 -NCT06222684 -NCT06217848 -NCT06222788 -NCT06217991 -NCT06222879 -NCT06218069 -NCT06222944 -NCT06218303 -NCT06223022 -NCT06218420 -NCT06223230 -NCT06218433 -NCT06223256 -NCT06218511 -NCT06223295 -NCT06218524 -NCT06223308 -NCT06218602 -NCT06223516 -NCT06218615 -NCT06223542 -NCT06218628 -NCT06223568 -NCT06218667 -NCT06223646 -NCT06218771 -NCT06223659 -NCT06218810 -NCT06223698 -NCT06218823 -NCT06223711 -NCT06218888 -NCT06223841 -NCT06218914 -NCT06224049 -NCT06219096 -NCT06224244 -NCT06219174 -NCT06224257 -NCT06219356 -NCT06224387 -NCT06219434 -NCT06224504 -NCT06219499 -NCT06235099 -NCT06224738 -NCT06229496 -NCT06224842 -NCT06229483 -NCT06224855 -NCT06229912 -NCT06224894 -NCT06230055 -NCT06225011 -NCT06230068 -NCT06225284 -NCT06230159 -NCT06225310 -NCT06230224 -NCT06225414 -NCT06230445 -NCT06225427 -NCT06230471 -NCT06225505 -NCT06230549 -NCT06225596 -NCT06230666 -NCT06225609 -NCT06230679 -NCT06225622 -NCT06230965 -NCT06225804 -NCT06231017 -NCT06225843 -NCT06231186 -NCT06225856 -NCT06231537 -NCT06225921 -NCT06231550 -NCT06225999 -NCT06231576 -NCT06226129 -NCT06231680 -NCT06226350 -NCT06232044 -NCT06226363 -NCT06232083 -NCT06226571 -NCT06232096 -NCT06226688 -NCT06232122 -NCT06226766 -NCT06232408 -NCT06226857 -NCT06232434 -NCT06227026 -NCT06232564 -NCT06227039 -NCT06232577 -NCT06227065 -NCT06232655 -NCT06227117 -NCT06232694 -NCT06227156 -NCT06232707 -NCT06227325 -NCT06232759 -NCT06227338 -NCT06232863 -NCT06227377 -NCT06232902 -NCT06227416 -NCT06233253 -NCT06227546 -NCT06233292 -NCT06227897 -NCT06233526 -NCT06228053 -NCT06233864 -NCT06228066 -NCT06233877 -NCT06228079 -NCT06233903 -NCT06228209 -NCT06233942 -NCT06228326 -NCT06233981 -NCT06228404 -NCT06233994 -NCT06228482 -NCT06234007 -NCT06228599 -NCT06234072 -NCT06228768 -NCT06234098 -NCT06228846 -NCT06234137 -NCT06228963 -NCT06234150 -NCT06229041 -NCT06234267 -NCT06229067 -NCT06234397 -NCT06229080 -NCT06234423 -NCT06229197 -NCT06234605 -NCT06229275 -NCT06234735 -NCT06229327 -NCT06234748 -NCT06229340 -NCT06234904 -NCT06229366 -NCT06235034 -NCT06229392 -NCT06244836 -NCT06235125 -NCT06239272 -NCT06235151 -NCT06239220 -NCT06235203 -NCT06239298 -NCT06235216 -NCT06239467 -NCT06235229 -NCT06239532 -NCT06235242 -NCT06239584 -NCT06235281 -NCT06239623 -NCT06235398 -NCT06239727 -NCT06235437 -NCT06239870 -NCT06235541 -NCT06240143 -NCT06235671 -NCT06240377 -NCT06235697 -NCT06240390 -NCT06235723 -NCT06240546 -NCT06235801 -NCT06240598 -NCT06235814 -NCT06240689 -NCT06235918 -NCT06240728 -NCT06235931 -NCT06240741 -NCT06235983 -NCT06240767 -NCT06236022 -NCT06241105 -NCT06236139 -NCT06241235 -NCT06236269 -NCT06241352 -NCT06236321 -NCT06241391 -NCT06236360 -NCT06241456 -NCT06236386 -NCT06241469 -NCT06236425 -NCT06241599 -NCT06236438 -NCT06241612 -NCT06236516 -NCT06241703 -NCT06236568 -NCT06241755 -NCT06236633 -NCT06241768 -NCT06236724 -NCT06241807 -NCT06236997 -NCT06241846 -NCT06237179 -NCT06241898 -NCT06237192 -NCT06242067 -NCT06237257 -NCT06242197 -NCT06237400 -NCT06242249 -NCT06237413 -NCT06242418 -NCT06237491 -NCT06242470 -NCT06237582 -NCT06242587 -NCT06237816 -NCT06242691 -NCT06237881 -NCT06242834 -NCT06237920 -NCT06242912 -NCT06238167 -NCT06242964 -NCT06238401 -NCT06243003 -NCT06238479 -NCT06243107 -NCT06238596 -NCT06243185 -NCT06238635 -NCT06243393 -NCT06238648 -NCT06243510 -NCT06238661 -NCT06243796 -NCT06238687 -NCT06244004 -NCT06238713 -NCT06244225 -NCT06238752 -NCT06244251 -NCT06238843 -NCT06244264 -NCT06238882 -NCT06244368 -NCT06238921 -NCT06244485 -NCT06239155 -NCT06244771 -NCT06239194 -NCT06254326 -NCT06244992 -NCT06249984 -NCT06245018 -NCT06249854 -NCT06245122 -NCT06250036 -NCT06245330 -NCT06250075 -NCT06245343 -NCT06250166 -NCT06245356 -NCT06250244 -NCT06245603 -NCT06250335 -NCT06245746 -NCT06250686 -NCT06245824 -NCT06250751 -NCT06245889 -NCT06250777 -NCT06245915 -NCT06250894 -NCT06246071 -NCT06250959 -NCT06246084 -NCT06250972 -NCT06246110 -NCT06251050 -NCT06246149 -NCT06251076 -NCT06246162 -NCT06251115 -NCT06246409 -NCT06251180 -NCT06246448 -NCT06251297 -NCT06246630 -NCT06251310 -NCT06246643 -NCT06251388 -NCT06246786 -NCT06251401 -NCT06246916 -NCT06251492 -NCT06246955 -NCT06251544 -NCT06246968 -NCT06251947 -NCT06247189 -NCT06251973 -NCT06247215 -NCT06252012 -NCT06247449 -NCT06252129 -NCT06247501 -NCT06252233 -NCT06247540 -NCT06252545 -NCT06247605 -NCT06252584 -NCT06247657 -NCT06252649 -NCT06247787 -NCT06252662 -NCT06247826 -NCT06252675 -NCT06247917 -NCT06252727 -NCT06247956 -NCT06252870 -NCT06247995 -NCT06253091 -NCT06248086 -NCT06253130 -NCT06248216 -NCT06253182 -NCT06248411 -NCT06253195 -NCT06248450 -NCT06253234 -NCT06248515 -NCT06253338 -NCT06248528 -NCT06253494 -NCT06248554 -NCT06253520 -NCT06248606 -NCT06253598 -NCT06248697 -NCT06253611 -NCT06248749 -NCT06253637 -NCT06248840 -NCT06253650 -NCT06248918 -NCT06253663 -NCT06248996 -NCT06253845 -NCT06249048 -NCT06253871 -NCT06249191 -NCT06253949 -NCT06249256 -NCT06254066 -NCT06249282 -NCT06254196 -NCT06249321 -NCT06254248 -NCT06249750 -NCT06254300 -NCT06249841 -NCT06266143 -NCT06254495 -NCT06259513 -NCT06254521 -NCT06259448 -NCT06254547 -NCT06259552 -NCT06254599 -NCT06259721 -NCT06254690 -NCT06259929 -NCT06254781 -NCT06260033 -NCT06254846 -NCT06260111 -NCT06254911 -NCT06260150 -NCT06255210 -NCT06260293 -NCT06255223 -NCT06260332 -NCT06255262 -NCT06260514 -NCT06255379 -NCT06260683 -NCT06255392 -NCT06260774 -NCT06255665 -NCT06260943 -NCT06255704 -NCT06261008 -NCT06255795 -NCT06261125 -NCT06255847 -NCT06261359 -NCT06255912 -NCT06261814 -NCT06255951 -NCT06261879 -NCT06255964 -NCT06261892 -NCT06256055 -NCT06262113 -NCT06256185 -NCT06262386 -NCT06256224 -NCT06262438 -NCT06256237 -NCT06262516 -NCT06256263 -NCT06262542 -NCT06256315 -NCT06262555 -NCT06256328 -NCT06262581 -NCT06256354 -NCT06262633 -NCT06256484 -NCT06262789 -NCT06256588 -NCT06263062 -NCT06256627 -NCT06263088 -NCT06256705 -NCT06263153 -NCT06257017 -NCT06263205 -NCT06257121 -NCT06263231 -NCT06257264 -NCT06263283 -NCT06257394 -NCT06263491 -NCT06257498 -NCT06263543 -NCT06257680 -NCT06263582 -NCT06257693 -NCT06264167 -NCT06257758 -NCT06264180 -NCT06258018 -NCT06264388 -NCT06258096 -NCT06264778 -NCT06258304 -NCT06264921 -NCT06258330 -NCT06265025 -NCT06258408 -NCT06265077 -NCT06258486 -NCT06265207 -NCT06258525 -NCT06265285 -NCT06258642 -NCT06265350 -NCT06258811 -NCT06265428 -NCT06258954 -NCT06265545 -NCT06258993 -NCT06265558 -NCT06259058 -NCT06265584 -NCT06259123 -NCT06265688 -NCT06259136 -NCT06265727 -NCT06259162 -NCT06266026 -NCT06259279 -NCT06279585 -NCT06266299 -NCT06274684 -NCT06266312 -NCT06274515 -NCT06266338 -NCT06274762 -NCT06266832 -NCT06274788 -NCT06266871 -NCT06274814 -NCT06266923 -NCT06274879 -NCT06267001 -NCT06274892 -NCT06267014 -NCT06274905 -NCT06267729 -NCT06275087 -NCT06267807 -NCT06275126 -NCT06268015 -NCT06275165 -NCT06268106 -NCT06275321 -NCT06268210 -NCT06275360 -NCT06268327 -NCT06275425 -NCT06268405 -NCT06275737 -NCT06268574 -NCT06275919 -NCT06268600 -NCT06275958 -NCT06268613 -NCT06275997 -NCT06268652 -NCT06276283 -NCT06268665 -NCT06276465 -NCT06268938 -NCT06276491 -NCT06269198 -NCT06276530 -NCT06269211 -NCT06276686 -NCT06269445 -NCT06276868 -NCT06269536 -NCT06276933 -NCT06269744 -NCT06276946 -NCT06269978 -NCT06277011 -NCT06270017 -NCT06277050 -NCT06270082 -NCT06277141 -NCT06270355 -NCT06277154 -NCT06270394 -NCT06277180 -NCT06270628 -NCT06277219 -NCT06270667 -NCT06277674 -NCT06270706 -NCT06277791 -NCT06270888 -NCT06277804 -NCT06271044 -NCT06277947 -NCT06271057 -NCT06278454 -NCT06271252 -NCT06278493 -NCT06271356 -NCT06278506 -NCT06271421 -NCT06278545 -NCT06271551 -NCT06278558 -NCT06271603 -NCT06278701 -NCT06271616 -NCT06278857 -NCT06271837 -NCT06278870 -NCT06271941 -NCT06278883 -NCT06272162 -NCT06278896 -NCT06272461 -NCT06279013 -NCT06272617 -NCT06279026 -NCT06273501 -NCT06279130 -NCT06273553 -NCT06279299 -NCT06273800 -NCT06279338 -NCT06273852 -NCT06279351 -NCT06274034 -NCT06279364 -NCT06274047 -NCT06279403 -NCT06274190 -NCT06279494 -NCT06274437 -NCT06293157 -NCT06279754 -NCT06285149 -NCT06279767 -NCT06285136 -NCT06279832 -NCT06285370 -NCT06280105 -NCT06285422 -NCT06280196 -NCT06285890 -NCT06280300 -NCT06286150 -NCT06280495 -NCT06286332 -NCT06280508 -NCT06286462 -NCT06280612 -NCT06286592 -NCT06280690 -NCT06286956 -NCT06280781 -NCT06287229 -NCT06280885 -NCT06287398 -NCT06280924 -NCT06287463 -NCT06281080 -NCT06287528 -NCT06281145 -NCT06287541 -NCT06281210 -NCT06287593 -NCT06281379 -NCT06287775 -NCT06281405 -NCT06287918 -NCT06281678 -NCT06287944 -NCT06281769 -NCT06288113 -NCT06281847 -NCT06288191 -NCT06281860 -NCT06288360 -NCT06281886 -NCT06288373 -NCT06281925 -NCT06288620 -NCT06281964 -NCT06289023 -NCT06282185 -NCT06289049 -NCT06282224 -NCT06289062 -NCT06282445 -NCT06289517 -NCT06282471 -NCT06289673 -NCT06282497 -NCT06289751 -NCT06282536 -NCT06289803 -NCT06282562 -NCT06289894 -NCT06282575 -NCT06289959 -NCT06282588 -NCT06290193 -NCT06282809 -NCT06290388 -NCT06282874 -NCT06290427 -NCT06282978 -NCT06290466 -NCT06283121 -NCT06290505 -NCT06283134 -NCT06290622 -NCT06283251 -NCT06290687 -NCT06283303 -NCT06290765 -NCT06283719 -NCT06290817 -NCT06284031 -NCT06291064 -NCT06284122 -NCT06291220 -NCT06284226 -NCT06291610 -NCT06284304 -NCT06291662 -NCT06284317 -NCT06291688 -NCT06284330 -NCT06291896 -NCT06284408 -NCT06291987 -NCT06284460 -NCT06292286 -NCT06284486 -NCT06292689 -NCT06284564 -NCT06292845 -NCT06284590 -NCT06292858 -NCT06284746 -NCT06292975 -NCT06285019 -NCT06293014 -NCT06285097 -NCT06305299 -NCT06293508 -NCT06299839 -NCT06293586 -NCT06299761 -NCT06293625 -NCT06299852 -NCT06293651 -NCT06299891 -NCT06293690 -NCT06300099 -NCT06293833 -NCT06300177 -NCT06293898 -NCT06300411 -NCT06294418 -NCT06300424 -NCT06294548 -NCT06300463 -NCT06294561 -NCT06300489 -NCT06294574 -NCT06300502 -NCT06295094 -NCT06300515 -NCT06295159 -NCT06300528 -NCT06295367 -NCT06300879 -NCT06295432 -NCT06301165 -NCT06295497 -NCT06301295 -NCT06295549 -NCT06301308 -NCT06295731 -NCT06301386 -NCT06295744 -NCT06301399 -NCT06295809 -NCT06301425 -NCT06295926 -NCT06301789 -NCT06295952 -NCT06301828 -NCT06296056 -NCT06302062 -NCT06296121 -NCT06302140 -NCT06296147 -NCT06302361 -NCT06296368 -NCT06302400 -NCT06296563 -NCT06302426 -NCT06296641 -NCT06302465 -NCT06296680 -NCT06302569 -NCT06296706 -NCT06302595 -NCT06296745 -NCT06302621 -NCT06297226 -NCT06302751 -NCT06297265 -NCT06303154 -NCT06297369 -NCT06303167 -NCT06297473 -NCT06303193 -NCT06297512 -NCT06303505 -NCT06297525 -NCT06303583 -NCT06297642 -NCT06303622 -NCT06297811 -NCT06303687 -NCT06297902 -NCT06303713 -NCT06297941 -NCT06304103 -NCT06298058 -NCT06304350 -NCT06298084 -NCT06304441 -NCT06298149 -NCT06304545 -NCT06298266 -NCT06304571 -NCT06298357 -NCT06304597 -NCT06298734 -NCT06304610 -NCT06298877 -NCT06304636 -NCT06298916 -NCT06304766 -NCT06298968 -NCT06304805 -NCT06299124 -NCT06304857 -NCT06299163 -NCT06304974 -NCT06299202 -NCT06304987 -NCT06299371 -NCT06305117 -NCT06299462 -NCT06305247 -NCT06299722 -NCT06316856 -NCT06305312 -NCT06311357 -NCT06305364 -NCT06311279 -NCT06305598 -NCT06311396 -NCT06305715 -NCT06311578 -NCT06305741 -NCT06311721 -NCT06305754 -NCT06311851 -NCT06305767 -NCT06311916 -NCT06305832 -NCT06311929 -NCT06305884 -NCT06311942 -NCT06305910 -NCT06311955 -NCT06305962 -NCT06311968 -NCT06306456 -NCT06311981 -NCT06306560 -NCT06312137 -NCT06306612 -NCT06312150 -NCT06306638 -NCT06312176 -NCT06306755 -NCT06312670 -NCT06306846 -NCT06312826 -NCT06307015 -NCT06312917 -NCT06307054 -NCT06312969 -NCT06307080 -NCT06312982 -NCT06307093 -NCT06313073 -NCT06307249 -NCT06313086 -NCT06307418 -NCT06313190 -NCT06307431 -NCT06313203 -NCT06307470 -NCT06313437 -NCT06307496 -NCT06313450 -NCT06307548 -NCT06313463 -NCT06307600 -NCT06313554 -NCT06307704 -NCT06313567 -NCT06307795 -NCT06313593 -NCT06307925 -NCT06313775 -NCT06308029 -NCT06313801 -NCT06308120 -NCT06313853 -NCT06308263 -NCT06313957 -NCT06308406 -NCT06313970 -NCT06308419 -NCT06313983 -NCT06308575 -NCT06313996 -NCT06308588 -NCT06314022 -NCT06308796 -NCT06314087 -NCT06308822 -NCT06314334 -NCT06308913 -NCT06314373 -NCT06308939 -NCT06314672 -NCT06309225 -NCT06314698 -NCT06309290 -NCT06314711 -NCT06309485 -NCT06314828 -NCT06309732 -NCT06315010 -NCT06310330 -NCT06315257 -NCT06310369 -NCT06315296 -NCT06310382 -NCT06315309 -NCT06310473 -NCT06315491 -NCT06310564 -NCT06315686 -NCT06310590 -NCT06315855 -NCT06310655 -NCT06315881 -NCT06310993 -NCT06316427 -NCT06311214 -NCT06316531 -NCT06311227 -NCT06328387 -NCT06316882 -NCT06322888 -NCT06316908 -NCT06322745 -NCT06316960 -NCT06323044 -NCT06317181 -NCT06323148 -NCT06317246 -NCT06323239 -NCT06317272 -NCT06323291 -NCT06317298 -NCT06323369 -NCT06317311 -NCT06323421 -NCT06317389 -NCT06323460 -NCT06317649 -NCT06323473 -NCT06317662 -NCT06323525 -NCT06318182 -NCT06323707 -NCT06318221 -NCT06324058 -NCT06318273 -NCT06324110 -NCT06318286 -NCT06324240 -NCT06318338 -NCT06324266 -NCT06318559 -NCT06324357 -NCT06318702 -NCT06324409 -NCT06318871 -NCT06324721 -NCT06318884 -NCT06324877 -NCT06318897 -NCT06324994 -NCT06319027 -NCT06325046 -NCT06319157 -NCT06325683 -NCT06319196 -NCT06325748 -NCT06319313 -NCT06325774 -NCT06319456 -NCT06325787 -NCT06319794 -NCT06325995 -NCT06319820 -NCT06326008 -NCT06319950 -NCT06326190 -NCT06319963 -NCT06326268 -NCT06320067 -NCT06326294 -NCT06320080 -NCT06326346 -NCT06320301 -NCT06326411 -NCT06320353 -NCT06326437 -NCT06320405 -NCT06326463 -NCT06320990 -NCT06326502 -NCT06321016 -NCT06326567 -NCT06321068 -NCT06326697 -NCT06321081 -NCT06326736 -NCT06321250 -NCT06326957 -NCT06321289 -NCT06327048 -NCT06321484 -NCT06327074 -NCT06321666 -NCT06327139 -NCT06321692 -NCT06327438 -NCT06321744 -NCT06327451 -NCT06321874 -NCT06327477 -NCT06321913 -NCT06327490 -NCT06322095 -NCT06327685 -NCT06322108 -NCT06327698 -NCT06322316 -NCT06327932 -NCT06322329 -NCT06327997 -NCT06322563 -NCT06328036 -NCT06322576 -NCT06328049 -NCT06322602 -NCT06328179 -NCT06322615 -NCT06328361 -NCT06322693 -NCT06339424 -NCT06328439 -NCT06333392 -NCT06328465 -NCT06333314 -NCT06328491 -NCT06333509 -NCT06328673 -NCT06333678 -NCT06328686 -NCT06333769 -NCT06328699 -NCT06333821 -NCT06328738 -NCT06333899 -NCT06328751 -NCT06333951 -NCT06329206 -NCT06334380 -NCT06329479 -NCT06334432 -NCT06329570 -NCT06334458 -NCT06329830 -NCT06334757 -NCT06329869 -NCT06334783 -NCT06329895 -NCT06334965 -NCT06329908 -NCT06334991 -NCT06329947 -NCT06335069 -NCT06329973 -NCT06335147 -NCT06329999 -NCT06335355 -NCT06330012 -NCT06335420 -NCT06330038 -NCT06335550 -NCT06330064 -NCT06335667 -NCT06330298 -NCT06335693 -NCT06330337 -NCT06335745 -NCT06330441 -NCT06335914 -NCT06330805 -NCT06335927 -NCT06330870 -NCT06336070 -NCT06330909 -NCT06336148 -NCT06331013 -NCT06336291 -NCT06331117 -NCT06336395 -NCT06331169 -NCT06336538 -NCT06331299 -NCT06336707 -NCT06331403 -NCT06336902 -NCT06331455 -NCT06336941 -NCT06331468 -NCT06336954 -NCT06331559 -NCT06337084 -NCT06331585 -NCT06337162 -NCT06331598 -NCT06337214 -NCT06331650 -NCT06337318 -NCT06331793 -NCT06337331 -NCT06331845 -NCT06337552 -NCT06331962 -NCT06337630 -NCT06331975 -NCT06337695 -NCT06332079 -NCT06337942 -NCT06332092 -NCT06338020 -NCT06332170 -NCT06338215 -NCT06332274 -NCT06338436 -NCT06332287 -NCT06338475 -NCT06332300 -NCT06338592 -NCT06332430 -NCT06338657 -NCT06332508 -NCT06338683 -NCT06332573 -NCT06339060 -NCT06332664 -NCT06339216 -NCT06332716 -NCT06339242 -NCT06332755 -NCT06339281 -NCT06332950 -NCT06339372 -NCT06333262 -NCT06349148 -NCT06339619 -NCT06344130 -NCT06339775 -NCT06344052 -NCT06339827 -NCT06344156 -NCT06340204 -NCT06344351 -NCT06340230 -NCT06344715 -NCT06340503 -NCT06344923 -NCT06340516 -NCT06345001 -NCT06340568 -NCT06345027 -NCT06340620 -NCT06345079 -NCT06340646 -NCT06345287 -NCT06340711 -NCT06345300 -NCT06340737 -NCT06345365 -NCT06340815 -NCT06345482 -NCT06340906 -NCT06345534 -NCT06341114 -NCT06345599 -NCT06341257 -NCT06345729 -NCT06341270 -NCT06345924 -NCT06341296 -NCT06346041 -NCT06341309 -NCT06346054 -NCT06341322 -NCT06346067 -NCT06341335 -NCT06346080 -NCT06341400 -NCT06346093 -NCT06341478 -NCT06346197 -NCT06341530 -NCT06346366 -NCT06341556 -NCT06346392 -NCT06341595 -NCT06346418 -NCT06341621 -NCT06346470 -NCT06341647 -NCT06346782 -NCT06341660 -NCT06346808 -NCT06341712 -NCT06346912 -NCT06341764 -NCT06347068 -NCT06341842 -NCT06347185 -NCT06341855 -NCT06347198 -NCT06341894 -NCT06347354 -NCT06341907 -NCT06347393 -NCT06341998 -NCT06347458 -NCT06342037 -NCT06347653 -NCT06342167 -NCT06347705 -NCT06342297 -NCT06347731 -NCT06342336 -NCT06347757 -NCT06342453 -NCT06347926 -NCT06342466 -NCT06347965 -NCT06342908 -NCT06348030 -NCT06342986 -NCT06348108 -NCT06343038 -NCT06348134 -NCT06343064 -NCT06348147 -NCT06343077 -NCT06348199 -NCT06343090 -NCT06348264 -NCT06343116 -NCT06348290 -NCT06343272 -NCT06348719 -NCT06343311 -NCT06348797 -NCT06343376 -NCT06348888 -NCT06343402 -NCT06348927 -NCT06343935 -NCT06348940 -NCT06343948 -NCT06349044 -NCT06343987 -NCT06360211 -NCT06349278 -NCT06354738 -NCT06349317 -NCT06354595 -NCT06349408 -NCT06354959 -NCT06349512 -NCT06355024 -NCT06349590 -NCT06355037 -NCT06349668 -NCT06355076 -NCT06349811 -NCT06355401 -NCT06349837 -NCT06355427 -NCT06349889 -NCT06355440 -NCT06349967 -NCT06355518 -NCT06349980 -NCT06355583 -NCT06350006 -NCT06355609 -NCT06350097 -NCT06355622 -NCT06350162 -NCT06355700 -NCT06350318 -NCT06355739 -NCT06350370 -NCT06355843 -NCT06350500 -NCT06355908 -NCT06350786 -NCT06355921 -NCT06350825 -NCT06356129 -NCT06350838 -NCT06356155 -NCT06351020 -NCT06356311 -NCT06351046 -NCT06356571 -NCT06351085 -NCT06356584 -NCT06351306 -NCT06356597 -NCT06351332 -NCT06356688 -NCT06351371 -NCT06356701 -NCT06351475 -NCT06356714 -NCT06351631 -NCT06356779 -NCT06351644 -NCT06356883 -NCT06351904 -NCT06356922 -NCT06352073 -NCT06357182 -NCT06352242 -NCT06357377 -NCT06352359 -NCT06357416 -NCT06352866 -NCT06357533 -NCT06353022 -NCT06357585 -NCT06353061 -NCT06357598 -NCT06353126 -NCT06357676 -NCT06353152 -NCT06357858 -NCT06353178 -NCT06357975 -NCT06353360 -NCT06357988 -NCT06353386 -NCT06358053 -NCT06353581 -NCT06358430 -NCT06353646 -NCT06358469 -NCT06353685 -NCT06358573 -NCT06353698 -NCT06358677 -NCT06353906 -NCT06359054 -NCT06353997 -NCT06359275 -NCT06354036 -NCT06359379 -NCT06354049 -NCT06359431 -NCT06354114 -NCT06359509 -NCT06354140 -NCT06359821 -NCT06354218 -NCT06359847 -NCT06354231 -NCT06359860 -NCT06354387 -NCT06359964 -NCT06354478 -NCT06360042 -NCT06354530 -NCT06370416 -NCT06360354 -NCT06364696 -NCT06360575 -NCT06364631 -NCT06360588 -NCT06364787 -NCT06360627 -NCT06364800 -NCT06360653 -NCT06364826 -NCT06360718 -NCT06364904 -NCT06360809 -NCT06364917 -NCT06360822 -NCT06364956 -NCT06360978 -NCT06365008 -NCT06361030 -NCT06365450 -NCT06361056 -NCT06365619 -NCT06361121 -NCT06365788 -NCT06361264 -NCT06365840 -NCT06361316 -NCT06365853 -NCT06361329 -NCT06365866 -NCT06361641 -NCT06365918 -NCT06361758 -NCT06365970 -NCT06361810 -NCT06366347 -NCT06361862 -NCT06366451 -NCT06361888 -NCT06366490 -NCT06361927 -NCT06366516 -NCT06361940 -NCT06366685 -NCT06361979 -NCT06366789 -NCT06362070 -NCT06366945 -NCT06362096 -NCT06367075 -NCT06362252 -NCT06367088 -NCT06362291 -NCT06367114 -NCT06362304 -NCT06367257 -NCT06362317 -NCT06367270 -NCT06362369 -NCT06367374 -NCT06362395 -NCT06367556 -NCT06362616 -NCT06367751 -NCT06362694 -NCT06367959 -NCT06362902 -NCT06367972 -NCT06362980 -NCT06368063 -NCT06362993 -NCT06368141 -NCT06363006 -NCT06368167 -NCT06363162 -NCT06368310 -NCT06363201 -NCT06368414 -NCT06363266 -NCT06368817 -NCT06363552 -NCT06368921 -NCT06363591 -NCT06368934 -NCT06363708 -NCT06368947 -NCT06363734 -NCT06368960 -NCT06363773 -NCT06369155 -NCT06363825 -NCT06369246 -NCT06363994 -NCT06369259 -NCT06364007 -NCT06369285 -NCT06364033 -NCT06369597 -NCT06364046 -NCT06369610 -NCT06364267 -NCT06369831 -NCT06364384 -NCT06370000 -NCT06364410 -NCT06370026 -NCT06364423 -NCT06370065 -NCT06364501 -NCT06370234 -NCT06364553 -NCT06381570 -NCT06370663 -NCT06376578 -NCT06370754 -NCT06376565 -NCT06370871 -NCT06376604 -NCT06371118 -NCT06376669 -NCT06371157 -NCT06376682 -NCT06371274 -NCT06376721 -NCT06371469 -NCT06377033 -NCT06371508 -NCT06377059 -NCT06371534 -NCT06377111 -NCT06371586 -NCT06377124 -NCT06371625 -NCT06377267 -NCT06371716 -NCT06377371 -NCT06371768 -NCT06377501 -NCT06371807 -NCT06377540 -NCT06371911 -NCT06377566 -NCT06371989 -NCT06377683 -NCT06372223 -NCT06377696 -NCT06372236 -NCT06377722 -NCT06372301 -NCT06377735 -NCT06372574 -NCT06377852 -NCT06372626 -NCT06378047 -NCT06372717 -NCT06378177 -NCT06373133 -NCT06378190 -NCT06373380 -NCT06378242 -NCT06373406 -NCT06378346 -NCT06373471 -NCT06378437 -NCT06373497 -NCT06378593 -NCT06374160 -NCT06378658 -NCT06374173 -NCT06378749 -NCT06374251 -NCT06378866 -NCT06374459 -NCT06378892 -NCT06374485 -NCT06379087 -NCT06374602 -NCT06379113 -NCT06374888 -NCT06379191 -NCT06374901 -NCT06379217 -NCT06375044 -NCT06379282 -NCT06375109 -NCT06379360 -NCT06375187 -NCT06379399 -NCT06375317 -NCT06379451 -NCT06375486 -NCT06379698 -NCT06375564 -NCT06379880 -NCT06375642 -NCT06380101 -NCT06375707 -NCT06380309 -NCT06375733 -NCT06380348 -NCT06375915 -NCT06380361 -NCT06375928 -NCT06380387 -NCT06375954 -NCT06380660 -NCT06375967 -NCT06380751 -NCT06376136 -NCT06380816 -NCT06376162 -NCT06380881 -NCT06376188 -NCT06381024 -NCT06376253 -NCT06381050 -NCT06376292 -NCT06381141 -NCT06376344 -NCT06381154 -NCT06376357 -NCT06381557 -NCT06376526 -NCT06390956 -NCT06381726 -NCT06386198 -NCT06381817 -NCT06386146 -NCT06381830 -NCT06386302 -NCT06381960 -NCT06386315 -NCT06382116 -NCT06386432 -NCT06382129 -NCT06386653 -NCT06382142 -NCT06386705 -NCT06382168 -NCT06386861 -NCT06382818 -NCT06386887 -NCT06382948 -NCT06387017 -NCT06383052 -NCT06387056 -NCT06383338 -NCT06387069 -NCT06383507 -NCT06387121 -NCT06383520 -NCT06387134 -NCT06383533 -NCT06387238 -NCT06383559 -NCT06387342 -NCT06383598 -NCT06387368 -NCT06383663 -NCT06387420 -NCT06383728 -NCT06387485 -NCT06383767 -NCT06387628 -NCT06383780 -NCT06387810 -NCT06383884 -NCT06388018 -NCT06383988 -NCT06388031 -NCT06384053 -NCT06388135 -NCT06384222 -NCT06388252 -NCT06384235 -NCT06388304 -NCT06384248 -NCT06388369 -NCT06384261 -NCT06388720 -NCT06384300 -NCT06388733 -NCT06384352 -NCT06389006 -NCT06384417 -NCT06389123 -NCT06384482 -NCT06389201 -NCT06384560 -NCT06389292 -NCT06384677 -NCT06389305 -NCT06384807 -NCT06389357 -NCT06384820 -NCT06389422 -NCT06384950 -NCT06389448 -NCT06385080 -NCT06389500 -NCT06385262 -NCT06389526 -NCT06385288 -NCT06389591 -NCT06385418 -NCT06389682 -NCT06385483 -NCT06389695 -NCT06385496 -NCT06389760 -NCT06385522 -NCT06389786 -NCT06385548 -NCT06389799 -NCT06385652 -NCT06389981 -NCT06385665 -NCT06390059 -NCT06385678 -NCT06390111 -NCT06385691 -NCT06390241 -NCT06385730 -NCT06390319 -NCT06385808 -NCT06390774 -NCT06385847 -NCT06390826 -NCT06385873 -NCT06390839 -NCT06385925 -NCT06390852 -NCT06385990 -NCT06390865 -NCT06386107 -NCT06401824 -NCT06390982 -NCT06395935 -NCT06390995 -NCT06395896 -NCT06391008 -NCT06396065 -NCT06391034 -NCT06396091 -NCT06391099 -NCT06396481 -NCT06391190 -NCT06396598 -NCT06391242 -NCT06396611 -NCT06391385 -NCT06396637 -NCT06391775 -NCT06396806 -NCT06391814 -NCT06397001 -NCT06391892 -NCT06397027 -NCT06391905 -NCT06397040 -NCT06391918 -NCT06397222 -NCT06391944 -NCT06397235 -NCT06392009 -NCT06397430 -NCT06392295 -NCT06397560 -NCT06392399 -NCT06397573 -NCT06392477 -NCT06397651 -NCT06392737 -NCT06397703 -NCT06392789 -NCT06397963 -NCT06392841 -NCT06398028 -NCT06392971 -NCT06398067 -NCT06393166 -NCT06398314 -NCT06393335 -NCT06398405 -NCT06393361 -NCT06398418 -NCT06393374 -NCT06398444 -NCT06393400 -NCT06398457 -NCT06393712 -NCT06398470 -NCT06393738 -NCT06398587 -NCT06393751 -NCT06398613 -NCT06393816 -NCT06398639 -NCT06393985 -NCT06398795 -NCT06394011 -NCT06398899 -NCT06394128 -NCT06399029 -NCT06394258 -NCT06399276 -NCT06394297 -NCT06399315 -NCT06394414 -NCT06399393 -NCT06394492 -NCT06399419 -NCT06394570 -NCT06399640 -NCT06394622 -NCT06399757 -NCT06394661 -NCT06400160 -NCT06394674 -NCT06400225 -NCT06394713 -NCT06400238 -NCT06394791 -NCT06400251 -NCT06394804 -NCT06400264 -NCT06395064 -NCT06400472 -NCT06395090 -NCT06400485 -NCT06395103 -NCT06400563 -NCT06395337 -NCT06400849 -NCT06395402 -NCT06401005 -NCT06395441 -NCT06401174 -NCT06395506 -NCT06401330 -NCT06395519 -NCT06401356 -NCT06395753 -NCT06401447 -NCT06395844 -NCT06401603 -NCT06395870 -NCT06413680 -NCT06401980 -NCT06408194 -NCT06402188 -NCT06408168 -NCT06402201 -NCT06408220 -NCT06402331 -NCT06408298 -NCT06402357 -NCT06408428 -NCT06402383 -NCT06408597 -NCT06402435 -NCT06408623 -NCT06402552 -NCT06408688 -NCT06402708 -NCT06409065 -NCT06402864 -NCT06409195 -NCT06403111 -NCT06409390 -NCT06403436 -NCT06409403 -NCT06403709 -NCT06409429 -NCT06403735 -NCT06409637 -NCT06403878 -NCT06409767 -NCT06404281 -NCT06409910 -NCT06404463 -NCT06409936 -NCT06404528 -NCT06410092 -NCT06404671 -NCT06410131 -NCT06404697 -NCT06410209 -NCT06404736 -NCT06410248 -NCT06404840 -NCT06410534 -NCT06404905 -NCT06410625 -NCT06404983 -NCT06410651 -NCT06405061 -NCT06410703 -NCT06405113 -NCT06410716 -NCT06405139 -NCT06410833 -NCT06405217 -NCT06411171 -NCT06405230 -NCT06411301 -NCT06405425 -NCT06411457 -NCT06405490 -NCT06411600 -NCT06405568 -NCT06411678 -NCT06405685 -NCT06411691 -NCT06405776 -NCT06411756 -NCT06405828 -NCT06411795 -NCT06406127 -NCT06411821 -NCT06406166 -NCT06411834 -NCT06406244 -NCT06411938 -NCT06406322 -NCT06412068 -NCT06406426 -NCT06412107 -NCT06406465 -NCT06412120 -NCT06406556 -NCT06412133 -NCT06406608 -NCT06412198 -NCT06406634 -NCT06412341 -NCT06406660 -NCT06412458 -NCT06406673 -NCT06412510 -NCT06406803 -NCT06412575 -NCT06406816 -NCT06412692 -NCT06406829 -NCT06412952 -NCT06406868 -NCT06413017 -NCT06407037 -NCT06413095 -NCT06407310 -NCT06413342 -NCT06407401 -NCT06413498 -NCT06407947 -NCT06413615 -NCT06408038 -NCT06413628 -NCT06408116 -NCT06422858 -NCT06413706 -NCT06418594 -NCT06413745 -NCT06418516 -NCT06413888 -NCT06418659 -NCT06413953 -NCT06418724 -NCT06413992 -NCT06418750 -NCT06414122 -NCT06418776 -NCT06414148 -NCT06418789 -NCT06414317 -NCT06418945 -NCT06414421 -NCT06419023 -NCT06414434 -NCT06419140 -NCT06414460 -NCT06419179 -NCT06414577 -NCT06419244 -NCT06414590 -NCT06419348 -NCT06414733 -NCT06419361 -NCT06414902 -NCT06419621 -NCT06414915 -NCT06419634 -NCT06415032 -NCT06419673 -NCT06415162 -NCT06419946 -NCT06415266 -NCT06420063 -NCT06415318 -NCT06420076 -NCT06415396 -NCT06420089 -NCT06415487 -NCT06420115 -NCT06415500 -NCT06420193 -NCT06415656 -NCT06420206 -NCT06415669 -NCT06420258 -NCT06415708 -NCT06420349 -NCT06415851 -NCT06420440 -NCT06415903 -NCT06420609 -NCT06416007 -NCT06420726 -NCT06416085 -NCT06420908 -NCT06416150 -NCT06420973 -NCT06416319 -NCT06421142 -NCT06416358 -NCT06421155 -NCT06416410 -NCT06421220 -NCT06416436 -NCT06421285 -NCT06416696 -NCT06421298 -NCT06416748 -NCT06421324 -NCT06416774 -NCT06421376 -NCT06416852 -NCT06421532 -NCT06416930 -NCT06421610 -NCT06416943 -NCT06421649 -NCT06417008 -NCT06421675 -NCT06417190 -NCT06421935 -NCT06417281 -NCT06421948 -NCT06417294 -NCT06421974 -NCT06417476 -NCT06422143 -NCT06417554 -NCT06422156 -NCT06417606 -NCT06422312 -NCT06417658 -NCT06422403 -NCT06417736 -NCT06422455 -NCT06417814 -NCT06422520 -NCT06418061 -NCT06422533 -NCT06418087 -NCT06422637 -NCT06418113 -NCT06422702 -NCT06418126 -NCT06422806 -NCT06418477 -NCT06433609 -NCT06422936 -NCT06428331 -NCT06422949 -NCT06428045 -NCT06423170 -NCT06428396 -NCT06423326 -NCT06428409 -NCT06423690 -NCT06428422 -NCT06423885 -NCT06428487 -NCT06423911 -NCT06428500 -NCT06423937 -NCT06428682 -NCT06423963 -NCT06428708 -NCT06424054 -NCT06428721 -NCT06424067 -NCT06429046 -NCT06424080 -NCT06429098 -NCT06424197 -NCT06429150 -NCT06424301 -NCT06429189 -NCT06424340 -NCT06429449 -NCT06424522 -NCT06429514 -NCT06424626 -NCT06429696 -NCT06424665 -NCT06429761 -NCT06424717 -NCT06429813 -NCT06424821 -NCT06429839 -NCT06424873 -NCT06429865 -NCT06424899 -NCT06429878 -NCT06425133 -NCT06429891 -NCT06425146 -NCT06429904 -NCT06425224 -NCT06430112 -NCT06425276 -NCT06430177 -NCT06425302 -NCT06430346 -NCT06425926 -NCT06430372 -NCT06425991 -NCT06430437 -NCT06426056 -NCT06430502 -NCT06426511 -NCT06430515 -NCT06426654 -NCT06430541 -NCT06426680 -NCT06430658 -NCT06426745 -NCT06430736 -NCT06426797 -NCT06430749 -NCT06426810 -NCT06430827 -NCT06426927 -NCT06430840 -NCT06426992 -NCT06430866 -NCT06427044 -NCT06431243 -NCT06427057 -NCT06431490 -NCT06427213 -NCT06431529 -NCT06427226 -NCT06431594 -NCT06427239 -NCT06431633 -NCT06427252 -NCT06431685 -NCT06427291 -NCT06432036 -NCT06427330 -NCT06432075 -NCT06427369 -NCT06432426 -NCT06427447 -NCT06432478 -NCT06427460 -NCT06432556 -NCT06427473 -NCT06432972 -NCT06427798 -NCT06432998 -NCT06427811 -NCT06433063 -NCT06427824 -NCT06433219 -NCT06427941 -NCT06433258 -NCT06427954 -NCT06433362 -NCT06428019 -NCT06444412 -NCT06433726 -NCT06439225 -NCT06433947 -NCT06438939 -NCT06434064 -NCT06439420 -NCT06434077 -NCT06439433 -NCT06434090 -NCT06439485 -NCT06434103 -NCT06439550 -NCT06434350 -NCT06439589 -NCT06434376 -NCT06439693 -NCT06434402 -NCT06439706 -NCT06434467 -NCT06439771 -NCT06434480 -NCT06439784 -NCT06434493 -NCT06439836 -NCT06434597 -NCT06439888 -NCT06434610 -NCT06439914 -NCT06434649 -NCT06439979 -NCT06434662 -NCT06440005 -NCT06434740 -NCT06440057 -NCT06434753 -NCT06440135 -NCT06434896 -NCT06440187 -NCT06434909 -NCT06440616 -NCT06435104 -NCT06440811 -NCT06435117 -NCT06440850 -NCT06435260 -NCT06440902 -NCT06435351 -NCT06440954 -NCT06435429 -NCT06440993 -NCT06435455 -NCT06441019 -NCT06435546 -NCT06441045 -NCT06435559 -NCT06441084 -NCT06435741 -NCT06441097 -NCT06435871 -NCT06441110 -NCT06435910 -NCT06441292 -NCT06435975 -NCT06441331 -NCT06436144 -NCT06441344 -NCT06436157 -NCT06441487 -NCT06436300 -NCT06441513 -NCT06436612 -NCT06441565 -NCT06436651 -NCT06441747 -NCT06436885 -NCT06441773 -NCT06436976 -NCT06441851 -NCT06437288 -NCT06441890 -NCT06437353 -NCT06441994 -NCT06437496 -NCT06442475 -NCT06437509 -NCT06442605 -NCT06437522 -NCT06442709 -NCT06437574 -NCT06442748 -NCT06437678 -NCT06442891 -NCT06437977 -NCT06443047 -NCT06438055 -NCT06443203 -NCT06438250 -NCT06443359 -NCT06438367 -NCT06443489 -NCT06438588 -NCT06443632 -NCT06438614 -NCT06443671 -NCT06438627 -NCT06443710 -NCT06438783 -NCT06444009 -NCT06438796 -NCT06444269 -NCT06438822 -NCT06455735 -NCT06444815 -NCT06450548 -NCT06445062 -NCT06450314 -NCT06445114 -NCT06450574 -NCT06445140 -NCT06450821 -NCT06445166 -NCT06450873 -NCT06445192 -NCT06451003 -NCT06445257 -NCT06451211 -NCT06445400 -NCT06451263 -NCT06445517 -NCT06451302 -NCT06445738 -NCT06451445 -NCT06445803 -NCT06451497 -NCT06445881 -NCT06451536 -NCT06445907 -NCT06451614 -NCT06445972 -NCT06451861 -NCT06446050 -NCT06452004 -NCT06446115 -NCT06452160 -NCT06446128 -NCT06452277 -NCT06446154 -NCT06452394 -NCT06446206 -NCT06452433 -NCT06446388 -NCT06452602 -NCT06446557 -NCT06452706 -NCT06446570 -NCT06453044 -NCT06446648 -NCT06453486 -NCT06446661 -NCT06453590 -NCT06446713 -NCT06453642 -NCT06446726 -NCT06453655 -NCT06446882 -NCT06453785 -NCT06447090 -NCT06453889 -NCT06447103 -NCT06453902 -NCT06447376 -NCT06453993 -NCT06447623 -NCT06454071 -NCT06447636 -NCT06454097 -NCT06447662 -NCT06454175 -NCT06447987 -NCT06454201 -NCT06448013 -NCT06454266 -NCT06448286 -NCT06454383 -NCT06448312 -NCT06454409 -NCT06448351 -NCT06454435 -NCT06448364 -NCT06454448 -NCT06448572 -NCT06454578 -NCT06448754 -NCT06454864 -NCT06448910 -NCT06454890 -NCT06449027 -NCT06454968 -NCT06449209 -NCT06455046 -NCT06449222 -NCT06455072 -NCT06449313 -NCT06455124 -NCT06449417 -NCT06455189 -NCT06449482 -NCT06455254 -NCT06449586 -NCT06455358 -NCT06449664 -NCT06455371 -NCT06449781 -NCT06455410 -NCT06449937 -NCT06455592 -NCT06450041 -NCT06455605 -NCT06450080 -NCT06455657 -NCT06450106 -NCT06455722 -NCT06450171 -NL63555.031.17 -NCT06455761 -NL50519.042.14 -NCT06455904 -NL50400.031.14 -NCT06455917 -NL50577.031.14 -NCT06456125 -NL50610.031.14 -NCT06456138 -NL50842.031.15 -NCT06456203 -NL51422.031.14 -NCT06456229 -NL51468.031.14 -NCT06456346 -NL52028.031.14 -NCT06456359 -NL52341.100.15 -NCT06456463 -NL52499.031.15 -NCT06456515 -NL52708.018.15 -NCT06456528 -NL53062.031.15 -NCT06456723 -NL54248.018.15 -NCT06456892 -NL54421.031.15 -NCT06457269 -NL54778.031.15 -NCT06457503 -NL56083.031.16 -NCT06457789 -NL56181.031.15 -NCT06457906 -NL56647.031.16 -NCT06457919 -NL56664.029.16 -NCT06457997 -NL56780.058.16 -NCT06458036 -NL56864.031.16 -NCT06458049 -NL57251.031.16 -NCT06458062 -NL57267.031.16 -NCT06458413 -NL57447.056.16 -NCT06458439 -NL57471.031.16 -NCT06458517 -NL57770.031.16 -NL14635.031.06 -NL57794.031.16 -NL23017.031.08 -NL58037.031.16 -NL25610.058.08 -NL58048.031.16 -NL26128.048.08 -NL58084.031.16 -NL27175.031.09 -NL58095.031.16 -NL31685.031.10 -NL58480.031.16 -NL31855.031.11 -NL58483.031.16 -NL32518.041.10 -NL58831.028.16 -NL33144.031.10 -NL58915.031.16 -NL36413.091.11 -NL59703.091.16 -NL39647.048.12 -NL59706.078.17 -NL41285.031.12 -NL59750.031.16 -NL41664.031.12 -NL59891.031.17 -NL43041.031.13 -NL59976.029.16 -NL43553.031.13 -NL60004.031.17 -NL44192.031.13 -NL60113.031.16 -NL44278.031.13 -NL60114.031.16 -NL45030.018.13 -NL60262.031.16 -NL45282.041.13 -NL60716.029.18 -NL45524.031.13 -NL60800.018.17 -NL45948.031.13 -NL61089.018.17 -NL46486.018.13 -NL61408.041.17 -NL47685.031.14 -NL61964.058.17 -NL47888.041.14 -NL62035.078.17 -NL48096.031.14 -NL62243.078.17 -NL48298.031.14 -NL62269.031.17 -NL48425.031.14 -NL62294.031.17 -NL48824.031.14 -NL62920.056.17 -NL49002.031.14 -NL63233.031.17 -NL49315.031.14 -NCT00001471 -NL63786.041.17 -NCT00002414 -NL63971.031.17 -NCT00002466 -NL64116.042.17 -NCT00002711 -NL64289.031.17 -NCT00002930 -NL64568.031.18 -NCT00002897 -NL64588.031.18 -NCT00003023 -NL64627.031.18 -NCT00003562 -NL64722.031.18 -NCT00003674 -NL65067.031.18 -NCT00003859 -NL65081.031.18 -NCT00004330 -NL65481.091.18 -NCT00004771 -NL65483.031.18 -NCT00004833 -NL65512.078.18 -NCT00129233 -NL65724.031.18 -NCT00129467 -NL65808.031.18 -NCT00131716 -NL65937.031.18 -NCT00132535 -NL65953.031.18 -NCT00133965 -NL65956.078.18 -NCT00133328 -NL66650.041.18 -NCT00134160 -NL66662.031.18 -NCT00135278 -NL66822.031.19 -NCT00138801 -NL67171.031.18 -NCT00138346 -NL67583.031.18 -NCT00140894 -NL67613.031.18 -NCT00141583 -NL67737.031.18 -NCT00143195 -NL67818.078.18 -NCT00144716 -NL67847.031.18 -NCT00145366 -NL68433.056.19 -NCT00145951 -NL68440.029.18 -NCT00147030 -NL68511.031.19 -NCT00149227 -NL68667.028.19 -NCT00149643 -NL68710.031.19 -NCT00150124 -NL69028.031.19 -NCT00150137 -NL70045.031.19 -NCT00254826 -NL70112.031.19 -NCT00254930 -NL70221.031.19 -NCT00258024 -NL70299.031.19 -NCT00259259 -NL71722.042.19 -NCT00261105 -NL72232.000.19 -NCT00262470 -NL72306.056.20 -NCT00000369 -NL72581.000.20 -NCT00000499 -NL72840.031.20 -NCT00000492 -NL73014.031.20 -NCT00000506 -NL74496.031.20 -NCT00000556 -NL75165.031.20 -NCT00000566 -NL75583.031.20 -NCT00000726 -NL75910.031.20 -NCT00000665 -NL76627.031.21 -NCT00000673 -NL80205.031.22 -NCT00000932 -NL82622.041.22 -NCT00000981 -No ID Provided -NCT00263302 -NCT00001552 -NCT00001789 -NCT00001845 -NCT00001912 -NCT00002007 -NCT00002006 -NCT00002191 -NCT00002025 -NCT00002275 -NCT00002288 -NCT00002292 -NCT00005015 -NCT00005123 -NCT00005127 -NCT00005133 -NCT00005134 -NCT00005254 -NCT00005230 -NCT00005288 -NCT00005338 -NCT00005351 -NCT00005436 -NCT00005485 -NCT00005499 -NCT00005547 -NCT00005572 -NCT00005666 -NCT00005757 -NCT00006087 -NCT00006137 -NCT00006170 -NCT00006196 -NCT00006318 -NCT00006319 -NCT00006323 -NCT00008853 -NCT00010387 -NCT00010686 -NCT00010712 -NCT00011102 -NCT00012558 -NCT00012818 -NCT00013026 -NCT00013286 -NCT00015626 -NCT00020267 -NCT00021476 -NCT00021320 -NCT00023205 -NCT00026832 -NCT00027417 -NCT00027768 -NCT00026468 -NCT00029510 -NCT00031369 -NCT00034437 -NCT00032656 -NCT00035139 -NCT00035971 -NCT00036491 -NCT00036309 -NCT00038272 -NCT00040053 -NCT00039832 -NCT00040287 -NCT00041509 -NCT00040495 -NCT00042588 -NCT00043277 -NCT00043927 -NCT00043654 -NCT00044187 -NCT00044239 -NCT00045760 -NCT00046241 -NCT00046319 -NCT00047801 -NCT00047944 -NCT00053456 -NCT00053534 -NCT00056264 -NCT00058942 -NCT00059878 -NCT00061139 -NCT00061399 -NCT00062270 -NCT00063362 -NCT00065806 -NCT00069316 -NCT00071175 -NCT00071487 -NCT00071734 -NCT00074789 -NCT00075179 -NCT00077896 -NCT00077948 -NCT00082563 -NCT00083772 -NCT00084240 -NCT00084266 -NCT00086879 -NCT00088387 -NCT00088569 -NCT00089908 -NCT00092053 -NCT00092885 -NCT00095316 -NCT00095368 -NCT00095446 -NCT00097838 -NCT00096772 -NCT00100126 -NCT00102037 -NCT00104663 -NCT00106535 -NCT00107367 -NCT00108381 -NCT00108823 -NCT00108849 -NCT00114439 -NCT00115128 -NCT00116259 -NCT00117364 -NCT00116584 -NCT00118560 -NCT00118651 -NCT00118781 -NCT00118794 -NCT00120848 -NCT00123734 -NCT00122811 -NCT00124163 -NCT00124761 -NCT00124969 -NCT00125307 -NCT00126516 -NCT00128986 -NCT00152399 -NCT00151229 -NCT00153517 -NCT00153712 -NCT00154674 -NCT00154895 -NCT00156208 -NCT00156325 -NCT00157612 -NCT00158730 -NCT00159614 -NCT00159055 -NCT00161772 -NCT00161798 -NCT00161824 -NCT00161863 -NCT00161967 -NCT00162344 -NCT00162032 -NCT00162565 -NCT00162578 -NCT00163540 -NCT00163670 -NCT00163618 -NCT00163722 -NCT00163774 -NCT00164216 -NCT00164294 -NCT00164905 -NCT00165009 -NCT00164931 -NCT00166296 -NCT00166231 -NCT00166790 -NCT00167479 -NCT00169468 -NCT00170222 -NCT00170521 -NCT00171054 -NCT00171236 -NCT00172263 -NCT00171561 -NCT00172575 -NCT00173745 -NCT00173602 -NCT00174876 -NCT00174980 -NCT00175279 -NCT00178711 -NCT00177216 -NCT00178789 -NCT00179244 -NCT00180739 -NCT00181285 -NCT00182065 -NCT00181298 -NCT00182364 -NCT00182143 -NCT00182832 -NCT00182884 -NCT00183092 -NCT00185068 -NCT00185120 -NCT00187408 -NCT00188279 -NCT00188032 -NCT00188435 -NCT00188942 -NCT00189046 -NCT00190437 -NCT00193765 -NCT00190918 -NCT00190489 -NCT00192218 -NCT00194038 -NCT00193882 -NCT00194272 -NCT00196417 -NCT00202293 -NCT00203450 -NCT00203970 -NCT00202852 -NCT00202566 -NCT00205985 -NCT00207584 -NCT00207675 -NCT00208806 -NCT00211705 -NCT00214916 -NCT00215176 -NCT00214968 -NCT00215800 -NCT00219921 -NCT00221442 -NCT00222742 -NCT00224679 -NCT00223509 -NCT00224731 -NCT00225108 -NCT00225199 -NCT00225355 -NCT00225394 -NCT00226031 -NCT00226135 -NCT00226304 -NCT00226369 -NCT00227214 -NCT00228111 -NCT00230035 -NCT00231127 -NCT00231322 -NCT00231374 -NCT00232401 -NCT00233194 -NCT00233337 -NCT00235196 -NCT00236912 -NCT00237276 -NCT00238706 -NCT00237965 -NCT00239616 -NCT00241345 -NCT00245830 -NCT00251160 -NCT00251641 -NCT00253812 -NCT00263315 -NCT00263380 -NCT00264771 -NCT00264901 -NCT00266513 -NCT00267345 -NCT00267839 -NCT00269100 -NCT00271531 -NCT00271570 -NCT00272519 -NCT00273260 -NCT00274222 -NCT00275899 -NCT00275834 -NCT00276224 -NCT00277394 -NCT00277641 -NCT00280943 -NCT00282269 -NCT00282373 -NCT00282347 -NCT00288938 -NCT00290147 -NCT00291486 -NCT00292916 -NCT00289497 -NCT00290914 -NCT00294580 -NCT00296179 -NCT00296790 -NCT00299663 -NCT00297271 -NCT00297284 -NCT00300872 -NCT00301353 -NCT00302601 -NCT00302692 -NCT00303186 -NCT00303485 -NCT00304135 -NCT00303901 -NCT00304304 -NCT00305201 -NCT00304733 -NCT00305526 -NCT00305617 -NCT00306709 -NCT00308399 -NCT00309764 -NCT00310752 -NCT00311441 -NCT00311753 -NCT00311805 -NCT00311922 -NCT00312741 -NCT00313807 -NCT00314704 -NCT00315042 -NCT00315549 -NCT00316017 -NCT00316693 -NCT00318071 -NCT00318448 -NCT00320346 -NCT00319384 -NCT00319007 -NCT00321009 -NCT00321048 -NCT00322621 -NCT00324233 -NCT00325793 -NCT00327847 -NCT00327782 -NCT00328939 -NCT00329433 -NCT00332098 -NCT00334412 -NCT00336609 -NCT00337116 -NCT00338702 -NCT00338910 -NCT00339066 -NCT00339157 -NCT00340470 -NCT00340561 -NCT00341848 -NCT00342329 -NCT00344149 -NCT00344318 -NCT00344513 -NCT00344929 -NCT00346398 -NCT00347737 -NCT00348036 -NCT00348413 -NCT00348803 -NCT00350766 -NCT00355602 -NCT00356551 -NCT00356707 -NCT00358059 -NCT00358527 -NCT00358735 -NCT00360074 -NCT00360451 -NCT00361036 -NCT00361517 -NCT00361959 -NCT00364728 -NCT00365950 -NCT00367978 -NCT00368095 -NCT00368836 -NCT00368940 -NCT00371501 -NCT00373048 -NCT00373607 -NCT00373828 -NCT00374101 -NCT00374192 -NCT00374270 -NCT00374309 -NCT00375089 -NCT00376662 -NCT00377663 -NCT00378027 -NCT00379353 -NCT00380081 -NCT00381030 -NCT00382421 -NCT00382707 -NCT00382746 -NCT00384332 -NCT00385632 -NCT00386022 -NCT00386035 -NCT00388869 -NCT00390819 -NCT00391014 -NCT00391833 -NCT00392639 -NCT00392847 -NCT00393588 -NCT00393926 -NCT00393978 -NCT00394095 -NCT00394550 -NCT00396578 -NCT00397891 -NCT00398242 -NCT00398268 -NCT00399074 -NCT00399425 -NCT00400088 -NCT00400517 -NCT00402987 -NCT00407745 -NCT00408590 -NCT00410449 -NCT00412490 -NCT00411645 -NCT00413361 -NCT00413374 -NCT00413504 -NCT00413712 -NCT00414479 -NCT00415493 -NCT00416169 -NCT00417638 -NCT00418392 -NCT00420160 -NCT00420238 -NCT00421538 -NCT00421486 -NCT00422227 -NCT00422331 -NCT00423332 -NCT00424021 -NCT00425542 -NCT00426634 -NCT00428597 -NCT00430677 -NCT00431171 -NCT00432003 -NCT00432198 -NCT00432692 -NCT00432666 -NCT00432991 -NCT00433043 -NCT00435032 -NCT00437931 -NCT00439478 -NCT00439595 -NCT00440804 -NCT00440687 -NCT00440830 -NCT00441649 -NCT00441727 -NCT00442377 -NCT00442975 -NCT00444301 -NCT00448045 -NCT00449488 -NCT00450047 -NCT00451113 -NCT00451412 -NCT00454662 -NCT00455468 -NCT00456196 -NCT00458120 -NCT00459784 -NCT00460486 -NCT00461305 -NCT00462254 -NCT00464035 -NCT00464191 -NCT00464932 -NCT00465010 -NCT00466947 -NCT00469105 -NCT00469937 -NCT00470522 -NCT00471289 -NCT00471458 -NCT00472615 -NCT00473135 -NCT00473837 -NCT00474292 -NCT00476372 -NCT00476619 -NCT00476905 -NCT00477022 -NCT00479271 -NCT00479908 -NCT00480142 -NCT00481741 -NCT00482001 -NCT00483873 -NCT00485329 -NCT00485680 -NCT00485953 -NCT00486863 -NCT00486954 -NCT00488072 -NCT00490997 -NCT00491894 -NCT00492232 -NCT00493714 -NCT00494416 -NCT00494468 -NCT00495963 -NCT00497328 -NCT00497471 -NCT00497796 -NCT00498654 -NCT00501189 -NCT00501540 -NCT00503529 -NCT00504244 -NCT00509600 -NCT00511914 -NCT00512538 -NCT00512655 -NCT00514735 -NCT00513500 -NCT00514826 -NCT00515437 -NCT00516269 -NCT00518336 -NCT00519493 -NCT00519922 -NCT00520117 -NCT00520494 -NCT00521027 -NCT00521040 -NCT00521820 -NCT00521924 -NCT00522977 -NCT00523757 -NCT00525655 -NCT00526188 -NCT00528190 -NCT00530270 -NCT00530426 -NCT00533156 -NCT00534495 -NCT00534846 -NCT00535093 -NCT00536224 -NCT00538122 -NCT00539292 -NCT00539487 -NCT00681200 -NCT00681824 -NCT00683813 -NCT00684294 -NCT00684814 -NCT00685568 -NCT00686426 -NCT00687336 -NCT00689546 -NCT00691080 -NCT00692198 -NCT00694655 -NCT00697151 -NCT00699868 -NCT00700739 -NCT00701818 -NCT00702871 -NCT00703417 -NCT00703521 -NCT00704340 -NCT00704535 -NCT00707018 -NCT00709202 -NCT00827463 -NCT00827671 -NCT00827957 -NCT00827970 -NCT00827996 -NCT00830453 -NCT00832442 -NCT00834145 -NCT00832026 -NCT00832403 -NCT00836251 -NCT00838175 -NCT00838643 -NCT00839865 -NCT00840593 -NCT00840671 -NCT00840801 -NCT00841789 -NCT00842530 -NCT00843297 -NCT00843063 -NCT00843375 -NCT00844948 -NCT00844987 -NCT00845507 -NCT00845988 -NCT00846638 -NCT00846846 -NCT00848250 -NCT00849173 -NCT00851006 -NCT00852644 -NCT00854269 -NCT00854776 -NCT00854919 -NCT00855725 -NCT00856427 -NCT00856921 -NCT00860418 -NCT00860938 -NCT00860964 -NCT00861094 -NCT00861133 -NCT00861380 -NCT00861978 -NCT00862498 -NCT00865488 -NCT00866229 -NCT00866424 -NCT00867841 -NCT00873535 -NCT00873587 -NCT00878384 -NCT00881413 -NCT00881985 -NCT00883246 -NCT00883987 -NCT00887666 -NCT00888498 -NCT00891566 -NCT00893438 -NCT00894686 -NCT00539799 -NCT00540267 -NCT00544310 -NCT00545233 -NCT00545779 -NCT00545181 -NCT00547235 -NCT00549107 -NCT00551668 -NCT00552266 -NCT00549120 -NCT00552760 -NCT00556491 -NCT00557531 -NCT00557622 -NCT00563576 -NCT00563992 -NCT00564564 -NCT00564863 -NCT00565201 -NCT00565890 -NCT00568711 -NCT00569361 -NCT00569894 -NCT00572026 -NCT00572715 -NCT00573053 -NCT00573196 -NCT00574821 -NCT00575250 -NCT00577525 -NCT00578084 -NCT00578565 -NCT00578981 -NCT00579280 -NCT00579852 -NCT00581763 -NCT00581893 -NCT00582465 -NCT00582712 -NCT00583401 -NCT00584961 -NCT00586053 -NCT00586677 -NCT00588432 -NCT00589329 -NCT00591175 -NCT00591916 -NCT00592696 -NCT00594035 -NCT00597077 -NCT00597701 -NCT00597844 -NCT00598728 -NCT00599118 -NCT00601536 -NCT00601575 -NCT00602394 -NCT00602537 -NCT00603590 -NCT00604786 -NCT00605007 -NCT00607659 -NCT00608205 -NCT00608296 -NCT00609830 -NCT00610506 -NCT00611663 -NCT00611923 -NCT00612196 -NCT00613041 -NCT00617045 -NCT00617344 -NCT00618579 -NCT00619203 -NCT00619255 -NCT00621608 -NCT00623246 -NCT00623571 -NCT00624637 -NCT00624273 -NCT00626041 -NCT00626951 -NCT00627770 -NCT00628225 -NCT00629356 -NCT00628368 -NCT00629460 -NCT00630175 -NCT00631332 -NCT00632229 -NCT00633360 -NCT00633503 -NCT00634712 -NCT00633633 -NCT00637819 -NCT00641147 -NCT00641823 -NCT00641940 -NCT00641992 -NCT00643318 -NCT00643370 -NCT00643773 -NCT00646269 -NCT00647829 -NCT00653198 -NCT00655044 -NCT00656097 -NCT00658541 -NCT00660322 -NCT00662155 -NCT00662662 -NCT00663819 -NCT00663377 -NCT00664339 -NCT00665366 -NCT00667225 -NCT00667381 -NCT00672490 -NCT00673192 -NCT00674648 -NCT00674726 -NCT00674778 -NCT00679796 -NCT00679835 -NCT00680836 -NCT00712998 -NCT00714402 -NCT00716521 -NCT00718107 -NCT00719784 -NCT00720395 -NCT00720681 -NCT00720915 -NCT00721006 -NCT00722709 -NCT00721955 -NCT00724828 -NCT00725881 -NCT00726570 -NCT00726947 -NCT00727376 -NCT00727974 -NCT00730366 -NCT00731601 -NCT00732875 -NCT00733330 -NCT00734565 -NCT00735527 -NCT00736216 -NCT00736333 -NCT00736827 -NCT00738283 -NCT00739362 -NCT00739596 -NCT00740155 -NCT00740090 -NCT00740883 -NCT00741299 -NCT00741845 -NCT00742014 -NCT00743106 -NCT00743496 -NCT00745043 -NCT00745056 -NCT00747981 -NCT00748449 -NCT00749229 -NCT00750061 -NCT00751634 -NCT00752232 -NCT00753025 -NCT00754741 -NCT00755053 -NCT00756145 -NCT00756756 -NCT00759122 -NCT00759993 -NCT00760669 -NCT00760734 -NCT00762086 -NCT00762775 -NCT00764101 -NCT00766064 -NCT00766415 -NCT00767195 -NCT00767624 -NCT00768495 -NCT00769275 -NCT00769873 -NCT00770107 -NCT00770705 -NCT00770991 -NCT00771563 -NCT00772005 -NCT00774137 -NCT00774150 -NCT00774176 -NCT00774917 -NCT00775528 -NCT00776646 -NCT00778349 -NCT00778362 -NCT00779194 -NCT00779740 -NCT00780260 -NCT00781482 -NCT00781833 -NCT00781950 -NCT00782912 -NCT00783224 -NCT00785057 -NCT00786032 -NCT00787397 -NCT00787904 -NCT00788151 -NCT00788645 -NCT00789399 -NCT00789490 -NCT00789646 -NCT00791505 -NCT00791843 -NCT00792220 -NCT00793403 -NCT00794079 -NCT00797641 -NCT00796913 -NCT00797953 -NCT00798291 -NCT00804726 -NCT00806091 -NCT00806234 -NCT00807469 -NCT00807976 -NCT00808652 -NCT00809029 -NCT00809757 -NCT00810121 -NCT00810940 -NCT00811265 -NCT00812474 -NCT00814502 -NCT00816556 -NCT00816634 -NCT00816920 -NCT00817908 -NCT00819624 -NCT00820794 -NCT00823563 -NCT00823836 -NCT00822289 -NCT00821522 -NCT00895531 -NCT00897299 -NCT00897364 -NCT00897650 -NCT00898495 -NCT00900016 -NCT00902512 -NCT00905385 -NCT00905710 -NCT00906568 -NCT00906711 -NCT00907543 -NCT00907686 -NCT00908037 -NCT00908063 -NCT00908817 -NCT00911352 -NCT00912990 -NCT00913653 -NCT00915642 -NCT00915707 -NCT00915928 -NCT00916500 -NCT00918307 -NCT00918320 -NCT00920270 -NCT00921050 -NCT00923598 -NCT00923832 -NCT00925119 -NCT00925288 -NCT00926770 -NCT00926991 -NCT00928915 -NCT00928941 -NCT00929721 -NCT00929773 -NCT00930826 -NCT00931112 -NCT00932867 -NCT00933790 -NCT00934453 -NCT00934843 -NCT00934908 -NCT00936598 -NCT00937365 -NCT00938353 -NCT00938756 -NCT00939718 -NCT00942929 -NCT00944333 -NCT00944684 -NCT00946296 -NCT00946413 -NCT00946894 -NCT00948272 -NCT00948610 -NCT00950404 -NCT00950040 -NCT00950417 -NCT00951808 -NCT00951821 -NCT00952263 -NCT00952510 -NCT00954200 -NCT00954395 -NCT00955604 -NCT00956319 -NCT00957021 -NCT00957541 -NCT00959192 -NCT00963196 -NCT00963235 -NCT00963651 -NCT00964769 -NCT00965601 -NCT00965744 -NCT00965809 -NCT01099943 -NCT01098851 -NCT01101802 -NCT01102998 -NCT01103999 -NCT01107262 -NCT01108120 -NCT01109147 -NCT01110356 -NCT01110304 -NCT01110551 -NCT01112436 -NCT01113489 -NCT01113645 -NCT01113749 -NCT01113840 -NCT01115153 -NCT01115231 -NCT01115933 -NCT01117077 -NCT01117532 -NCT01117610 -NCT01117961 -NCT01118000 -NCT01118403 -NCT01121510 -NCT01123837 -NCT01125384 -NCT01125150 -NCT01125527 -NCT01128322 -NCT01128764 -NCT01128907 -NCT01128933 -NCT01131624 -NCT01133002 -NCT01133119 -NCT01134328 -NCT01134731 -NCT01135134 -NCT01137578 -NCT01138683 -NCT01138826 -NCT01138969 -NCT01139632 -NCT01141907 -NCT01141972 -NCT01142115 -NCT00966199 -NCT00967304 -NCT00967746 -NCT00970476 -NCT00970515 -NCT00970879 -NCT00971217 -NCT00971386 -NCT00971984 -NCT00974064 -NCT00974116 -NCT00974337 -NCT00974766 -NCT00977106 -NCT00978471 -NCT00979199 -NCT00979615 -NCT00981630 -NCT00982670 -NCT00982371 -NCT00984256 -NCT00984763 -NCT00985244 -NCT00986128 -NCT00990262 -NCT00990522 -NCT00992927 -NCT00992966 -NCT00993850 -NCT00996281 -NCT00996918 -NCT00997633 -NCT00997672 -NCT00997737 -NCT00997932 -NCT00998634 -NCT00999635 -NCT01001663 -NCT01002235 -NCT01004289 -NCT01004939 -NCT01005264 -NCT01006421 -NCT01006525 -NCT01007877 -NCT01010464 -NCT01012180 -NCT01013428 -NCT01013662 -NCT01017055 -NCT01017081 -NCT01018238 -NCT01019681 -NCT01019902 -NCT01021826 -NCT01022307 -NCT01022567 -NCT01023828 -NCT01024114 -NCT01024439 -NCT01025726 -NCT01027455 -NCT01028404 -NCT01028534 -NCT01029262 -NCT01031537 -NCT01031797 -NCT01032135 -NCT01032356 -NCT01034358 -NCT01036659 -NCT01039259 -NCT01040923 -NCT01041196 -NCT01041729 -NCT01041924 -NCT01043354 -NCT01044199 -NCT01044316 -NCT01047098 -NCT01047839 -NCT01049217 -NCT01050049 -NCT01050062 -NCT01050881 -NCT01052038 -NCT01055431 -NCT01055665 -NCT01056146 -NCT01060748 -NCT01062438 -NCT01062828 -NCT01062997 -NCT01063959 -NCT01064947 -NCT01070732 -NCT01070966 -NCT01071421 -NCT01072032 -NCT01074073 -NCT01074112 -NCT01075035 -NCT01075204 -NCT01076101 -NCT01076738 -NCT01076855 -NCT01077596 -NCT01078779 -NCT01080274 -NCT01080326 -NCT01080989 -NCT01081275 -NCT01083563 -NCT01084980 -NCT01086709 -NCT01087723 -NCT01086280 -NCT01088243 -NCT01090232 -NCT01091415 -NCT01091961 -NCT01093339 -NCT01093937 -NCT01094899 -NCT01095406 -NCT01097928 -NCT01142180 -NCT01143246 -NCT01144143 -NCT01145157 -NCT01145313 -NCT01147640 -NCT01148719 -NCT01149187 -NCT01152463 -NCT01155401 -NCT01156428 -NCT01158209 -NCT01159652 -NCT01159834 -NCT01161693 -NCT01161849 -NCT01162343 -NCT01162902 -NCT01163123 -NCT01163565 -NCT01165866 -NCT01166425 -NCT01167205 -NCT01169389 -NCT01170546 -NCT01171911 -NCT01172444 -NCT01172652 -NCT01173250 -NCT01173666 -NCT01173939 -NCT01175161 -NCT01175434 -NCT01175889 -NCT01176643 -NCT01176071 -NCT01177293 -NCT01177657 -NCT01178177 -NCT01180179 -NCT01181154 -NCT01181232 -NCT01181583 -NCT01182532 -NCT01182597 -NCT01182961 -NCT01183026 -NCT01184443 -NCT01184846 -NCT01186679 -NCT01186900 -NCT01187901 -NCT01187433 -NCT01188993 -NCT01191580 -NCT01192282 -NCT01192620 -NCT01192789 -NCT01194232 -NCT01196299 -NCT01198210 -NCT01199185 -NCT01199276 -NCT01200628 -NCT01201252 -NCT01202201 -NCT01203696 -NCT01204359 -NCT01204411 -NCT01205776 -NCT01206231 -NCT01206868 -NCT01207128 -NCT01207999 -NCT01210469 -NCT01208714 -NCT01211171 -NCT01211236 -NCT01212757 -NCT01212770 -NCT01213693 -NCT01214265 -NCT01214954 -NCT01217463 -NCT01218893 -NCT01219023 -NCT01219998 -NCT01220895 -NCT01221844 -NCT01222273 -NCT01226134 -NCT01226953 -NCT01227200 -NCT01227369 -NCT01228123 -NCT01228383 -NCT01229176 -NCT01230827 -NCT01230931 -NCT01231165 -NCT01231672 -NCT01232387 -NCT01232647 -NCT01233869 -NCT01235546 -NCT01236599 -NCT01236612 -NCT01237392 -NCT01238926 -NCT01238991 -NCT01240044 -NCT01241201 -NCT01242150 -NCT01243255 -NCT01244217 -NCT01244386 -NCT01245283 -NCT01245816 -NCT01247077 -NCT01247142 -NCT01248507 -NCT01249885 -NCT01250262 -NCT01250275 -NCT01251744 -NCT01251497 -NCT01253486 -NCT01253967 -NCT01253980 -NCT01254708 -NCT01255670 -NCT01255735 -NCT01256099 -NCT01257165 -NCT01258062 -NCT01258725 -NCT01258738 -NCT01259206 -NCT01259388 -NCT01260259 -NCT01262742 -NCT01263067 -NCT01263288 -NCT01265004 -NCT01269073 -NCT01269125 -NCT01273519 -NCT01274871 -NCT01276561 -NCT01279824 -NCT01279928 -NCT01281475 -NCT01281969 -NCT01282749 -NCT01284179 -NCT01284218 -NCT01285973 -NCT01286493 -NCT01288560 -NCT01289548 -NCT01289262 -NCT01290770 -NCT01291979 -NCT01292915 -NCT01293019 -NCT01293825 -NCT01293955 -NCT01294111 -NCT01294696 -NCT01295294 -NCT01296477 -NCT01296750 -NCT01296789 -NCT01297387 -NCT01297868 -NCT01298986 -NCT01298531 -NCT01300832 -NCT01301131 -NCT01301989 -NCT01302418 -NCT01304108 -NCT01305226 -NCT01306227 -NCT01306994 -NCT01307423 -NCT01307644 -NCT01308385 -NCT01309113 -NCT01310309 -NCT01310361 -NCT01312077 -NCT01313494 -NCT01314573 -NCT01315379 -NCT01315704 -NCT01315795 -NCT01316965 -NCT01317160 -NCT01318174 -NCT01318954 -NCT01319370 -NCT01319682 -NCT01319955 -NCT01320813 -NCT01321788 -NCT01322958 -NCT01326507 -NCT01322828 -NCT01329458 -NCT01331512 -NCT01330368 -NCT01332188 -NCT01334203 -NCT01334762 -NCT01334788 -NCT01335022 -NCT01335594 -NCT01336777 -NCT01337336 -NCT01338311 -NCT01339637 -NCT01339702 -NCT01340963 -NCT01341067 -NCT01342796 -NCT01344954 -NCT01345097 -NCT01345110 -NCT01345708 -NCT01349400 -NCT01350349 -NCT01353144 -NCT01353846 -NCT01355627 -NCT01356459 -NCT01356992 -NCT01359020 -NCT01360424 -NCT01362283 -NCT01362517 -NCT01363310 -NCT01365286 -NCT01368068 -NCT01369563 -NCT01369797 -NCT01370837 -NCT01373879 -NCT01371383 -NCT01375621 -NCT01376778 -NCT01377519 -NCT01379027 -NCT01379196 -NCT01379326 -NCT01380665 -NCT01381367 -NCT01381536 -NCT01382277 -NCT01385709 -NCT01387074 -NCT01387828 -NCT01388400 -NCT01390922 -NCT01392820 -NCT01394107 -NCT01395238 -NCT01395875 -NCT01395498 -NCT01396304 -NCT01396798 -NCT01396837 -NCT01397175 -NCT01397474 -NCT01399736 -NCT01397994 -NCT01402856 -NCT01403714 -NCT01405755 -NCT01404962 -NCT01405963 -NCT01406379 -NCT01407146 -NCT01408186 -NCT01408693 -NCT01411852 -NCT01412138 -NCT01412593 -NCT01412684 -NCT01413100 -NCT01413230 -NCT01414439 -NCT01416220 -NCT01422577 -NCT01421901 -NCT01422343 -NCT01422954 -NCT01425632 -NCT01426997 -NCT01427712 -NCT01428154 -NCT01428518 -NCT01428817 -NCT01429194 -NCT01430663 -NCT01431911 -NCT01431352 -NCT01432925 -NCT01436396 -NCT01438060 -NCT01440075 -NCT01440803 -NCT01440231 -NCT01442675 -NCT01443104 -NCT01443793 -NCT01444612 -NCT01444833 -NCT01446198 -NCT01448226 -NCT01449422 -NCT01451931 -NCT01452243 -NCT01452971 -NCT01453400 -NCT01454492 -NCT01458405 -NCT01459952 -NCT01463202 -NCT01463475 -NCT01463878 -NCT01464671 -NCT01465425 -NCT01466387 -NCT01467973 -NCT01468194 -NCT01469897 -NCT01471249 -NCT01471613 -NCT01474915 -NCT01475097 -NCT01475786 -NCT01477047 -NCT01477931 -NCT01478035 -NCT01479153 -NCT01480414 -NCT01481766 -NCT01481922 -NCT01482052 -NCT01482624 -NCT01484912 -NCT01485237 -NCT01489358 -NCT01491776 -NCT01492647 -NCT01494792 -NCT01494870 -NCT01498094 -NCT01496586 -NCT01498146 -NCT01501227 -NCT01501526 -NCT01502358 -NCT01503788 -NCT01505738 -NCT01506583 -NCT01506999 -NCT01507454 -NCT01510886 -NCT01511315 -NCT01512446 -NCT01512784 -NCT01514825 -NCT01518816 -NCT01519115 -NCT01519583 -NCT01520155 -NCT01520688 -NCT01521403 -NCT01521871 -NCT01522105 -NCT01525160 -NCT01526148 -NCT01526382 -NCT01528904 -NCT01529463 -NCT01531517 -NCT01532739 -NCT01533519 -NCT01534247 -NCT01535248 -NCT01539668 -NCT01540318 -NCT01540838 -NCT01542463 -NCT01542723 -NCT01542762 -NCT01544036 -NCT01546857 -NCT01546961 -NCT01550068 -NCT01550588 -NCT01551485 -NCT01551069 -NCT01553734 -NCT01554124 -NCT01554527 -NCT01554657 -NCT01555827 -NCT01556373 -NCT01557322 -NCT01557725 -NCT01557803 -NCT01558206 -NCT01558310 -NCT01559415 -NCT01559532 -NCT01559948 -NCT01560702 -NCT01561001 -NCT01561729 -NCT01561794 -NCT01562613 -NCT01563887 -NCT01564303 -NCT01565642 -NCT01565993 -NCT01566058 -NCT01566682 -NCT01566929 -NCT01567969 -NCT01569698 -NCT01572584 -NCT01574664 -NCT01574950 -NCT01576315 -NCT01576978 -NCT01577108 -NCT01577277 -NCT01577979 -NCT01578200 -NCT01579344 -NCT01580917 -NCT01583400 -NCT01583465 -NCT01583855 -NCT01584817 -NCT01586481 -NCT01586962 -NCT01588665 -NCT01588899 -NCT01592825 -NCT01594359 -NCT01594385 -NCT01595906 -NCT01596335 -NCT01597622 -NCT01600482 -NCT01599403 -NCT01603875 -NCT01601964 -NCT01604538 -NCT01605214 -NCT01605864 -NCT01607775 -NCT01608373 -NCT01609101 -NCT01611896 -NCT01613235 -NCT01617499 -NCT01618175 -NCT01620723 -NCT01624519 -NCT01624545 -NCT01625689 -NCT01625832 -NCT01627119 -NCT01627327 -NCT01630343 -NCT01631448 -NCT01631916 -NCT01632319 -NCT01632774 -NCT01632813 -NCT01633593 -NCT01633671 -NCT01635257 -NCT01636401 -NCT01636453 -NCT01637051 -NCT01637298 -NCT01641289 -NCT01641627 -NCT01646398 -NCT01646411 -NCT01646645 -NCT01647776 -NCT01647932 -NCT01649752 -NCT01649765 -NCT01653587 -NCT01654887 -NCT01656577 -NCT01657136 -NCT01657318 -NCT01660594 -NCT01658267 -NCT01661491 -NCT01661920 -NCT01662258 -NCT01663402 -NCT01663844 -NCT01665261 -NCT01666093 -NCT01669135 -NCT01670149 -NCT01671995 -NCT01672697 -NCT01677793 -NCT01680562 -NCT01682005 -NCT01682057 -NCT01682096 -NCT01682785 -NCT01683448 -NCT01683838 -NCT01684592 -NCT01689025 -NCT01689909 -NCT01691118 -NCT01691911 -NCT01692574 -NCT01692769 -NCT01692821 -NCT01693185 -NCT01694069 -NCT01696292 -NCT01698242 -NCT01698463 -NCT01698476 -NCT01698853 -NCT01700231 -NCT01700101 -NCT01701453 -NCT01704105 -NCT01704040 -NCT01704352 -NCT01705977 -NCT01706198 -NCT01708239 -NCT01710488 -NCT01712477 -NCT01712542 -NCT01713881 -NCT01715038 -NCT01715610 -NCT01716624 -NCT01716871 -NCT01717352 -NCT01719510 -NCT01719952 -NCT01720069 -NCT01721837 -NCT01723137 -NCT01723358 -NCT01724411 -NCT01724567 -NCT01725178 -NCT01725490 -NCT01728701 -NCT01729455 -NCT01730391 -NCT01730690 -NCT01731847 -NCT01733524 -NCT01736306 -NCT01736709 -NCT01737385 -NCT01737567 -NCT01738607 -NCT01739673 -NCT01741896 -NCT01742312 -NCT01743313 -NCT01743716 -NCT01744314 -NCT01744769 -NCT01745692 -NCT01745731 -NCT01746199 -NCT01747369 -NCT01748084 -NCT01748162 -NCT01749033 -NCT01752673 -NCT01753921 -NCT01756287 -NCT01757119 -NCT01761279 -NCT01762605 -NCT01762761 -NCT01762852 -NCT01763008 -NCT01763892 -NCT01764035 -NCT01767480 -NCT01767870 -NCT01770912 -NCT01771861 -NCT01772108 -NCT01773161 -NCT01774240 -NCT01775241 -NCT01776151 -NCT01779817 -NCT01780909 -NCT01781247 -NCT01782469 -NCT01783652 -NCT01784523 -NCT01784666 -NCT01785797 -NCT01787773 -NCT01789541 -NCT01790477 -NCT01792453 -NCT01794728 -NCT01793194 -NCT01795638 -NCT01796886 -NCT01798420 -NCT01799551 -NCT01799837 -NCT01801592 -NCT01800942 -NCT01801657 -NCT01802125 -NCT01802502 -NCT01803022 -NCT01807052 -NCT01807260 -NCT01808404 -NCT01807143 -NCT01810731 -NCT01815125 -NCT01818960 -NCT01818726 -NCT01819597 -NCT01820156 -NCT01821885 -NCT01822600 -NCT01827007 -NCT01827917 -NCT01827683 -NCT01828697 -NCT01828749 -NCT01829659 -NCT01830517 -NCT01833416 -NCT01834859 -NCT01835210 -NCT01836848 -NCT01838616 -NCT01838863 -NCT01839786 -NCT01840124 -NCT01840891 -NCT01845168 -NCT01847014 -NCT01849354 -NCT01849614 -NCT01851460 -NCT01851902 -NCT01852773 -NCT01854086 -NCT01853735 -NCT01855594 -NCT01855659 -NCT01855698 -NCT01856842 -NCT01858194 -NCT01860690 -NCT01861522 -NCT01862172 -NCT01862822 -NCT01862913 -NCT01862952 -NCT01863069 -NCT01864590 -NCT01866020 -NCT01867983 -NCT01868113 -NCT01868698 -NCT01869049 -NCT01869855 -NCT01869933 -NCT01870011 -NCT01870557 -NCT01870713 -NCT01871194 -NCT01872013 -NCT01874704 -NCT01878734 -NCT01881659 -NCT01885533 -NCT01887028 -NCT01887457 -NCT01888588 -NCT01890044 -NCT01891110 -NCT01892306 -NCT01893229 -NCT01895127 -NCT01896336 -NCT01896349 -NCT01901250 -NCT01902602 -NCT01902654 -NCT01903928 -NCT01904695 -NCT01906957 -NCT01910363 -NCT01912976 -NCT01913743 -NCT01917149 -NCT01917721 -NCT01918033 -NCT01918618 -NCT01920295 -NCT01921127 -NCT01921842 -NCT01922115 -NCT01923064 -NCT01923415 -NCT01923831 -NCT01923740 -NCT01925222 -NCT01928134 -NCT01928446 -NCT01930357 -NCT01933217 -NCT01934231 -NCT01934400 -NCT01935141 -NCT01936493 -NCT01936909 -NCT01938183 -NCT01941017 -NCT01942759 -NCT01943344 -NCT01944293 -NCT01944397 -NCT01945619 -NCT01947959 -NCT01948167 -NCT01949909 -NCT01950026 -NCT01950780 -NCT01951768 -NCT01951846 -NCT01953822 -NCT01954407 -NCT01954680 -NCT01957293 -NCT01959009 -NCT01959529 -NCT01960413 -NCT01960933 -NCT01960985 -NCT01966380 -NCT01970202 -NCT01970332 -NCT01971411 -NCT01973088 -NCT01973907 -NCT01977404 -NCT01978288 -NCT01983553 -NCT01984086 -NCT01985243 -NCT01988350 -NCT01986361 -NCT01990768 -NCT01991886 -NCT01992224 -NCT01993381 -NCT01994616 -NCT01998932 -NCT02001545 -NCT02002884 -NCT02003690 -NCT02003781 -NCT02004509 -NCT02005250 -NCT02005796 -NCT02006251 -NCT02006784 -NCT02007824 -NCT02008370 -NCT02008630 -NCT02009566 -NCT02010294 -NCT02011035 -NCT02011477 -NCT02011646 -NCT02011867 -NCT02012478 -NCT02012868 -NCT02013063 -NCT02013570 -NCT02014896 -NCT02016053 -NCT02017288 -NCT02017379 -NCT02017951 -NCT02018016 -NCT02018952 -NCT02019927 -NCT02020980 -NCT02021344 -NCT02021877 -NCT02023567 -NCT02024373 -NCT02025335 -NCT02026531 -NCT02027402 -NCT02028260 -NCT02029339 -NCT02029378 -NCT02032043 -NCT02032914 -NCT02033915 -NCT02034175 -NCT02036450 -NCT02035436 -NCT02038192 -NCT02037724 -NCT02039479 -NCT02043145 -NCT02043223 -NCT02047786 -NCT02046135 -NCT02048319 -NCT02049619 -NCT02050425 -NCT02051270 -NCT02051088 -NCT02052817 -NCT02053012 -NCT02055092 -NCT02056613 -NCT02058602 -NCT02059759 -NCT02062424 -NCT02063243 -NCT02063789 -NCT02064959 -NCT02065596 -NCT02066480 -NCT02067078 -NCT02066441 -NCT02068885 -NCT02069275 -NCT02070354 -NCT02071290 -NCT02071602 -NCT02072421 -NCT02072538 -NCT02072694 -NCT02073188 -NCT02074020 -NCT02074033 -NCT02074371 -NCT02077413 -NCT02078921 -NCT02079467 -NCT02080026 -NCT02080195 -NCT02081105 -NCT02081235 -NCT02081261 -NCT02081274 -NCT02081716 -NCT02081742 -NCT02082002 -NCT02083042 -NCT02084602 -NCT02085564 -NCT02086305 -NCT02086799 -NCT02086981 -NCT02087215 -NCT02088385 -NCT02088593 -NCT02090309 -NCT02090595 -NCT02092675 -NCT02092974 -NCT02094547 -NCT02096900 -NCT02097186 -NCT02098590 -NCT02099071 -NCT02099305 -NCT02100098 -NCT02101255 -NCT02102399 -NCT02102828 -NCT02103491 -NCT02105220 -NCT02105532 -NCT02107001 -NCT02107794 -NCT02109419 -NCT02110251 -NCT02112058 -NCT02113202 -NCT02113215 -NCT02114190 -NCT02115711 -NCT02116400 -NCT02117609 -NCT02118818 -NCT02119156 -NCT02119507 -NCT02119533 -NCT02120664 -NCT02123004 -NCT02127866 -NCT02129621 -NCT02129790 -NCT02131181 -NCT02132819 -NCT02133911 -NCT02136654 -NCT02136797 -NCT02136875 -NCT02137187 -NCT02137603 -NCT02139098 -NCT02139163 -NCT02139384 -NCT02140710 -NCT02141009 -NCT02144142 -NCT02144636 -NCT02147353 -NCT02147470 -NCT02148289 -NCT02149472 -NCT02149940 -NCT02152358 -NCT02152449 -NCT02156193 -NCT02156479 -NCT02158962 -NCT02162186 -NCT02163200 -NCT02163447 -NCT02163564 -NCT02164357 -NCT02164552 -NCT02166008 -NCT02287259 -NCT02289508 -NCT02289937 -NCT02290652 -NCT02294175 -NCT02297633 -NCT02297659 -NCT02300155 -NCT02302534 -NCT02302664 -NCT02304250 -NCT02304328 -NCT02305095 -NCT02306642 -NCT02307201 -NCT02308137 -NCT02168998 -NCT02169167 -NCT02169570 -NCT02172378 -NCT02172625 -NCT02173028 -NCT02174094 -NCT02175888 -NCT02175901 -NCT02176148 -NCT02177032 -NCT02177851 -NCT02180542 -NCT02181023 -NCT02182713 -NCT02181348 -NCT02184962 -NCT02182856 -NCT02185404 -NCT02185612 -NCT02187809 -NCT02188862 -NCT02189577 -NCT02190123 -NCT02192320 -NCT02194920 -NCT02195713 -NCT02196116 -NCT02196246 -NCT02196298 -NCT02197039 -NCT02198885 -NCT02199015 -NCT02199093 -NCT02200783 -NCT02201069 -NCT02203383 -NCT02203682 -NCT02203890 -NCT02203968 -NCT02204176 -NCT02204514 -NCT02206971 -NCT02208219 -NCT02209974 -NCT02210702 -NCT02211612 -NCT02212119 -NCT02212496 -NCT02213380 -NCT02213809 -NCT02214030 -NCT02216305 -NCT02217111 -NCT02217501 -NCT02217722 -NCT02220387 -NCT02221752 -NCT02222181 -NCT02222376 -NCT02222649 -NCT02222805 -NCT02225392 -NCT02226510 -NCT02227225 -NCT02227927 -NCT02229695 -NCT02230865 -NCT02231398 -NCT02232022 -NCT02232191 -NCT02232607 -NCT02233010 -NCT02234570 -NCT02234739 -NCT02235389 -NCT02235558 -NCT02235935 -NCT02236416 -NCT02237430 -NCT02237703 -NCT02238210 -NCT02238756 -NCT02239731 -NCT02241135 -NCT02241148 -NCT02241642 -NCT02244723 -NCT02245802 -NCT02247765 -NCT02248610 -NCT02249286 -NCT02251418 -NCT02254356 -NCT02255487 -NCT02258308 -NCT02258958 -NCT02260934 -NCT02261584 -NCT02261792 -NCT02263235 -NCT02264353 -NCT02264444 -NCT02264483 -NCT02264756 -NCT02264769 -NCT02264964 -NCT02266563 -NCT02267538 -NCT02269878 -NCT02270424 -NCT02271451 -NCT02271932 -NCT02272920 -NCT02273128 -NCT02273232 -NCT02275312 -NCT02273830 -NCT02276092 -NCT02276170 -NCT02280291 -NCT02281123 -NCT02282228 -NCT02282930 -NCT02284295 -NCT02284984 -NCT02309489 -NCT02310854 -NCT02316418 -NCT02316990 -NCT02317913 -NCT02319161 -NCT02318290 -NCT02323763 -NCT02323984 -NCT02328352 -NCT02328963 -NCT02329340 -NCT02331628 -NCT02333201 -NCT02329366 -NCT02333812 -NCT02334514 -NCT02336542 -NCT02339896 -NCT02340481 -NCT02340702 -NCT02341300 -NCT02342470 -NCT02344342 -NCT02345564 -NCT02345941 -NCT02347865 -NCT02348541 -NCT02349269 -NCT02352155 -NCT02353299 -NCT02353663 -NCT02353793 -NCT02355548 -NCT02356120 -NCT02356510 -NCT02357212 -NCT02358109 -NCT02359253 -NCT02360410 -NCT02361736 -NCT02362321 -NCT02366299 -NCT02369263 -NCT02370758 -NCT02371057 -NCT02372461 -NCT02373995 -NCT02374008 -NCT02374814 -NCT02375451 -NCT02375919 -NCT02376192 -NCT02507050 -NCT02507635 -NCT02507674 -NCT02508584 -NCT02509091 -NCT02509858 -NCT02511054 -NCT02511444 -NCT02511626 -NCT02512159 -NCT02513316 -NCT02513628 -NCT02513953 -NCT02516033 -NCT02516072 -NCT02516280 -NCT02516839 -NCT02517346 -NCT02518243 -NCT02518633 -NCT02518646 -NCT02519504 -NCT02519933 -NCT02521012 -NCT02521155 -NCT02521727 -NCT02525926 -NCT02526433 -NCT02527031 -NCT02527291 -NCT02378298 -NCT02378571 -NCT02379130 -NCT02380495 -NCT02380352 -NCT02381340 -NCT02383680 -NCT02386696 -NCT02389231 -NCT02389933 -NCT02390323 -NCT02390765 -NCT02391909 -NCT02392975 -NCT02393963 -NCT02394418 -NCT02397980 -NCT02399423 -NCT02399774 -NCT02400684 -NCT02402881 -NCT02404181 -NCT02405741 -NCT02405832 -NCT02406131 -NCT02406729 -NCT02406885 -NCT02407106 -NCT02408263 -NCT02409823 -NCT02410616 -NCT02415010 -NCT02415049 -NCT02416713 -NCT02417519 -NCT02418169 -NCT02419053 -NCT02420106 -NCT02422069 -NCT02426073 -NCT02424097 -NCT02426710 -NCT02427464 -NCT02427516 -NCT02427854 -NCT02427867 -NCT02428140 -NCT02428647 -NCT02429388 -NCT02430857 -NCT02431819 -NCT02432222 -NCT02433990 -NCT02436031 -NCT02436200 -NCT02438709 -NCT02439996 -NCT02440529 -NCT02440815 -NCT02441439 -NCT02441478 -NCT02441699 -NCT02441829 -NCT02443389 -NCT02444728 -NCT02445092 -NCT02445183 -NCT02446587 -NCT02447224 -NCT02447614 -NCT02449928 -NCT02451631 -NCT02453321 -NCT02455037 -NCT02455089 -NCT02456012 -NCT02457403 -NCT02457546 -NCT02458144 -NCT02458300 -NCT02458495 -NCT02458625 -NCT02458729 -NCT02459171 -NCT02459327 -NCT02461329 -NCT02463630 -NCT02464527 -NCT02465307 -NCT02467309 -NCT02470416 -NCT02471209 -NCT02472782 -NCT02473783 -NCT02474901 -NCT02475590 -NCT02475980 -NCT02476747 -NCT02477501 -NCT02478294 -NCT02480803 -NCT02481739 -NCT02482948 -NCT02483663 -NCT02484963 -NCT02485873 -NCT02487264 -NCT02489578 -NCT02489669 -NCT02490241 -NCT02491307 -NCT02491541 -NCT02492425 -NCT02492646 -NCT02494232 -NCT02494960 -NCT02495220 -NCT02495545 -NCT02495909 -NCT02496494 -NCT02498808 -NCT02501668 -NCT02502513 -NCT02505035 -NCT02505061 -NCT02505347 -NCT02527499 -NCT02527564 -NCT02528890 -NCT02530944 -NCT02532452 -NCT02532699 -NCT02534766 -NCT02535624 -NCT02535962 -NCT02536560 -NCT02538406 -NCT02542488 -NCT02544035 -NCT02544178 -NCT02546817 -NCT02547727 -NCT02549547 -NCT02549872 -NCT02551289 -NCT02551315 -NCT02553733 -NCT02554019 -NCT02556099 -NCT02557334 -NCT02557425 -NCT02557698 -NCT02558465 -NCT02556359 -NCT02558517 -NCT02558777 -NCT02559232 -NCT02562040 -NCT02563678 -NCT02564471 -NCT02564939 -NCT02568124 -NCT02569749 -NCT02570152 -NCT02571504 -NCT02575001 -NCT02577731 -NCT02579278 -NCT02583906 -NCT02583958 -NCT02584621 -NCT02584725 -NCT02584777 -NCT02585076 -NCT02585141 -NCT02586493 -NCT02586519 -NCT02587351 -NCT02588053 -NCT02591043 -NCT02590653 -NCT02591355 -NCT02591563 -NCT02591784 -NCT02594592 -NCT02594410 -NCT02596555 -NCT02598180 -NCT02599155 -NCT02600260 -NCT02601846 -NCT02603393 -NCT02603731 -NCT02604186 -NCT02604277 -NCT02604550 -NCT02604576 -NCT02605122 -NCT02606253 -NCT02607696 -NCT02608047 -NCT02609672 -NCT02609893 -NCT02610426 -NCT02610868 -NCT02612896 -NCT02613585 -NCT02614417 -NCT02614443 -NCT02615587 -NCT02615912 -NCT02616991 -NCT02618655 -NCT02619877 -NCT02620085 -NCT02620384 -NCT02621476 -NCT02623725 -NCT02624089 -NCT02624882 -NCT02625129 -NCT02626156 -NCT02626741 -NCT02627768 -NCT02627937 -NCT02630537 -NCT02631304 -NCT02632656 -NCT02633033 -NCT02633163 -NCT02633319 -NCT02633449 -NCT02633787 -NCT02634138 -NCT02634190 diff --git a/utils/Indexer/prepare_criteria.py b/utils/Indexer/prepare_criteria.py deleted file mode 100644 index 660e560c..00000000 --- a/utils/Indexer/prepare_criteria.py +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/bin/env python3 -import argparse -import hashlib -import json -import logging -from pathlib import Path - -import torch -import torch.nn.functional as F -from transformers import AutoModel, AutoTokenizer - -logging.basicConfig( - format="%(asctime)s %(levelname)s %(name)s - %(message)s", - level=logging.INFO, -) -logger = logging.getLogger(__name__) - - -class SentenceEmbedder: - def __init__(self, model_name: str = "BAAI/bge-m3", use_gpu: bool = True): - self.device = torch.device( - "cuda" if use_gpu and torch.cuda.is_available() else "cpu" - ) - logger.info(f"Loading model {model_name} on device {self.device}") - self.tokenizer = AutoTokenizer.from_pretrained(model_name) - self.model = AutoModel.from_pretrained(model_name).to(self.device) - if self.device.type == "cuda": - self.model = self.model.half() - logger.info("Converted model to FP16") - - def mean_pool( - self, token_embeds: torch.Tensor, attention_mask: torch.Tensor - ) -> torch.Tensor: - mask = attention_mask.unsqueeze(-1).expand(token_embeds.size()).float() - summed = torch.sum(token_embeds * mask, dim=1) - counts = torch.clamp(mask.sum(dim=1), min=1e-9) - return summed / counts - - def embed(self, texts: list[str]) -> list[list[float]]: - """ - Batch‑embed a list of strings; returns a list of float vectors. - """ - enc = self.tokenizer( - texts, padding=True, truncation=True, return_tensors="pt" - ).to(self.device) - with torch.no_grad(): - outputs = self.model(**enc) - vecs = self.mean_pool(outputs.last_hidden_state, enc.attention_mask) - vecs = F.normalize(vecs, p=2, dim=1) - return vecs.cpu().tolist() - - -def compute_criteria_id(nct_id: str, criterion: str) -> str: - """ - Deterministically hash a trial‑criterion pair to a 64‑hex string. - """ - return hashlib.sha256(f"{nct_id}:{criterion}".encode("utf-8")).hexdigest() - - -def load_raw_trial(path: Path) -> dict: - return json.loads(path.read_text()) - - -def process_trial( - nct_id: str, - source_folder: Path, - processed_folder: Path, - embedder: SentenceEmbedder, -) -> int: - raw_path = source_folder / f"{nct_id}.json" - if not raw_path.exists(): - logger.warning(f"Missing raw JSON for {nct_id}, skipping.") - return 0 - - data = load_raw_trial(raw_path) - criteria = data.get("criteria", []) - if not criteria: - logger.info(f"No criteria found for {nct_id}.") - return 0 - - # collect texts - entries = [] - texts = [] - for crit in criteria: - text = crit.get("criterion") or crit.get("sentence") - if not text: - continue - entries.append( - { - "nct_id": nct_id, - "criterion": text, - "entities": crit.get("entities", []), - "eligibility_type": crit.get("type"), - } - ) - texts.append(text) - - if not entries: - return 0 - - # embed all at once - vectors = embedder.embed(texts) - - # write out - trial_folder = processed_folder / nct_id - trial_folder.mkdir(parents=True, exist_ok=True) - - for entry, vec in zip(entries, vectors): - crit_id = compute_criteria_id(entry["nct_id"], entry["criterion"]) - out = { - "criteria_id": crit_id, - "nct_id": entry["nct_id"], - "criterion": entry["criterion"], - "entities": entry["entities"], - "eligibility_type": entry["eligibility_type"], - "criterion_vector": vec, - } - (trial_folder / f"{crit_id}.json").write_text(json.dumps(out, indent=2)) - - logger.info(f"Processed {len(entries)} criteria for {nct_id}") - return len(entries) - - -def main(): - p = argparse.ArgumentParser( - description="Prepare & embed eligibility criteria per trial" - ) - p.add_argument( - "--ids-file", required=True, help="Path to nct_ids.txt (one NCT ID per line)" - ) - p.add_argument( - "--source-folder", - required=True, - help="Folder containing raw trial JSONs named .json", - ) - p.add_argument( - "--processed-folder", - default="processed_criteria", - help="Output root; will contain one subfolder per trial", - ) - p.add_argument( - "--model-name", default="BAAI/bge-m3", help="Sentence embedding model name" - ) - p.add_argument("--use-gpu", action="store_true", help="Enable GPU iff available") - args = p.parse_args() - - ids = [line.strip() for line in open(args.ids_file) if line.strip()] - source_folder = Path(args.source_folder) - processed_folder = Path(args.processed_folder) - processed_folder.mkdir(parents=True, exist_ok=True) - - embedder = SentenceEmbedder(model_name=args.model_name, use_gpu=args.use_gpu) - - total = 0 - skipped = 0 - - for nct in ids: - trial_folder = processed_folder / nct - # Skip if already processed (i.e. folder exists and contains at least one .json) - if trial_folder.exists() and any(trial_folder.glob("*.json")): - logger.info(f"Skipping {nct}: already processed") - skipped += 1 - continue - - processed_count = process_trial(nct, source_folder, processed_folder, embedder) - total += processed_count - - logger.info( - f"✅ Finished embedding. Total criteria written: {total}. Trials skipped: {skipped}." - ) - - -if __name__ == "__main__": - main() diff --git a/utils/Indexer/prepare_trials.py b/utils/Indexer/prepare_trials.py deleted file mode 100644 index d91c91da..00000000 --- a/utils/Indexer/prepare_trials.py +++ /dev/null @@ -1,166 +0,0 @@ -#!/usr/bin/env python3 -import argparse -import json -import os -import re -import warnings - -import dateutil.parser -import torch -import torch.nn.functional as F -from transformers import AutoModel, AutoTokenizer - -warnings.filterwarnings( - "ignore", category=UserWarning, message="TypedStorage is deprecated" -) - - -class SentenceEmbedder: - def __init__(self, model_name: str = "BAAI/bge-m3"): - self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - print(f"Embedding on device: {self.device}") - self.tokenizer = AutoTokenizer.from_pretrained(model_name) - self.model = AutoModel.from_pretrained(model_name).to(self.device) - - def mean_pooling(self, model_output, attention_mask): - tokens = model_output[0] - mask = attention_mask.unsqueeze(-1).expand(tokens.size()).float() - return torch.sum(tokens * mask, 1) / torch.clamp(mask.sum(1), min=1e-9) - - def get_embeddings(self, text: str): - if not text: - return None - enc = self.tokenizer(text, padding=True, truncation=True, return_tensors="pt") - enc = {k: v.to(self.device) for k, v in enc.items()} - with torch.no_grad(): - out = self.model(**enc) - emb = self.mean_pooling(out, enc["attention_mask"]) - emb = F.normalize(emb, p=2, dim=1) - return emb.squeeze().cpu().tolist() - - def preprocess_text(self, t: str) -> str: - return re.sub(r"\s+", " ", t).strip() if t else t - - def to_iso(self, s: str): - try: - return dateutil.parser.parse(s).date().isoformat() if s else None - except Exception: - return None - - def age_to_years(self, s: str): - if not s: - return None - m = re.search(r"([\d\.]+)", s) - if not m: - return None - v = float(m.group(1)) - u = s.lower() - if "year" in u: - y = v - elif "month" in u: - y = v / 12 - elif "week" in u: - y = v / 52 - elif "day" in u: - y = v / 365 - else: - return None - return round(y, 2) - - -def embed_and_prepare(doc: dict, embedder: SentenceEmbedder): - out = {"nct_id": doc["nct_id"]} - # text fields → clean + vector - for field, vec_name in [ - ("brief_title", "brief_title_vector"), - ("brief_summary", "brief_summary_vector"), - ("condition", "condition_vector"), - ("eligibility_criteria", "eligibility_criteria_vector"), - ]: - if field in doc: - txt = doc[field] - if isinstance(txt, list): - txt = " ".join( - [str(t) for t in txt if isinstance(t, str) and t.strip()] - ) - txt = embedder.preprocess_text(txt) - emb = embedder.get_embeddings(txt) or [0.0] * len( - embedder.get_embeddings("test") or [0.0] - ) - out[field] = txt - out[vec_name] = emb - - # passthroughs - for simple in ["overall_status", "phase", "study_type", "gender"]: - if simple in doc: - out[simple] = doc[simple] - - # dates - for d in ["start_date", "completion_date"]: - if d in doc: - iso = embedder.to_iso(doc[d]) - if iso: - out[d] = iso - - # ages - for a in ["minimum_age", "maximum_age"]: - if a in doc: - yrs = embedder.age_to_years(doc[a]) - if yrs is not None: - out[a] = yrs - - # nested passthroughs - for nest in ["intervention", "location", "reference"]: - if nest in doc: - out[nest] = doc[nest] - - return out - - -if __name__ == "__main__": - p = argparse.ArgumentParser(description="Prepare & embed clinical trial JSONs") - p.add_argument("--ids-file", required=True, help="One NCT ID per line") - p.add_argument("--source-folder", required=True, help="Raw JSONs dir") - p.add_argument( - "--processed-folder", - default="processed_docs", - help="Where to write embedded JSONs", - ) - p.add_argument( - "--model-name", default="BAAI/bge-m3", help="Sentence embedding model" - ) - args = p.parse_args() - - os.makedirs(args.processed_folder, exist_ok=True) - embedder = SentenceEmbedder(model_name=args.model_name) - - with open(args.ids_file) as f: - ids = [line.strip() for line in f if line.strip()] - - processed = 0 - skipped = 0 - - for nct in ids: - out_path = os.path.join(args.processed_folder, f"{nct}.json") - if os.path.exists(out_path): - print(f"🟡 Skipping {nct}: already processed") - skipped += 1 - continue - - in_path = os.path.join(args.source_folder, f"{nct}.json") - if not os.path.exists(in_path): - print(f"⚠️ Missing raw JSON for {nct}") - continue - - doc = json.load(open(in_path)) - doc["nct_id"] = nct - proc = embed_and_prepare(doc, embedder) - - with open(out_path, "w") as wf: - json.dump(proc, wf, indent=2) - processed += 1 - print(f"✅ Processed {nct}") - - print( - f"\nSummary: {processed} processed, {skipped} skipped, {len(ids) - processed - skipped} missing." - ) diff --git a/utils/Indexer/processed_ids.txt b/utils/Indexer/processed_ids.txt deleted file mode 100644 index c140105c..00000000 --- a/utils/Indexer/processed_ids.txt +++ /dev/null @@ -1,48637 +0,0 @@ -NCT00000102 -NCT00000105 -NCT00000108 -NCT00000110 -NCT00000113 -NCT00000114 -NCT00000115 -NCT00000117 -NCT00000119 -NCT00000120 -NCT00000121 -NCT00000123 -NCT00000124 -NCT00000125 -NCT00000126 -NCT00000127 -NCT00000129 -NCT00000133 -NCT00000137 -NCT00000144 -NCT00000150 -NCT00000151 -NCT00000152 -NCT00000153 -NCT00000154 -NCT00000155 -NCT00000156 -NCT00000158 -NCT00000159 -NCT00000160 -NCT00000161 -NCT00000167 -NCT00000171 -NCT00000173 -NCT00000176 -NCT00000179 -NCT00000292 -NCT00000359 -NCT00000361 -NCT00000362 -NCT00000377 -NCT00000390 -NCT00000396 -NCT00000402 -NCT00000403 -NCT00000406 -NCT00000408 -NCT00000409 -NCT00000410 -NCT00000411 -NCT00000413 -NCT00000419 -NCT00000424 -NCT00000425 -NCT00000427 -NCT00000430 -NCT00000432 -NCT00000437 -NCT00000461 -NCT00000468 -NCT00000469 -NCT00000479 -NCT00000487 -NCT00000501 -NCT00000502 -NCT00000513 -NCT00000515 -NCT00000518 -NCT00000519 -NCT00000520 -NCT00000521 -NCT00000522 -NCT00000524 -NCT00000525 -NCT00000526 -NCT00000528 -NCT00000531 -NCT00000539 -NCT00000548 -NCT00000555 -NCT00000559 -NCT00000560 -NCT00000562 -NCT00000567 -NCT00000568 -NCT00000570 -NCT00000572 -NCT00000574 -NCT00000575 -NCT00000576 -NCT00000580 -NCT00000582 -NCT00000583 -NCT00000585 -NCT00000586 -NCT00000588 -NCT00000592 -NCT00000598 -NCT00000599 -NCT00000602 -NCT00000606 -NCT00000619 -NCT00000620 -NCT00000621 -NCT00000633 -NCT00000636 -NCT00000638 -NCT00000641 -NCT00000642 -NCT00000644 -NCT00000653 -NCT00000654 -NCT00000672 -NCT00000678 -NCT00000682 -NCT00000706 -NCT00000707 -NCT00000714 -NCT00000715 -NCT00000717 -NCT00000722 -NCT00000724 -NCT00000727 -NCT00000730 -NCT00000732 -NCT00000734 -NCT00000739 -NCT00000740 -NCT00000748 -NCT00000749 -NCT00000755 -NCT00000768 -NCT00000769 -NCT00000771 -NCT00000773 -NCT00000776 -NCT00000778 -NCT00000785 -NCT00000790 -NCT00000794 -NCT00000796 -NCT00000801 -NCT00000802 -NCT00000811 -NCT00000816 -NCT00000832 -NCT00000854 -NCT00000855 -NCT00000860 -NCT00000862 -NCT00000863 -NCT00000873 -NCT00000879 -NCT00000910 -NCT00000937 -NCT00000938 -NCT00000941 -NCT00000955 -NCT00000959 -NCT00000961 -NCT00000963 -NCT00000964 -NCT00000970 -NCT00000975 -NCT00000980 -NCT00000987 -NCT00000998 -NCT00001001 -NCT00001013 -NCT00001014 -NCT00001015 -NCT00001025 -NCT00001028 -NCT00001030 -NCT00001033 -NCT00001038 -NCT00001077 -NCT00001081 -NCT00001092 -NCT00001100 -NCT00001101 -NCT00001103 -NCT00001109 -NCT00001115 -NCT00001119 -NCT00001126 -NCT00001127 -NCT00001128 -NCT00001143 -NCT00001144 -NCT00001145 -NCT00001148 -NCT00001149 -NCT00001152 -NCT00001153 -NCT00001155 -NCT00001156 -NCT00001159 -NCT00001160 -NCT00001161 -NCT00001165 -NCT00001166 -NCT00001167 -NCT00001173 -NCT00001177 -NCT00001180 -NCT00001181 -NCT00001184 -NCT00001188 -NCT00001189 -NCT00001190 -NCT00001193 -NCT00001196 -NCT00001197 -NCT00001202 -NCT00001203 -NCT00001204 -NCT00001205 -NCT00001208 -NCT00001216 -NCT00001220 -NCT00001221 -NCT00001224 -NCT00001225 -NCT00001228 -NCT00001230 -NCT00001237 -NCT00001241 -NCT00001242 -NCT00001246 -NCT00001249 -NCT00001250 -NCT00001252 -NCT00001253 -NCT00001254 -NCT00001256 -NCT00001259 -NCT00001261 -NCT00001262 -NCT00001265 -NCT00001266 -NCT00001267 -NCT00001269 -NCT00001270 -NCT00001276 -NCT00001277 -NCT00001278 -NCT00001280 -NCT00001282 -NCT00001284 -NCT00001287 -NCT00001288 -NCT00001291 -NCT00001292 -NCT00001296 -NCT00001301 -NCT00001302 -NCT00001303 -NCT00001304 -NCT00001305 -NCT00001307 -NCT00001308 -NCT00001313 -NCT00001314 -NCT00001318 -NCT00001322 -NCT00001323 -NCT00001325 -NCT00001332 -NCT00001335 -NCT00001337 -NCT00001338 -NCT00001339 -NCT00001342 -NCT00001343 -NCT00001344 -NCT00001347 -NCT00001349 -NCT00001350 -NCT00001356 -NCT00001359 -NCT00001364 -NCT00001365 -NCT00001366 -NCT00001367 -NCT00001368 -NCT00001371 -NCT00001378 -NCT00001379 -NCT00001381 -NCT00001383 -NCT00001384 -NCT00001386 -NCT00001393 -NCT00001394 -NCT00001398 -NCT00001399 -NCT00001400 -NCT00001402 -NCT00001403 -NCT00001405 -NCT00001407 -NCT00001408 -NCT00001412 -NCT00001413 -NCT00001415 -NCT00001417 -NCT00001420 -NCT00001421 -NCT00001431 -NCT00001436 -NCT00001437 -NCT00001442 -NCT00001444 -NCT00001445 -NCT00001446 -NCT00001452 -NCT00001453 -NCT00001454 -NCT00001455 -NCT00001456 -NCT00001457 -NCT00001458 -NCT00001460 -NCT00001462 -NCT00001466 -NCT00001469 -NCT00001473 -NCT00001476 -NCT00001478 -NCT00001480 -NCT00001481 -NCT00001482 -NCT00001483 -NCT00001487 -NCT00001489 -NCT00001493 -NCT00001496 -NCT00001498 -NCT00001502 -NCT00001505 -NCT00001520 -NCT00001521 -NCT00001522 -NCT00001523 -NCT00001524 -NCT00001527 -NCT00001528 -NCT00001529 -NCT00001530 -NCT00001532 -NCT00001533 -NCT00001534 -NCT00001536 -NCT00001538 -NCT00001539 -NCT00001541 -NCT00001542 -NCT00001543 -NCT00001544 -NCT00001546 -NCT00001549 -NCT00001550 -NCT00001551 -NCT00001553 -NCT00001554 -NCT00001560 -NCT00001561 -NCT00001565 -NCT00001568 -NCT00001573 -NCT00001574 -NCT00001579 -NCT00001586 -NCT00001589 -NCT00001596 -NCT00001598 -NCT00001599 -NCT00001600 -NCT00001605 -NCT00001606 -NCT00001610 -NCT00001611 -NCT00001615 -NCT00001621 -NCT00001622 -NCT00001625 -NCT00001628 -NCT00001629 -NCT00001631 -NCT00001633 -NCT00001637 -NCT00001638 -NCT00001639 -NCT00001640 -NCT00001641 -NCT00001643 -NCT00001645 -NCT00001646 -NCT00001649 -NCT00001656 -NCT00001657 -NCT00001658 -NCT00001659 -NCT00001661 -NCT00001662 -NCT00001663 -NCT00001664 -NCT00001665 -NCT00001666 -NCT00001668 -NCT00001669 -NCT00001672 -NCT00001676 -NCT00001685 -NCT00001688 -NCT00001693 -NCT00001696 -NCT00001699 -NCT00001713 -NCT00001716 -NCT00001718 -NCT00001719 -NCT00001720 -NCT00001721 -NCT00001722 -NCT00001723 -NCT00001724 -NCT00001725 -NCT00001728 -NCT00001729 -NCT00001730 -NCT00001731 -NCT00001735 -NCT00001737 -NCT00001742 -NCT00001748 -NCT00001750 -NCT00001752 -NCT00001754 -NCT00001756 -NCT00001759 -NCT00001760 -NCT00001761 -NCT00001763 -NCT00001764 -NCT00001765 -NCT00001770 -NCT00001774 -NCT00001776 -NCT00001777 -NCT00001780 -NCT00001781 -NCT00001783 -NCT00001784 -NCT00001790 -NCT00001814 -NCT00001830 -NCT00001836 -NCT00001839 -NCT00001840 -NCT00001848 -NCT00001849 -NCT00001851 -NCT00001852 -NCT00001853 -NCT00001854 -NCT00001859 -NCT00001860 -NCT00001861 -NCT00001862 -NCT00001864 -NCT00001865 -NCT00001866 -NCT00001870 -NCT00001871 -NCT00001876 -NCT00001877 -NCT00001878 -NCT00001881 -NCT00001884 -NCT00001885 -NCT00001886 -NCT00001887 -NCT00001888 -NCT00001889 -NCT00001890 -NCT00001891 -NCT00001893 -NCT00001894 -NCT00001895 -NCT00001899 -NCT00001901 -NCT00001903 -NCT00001905 -NCT00001906 -NCT00001908 -NCT00001909 -NCT00001910 -NCT00001911 -NCT00001915 -NCT00001916 -NCT00001918 -NCT00001921 -NCT00001922 -NCT00001923 -NCT00001925 -NCT00001926 -NCT00001927 -NCT00001928 -NCT00001929 -NCT00001930 -NCT00001931 -NCT00001932 -NCT00001933 -NCT00001934 -NCT00001936 -NCT00001940 -NCT00001946 -NCT00001950 -NCT00001951 -NCT00001952 -NCT00001953 -NCT00001954 -NCT00001955 -NCT00001957 -NCT00001960 -NCT00001961 -NCT00001963 -NCT00001965 -NCT00001966 -NCT00001968 -NCT00001969 -NCT00001971 -NCT00001972 -NCT00001973 -NCT00001975 -NCT00001976 -NCT00001977 -NCT00001981 -NCT00001982 -NCT00001985 -NCT00001986 -NCT00001987 -NCT00001990 -NCT00001991 -NCT00002032 -NCT00002047 -NCT00002055 -NCT00002056 -NCT00002062 -NCT00002063 -NCT00002068 -NCT00002082 -NCT00002085 -NCT00002088 -NCT00002101 -NCT00002102 -NCT00002103 -NCT00002104 -NCT00002116 -NCT00002120 -NCT00002121 -NCT00002136 -NCT00002137 -NCT00002138 -NCT00002140 -NCT00002144 -NCT00002177 -NCT00002181 -NCT00002182 -NCT00002219 -NCT00002248 -NCT00002252 -NCT00002253 -NCT00002258 -NCT00002273 -NCT00002274 -NCT00002297 -NCT00002317 -NCT00002331 -NCT00002340 -NCT00002342 -NCT00002343 -NCT00002404 -NCT00002408 -NCT00002426 -NCT00002434 -NCT00002444 -NCT00002459 -NCT00002471 -NCT00002478 -NCT00002490 -NCT00002492 -NCT00002493 -NCT00002495 -NCT00002496 -NCT00002502 -NCT00002511 -NCT00002523 -NCT00002528 -NCT00002529 -NCT00002536 -NCT00002537 -NCT00002542 -NCT00002548 -NCT00002550 -NCT00002555 -NCT00002562 -NCT00002564 -NCT00002569 -NCT00002575 -NCT00002580 -NCT00002581 -NCT00002593 -NCT00002602 -NCT00002608 -NCT00002615 -NCT00002616 -NCT00002619 -NCT00002620 -NCT00002622 -NCT00002623 -NCT00002628 -NCT00002630 -NCT00002633 -NCT00002639 -NCT00002641 -NCT00002646 -NCT00002651 -NCT00002653 -NCT00002654 -NCT00002659 -NCT00002663 -NCT00002670 -NCT00002676 -NCT00002680 -NCT00002682 -NCT00002687 -NCT00002689 -NCT00002706 -NCT00002708 -NCT00002725 -NCT00002735 -NCT00002742 -NCT00002749 -NCT00002755 -NCT00002759 -NCT00002762 -NCT00002764 -NCT00002772 -NCT00002774 -NCT00002777 -NCT00002783 -NCT00002784 -NCT00002791 -NCT00002804 -NCT00002806 -NCT00002810 -NCT00002813 -NCT00002814 -NCT00002827 -NCT00002839 -NCT00002849 -NCT00002850 -NCT00002864 -NCT00002872 -NCT00002873 -NCT00002875 -NCT00002878 -NCT00002879 -NCT00002882 -NCT00002908 -NCT00002916 -NCT00002917 -NCT00002919 -NCT00002920 -NCT00002934 -NCT00002946 -NCT00002967 -NCT00002971 -NCT00002974 -NCT00002985 -NCT00002990 -NCT00002996 -NCT00002999 -NCT00003000 -NCT00003002 -NCT00003012 -NCT00003013 -NCT00003017 -NCT00003018 -NCT00003022 -NCT00003025 -NCT00003031 -NCT00003039 -NCT00003041 -NCT00003049 -NCT00003052 -NCT00003055 -NCT00003056 -NCT00003057 -NCT00003058 -NCT00003065 -NCT00003067 -NCT00003072 -NCT00003075 -NCT00003078 -NCT00003082 -NCT00003088 -NCT00003093 -NCT00003094 -NCT00003098 -NCT00003099 -NCT00003105 -NCT00003115 -NCT00003117 -NCT00003118 -NCT00003124 -NCT00003126 -NCT00003128 -NCT00003129 -NCT00003132 -NCT00003133 -NCT00003137 -NCT00003139 -NCT00003153 -NCT00003157 -NCT00003162 -NCT00003172 -NCT00003176 -NCT00003199 -NCT00003209 -NCT00003210 -NCT00003213 -NCT00003217 -NCT00003232 -NCT00003234 -NCT00003237 -NCT00003253 -NCT00003257 -NCT00003266 -NCT00003267 -NCT00003276 -NCT00003279 -NCT00003280 -NCT00003292 -NCT00003296 -NCT00003298 -NCT00003315 -NCT00003325 -NCT00003328 -NCT00003331 -NCT00003337 -NCT00003338 -NCT00003342 -NCT00003346 -NCT00003353 -NCT00003364 -NCT00003368 -NCT00003369 -NCT00003372 -NCT00003375 -NCT00003376 -NCT00003377 -NCT00003379 -NCT00003381 -NCT00003384 -NCT00003387 -NCT00003391 -NCT00003396 -NCT00003409 -NCT00003410 -NCT00003416 -NCT00003418 -NCT00003434 -NCT00003440 -NCT00003443 -NCT00003445 -NCT00003449 -NCT00003453 -NCT00003463 -NCT00003465 -NCT00003466 -NCT00003468 -NCT00003470 -NCT00003471 -NCT00003476 -NCT00003489 -NCT00003494 -NCT00003509 -NCT00003511 -NCT00003519 -NCT00003520 -NCT00003524 -NCT00003537 -NCT00003549 -NCT00003557 -NCT00003564 -NCT00003571 -NCT00003576 -NCT00003590 -NCT00003591 -NCT00003593 -NCT00003595 -NCT00003598 -NCT00003621 -NCT00003623 -NCT00003640 -NCT00003642 -NCT00003645 -NCT00003654 -NCT00003658 -NCT00003667 -NCT00003669 -NCT00003675 -NCT00003677 -NCT00003684 -NCT00003685 -NCT00003686 -NCT00003700 -NCT00003701 -NCT00003702 -NCT00003703 -NCT00003714 -NCT00003719 -NCT00003742 -NCT00003754 -NCT00003759 -NCT00003760 -NCT00003761 -NCT00003771 -NCT00003775 -NCT00003778 -NCT00003779 -NCT00003780 -NCT00003781 -NCT00003782 -NCT00003798 -NCT00003805 -NCT00003809 -NCT00003814 -NCT00003817 -NCT00003820 -NCT00003824 -NCT00003825 -NCT00003829 -NCT00003830 -NCT00003831 -NCT00003838 -NCT00003842 -NCT00003851 -NCT00003853 -NCT00003856 -NCT00003857 -NCT00003862 -NCT00003863 -NCT00003876 -NCT00003887 -NCT00003896 -NCT00003899 -NCT00003906 -NCT00003908 -NCT00003909 -NCT00003923 -NCT00003930 -NCT00003934 -NCT00003936 -NCT00003937 -NCT00003938 -NCT00003941 -NCT00003945 -NCT00003953 -NCT00003954 -NCT00003957 -NCT00003966 -NCT00003977 -NCT00003984 -NCT00003985 -NCT00004010 -NCT00004017 -NCT00004028 -NCT00004033 -NCT00004048 -NCT00004050 -NCT00004054 -NCT00004062 -NCT00004063 -NCT00004068 -NCT00004074 -NCT00004080 -NCT00004088 -NCT00004089 -NCT00004091 -NCT00004094 -NCT00004099 -NCT00004113 -NCT00004122 -NCT00004125 -NCT00004139 -NCT00004143 -NCT00004146 -NCT00004148 -NCT00004154 -NCT00004157 -NCT00004161 -NCT00004164 -NCT00004165 -NCT00004177 -NCT00004192 -NCT00004194 -NCT00004197 -NCT00004202 -NCT00004203 -NCT00004204 -NCT00004205 -NCT00004211 -NCT00004216 -NCT00004218 -NCT00004219 -NCT00004223 -NCT00004226 -NCT00004227 -NCT00004232 -NCT00004235 -NCT00004236 -NCT00004246 -NCT00004248 -NCT00004250 -NCT00004254 -NCT00004259 -NCT00004260 -NCT00004266 -NCT00004268 -NCT00004274 -NCT00004275 -NCT00004276 -NCT00004287 -NCT00004296 -NCT00004297 -NCT00004313 -NCT00004317 -NCT00004326 -NCT00004332 -NCT00004334 -NCT00004335 -NCT00004338 -NCT00004339 -NCT00004341 -NCT00004343 -NCT00004351 -NCT00004357 -NCT00004359 -NCT00004364 -NCT00004365 -NCT00004381 -NCT00004387 -NCT00004392 -NCT00004399 -NCT00004401 -NCT00004402 -NCT00004403 -NCT00004404 -NCT00004407 -NCT00004408 -NCT00004410 -NCT00004414 -NCT00004416 -NCT00004418 -NCT00004428 -NCT00004429 -NCT00004431 -NCT00004438 -NCT00004441 -NCT00004444 -NCT00004451 -NCT00004465 -NCT00004466 -NCT00004467 -NCT00004475 -NCT00004478 -NCT00004480 -NCT00004485 -NCT00004487 -NCT00004492 -NCT00004493 -NCT00004494 -NCT00004496 -NCT00004497 -NCT00004533 -NCT00004553 -NCT00004554 -NCT00004557 -NCT00004562 -NCT00004563 -NCT00004566 -NCT00004567 -NCT00004571 -NCT00004572 -NCT00004576 -NCT00004635 -NCT00004637 -NCT00004645 -NCT00004648 -NCT00004649 -NCT00004654 -NCT00004669 -NCT00004670 -NCT00004682 -NCT00004685 -NCT00004686 -NCT00004689 -NCT00004694 -NCT00004696 -NCT00004727 -NCT00004728 -NCT00004729 -NCT00004731 -NCT00004732 -NCT00004733 -NCT00004734 -NCT00004736 -NCT00004738 -NCT00004740 -NCT00004748 -NCT00004751 -NCT00004755 -NCT00004760 -NCT00004762 -NCT00004763 -NCT00004769 -NCT00004770 -NCT00004776 -NCT00004784 -NCT00004785 -NCT00004787 -NCT00004788 -NCT00004793 -NCT00004796 -NCT00004797 -NCT00004805 -NCT00004806 -NCT00004808 -NCT00004809 -NCT00004810 -NCT00004812 -NCT00004817 -NCT00004825 -NCT00004826 -NCT00004829 -NCT00004838 -NCT00004842 -NCT00004843 -NCT00004844 -NCT00004848 -NCT00004850 -NCT00004851 -NCT00004856 -NCT00004857 -NCT00004865 -NCT00004866 -NCT00004868 -NCT00004883 -NCT00004890 -NCT00004895 -NCT00004900 -NCT00004901 -NCT00004911 -NCT00004912 -NCT00004925 -NCT00004928 -NCT00004929 -NCT00004937 -NCT00004982 -NCT00004983 -NCT00004984 -NCT00004991 -NCT00004992 -NCT00005001 -NCT00005003 -NCT00005004 -NCT00005005 -NCT00005007 -NCT00005009 -NCT00005011 -NCT00005013 -NCT00005016 -NCT00005033 -NCT00005035 -NCT00005039 -NCT00005047 -NCT00005053 -NCT00005066 -NCT00005070 -NCT00005072 -NCT00005075 -NCT00005079 -NCT00005081 -NCT00005086 -NCT00005090 -NCT00005100 -NCT00005101 -NCT00005102 -NCT00005103 -NCT00005105 -NCT00005108 -NCT00005111 -NCT00005112 -NCT00005113 -NCT00005117 -NCT00005129 -NCT00005176 -NCT00005271 -NCT00005289 -NCT00005299 -NCT00005313 -NCT00005381 -NCT00005479 -NCT00005567 -NCT00005570 -NCT00005571 -NCT00005574 -NCT00005575 -NCT00005576 -NCT00005579 -NCT00005589 -NCT00005595 -NCT00005599 -NCT00005607 -NCT00005610 -NCT00005624 -NCT00005625 -NCT00005628 -NCT00005629 -NCT00005630 -NCT00005631 -NCT00005632 -NCT00005635 -NCT00005636 -NCT00005637 -NCT00005640 -NCT00005647 -NCT00005652 -NCT00005654 -NCT00005655 -NCT00005657 -NCT00005660 -NCT00005663 -NCT00005664 -NCT00005665 -NCT00005669 -NCT00005674 -NCT00005736 -NCT00005739 -NCT00005760 -NCT00005761 -NCT00005765 -NCT00005766 -NCT00005768 -NCT00005771 -NCT00005772 -NCT00005773 -NCT00005774 -NCT00005775 -NCT00005776 -NCT00005777 -NCT00005778 -NCT00005781 -NCT00005782 -NCT00005783 -NCT00005784 -NCT00005785 -NCT00005786 -NCT00005788 -NCT00005791 -NCT00005805 -NCT00005808 -NCT00005810 -NCT00005812 -NCT00005814 -NCT00005826 -NCT00005829 -NCT00005832 -NCT00005834 -NCT00005837 -NCT00005842 -NCT00005847 -NCT00005848 -NCT00005849 -NCT00005850 -NCT00005856 -NCT00005862 -NCT00005866 -NCT00005869 -NCT00005871 -NCT00005874 -NCT00005880 -NCT00005883 -NCT00005888 -NCT00005889 -NCT00005891 -NCT00005892 -NCT00005893 -NCT00005902 -NCT00005903 -NCT00005905 -NCT00005907 -NCT00005910 -NCT00005919 -NCT00005921 -NCT00005924 -NCT00005925 -NCT00005926 -NCT00005927 -NCT00005933 -NCT00005937 -NCT00005938 -NCT00005941 -NCT00005947 -NCT00005949 -NCT00005950 -NCT00005951 -NCT00005957 -NCT00005958 -NCT00005965 -NCT00005969 -NCT00005970 -NCT00005974 -NCT00005975 -NCT00005985 -NCT00005991 -NCT00005997 -NCT00005999 -NCT00006002 -NCT00006014 -NCT00006021 -NCT00006024 -NCT00006026 -NCT00006032 -NCT00006034 -NCT00006038 -NCT00006044 -NCT00006051 -NCT00006054 -NCT00006055 -NCT00006056 -NCT00006058 -NCT00006059 -NCT00006062 -NCT00006068 -NCT00006070 -NCT00006071 -NCT00006072 -NCT00006077 -NCT00006078 -NCT00006079 -NCT00006080 -NCT00006081 -NCT00006083 -NCT00006088 -NCT00006096 -NCT00006097 -NCT00006101 -NCT00006105 -NCT00006110 -NCT00006111 -NCT00006112 -NCT00006118 -NCT00006124 -NCT00006128 -NCT00006131 -NCT00006132 -NCT00006135 -NCT00006146 -NCT00006148 -NCT00006150 -NCT00006156 -NCT00006157 -NCT00006158 -NCT00006159 -NCT00006160 -NCT00006164 -NCT00006168 -NCT00006173 -NCT00006174 -NCT00006175 -NCT00006180 -NCT00006184 -NCT00006188 -NCT00006193 -NCT00006198 -NCT00006202 -NCT00006213 -NCT00006214 -NCT00006224 -NCT00006226 -NCT00006242 -NCT00006251 -NCT00006252 -NCT00006259 -NCT00006263 -NCT00006269 -NCT00006270 -NCT00006271 -NCT00006272 -NCT00006278 -NCT00006279 -NCT00006289 -NCT00006292 -NCT00006299 -NCT00006305 -NCT00006329 -NCT00006331 -NCT00006333 -NCT00006334 -NCT00006335 -NCT00006336 -NCT00006337 -NCT00006341 -NCT00006345 -NCT00006348 -NCT00006351 -NCT00006352 -NCT00006355 -NCT00006360 -NCT00006376 -NCT00006386 -NCT00006388 -NCT00006395 -NCT00006398 -NCT00006400 -NCT00006401 -NCT00006411 -NCT00006413 -NCT00006414 -NCT00006417 -NCT00006421 -NCT00006422 -NCT00006424 -NCT00006425 -NCT00006426 -NCT00006428 -NCT00006429 -NCT00006430 -NCT00006432 -NCT00006436 -NCT00006438 -NCT00006444 -NCT00006445 -NCT00006447 -NCT00006450 -NCT00006451 -NCT00006455 -NCT00006460 -NCT00006472 -NCT00006474 -NCT00006476 -NCT00006478 -NCT00006481 -NCT00006482 -NCT00006488 -NCT00006501 -NCT00006505 -NCT00006516 -NCT00006518 -NCT00006656 -NCT00006669 -NCT00006695 -NCT00006721 -NCT00006890 -NCT00006916 -NCT00007020 -NCT00007150 -NCT00007163 -NCT00007189 -NCT00007280 -NCT00007319 -NCT00007345 -NCT00007475 -NCT00007501 -NCT00007670 -NCT00007800 -NCT00007982 -NCT00007995 -NCT00008112 -NCT00008216 -NCT00008229 -NCT00008307 -NCT00008424 -NCT00008463 -NCT00008476 -NCT00008515 -NCT00008736 -NCT00008749 -NCT00008814 -NCT00008827 -NCT00009035 -NCT00009048 -NCT00009204 -NCT00009243 -NCT00009529 -NCT00009542 -NCT00009555 -NCT00009568 -NCT00009581 -NCT00009620 -NCT00009633 -NCT00009646 -NCT00009659 -NCT00009672 -NCT00009698 -NCT00009763 -NCT00009789 -NCT00009841 -NCT00009945 -NCT00009958 -NCT00009984 -NCT00009997 -NCT00010439 -NCT00010465 -NCT00010517 -NCT00010764 -NCT00010816 -NCT00010933 -NCT00010946 -NCT00011063 -NCT00011258 -NCT00011323 -NCT00011336 -NCT00011570 -NCT00011648 -NCT00011752 -NCT00011765 -NCT00011960 -NCT00011973 -NCT00012857 -NCT00013156 -NCT00013377 -NCT00013390 -NCT00013416 -NCT00013468 -NCT00013546 -NCT00013559 -NCT00013650 -NCT00013689 -NCT00013741 -NCT00013793 -NCT00013832 -NCT00013845 -NCT00013923 -NCT00014508 -NCT00014612 -NCT00014638 -NCT00014794 -NCT00014950 -NCT00014976 -NCT00015431 -NCT00015470 -NCT00015613 -NCT00015782 -NCT00015795 -NCT00016081 -NCT00016107 -NCT00016419 -NCT00016432 -NCT00016471 -NCT00016497 -NCT00016653 -NCT00016679 -NCT00016848 -NCT00016952 -NCT00017329 -NCT00017550 -NCT00017810 -NCT00017862 -NCT00017914 -NCT00017927 -NCT00017940 -NCT00017979 -NCT00018070 -NCT00018109 -NCT00018174 -NCT00018408 -NCT00018447 -NCT00018486 -NCT00018525 -NCT00018564 -NCT00018889 -NCT00019110 -NCT00019643 -NCT00019812 -NCT00019825 -NCT00020527 -NCT00020605 -NCT00020618 -NCT00020670 -NCT00020709 -NCT00020761 -NCT00020865 -NCT00020943 -NCT00021151 -NCT00021255 -NCT00021372 -NCT00021528 -NCT00021567 -NCT00021580 -NCT00021645 -NCT00021671 -NCT00021723 -NCT00021827 -NCT00021866 -NCT00022581 -NCT00022607 -NCT00022672 -NCT00022841 -NCT00023010 -NCT00023036 -NCT00023049 -NCT00023062 -NCT00023101 -NCT00023192 -NCT00023296 -NCT00023374 -NCT00023439 -NCT00023452 -NCT00023491 -NCT00023569 -NCT00024440 -NCT00024479 -NCT00024570 -NCT00024791 -NCT00024908 -NCT00024986 -NCT00024999 -NCT00025532 -NCT00025662 -NCT00025701 -NCT00025805 -NCT00025870 -NCT00025883 -NCT00025909 -NCT00025935 -NCT00026052 -NCT00026065 -NCT00026104 -NCT00026286 -NCT00026533 -NCT00026598 -NCT00026637 -NCT00026702 -NCT00026728 -NCT00026741 -NCT00026793 -NCT00026923 -NCT00026962 -NCT00027170 -NCT00027209 -NCT00027235 -NCT00027274 -NCT00027287 -NCT00027300 -NCT00027391 -NCT00027638 -NCT00027794 -NCT00027937 -NCT00028028 -NCT00028080 -NCT00028158 -NCT00028184 -NCT00028210 -NCT00028275 -NCT00028340 -NCT00028379 -NCT00028496 -NCT00028795 -NCT00028886 -NCT00028938 -NCT00029107 -NCT00029120 -NCT00029146 -NCT00029159 -NCT00029198 -NCT00029211 -NCT00029315 -NCT00029380 -NCT00029666 -NCT00029731 -NCT00029770 -NCT00029809 -NCT00029822 -NCT00029861 -NCT00029939 -NCT00029952 -NCT00030004 -NCT00030134 -NCT00030160 -NCT00030199 -NCT00030212 -NCT00030238 -NCT00030277 -NCT00030290 -NCT00030394 -NCT00030498 -NCT00030589 -NCT00030602 -NCT00030797 -NCT00030940 -NCT00030966 -NCT00031005 -NCT00031096 -NCT00031239 -NCT00031720 -NCT00031837 -NCT00032006 -NCT00032097 -NCT00032240 -NCT00032331 -NCT00032383 -NCT00032448 -NCT00032461 -NCT00032513 -NCT00032643 -NCT00032682 -NCT00032877 -NCT00032890 -NCT00033189 -NCT00033280 -NCT00033332 -NCT00033462 -NCT00033553 -NCT00033774 -NCT00033813 -NCT00033891 -NCT00034021 -NCT00034060 -NCT00034242 -NCT00034424 -NCT00034450 -NCT00034736 -NCT00034762 -NCT00034788 -NCT00034905 -NCT00035269 -NCT00035373 -NCT00035386 -NCT00035451 -NCT00035477 -NCT00035633 -NCT00035789 -NCT00035815 -NCT00035828 -NCT00035854 -NCT00036335 -NCT00036595 -NCT00036608 -NCT00036647 -NCT00036764 -NCT00037050 -NCT00037154 -NCT00037479 -NCT00037557 -NCT00037817 -NCT00037843 -NCT00037921 -NCT00037973 -NCT00038064 -NCT00038077 -NCT00038090 -NCT00038116 -NCT00038142 -NCT00038233 -NCT00038350 -NCT00038415 -NCT00038623 -NCT00038792 -NCT00039130 -NCT00039182 -NCT00039312 -NCT00039338 -NCT00039364 -NCT00039416 -NCT00039676 -NCT00039702 -NCT00039858 -NCT00039962 -NCT00040027 -NCT00040131 -NCT00040196 -NCT00040248 -NCT00040326 -NCT00040339 -NCT00040352 -NCT00040378 -NCT00040443 -NCT00040456 -NCT00040560 -NCT00040690 -NCT00040742 -NCT00040755 -NCT00040794 -NCT00040885 -NCT00040937 -NCT00041119 -NCT00041587 -NCT00041600 -NCT00041665 -NCT00041899 -NCT00041938 -NCT00041977 -NCT00042042 -NCT00042120 -NCT00042159 -NCT00042172 -NCT00042211 -NCT00042276 -NCT00042549 -NCT00042562 -NCT00042575 -NCT00042705 -NCT00042770 -NCT00042835 -NCT00042848 -NCT00042952 -NCT00042991 -NCT00043186 -NCT00043303 -NCT00043316 -NCT00043628 -NCT00043680 -NCT00043719 -NCT00043784 -NCT00043836 -NCT00043849 -NCT00043940 -NCT00043992 -NCT00044057 -NCT00044122 -NCT00044174 -NCT00044226 -NCT00044252 -NCT00044304 -NCT00044369 -NCT00044473 -NCT00044629 -NCT00044798 -NCT00044811 -NCT00044824 -NCT00044876 -NCT00045136 -NCT00045708 -NCT00045812 -NCT00045838 -NCT00045877 -NCT00045955 -NCT00045981 -NCT00045994 -NCT00046072 -NCT00046124 -NCT00046189 -NCT00046254 -NCT00046397 -NCT00046410 -NCT00046436 -NCT00046527 -NCT00046748 -NCT00046774 -NCT00046995 -NCT00047125 -NCT00047164 -NCT00047281 -NCT00047333 -NCT00047554 -NCT00047723 -NCT00047879 -NCT00047918 -NCT00047957 -NCT00048061 -NCT00048347 -NCT00048360 -NCT00048399 -NCT00048490 -NCT00048542 -NCT00048685 -NCT00048815 -NCT00049036 -NCT00049296 -NCT00049374 -NCT00049543 -NCT00049556 -NCT00049673 -NCT00049764 -NCT00049803 -NCT00049816 -NCT00049829 -NCT00049920 -NCT00050024 -NCT00050167 -NCT00050193 -NCT00050219 -NCT00050245 -NCT00050310 -NCT00050362 -NCT00050479 -NCT00050609 -NCT00050752 -NCT00050778 -NCT00050817 -NCT00051337 -NCT00051363 -NCT00051402 -NCT00051597 -NCT00051623 -NCT00051636 -NCT00051792 -NCT00051961 -NCT00052221 -NCT00052286 -NCT00052624 -NCT00052897 -NCT00052910 -NCT00052962 -NCT00053053 -NCT00053469 -NCT00053482 -NCT00053625 -NCT00053742 -NCT00053846 -NCT00053898 -NCT00054054 -NCT00054067 -NCT00054158 -NCT00054301 -NCT00054457 -NCT00054704 -NCT00054730 -NCT00054756 -NCT00054925 -NCT00055029 -NCT00055042 -NCT00055055 -NCT00055120 -NCT00055198 -NCT00055302 -NCT00055380 -NCT00055445 -NCT00055484 -NCT00055549 -NCT00055588 -NCT00055692 -NCT00055848 -NCT00055991 -NCT00056160 -NCT00056199 -NCT00056225 -NCT00056329 -NCT00056355 -NCT00056433 -NCT00056576 -NCT00056602 -NCT00056628 -NCT00056654 -NCT00056719 -NCT00056771 -NCT00056784 -NCT00056862 -NCT00057018 -NCT00057122 -NCT00057161 -NCT00057434 -NCT00057694 -NCT00057746 -NCT00057798 -NCT00057811 -NCT00057993 -NCT00058240 -NCT00058461 -NCT00058526 -NCT00058604 -NCT00058656 -NCT00058760 -NCT00058812 -NCT00059410 -NCT00059423 -NCT00059449 -NCT00059501 -NCT00059592 -NCT00059748 -NCT00059826 -NCT00060138 -NCT00060242 -NCT00060346 -NCT00060372 -NCT00060398 -NCT00060463 -NCT00060515 -NCT00060528 -NCT00060580 -NCT00060593 -NCT00060606 -NCT00060697 -NCT00060749 -NCT00060970 -NCT00060996 -NCT00061022 -NCT00061048 -NCT00061269 -NCT00061373 -NCT00061633 -NCT00061789 -NCT00061893 -NCT00061906 -NCT00061932 -NCT00061958 -NCT00062231 -NCT00062348 -NCT00062439 -NCT00062465 -NCT00062504 -NCT00062569 -NCT00062582 -NCT00062595 -NCT00062621 -NCT00062764 -NCT00062881 -NCT00062985 -NCT00063024 -NCT00063076 -NCT00063115 -NCT00063180 -NCT00063232 -NCT00063765 -NCT00063817 -NCT00063856 -NCT00063882 -NCT00063895 -NCT00064337 -NCT00064363 -NCT00064467 -NCT00064649 -NCT00064766 -NCT00064961 -NCT00064987 -NCT00065013 -NCT00065052 -NCT00065078 -NCT00065169 -NCT00065182 -NCT00065221 -NCT00065234 -NCT00065273 -NCT00065286 -NCT00065299 -NCT00065364 -NCT00065585 -NCT00065858 -NCT00065949 -NCT00065975 -NCT00066079 -NCT00066144 -NCT00066183 -NCT00066248 -NCT00066573 -NCT00066690 -NCT00066807 -NCT00066846 -NCT00066911 -NCT00067145 -NCT00067327 -NCT00067431 -NCT00067444 -NCT00067496 -NCT00067509 -NCT00067691 -NCT00067821 -NCT00067925 -NCT00068029 -NCT00068042 -NCT00068055 -NCT00068146 -NCT00068159 -NCT00068263 -NCT00068315 -NCT00068510 -NCT00068575 -NCT00068614 -NCT00068822 -NCT00068861 -NCT00068887 -NCT00069056 -NCT00069186 -NCT00069199 -NCT00069303 -NCT00069329 -NCT00069550 -NCT00069589 -NCT00069680 -NCT00069823 -NCT00069914 -NCT00069966 -NCT00070200 -NCT00070317 -NCT00070564 -NCT00070577 -NCT00070655 -NCT00070694 -NCT00070707 -NCT00070733 -NCT00070902 -NCT00070993 -NCT00071227 -NCT00071305 -NCT00071396 -NCT00071435 -NCT00071526 -NCT00071786 -NCT00071838 -NCT00071942 -NCT00071994 -NCT00072020 -NCT00072293 -NCT00072462 -NCT00072475 -NCT00072501 -NCT00072592 -NCT00072605 -NCT00072683 -NCT00072709 -NCT00072800 -NCT00072826 -NCT00072904 -NCT00072969 -NCT00073073 -NCT00073190 -NCT00073463 -NCT00073723 -NCT00073775 -NCT00073788 -NCT00073801 -NCT00074282 -NCT00074373 -NCT00074633 -NCT00074685 -NCT00074711 -NCT00074880 -NCT00074932 -NCT00075023 -NCT00075114 -NCT00075166 -NCT00075205 -NCT00075244 -NCT00075335 -NCT00075387 -NCT00075439 -NCT00075465 -NCT00075608 -NCT00075621 -NCT00076024 -NCT00076271 -NCT00076336 -NCT00076414 -NCT00076440 -NCT00076505 -NCT00076557 -NCT00076674 -NCT00076726 -NCT00076752 -NCT00076960 -NCT00077012 -NCT00077038 -NCT00077064 -NCT00077103 -NCT00077194 -NCT00077207 -NCT00077311 -NCT00077545 -NCT00077805 -NCT00077818 -NCT00077909 -NCT00077922 -NCT00078026 -NCT00078078 -NCT00078091 -NCT00078104 -NCT00078195 -NCT00078208 -NCT00078338 -NCT00078351 -NCT00078364 -NCT00078403 -NCT00078533 -NCT00078663 -NCT00078715 -NCT00079001 -NCT00079053 -NCT00079118 -NCT00079235 -NCT00079313 -NCT00079417 -NCT00079521 -NCT00079599 -NCT00079768 -NCT00079820 -NCT00080054 -NCT00080067 -NCT00080210 -NCT00080275 -NCT00080288 -NCT00080366 -NCT00080392 -NCT00080405 -NCT00080444 -NCT00080483 -NCT00080535 -NCT00080574 -NCT00080600 -NCT00080613 -NCT00080860 -NCT00081263 -NCT00081341 -NCT00081432 -NCT00081575 -NCT00081640 -NCT00081731 -NCT00081744 -NCT00081835 -NCT00081913 -NCT00081991 -NCT00082017 -NCT00082043 -NCT00082069 -NCT00082108 -NCT00082251 -NCT00082446 -NCT00082667 -NCT00082862 -NCT00082927 -NCT00083330 -NCT00083356 -NCT00083382 -NCT00083408 -NCT00083499 -NCT00083551 -NCT00083564 -NCT00083577 -NCT00083681 -NCT00083798 -NCT00083902 -NCT00084097 -NCT00084123 -NCT00084201 -NCT00084279 -NCT00084305 -NCT00084435 -NCT00085098 -NCT00085293 -NCT00085475 -NCT00085657 -NCT00085683 -NCT00085917 -NCT00085930 -NCT00085995 -NCT00086073 -NCT00086190 -NCT00086359 -NCT00086619 -NCT00086658 -NCT00086671 -NCT00086723 -NCT00086840 -NCT00086983 -NCT00087139 -NCT00087178 -NCT00087256 -NCT00088153 -NCT00088309 -NCT00088348 -NCT00088374 -NCT00088426 -NCT00088582 -NCT00088608 -NCT00088699 -NCT00088829 -NCT00088907 -NCT00089167 -NCT00089310 -NCT00089401 -NCT00089414 -NCT00089427 -NCT00089531 -NCT00089557 -NCT00089609 -NCT00089739 -NCT00089765 -NCT00089791 -NCT00089830 -NCT00090103 -NCT00090207 -NCT00090337 -NCT00090402 -NCT00091026 -NCT00091130 -NCT00091169 -NCT00091247 -NCT00091494 -NCT00091611 -NCT00091702 -NCT00091884 -NCT00091897 -NCT00092144 -NCT00092287 -NCT00092482 -NCT00092521 -NCT00092599 -NCT00092612 -NCT00092625 -NCT00092755 -NCT00092937 -NCT00092976 -NCT00093054 -NCT00093158 -NCT00093353 -NCT00093366 -NCT00093613 -NCT00093795 -NCT00093860 -NCT00093938 -NCT00094016 -NCT00094055 -NCT00094068 -NCT00094094 -NCT00094120 -NCT00094172 -NCT00094354 -NCT00094406 -NCT00094536 -NCT00094562 -NCT00094627 -NCT00094731 -NCT00094887 -NCT00094900 -NCT00094913 -NCT00094939 -NCT00094952 -NCT00094978 -NCT00095082 -NCT00095095 -NCT00095459 -NCT00095472 -NCT00095654 -NCT00095693 -NCT00095836 -NCT00096018 -NCT00096161 -NCT00096213 -NCT00096278 -NCT00096291 -NCT00096369 -NCT00096408 -NCT00096473 -NCT00096551 -NCT00096694 -NCT00096798 -NCT00096902 -NCT00096954 -NCT00097162 -NCT00097331 -NCT00097396 -NCT00097422 -NCT00097448 -NCT00097513 -NCT00097526 -NCT00097552 -NCT00097734 -NCT00097760 -NCT00097981 -NCT00098046 -NCT00098072 -NCT00098202 -NCT00098280 -NCT00098384 -NCT00098423 -NCT00098475 -NCT00098488 -NCT00098527 -NCT00098670 -NCT00099359 -NCT00099424 -NCT00099463 -NCT00099502 -NCT00099593 -NCT00099762 -NCT00099996 -NCT00100009 -NCT00100061 -NCT00100217 -NCT00100282 -NCT00100321 -NCT00100360 -NCT00100698 -NCT00100802 -NCT00100828 -NCT00100880 -NCT00100919 -NCT00101036 -NCT00101114 -NCT00101374 -NCT00101621 -NCT00101712 -NCT00101725 -NCT00101790 -NCT00101829 -NCT00101933 -NCT00102089 -NCT00102102 -NCT00102154 -NCT00102258 -NCT00102401 -NCT00102453 -NCT00102492 -NCT00102557 -NCT00102570 -NCT00102596 -NCT00102661 -NCT00102739 -NCT00102765 -NCT00102791 -NCT00102817 -NCT00102882 -NCT00102908 -NCT00102934 -NCT00103155 -NCT00103181 -NCT00103194 -NCT00103272 -NCT00103285 -NCT00103298 -NCT00103324 -NCT00103415 -NCT00103506 -NCT00103558 -NCT00103740 -NCT00103792 -NCT00103818 -NCT00104000 -NCT00104065 -NCT00104299 -NCT00104468 -NCT00104520 -NCT00104572 -NCT00104611 -NCT00104962 -NCT00105066 -NCT00105105 -NCT00105131 -NCT00105222 -NCT00105326 -NCT00105378 -NCT00105404 -NCT00105417 -NCT00105430 -NCT00105482 -NCT00105508 -NCT00105547 -NCT00105703 -NCT00105742 -NCT00105950 -NCT00105963 -NCT00106119 -NCT00106132 -NCT00106184 -NCT00106366 -NCT00106496 -NCT00106665 -NCT00106717 -NCT00106743 -NCT00106756 -NCT00106769 -NCT00106795 -NCT00106821 -NCT00106886 -NCT00106938 -NCT00106977 -NCT00107081 -NCT00107172 -NCT00107198 -NCT00107211 -NCT00107458 -NCT00107562 -NCT00107601 -NCT00107614 -NCT00107744 -NCT00107783 -NCT00107796 -NCT00107991 -NCT00108134 -NCT00108394 -NCT00108420 -NCT00108433 -NCT00108446 -NCT00108485 -NCT00108628 -NCT00108667 -NCT00108680 -NCT00108758 -NCT00108992 -NCT00109148 -NCT00109200 -NCT00109395 -NCT00109525 -NCT00109564 -NCT00109616 -NCT00109707 -NCT00109811 -NCT00110006 -NCT00110058 -NCT00110214 -NCT00110253 -NCT00110318 -NCT00110500 -NCT00110617 -NCT00110669 -NCT00110695 -NCT00110851 -NCT00110864 -NCT00110890 -NCT00110916 -NCT00110929 -NCT00110968 -NCT00111072 -NCT00111215 -NCT00111241 -NCT00111254 -NCT00111267 -NCT00111293 -NCT00111306 -NCT00111319 -NCT00111384 -NCT00111592 -NCT00111644 -NCT00111657 -NCT00111735 -NCT00111852 -NCT00111917 -NCT00112151 -NCT00112203 -NCT00112333 -NCT00112385 -NCT00112437 -NCT00112515 -NCT00112723 -NCT00112736 -NCT00112827 -NCT00112879 -NCT00112957 -NCT00113022 -NCT00113061 -NCT00113074 -NCT00113152 -NCT00113347 -NCT00113386 -NCT00113425 -NCT00113503 -NCT00113542 -NCT00113568 -NCT00113633 -NCT00113971 -NCT00113997 -NCT00114088 -NCT00114101 -NCT00114114 -NCT00114140 -NCT00114205 -NCT00114309 -NCT00114322 -NCT00114426 -NCT00114543 -NCT00114972 -NCT00115076 -NCT00115336 -NCT00115401 -NCT00115440 -NCT00115570 -NCT00115622 -NCT00115661 -NCT00115895 -NCT00116168 -NCT00116311 -NCT00116337 -NCT00116571 -NCT00116753 -NCT00116779 -NCT00116818 -NCT00116961 -NCT00117000 -NCT00117052 -NCT00117117 -NCT00117182 -NCT00117195 -NCT00117221 -NCT00117260 -NCT00117377 -NCT00117403 -NCT00117533 -NCT00117572 -NCT00117884 -NCT00117962 -NCT00117988 -NCT00118170 -NCT00118482 -NCT00118586 -NCT00118729 -NCT00118820 -NCT00119041 -NCT00119158 -NCT00119197 -NCT00119483 -NCT00119509 -NCT00119626 -NCT00119678 -NCT00119704 -NCT00119730 -NCT00119821 -NCT00120003 -NCT00120094 -NCT00120120 -NCT00120133 -NCT00120159 -NCT00120263 -NCT00120289 -NCT00120432 -NCT00120484 -NCT00120497 -NCT00120562 -NCT00120614 -NCT00120666 -NCT00120744 -NCT00120887 -NCT00120900 -NCT00120978 -NCT00121095 -NCT00121173 -NCT00121381 -NCT00121433 -NCT00121563 -NCT00121797 -NCT00121875 -NCT00121901 -NCT00121953 -NCT00121992 -NCT00122278 -NCT00122616 -NCT00122681 -NCT00122694 -NCT00122954 -NCT00123006 -NCT00123435 -NCT00123630 -NCT00123656 -NCT00123799 -NCT00123864 -NCT00124020 -NCT00124033 -NCT00124384 -NCT00124410 -NCT00124579 -NCT00124722 -NCT00124813 -NCT00124930 -NCT00125164 -NCT00125190 -NCT00125281 -NCT00125437 -NCT00125476 -NCT00125489 -NCT00125658 -NCT00125671 -NCT00125788 -NCT00125918 -NCT00125957 -NCT00126035 -NCT00126048 -NCT00126139 -NCT00126191 -NCT00126243 -NCT00126386 -NCT00126399 -NCT00126464 -NCT00126581 -NCT00126698 -NCT00126763 -NCT00126841 -NCT00126867 -NCT00126945 -NCT00126958 -NCT00127205 -NCT00127257 -NCT00127322 -NCT00127335 -NCT00127374 -NCT00127439 -NCT00127465 -NCT00127517 -NCT00127608 -NCT00127634 -NCT00127686 -NCT00127842 -NCT00127985 -NCT00128011 -NCT00128141 -NCT00128154 -NCT00128193 -NCT00128232 -NCT00128271 -NCT00128310 -NCT00128336 -NCT00128362 -NCT00128492 -NCT00128557 -NCT00128661 -NCT00128687 -NCT00128726 -NCT00128739 -NCT00128895 -NCT00128921 -NCT00128973 -NCT00129376 -NCT00129428 -NCT00129506 -NCT00129532 -NCT00129701 -NCT00129753 -NCT00129831 -NCT00130000 -NCT00130039 -NCT00130078 -NCT00130182 -NCT00130247 -NCT00130325 -NCT00130351 -NCT00130364 -NCT00130468 -NCT00130494 -NCT00130507 -NCT00130533 -NCT00130572 -NCT00130611 -NCT00130741 -NCT00130949 -NCT00131014 -NCT00131157 -NCT00131183 -NCT00131274 -NCT00131482 -NCT00131495 -NCT00131508 -NCT00131586 -NCT00131911 -NCT00132015 -NCT00132080 -NCT00132171 -NCT00132236 -NCT00132327 -NCT00132340 -NCT00132366 -NCT00132405 -NCT00132444 -NCT00132496 -NCT00132548 -NCT00132561 -NCT00132613 -NCT00132951 -NCT00133276 -NCT00133406 -NCT00133419 -NCT00133432 -NCT00133510 -NCT00133562 -NCT00133575 -NCT00133588 -NCT00133679 -NCT00133783 -NCT00133809 -NCT00133835 -NCT00133991 -NCT00134043 -NCT00134173 -NCT00134199 -NCT00134238 -NCT00134420 -NCT00134485 -NCT00134511 -NCT00134537 -NCT00134550 -NCT00134732 -NCT00134745 -NCT00134784 -NCT00134823 -NCT00135122 -NCT00135148 -NCT00135200 -NCT00135551 -NCT00135603 -NCT00135707 -NCT00135733 -NCT00135915 -NCT00136032 -NCT00136058 -NCT00136110 -NCT00136305 -NCT00136552 -NCT00136643 -NCT00136669 -NCT00136695 -NCT00136708 -NCT00136721 -NCT00136747 -NCT00136773 -NCT00136786 -NCT00136838 -NCT00136877 -NCT00136942 -NCT00136981 -NCT00137319 -NCT00137462 -NCT00137722 -NCT00137995 -NCT00138099 -NCT00138125 -NCT00138138 -NCT00138164 -NCT00138385 -NCT00138476 -NCT00138684 -NCT00138918 -NCT00139113 -NCT00139178 -NCT00139282 -NCT00139425 -NCT00139685 -NCT00139776 -NCT00139828 -NCT00139880 -NCT00139893 -NCT00140010 -NCT00140088 -NCT00140101 -NCT00140140 -NCT00140153 -NCT00140205 -NCT00140231 -NCT00140309 -NCT00140413 -NCT00140439 -NCT00140491 -NCT00140517 -NCT00140556 -NCT00140569 -NCT00140647 -NCT00140699 -NCT00140738 -NCT00140868 -NCT00140998 -NCT00141089 -NCT00141843 -NCT00141869 -NCT00141882 -NCT00141960 -NCT00141986 -NCT00142038 -NCT00142077 -NCT00142090 -NCT00142272 -NCT00142363 -NCT00142402 -NCT00142558 -NCT00142584 -NCT00142610 -NCT00142792 -NCT00142805 -NCT00142987 -NCT00143026 -NCT00143039 -NCT00143052 -NCT00143078 -NCT00143221 -NCT00143416 -NCT00143546 -NCT00143598 -NCT00143611 -NCT00143715 -NCT00143741 -NCT00143754 -NCT00143793 -NCT00143949 -NCT00143988 -NCT00144196 -NCT00144235 -NCT00144313 -NCT00144339 -NCT00144391 -NCT00144404 -NCT00144417 -NCT00144456 -NCT00145080 -NCT00145288 -NCT00145405 -NCT00145483 -NCT00145691 -NCT00145886 -NCT00145938 -NCT00145977 -NCT00146042 -NCT00146055 -NCT00146146 -NCT00146185 -NCT00146211 -NCT00146354 -NCT00146367 -NCT00146536 -NCT00146679 -NCT00146731 -NCT00147069 -NCT00147082 -NCT00147095 -NCT00147147 -NCT00147186 -NCT00147251 -NCT00147277 -NCT00147290 -NCT00147316 -NCT00147342 -NCT00147368 -NCT00147420 -NCT00147433 -NCT00147823 -NCT00148044 -NCT00148122 -NCT00148200 -NCT00148213 -NCT00148343 -NCT00148512 -NCT00148668 -NCT00148681 -NCT00148733 -NCT00148772 -NCT00148837 -NCT00148863 -NCT00148915 -NCT00149045 -NCT00149084 -NCT00149136 -NCT00149188 -NCT00149305 -NCT00149318 -NCT00149461 -NCT00149565 -NCT00149656 -NCT00149721 -NCT00149838 -NCT00149851 -NCT00149877 -NCT00150033 -NCT00150111 -NCT00150397 -NCT00150644 -NCT00150774 -NCT00150969 -NCT00151125 -NCT00151385 -NCT00151437 -NCT00151723 -NCT00151736 -NCT00151801 -NCT00152243 -NCT00152282 -NCT00152321 -NCT00152451 -NCT00152503 -NCT00152581 -NCT00152620 -NCT00152685 -NCT00153062 -NCT00153114 -NCT00153751 -NCT00153777 -NCT00153816 -NCT00153933 -NCT00153972 -NCT00154076 -NCT00154479 -NCT00154505 -NCT00154570 -NCT00154583 -NCT00154596 -NCT00154622 -NCT00154635 -NCT00154830 -NCT00154843 -NCT00154869 -NCT00154934 -NCT00155025 -NCT00155051 -NCT00155077 -NCT00155168 -NCT00155194 -NCT00155311 -NCT00155363 -NCT00155545 -NCT00155740 -NCT00155753 -NCT00155766 -NCT00155792 -NCT00155805 -NCT00155857 -NCT00155870 -NCT00155922 -NCT00156442 -NCT00156520 -NCT00156533 -NCT00156546 -NCT00156559 -NCT00156650 -NCT00156728 -NCT00156767 -NCT00156819 -NCT00157105 -NCT00157482 -NCT00157534 -NCT00157586 -NCT00157690 -NCT00158301 -NCT00158366 -NCT00158522 -NCT00158613 -NCT00158665 -NCT00158743 -NCT00159250 -NCT00159289 -NCT00159302 -NCT00159341 -NCT00159354 -NCT00159367 -NCT00159406 -NCT00159419 -NCT00159861 -NCT00159913 -NCT00159991 -NCT00160082 -NCT00160264 -NCT00160303 -NCT00160316 -NCT00160433 -NCT00160446 -NCT00160550 -NCT00160693 -NCT00160719 -NCT00160771 -NCT00160797 -NCT00160940 -NCT00161005 -NCT00161031 -NCT00161083 -NCT00161200 -NCT00161226 -NCT00161291 -NCT00161304 -NCT00161330 -NCT00161421 -NCT00161447 -NCT00161473 -NCT00161486 -NCT00161902 -NCT00161915 -NCT00161980 -NCT00162539 -NCT00162773 -NCT00162825 -NCT00162851 -NCT00162864 -NCT00163007 -NCT00163059 -NCT00163111 -NCT00163189 -NCT00163215 -NCT00163293 -NCT00163306 -NCT00163410 -NCT00163553 -NCT00163566 -NCT00163683 -NCT00163709 -NCT00163943 -NCT00164060 -NCT00164073 -NCT00164125 -NCT00164281 -NCT00164723 -NCT00164957 -NCT00165191 -NCT00165490 -NCT00165555 -NCT00165620 -NCT00165646 -NCT00165672 -NCT00165698 -NCT00165828 -NCT00165919 -NCT00165932 -NCT00166205 -NCT00166218 -NCT00166387 -NCT00166400 -NCT00166413 -NCT00166491 -NCT00166543 -NCT00166569 -NCT00166751 -NCT00166777 -NCT00166868 -NCT00166894 -NCT00167310 -NCT00167375 -NCT00167596 -NCT00167713 -NCT00168051 -NCT00168090 -NCT00168220 -NCT00168350 -NCT00168532 -NCT00168636 -NCT00168714 -NCT00168974 -NCT00169169 -NCT00169273 -NCT00169325 -NCT00169702 -NCT00169754 -NCT00169767 -NCT00169897 -NCT00170001 -NCT00170261 -NCT00170339 -NCT00170547 -NCT00170781 -NCT00171093 -NCT00171327 -NCT00171457 -NCT00171652 -NCT00171665 -NCT00171730 -NCT00171886 -NCT00171925 -NCT00171951 -NCT00171964 -NCT00172068 -NCT00172081 -NCT00172107 -NCT00172120 -NCT00172172 -NCT00172341 -NCT00172354 -NCT00172419 -NCT00172445 -NCT00172523 -NCT00172549 -NCT00172588 -NCT00172601 -NCT00172653 -NCT00172666 -NCT00172822 -NCT00172835 -NCT00172952 -NCT00173043 -NCT00173134 -NCT00173186 -NCT00173199 -NCT00173212 -NCT00173264 -NCT00173459 -NCT00173498 -NCT00173628 -NCT00174005 -NCT00174018 -NCT00174174 -NCT00174187 -NCT00174252 -NCT00174278 -NCT00174304 -NCT00174330 -NCT00174369 -NCT00174408 -NCT00174421 -NCT00174460 -NCT00174655 -NCT00174941 -NCT00174954 -NCT00174967 -NCT00175006 -NCT00175019 -NCT00175032 -NCT00175045 -NCT00175071 -NCT00175110 -NCT00175149 -NCT00175175 -NCT00175188 -NCT00175214 -NCT00175240 -NCT00175253 -NCT00175266 -NCT00175448 -NCT00175565 -NCT00175617 -NCT00175747 -NCT00175825 -NCT00175929 -NCT00176098 -NCT00176150 -NCT00176176 -NCT00176410 -NCT00176462 -NCT00176579 -NCT00176631 -NCT00176696 -NCT00176722 -NCT00176761 -NCT00176956 -NCT00177034 -NCT00177047 -NCT00177320 -NCT00177346 -NCT00177372 -NCT00177385 -NCT00177411 -NCT00177775 -NCT00177892 -NCT00177970 -NCT00178165 -NCT00178204 -NCT00178373 -NCT00178451 -NCT00178490 -NCT00178516 -NCT00178542 -NCT00178607 -NCT00178672 -NCT00178724 -NCT00178763 -NCT00178997 -NCT00179127 -NCT00179400 -NCT00179413 -NCT00179517 -NCT00179647 -NCT00179790 -NCT00179907 -NCT00179933 -NCT00180128 -NCT00180362 -NCT00180518 -NCT00180531 -NCT00180635 -NCT00180661 -NCT00180765 -NCT00180882 -NCT00180895 -NCT00181272 -NCT00181623 -NCT00182078 -NCT00182091 -NCT00182208 -NCT00182260 -NCT00182299 -NCT00182481 -NCT00182611 -NCT00182650 -NCT00182871 -NCT00183040 -NCT00183066 -NCT00183352 -NCT00183430 -NCT00183456 -NCT00183482 -NCT00183677 -NCT00183911 -NCT00183950 -NCT00184197 -NCT00184236 -NCT00184431 -NCT00184483 -NCT00184548 -NCT00184691 -NCT00184717 -NCT00184756 -NCT00184808 -NCT00184873 -NCT00185458 -NCT00185575 -NCT00185718 -NCT00185744 -NCT00186017 -NCT00186407 -NCT00186628 -NCT00186719 -NCT00186784 -NCT00186888 -NCT00186940 -NCT00187161 -NCT00187187 -NCT00187291 -NCT00187499 -NCT00187824 -NCT00187863 -NCT00188201 -NCT00188240 -NCT00188344 -NCT00188396 -NCT00188474 -NCT00188500 -NCT00188682 -NCT00188890 -NCT00189163 -NCT00189228 -NCT00189280 -NCT00189436 -NCT00189722 -NCT00189787 -NCT00189930 -NCT00190060 -NCT00190398 -NCT00190502 -NCT00190554 -NCT00190658 -NCT00191074 -NCT00191113 -NCT00191321 -NCT00191425 -NCT00191529 -NCT00192205 -NCT00192348 -NCT00192413 -NCT00192556 -NCT00192569 -NCT00193141 -NCT00193648 -NCT00193661 -NCT00194155 -NCT00194259 -NCT00194285 -NCT00194324 -NCT00194402 -NCT00194480 -NCT00194571 -NCT00194584 -NCT00194597 -NCT00194610 -NCT00194636 -NCT00194675 -NCT00194701 -NCT00194714 -NCT00194870 -NCT00194922 -NCT00194961 -NCT00194974 -NCT00195052 -NCT00195091 -NCT00195143 -NCT00195286 -NCT00195351 -NCT00195637 -NCT00195741 -NCT00195793 -NCT00195806 -NCT00195923 -NCT00195936 -NCT00195975 -NCT00195988 -NCT00196001 -NCT00196313 -NCT00196365 -NCT00196729 -NCT00196898 -NCT00196937 -NCT00196963 -NCT00196989 -NCT00197418 -NCT00197496 -NCT00197613 -NCT00197652 -NCT00197678 -NCT00198029 -NCT00198718 -NCT00198757 -NCT00198796 -NCT00199082 -NCT00199108 -NCT00199212 -NCT00199355 -NCT00199394 -NCT00199407 -NCT00199420 -NCT00199498 -NCT00199550 -NCT00199810 -NCT00200005 -NCT00200044 -NCT00200057 -NCT00200174 -NCT00200252 -NCT00200304 -NCT00200486 -NCT00200577 -NCT00200655 -NCT00200681 -NCT00200876 -NCT00200902 -NCT00200967 -NCT00200993 -NCT00201058 -NCT00201253 -NCT00201292 -NCT00201318 -NCT00201370 -NCT00201383 -NCT00201422 -NCT00201617 -NCT00201721 -NCT00201773 -NCT00201994 -NCT00202111 -NCT00202137 -NCT00202150 -NCT00202163 -NCT00202176 -NCT00202189 -NCT00202228 -NCT00202371 -NCT00202384 -NCT00202397 -NCT00202436 -NCT00202462 -NCT00202670 -NCT00202709 -NCT00202904 -NCT00203034 -NCT00203060 -NCT00203255 -NCT00203268 -NCT00203333 -NCT00203554 -NCT00203593 -NCT00203697 -NCT00203931 -NCT00203996 -NCT00204074 -NCT00204165 -NCT00204204 -NCT00204230 -NCT00204269 -NCT00204399 -NCT00204464 -NCT00204503 -NCT00204672 -NCT00205010 -NCT00205361 -NCT00205647 -NCT00205660 -NCT00205855 -NCT00205868 -NCT00205881 -NCT00205907 -NCT00205920 -NCT00206024 -NCT00206206 -NCT00206258 -NCT00206297 -NCT00206375 -NCT00206401 -NCT00206544 -NCT00206570 -NCT00206830 -NCT00206843 -NCT00206921 -NCT00207233 -NCT00207376 -NCT00207519 -NCT00207727 -NCT00207909 -NCT00207935 -NCT00207974 -NCT00208000 -NCT00208221 -NCT00208325 -NCT00208689 -NCT00208819 -NCT00208871 -NCT00208936 -NCT00209027 -NCT00209118 -NCT00209131 -NCT00209144 -NCT00209235 -NCT00209274 -NCT00209326 -NCT00209339 -NCT00209456 -NCT00209872 -NCT00209898 -NCT00210002 -NCT00210015 -NCT00210119 -NCT00210340 -NCT00210444 -NCT00210483 -NCT00210535 -NCT00210600 -NCT00210886 -NCT00210990 -NCT00211016 -NCT00211081 -NCT00211224 -NCT00211263 -NCT00211276 -NCT00211354 -NCT00211510 -NCT00211536 -NCT00211614 -NCT00211627 -NCT00211692 -NCT00212043 -NCT00212134 -NCT00212160 -NCT00212225 -NCT00212303 -NCT00212355 -NCT00212368 -NCT00212459 -NCT00212550 -NCT00212576 -NCT00212602 -NCT00212719 -NCT00213005 -NCT00213044 -NCT00213135 -NCT00213252 -NCT00213356 -NCT00213447 -NCT00213590 -NCT00213603 -NCT00213824 -NCT00213941 -NCT00214149 -NCT00214305 -NCT00214448 -NCT00214487 -NCT00214552 -NCT00214708 -NCT00214734 -NCT00215059 -NCT00215215 -NCT00215384 -NCT00215436 -NCT00215449 -NCT00215514 -NCT00215592 -NCT00215618 -NCT00215748 -NCT00215787 -NCT00215865 -NCT00215930 -NCT00215943 -NCT00216125 -NCT00216242 -NCT00216320 -NCT00216398 -NCT00216450 -NCT00216489 -NCT00216502 -NCT00216515 -NCT00216567 -NCT00216593 -NCT00216658 -NCT00216736 -NCT00216775 -NCT00217100 -NCT00217178 -NCT00217295 -NCT00217321 -NCT00217347 -NCT00217464 -NCT00217503 -NCT00217542 -NCT00217581 -NCT00217724 -NCT00217737 -NCT00217854 -NCT00217945 -NCT00218855 -NCT00218868 -NCT00219284 -NCT00219427 -NCT00219466 -NCT00219479 -NCT00219492 -NCT00219518 -NCT00219570 -NCT00219778 -NCT00219882 -NCT00219999 -NCT00220012 -NCT00220181 -NCT00220272 -NCT00220298 -NCT00220311 -NCT00220350 -NCT00220506 -NCT00220532 -NCT00220545 -NCT00220584 -NCT00220753 -NCT00220935 -NCT00220961 -NCT00220987 -NCT00221013 -NCT00221091 -NCT00221195 -NCT00221325 -NCT00221351 -NCT00221832 -NCT00221845 -NCT00221897 -NCT00221910 -NCT00222079 -NCT00222092 -NCT00222131 -NCT00222183 -NCT00222300 -NCT00222352 -NCT00222417 -NCT00222521 -NCT00222651 -NCT00222768 -NCT00222781 -NCT00222872 -NCT00222950 -NCT00222963 -NCT00223275 -NCT00223548 -NCT00223665 -NCT00223743 -NCT00223756 -NCT00223860 -NCT00224042 -NCT00224055 -NCT00224081 -NCT00224107 -NCT00224120 -NCT00224198 -NCT00224211 -NCT00224536 -NCT00224640 -NCT00224939 -NCT00224991 -NCT00225004 -NCT00225069 -NCT00225160 -NCT00225225 -NCT00225446 -NCT00225537 -NCT00225797 -NCT00225979 -NCT00226083 -NCT00226174 -NCT00226421 -NCT00226577 -NCT00226616 -NCT00226798 -NCT00227253 -NCT00227331 -NCT00227448 -NCT00227539 -NCT00227617 -NCT00227630 -NCT00227877 -NCT00227929 -NCT00227955 -NCT00227968 -NCT00228150 -NCT00228215 -NCT00228228 -NCT00228267 -NCT00228670 -NCT00228878 -NCT00228891 -NCT00228904 -NCT00229021 -NCT00229294 -NCT00229424 -NCT00229502 -NCT00229580 -NCT00229762 -NCT00229918 -NCT00229944 -NCT00229996 -NCT00230087 -NCT00230165 -NCT00230178 -NCT00230282 -NCT00230360 -NCT00230594 -NCT00230620 -NCT00230685 -NCT00230750 -NCT00230802 -NCT00230815 -NCT00230854 -NCT00230971 -NCT00231010 -NCT00231023 -NCT00231231 -NCT00231270 -NCT00231387 -NCT00231556 -NCT00231569 -NCT00231686 -NCT00231881 -NCT00231907 -NCT00232219 -NCT00232297 -NCT00232375 -NCT00232453 -NCT00232466 -NCT00232557 -NCT00232570 -NCT00232583 -NCT00232934 -NCT00233025 -NCT00233038 -NCT00233233 -NCT00233363 -NCT00233454 -NCT00233519 -NCT00233545 -NCT00233610 -NCT00233727 -NCT00233922 -NCT00233935 -NCT00233974 -NCT00234065 -NCT00234156 -NCT00234195 -NCT00234247 -NCT00234403 -NCT00234494 -NCT00234533 -NCT00234572 -NCT00234949 -NCT00235131 -NCT00235248 -NCT00235521 -NCT00235599 -NCT00235677 -NCT00235703 -NCT00235716 -NCT00235937 -NCT00236002 -NCT00236080 -NCT00236158 -NCT00236184 -NCT00236197 -NCT00236327 -NCT00236366 -NCT00236392 -NCT00236496 -NCT00236509 -NCT00236561 -NCT00236730 -NCT00236769 -NCT00236782 -NCT00236795 -NCT00236847 -NCT00236860 -NCT00236873 -NCT00237016 -NCT00237055 -NCT00237133 -NCT00237302 -NCT00237354 -NCT00237367 -NCT00237380 -NCT00237497 -NCT00237523 -NCT00237601 -NCT00237692 -NCT00237705 -NCT00238043 -NCT00238368 -NCT00238537 -NCT00238641 -NCT00238745 -NCT00238927 -NCT00239161 -NCT00239252 -NCT00239395 -NCT00239538 -NCT00239564 -NCT00239590 -NCT00239629 -NCT00239707 -NCT00239759 -NCT00240136 -NCT00240162 -NCT00240461 -NCT00240734 -NCT00240760 -NCT00240773 -NCT00240786 -NCT00240799 -NCT00240838 -NCT00240929 -NCT00240981 -NCT00241319 -NCT00241358 -NCT00241436 -NCT00241527 -NCT00241553 -NCT00241631 -NCT00241813 -NCT00241904 -NCT00242060 -NCT00242138 -NCT00242177 -NCT00242242 -NCT00242268 -NCT00242281 -NCT00242333 -NCT00242502 -NCT00242541 -NCT00242723 -NCT00242944 -NCT00243139 -NCT00243152 -NCT00243282 -NCT00243360 -NCT00243386 -NCT00243620 -NCT00243659 -NCT00243685 -NCT00243789 -NCT00243880 -NCT00243906 -NCT00243945 -NCT00243984 -NCT00244023 -NCT00244153 -NCT00244517 -NCT00244543 -NCT00244582 -NCT00244959 -NCT00244972 -NCT00245245 -NCT00245375 -NCT00245453 -NCT00245518 -NCT00245622 -NCT00245661 -NCT00245700 -NCT00245791 -NCT00245856 -NCT00245921 -NCT00246038 -NCT00246064 -NCT00246324 -NCT00246389 -NCT00246467 -NCT00246506 -NCT00246558 -NCT00246571 -NCT00246805 -NCT00246896 -NCT00246922 -NCT00247052 -NCT00247169 -NCT00247273 -NCT00247377 -NCT00247533 -NCT00247546 -NCT00247585 -NCT00248105 -NCT00248144 -NCT00248443 -NCT00248495 -NCT00248690 -NCT00248859 -NCT00249080 -NCT00249093 -NCT00249743 -NCT00250055 -NCT00250159 -NCT00250250 -NCT00250484 -NCT00250497 -NCT00250536 -NCT00250861 -NCT00250978 -NCT00250991 -NCT00251056 -NCT00251108 -NCT00251121 -NCT00251147 -NCT00251212 -NCT00251251 -NCT00251264 -NCT00251277 -NCT00251316 -NCT00251329 -NCT00251745 -NCT00251758 -NCT00251836 -NCT00251914 -NCT00252018 -NCT00252070 -NCT00252148 -NCT00252239 -NCT00252317 -NCT00252421 -NCT00252603 -NCT00252941 -NCT00252993 -NCT00253084 -NCT00253188 -NCT00253201 -NCT00253214 -NCT00253227 -NCT00253253 -NCT00253305 -NCT00253487 -NCT00253734 -NCT00253786 -NCT00253981 -NCT00254111 -NCT00254150 -NCT00254371 -NCT00254384 -NCT00254449 -NCT00254553 -NCT00254566 -NCT00254592 -NCT00255073 -NCT00255086 -NCT00255177 -NCT00255242 -NCT00255294 -NCT00255307 -NCT00255372 -NCT00255385 -NCT00255398 -NCT00256165 -NCT00256178 -NCT00256217 -NCT00256308 -NCT00256503 -NCT00256529 -NCT00256581 -NCT00256685 -NCT00256776 -NCT00256802 -NCT00256841 -NCT00256984 -NCT00257010 -NCT00257049 -NCT00257309 -NCT00257348 -NCT00257374 -NCT00257582 -NCT00257634 -NCT00257777 -NCT00257842 -NCT00257855 -NCT00257933 -NCT00257985 -NCT00257998 -NCT00258089 -NCT00258102 -NCT00258154 -NCT00258245 -NCT00258284 -NCT00258466 -NCT00258518 -NCT00258544 -NCT00258570 -NCT00258661 -NCT00258973 -NCT00259610 -NCT00259649 -NCT00259688 -NCT00259779 -NCT00259857 -NCT00260000 -NCT00260039 -NCT00260091 -NCT00260104 -NCT00260143 -NCT00260182 -NCT00260572 -NCT00260585 -NCT00260624 -NCT00260663 -NCT00260702 -NCT00260897 -NCT00261001 -NCT00261014 -NCT00261248 -NCT00261300 -NCT00261339 -NCT00261391 -NCT00261482 -NCT00261495 -NCT00261508 -NCT00261768 -NCT00261807 -NCT00261898 -NCT00262080 -NCT00262132 -NCT00262197 -NCT00262210 -NCT00262249 -NCT00262340 -NCT00262626 -NCT00262652 -NCT00262743 -NCT00262808 -NCT00263094 -NCT00263185 -NCT00263198 -NCT00263237 -NCT00263250 -NCT00263289 -NCT00263341 -NCT00263445 -NCT00263536 -NCT00263562 -NCT00263744 -NCT00263952 -NCT00264017 -NCT00264121 -NCT00264407 -NCT00264732 -NCT00264810 -NCT00264888 -NCT00265096 -NCT00265148 -NCT00265226 -NCT00265304 -NCT00265447 -NCT00265525 -NCT00265590 -NCT00265707 -NCT00265759 -NCT00265915 -NCT00266097 -NCT00266214 -NCT00266266 -NCT00266318 -NCT00266357 -NCT00266370 -NCT00266383 -NCT00266487 -NCT00266578 -NCT00266604 -NCT00266656 -NCT00266721 -NCT00266734 -NCT00266864 -NCT00266877 -NCT00267033 -NCT00267085 -NCT00267176 -NCT00267293 -NCT00267618 -NCT00267826 -NCT00267982 -NCT00268060 -NCT00268086 -NCT00268203 -NCT00268372 -NCT00268489 -NCT00268580 -NCT00268697 -NCT00268762 -NCT00268814 -NCT00268866 -NCT00268879 -NCT00268931 -NCT00269048 -NCT00269113 -NCT00269165 -NCT00269282 -NCT00269347 -NCT00269399 -NCT00269412 -NCT00269529 -NCT00269568 -NCT00270010 -NCT00270270 -NCT00270309 -NCT00270348 -NCT00270374 -NCT00270478 -NCT00270504 -NCT00270608 -NCT00270686 -NCT00270920 -NCT00271076 -NCT00271115 -NCT00271128 -NCT00271206 -NCT00271310 -NCT00271427 -NCT00271518 -NCT00271583 -NCT00271973 -NCT00272090 -NCT00272116 -NCT00272285 -NCT00272363 -NCT00272376 -NCT00272389 -NCT00272545 -NCT00272610 -NCT00272714 -NCT00272818 -NCT00272883 -NCT00273130 -NCT00273195 -NCT00273208 -NCT00273377 -NCT00273559 -NCT00273572 -NCT00273676 -NCT00273741 -NCT00273962 -NCT00274027 -NCT00274131 -NCT00274170 -NCT00274196 -NCT00274261 -NCT00274287 -NCT00274352 -NCT00274378 -NCT00274391 -NCT00274690 -NCT00274781 -NCT00274820 -NCT00274885 -NCT00274937 -NCT00275041 -NCT00275145 -NCT00275392 -NCT00275561 -NCT00275691 -NCT00275743 -NCT00275938 -NCT00276068 -NCT00276146 -NCT00276328 -NCT00276393 -NCT00276406 -NCT00276510 -NCT00276640 -NCT00276783 -NCT00277147 -NCT00277238 -NCT00277277 -NCT00277368 -NCT00277433 -NCT00277472 -NCT00277550 -NCT00277654 -NCT00277680 -NCT00277784 -NCT00277875 -NCT00277966 -NCT00278083 -NCT00278148 -NCT00278408 -NCT00278486 -NCT00278512 -NCT00278551 -NCT00278564 -NCT00278629 -NCT00278798 -NCT00278824 -NCT00278863 -NCT00279032 -NCT00279123 -NCT00279136 -NCT00279149 -NCT00279279 -NCT00279344 -NCT00279370 -NCT00279500 -NCT00279526 -NCT00279552 -NCT00279578 -NCT00279643 -NCT00279708 -NCT00279747 -NCT00279825 -NCT00279890 -NCT00279903 -NCT00279916 -NCT00280202 -NCT00280254 -NCT00280267 -NCT00280371 -NCT00280410 -NCT00280423 -NCT00280436 -NCT00280514 -NCT00280592 -NCT00280605 -NCT00280657 -NCT00280683 -NCT00281034 -NCT00281138 -NCT00281333 -NCT00281346 -NCT00281398 -NCT00281502 -NCT00281645 -NCT00281684 -NCT00281840 -NCT00281918 -NCT00281931 -NCT00282035 -NCT00282061 -NCT00282074 -NCT00282100 -NCT00282152 -NCT00282191 -NCT00282412 -NCT00282438 -NCT00282607 -NCT00282776 -NCT00282815 -NCT00282854 -NCT00283088 -NCT00283101 -NCT00283153 -NCT00283166 -NCT00283218 -NCT00283283 -NCT00283309 -NCT00283335 -NCT00283361 -NCT00283712 -NCT00283881 -NCT00283894 -NCT00284063 -NCT00284128 -NCT00284245 -NCT00284310 -NCT00284440 -NCT00284557 -NCT00284583 -NCT00284622 -NCT00284661 -NCT00285168 -NCT00285194 -NCT00285207 -NCT00285350 -NCT00285467 -NCT00285584 -NCT00285649 -NCT00285779 -NCT00285870 -NCT00285961 -NCT00286052 -NCT00286065 -NCT00286208 -NCT00286312 -NCT00286364 -NCT00286429 -NCT00286442 -NCT00286468 -NCT00286507 -NCT00286520 -NCT00286650 -NCT00286663 -NCT00286689 -NCT00286767 -NCT00286884 -NCT00286962 -NCT00286988 -NCT00287001 -NCT00287144 -NCT00287248 -NCT00287339 -NCT00287378 -NCT00287391 -NCT00287456 -NCT00287508 -NCT00287586 -NCT00287625 -NCT00288080 -NCT00288171 -NCT00288470 -NCT00288600 -NCT00288652 -NCT00288691 -NCT00288704 -NCT00288821 -NCT00288912 -NCT00289120 -NCT00289159 -NCT00289224 -NCT00289484 -NCT00289536 -NCT00289549 -NCT00289666 -NCT00289718 -NCT00289744 -NCT00289770 -NCT00289796 -NCT00289900 -NCT00289926 -NCT00289978 -NCT00290030 -NCT00290134 -NCT00290251 -NCT00290329 -NCT00290498 -NCT00290589 -NCT00290602 -NCT00290732 -NCT00290745 -NCT00290810 -NCT00290862 -NCT00290940 -NCT00290992 -NCT00291148 -NCT00291161 -NCT00291265 -NCT00291395 -NCT00291421 -NCT00291642 -NCT00291733 -NCT00291980 -NCT00292032 -NCT00292344 -NCT00292448 -NCT00292552 -NCT00292695 -NCT00292825 -NCT00292838 -NCT00292903 -NCT00293059 -NCT00293072 -NCT00293150 -NCT00293371 -NCT00293436 -NCT00293631 -NCT00293657 -NCT00293735 -NCT00293748 -NCT00293852 -NCT00294047 -NCT00294125 -NCT00294229 -NCT00294398 -NCT00294463 -NCT00294593 -NCT00294619 -NCT00294632 -NCT00294658 -NCT00294684 -NCT00294697 -NCT00294775 -NCT00295022 -NCT00295087 -NCT00295178 -NCT00295204 -NCT00295308 -NCT00295464 -NCT00295490 -NCT00295516 -NCT00295581 -NCT00295711 -NCT00295724 -NCT00295828 -NCT00295867 -NCT00295919 -NCT00296010 -NCT00296244 -NCT00296296 -NCT00296491 -NCT00296621 -NCT00296699 -NCT00296764 -NCT00296868 -NCT00296907 -NCT00296933 -NCT00296959 -NCT00297037 -NCT00297154 -NCT00297349 -NCT00297401 -NCT00297492 -NCT00297908 -NCT00298038 -NCT00298116 -NCT00298233 -NCT00298246 -NCT00298337 -NCT00298389 -NCT00298402 -NCT00298454 -NCT00298818 -NCT00298870 -NCT00299039 -NCT00299182 -NCT00299195 -NCT00299312 -NCT00299949 -NCT00299975 -NCT00300326 -NCT00300378 -NCT00300417 -NCT00300625 -NCT00300768 -NCT00300807 -NCT00300833 -NCT00300898 -NCT00301119 -NCT00301171 -NCT00301184 -NCT00301249 -NCT00301392 -NCT00301405 -NCT00301418 -NCT00301509 -NCT00301587 -NCT00301639 -NCT00301652 -NCT00301730 -NCT00301808 -NCT00301886 -NCT00302068 -NCT00302107 -NCT00302211 -NCT00302224 -NCT00302263 -NCT00302315 -NCT00302328 -NCT00302341 -NCT00302367 -NCT00302380 -NCT00302393 -NCT00302406 -NCT00302432 -NCT00302588 -NCT00302874 -NCT00302900 -NCT00302926 -NCT00302991 -NCT00303004 -NCT00303108 -NCT00303355 -NCT00303459 -NCT00303511 -NCT00303784 -NCT00303823 -NCT00303849 -NCT00303940 -NCT00303966 -NCT00304070 -NCT00304213 -NCT00304265 -NCT00304278 -NCT00304291 -NCT00304330 -NCT00304356 -NCT00304369 -NCT00304408 -NCT00304642 -NCT00304668 -NCT00304863 -NCT00304876 -NCT00304889 -NCT00304954 -NCT00304967 -NCT00305032 -NCT00305071 -NCT00305110 -NCT00305149 -NCT00305214 -NCT00305227 -NCT00305344 -NCT00305539 -NCT00305552 -NCT00305604 -NCT00305695 -NCT00305760 -NCT00305799 -NCT00305812 -NCT00305825 -NCT00305890 -NCT00306033 -NCT00306046 -NCT00306124 -NCT00306189 -NCT00306449 -NCT00306501 -NCT00306748 -NCT00306774 -NCT00306813 -NCT00306839 -NCT00306917 -NCT00306995 -NCT00307125 -NCT00307164 -NCT00307190 -NCT00307281 -NCT00307307 -NCT00307346 -NCT00307450 -NCT00307476 -NCT00307593 -NCT00307632 -NCT00307645 -NCT00307658 -NCT00307801 -NCT00308074 -NCT00308113 -NCT00308412 -NCT00308490 -NCT00309088 -NCT00309101 -NCT00309114 -NCT00309166 -NCT00309205 -NCT00309257 -NCT00309322 -NCT00309439 -NCT00309712 -NCT00309790 -NCT00309881 -NCT00309985 -NCT00310037 -NCT00310128 -NCT00310245 -NCT00310258 -NCT00310310 -NCT00310323 -NCT00310349 -NCT00310388 -NCT00310414 -NCT00310531 -NCT00310765 -NCT00310869 -NCT00310882 -NCT00311129 -NCT00311207 -NCT00311246 -NCT00311571 -NCT00311649 -NCT00311675 -NCT00311714 -NCT00311831 -NCT00311883 -NCT00311935 -NCT00311987 -NCT00312026 -NCT00312169 -NCT00312247 -NCT00312286 -NCT00312390 -NCT00312598 -NCT00312689 -NCT00312832 -NCT00312910 -NCT00313066 -NCT00313092 -NCT00313209 -NCT00313365 -NCT00313404 -NCT00313521 -NCT00313573 -NCT00313703 -NCT00313742 -NCT00313963 -NCT00314002 -NCT00314301 -NCT00314405 -NCT00314431 -NCT00314548 -NCT00314652 -NCT00314691 -NCT00314743 -NCT00314795 -NCT00314899 -NCT00314951 -NCT00315081 -NCT00315120 -NCT00315133 -NCT00315159 -NCT00315315 -NCT00315354 -NCT00315380 -NCT00315393 -NCT00315406 -NCT00315432 -NCT00315458 -NCT00315497 -NCT00315523 -NCT00315575 -NCT00315627 -NCT00315666 -NCT00315679 -NCT00315770 -NCT00315822 -NCT00315952 -NCT00316108 -NCT00316134 -NCT00316160 -NCT00316342 -NCT00316485 -NCT00316524 -NCT00316576 -NCT00316589 -NCT00316602 -NCT00316732 -NCT00316849 -NCT00316953 -NCT00317057 -NCT00317083 -NCT00317122 -NCT00317252 -NCT00317265 -NCT00317421 -NCT00317447 -NCT00317486 -NCT00317551 -NCT00317564 -NCT00317629 -NCT00317733 -NCT00317811 -NCT00318097 -NCT00318500 -NCT00318591 -NCT00318708 -NCT00318773 -NCT00319124 -NCT00319137 -NCT00319202 -NCT00319241 -NCT00319358 -NCT00319449 -NCT00319670 -NCT00319839 -NCT00319865 -NCT00320424 -NCT00320476 -NCT00320580 -NCT00320619 -NCT00320632 -NCT00320840 -NCT00321061 -NCT00321074 -NCT00321087 -NCT00321295 -NCT00321347 -NCT00321360 -NCT00321477 -NCT00321503 -NCT00321555 -NCT00321620 -NCT00321724 -NCT00321750 -NCT00321828 -NCT00322231 -NCT00322751 -NCT00322881 -NCT00323427 -NCT00323479 -NCT00323570 -NCT00323609 -NCT00323635 -NCT00323674 -NCT00323752 -NCT00323804 -NCT00323830 -NCT00323856 -NCT00323960 -NCT00323973 -NCT00324090 -NCT00324259 -NCT00324285 -NCT00324389 -NCT00324402 -NCT00324428 -NCT00324714 -NCT00324896 -NCT00325078 -NCT00325195 -NCT00325273 -NCT00325416 -NCT00325507 -NCT00325546 -NCT00325572 -NCT00325598 -NCT00325624 -NCT00325650 -NCT00325819 -NCT00325845 -NCT00325897 -NCT00325936 -NCT00326027 -NCT00326183 -NCT00326443 -NCT00326521 -NCT00326560 -NCT00326703 -NCT00326742 -NCT00326820 -NCT00326950 -NCT00327080 -NCT00327132 -NCT00327366 -NCT00327548 -NCT00327678 -NCT00327873 -NCT00327951 -NCT00327990 -NCT00328198 -NCT00328250 -NCT00328380 -NCT00328484 -NCT00328549 -NCT00328835 -NCT00328848 -NCT00328926 -NCT00329017 -NCT00329056 -NCT00329069 -NCT00329277 -NCT00329524 -NCT00329602 -NCT00329706 -NCT00329797 -NCT00329901 -NCT00330122 -NCT00330434 -NCT00330447 -NCT00330707 -NCT00330850 -NCT00330876 -NCT00330993 -NCT00331006 -NCT00331188 -NCT00331474 -NCT00331487 -NCT00331708 -NCT00331747 -NCT00331812 -NCT00332150 -NCT00332254 -NCT00332449 -NCT00332631 -NCT00333307 -NCT00333333 -NCT00333684 -NCT00333749 -NCT00333957 -NCT00334100 -NCT00334139 -NCT00334152 -NCT00334204 -NCT00334542 -NCT00334568 -NCT00334672 -NCT00334685 -NCT00334815 -NCT00334828 -NCT00334932 -NCT00334945 -NCT00334971 -NCT00335023 -NCT00335049 -NCT00335075 -NCT00335348 -NCT00335361 -NCT00335491 -NCT00335543 -NCT00335569 -NCT00335738 -NCT00335803 -NCT00335920 -NCT00335933 -NCT00336076 -NCT00336570 -NCT00336648 -NCT00336895 -NCT00336921 -NCT00337064 -NCT00337259 -NCT00337402 -NCT00337558 -NCT00337597 -NCT00337766 -NCT00337909 -NCT00337974 -NCT00338104 -NCT00338182 -NCT00338208 -NCT00338221 -NCT00338312 -NCT00338520 -NCT00338624 -NCT00338715 -NCT00339105 -NCT00339430 -NCT00339560 -NCT00339742 -NCT00339846 -NCT00339989 -NCT00340106 -NCT00340158 -NCT00340171 -NCT00340184 -NCT00340275 -NCT00340288 -NCT00340301 -NCT00340509 -NCT00340652 -NCT00340665 -NCT00340678 -NCT00340808 -NCT00340834 -NCT00340899 -NCT00340964 -NCT00340990 -NCT00341003 -NCT00341120 -NCT00341159 -NCT00341250 -NCT00341276 -NCT00341328 -NCT00341367 -NCT00341432 -NCT00341497 -NCT00341549 -NCT00341601 -NCT00341744 -NCT00341822 -NCT00341874 -NCT00341965 -NCT00342043 -NCT00342069 -NCT00342082 -NCT00342121 -NCT00342173 -NCT00342199 -NCT00342290 -NCT00342433 -NCT00342446 -NCT00342511 -NCT00342524 -NCT00342537 -NCT00342589 -NCT00342706 -NCT00342771 -NCT00342862 -NCT00343005 -NCT00343083 -NCT00343148 -NCT00343187 -NCT00343213 -NCT00343252 -NCT00343304 -NCT00343655 -NCT00344097 -NCT00344123 -NCT00344266 -NCT00344383 -NCT00344448 -NCT00344487 -NCT00344643 -NCT00344721 -NCT00344851 -NCT00344877 -NCT00344994 -NCT00345111 -NCT00345267 -NCT00345345 -NCT00345514 -NCT00345553 -NCT00345579 -NCT00345748 -NCT00345774 -NCT00345839 -NCT00345917 -NCT00345969 -NCT00346060 -NCT00346372 -NCT00346775 -NCT00346853 -NCT00346905 -NCT00346983 -NCT00347061 -NCT00347139 -NCT00347152 -NCT00347308 -NCT00347451 -NCT00347464 -NCT00347490 -NCT00347516 -NCT00347529 -NCT00347815 -NCT00348075 -NCT00348140 -NCT00348166 -NCT00348218 -NCT00348270 -NCT00348309 -NCT00348478 -NCT00348647 -NCT00348660 -NCT00348686 -NCT00348777 -NCT00348816 -NCT00348946 -NCT00348985 -NCT00349037 -NCT00349050 -NCT00349063 -NCT00349453 -NCT00349622 -NCT00349635 -NCT00349674 -NCT00349791 -NCT00349843 -NCT00349856 -NCT00349882 -NCT00349895 -NCT00349921 -NCT00349999 -NCT00350194 -NCT00350298 -NCT00350337 -NCT00350831 -NCT00350896 -NCT00350987 -NCT00351065 -NCT00351208 -NCT00351221 -NCT00351273 -NCT00351403 -NCT00351520 -NCT00351819 -NCT00351858 -NCT00352170 -NCT00352313 -NCT00352391 -NCT00352430 -NCT00352443 -NCT00352482 -NCT00352495 -NCT00352625 -NCT00352651 -NCT00352664 -NCT00352846 -NCT00352872 -NCT00353093 -NCT00353158 -NCT00353171 -NCT00353340 -NCT00353379 -NCT00353405 -NCT00353431 -NCT00353444 -NCT00353470 -NCT00353548 -NCT00353600 -NCT00353665 -NCT00353717 -NCT00353730 -NCT00353743 -NCT00353782 -NCT00353951 -NCT00354068 -NCT00354081 -NCT00354159 -NCT00354302 -NCT00354354 -NCT00354575 -NCT00354653 -NCT00354757 -NCT00354809 -NCT00354835 -NCT00354887 -NCT00354939 -NCT00354978 -NCT00355030 -NCT00355108 -NCT00355134 -NCT00355160 -NCT00355394 -NCT00355459 -NCT00355576 -NCT00355667 -NCT00355706 -NCT00355823 -NCT00355836 -NCT00355914 -NCT00355927 -NCT00356265 -NCT00356369 -NCT00356382 -NCT00356512 -NCT00356603 -NCT00357006 -NCT00357019 -NCT00357201 -NCT00357292 -NCT00357331 -NCT00357383 -NCT00357435 -NCT00357539 -NCT00357591 -NCT00357656 -NCT00357851 -NCT00357864 -NCT00357981 -NCT00358020 -NCT00358189 -NCT00358241 -NCT00358371 -NCT00358501 -NCT00358618 -NCT00358631 -NCT00358761 -NCT00358774 -NCT00358813 -NCT00358839 -NCT00359073 -NCT00359177 -NCT00359203 -NCT00359229 -NCT00359268 -NCT00359320 -NCT00359333 -NCT00359411 -NCT00359515 -NCT00359645 -NCT00359710 -NCT00359723 -NCT00359840 -NCT00359853 -NCT00359931 -NCT00359970 -NCT00360373 -NCT00360399 -NCT00360425 -NCT00360607 -NCT00360633 -NCT00360789 -NCT00360828 -NCT00360906 -NCT00360932 -NCT00360945 -NCT00361127 -NCT00361179 -NCT00361192 -NCT00361205 -NCT00361218 -NCT00361296 -NCT00361387 -NCT00361439 -NCT00361465 -NCT00361504 -NCT00361582 -NCT00361777 -NCT00361816 -NCT00361920 -NCT00361933 -NCT00361972 -NCT00362063 -NCT00362297 -NCT00362518 -NCT00362570 -NCT00362739 -NCT00362752 -NCT00362843 -NCT00362869 -NCT00362908 -NCT00362986 -NCT00363220 -NCT00363233 -NCT00363662 -NCT00363727 -NCT00363740 -NCT00363857 -NCT00364065 -NCT00364286 -NCT00364481 -NCT00364689 -NCT00364949 -NCT00364988 -NCT00365092 -NCT00365131 -NCT00365144 -NCT00365274 -NCT00365365 -NCT00365456 -NCT00365586 -NCT00365625 -NCT00365651 -NCT00365716 -NCT00365846 -NCT00365859 -NCT00365976 -NCT00366132 -NCT00366158 -NCT00366236 -NCT00366392 -NCT00366405 -NCT00366418 -NCT00366496 -NCT00366587 -NCT00366730 -NCT00366782 -NCT00366847 -NCT00366964 -NCT00367003 -NCT00367185 -NCT00367198 -NCT00367315 -NCT00367367 -NCT00367432 -NCT00367588 -NCT00367627 -NCT00367796 -NCT00367848 -NCT00367913 -NCT00367952 -NCT00368004 -NCT00368043 -NCT00368173 -NCT00368225 -NCT00368277 -NCT00368303 -NCT00368381 -NCT00368394 -NCT00368446 -NCT00368459 -NCT00368628 -NCT00368693 -NCT00368758 -NCT00369057 -NCT00369096 -NCT00369304 -NCT00369590 -NCT00369668 -NCT00369707 -NCT00369967 -NCT00369980 -NCT00370019 -NCT00370071 -NCT00370084 -NCT00370214 -NCT00370344 -NCT00370604 -NCT00370695 -NCT00370799 -NCT00370877 -NCT00370968 -NCT00371033 -NCT00371124 -NCT00371150 -NCT00371163 -NCT00371293 -NCT00371449 -NCT00371462 -NCT00371527 -NCT00371631 -NCT00371657 -NCT00371670 -NCT00371683 -NCT00371943 -NCT00372008 -NCT00372021 -NCT00372177 -NCT00372203 -NCT00372333 -NCT00372424 -NCT00372450 -NCT00372580 -NCT00372710 -NCT00372801 -NCT00372918 -NCT00372931 -NCT00373139 -NCT00373334 -NCT00373555 -NCT00373594 -NCT00373867 -NCT00373997 -NCT00374036 -NCT00374114 -NCT00374530 -NCT00374543 -NCT00374608 -NCT00374751 -NCT00375050 -NCT00375076 -NCT00375115 -NCT00375141 -NCT00375180 -NCT00375206 -NCT00375271 -NCT00375323 -NCT00375336 -NCT00375375 -NCT00375388 -NCT00375622 -NCT00375700 -NCT00375778 -NCT00375921 -NCT00375947 -NCT00375973 -NCT00376064 -NCT00376090 -NCT00376181 -NCT00376194 -NCT00376311 -NCT00376441 -NCT00376506 -NCT00376766 -NCT00376870 -NCT00377208 -NCT00377247 -NCT00377260 -NCT00377312 -NCT00377364 -NCT00377754 -NCT00377949 -NCT00378196 -NCT00378235 -NCT00378456 -NCT00378469 -NCT00378534 -NCT00378573 -NCT00378638 -NCT00378664 -NCT00378677 -NCT00378690 -NCT00378755 -NCT00378846 -NCT00378898 -NCT00378937 -NCT00379184 -NCT00379223 -NCT00379275 -NCT00379288 -NCT00379821 -NCT00379951 -NCT00380055 -NCT00380068 -NCT00380185 -NCT00380250 -NCT00380289 -NCT00380315 -NCT00380419 -NCT00380614 -NCT00381004 -NCT00381108 -NCT00381134 -NCT00381147 -NCT00381251 -NCT00381433 -NCT00381563 -NCT00381641 -NCT00381680 -NCT00381888 -NCT00381914 -NCT00381966 -NCT00382057 -NCT00382070 -NCT00382343 -NCT00382447 -NCT00382629 -NCT00382681 -NCT00382915 -NCT00382928 -NCT00382941 -NCT00382967 -NCT00383084 -NCT00383097 -NCT00383110 -NCT00383227 -NCT00383357 -NCT00383409 -NCT00383591 -NCT00383643 -NCT00383669 -NCT00383708 -NCT00383799 -NCT00383916 -NCT00384046 -NCT00384267 -NCT00384527 -NCT00384618 -NCT00384761 -NCT00385281 -NCT00385346 -NCT00385385 -NCT00385749 -NCT00385788 -NCT00386113 -NCT00386178 -NCT00386282 -NCT00386308 -NCT00386360 -NCT00386620 -NCT00386633 -NCT00386672 -NCT00386737 -NCT00386776 -NCT00386880 -NCT00386906 -NCT00386958 -NCT00387179 -NCT00387192 -NCT00387244 -NCT00387283 -NCT00387374 -NCT00387582 -NCT00387842 -NCT00388141 -NCT00388258 -NCT00388297 -NCT00388401 -NCT00388479 -NCT00388505 -NCT00388531 -NCT00388609 -NCT00388661 -NCT00388921 -NCT00389038 -NCT00389090 -NCT00389142 -NCT00389272 -NCT00389376 -NCT00389467 -NCT00389649 -NCT00389714 -NCT00389818 -NCT00389935 -NCT00389948 -NCT00390039 -NCT00390065 -NCT00390091 -NCT00390104 -NCT00390143 -NCT00390221 -NCT00390299 -NCT00390390 -NCT00390455 -NCT00390663 -NCT00390741 -NCT00390793 -NCT00391066 -NCT00391157 -NCT00391300 -NCT00391417 -NCT00391664 -NCT00391690 -NCT00391703 -NCT00391781 -NCT00391794 -NCT00391976 -NCT00392067 -NCT00392080 -NCT00392093 -NCT00392171 -NCT00392327 -NCT00392457 -NCT00392496 -NCT00392652 -NCT00392756 -NCT00392808 -NCT00392834 -NCT00392873 -NCT00392912 -NCT00392938 -NCT00392951 -NCT00392990 -NCT00393159 -NCT00393172 -NCT00393250 -NCT00393263 -NCT00393380 -NCT00393874 -NCT00393900 -NCT00393913 -NCT00393939 -NCT00394043 -NCT00394147 -NCT00394225 -NCT00394251 -NCT00394290 -NCT00394316 -NCT00394329 -NCT00394407 -NCT00394472 -NCT00394524 -NCT00394537 -NCT00394784 -NCT00394888 -NCT00394901 -NCT00394940 -NCT00394966 -NCT00395135 -NCT00395161 -NCT00395226 -NCT00395291 -NCT00395304 -NCT00395330 -NCT00395369 -NCT00395408 -NCT00395538 -NCT00395590 -NCT00395616 -NCT00395629 -NCT00395694 -NCT00395967 -NCT00396084 -NCT00396097 -NCT00396188 -NCT00396305 -NCT00396370 -NCT00396396 -NCT00396435 -NCT00396474 -NCT00396513 -NCT00396604 -NCT00396643 -NCT00396773 -NCT00397215 -NCT00397267 -NCT00397345 -NCT00397358 -NCT00397423 -NCT00397462 -NCT00397475 -NCT00397501 -NCT00397657 -NCT00397670 -NCT00397683 -NCT00397787 -NCT00397813 -NCT00397839 -NCT00398034 -NCT00398112 -NCT00398151 -NCT00398333 -NCT00398489 -NCT00398541 -NCT00398580 -NCT00398775 -NCT00398866 -NCT00399048 -NCT00399165 -NCT00399269 -NCT00399373 -NCT00399399 -NCT00399516 -NCT00399529 -NCT00399542 -NCT00399646 -NCT00400140 -NCT00400465 -NCT00400530 -NCT00400816 -NCT00400998 -NCT00401011 -NCT00401193 -NCT00401219 -NCT00401245 -NCT00401271 -NCT00401297 -NCT00401518 -NCT00401934 -NCT00401999 -NCT00402077 -NCT00402545 -NCT00402623 -NCT00402688 -NCT00402727 -NCT00402896 -NCT00402974 -NCT00403039 -NCT00403104 -NCT00403273 -NCT00403338 -NCT00403390 -NCT00403507 -NCT00403520 -NCT00403572 -NCT00403598 -NCT00403819 -NCT00403884 -NCT00403897 -NCT00403949 -NCT00403975 -NCT00404079 -NCT00404118 -NCT00404222 -NCT00404586 -NCT00404625 -NCT00404664 -NCT00404859 -NCT00404937 -NCT00405119 -NCT00405145 -NCT00405236 -NCT00405340 -NCT00405509 -NCT00405613 -NCT00405639 -NCT00405756 -NCT00405782 -NCT00405847 -NCT00405860 -NCT00406198 -NCT00406770 -NCT00406874 -NCT00406926 -NCT00406978 -NCT00407329 -NCT00407355 -NCT00407381 -NCT00407446 -NCT00407472 -NCT00407537 -NCT00407576 -NCT00407602 -NCT00407680 -NCT00407706 -NCT00407797 -NCT00407888 -NCT00408005 -NCT00408031 -NCT00408057 -NCT00408109 -NCT00408148 -NCT00408226 -NCT00408447 -NCT00408473 -NCT00408954 -NCT00409032 -NCT00409149 -NCT00409214 -NCT00409331 -NCT00409357 -NCT00409383 -NCT00409435 -NCT00409500 -NCT00409630 -NCT00409721 -NCT00409747 -NCT00409864 -NCT00409968 -NCT00410059 -NCT00410189 -NCT00410228 -NCT00410293 -NCT00410306 -NCT00410540 -NCT00410579 -NCT00410592 -NCT00410605 -NCT00410618 -NCT00410761 -NCT00410774 -NCT00410852 -NCT00410995 -NCT00411034 -NCT00411112 -NCT00411216 -NCT00411255 -NCT00411281 -NCT00411307 -NCT00411346 -NCT00411372 -NCT00411567 -NCT00411619 -NCT00411632 -NCT00411671 -NCT00411684 -NCT00411801 -NCT00412100 -NCT00412152 -NCT00412386 -NCT00412412 -NCT00412542 -NCT00412607 -NCT00412815 -NCT00412867 -NCT00412880 -NCT00412906 -NCT00412971 -NCT00413088 -NCT00413244 -NCT00413309 -NCT00413348 -NCT00413387 -NCT00413465 -NCT00413595 -NCT00413621 -NCT00413751 -NCT00413855 -NCT00413920 -NCT00413959 -NCT00413998 -NCT00414024 -NCT00414128 -NCT00414271 -NCT00414336 -NCT00414375 -NCT00414531 -NCT00414557 -NCT00414583 -NCT00414830 -NCT00414843 -NCT00414960 -NCT00414973 -NCT00415077 -NCT00415233 -NCT00415350 -NCT00415376 -NCT00415545 -NCT00415584 -NCT00415610 -NCT00415714 -NCT00415909 -NCT00416143 -NCT00416234 -NCT00416325 -NCT00416364 -NCT00416442 -NCT00416468 -NCT00416585 -NCT00416702 -NCT00416728 -NCT00416897 -NCT00416949 -NCT00416962 -NCT00417313 -NCT00417352 -NCT00417404 -NCT00417456 -NCT00417547 -NCT00417573 -NCT00417612 -NCT00417768 -NCT00417781 -NCT00417872 -NCT00417898 -NCT00417911 -NCT00417937 -NCT00417963 -NCT00418002 -NCT00418028 -NCT00418054 -NCT00418275 -NCT00418301 -NCT00418340 -NCT00418470 -NCT00418639 -NCT00418678 -NCT00418782 -NCT00418925 -NCT00419094 -NCT00419133 -NCT00419172 -NCT00419185 -NCT00419263 -NCT00419276 -NCT00419549 -NCT00419562 -NCT00419627 -NCT00419692 -NCT00419731 -NCT00419796 -NCT00419874 -NCT00420147 -NCT00420199 -NCT00420251 -NCT00420394 -NCT00420459 -NCT00420641 -NCT00420654 -NCT00420810 -NCT00420875 -NCT00420992 -NCT00421096 -NCT00421239 -NCT00421369 -NCT00421421 -NCT00421434 -NCT00421460 -NCT00421967 -NCT00422188 -NCT00422201 -NCT00422487 -NCT00422630 -NCT00422643 -NCT00422695 -NCT00422708 -NCT00422760 -NCT00422812 -NCT00422851 -NCT00422994 -NCT00423072 -NCT00423085 -NCT00423215 -NCT00423267 -NCT00423319 -NCT00423579 -NCT00423839 -NCT00423878 -NCT00423917 -NCT00424008 -NCT00424099 -NCT00424346 -NCT00424398 -NCT00424489 -NCT00424580 -NCT00424606 -NCT00424619 -NCT00424658 -NCT00424671 -NCT00424736 -NCT00424827 -NCT00424905 -NCT00424996 -NCT00425061 -NCT00425113 -NCT00425165 -NCT00425321 -NCT00425347 -NCT00425607 -NCT00426127 -NCT00426244 -NCT00426283 -NCT00426374 -NCT00426413 -NCT00426465 -NCT00426478 -NCT00426491 -NCT00426517 -NCT00426595 -NCT00426621 -NCT00426647 -NCT00426686 -NCT00426725 -NCT00426777 -NCT00426842 -NCT00426933 -NCT00426959 -NCT00426985 -NCT00427024 -NCT00427219 -NCT00427323 -NCT00427427 -NCT00427700 -NCT00427726 -NCT00427830 -NCT00427947 -NCT00428012 -NCT00428025 -NCT00428038 -NCT00428090 -NCT00428103 -NCT00428142 -NCT00428168 -NCT00428220 -NCT00428753 -NCT00428831 -NCT00428935 -NCT00428987 -NCT00429117 -NCT00429156 -NCT00429182 -NCT00429260 -NCT00429325 -NCT00429364 -NCT00429533 -NCT00429689 -NCT00429754 -NCT00429832 -NCT00430014 -NCT00430105 -NCT00430287 -NCT00430495 -NCT00430521 -NCT00430599 -NCT00430664 -NCT00430755 -NCT00430794 -NCT00430807 -NCT00430859 -NCT00430872 -NCT00430911 -NCT00430937 -NCT00431080 -NCT00431197 -NCT00431366 -NCT00431457 -NCT00431496 -NCT00431561 -NCT00431600 -NCT00431626 -NCT00431717 -NCT00431756 -NCT00431925 -NCT00432068 -NCT00432146 -NCT00432276 -NCT00432393 -NCT00432458 -NCT00432484 -NCT00433056 -NCT00433108 -NCT00433160 -NCT00433173 -NCT00433199 -NCT00433329 -NCT00433368 -NCT00433628 -NCT00433654 -NCT00433680 -NCT00433732 -NCT00433862 -NCT00433901 -NCT00434096 -NCT00434122 -NCT00434473 -NCT00434551 -NCT00434564 -NCT00434824 -NCT00434876 -NCT00435123 -NCT00435214 -NCT00435526 -NCT00435552 -NCT00435591 -NCT00435604 -NCT00435708 -NCT00435773 -NCT00435942 -NCT00436137 -NCT00436488 -NCT00436527 -NCT00436579 -NCT00436618 -NCT00436683 -NCT00436787 -NCT00437021 -NCT00437060 -NCT00437086 -NCT00437346 -NCT00437658 -NCT00437684 -NCT00437762 -NCT00437827 -NCT00437840 -NCT00437983 -NCT00438048 -NCT00438061 -NCT00438178 -NCT00438191 -NCT00438243 -NCT00438308 -NCT00438321 -NCT00438334 -NCT00438451 -NCT00438464 -NCT00438568 -NCT00438633 -NCT00438672 -NCT00438763 -NCT00438841 -NCT00439127 -NCT00439231 -NCT00439244 -NCT00439270 -NCT00439387 -NCT00439543 -NCT00439621 -NCT00439647 -NCT00439660 -NCT00439699 -NCT00439803 -NCT00439816 -NCT00440180 -NCT00440362 -NCT00440440 -NCT00440583 -NCT00440635 -NCT00440661 -NCT00440986 -NCT00441090 -NCT00441103 -NCT00441168 -NCT00441194 -NCT00441415 -NCT00441480 -NCT00441701 -NCT00442000 -NCT00442013 -NCT00442078 -NCT00442117 -NCT00442130 -NCT00442182 -NCT00442195 -NCT00442351 -NCT00442364 -NCT00442390 -NCT00442468 -NCT00442481 -NCT00442767 -NCT00442936 -NCT00443144 -NCT00443170 -NCT00443222 -NCT00443287 -NCT00443313 -NCT00443482 -NCT00443768 -NCT00443781 -NCT00443820 -NCT00443872 -NCT00443898 -NCT00443963 -NCT00444041 -NCT00444119 -NCT00444210 -NCT00444236 -NCT00444275 -NCT00444288 -NCT00444353 -NCT00444392 -NCT00444405 -NCT00444561 -NCT00444639 -NCT00444691 -NCT00444769 -NCT00444873 -NCT00444899 -NCT00444912 -NCT00445003 -NCT00445055 -NCT00445224 -NCT00445393 -NCT00445432 -NCT00445575 -NCT00445627 -NCT00445900 -NCT00445913 -NCT00445965 -NCT00446082 -NCT00446134 -NCT00446316 -NCT00446329 -NCT00446355 -NCT00446433 -NCT00446563 -NCT00446823 -NCT00446940 -NCT00446979 -NCT00447018 -NCT00447304 -NCT00447356 -NCT00447395 -NCT00447499 -NCT00447681 -NCT00447915 -NCT00447928 -NCT00447980 -NCT00447993 -NCT00448019 -NCT00448071 -NCT00448292 -NCT00448422 -NCT00448474 -NCT00448682 -NCT00448851 -NCT00448955 -NCT00448981 -NCT00449072 -NCT00449124 -NCT00449462 -NCT00449514 -NCT00449540 -NCT00449670 -NCT00449748 -NCT00449787 -NCT00449865 -NCT00450164 -NCT00450203 -NCT00450281 -NCT00450294 -NCT00450437 -NCT00450463 -NCT00450541 -NCT00450619 -NCT00450697 -NCT00450853 -NCT00450996 -NCT00451061 -NCT00451074 -NCT00451204 -NCT00451321 -NCT00451373 -NCT00451490 -NCT00451503 -NCT00451529 -NCT00451568 -NCT00451620 -NCT00451789 -NCT00451841 -NCT00451893 -NCT00451919 -NCT00452036 -NCT00452062 -NCT00452101 -NCT00452140 -NCT00452322 -NCT00452335 -NCT00452348 -NCT00452374 -NCT00452530 -NCT00452543 -NCT00452582 -NCT00452699 -NCT00452712 -NCT00452725 -NCT00452855 -NCT00452894 -NCT00453102 -NCT00453128 -NCT00453245 -NCT00453453 -NCT00453635 -NCT00453765 -NCT00453791 -NCT00453830 -NCT00453843 -NCT00453908 -NCT00454051 -NCT00454142 -NCT00454194 -NCT00454207 -NCT00454220 -NCT00454259 -NCT00454285 -NCT00454441 -NCT00454571 -NCT00454623 -NCT00455078 -NCT00455091 -NCT00455156 -NCT00455234 -NCT00455247 -NCT00455286 -NCT00455312 -NCT00455325 -NCT00455403 -NCT00455429 -NCT00455455 -NCT00455507 -NCT00455598 -NCT00455728 -NCT00456118 -NCT00456157 -NCT00456222 -NCT00456300 -NCT00456313 -NCT00456378 -NCT00456404 -NCT00456508 -NCT00456664 -NCT00456846 -NCT00456885 -NCT00456924 -NCT00456963 -NCT00457002 -NCT00457015 -NCT00457067 -NCT00457132 -NCT00457145 -NCT00457184 -NCT00457236 -NCT00457275 -NCT00457288 -NCT00457340 -NCT00457366 -NCT00457509 -NCT00457613 -NCT00457717 -NCT00457951 -NCT00458263 -NCT00458276 -NCT00458406 -NCT00458419 -NCT00458458 -NCT00458471 -NCT00458562 -NCT00458575 -NCT00458627 -NCT00458705 -NCT00458731 -NCT00458770 -NCT00458796 -NCT00458822 -NCT00458926 -NCT00458991 -NCT00459056 -NCT00459329 -NCT00459368 -NCT00459433 -NCT00459459 -NCT00459498 -NCT00459537 -NCT00459914 -NCT00459979 -NCT00459992 -NCT00460174 -NCT00460408 -NCT00460538 -NCT00460928 -NCT00461149 -NCT00461162 -NCT00461188 -NCT00461240 -NCT00461370 -NCT00461396 -NCT00461448 -NCT00461526 -NCT00461578 -NCT00461591 -NCT00461669 -NCT00461747 -NCT00461760 -NCT00461864 -NCT00461916 -NCT00461968 -NCT00461994 -NCT00462020 -NCT00462046 -NCT00462098 -NCT00462137 -NCT00462241 -NCT00462267 -NCT00462397 -NCT00462449 -NCT00462475 -NCT00462605 -NCT00462644 -NCT00462670 -NCT00462683 -NCT00462735 -NCT00462813 -NCT00462865 -NCT00462891 -NCT00463112 -NCT00463125 -NCT00463242 -NCT00463294 -NCT00463450 -NCT00463580 -NCT00463762 -NCT00463814 -NCT00463853 -NCT00463879 -NCT00464074 -NCT00464295 -NCT00464308 -NCT00464555 -NCT00464581 -NCT00464594 -NCT00464711 -NCT00464919 -NCT00464984 -NCT00465101 -NCT00465361 -NCT00465387 -NCT00465426 -NCT00465452 -NCT00465517 -NCT00465699 -NCT00465790 -NCT00465907 -NCT00465933 -NCT00465972 -NCT00466167 -NCT00466193 -NCT00466271 -NCT00466336 -NCT00466349 -NCT00466375 -NCT00466518 -NCT00466635 -NCT00466713 -NCT00466739 -NCT00466817 -NCT00466869 -NCT00467246 -NCT00467350 -NCT00467363 -NCT00467376 -NCT00467597 -NCT00467636 -NCT00467675 -NCT00467701 -NCT00467792 -NCT00467818 -NCT00467831 -NCT00467844 -NCT00467870 -NCT00467896 -NCT00467922 -NCT00468013 -NCT00468026 -NCT00468052 -NCT00468065 -NCT00468078 -NCT00468208 -NCT00468299 -NCT00468325 -NCT00468338 -NCT00468403 -NCT00468624 -NCT00468832 -NCT00468858 -NCT00469079 -NCT00469118 -NCT00469196 -NCT00469456 -NCT00470119 -NCT00470171 -NCT00470197 -NCT00470353 -NCT00470392 -NCT00470652 -NCT00470782 -NCT00470977 -NCT00470990 -NCT00471237 -NCT00471250 -NCT00471315 -NCT00471523 -NCT00471536 -NCT00471627 -NCT00471692 -NCT00471731 -NCT00471796 -NCT00471809 -NCT00471835 -NCT00471861 -NCT00471900 -NCT00471952 -NCT00472030 -NCT00472069 -NCT00472186 -NCT00472303 -NCT00472355 -NCT00472485 -NCT00472550 -NCT00472628 -NCT00472680 -NCT00472823 -NCT00472849 -NCT00472901 -NCT00473083 -NCT00473161 -NCT00473291 -NCT00473356 -NCT00473369 -NCT00473408 -NCT00473460 -NCT00473655 -NCT00474162 -NCT00474175 -NCT00474396 -NCT00474409 -NCT00474474 -NCT00474721 -NCT00474773 -NCT00474838 -NCT00474942 -NCT00475046 -NCT00475176 -NCT00475306 -NCT00475436 -NCT00475462 -NCT00475501 -NCT00475514 -NCT00475592 -NCT00475683 -NCT00475761 -NCT00475943 -NCT00475982 -NCT00476138 -NCT00476203 -NCT00476255 -NCT00476333 -NCT00476398 -NCT00476450 -NCT00476489 -NCT00476736 -NCT00476775 -NCT00476814 -NCT00477256 -NCT00477399 -NCT00477477 -NCT00477516 -NCT00477620 -NCT00477724 -NCT00477750 -NCT00477789 -NCT00477841 -NCT00477971 -NCT00478296 -NCT00478491 -NCT00478504 -NCT00478712 -NCT00479011 -NCT00479037 -NCT00479063 -NCT00479154 -NCT00479193 -NCT00479336 -NCT00479479 -NCT00479518 -NCT00479531 -NCT00479739 -NCT00479830 -NCT00480038 -NCT00480272 -NCT00480311 -NCT00480519 -NCT00480545 -NCT00480662 -NCT00480870 -NCT00481208 -NCT00481260 -NCT00481403 -NCT00481416 -NCT00481429 -NCT00481598 -NCT00481676 -NCT00481689 -NCT00481754 -NCT00481780 -NCT00481845 -NCT00481949 -NCT00482053 -NCT00482066 -NCT00482105 -NCT00482209 -NCT00482248 -NCT00482378 -NCT00482612 -NCT00482677 -NCT00482885 -NCT00483067 -NCT00483119 -NCT00483145 -NCT00483184 -NCT00483236 -NCT00483288 -NCT00483379 -NCT00483418 -NCT00483457 -NCT00483600 -NCT00483704 -NCT00483834 -NCT00483886 -NCT00483912 -NCT00483925 -NCT00484042 -NCT00484068 -NCT00484081 -NCT00484263 -NCT00484458 -NCT00484484 -NCT00484679 -NCT00484705 -NCT00484718 -NCT00484783 -NCT00484848 -NCT00485069 -NCT00485277 -NCT00485290 -NCT00485303 -NCT00485316 -NCT00485368 -NCT00485446 -NCT00485576 -NCT00485836 -NCT00485940 -NCT00486109 -NCT00486148 -NCT00486239 -NCT00486278 -NCT00486486 -NCT00486642 -NCT00486759 -NCT00486876 -NCT00486941 -NCT00486980 -NCT00487162 -NCT00487201 -NCT00487279 -NCT00487370 -NCT00487396 -NCT00487422 -NCT00487578 -NCT00487643 -NCT00487695 -NCT00487760 -NCT00487825 -NCT00487838 -NCT00487916 -NCT00488007 -NCT00488033 -NCT00488124 -NCT00488137 -NCT00488267 -NCT00488306 -NCT00488332 -NCT00488410 -NCT00488514 -NCT00488527 -NCT00488540 -NCT00488644 -NCT00488826 -NCT00489281 -NCT00489307 -NCT00489333 -NCT00489346 -NCT00489385 -NCT00489437 -NCT00489463 -NCT00489476 -NCT00489502 -NCT00489918 -NCT00490022 -NCT00490100 -NCT00490165 -NCT00490243 -NCT00490386 -NCT00490555 -NCT00490750 -NCT00490906 -NCT00490932 -NCT00491218 -NCT00491283 -NCT00491335 -NCT00491400 -NCT00491478 -NCT00491582 -NCT00491881 -NCT00492011 -NCT00492154 -NCT00492219 -NCT00492388 -NCT00492531 -NCT00492622 -NCT00492726 -NCT00492973 -NCT00493103 -NCT00493116 -NCT00493129 -NCT00493389 -NCT00493571 -NCT00493870 -NCT00493935 -NCT00493948 -NCT00493961 -NCT00493974 -NCT00493987 -NCT00494065 -NCT00494169 -NCT00494208 -NCT00494260 -NCT00494364 -NCT00494507 -NCT00494585 -NCT00494624 -NCT00494689 -NCT00495157 -NCT00495235 -NCT00495365 -NCT00495586 -NCT00495638 -NCT00495690 -NCT00495781 -NCT00495846 -NCT00496106 -NCT00496834 -NCT00497094 -NCT00497146 -NCT00497263 -NCT00497276 -NCT00497484 -NCT00497523 -NCT00497549 -NCT00497575 -NCT00497653 -NCT00497666 -NCT00497705 -NCT00497835 -NCT00497861 -NCT00497913 -NCT00497939 -NCT00498082 -NCT00498095 -NCT00498147 -NCT00498238 -NCT00498394 -NCT00498433 -NCT00498446 -NCT00498485 -NCT00498511 -NCT00498537 -NCT00498667 -NCT00498719 -NCT00498875 -NCT00498901 -NCT00498992 -NCT00499005 -NCT00499070 -NCT00499122 -NCT00499174 -NCT00499330 -NCT00499837 -NCT00499967 -NCT00499993 -NCT00500175 -NCT00500331 -NCT00500344 -NCT00500435 -NCT00500474 -NCT00500526 -NCT00500552 -NCT00500617 -NCT00500734 -NCT00500747 -NCT00500799 -NCT00500994 -NCT00501059 -NCT00501215 -NCT00501358 -NCT00501371 -NCT00501462 -NCT00501748 -NCT00501826 -NCT00501943 -NCT00502047 -NCT00502073 -NCT00502177 -NCT00502320 -NCT00502450 -NCT00502554 -NCT00502593 -NCT00502632 -NCT00502658 -NCT00502684 -NCT00502697 -NCT00502840 -NCT00502957 -NCT00502970 -NCT00502983 -NCT00503100 -NCT00503152 -NCT00503165 -NCT00503256 -NCT00503347 -NCT00503399 -NCT00503750 -NCT00503854 -NCT00503919 -NCT00504010 -NCT00504101 -NCT00504387 -NCT00504556 -NCT00504634 -NCT00504660 -NCT00504738 -NCT00504764 -NCT00505011 -NCT00505297 -NCT00505414 -NCT00505609 -NCT00505648 -NCT00505752 -NCT00505791 -NCT00505804 -NCT00505882 -NCT00506103 -NCT00506116 -NCT00506194 -NCT00506324 -NCT00506376 -NCT00506532 -NCT00506597 -NCT00506636 -NCT00506831 -NCT00506870 -NCT00506883 -NCT00506922 -NCT00506961 -NCT00507117 -NCT00507195 -NCT00507338 -NCT00507377 -NCT00507416 -NCT00507455 -NCT00507611 -NCT00507728 -NCT00507780 -NCT00507806 -NCT00507832 -NCT00507858 -NCT00507871 -NCT00507962 -NCT00508027 -NCT00508066 -NCT00508209 -NCT00508287 -NCT00508326 -NCT00508677 -NCT00508924 -NCT00508989 -NCT00509041 -NCT00509080 -NCT00509145 -NCT00509197 -NCT00509275 -NCT00509483 -NCT00509535 -NCT00509652 -NCT00509678 -NCT00509782 -NCT00510042 -NCT00510172 -NCT00510406 -NCT00510536 -NCT00510549 -NCT00510575 -NCT00510757 -NCT00510783 -NCT00511316 -NCT00511654 -NCT00511693 -NCT00511771 -NCT00511797 -NCT00512070 -NCT00512096 -NCT00512304 -NCT00512343 -NCT00512499 -NCT00512564 -NCT00512694 -NCT00512707 -NCT00512746 -NCT00512837 -NCT00512850 -NCT00512941 -NCT00512954 -NCT00513071 -NCT00513123 -NCT00513370 -NCT00513396 -NCT00513422 -NCT00513461 -NCT00513617 -NCT00513656 -NCT00513903 -NCT00513929 -NCT00514020 -NCT00514150 -NCT00514462 -NCT00514540 -NCT00514592 -NCT00514787 -NCT00514865 -NCT00514982 -NCT00515008 -NCT00515021 -NCT00515034 -NCT00515450 -NCT00515476 -NCT00515619 -NCT00515632 -NCT00515710 -NCT00515775 -NCT00515866 -NCT00516035 -NCT00516048 -NCT00516074 -NCT00516191 -NCT00516399 -NCT00516581 -NCT00517023 -NCT00517062 -NCT00517231 -NCT00517257 -NCT00517361 -NCT00517491 -NCT00517751 -NCT00517842 -NCT00517881 -NCT00517933 -NCT00517946 -NCT00517959 -NCT00518050 -NCT00518154 -NCT00518310 -NCT00518414 -NCT00518427 -NCT00518466 -NCT00518479 -NCT00518531 -NCT00518570 -NCT00518609 -NCT00518635 -NCT00518817 -NCT00518895 -NCT00519051 -NCT00519077 -NCT00519155 -NCT00519298 -NCT00519311 -NCT00519597 -NCT00519857 -NCT00519935 -NCT00520104 -NCT00520156 -NCT00520182 -NCT00520481 -NCT00520520 -NCT00520611 -NCT00520689 -NCT00520741 -NCT00520884 -NCT00520988 -NCT00521118 -NCT00521222 -NCT00521300 -NCT00521638 -NCT00521729 -NCT00521846 -NCT00522002 -NCT00522093 -NCT00522158 -NCT00522288 -NCT00522353 -NCT00522392 -NCT00522431 -NCT00522665 -NCT00522743 -NCT00522847 -NCT00522860 -NCT00523068 -NCT00523107 -NCT00523549 -NCT00523588 -NCT00523666 -NCT00523718 -NCT00523796 -NCT00523835 -NCT00523848 -NCT00523874 -NCT00523926 -NCT00523939 -NCT00524056 -NCT00524134 -NCT00524147 -NCT00524225 -NCT00524238 -NCT00524251 -NCT00524342 -NCT00524381 -NCT00524719 -NCT00524862 -NCT00524888 -NCT00524914 -NCT00524992 -NCT00525044 -NCT00525265 -NCT00525551 -NCT00525668 -NCT00525785 -NCT00525967 -NCT00526032 -NCT00526097 -NCT00526110 -NCT00526214 -NCT00526357 -NCT00526370 -NCT00526604 -NCT00526630 -NCT00526812 -NCT00526864 -NCT00526903 -NCT00527228 -NCT00527293 -NCT00527306 -NCT00527371 -NCT00527397 -NCT00527488 -NCT00527514 -NCT00527527 -NCT00527540 -NCT00527605 -NCT00527709 -NCT00527878 -NCT00528008 -NCT00528112 -NCT00528138 -NCT00528216 -NCT00528307 -NCT00528476 -NCT00528528 -NCT00528541 -NCT00528762 -NCT00528801 -NCT00528853 -NCT00528866 -NCT00529061 -NCT00529464 -NCT00529529 -NCT00529737 -NCT00529854 -NCT00529997 -NCT00530049 -NCT00530075 -NCT00530179 -NCT00530894 -NCT00530907 -NCT00530946 -NCT00530972 -NCT00530998 -NCT00531024 -NCT00531089 -NCT00531141 -NCT00531219 -NCT00531310 -NCT00531453 -NCT00531505 -NCT00531713 -NCT00531765 -NCT00531791 -NCT00531804 -NCT00531895 -NCT00532077 -NCT00532116 -NCT00532207 -NCT00532259 -NCT00532272 -NCT00532285 -NCT00532337 -NCT00532545 -NCT00532740 -NCT00532779 -NCT00532883 -NCT00533000 -NCT00533234 -NCT00533364 -NCT00533390 -NCT00533455 -NCT00533611 -NCT00533637 -NCT00533650 -NCT00533676 -NCT00533702 -NCT00533871 -NCT00533910 -NCT00533975 -NCT00534066 -NCT00534157 -NCT00534443 -NCT00534508 -NCT00534534 -NCT00534638 -NCT00534677 -NCT00534703 -NCT00534859 -NCT00534937 -NCT00535054 -NCT00535158 -NCT00535561 -NCT00535600 -NCT00535717 -NCT00535899 -NCT00536016 -NCT00536081 -NCT00536146 -NCT00536237 -NCT00536328 -NCT00536367 -NCT00536471 -NCT00536601 -NCT00536718 -NCT00536796 -NCT00536965 -NCT00537095 -NCT00537108 -NCT00537173 -NCT00537316 -NCT00537420 -NCT00537524 -NCT00537589 -NCT00537628 -NCT00537654 -NCT00537849 -NCT00537901 -NCT00537940 -NCT00537953 -NCT00538018 -NCT00538694 -NCT00538733 -NCT00538759 -NCT00538811 -NCT00538824 -NCT00538876 -NCT00539149 -NCT00539240 -NCT00539409 -NCT00539448 -NCT00539643 -NCT00539656 -NCT00540033 -NCT00540072 -NCT00540189 -NCT00540410 -NCT00540475 -NCT00540527 -NCT00540891 -NCT00541086 -NCT00541164 -NCT00541177 -NCT00541216 -NCT00541255 -NCT00541554 -NCT00541658 -NCT00541671 -NCT00541723 -NCT00541736 -NCT00541931 -NCT00541957 -NCT00542022 -NCT00542035 -NCT00542100 -NCT00542152 -NCT00542178 -NCT00542191 -NCT00542230 -NCT00542256 -NCT00542412 -NCT00542425 -NCT00542451 -NCT00542503 -NCT00542646 -NCT00542763 -NCT00542867 -NCT00542984 -NCT00543023 -NCT00543218 -NCT00543257 -NCT00543829 -NCT00543959 -NCT00543998 -NCT00544089 -NCT00544219 -NCT00544232 -NCT00544245 -NCT00544544 -NCT00544869 -NCT00545025 -NCT00545064 -NCT00545311 -NCT00545454 -NCT00545597 -NCT00546026 -NCT00546117 -NCT00546234 -NCT00546286 -NCT00546377 -NCT00546468 -NCT00546494 -NCT00546507 -NCT00546520 -NCT00546585 -NCT00546715 -NCT00546728 -NCT00546754 -NCT00546832 -NCT00546949 -NCT00547001 -NCT00547053 -NCT00547131 -NCT00547391 -NCT00547456 -NCT00547469 -NCT00547625 -NCT00547638 -NCT00547768 -NCT00548041 -NCT00548054 -NCT00548301 -NCT00548483 -NCT00548522 -NCT00548821 -NCT00548977 -NCT00549172 -NCT00549445 -NCT00549549 -NCT00549679 -NCT00549926 -NCT00550173 -NCT00550368 -NCT00550459 -NCT00550511 -NCT00550784 -NCT00550862 -NCT00551161 -NCT00551187 -NCT00551304 -NCT00551369 -NCT00551499 -NCT00551941 -NCT00552045 -NCT00552071 -NCT00552084 -NCT00552097 -NCT00552162 -NCT00552253 -NCT00552487 -NCT00552981 -NCT00553410 -NCT00553423 -NCT00553449 -NCT00553462 -NCT00553514 -NCT00553605 -NCT00553917 -NCT00554008 -NCT00554281 -NCT00554476 -NCT00554645 -NCT00554788 -NCT00554814 -NCT00554996 -NCT00555087 -NCT00555139 -NCT00555321 -NCT00555347 -NCT00555529 -NCT00555555 -NCT00555607 -NCT00555620 -NCT00555672 -NCT00555880 -NCT00555919 -NCT00555971 -NCT00555997 -NCT00556114 -NCT00556335 -NCT00556400 -NCT00556439 -NCT00556647 -NCT00556686 -NCT00556777 -NCT00556842 -NCT00556907 -NCT00556933 -NCT00557115 -NCT00557141 -NCT00557219 -NCT00557310 -NCT00557336 -NCT00557427 -NCT00557492 -NCT00557544 -NCT00557817 -NCT00557908 -NCT00558012 -NCT00558038 -NCT00558129 -NCT00558220 -NCT00558480 -NCT00558558 -NCT00558636 -NCT00558896 -NCT00559299 -NCT00559312 -NCT00559390 -NCT00559416 -NCT00559949 -NCT00560053 -NCT00560352 -NCT00560521 -NCT00560586 -NCT00560625 -NCT00560833 -NCT00560859 -NCT00560989 -NCT00561106 -NCT00561262 -NCT00561431 -NCT00561574 -NCT00561652 -NCT00561808 -NCT00561821 -NCT00561834 -NCT00562276 -NCT00562354 -NCT00562705 -NCT00562731 -NCT00562796 -NCT00563264 -NCT00563290 -NCT00563329 -NCT00563394 -NCT00563433 -NCT00563615 -NCT00563758 -NCT00564005 -NCT00564018 -NCT00564096 -NCT00564135 -NCT00564252 -NCT00564395 -NCT00564460 -NCT00564512 -NCT00564525 -NCT00564629 -NCT00564759 -NCT00564850 -NCT00564889 -NCT00565214 -NCT00565266 -NCT00565513 -NCT00565526 -NCT00565539 -NCT00565552 -NCT00565604 -NCT00565669 -NCT00565760 -NCT00565864 -NCT00565955 -NCT00566020 -NCT00566033 -NCT00566046 -NCT00566098 -NCT00566137 -NCT00566215 -NCT00566267 -NCT00566280 -NCT00566358 -NCT00566384 -NCT00566579 -NCT00566657 -NCT00567151 -NCT00567333 -NCT00567476 -NCT00567606 -NCT00567645 -NCT00568035 -NCT00568126 -NCT00568243 -NCT00568269 -NCT00568295 -NCT00568321 -NCT00568347 -NCT00568386 -NCT00568789 -NCT00568802 -NCT00569023 -NCT00569049 -NCT00569062 -NCT00569192 -NCT00569244 -NCT00569504 -NCT00569582 -NCT00569751 -NCT00569972 -NCT00569998 -NCT00570154 -NCT00570180 -NCT00570544 -NCT00570661 -NCT00570739 -NCT00570804 -NCT00571025 -NCT00571051 -NCT00571090 -NCT00571246 -NCT00571337 -NCT00571415 -NCT00571792 -NCT00571818 -NCT00571844 -NCT00571948 -NCT00571987 -NCT00572000 -NCT00572065 -NCT00572156 -NCT00572299 -NCT00572481 -NCT00572858 -NCT00572936 -NCT00573573 -NCT00573586 -NCT00573599 -NCT00573755 -NCT00573807 -NCT00573924 -NCT00573937 -NCT00573989 -NCT00574041 -NCT00574184 -NCT00574301 -NCT00574392 -NCT00574535 -NCT00574717 -NCT00574795 -NCT00574808 -NCT00575159 -NCT00575276 -NCT00575341 -NCT00575367 -NCT00575588 -NCT00575822 -NCT00575887 -NCT00575913 -NCT00575939 -NCT00576069 -NCT00576082 -NCT00576407 -NCT00576485 -NCT00576498 -NCT00576693 -NCT00576810 -NCT00576927 -NCT00576992 -NCT00577018 -NCT00577226 -NCT00577330 -NCT00577343 -NCT00577369 -NCT00577499 -NCT00577590 -NCT00577668 -NCT00577772 -NCT00577798 -NCT00577876 -NCT00578071 -NCT00578240 -NCT00578344 -NCT00578461 -NCT00578474 -NCT00578578 -NCT00578669 -NCT00578773 -NCT00578877 -NCT00578942 -NCT00579189 -NCT00579371 -NCT00579410 -NCT00579488 -NCT00579527 -NCT00579540 -NCT00579709 -NCT00579787 -NCT00579865 -NCT00580138 -NCT00580177 -NCT00580281 -NCT00580307 -NCT00580333 -NCT00580346 -NCT00580372 -NCT00580502 -NCT00580723 -NCT00580749 -NCT00580892 -NCT00581061 -NCT00581087 -NCT00581126 -NCT00581230 -NCT00581308 -NCT00581321 -NCT00581490 -NCT00581529 -NCT00581568 -NCT00581737 -NCT00581867 -NCT00581906 -NCT00582049 -NCT00582309 -NCT00582569 -NCT00582647 -NCT00582660 -NCT00582868 -NCT00582920 -NCT00582946 -NCT00583024 -NCT00583180 -NCT00583284 -NCT00583453 -NCT00583518 -NCT00583570 -NCT00583648 -NCT00583778 -NCT00583895 -NCT00584168 -NCT00584246 -NCT00584259 -NCT00584311 -NCT00584376 -NCT00584389 -NCT00584441 -NCT00584571 -NCT00584610 -NCT00584623 -NCT00584636 -NCT00584727 -NCT00584870 -NCT00584948 -NCT00585039 -NCT00585104 -NCT00585494 -NCT00585650 -NCT00585702 -NCT00585715 -NCT00585741 -NCT00586014 -NCT00586092 -NCT00586131 -NCT00586209 -NCT00586313 -NCT00586365 -NCT00586391 -NCT00586404 -NCT00586443 -NCT00586521 -NCT00586794 -NCT00586924 -NCT00586963 -NCT00587054 -NCT00587119 -NCT00587132 -NCT00587171 -NCT00587197 -NCT00587275 -NCT00587314 -NCT00587470 -NCT00587535 -NCT00587691 -NCT00587795 -NCT00587847 -NCT00587873 -NCT00587899 -NCT00587925 -NCT00587938 -NCT00588029 -NCT00588146 -NCT00588224 -NCT00588354 -NCT00588367 -NCT00588536 -NCT00588627 -NCT00588822 -NCT00588926 -NCT00588939 -NCT00589368 -NCT00589498 -NCT00589888 -NCT00590005 -NCT00590044 -NCT00590096 -NCT00590135 -NCT00590200 -NCT00590226 -NCT00590252 -NCT00590304 -NCT00590369 -NCT00590408 -NCT00590421 -NCT00590512 -NCT00590525 -NCT00590603 -NCT00590629 -NCT00590655 -NCT00590811 -NCT00590915 -NCT00591019 -NCT00591227 -NCT00591240 -NCT00591344 -NCT00591357 -NCT00591461 -NCT00591643 -NCT00591669 -NCT00591838 -NCT00591903 -NCT00591942 -NCT00591968 -NCT00592072 -NCT00592540 -NCT00592553 -NCT00592566 -NCT00592618 -NCT00592943 -NCT00593047 -NCT00593138 -NCT00593320 -NCT00593346 -NCT00593528 -NCT00593567 -NCT00593593 -NCT00593710 -NCT00593723 -NCT00593736 -NCT00593853 -NCT00593892 -NCT00594022 -NCT00594061 -NCT00594074 -NCT00594100 -NCT00594126 -NCT00594139 -NCT00594217 -NCT00594425 -NCT00594685 -NCT00594763 -NCT00594867 -NCT00594997 -NCT00595101 -NCT00595114 -NCT00595127 -NCT00595140 -NCT00595153 -NCT00595205 -NCT00595387 -NCT00595439 -NCT00595491 -NCT00595530 -NCT00595660 -NCT00595725 -NCT00596011 -NCT00596063 -NCT00596115 -NCT00596336 -NCT00596362 -NCT00596596 -NCT00596687 -NCT00596752 -NCT00596908 -NCT00597012 -NCT00597051 -NCT00597064 -NCT00597194 -NCT00597376 -NCT00597415 -NCT00597623 -NCT00597909 -NCT00597948 -NCT00597987 -NCT00598078 -NCT00598234 -NCT00598338 -NCT00598364 -NCT00598403 -NCT00598494 -NCT00598598 -NCT00598754 -NCT00598832 -NCT00598923 -NCT00598949 -NCT00599092 -NCT00599209 -NCT00599248 -NCT00599365 -NCT00599482 -NCT00599521 -NCT00599560 -NCT00599716 -NCT00599729 -NCT00599989 -NCT00600028 -NCT00600106 -NCT00600353 -NCT00600431 -NCT00600665 -NCT00600808 -NCT00600886 -NCT00601289 -NCT00601341 -NCT00601393 -NCT00601432 -NCT00601471 -NCT00601692 -NCT00601705 -NCT00601900 -NCT00602056 -NCT00602108 -NCT00602147 -NCT00602264 -NCT00602316 -NCT00602355 -NCT00602433 -NCT00602459 -NCT00602511 -NCT00602589 -NCT00602602 -NCT00602641 -NCT00602680 -NCT00602784 -NCT00602901 -NCT00603109 -NCT00603187 -NCT00603278 -NCT00603304 -NCT00603382 -NCT00603434 -NCT00603447 -NCT00603655 -NCT00603681 -NCT00603707 -NCT00603746 -NCT00603902 -NCT00603967 -NCT00604305 -NCT00604318 -NCT00604370 -NCT00604448 -NCT00604474 -NCT00604539 -NCT00604578 -NCT00604864 -NCT00604916 -NCT00604942 -NCT00605163 -NCT00605319 -NCT00605657 -NCT00605878 -NCT00605891 -NCT00606008 -NCT00606060 -NCT00606684 -NCT00606697 -NCT00606749 -NCT00606840 -NCT00606918 -NCT00606931 -NCT00607087 -NCT00607204 -NCT00607451 -NCT00607685 -NCT00607763 -NCT00608101 -NCT00608140 -NCT00608361 -NCT00608400 -NCT00608452 -NCT00608556 -NCT00608764 -NCT00608777 -NCT00608790 -NCT00608842 -NCT00608894 -NCT00609063 -NCT00609128 -NCT00609141 -NCT00609609 -NCT00609726 -NCT00609869 -NCT00610025 -NCT00610077 -NCT00610103 -NCT00610363 -NCT00610402 -NCT00610558 -NCT00610597 -NCT00610662 -NCT00610818 -NCT00610909 -NCT00610935 -NCT00611104 -NCT00611182 -NCT00611624 -NCT00611650 -NCT00611715 -NCT00611754 -NCT00611767 -NCT00612001 -NCT00612014 -NCT00612066 -NCT00612183 -NCT00612248 -NCT00612352 -NCT00612417 -NCT00612456 -NCT00612573 -NCT00612729 -NCT00613093 -NCT00613444 -NCT00613548 -NCT00613600 -NCT00613717 -NCT00613743 -NCT00613886 -NCT00613912 -NCT00613977 -NCT00614042 -NCT00614198 -NCT00614211 -NCT00614354 -NCT00614406 -NCT00614653 -NCT00614666 -NCT00614744 -NCT00614809 -NCT00614822 -NCT00614887 -NCT00614900 -NCT00614926 -NCT00614952 -NCT00615004 -NCT00615017 -NCT00615147 -NCT00615381 -NCT00615498 -NCT00615537 -NCT00615589 -NCT00615602 -NCT00615628 -NCT00615641 -NCT00615836 -NCT00616005 -NCT00616187 -NCT00616278 -NCT00616343 -NCT00616408 -NCT00616512 -NCT00616642 -NCT00616902 -NCT00616928 -NCT00617058 -NCT00617110 -NCT00617227 -NCT00617240 -NCT00617292 -NCT00617513 -NCT00617578 -NCT00617695 -NCT00617721 -NCT00617760 -NCT00617825 -NCT00617903 -NCT00618150 -NCT00618293 -NCT00618553 -NCT00618566 -NCT00618644 -NCT00618657 -NCT00618813 -NCT00618904 -NCT00619125 -NCT00619190 -NCT00619463 -NCT00619671 -NCT00619684 -NCT00619775 -NCT00619957 -NCT00619970 -NCT00620087 -NCT00620113 -NCT00620165 -NCT00620191 -NCT00620412 -NCT00620477 -NCT00620698 -NCT00620737 -NCT00620828 -NCT00620906 -NCT00620919 -NCT00621205 -NCT00621218 -NCT00621387 -NCT00621439 -NCT00621517 -NCT00621530 -NCT00621673 -NCT00621790 -NCT00622089 -NCT00622115 -NCT00622544 -NCT00622765 -NCT00623129 -NCT00623220 -NCT00623350 -NCT00623454 -NCT00623480 -NCT00623714 -NCT00623727 -NCT00623740 -NCT00623896 -NCT00623961 -NCT00624000 -NCT00624078 -NCT00624169 -NCT00624416 -NCT00624481 -NCT00624676 -NCT00624884 -NCT00624936 -NCT00624949 -NCT00624975 -NCT00625001 -NCT00625027 -NCT00625040 -NCT00625053 -NCT00625079 -NCT00625118 -NCT00625196 -NCT00625274 -NCT00625404 -NCT00625469 -NCT00625495 -NCT00625534 -NCT00625573 -NCT00625690 -NCT00625742 -NCT00625846 -NCT00626080 -NCT00626223 -NCT00626418 -NCT00626587 -NCT00626769 -NCT00626938 -NCT00626990 -NCT00627016 -NCT00627211 -NCT00627289 -NCT00627497 -NCT00627523 -NCT00627640 -NCT00627796 -NCT00627965 -NCT00628056 -NCT00628082 -NCT00628108 -NCT00628329 -NCT00628342 -NCT00628355 -NCT00628498 -NCT00628511 -NCT00628537 -NCT00628602 -NCT00628615 -NCT00628719 -NCT00628745 -NCT00628784 -NCT00628823 -NCT00629005 -NCT00629135 -NCT00629239 -NCT00629265 -NCT00629486 -NCT00629538 -NCT00629564 -NCT00629642 -NCT00629668 -NCT00629837 -NCT00629902 -NCT00630006 -NCT00630032 -NCT00630071 -NCT00630084 -NCT00630214 -NCT00630448 -NCT00630461 -NCT00630513 -NCT00630591 -NCT00630604 -NCT00630838 -NCT00631137 -NCT00631241 -NCT00631267 -NCT00631501 -NCT00631644 -NCT00631657 -NCT00631670 -NCT00631735 -NCT00631813 -NCT00632190 -NCT00632242 -NCT00632359 -NCT00632593 -NCT00632606 -NCT00632736 -NCT00632801 -NCT00632814 -NCT00632866 -NCT00632892 -NCT00633022 -NCT00633035 -NCT00633191 -NCT00633217 -NCT00633386 -NCT00633464 -NCT00633776 -NCT00633828 -NCT00633841 -NCT00634010 -NCT00634140 -NCT00634296 -NCT00634426 -NCT00634478 -NCT00634517 -NCT00634569 -NCT00634777 -NCT00635024 -NCT00635063 -NCT00635115 -NCT00635141 -NCT00635271 -NCT00635297 -NCT00635310 -NCT00635349 -NCT00635375 -NCT00635414 -NCT00635583 -NCT00635609 -NCT00635622 -NCT00635804 -NCT00635817 -NCT00635843 -NCT00635934 -NCT00635960 -NCT00636103 -NCT00636155 -NCT00636181 -NCT00636298 -NCT00636402 -NCT00636415 -NCT00636597 -NCT00636662 -NCT00636857 -NCT00636935 -NCT00637078 -NCT00637182 -NCT00637195 -NCT00637221 -NCT00637260 -NCT00637572 -NCT00637676 -NCT00637715 -NCT00637793 -NCT00637845 -NCT00637858 -NCT00637962 -NCT00638092 -NCT00638131 -NCT00638144 -NCT00638170 -NCT00638378 -NCT00638443 -NCT00638521 -NCT00638534 -NCT00638677 -NCT00639041 -NCT00639054 -NCT00639067 -NCT00639080 -NCT00639223 -NCT00639392 -NCT00639431 -NCT00639470 -NCT00639808 -NCT00640120 -NCT00640172 -NCT00640237 -NCT00640289 -NCT00640315 -NCT00640328 -NCT00640549 -NCT00640744 -NCT00640757 -NCT00640926 -NCT00640939 -NCT00641030 -NCT00641108 -NCT00641251 -NCT00641277 -NCT00641602 -NCT00641667 -NCT00641914 -NCT00642148 -NCT00642161 -NCT00642187 -NCT00642200 -NCT00642421 -NCT00642473 -NCT00642564 -NCT00642616 -NCT00642720 -NCT00642772 -NCT00642863 -NCT00643071 -NCT00643110 -NCT00643149 -NCT00643487 -NCT00643552 -NCT00643591 -NCT00644046 -NCT00644059 -NCT00644319 -NCT00644527 -NCT00644605 -NCT00644657 -NCT00644774 -NCT00644839 -NCT00644891 -NCT00644943 -NCT00645112 -NCT00645125 -NCT00645203 -NCT00645424 -NCT00645489 -NCT00645541 -NCT00645619 -NCT00645749 -NCT00645996 -NCT00646204 -NCT00646282 -NCT00646295 -NCT00646308 -NCT00646347 -NCT00646451 -NCT00646490 -NCT00646958 -NCT00647088 -NCT00647283 -NCT00647374 -NCT00647790 -NCT00647855 -NCT00647868 -NCT00648245 -NCT00648258 -NCT00648323 -NCT00648700 -NCT00648739 -NCT00648882 -NCT00649025 -NCT00649142 -NCT00649337 -NCT00649415 -NCT00649766 -NCT00649961 -NCT00650403 -NCT00650689 -NCT00650728 -NCT00650806 -NCT00650858 -NCT00651040 -NCT00651079 -NCT00651235 -NCT00651313 -NCT00651326 -NCT00651352 -NCT00651378 -NCT00651469 -NCT00651768 -NCT00651807 -NCT00651937 -NCT00652093 -NCT00652184 -NCT00652366 -NCT00652379 -NCT00652964 -NCT00653185 -NCT00653393 -NCT00653471 -NCT00653614 -NCT00653627 -NCT00653874 -NCT00654056 -NCT00654108 -NCT00654121 -NCT00654212 -NCT00654264 -NCT00654407 -NCT00654472 -NCT00654485 -NCT00654498 -NCT00654563 -NCT00654615 -NCT00654628 -NCT00654745 -NCT00654784 -NCT00654927 -NCT00655057 -NCT00655109 -NCT00655278 -NCT00655369 -NCT00655616 -NCT00655915 -NCT00655967 -NCT00655993 -NCT00656058 -NCT00656227 -NCT00656279 -NCT00656318 -NCT00656370 -NCT00656747 -NCT00656786 -NCT00656877 -NCT00656981 -NCT00657046 -NCT00657072 -NCT00657085 -NCT00657111 -NCT00657228 -NCT00657410 -NCT00657449 -NCT00657618 -NCT00657670 -NCT00657774 -NCT00657826 -NCT00657917 -NCT00657969 -NCT00658060 -NCT00658086 -NCT00658099 -NCT00658151 -NCT00658164 -NCT00658190 -NCT00658593 -NCT00658619 -NCT00658736 -NCT00658749 -NCT00659087 -NCT00659542 -NCT00659646 -NCT00659672 -NCT00659906 -NCT00659958 -NCT00660010 -NCT00660166 -NCT00660244 -NCT00660660 -NCT00660829 -NCT00660894 -NCT00661440 -NCT00661466 -NCT00661557 -NCT00661817 -NCT00661882 -NCT00661999 -NCT00662012 -NCT00662064 -NCT00662129 -NCT00662194 -NCT00662259 -NCT00662298 -NCT00662350 -NCT00662363 -NCT00662454 -NCT00662506 -NCT00662610 -NCT00662675 -NCT00662753 -NCT00662896 -NCT00662961 -NCT00663026 -NCT00663143 -NCT00663169 -NCT00663182 -NCT00663208 -NCT00663247 -NCT00663338 -NCT00663481 -NCT00663507 -NCT00663546 -NCT00663624 -NCT00663858 -NCT00663897 -NCT00663910 -NCT00663988 -NCT00664066 -NCT00664131 -NCT00664209 -NCT00664430 -NCT00664508 -NCT00664742 -NCT00664859 -NCT00664937 -NCT00665015 -NCT00665171 -NCT00665184 -NCT00665210 -NCT00665236 -NCT00665548 -NCT00666276 -NCT00666328 -NCT00666471 -NCT00666562 -NCT00666640 -NCT00666653 -NCT00666887 -NCT00667329 -NCT00667407 -NCT00667420 -NCT00667498 -NCT00667524 -NCT00667602 -NCT00667667 -NCT00667810 -NCT00667836 -NCT00667901 -NCT00668109 -NCT00668122 -NCT00668200 -NCT00668330 -NCT00668343 -NCT00668369 -NCT00668408 -NCT00668434 -NCT00668980 -NCT00669019 -NCT00669032 -NCT00669188 -NCT00669305 -NCT00669409 -NCT00669461 -NCT00669604 -NCT00669786 -NCT00669877 -NCT00669968 -NCT00669994 -NCT00670059 -NCT00670202 -NCT00670280 -NCT00670306 -NCT00670501 -NCT00670800 -NCT00670865 -NCT00671021 -NCT00671138 -NCT00671203 -NCT00671450 -NCT00671528 -NCT00671580 -NCT00671619 -NCT00671658 -NCT00671736 -NCT00671892 -NCT00671931 -NCT00671983 -NCT00672308 -NCT00672360 -NCT00672529 -NCT00672607 -NCT00672789 -NCT00673283 -NCT00673374 -NCT00673595 -NCT00673816 -NCT00673972 -NCT00674154 -NCT00674245 -NCT00674336 -NCT00674401 -NCT00674479 -NCT00674557 -NCT00674622 -NCT00674843 -NCT00674895 -NCT00675090 -NCT00675103 -NCT00675155 -NCT00675298 -NCT00675337 -NCT00675623 -NCT00675727 -NCT00675753 -NCT00675818 -NCT00675883 -NCT00676026 -NCT00676052 -NCT00676247 -NCT00676533 -NCT00676715 -NCT00676975 -NCT00677157 -NCT00677261 -NCT00677339 -NCT00677417 -NCT00677469 -NCT00677495 -NCT00677508 -NCT00677755 -NCT00677963 -NCT00677976 -NCT00677989 -NCT00678028 -NCT00678366 -NCT00678574 -NCT00678639 -NCT00678782 -NCT00678821 -NCT00678873 -NCT00678899 -NCT00679146 -NCT00679211 -NCT00679315 -NCT00679549 -NCT00679679 -NCT00679692 -NCT00679718 -NCT00680030 -NCT00680160 -NCT00680199 -NCT00680264 -NCT00680680 -NCT00680797 -NCT00680979 -NCT00681291 -NCT00681382 -NCT00681434 -NCT00681616 -NCT00681629 -NCT00682084 -NCT00682188 -NCT00682214 -NCT00682435 -NCT00682552 -NCT00682565 -NCT00682591 -NCT00682630 -NCT00682955 -NCT00682994 -NCT00683124 -NCT00683254 -NCT00683449 -NCT00683722 -NCT00683761 -NCT00683904 -NCT00683917 -NCT00683943 -NCT00683969 -NCT00684021 -NCT00684112 -NCT00684125 -NCT00684164 -NCT00684528 -NCT00684593 -NCT00684879 -NCT00684905 -NCT00684957 -NCT00685009 -NCT00685074 -NCT00685230 -NCT00685360 -NCT00685464 -NCT00685503 -NCT00685607 -NCT00685633 -NCT00685698 -NCT00685789 -NCT00685880 -NCT00685971 -NCT00686010 -NCT00686348 -NCT00686439 -NCT00686530 -NCT00686699 -NCT00686751 -NCT00686777 -NCT00686920 -NCT00687115 -NCT00687180 -NCT00687219 -NCT00687258 -NCT00687375 -NCT00687388 -NCT00687479 -NCT00687531 -NCT00687544 -NCT00687947 -NCT00687999 -NCT00688064 -NCT00688077 -NCT00688129 -NCT00688168 -NCT00688220 -NCT00688467 -NCT00688740 -NCT00688987 -NCT00689169 -NCT00689182 -NCT00689273 -NCT00689377 -NCT00689429 -NCT00689533 -NCT00689715 -NCT00689741 -NCT00689793 -NCT00689845 -NCT00689936 -NCT00689988 -NCT00690105 -NCT00690118 -NCT00690261 -NCT00690326 -NCT00690378 -NCT00690469 -NCT00690508 -NCT00690885 -NCT00690898 -NCT00690911 -NCT00691132 -NCT00691184 -NCT00691210 -NCT00691223 -NCT00691600 -NCT00691678 -NCT00691704 -NCT00691782 -NCT00691808 -NCT00692068 -NCT00692224 -NCT00692276 -NCT00692328 -NCT00692367 -NCT00692484 -NCT00692497 -NCT00692848 -NCT00692913 -NCT00693082 -NCT00693225 -NCT00693264 -NCT00693303 -NCT00693329 -NCT00693407 -NCT00693589 -NCT00693784 -NCT00693940 -NCT00694018 -NCT00694122 -NCT00694265 -NCT00694486 -NCT00694525 -NCT00694551 -NCT00694564 -NCT00694577 -NCT00694733 -NCT00694759 -NCT00694785 -NCT00694850 -NCT00694941 -NCT00695071 -NCT00695097 -NCT00695110 -NCT00695136 -NCT00695227 -NCT00695422 -NCT00695500 -NCT00695526 -NCT00695552 -NCT00695669 -NCT00695695 -NCT00696111 -NCT00696475 -NCT00696527 -NCT00696540 -NCT00696644 -NCT00696683 -NCT00696917 -NCT00697177 -NCT00697216 -NCT00697346 -NCT00697385 -NCT00697411 -NCT00697463 -NCT00697749 -NCT00697762 -NCT00697775 -NCT00697814 -NCT00697957 -NCT00698009 -NCT00698022 -NCT00698035 -NCT00698165 -NCT00698178 -NCT00698191 -NCT00698347 -NCT00698412 -NCT00698425 -NCT00698581 -NCT00698815 -NCT00698867 -NCT00698984 -NCT00699140 -NCT00699166 -NCT00699231 -NCT00699283 -NCT00699452 -NCT00699933 -NCT00700128 -NCT00700505 -NCT00701012 -NCT00701194 -NCT00701259 -NCT00701311 -NCT00701363 -NCT00701506 -NCT00701584 -NCT00701779 -NCT00701883 -NCT00702195 -NCT00702403 -NCT00702455 -NCT00702481 -NCT00702507 -NCT00702533 -NCT00702585 -NCT00702650 -NCT00702832 -NCT00702897 -NCT00703079 -NCT00703092 -NCT00703196 -NCT00703209 -NCT00703339 -NCT00703443 -NCT00703716 -NCT00703846 -NCT00703911 -NCT00703937 -NCT00703989 -NCT00704015 -NCT00704028 -NCT00704080 -NCT00704197 -NCT00704262 -NCT00704522 -NCT00704626 -NCT00704717 -NCT00704743 -NCT00704899 -NCT00704912 -NCT00705055 -NCT00705120 -NCT00705198 -NCT00705250 -NCT00705341 -NCT00705406 -NCT00705601 -NCT00705666 -NCT00705796 -NCT00705952 -NCT00705965 -NCT00706056 -NCT00706160 -NCT00706238 -NCT00706355 -NCT00706433 -NCT00706446 -NCT00706576 -NCT00706602 -NCT00706641 -NCT00706667 -NCT00706719 -NCT00706771 -NCT00706784 -NCT00706914 -NCT00706953 -NCT00707122 -NCT00707148 -NCT00707187 -NCT00707213 -NCT00707473 -NCT00707486 -NCT00707564 -NCT00707590 -NCT00707642 -NCT00707746 -NCT00707772 -NCT00707811 -NCT00707850 -NCT00707941 -NCT00708227 -NCT00708448 -NCT00708617 -NCT00708630 -NCT00708786 -NCT00708799 -NCT00708877 -NCT00708981 -NCT00709124 -NCT00709150 -NCT00709228 -NCT00709410 -NCT00709423 -NCT00709488 -NCT00709501 -NCT00709514 -NCT00709566 -NCT00709631 -NCT00709839 -NCT00709878 -NCT00709891 -NCT00710047 -NCT00710138 -NCT00710151 -NCT00710177 -NCT00710255 -NCT00710307 -NCT00710346 -NCT00710450 -NCT00710606 -NCT00710619 -NCT00710840 -NCT00711087 -NCT00711204 -NCT00711347 -NCT00711399 -NCT00711516 -NCT00711698 -NCT00711711 -NCT00711750 -NCT00711776 -NCT00711815 -NCT00711984 -NCT00712166 -NCT00712296 -NCT00712387 -NCT00712621 -NCT00712647 -NCT00712712 -NCT00712738 -NCT00712972 -NCT00712985 -NCT00713050 -NCT00713115 -NCT00713128 -NCT00713193 -NCT00713219 -NCT00713258 -NCT00713414 -NCT00713492 -NCT00713609 -NCT00713635 -NCT00714012 -NCT00714064 -NCT00714103 -NCT00714116 -NCT00714181 -NCT00714220 -NCT00714350 -NCT00714558 -NCT00714597 -NCT00714701 -NCT00714714 -NCT00714753 -NCT00714805 -NCT00714870 -NCT00714935 -NCT00715273 -NCT00715533 -NCT00715572 -NCT00715611 -NCT00715715 -NCT00715819 -NCT00715845 -NCT00716027 -NCT00716066 -NCT00716131 -NCT00716378 -NCT00716729 -NCT00716781 -NCT00716872 -NCT00717106 -NCT00717210 -NCT00717431 -NCT00717626 -NCT00717691 -NCT00717860 -NCT00717886 -NCT00718172 -NCT00718315 -NCT00718341 -NCT00718458 -NCT00718497 -NCT00718549 -NCT00718601 -NCT00718809 -NCT00718874 -NCT00718913 -NCT00718939 -NCT00719043 -NCT00719082 -NCT00719108 -NCT00719186 -NCT00719290 -NCT00719303 -NCT00719342 -NCT00719563 -NCT00719719 -NCT00719849 -NCT00719862 -NCT00720070 -NCT00720083 -NCT00720109 -NCT00720135 -NCT00720239 -NCT00720317 -NCT00720356 -NCT00720434 -NCT00720564 -NCT00720577 -NCT00720616 -NCT00720642 -NCT00720902 -NCT00720954 -NCT00720980 -NCT00721032 -NCT00721201 -NCT00721396 -NCT00721487 -NCT00721617 -NCT00721643 -NCT00721721 -NCT00721760 -NCT00721916 -NCT00722189 -NCT00722254 -NCT00722683 -NCT00722735 -NCT00722748 -NCT00722761 -NCT00723242 -NCT00723294 -NCT00723502 -NCT00723567 -NCT00723762 -NCT00723788 -NCT00723801 -NCT00723827 -NCT00724178 -NCT00724217 -NCT00724282 -NCT00724347 -NCT00724555 -NCT00724646 -NCT00724659 -NCT00724815 -NCT00725023 -NCT00725114 -NCT00725205 -NCT00725686 -NCT00725712 -NCT00725764 -NCT00725842 -NCT00726310 -NCT00726375 -NCT00726492 -NCT00726544 -NCT00726830 -NCT00727168 -NCT00727194 -NCT00727259 -NCT00727324 -NCT00727337 -NCT00727844 -NCT00727909 -NCT00728026 -NCT00728104 -NCT00728195 -NCT00728208 -NCT00728533 -NCT00728871 -NCT00728910 -NCT00728975 -NCT00729040 -NCT00729157 -NCT00729183 -NCT00729313 -NCT00729339 -NCT00729456 -NCT00729625 -NCT00729859 -NCT00729911 -NCT00729937 -NCT00730015 -NCT00730028 -NCT00730067 -NCT00730106 -NCT00730132 -NCT00730184 -NCT00730210 -NCT00731081 -NCT00731198 -NCT00731289 -NCT00731302 -NCT00731419 -NCT00731575 -NCT00731757 -NCT00731809 -NCT00731822 -NCT00732108 -NCT00732147 -NCT00732160 -NCT00732238 -NCT00732394 -NCT00732407 -NCT00732524 -NCT00732732 -NCT00732797 -NCT00733265 -NCT00733382 -NCT00733538 -NCT00733590 -NCT00733629 -NCT00733655 -NCT00733746 -NCT00733759 -NCT00733980 -NCT00734123 -NCT00734201 -NCT00734227 -NCT00734279 -NCT00734526 -NCT00734656 -NCT00734682 -NCT00734812 -NCT00734825 -NCT00734838 -NCT00734864 -NCT00734942 -NCT00734955 -NCT00735020 -NCT00735033 -NCT00735189 -NCT00735215 -NCT00735254 -NCT00735319 -NCT00735423 -NCT00735462 -NCT00735566 -NCT00735787 -NCT00735917 -NCT00736086 -NCT00736112 -NCT00736203 -NCT00736281 -NCT00736567 -NCT00736671 -NCT00736723 -NCT00736801 -NCT00736853 -NCT00736996 -NCT00737048 -NCT00737191 -NCT00737334 -NCT00737412 -NCT00737451 -NCT00737607 -NCT00737698 -NCT00737802 -NCT00737854 -NCT00737971 -NCT00737997 -NCT00738036 -NCT00738127 -NCT00738205 -NCT00738244 -NCT00738621 -NCT00738673 -NCT00738751 -NCT00738972 -NCT00739479 -NCT00739492 -NCT00739674 -NCT00740129 -NCT00740142 -NCT00740623 -NCT00740844 -NCT00740948 -NCT00740987 -NCT00741013 -NCT00741052 -NCT00741091 -NCT00741312 -NCT00741533 -NCT00741637 -NCT00741676 -NCT00741741 -NCT00741767 -NCT00741780 -NCT00741832 -NCT00741910 -NCT00741936 -NCT00742092 -NCT00742235 -NCT00742365 -NCT00742404 -NCT00742469 -NCT00742664 -NCT00742677 -NCT00742820 -NCT00742872 -NCT00742976 -NCT00743184 -NCT00743626 -NCT00743730 -NCT00743990 -NCT00744172 -NCT00744185 -NCT00744393 -NCT00744445 -NCT00744523 -NCT00744731 -NCT00744887 -NCT00745030 -NCT00745069 -NCT00745251 -NCT00745407 -NCT00745420 -NCT00745537 -NCT00745563 -NCT00745732 -NCT00745901 -NCT00746564 -NCT00746668 -NCT00746772 -NCT00746902 -NCT00747071 -NCT00747162 -NCT00747227 -NCT00747435 -NCT00747500 -NCT00747539 -NCT00747591 -NCT00747682 -NCT00747760 -NCT00747864 -NCT00747929 -NCT00747994 -NCT00748007 -NCT00748072 -NCT00748098 -NCT00748501 -NCT00748540 -NCT00748579 -NCT00748592 -NCT00748605 -NCT00748631 -NCT00748644 -NCT00748657 -NCT00748696 -NCT00748852 -NCT00748904 -NCT00748969 -NCT00749086 -NCT00749294 -NCT00749359 -NCT00749411 -NCT00749645 -NCT00749788 -NCT00749814 -NCT00750139 -NCT00750152 -NCT00750256 -NCT00750269 -NCT00750451 -NCT00750477 -NCT00750594 -NCT00750724 -NCT00750789 -NCT00750828 -NCT00750867 -NCT00751036 -NCT00751140 -NCT00751296 -NCT00751426 -NCT00751660 -NCT00751699 -NCT00752076 -NCT00752102 -NCT00752193 -NCT00752245 -NCT00752609 -NCT00752674 -NCT00752765 -NCT00752778 -NCT00752869 -NCT00752921 -NCT00753064 -NCT00753090 -NCT00753103 -NCT00753142 -NCT00753168 -NCT00753233 -NCT00753571 -NCT00753597 -NCT00753714 -NCT00753870 -NCT00754013 -NCT00754065 -NCT00754481 -NCT00754585 -NCT00754611 -NCT00754676 -NCT00754806 -NCT00754832 -NCT00754923 -NCT00754975 -NCT00755027 -NCT00755430 -NCT00755482 -NCT00755495 -NCT00755508 -NCT00755573 -NCT00755599 -NCT00755781 -NCT00755950 -NCT00756002 -NCT00756366 -NCT00756379 -NCT00756522 -NCT00756561 -NCT00757003 -NCT00757120 -NCT00757289 -NCT00757302 -NCT00757315 -NCT00757393 -NCT00757484 -NCT00757757 -NCT00757848 -NCT00758108 -NCT00758316 -NCT00758368 -NCT00758459 -NCT00758498 -NCT00758706 -NCT00758927 -NCT00758992 -NCT00759044 -NCT00759109 -NCT00759174 -NCT00759525 -NCT00759603 -NCT00759655 -NCT00759707 -NCT00759733 -NCT00759772 -NCT00759798 -NCT00759863 -NCT00759876 -NCT00759928 -NCT00760006 -NCT00760097 -NCT00760149 -NCT00760240 -NCT00760344 -NCT00760513 -NCT00760786 -NCT00760825 -NCT00760864 -NCT00760903 -NCT00761085 -NCT00761280 -NCT00761332 -NCT00761358 -NCT00761397 -NCT00761501 -NCT00761527 -NCT00761956 -NCT00762034 -NCT00762307 -NCT00762541 -NCT00762619 -NCT00762723 -NCT00762749 -NCT00762788 -NCT00762866 -NCT00762905 -NCT00762970 -NCT00763113 -NCT00763399 -NCT00763594 -NCT00763633 -NCT00763867 -NCT00763880 -NCT00763893 -NCT00764309 -NCT00764322 -NCT00764673 -NCT00764699 -NCT00764751 -NCT00764764 -NCT00764816 -NCT00764985 -NCT00765193 -NCT00765297 -NCT00765323 -NCT00765388 -NCT00765401 -NCT00765505 -NCT00765635 -NCT00765648 -NCT00765700 -NCT00765713 -NCT00765726 -NCT00765882 -NCT00766090 -NCT00766168 -NCT00766220 -NCT00766298 -NCT00766649 -NCT00766870 -NCT00767013 -NCT00767091 -NCT00767117 -NCT00767130 -NCT00767234 -NCT00767299 -NCT00767403 -NCT00767429 -NCT00767546 -NCT00767559 -NCT00767793 -NCT00767897 -NCT00767988 -NCT00768157 -NCT00768170 -NCT00768313 -NCT00768365 -NCT00768599 -NCT00768612 -NCT00768742 -NCT00768781 -NCT00768807 -NCT00768820 -NCT00769002 -NCT00769197 -NCT00769262 -NCT00769353 -NCT00769379 -NCT00769483 -NCT00769522 -NCT00769535 -NCT00769587 -NCT00769626 -NCT00769730 -NCT00769756 -NCT00769834 -NCT00770094 -NCT00770198 -NCT00770276 -NCT00770432 -NCT00770510 -NCT00770640 -NCT00770653 -NCT00770887 -NCT00771043 -NCT00771095 -NCT00771290 -NCT00771316 -NCT00771342 -NCT00771355 -NCT00771498 -NCT00771589 -NCT00771602 -NCT00771615 -NCT00771706 -NCT00771758 -NCT00771771 -NCT00772057 -NCT00772122 -NCT00772278 -NCT00772408 -NCT00772447 -NCT00772486 -NCT00772525 -NCT00772629 -NCT00772694 -NCT00772850 -NCT00772876 -NCT00772915 -NCT00772954 -NCT00772967 -NCT00773136 -NCT00773175 -NCT00773227 -NCT00773266 -NCT00773279 -NCT00773682 -NCT00773890 -NCT00774020 -NCT00774449 -NCT00774462 -NCT00774566 -NCT00774631 -NCT00774657 -NCT00774930 -NCT00775138 -NCT00775151 -NCT00775190 -NCT00775242 -NCT00775463 -NCT00775489 -NCT00775619 -NCT00775723 -NCT00775749 -NCT00775905 -NCT00776087 -NCT00776113 -NCT00776295 -NCT00776607 -NCT00776789 -NCT00776919 -NCT00776997 -NCT00777088 -NCT00777569 -NCT00777777 -NCT00777894 -NCT00777998 -NCT00778011 -NCT00778037 -NCT00778609 -NCT00778765 -NCT00778843 -NCT00778999 -NCT00779584 -NCT00779688 -NCT00779857 -NCT00779922 -NCT00779961 -NCT00780117 -NCT00780247 -NCT00780351 -NCT00780780 -NCT00780988 -NCT00781170 -NCT00781261 -NCT00781378 -NCT00781469 -NCT00781495 -NCT00782158 -NCT00782236 -NCT00782327 -NCT00782639 -NCT00782652 -NCT00782782 -NCT00782795 -NCT00782860 -NCT00783016 -NCT00783315 -NCT00783393 -NCT00783419 -NCT00783523 -NCT00783575 -NCT00783627 -NCT00783926 -NCT00784043 -NCT00784082 -NCT00784134 -NCT00784173 -NCT00784394 -NCT00784485 -NCT00784511 -NCT00784563 -NCT00784615 -NCT00784706 -NCT00784758 -NCT00784810 -NCT00785135 -NCT00785187 -NCT00785291 -NCT00785304 -NCT00785343 -NCT00785824 -NCT00786084 -NCT00786188 -NCT00786279 -NCT00786500 -NCT00786604 -NCT00786929 -NCT00787163 -NCT00787189 -NCT00787319 -NCT00787358 -NCT00787540 -NCT00787644 -NCT00787657 -NCT00787670 -NCT00787696 -NCT00787722 -NCT00787761 -NCT00787878 -NCT00787943 -NCT00788073 -NCT00788164 -NCT00788307 -NCT00788528 -NCT00788554 -NCT00788866 -NCT00788918 -NCT00789061 -NCT00789087 -NCT00789126 -NCT00789243 -NCT00789451 -NCT00789529 -NCT00789581 -NCT00789685 -NCT00789802 -NCT00789919 -NCT00789945 -NCT00789997 -NCT00790075 -NCT00790101 -NCT00790179 -NCT00790231 -NCT00790283 -NCT00790530 -NCT00790582 -NCT00790647 -NCT00790777 -NCT00790790 -NCT00791193 -NCT00791297 -NCT00791492 -NCT00791960 -NCT00792077 -NCT00792090 -NCT00792103 -NCT00792142 -NCT00792194 -NCT00792337 -NCT00792597 -NCT00792727 -NCT00792740 -NCT00792766 -NCT00792948 -NCT00792961 -NCT00793065 -NCT00793143 -NCT00793208 -NCT00793247 -NCT00793286 -NCT00793338 -NCT00793715 -NCT00793845 -NCT00794040 -NCT00794053 -NCT00794105 -NCT00794118 -NCT00794235 -NCT00794274 -NCT00794313 -NCT00794352 -NCT00794430 -NCT00794677 -NCT00794820 -NCT00794924 -NCT00794976 -NCT00795015 -NCT00795028 -NCT00795158 -NCT00795184 -NCT00795483 -NCT00795496 -NCT00795639 -NCT00795782 -NCT00795899 -NCT00796042 -NCT00796133 -NCT00796185 -NCT00796679 -NCT00796692 -NCT00796783 -NCT00796887 -NCT00796926 -NCT00796952 -NCT00797069 -NCT00797121 -NCT00797186 -NCT00797277 -NCT00797316 -NCT00797407 -NCT00797420 -NCT00797433 -NCT00797615 -NCT00797693 -NCT00797810 -NCT00797836 -NCT00798057 -NCT00798226 -NCT00798369 -NCT00798382 -NCT00798512 -NCT00798603 -NCT00799136 -NCT00799214 -NCT00799266 -NCT00799565 -NCT00799617 -NCT00799760 -NCT00799773 -NCT00799916 -NCT00799955 -NCT00800033 -NCT00800098 -NCT00800358 -NCT00800579 -NCT00800943 -NCT00801021 -NCT00801307 -NCT00801385 -NCT00801619 -NCT00801788 -NCT00801853 -NCT00802009 -NCT00802139 -NCT00802191 -NCT00802230 -NCT00802308 -NCT00802425 -NCT00802438 -NCT00802529 -NCT00802581 -NCT00802646 -NCT00802672 -NCT00802698 -NCT00802815 -NCT00802867 -NCT00802932 -NCT00802997 -NCT00803426 -NCT00803504 -NCT00803647 -NCT00803842 -NCT00803972 -NCT00803985 -NCT00804089 -NCT00804128 -NCT00804193 -NCT00804336 -NCT00804349 -NCT00804466 -NCT00804557 -NCT00804830 -NCT00805142 -NCT00805181 -NCT00805207 -NCT00805311 -NCT00805324 -NCT00805428 -NCT00805493 -NCT00805649 -NCT00805844 -NCT00806065 -NCT00806117 -NCT00806299 -NCT00806637 -NCT00806871 -NCT00806962 -NCT00807040 -NCT00807183 -NCT00807326 -NCT00807560 -NCT00807599 -NCT00807651 -NCT00807664 -NCT00807729 -NCT00807820 -NCT00807872 -NCT00807885 -NCT00807963 -NCT00808106 -NCT00808158 -NCT00808197 -NCT00808613 -NCT00808938 -NCT00808990 -NCT00809003 -NCT00809094 -NCT00809354 -NCT00809562 -NCT00809601 -NCT00809640 -NCT00809861 -NCT00809913 -NCT00809952 -NCT00810095 -NCT00810485 -NCT00810550 -NCT00810563 -NCT00810797 -NCT00810849 -NCT00810888 -NCT00811330 -NCT00811486 -NCT00811538 -NCT00811681 -NCT00811785 -NCT00811967 -NCT00812045 -NCT00812149 -NCT00812162 -NCT00812188 -NCT00812370 -NCT00812383 -NCT00812409 -NCT00812422 -NCT00812617 -NCT00812630 -NCT00812708 -NCT00812838 -NCT00812851 -NCT00812968 -NCT00813007 -NCT00813033 -NCT00813241 -NCT00813475 -NCT00813527 -NCT00813683 -NCT00813761 -NCT00813826 -NCT00813917 -NCT00814073 -NCT00814138 -NCT00814177 -NCT00814307 -NCT00814346 -NCT00814385 -NCT00814580 -NCT00815126 -NCT00815191 -NCT00815282 -NCT00815308 -NCT00815425 -NCT00815438 -NCT00815490 -NCT00815503 -NCT00815529 -NCT00815698 -NCT00815711 -NCT00815724 -NCT00816127 -NCT00816179 -NCT00816218 -NCT00816244 -NCT00816257 -NCT00816335 -NCT00816387 -NCT00816504 -NCT00816530 -NCT00816660 -NCT00816829 -NCT00816998 -NCT00817180 -NCT00817232 -NCT00817661 -NCT00817726 -NCT00817765 -NCT00817843 -NCT00817882 -NCT00818311 -NCT00818389 -NCT00818870 -NCT00818896 -NCT00819208 -NCT00819299 -NCT00819585 -NCT00819676 -NCT00819832 -NCT00820040 -NCT00820079 -NCT00820235 -NCT00820287 -NCT00820352 -NCT00820378 -NCT00820638 -NCT00820664 -NCT00820742 -NCT00820781 -NCT00820807 -NCT00820820 -NCT00820846 -NCT00820924 -NCT00820989 -NCT00821132 -NCT00821236 -NCT00821470 -NCT00821509 -NCT00821626 -NCT00821821 -NCT00822198 -NCT00822276 -NCT00822432 -NCT00822523 -NCT00822575 -NCT00822627 -NCT00822653 -NCT00822679 -NCT00822757 -NCT00822861 -NCT00822900 -NCT00823004 -NCT00823394 -NCT00823511 -NCT00823537 -NCT00823550 -NCT00823901 -NCT00824122 -NCT00824135 -NCT00824252 -NCT00824408 -NCT00824473 -NCT00824668 -NCT00824863 -NCT00824941 -NCT00825019 -NCT00825071 -NCT00825175 -NCT00825344 -NCT00825396 -NCT00825435 -NCT00825591 -NCT00825617 -NCT00825916 -NCT00826007 -NCT00826020 -NCT00826306 -NCT00826423 -NCT00826449 -NCT00826462 -NCT00826527 -NCT00826579 -NCT00826605 -NCT00826709 -NCT00826774 -NCT00826813 -NCT00826904 -NCT00827034 -NCT00827398 -NCT00827502 -NCT00827658 -NCT00827814 -NCT00827892 -NCT00828048 -NCT00828100 -NCT00828347 -NCT00828568 -NCT00828685 -NCT00828750 -NCT00828763 -NCT00828828 -NCT00828919 -NCT00828945 -NCT00828971 -NCT00829049 -NCT00829101 -NCT00829114 -NCT00829153 -NCT00829361 -NCT00829387 -NCT00829543 -NCT00829673 -NCT00829712 -NCT00829829 -NCT00829855 -NCT00830089 -NCT00830141 -NCT00830232 -NCT00830284 -NCT00830297 -NCT00830323 -NCT00830388 -NCT00830583 -NCT00830596 -NCT00830726 -NCT00830739 -NCT00830830 -NCT00830934 -NCT00831103 -NCT00831194 -NCT00831441 -NCT00831675 -NCT00831740 -NCT00831844 -NCT00831974 -NCT00832065 -NCT00832234 -NCT00832312 -NCT00832377 -NCT00832416 -NCT00832429 -NCT00832520 -NCT00832585 -NCT00832611 -NCT00832767 -NCT00832806 -NCT00832871 -NCT00833144 -NCT00833222 -NCT00833274 -NCT00833534 -NCT00833625 -NCT00833690 -NCT00833794 -NCT00833846 -NCT00833911 -NCT00833989 -NCT00834210 -NCT00834236 -NCT00834366 -NCT00834678 -NCT00834886 -NCT00834899 -NCT00835198 -NCT00835211 -NCT00835302 -NCT00835445 -NCT00835510 -NCT00835770 -NCT00835861 -NCT00836043 -NCT00836160 -NCT00836316 -NCT00836368 -NCT00836771 -NCT00836797 -NCT00836810 -NCT00836823 -NCT00836953 -NCT00837044 -NCT00837395 -NCT00837486 -NCT00837616 -NCT00837785 -NCT00837850 -NCT00838032 -NCT00838513 -NCT00838526 -NCT00838552 -NCT00838591 -NCT00838682 -NCT00838851 -NCT00838864 -NCT00838942 -NCT00839124 -NCT00839137 -NCT00839189 -NCT00839202 -NCT00839228 -NCT00839306 -NCT00839319 -NCT00839488 -NCT00839787 -NCT00839969 -NCT00840047 -NCT00840086 -NCT00840190 -NCT00840294 -NCT00840463 -NCT00840528 -NCT00840944 -NCT00841113 -NCT00841152 -NCT00841555 -NCT00841919 -NCT00842140 -NCT00842205 -NCT00842218 -NCT00842244 -NCT00842426 -NCT00842621 -NCT00842751 -NCT00842777 -NCT00843024 -NCT00843167 -NCT00843310 -NCT00843401 -NCT00843505 -NCT00843518 -NCT00843570 -NCT00843726 -NCT00843817 -NCT00843986 -NCT00844038 -NCT00844194 -NCT00844259 -NCT00844311 -NCT00844428 -NCT00844441 -NCT00844532 -NCT00844545 -NCT00844597 -NCT00844649 -NCT00844662 -NCT00844844 -NCT00844870 -NCT00845117 -NCT00845156 -NCT00845299 -NCT00845351 -NCT00845520 -NCT00845559 -NCT00845572 -NCT00845676 -NCT00845754 -NCT00845832 -NCT00845936 -NCT00845962 -NCT00845975 -NCT00846040 -NCT00846248 -NCT00846534 -NCT00846898 -NCT00846924 -NCT00847002 -NCT00847236 -NCT00847340 -NCT00847379 -NCT00847431 -NCT00847457 -NCT00847522 -NCT00847847 -NCT00847899 -NCT00847990 -NCT00848172 -NCT00848263 -NCT00848289 -NCT00848315 -NCT00848406 -NCT00848666 -NCT00848731 -NCT00848744 -NCT00849095 -NCT00849342 -NCT00849394 -NCT00849524 -NCT00849615 -NCT00849745 -NCT00849849 -NCT00849888 -NCT00849927 -NCT00850018 -NCT00850031 -NCT00850057 -NCT00850408 -NCT00850577 -NCT00850993 -NCT00851162 -NCT00851188 -NCT00851331 -NCT00851461 -NCT00851487 -NCT00851747 -NCT00851799 -NCT00851838 -NCT00851942 -NCT00851981 -NCT00852020 -NCT00852072 -NCT00852098 -NCT00852124 -NCT00852150 -NCT00852202 -NCT00852228 -NCT00852293 -NCT00852345 -NCT00852631 -NCT00852748 -NCT00852839 -NCT00852917 -NCT00853138 -NCT00853489 -NCT00853502 -NCT00853515 -NCT00853541 -NCT00853697 -NCT00853723 -NCT00854139 -NCT00854204 -NCT00854373 -NCT00854412 -NCT00854672 -NCT00854815 -NCT00855192 -NCT00855296 -NCT00855374 -NCT00855426 -NCT00855530 -NCT00855595 -NCT00855712 -NCT00855764 -NCT00855829 -NCT00855920 -NCT00855972 -NCT00856232 -NCT00856297 -NCT00856388 -NCT00856544 -NCT00856596 -NCT00856609 -NCT00856648 -NCT00856973 -NCT00857051 -NCT00857194 -NCT00857363 -NCT00857376 -NCT00857389 -NCT00857454 -NCT00857532 -NCT00857662 -NCT00857701 -NCT00857766 -NCT00858117 -NCT00858143 -NCT00858169 -NCT00858351 -NCT00858494 -NCT00858520 -NCT00858611 -NCT00858624 -NCT00858650 -NCT00858689 -NCT00858793 -NCT00858819 -NCT00858845 -NCT00859053 -NCT00859105 -NCT00859274 -NCT00859287 -NCT00859339 -NCT00859690 -NCT00859794 -NCT00859872 -NCT00859911 -NCT00860067 -NCT00860145 -NCT00860184 -NCT00860327 -NCT00860366 -NCT00860457 -NCT00860535 -NCT00860587 -NCT00860678 -NCT00860691 -NCT00860743 -NCT00860808 -NCT00861029 -NCT00861159 -NCT00861523 -NCT00861588 -NCT00861705 -NCT00861731 -NCT00861861 -NCT00861887 -NCT00862004 -NCT00862095 -NCT00862277 -NCT00862433 -NCT00862628 -NCT00862758 -NCT00862810 -NCT00862940 -NCT00863278 -NCT00863343 -NCT00863356 -NCT00863616 -NCT00863642 -NCT00863785 -NCT00863941 -NCT00864058 -NCT00864136 -NCT00864175 -NCT00864305 -NCT00864383 -NCT00864422 -NCT00864461 -NCT00864552 -NCT00864760 -NCT00864929 -NCT00865046 -NCT00865098 -NCT00865111 -NCT00865358 -NCT00865371 -NCT00865410 -NCT00865449 -NCT00865462 -NCT00865631 -NCT00865644 -NCT00866008 -NCT00866099 -NCT00866294 -NCT00866346 -NCT00866437 -NCT00866476 -NCT00866554 -NCT00866645 -NCT00866775 -NCT00866840 -NCT00867243 -NCT00867698 -NCT00867763 -NCT00867828 -NCT00867867 -NCT00867919 -NCT00867932 -NCT00868075 -NCT00868153 -NCT00868166 -NCT00868218 -NCT00868478 -NCT00868530 -NCT00868738 -NCT00868985 -NCT00869037 -NCT00869063 -NCT00869206 -NCT00869336 -NCT00869544 -NCT00869674 -NCT00869739 -NCT00869804 -NCT00869934 -NCT00869960 -NCT00869986 -NCT00870220 -NCT00870246 -NCT00870272 -NCT00870519 -NCT00870753 -NCT00870766 -NCT00870896 -NCT00870922 -NCT00871130 -NCT00871299 -NCT00871377 -NCT00871494 -NCT00871572 -NCT00871611 -NCT00871650 -NCT00871780 -NCT00871962 -NCT00872001 -NCT00872092 -NCT00872157 -NCT00872209 -NCT00872274 -NCT00872287 -NCT00872365 -NCT00872495 -NCT00872612 -NCT00872664 -NCT00872755 -NCT00872781 -NCT00872924 -NCT00872937 -NCT00873145 -NCT00873262 -NCT00873314 -NCT00873405 -NCT00873457 -NCT00873522 -NCT00873600 -NCT00873678 -NCT00873769 -NCT00873782 -NCT00874029 -NCT00874172 -NCT00874653 -NCT00874900 -NCT00874926 -NCT00874978 -NCT00875121 -NCT00875251 -NCT00875355 -NCT00875433 -NCT00875446 -NCT00875537 -NCT00875576 -NCT00875875 -NCT00876161 -NCT00876291 -NCT00876356 -NCT00876499 -NCT00876655 -NCT00876694 -NCT00876759 -NCT00876772 -NCT00876798 -NCT00877097 -NCT00877110 -NCT00877292 -NCT00877383 -NCT00877409 -NCT00877448 -NCT00877604 -NCT00877682 -NCT00877708 -NCT00877838 -NCT00877968 -NCT00878059 -NCT00878098 -NCT00878176 -NCT00878228 -NCT00878475 -NCT00878514 -NCT00878553 -NCT00878592 -NCT00878826 -NCT00879034 -NCT00879060 -NCT00879125 -NCT00879216 -NCT00879359 -NCT00879437 -NCT00879502 -NCT00879515 -NCT00879541 -NCT00879658 -NCT00879710 -NCT00879775 -NCT00879814 -NCT00880022 -NCT00880048 -NCT00880087 -NCT00880282 -NCT00880347 -NCT00880386 -NCT00880399 -NCT00880412 -NCT00880425 -NCT00880451 -NCT00880477 -NCT00880490 -NCT00880594 -NCT00880763 -NCT00880802 -NCT00880906 -NCT00881283 -NCT00881322 -NCT00881361 -NCT00881595 -NCT00881660 -NCT00881920 -NCT00882089 -NCT00882193 -NCT00882440 -NCT00882726 -NCT00882999 -NCT00883129 -NCT00883220 -NCT00883272 -NCT00883350 -NCT00883402 -NCT00883493 -NCT00883519 -NCT00883571 -NCT00883584 -NCT00883701 -NCT00884000 -NCT00884221 -NCT00884260 -NCT00884273 -NCT00884403 -NCT00884416 -NCT00884494 -NCT00884507 -NCT00884624 -NCT00884936 -NCT00885001 -NCT00885365 -NCT00885469 -NCT00885560 -NCT00885703 -NCT00885924 -NCT00886080 -NCT00886197 -NCT00886210 -NCT00886327 -NCT00886496 -NCT00886522 -NCT00886652 -NCT00886769 -NCT00886834 -NCT00886847 -NCT00886925 -NCT00887081 -NCT00887172 -NCT00887185 -NCT00887224 -NCT00887250 -NCT00887276 -NCT00887315 -NCT00887328 -NCT00887354 -NCT00887484 -NCT00887510 -NCT00887705 -NCT00887744 -NCT00887835 -NCT00887939 -NCT00888017 -NCT00888225 -NCT00888342 -NCT00888563 -NCT00888589 -NCT00889018 -NCT00889031 -NCT00889174 -NCT00889187 -NCT00889200 -NCT00889226 -NCT00889434 -NCT00889512 -NCT00889707 -NCT00889837 -NCT00890058 -NCT00890071 -NCT00890162 -NCT00890201 -NCT00890552 -NCT00890747 -NCT00890812 -NCT00890877 -NCT00891124 -NCT00891189 -NCT00891228 -NCT00891267 -NCT00891319 -NCT00891722 -NCT00891813 -NCT00891852 -NCT00891904 -NCT00891917 -NCT00891969 -NCT00892073 -NCT00892268 -NCT00892346 -NCT00892359 -NCT00892619 -NCT00892697 -NCT00892723 -NCT00892879 -NCT00893009 -NCT00893217 -NCT00893347 -NCT00893373 -NCT00893425 -NCT00893633 -NCT00893646 -NCT00893789 -NCT00893880 -NCT00893932 -NCT00894075 -NCT00894192 -NCT00894205 -NCT00894608 -NCT00894764 -NCT00894803 -NCT00894907 -NCT00895089 -NCT00895544 -NCT00895752 -NCT00895817 -NCT00895960 -NCT00896077 -NCT00896272 -NCT00896285 -NCT00896402 -NCT00896441 -NCT00896753 -NCT00896766 -NCT00896818 -NCT00896831 -NCT00896857 -NCT00897039 -NCT00897091 -NCT00897143 -NCT00897208 -NCT00897247 -NCT00897442 -NCT00897455 -NCT00897806 -NCT00897923 -NCT00897975 -NCT00898014 -NCT00898144 -NCT00898274 -NCT00898326 -NCT00898365 -NCT00898443 -NCT00898508 -NCT00898677 -NCT00898937 -NCT00899041 -NCT00899080 -NCT00899132 -NCT00899379 -NCT00899431 -NCT00899613 -NCT00899873 -NCT00899964 -NCT00900081 -NCT00900094 -NCT00900211 -NCT00900432 -NCT00900575 -NCT00900601 -NCT00900874 -NCT00900965 -NCT00901004 -NCT00901459 -NCT00901524 -NCT00901615 -NCT00901940 -NCT00902031 -NCT00902057 -NCT00902109 -NCT00902135 -NCT00902174 -NCT00902226 -NCT00902564 -NCT00902629 -NCT00902837 -NCT00902902 -NCT00902954 -NCT00903071 -NCT00903136 -NCT00903201 -NCT00903214 -NCT00903227 -NCT00903422 -NCT00903721 -NCT00903877 -NCT00903903 -NCT00903994 -NCT00904098 -NCT00904137 -NCT00904202 -NCT00904540 -NCT00904696 -NCT00904709 -NCT00904748 -NCT00904826 -NCT00904865 -NCT00904956 -NCT00904969 -NCT00904982 -NCT00905320 -NCT00905632 -NCT00905736 -NCT00905970 -NCT00906243 -NCT00906399 -NCT00906412 -NCT00906438 -NCT00906971 -NCT00907257 -NCT00907348 -NCT00907452 -NCT00907517 -NCT00907595 -NCT00907660 -NCT00907751 -NCT00907790 -NCT00908076 -NCT00908089 -NCT00908427 -NCT00908531 -NCT00908804 -NCT00909103 -NCT00909116 -NCT00909220 -NCT00909259 -NCT00909350 -NCT00909389 -NCT00909766 -NCT00909857 -NCT00909909 -NCT00909961 -NCT00910065 -NCT00910208 -NCT00910325 -NCT00910533 -NCT00910598 -NCT00910637 -NCT00910715 -NCT00910897 -NCT00911131 -NCT00911300 -NCT00911586 -NCT00911625 -NCT00911742 -NCT00911859 -NCT00912015 -NCT00912132 -NCT00912158 -NCT00912184 -NCT00912197 -NCT00912444 -NCT00912665 -NCT00912717 -NCT00912782 -NCT00912808 -NCT00912977 -NCT00913042 -NCT00913055 -NCT00913081 -NCT00913146 -NCT00913172 -NCT00913263 -NCT00913380 -NCT00913445 -NCT00913497 -NCT00913978 -NCT00914056 -NCT00914095 -NCT00914134 -NCT00914147 -NCT00914173 -NCT00914407 -NCT00914433 -NCT00914459 -NCT00914524 -NCT00914602 -NCT00914823 -NCT00914862 -NCT00914966 -NCT00915330 -NCT00915343 -NCT00915681 -NCT00915798 -NCT00915954 -NCT00915980 -NCT00916032 -NCT00916058 -NCT00916240 -NCT00916292 -NCT00916305 -NCT00916383 -NCT00916396 -NCT00916643 -NCT00916747 -NCT00916903 -NCT00916916 -NCT00917007 -NCT00917124 -NCT00917241 -NCT00917410 -NCT00917618 -NCT00917683 -NCT00917709 -NCT00917943 -NCT00918255 -NCT00918333 -NCT00918411 -NCT00918437 -NCT00918450 -NCT00918476 -NCT00918528 -NCT00918723 -NCT00918736 -NCT00918892 -NCT00918931 -NCT00918983 -NCT00919074 -NCT00919165 -NCT00919204 -NCT00919217 -NCT00919243 -NCT00919334 -NCT00919360 -NCT00919373 -NCT00919412 -NCT00919516 -NCT00919633 -NCT00919672 -NCT00920075 -NCT00920127 -NCT00920179 -NCT00920413 -NCT00920478 -NCT00920621 -NCT00920725 -NCT00920985 -NCT00921024 -NCT00921206 -NCT00921427 -NCT00921492 -NCT00921518 -NCT00921544 -NCT00921609 -NCT00921648 -NCT00921856 -NCT00922155 -NCT00922194 -NCT00922233 -NCT00922597 -NCT00922805 -NCT00922870 -NCT00922883 -NCT00923013 -NCT00923052 -NCT00923195 -NCT00923247 -NCT00923429 -NCT00923559 -NCT00923780 -NCT00924040 -NCT00924183 -NCT00924196 -NCT00924261 -NCT00924287 -NCT00924326 -NCT00924508 -NCT00924612 -NCT00924638 -NCT00924755 -NCT00924768 -NCT00924872 -NCT00924950 -NCT00925041 -NCT00925067 -NCT00925145 -NCT00925158 -NCT00925210 -NCT00925236 -NCT00925522 -NCT00925652 -NCT00925691 -NCT00925847 -NCT00925977 -NCT00926120 -NCT00926237 -NCT00926380 -NCT00926419 -NCT00926471 -NCT00926601 -NCT00926835 -NCT00926913 -NCT00927030 -NCT00927056 -NCT00927069 -NCT00927108 -NCT00927186 -NCT00927212 -NCT00927303 -NCT00927901 -NCT00927953 -NCT00928044 -NCT00928161 -NCT00928564 -NCT00928629 -NCT00928759 -NCT00928837 -NCT00928993 -NCT00929006 -NCT00929188 -NCT00929305 -NCT00929318 -NCT00929591 -NCT00929643 -NCT00929903 -NCT00929981 -NCT00930007 -NCT00930124 -NCT00930202 -NCT00930228 -NCT00930332 -NCT00930423 -NCT00930709 -NCT00930852 -NCT00931099 -NCT00931164 -NCT00931190 -NCT00931528 -NCT00931593 -NCT00931619 -NCT00931788 -NCT00931866 -NCT00931970 -NCT00932022 -NCT00932256 -NCT00932425 -NCT00932555 -NCT00932698 -NCT00932737 -NCT00932763 -NCT00932841 -NCT00932854 -NCT00932880 -NCT00932919 -NCT00932971 -NCT00933036 -NCT00933140 -NCT00933244 -NCT00933296 -NCT00933322 -NCT00933361 -NCT00933465 -NCT00933478 -NCT00933543 -NCT00933608 -NCT00933660 -NCT00933686 -NCT00933829 -NCT00933894 -NCT00934102 -NCT00934258 -NCT00934271 -NCT00934388 -NCT00934479 -NCT00934596 -NCT00934713 -NCT00934752 -NCT00934830 -NCT00934960 -NCT00935129 -NCT00935311 -NCT00935584 -NCT00935649 -NCT00935779 -NCT00935792 -NCT00935896 -NCT00936273 -NCT00936312 -NCT00936325 -NCT00936338 -NCT00936429 -NCT00936585 -NCT00936728 -NCT00936741 -NCT00936767 -NCT00936793 -NCT00936806 -NCT00936845 -NCT00937092 -NCT00937131 -NCT00937144 -NCT00937274 -NCT00937287 -NCT00937547 -NCT00937638 -NCT00937690 -NCT00937898 -NCT00938184 -NCT00938301 -NCT00938483 -NCT00938535 -NCT00938626 -NCT00938860 -NCT00938925 -NCT00938977 -NCT00939107 -NCT00939120 -NCT00939211 -NCT00939419 -NCT00939523 -NCT00939536 -NCT00939549 -NCT00939640 -NCT00939653 -NCT00939679 -NCT00939692 -NCT00939770 -NCT00939822 -NCT00940082 -NCT00940238 -NCT00940342 -NCT00940433 -NCT00940654 -NCT00940810 -NCT00940836 -NCT00940927 -NCT00941070 -NCT00941174 -NCT00941343 -NCT00941369 -NCT00941551 -NCT00941616 -NCT00941681 -NCT00941746 -NCT00941928 -NCT00941941 -NCT00941993 -NCT00942006 -NCT00942019 -NCT00942227 -NCT00942409 -NCT00942591 -NCT00942630 -NCT00942812 -NCT00942851 -NCT00942955 -NCT00943033 -NCT00943059 -NCT00943267 -NCT00943280 -NCT00943358 -NCT00943514 -NCT00943527 -NCT00943631 -NCT00943644 -NCT00943657 -NCT00943722 -NCT00943748 -NCT00943774 -NCT00943865 -NCT00943878 -NCT00944216 -NCT00944567 -NCT00944671 -NCT00944879 -NCT00945009 -NCT00945022 -NCT00945061 -NCT00945334 -NCT00945373 -NCT00945412 -NCT00945581 -NCT00945685 -NCT00945750 -NCT00945880 -NCT00945919 -NCT00946010 -NCT00946023 -NCT00946101 -NCT00946114 -NCT00946192 -NCT00946400 -NCT00946816 -NCT00946842 -NCT00947037 -NCT00947193 -NCT00947219 -NCT00947271 -NCT00947453 -NCT00947479 -NCT00947505 -NCT00947765 -NCT00947882 -NCT00947960 -NCT00947986 -NCT00948012 -NCT00948142 -NCT00948220 -NCT00948259 -NCT00948376 -NCT00948402 -NCT00948506 -NCT00948766 -NCT00948779 -NCT00948922 -NCT00949169 -NCT00949208 -NCT00949416 -NCT00949598 -NCT00949637 -NCT00949741 -NCT00949975 -NCT00950170 -NCT00950183 -NCT00950261 -NCT00950326 -NCT00950482 -NCT00950625 -NCT00950651 -NCT00950677 -NCT00950690 -NCT00950768 -NCT00950781 -NCT00950989 -NCT00951119 -NCT00951145 -NCT00951223 -NCT00951405 -NCT00951431 -NCT00951522 -NCT00951730 -NCT00952146 -NCT00952185 -NCT00952354 -NCT00952692 -NCT00952731 -NCT00952744 -NCT00952770 -NCT00952965 -NCT00953043 -NCT00953316 -NCT00953394 -NCT00953420 -NCT00953511 -NCT00953667 -NCT00953771 -NCT00953914 -NCT00954005 -NCT00954031 -NCT00954070 -NCT00954174 -NCT00954226 -NCT00954291 -NCT00954356 -NCT00954382 -NCT00954421 -NCT00954434 -NCT00954629 -NCT00954707 -NCT00954798 -NCT00954850 -NCT00954889 -NCT00954928 -NCT00954993 -NCT00955019 -NCT00955045 -NCT00955149 -NCT00955370 -NCT00955422 -NCT00955500 -NCT00955669 -NCT00955838 -NCT00955981 -NCT00955994 -NCT00956033 -NCT00956150 -NCT00956215 -NCT00956306 -NCT00956358 -NCT00956397 -NCT00956501 -NCT00956696 -NCT00956748 -NCT00956839 -NCT00956982 -NCT00957086 -NCT00957281 -NCT00957359 -NCT00957645 -NCT00957788 -NCT00957840 -NCT00957866 -NCT00957879 -NCT00957892 -NCT00957918 -NCT00958113 -NCT00958139 -NCT00958204 -NCT00958256 -NCT00958360 -NCT00958438 -NCT00958542 -NCT00958737 -NCT00958750 -NCT00958763 -NCT00958776 -NCT00958802 -NCT00958919 -NCT00959049 -NCT00959283 -NCT00959491 -NCT00959621 -NCT00959751 -NCT00959764 -NCT00960011 -NCT00960167 -NCT00960245 -NCT00960635 -NCT00960661 -NCT00960934 -NCT00961012 -NCT00961467 -NCT00961558 -NCT00961623 -NCT00961701 -NCT00962039 -NCT00962065 -NCT00962169 -NCT00962221 -NCT00962299 -NCT00962338 -NCT00962390 -NCT00962637 -NCT00962936 -NCT00963001 -NCT00963027 -NCT00963040 -NCT00963157 -NCT00963339 -NCT00963417 -NCT00963690 -NCT00963729 -NCT00963755 -NCT00963937 -NCT00963950 -NCT00964210 -NCT00964223 -NCT00964535 -NCT00964821 -NCT00964951 -NCT00965276 -NCT00965289 -NCT00965315 -NCT00965341 -NCT00965354 -NCT00965575 -NCT00965627 -NCT00965679 -NCT00965770 -NCT00965835 -NCT00965848 -NCT00965913 -NCT00966004 -NCT00966017 -NCT00966264 -NCT00966342 -NCT00966381 -NCT00966459 -NCT00966498 -NCT00966576 -NCT00966589 -NCT00966693 -NCT00966719 -NCT00966901 -NCT00966940 -NCT00967070 -NCT00967174 -NCT00967317 -NCT00967473 -NCT00967499 -NCT00967759 -NCT00967811 -NCT00968214 -NCT00968240 -NCT00968357 -NCT00968370 -NCT00968396 -NCT00968500 -NCT00968695 -NCT00968747 -NCT00968760 -NCT00968786 -NCT00968890 -NCT00969020 -NCT00969072 -NCT00969085 -NCT00969124 -NCT00969280 -NCT00969319 -NCT00969462 -NCT00969501 -NCT00969579 -NCT00969969 -NCT00970047 -NCT00970086 -NCT00970190 -NCT00970502 -NCT00970541 -NCT00970567 -NCT00970658 -NCT00970697 -NCT00970801 -NCT00970866 -NCT00970983 -NCT00971035 -NCT00971074 -NCT00971165 -NCT00971334 -NCT00971438 -NCT00971555 -NCT00971737 -NCT00971750 -NCT00971763 -NCT00971776 -NCT00971958 -NCT00971971 -NCT00972101 -NCT00972218 -NCT00972231 -NCT00972296 -NCT00972309 -NCT00972530 -NCT00973063 -NCT00973154 -NCT00973219 -NCT00973336 -NCT00973362 -NCT00973661 -NCT00973674 -NCT00973895 -NCT00973908 -NCT00973999 -NCT00974363 -NCT00974480 -NCT00974532 -NCT00974558 -NCT00974636 -NCT00974727 -NCT00974831 -NCT00974883 -NCT00974935 -NCT00975013 -NCT00975078 -NCT00975130 -NCT00975143 -NCT00975156 -NCT00975208 -NCT00975403 -NCT00975442 -NCT00975546 -NCT00975585 -NCT00975650 -NCT00975728 -NCT00975741 -NCT00975793 -NCT00975819 -NCT00975884 -NCT00976040 -NCT00976313 -NCT00976443 -NCT00976547 -NCT00976560 -NCT00976573 -NCT00976586 -NCT00976599 -NCT00976625 -NCT00976677 -NCT00976781 -NCT00977054 -NCT00977080 -NCT00977093 -NCT00977236 -NCT00977353 -NCT00977366 -NCT00977392 -NCT00977470 -NCT00977730 -NCT00977821 -NCT00977847 -NCT00978042 -NCT00978159 -NCT00978237 -NCT00978354 -NCT00978419 -NCT00978458 -NCT00978549 -NCT00978627 -NCT00978679 -NCT00978861 -NCT00978939 -NCT00978991 -NCT00979043 -NCT00979108 -NCT00979160 -NCT00979212 -NCT00979589 -NCT00979602 -NCT00979628 -NCT00979719 -NCT00979758 -NCT00979836 -NCT00979914 -NCT00979979 -NCT00980161 -NCT00980174 -NCT00980187 -NCT00980785 -NCT00980798 -NCT00980954 -NCT00981032 -NCT00981045 -NCT00981071 -NCT00981136 -NCT00981201 -NCT00981305 -NCT00981370 -NCT00981461 -NCT00981552 -NCT00981604 -NCT00981656 -NCT00981695 -NCT00981708 -NCT00981734 -NCT00981851 -NCT00982007 -NCT00982124 -NCT00982228 -NCT00982332 -NCT00982540 -NCT00982579 -NCT00982605 -NCT00982787 -NCT00982800 -NCT00982839 -NCT00982852 -NCT00982891 -NCT00982904 -NCT00982969 -NCT00982995 -NCT00983437 -NCT00983489 -NCT00983502 -NCT00983554 -NCT00983697 -NCT00983749 -NCT00984100 -NCT00984191 -NCT00984243 -NCT00984334 -NCT00984659 -NCT00984828 -NCT00984893 -NCT00985010 -NCT00985088 -NCT00985309 -NCT00985413 -NCT00985504 -NCT00985803 -NCT00986180 -NCT00986765 -NCT00986882 -NCT00986973 -NCT00987012 -NCT00987077 -NCT00987116 -NCT00987194 -NCT00987350 -NCT00987389 -NCT00987805 -NCT00987831 -NCT00988065 -NCT00988078 -NCT00988143 -NCT00988260 -NCT00988351 -NCT00988442 -NCT00988468 -NCT00988559 -NCT00988572 -NCT00988741 -NCT00988949 -NCT00988975 -NCT00989196 -NCT00989222 -NCT00989443 -NCT00989508 -NCT00989547 -NCT00989612 -NCT00989625 -NCT00989651 -NCT00989677 -NCT00989716 -NCT00989794 -NCT00989859 -NCT00989898 -NCT00989976 -NCT00990132 -NCT00990223 -NCT00990379 -NCT00990652 -NCT00990808 -NCT00991146 -NCT00991159 -NCT00991406 -NCT00991601 -NCT00991731 -NCT00991874 -NCT00992017 -NCT00992277 -NCT00992433 -NCT00992693 -NCT00992836 -NCT00993252 -NCT00993265 -NCT00993356 -NCT00993408 -NCT00993447 -NCT00993551 -NCT00993707 -NCT00993902 -NCT00993915 -NCT00993928 -NCT00994045 -NCT00994175 -NCT00994214 -NCT00994552 -NCT00994656 -NCT00994851 -NCT00994929 -NCT00995007 -NCT00995020 -NCT00995059 -NCT00995098 -NCT00995150 -NCT00995163 -NCT00995215 -NCT00995306 -NCT00995527 -NCT00995722 -NCT00995774 -NCT00995813 -NCT00995826 -NCT00995891 -NCT00996112 -NCT00996424 -NCT00996632 -NCT00996697 -NCT00996710 -NCT00996801 -NCT00997100 -NCT00997269 -NCT00997412 -NCT00997425 -NCT00997490 -NCT00997516 -NCT00997581 -NCT00997828 -NCT00997854 -NCT00997867 -NCT00997958 -NCT00998244 -NCT00998322 -NCT00998335 -NCT00998465 -NCT00998621 -NCT00998725 -NCT00998868 -NCT00998920 -NCT00998985 -NCT00999050 -NCT00999219 -NCT00999284 -NCT00999310 -NCT00999427 -NCT00999518 -NCT00999557 -NCT01000090 -NCT01000116 -NCT01000181 -NCT01000272 -NCT01000701 -NCT01000779 -NCT01000857 -NCT01001390 -NCT01001598 -NCT01001793 -NCT01001858 -NCT01002066 -NCT01002417 -NCT01002443 -NCT01002664 -NCT01002755 -NCT01002781 -NCT01003002 -NCT01003054 -NCT01003106 -NCT01003145 -NCT01003223 -NCT01003249 -NCT01003262 -NCT01003379 -NCT01003509 -NCT01003548 -NCT01003639 -NCT01003886 -NCT01003951 -NCT01004081 -NCT01004484 -NCT01004510 -NCT01004835 -NCT01004874 -NCT01004887 -NCT01004965 -NCT01005017 -NCT01005095 -NCT01005147 -NCT01005303 -NCT01005381 -NCT01005433 -NCT01005563 -NCT01005589 -NCT01005849 -NCT01006265 -NCT01006330 -NCT01006343 -NCT01006408 -NCT01006447 -NCT01006941 -NCT01006993 -NCT01007162 -NCT01007266 -NCT01007318 -NCT01007331 -NCT01007474 -NCT01007565 -NCT01007656 -NCT01008007 -NCT01008163 -NCT01008397 -NCT01008462 -NCT01008488 -NCT01008501 -NCT01008696 -NCT01009099 -NCT01009255 -NCT01009294 -NCT01009437 -NCT01009450 -NCT01009463 -NCT01009723 -NCT01009840 -NCT01009970 -NCT01010061 -NCT01010074 -NCT01010113 -NCT01010126 -NCT01010152 -NCT01010165 -NCT01010321 -NCT01010451 -NCT01010711 -NCT01010802 -NCT01010841 -NCT01010854 -NCT01011010 -NCT01011257 -NCT01011270 -NCT01011322 -NCT01011426 -NCT01011517 -NCT01011543 -NCT01011647 -NCT01011777 -NCT01011803 -NCT01011816 -NCT01011894 -NCT01011933 -NCT01012037 -NCT01012271 -NCT01012349 -NCT01012739 -NCT01012804 -NCT01012882 -NCT01013207 -NCT01013337 -NCT01013480 -NCT01013493 -NCT01013597 -NCT01013636 -NCT01013714 -NCT01013792 -NCT01013883 -NCT01013909 -NCT01013948 -NCT01013961 -NCT01014013 -NCT01014026 -NCT01014156 -NCT01014169 -NCT01014221 -NCT01014312 -NCT01014390 -NCT01014520 -NCT01014559 -NCT01014624 -NCT01014715 -NCT01014767 -NCT01014819 -NCT01014871 -NCT01014897 -NCT01015378 -NCT01015417 -NCT01015430 -NCT01015625 -NCT01015677 -NCT01015690 -NCT01015755 -NCT01015820 -NCT01016093 -NCT01016106 -NCT01016353 -NCT01016366 -NCT01016418 -NCT01016600 -NCT01016652 -NCT01016678 -NCT01016691 -NCT01016743 -NCT01016782 -NCT01016964 -NCT01016977 -NCT01017120 -NCT01017146 -NCT01017354 -NCT01017510 -NCT01017952 -NCT01017965 -NCT01018160 -NCT01018173 -NCT01018381 -NCT01018485 -NCT01018511 -NCT01018680 -NCT01018706 -NCT01018836 -NCT01019070 -NCT01019083 -NCT01019109 -NCT01019122 -NCT01019213 -NCT01019226 -NCT01019239 -NCT01019343 -NCT01019486 -NCT01019499 -NCT01019616 -NCT01019889 -NCT01019928 -NCT01019980 -NCT01020071 -NCT01020136 -NCT01020279 -NCT01020331 -NCT01020370 -NCT01020513 -NCT01020682 -NCT01020721 -NCT01020916 -NCT01021137 -NCT01021267 -NCT01021280 -NCT01021579 -NCT01021852 -NCT01021891 -NCT01021982 -NCT01022099 -NCT01022268 -NCT01022385 -NCT01022398 -NCT01022476 -NCT01022619 -NCT01022632 -NCT01022645 -NCT01022827 -NCT01022905 -NCT01023113 -NCT01023191 -NCT01023217 -NCT01023308 -NCT01023347 -NCT01023490 -NCT01023516 -NCT01023867 -NCT01023880 -NCT01023971 -NCT01023984 -NCT01024010 -NCT01024088 -NCT01024270 -NCT01024959 -NCT01025076 -NCT01025128 -NCT01025505 -NCT01025518 -NCT01025583 -NCT01025622 -NCT01025635 -NCT01026012 -NCT01026181 -NCT01026207 -NCT01026220 -NCT01026493 -NCT01026532 -NCT01026571 -NCT01026584 -NCT01026675 -NCT01026870 -NCT01026935 -NCT01027039 -NCT01027156 -NCT01027182 -NCT01027195 -NCT01027286 -NCT01027325 -NCT01027429 -NCT01027494 -NCT01027559 -NCT01027663 -NCT01027793 -NCT01027819 -NCT01027884 -NCT01027975 -NCT01028040 -NCT01028235 -NCT01028287 -NCT01028352 -NCT01028365 -NCT01028378 -NCT01028456 -NCT01028469 -NCT01028651 -NCT01028677 -NCT01028989 -NCT01029093 -NCT01029275 -NCT01029301 -NCT01029340 -NCT01029392 -NCT01029444 -NCT01029561 -NCT01029587 -NCT01029626 -NCT01029639 -NCT01029652 -NCT01029691 -NCT01029704 -NCT01029834 -NCT01029860 -NCT01029873 -NCT01029912 -NCT01029990 -NCT01030081 -NCT01030107 -NCT01030211 -NCT01030380 -NCT01030393 -NCT01030445 -NCT01030614 -NCT01030653 -NCT01030861 -NCT01030900 -NCT01031043 -NCT01031121 -NCT01031238 -NCT01031342 -NCT01031407 -NCT01031576 -NCT01031589 -NCT01031641 -NCT01031654 -NCT01031680 -NCT01031732 -NCT01031875 -NCT01031992 -NCT01032252 -NCT01032434 -NCT01032590 -NCT01032603 -NCT01032694 -NCT01032928 -NCT01033175 -NCT01033227 -NCT01033266 -NCT01033643 -NCT01033773 -NCT01033903 -NCT01033916 -NCT01034046 -NCT01034280 -NCT01034306 -NCT01034371 -NCT01034384 -NCT01034397 -NCT01034631 -NCT01034657 -NCT01034995 -NCT01035099 -NCT01035177 -NCT01035268 -NCT01035567 -NCT01035983 -NCT01036230 -NCT01036841 -NCT01037309 -NCT01037335 -NCT01037400 -NCT01037452 -NCT01037530 -NCT01038219 -NCT01038245 -NCT01038427 -NCT01038518 -NCT01038609 -NCT01038869 -NCT01038960 -NCT01039103 -NCT01039545 -NCT01039675 -NCT01039688 -NCT01039909 -NCT01040026 -NCT01040039 -NCT01040052 -NCT01040065 -NCT01040286 -NCT01040299 -NCT01040338 -NCT01040377 -NCT01040416 -NCT01040455 -NCT01040481 -NCT01040533 -NCT01040598 -NCT01040611 -NCT01040650 -NCT01040663 -NCT01040845 -NCT01041001 -NCT01041040 -NCT01041079 -NCT01041105 -NCT01041222 -NCT01041261 -NCT01041430 -NCT01041625 -NCT01041755 -NCT01041950 -NCT01042171 -NCT01042548 -NCT01042613 -NCT01042860 -NCT01042912 -NCT01042951 -NCT01043198 -NCT01043367 -NCT01043588 -NCT01043601 -NCT01043627 -NCT01043822 -NCT01043848 -NCT01043978 -NCT01044043 -NCT01044173 -NCT01044264 -NCT01044628 -NCT01044797 -NCT01044953 -NCT01044992 -NCT01045109 -NCT01045499 -NCT01045525 -NCT01045551 -NCT01045616 -NCT01045655 -NCT01045668 -NCT01045681 -NCT01045694 -NCT01045759 -NCT01045824 -NCT01045876 -NCT01045902 -NCT01046006 -NCT01046032 -NCT01046123 -NCT01046279 -NCT01046331 -NCT01046552 -NCT01046591 -NCT01046643 -NCT01046656 -NCT01046734 -NCT01046812 -NCT01046825 -NCT01046838 -NCT01046877 -NCT01046981 -NCT01047059 -NCT01047085 -NCT01047111 -NCT01047163 -NCT01047332 -NCT01047358 -NCT01047397 -NCT01047462 -NCT01047501 -NCT01047553 -NCT01047683 -NCT01047709 -NCT01047761 -NCT01047787 -NCT01047800 -NCT01047826 -NCT01047878 -NCT01047930 -NCT01047956 -NCT01048021 -NCT01048112 -NCT01048177 -NCT01048385 -NCT01048450 -NCT01048502 -NCT01048541 -NCT01048580 -NCT01048632 -NCT01048697 -NCT01048749 -NCT01048788 -NCT01048827 -NCT01048892 -NCT01048931 -NCT01049074 -NCT01049191 -NCT01049412 -NCT01049464 -NCT01049750 -NCT01050088 -NCT01050114 -NCT01050361 -NCT01050465 -NCT01050478 -NCT01050530 -NCT01050582 -NCT01050998 -NCT01051076 -NCT01051297 -NCT01051310 -NCT01051427 -NCT01051544 -NCT01051570 -NCT01051726 -NCT01051869 -NCT01051895 -NCT01052207 -NCT01052272 -NCT01052285 -NCT01052311 -NCT01052428 -NCT01052532 -NCT01052597 -NCT01052623 -NCT01052636 -NCT01052792 -NCT01052870 -NCT01053026 -NCT01053065 -NCT01053156 -NCT01053182 -NCT01053286 -NCT01053312 -NCT01053364 -NCT01053416 -NCT01053442 -NCT01053481 -NCT01053533 -NCT01053572 -NCT01053598 -NCT01053754 -NCT01053923 -NCT01053949 -NCT01054105 -NCT01054131 -NCT01054157 -NCT01054196 -NCT01054274 -NCT01054378 -NCT01054417 -NCT01054443 -NCT01054599 -NCT01054690 -NCT01055041 -NCT01055249 -NCT01055301 -NCT01055405 -NCT01055548 -NCT01055821 -NCT01056003 -NCT01056055 -NCT01056107 -NCT01056172 -NCT01056198 -NCT01056315 -NCT01056367 -NCT01056406 -NCT01056419 -NCT01056445 -NCT01056692 -NCT01056718 -NCT01056913 -NCT01057173 -NCT01057199 -NCT01057225 -NCT01057641 -NCT01057732 -NCT01057771 -NCT01057836 -NCT01058070 -NCT01058161 -NCT01058434 -NCT01058629 -NCT01058681 -NCT01058733 -NCT01058824 -NCT01058863 -NCT01058876 -NCT01058941 -NCT01059123 -NCT01059227 -NCT01059279 -NCT01059396 -NCT01059422 -NCT01059526 -NCT01059643 -NCT01059682 -NCT01059708 -NCT01059968 -NCT01060046 -NCT01060215 -NCT01060228 -NCT01060293 -NCT01060436 -NCT01060722 -NCT01060956 -NCT01061268 -NCT01061281 -NCT01061294 -NCT01061476 -NCT01061918 -NCT01061957 -NCT01062087 -NCT01062126 -NCT01062230 -NCT01062256 -NCT01062308 -NCT01062373 -NCT01062451 -NCT01062568 -NCT01062659 -NCT01062789 -NCT01062893 -NCT01062945 -NCT01063179 -NCT01063205 -NCT01063387 -NCT01063530 -NCT01063556 -NCT01063569 -NCT01063673 -NCT01063790 -NCT01063868 -NCT01063907 -NCT01063920 -NCT01064011 -NCT01064128 -NCT01064245 -NCT01064284 -NCT01064401 -NCT01064661 -NCT01064726 -NCT01065090 -NCT01065233 -NCT01065454 -NCT01065649 -NCT01065675 -NCT01065753 -NCT01065831 -NCT01065935 -NCT01066013 -NCT01066052 -NCT01066091 -NCT01066169 -NCT01066208 -NCT01066221 -NCT01066338 -NCT01066507 -NCT01066572 -NCT01066676 -NCT01066871 -NCT01066936 -NCT01067014 -NCT01067352 -NCT01067365 -NCT01067456 -NCT01067469 -NCT01067508 -NCT01067755 -NCT01067768 -NCT01067937 -NCT01068054 -NCT01068184 -NCT01068236 -NCT01068288 -NCT01068314 -NCT01068366 -NCT01068405 -NCT01068444 -NCT01068938 -NCT01068964 -NCT01069055 -NCT01069172 -NCT01069289 -NCT01069536 -NCT01069887 -NCT01069900 -NCT01069991 -NCT01070056 -NCT01070160 -NCT01070173 -NCT01070277 -NCT01070628 -NCT01070875 -NCT01071161 -NCT01071200 -NCT01071447 -NCT01071655 -NCT01071694 -NCT01071733 -NCT01071928 -NCT01072084 -NCT01072149 -NCT01072409 -NCT01072526 -NCT01072630 -NCT01072682 -NCT01072929 -NCT01073241 -NCT01073319 -NCT01073527 -NCT01073605 -NCT01073709 -NCT01073722 -NCT01073982 -NCT01074008 -NCT01074203 -NCT01074216 -NCT01074307 -NCT01074359 -NCT01074476 -NCT01074502 -NCT01074554 -NCT01074645 -NCT01074658 -NCT01074671 -NCT01074736 -NCT01074775 -NCT01074801 -NCT01074827 -NCT01074853 -NCT01074957 -NCT01075087 -NCT01075269 -NCT01075282 -NCT01075295 -NCT01075321 -NCT01075334 -NCT01075438 -NCT01075672 -NCT01075711 -NCT01075815 -NCT01075841 -NCT01075880 -NCT01076179 -NCT01076426 -NCT01076439 -NCT01076699 -NCT01076712 -NCT01076842 -NCT01077076 -NCT01077115 -NCT01077154 -NCT01077193 -NCT01077245 -NCT01077336 -NCT01077401 -NCT01077583 -NCT01077856 -NCT01077895 -NCT01077921 -NCT01078103 -NCT01078246 -NCT01078298 -NCT01078324 -NCT01078389 -NCT01078467 -NCT01078545 -NCT01078636 -NCT01078649 -NCT01078857 -NCT01078883 -NCT01079000 -NCT01079078 -NCT01079130 -NCT01079143 -NCT01079494 -NCT01079520 -NCT01079546 -NCT01079559 -NCT01079572 -NCT01079650 -NCT01079845 -NCT01079871 -NCT01079949 -NCT01080131 -NCT01080196 -NCT01080404 -NCT01080456 -NCT01080469 -NCT01080482 -NCT01080534 -NCT01080560 -NCT01080586 -NCT01080690 -NCT01080703 -NCT01080781 -NCT01080807 -NCT01080924 -NCT01080950 -NCT01081015 -NCT01081093 -NCT01081262 -NCT01081704 -NCT01081756 -NCT01081782 -NCT01081912 -NCT01081964 -NCT01081977 -NCT01082029 -NCT01082094 -NCT01082107 -NCT01082211 -NCT01082354 -NCT01082419 -NCT01082627 -NCT01082770 -NCT01082900 -NCT01082913 -NCT01082926 -NCT01082965 -NCT01082978 -NCT01083316 -NCT01083485 -NCT01083550 -NCT01083602 -NCT01083667 -NCT01083693 -NCT01083745 -NCT01083888 -NCT01083979 -NCT01084239 -NCT01084343 -NCT01084369 -NCT01084525 -NCT01084837 -NCT01084941 -NCT01085110 -NCT01085201 -NCT01085253 -NCT01085318 -NCT01085409 -NCT01085448 -NCT01085474 -NCT01085487 -NCT01085500 -NCT01085513 -NCT01085591 -NCT01085604 -NCT01085721 -NCT01085799 -NCT01085825 -NCT01085864 -NCT01085903 -NCT01086007 -NCT01086046 -NCT01086384 -NCT01086540 -NCT01086605 -NCT01086748 -NCT01086878 -NCT01086982 -NCT01087034 -NCT01087203 -NCT01087320 -NCT01087333 -NCT01087619 -NCT01087892 -NCT01087957 -NCT01088061 -NCT01088230 -NCT01088308 -NCT01088373 -NCT01088412 -NCT01088438 -NCT01088763 -NCT01088971 -NCT01089140 -NCT01089218 -NCT01089335 -NCT01089374 -NCT01089387 -NCT01089491 -NCT01089686 -NCT01089816 -NCT01089881 -NCT01090050 -NCT01090193 -NCT01090219 -NCT01090284 -NCT01090375 -NCT01090466 -NCT01090596 -NCT01090674 -NCT01090882 -NCT01090921 -NCT01090934 -NCT01091051 -NCT01091064 -NCT01091077 -NCT01091142 -NCT01091493 -NCT01091558 -NCT01091597 -NCT01091662 -NCT01091714 -NCT01091805 -NCT01091883 -NCT01091987 -NCT01092182 -NCT01092247 -NCT01092351 -NCT01092546 -NCT01092585 -NCT01092624 -NCT01092780 -NCT01092897 -NCT01092910 -NCT01093027 -NCT01093066 -NCT01093196 -NCT01093222 -NCT01093365 -NCT01093378 -NCT01093521 -NCT01093573 -NCT01093768 -NCT01093859 -NCT01093950 -NCT01094288 -NCT01094301 -NCT01094379 -NCT01094431 -NCT01094470 -NCT01094561 -NCT01094704 -NCT01094808 -NCT01094912 -NCT01094964 -NCT01095133 -NCT01095198 -NCT01095328 -NCT01095458 -NCT01095471 -NCT01095627 -NCT01095744 -NCT01095822 -NCT01095913 -NCT01096134 -NCT01096238 -NCT01096290 -NCT01096316 -NCT01096342 -NCT01096446 -NCT01096472 -NCT01096524 -NCT01096615 -NCT01096719 -NCT01096927 -NCT01097109 -NCT01097265 -NCT01097330 -NCT01097356 -NCT01097369 -NCT01097525 -NCT01097616 -NCT01097629 -NCT01097707 -NCT01097798 -NCT01097811 -NCT01097993 -NCT01098162 -NCT01098201 -NCT01098240 -NCT01098331 -NCT01098383 -NCT01098656 -NCT01098708 -NCT01098747 -NCT01098890 -NCT01098942 -NCT01098981 -NCT01099033 -NCT01099046 -NCT01099085 -NCT01099163 -NCT01099241 -NCT01099423 -NCT01099592 -NCT01099618 -NCT01099657 -NCT01099696 -NCT01099709 -NCT01099761 -NCT01099852 -NCT01100021 -NCT01100073 -NCT01100086 -NCT01100320 -NCT01100398 -NCT01100424 -NCT01100489 -NCT01100528 -NCT01100632 -NCT01100645 -NCT01100684 -NCT01101035 -NCT01101048 -NCT01101087 -NCT01101113 -NCT01101165 -NCT01101204 -NCT01101282 -NCT01101308 -NCT01101321 -NCT01101438 -NCT01101451 -NCT01101503 -NCT01101581 -NCT01101646 -NCT01101659 -NCT01101724 -NCT01101841 -NCT01102023 -NCT01102179 -NCT01102192 -NCT01102205 -NCT01102309 -NCT01102361 -NCT01102426 -NCT01102621 -NCT01102907 -NCT01102985 -NCT01103024 -NCT01103037 -NCT01103206 -NCT01103232 -NCT01103284 -NCT01103375 -NCT01103557 -NCT01103635 -NCT01104051 -NCT01104389 -NCT01104428 -NCT01104610 -NCT01104649 -NCT01104727 -NCT01104805 -NCT01104987 -NCT01105013 -NCT01105039 -NCT01105052 -NCT01105065 -NCT01105156 -NCT01105221 -NCT01105312 -NCT01105390 -NCT01105520 -NCT01105546 -NCT01105676 -NCT01105858 -NCT01106313 -NCT01106443 -NCT01106521 -NCT01106859 -NCT01106885 -NCT01106924 -NCT01106976 -NCT01107067 -NCT01107093 -NCT01107119 -NCT01107197 -NCT01107522 -NCT01107743 -NCT01107769 -NCT01107860 -NCT01108029 -NCT01108068 -NCT01108185 -NCT01108211 -NCT01108341 -NCT01108380 -NCT01108406 -NCT01108588 -NCT01108783 -NCT01108835 -NCT01108991 -NCT01109004 -NCT01109121 -NCT01109199 -NCT01109212 -NCT01109277 -NCT01109329 -NCT01109420 -NCT01109446 -NCT01109472 -NCT01109537 -NCT01109576 -NCT01109602 -NCT01109667 -NCT01109771 -NCT01109849 -NCT01109901 -NCT01110135 -NCT01110200 -NCT01110265 -NCT01110330 -NCT01110421 -NCT01110447 -NCT01110694 -NCT01110733 -NCT01110837 -NCT01110850 -NCT01110876 -NCT01110928 -NCT01110941 -NCT01110993 -NCT01111019 -NCT01111253 -NCT01111526 -NCT01111656 -NCT01111812 -NCT01111929 -NCT01112007 -NCT01112098 -NCT01112215 -NCT01112228 -NCT01112345 -NCT01112540 -NCT01112592 -NCT01112618 -NCT01112631 -NCT01112657 -NCT01112683 -NCT01112891 -NCT01112982 -NCT01113034 -NCT01113255 -NCT01113268 -NCT01113320 -NCT01113333 -NCT01113385 -NCT01113710 -NCT01113905 -NCT01113918 -NCT01114113 -NCT01114139 -NCT01114165 -NCT01114243 -NCT01114269 -NCT01114282 -NCT01114360 -NCT01114373 -NCT01114386 -NCT01114581 -NCT01114633 -NCT01114698 -NCT01114711 -NCT01114815 -NCT01114828 -NCT01114867 -NCT01114932 -NCT01115244 -NCT01115270 -NCT01115283 -NCT01115335 -NCT01115361 -NCT01115452 -NCT01115686 -NCT01115751 -NCT01115985 -NCT01116037 -NCT01116063 -NCT01116102 -NCT01116115 -NCT01116167 -NCT01116206 -NCT01116245 -NCT01116323 -NCT01116336 -NCT01116362 -NCT01116414 -NCT01116466 -NCT01116687 -NCT01117012 -NCT01117025 -NCT01117142 -NCT01117337 -NCT01117506 -NCT01117558 -NCT01117818 -NCT01117831 -NCT01118065 -NCT01118221 -NCT01118338 -NCT01118507 -NCT01118585 -NCT01118624 -NCT01118988 -NCT01119105 -NCT01119443 -NCT01119482 -NCT01119521 -NCT01119547 -NCT01119599 -NCT01119664 -NCT01119742 -NCT01119833 -NCT01119898 -NCT01119976 -NCT01120197 -NCT01120236 -NCT01120249 -NCT01120340 -NCT01120574 -NCT01120600 -NCT01120626 -NCT01120795 -NCT01121107 -NCT01121263 -NCT01121432 -NCT01121484 -NCT01121497 -NCT01121731 -NCT01121900 -NCT01121926 -NCT01122147 -NCT01122160 -NCT01122303 -NCT01122342 -NCT01122381 -NCT01122459 -NCT01122472 -NCT01122485 -NCT01122524 -NCT01122732 -NCT01122797 -NCT01123005 -NCT01123044 -NCT01123096 -NCT01123109 -NCT01123161 -NCT01123369 -NCT01123486 -NCT01123512 -NCT01123603 -NCT01123928 -NCT01123941 -NCT01123954 -NCT01124136 -NCT01124357 -NCT01124591 -NCT01124656 -NCT01124669 -NCT01124682 -NCT01124994 -NCT01125124 -NCT01125176 -NCT01125215 -NCT01125241 -NCT01125267 -NCT01125345 -NCT01125488 -NCT01125683 -NCT01125709 -NCT01125774 -NCT01125813 -NCT01125930 -NCT01125969 -NCT01126177 -NCT01126281 -NCT01126307 -NCT01126671 -NCT01126684 -NCT01126905 -NCT01126931 -NCT01126944 -NCT01127061 -NCT01127464 -NCT01127659 -NCT01127698 -NCT01128010 -NCT01128101 -NCT01128192 -NCT01128257 -NCT01128517 -NCT01128556 -NCT01128608 -NCT01128660 -NCT01128712 -NCT01128881 -NCT01129063 -NCT01129128 -NCT01129167 -NCT01129180 -NCT01129375 -NCT01129453 -NCT01129492 -NCT01129518 -NCT01129544 -NCT01129726 -NCT01129765 -NCT01129934 -NCT01130012 -NCT01130038 -NCT01130181 -NCT01130194 -NCT01130311 -NCT01130402 -NCT01130597 -NCT01130701 -NCT01130857 -NCT01131052 -NCT01131104 -NCT01131117 -NCT01131169 -NCT01131234 -NCT01131312 -NCT01131403 -NCT01131468 -NCT01131494 -NCT01132092 -NCT01132105 -NCT01132144 -NCT01132170 -NCT01132378 -NCT01132534 -NCT01132677 -NCT01132703 -NCT01132846 -NCT01132859 -NCT01133132 -NCT01133158 -NCT01133327 -NCT01133509 -NCT01133522 -NCT01133535 -NCT01133548 -NCT01133795 -NCT01133834 -NCT01133873 -NCT01134198 -NCT01134237 -NCT01134432 -NCT01134484 -NCT01134536 -NCT01134627 -NCT01134692 -NCT01134796 -NCT01134848 -NCT01134991 -NCT01135004 -NCT01135030 -NCT01135069 -NCT01135199 -NCT01135329 -NCT01135342 -NCT01135368 -NCT01135615 -NCT01135628 -NCT01135836 -NCT01135849 -NCT01135979 -NCT01136291 -NCT01136304 -NCT01136369 -NCT01136421 -NCT01136460 -NCT01136577 -NCT01136980 -NCT01137097 -NCT01137149 -NCT01137162 -NCT01137591 -NCT01137682 -NCT01137929 -NCT01137955 -NCT01138007 -NCT01138241 -NCT01138423 -NCT01138449 -NCT01138501 -NCT01138566 -NCT01138592 -NCT01138644 -NCT01138761 -NCT01139294 -NCT01139437 -NCT01139580 -NCT01139710 -NCT01139736 -NCT01140074 -NCT01140217 -NCT01140373 -NCT01140516 -NCT01140581 -NCT01140685 -NCT01140789 -NCT01140841 -NCT01140867 -NCT01140906 -NCT01140945 -NCT01141023 -NCT01141244 -NCT01141465 -NCT01141751 -NCT01141881 -NCT01141946 -NCT01142011 -NCT01142089 -NCT01142219 -NCT01142232 -NCT01142245 -NCT01142336 -NCT01142466 -NCT01142505 -NCT01142531 -NCT01142973 -NCT01143012 -NCT01143142 -NCT01143363 -NCT01143389 -NCT01143428 -NCT01143441 -NCT01143480 -NCT01143493 -NCT01143558 -NCT01143818 -NCT01144039 -NCT01144052 -NCT01144078 -NCT01144351 -NCT01144377 -NCT01144650 -NCT01144702 -NCT01144910 -NCT01144936 -NCT01145040 -NCT01145066 -NCT01145209 -NCT01145274 -NCT01145300 -NCT01145482 -NCT01145508 -NCT01145612 -NCT01145716 -NCT01145781 -NCT01145833 -NCT01145924 -NCT01146002 -NCT01146132 -NCT01146483 -NCT01146535 -NCT01146587 -NCT01146613 -NCT01146678 -NCT01146704 -NCT01146782 -NCT01146977 -NCT01147042 -NCT01147107 -NCT01147263 -NCT01147328 -NCT01147432 -NCT01147445 -NCT01147458 -NCT01147562 -NCT01147926 -NCT01148121 -NCT01148199 -NCT01148420 -NCT01148433 -NCT01148472 -NCT01148654 -NCT01148888 -NCT01148979 -NCT01149161 -NCT01149356 -NCT01149395 -NCT01149421 -NCT01149434 -NCT01149447 -NCT01149577 -NCT01149629 -NCT01149694 -NCT01149707 -NCT01149733 -NCT01149746 -NCT01149811 -NCT01149876 -NCT01150006 -NCT01150045 -NCT01150071 -NCT01150084 -NCT01150149 -NCT01150162 -NCT01150175 -NCT01150266 -NCT01150292 -NCT01150305 -NCT01150318 -NCT01150539 -NCT01150591 -NCT01150721 -NCT01150786 -NCT01150916 -NCT01151111 -NCT01151124 -NCT01151150 -NCT01151163 -NCT01151202 -NCT01151280 -NCT01151566 -NCT01151605 -NCT01151631 -NCT01151709 -NCT01151787 -NCT01152073 -NCT01152398 -NCT01152476 -NCT01152580 -NCT01152606 -NCT01152853 -NCT01152892 -NCT01152970 -NCT01153204 -NCT01153243 -NCT01153256 -NCT01153373 -NCT01153386 -NCT01153425 -NCT01153568 -NCT01153685 -NCT01154166 -NCT01154361 -NCT01154413 -NCT01154452 -NCT01154517 -NCT01154712 -NCT01154764 -NCT01154790 -NCT01154842 -NCT01154998 -NCT01155115 -NCT01155180 -NCT01155232 -NCT01155245 -NCT01155271 -NCT01155323 -NCT01155492 -NCT01155518 -NCT01155557 -NCT01156311 -NCT01156441 -NCT01156454 -NCT01156519 -NCT01156558 -NCT01156584 -NCT01156610 -NCT01156623 -NCT01156636 -NCT01156675 -NCT01156688 -NCT01156818 -NCT01156844 -NCT01157156 -NCT01157325 -NCT01157338 -NCT01157390 -NCT01157572 -NCT01157728 -NCT01157819 -NCT01157832 -NCT01157923 -NCT01157975 -NCT01158053 -NCT01158092 -NCT01158157 -NCT01158248 -NCT01158274 -NCT01158313 -NCT01158326 -NCT01158352 -NCT01158378 -NCT01158456 -NCT01158495 -NCT01158508 -NCT01158573 -NCT01158625 -NCT01158742 -NCT01158794 -NCT01158807 -NCT01158885 -NCT01159093 -NCT01159119 -NCT01159431 -NCT01159470 -NCT01159587 -NCT01159613 -NCT01159678 -NCT01159808 -NCT01159860 -NCT01160146 -NCT01160263 -NCT01160328 -NCT01160341 -NCT01160536 -NCT01160627 -NCT01160822 -NCT01160848 -NCT01161108 -NCT01161641 -NCT01161823 -NCT01161966 -NCT01161979 -NCT01162057 -NCT01162304 -NCT01162447 -NCT01162460 -NCT01162863 -NCT01162915 -NCT01163019 -NCT01163032 -NCT01163214 -NCT01163240 -NCT01163253 -NCT01163357 -NCT01163435 -NCT01163617 -NCT01163760 -NCT01163773 -NCT01163851 -NCT01163955 -NCT01163994 -NCT01164163 -NCT01164176 -NCT01164189 -NCT01164241 -NCT01164384 -NCT01164553 -NCT01164683 -NCT01164748 -NCT01165008 -NCT01165268 -NCT01165281 -NCT01165307 -NCT01165476 -NCT01165489 -NCT01165528 -NCT01165619 -NCT01165697 -NCT01165749 -NCT01165827 -NCT01165983 -NCT01166152 -NCT01166178 -NCT01166412 -NCT01166451 -NCT01166854 -NCT01166906 -NCT01166932 -NCT01166958 -NCT01167101 -NCT01167218 -NCT01167270 -NCT01167361 -NCT01167426 -NCT01167465 -NCT01167491 -NCT01167673 -NCT01167686 -NCT01167829 -NCT01167894 -NCT01167907 -NCT01167933 -NCT01168050 -NCT01168154 -NCT01168180 -NCT01168388 -NCT01168401 -NCT01168544 -NCT01168674 -NCT01168713 -NCT01168895 -NCT01168908 -NCT01169038 -NCT01169077 -NCT01169103 -NCT01169129 -NCT01169155 -NCT01169181 -NCT01169597 -NCT01169714 -NCT01169740 -NCT01169961 -NCT01170039 -NCT01170169 -NCT01170182 -NCT01170234 -NCT01170364 -NCT01170390 -NCT01170429 -NCT01170494 -NCT01170559 -NCT01170780 -NCT01170884 -NCT01170962 -NCT01171196 -NCT01171222 -NCT01171378 -NCT01171430 -NCT01171638 -NCT01171846 -NCT01171976 -NCT01171989 -NCT01172184 -NCT01172223 -NCT01172249 -NCT01172379 -NCT01172509 -NCT01172535 -NCT01172587 -NCT01172600 -NCT01172925 -NCT01173003 -NCT01173068 -NCT01173198 -NCT01173224 -NCT01173289 -NCT01173432 -NCT01173575 -NCT01174056 -NCT01174186 -NCT01174381 -NCT01174446 -NCT01174550 -NCT01174836 -NCT01174901 -NCT01175005 -NCT01175031 -NCT01175174 -NCT01175239 -NCT01175382 -NCT01175395 -NCT01175538 -NCT01175655 -NCT01175798 -NCT01175876 -NCT01175993 -NCT01176240 -NCT01176435 -NCT01176513 -NCT01176565 -NCT01176708 -NCT01176747 -NCT01176760 -NCT01176773 -NCT01176994 -NCT01177163 -NCT01177371 -NCT01177436 -NCT01177683 -NCT01177800 -NCT01177891 -NCT01177969 -NCT01178008 -NCT01178086 -NCT01178294 -NCT01178372 -NCT01178463 -NCT01178736 -NCT01178788 -NCT01178853 -NCT01178892 -NCT01178918 -NCT01178957 -NCT01178996 -NCT01179139 -NCT01179152 -NCT01179217 -NCT01179334 -NCT01179464 -NCT01179672 -NCT01179685 -NCT01179893 -NCT01180660 -NCT01180686 -NCT01180725 -NCT01180790 -NCT01180803 -NCT01180816 -NCT01180855 -NCT01180946 -NCT01180959 -NCT01180998 -NCT01181128 -NCT01181323 -NCT01181336 -NCT01181440 -NCT01181453 -NCT01181479 -NCT01181570 -NCT01181596 -NCT01181804 -NCT01181830 -NCT01181869 -NCT01182051 -NCT01182129 -NCT01182272 -NCT01182298 -NCT01182584 -NCT01182688 -NCT01182805 -NCT01182844 -NCT01182974 -NCT01182987 -NCT01183299 -NCT01183533 -NCT01183611 -NCT01183624 -NCT01183650 -NCT01183663 -NCT01183741 -NCT01183767 -NCT01183806 -NCT01183858 -NCT01184027 -NCT01184144 -NCT01184196 -NCT01184209 -NCT01184248 -NCT01184378 -NCT01184417 -NCT01184456 -NCT01184651 -NCT01184703 -NCT01184989 -NCT01185028 -NCT01185054 -NCT01185444 -NCT01185509 -NCT01185665 -NCT01185704 -NCT01185730 -NCT01186068 -NCT01186185 -NCT01186237 -NCT01186406 -NCT01186822 -NCT01186835 -NCT01186913 -NCT01187043 -NCT01187524 -NCT01187550 -NCT01187784 -NCT01187927 -NCT01188096 -NCT01188161 -NCT01188473 -NCT01188733 -NCT01188837 -NCT01189123 -NCT01189240 -NCT01189331 -NCT01189344 -NCT01189643 -NCT01189734 -NCT01189786 -NCT01190007 -NCT01190098 -NCT01190150 -NCT01190280 -NCT01190332 -NCT01190657 -NCT01190904 -NCT01190930 -NCT01191034 -NCT01191190 -NCT01191229 -NCT01191294 -NCT01191502 -NCT01191528 -NCT01191671 -NCT01191749 -NCT01191853 -NCT01192048 -NCT01192100 -NCT01192113 -NCT01192204 -NCT01192269 -NCT01192373 -NCT01192399 -NCT01192958 -NCT01193270 -NCT01193348 -NCT01193361 -NCT01193439 -NCT01193478 -NCT01193673 -NCT01193803 -NCT01193998 -NCT01194089 -NCT01194362 -NCT01194661 -NCT01194687 -NCT01194869 -NCT01194973 -NCT01194986 -NCT01195064 -NCT01195090 -NCT01195142 -NCT01195181 -NCT01195220 -NCT01195285 -NCT01195428 -NCT01195454 -NCT01195532 -NCT01195545 -NCT01195610 -NCT01195701 -NCT01196117 -NCT01196156 -NCT01196221 -NCT01196273 -NCT01196416 -NCT01196507 -NCT01196572 -NCT01196585 -NCT01196650 -NCT01196663 -NCT01196845 -NCT01197040 -NCT01197183 -NCT01197196 -NCT01197287 -NCT01197794 -NCT01197885 -NCT01198509 -NCT01198587 -NCT01198626 -NCT01198782 -NCT01198834 -NCT01198899 -NCT01199250 -NCT01199406 -NCT01199614 -NCT01199640 -NCT01199666 -NCT01199718 -NCT01199757 -NCT01199835 -NCT01200017 -NCT01200069 -NCT01200082 -NCT01200147 -NCT01200277 -NCT01200537 -NCT01200576 -NCT01200589 -NCT01200706 -NCT01200732 -NCT01200823 -NCT01200862 -NCT01200940 -NCT01200966 -NCT01201213 -NCT01201343 -NCT01201551 -NCT01201603 -NCT01201616 -NCT01201629 -NCT01201642 -NCT01201733 -NCT01201863 -NCT01201941 -NCT01201993 -NCT01202227 -NCT01202448 -NCT01202487 -NCT01202513 -NCT01202630 -NCT01202643 -NCT01202721 -NCT01202760 -NCT01202864 -NCT01202981 -NCT01203046 -NCT01203410 -NCT01203423 -NCT01203436 -NCT01203449 -NCT01203462 -NCT01203566 -NCT01203579 -NCT01203618 -NCT01203722 -NCT01203839 -NCT01203930 -NCT01204060 -NCT01204151 -NCT01204164 -NCT01204255 -NCT01204437 -NCT01204593 -NCT01204736 -NCT01204775 -NCT01204788 -NCT01204931 -NCT01205256 -NCT01205308 -NCT01205490 -NCT01205880 -NCT01206010 -NCT01206062 -NCT01206270 -NCT01206296 -NCT01206335 -NCT01206413 -NCT01206491 -NCT01206556 -NCT01206621 -NCT01206686 -NCT01207050 -NCT01207193 -NCT01207258 -NCT01207440 -NCT01207609 -NCT01207661 -NCT01207739 -NCT01207765 -NCT01207778 -NCT01207908 -NCT01208025 -NCT01208038 -NCT01208077 -NCT01208220 -NCT01208259 -NCT01208272 -NCT01208519 -NCT01208792 -NCT01208818 -NCT01208922 -NCT01209000 -NCT01209273 -NCT01209364 -NCT01209507 -NCT01209572 -NCT01209585 -NCT01209988 -NCT01210014 -NCT01210066 -NCT01210144 -NCT01210235 -NCT01210248 -NCT01210326 -NCT01210365 -NCT01210430 -NCT01210534 -NCT01210599 -NCT01210742 -NCT01210937 -NCT01211054 -NCT01211145 -NCT01211158 -NCT01211379 -NCT01211392 -NCT01211613 -NCT01211977 -NCT01211990 -NCT01212016 -NCT01212068 -NCT01212380 -NCT01212484 -NCT01212549 -NCT01212614 -NCT01212809 -NCT01212900 -NCT01213017 -NCT01213056 -NCT01213147 -NCT01213277 -NCT01213290 -NCT01213446 -NCT01213459 -NCT01213875 -NCT01213888 -NCT01213927 -NCT01214070 -NCT01214109 -NCT01214200 -NCT01214330 -NCT01214408 -NCT01214707 -NCT01215123 -NCT01215136 -NCT01215162 -NCT01215266 -NCT01215292 -NCT01215344 -NCT01215383 -NCT01215422 -NCT01215448 -NCT01215617 -NCT01215890 -NCT01215981 -NCT01216111 -NCT01216163 -NCT01216215 -NCT01216514 -NCT01216631 -NCT01216644 -NCT01216683 -NCT01216956 -NCT01217060 -NCT01217437 -NCT01217567 -NCT01217658 -NCT01217749 -NCT01217801 -NCT01217957 -NCT01218048 -NCT01218087 -NCT01218139 -NCT01218178 -NCT01218217 -NCT01218386 -NCT01218542 -NCT01218568 -NCT01218581 -NCT01218607 -NCT01218646 -NCT01218672 -NCT01218737 -NCT01218789 -NCT01218919 -NCT01219543 -NCT01219699 -NCT01220024 -NCT01220050 -NCT01220141 -NCT01220167 -NCT01220336 -NCT01220349 -NCT01220362 -NCT01220505 -NCT01220635 -NCT01220739 -NCT01220973 -NCT01221181 -NCT01221233 -NCT01221441 -NCT01221467 -NCT01221753 -NCT01221883 -NCT01221935 -NCT01222026 -NCT01222065 -NCT01222130 -NCT01222195 -NCT01222221 -NCT01222338 -NCT01222650 -NCT01222689 -NCT01222702 -NCT01222884 -NCT01222897 -NCT01222910 -NCT01223092 -NCT01223144 -NCT01223261 -NCT01223287 -NCT01223300 -NCT01223313 -NCT01223560 -NCT01223638 -NCT01223716 -NCT01223807 -NCT01223885 -NCT01224041 -NCT01224145 -NCT01224301 -NCT01224418 -NCT01224483 -NCT01224496 -NCT01224678 -NCT01224691 -NCT01224704 -NCT01224795 -NCT01224808 -NCT01224912 -NCT01224990 -NCT01225029 -NCT01225211 -NCT01225237 -NCT01225263 -NCT01225289 -NCT01225354 -NCT01225445 -NCT01225640 -NCT01225679 -NCT01225822 -NCT01225913 -NCT01226186 -NCT01226342 -NCT01226368 -NCT01226381 -NCT01226498 -NCT01226524 -NCT01226537 -NCT01226654 -NCT01226693 -NCT01226758 -NCT01226797 -NCT01226992 -NCT01227083 -NCT01227109 -NCT01227135 -NCT01227187 -NCT01227317 -NCT01227499 -NCT01227863 -NCT01227980 -NCT01228071 -NCT01228240 -NCT01228331 -NCT01228929 -NCT01229007 -NCT01229111 -NCT01229566 -NCT01229683 -NCT01229774 -NCT01229995 -NCT01230177 -NCT01230424 -NCT01230554 -NCT01230593 -NCT01230619 -NCT01230658 -NCT01230879 -NCT01230905 -NCT01230918 -NCT01230957 -NCT01231074 -NCT01231113 -NCT01231230 -NCT01231724 -NCT01231737 -NCT01231919 -NCT01231945 -NCT01231971 -NCT01232075 -NCT01232140 -NCT01232504 -NCT01232582 -NCT01232595 -NCT01232634 -NCT01232738 -NCT01232829 -NCT01232842 -NCT01232868 -NCT01232959 -NCT01233258 -NCT01233362 -NCT01233427 -NCT01233713 -NCT01233778 -NCT01233895 -NCT01234545 -NCT01234753 -NCT01234883 -NCT01235091 -NCT01235182 -NCT01235741 -NCT01235832 -NCT01235845 -NCT01235910 -NCT01236027 -NCT01236040 -NCT01236365 -NCT01236508 -NCT01236534 -NCT01236560 -NCT01236742 -NCT01236755 -NCT01236768 -NCT01236833 -NCT01237041 -NCT01237054 -NCT01237106 -NCT01237262 -NCT01237470 -NCT01237756 -NCT01237860 -NCT01237912 -NCT01238003 -NCT01238081 -NCT01238354 -NCT01238419 -NCT01238471 -NCT01238536 -NCT01238731 -NCT01238835 -NCT01238900 -NCT01239004 -NCT01239147 -NCT01239251 -NCT01239368 -NCT01239407 -NCT01239550 -NCT01239810 -NCT01239823 -NCT01239966 -NCT01240070 -NCT01240083 -NCT01240356 -NCT01240434 -NCT01240499 -NCT01240590 -NCT01240616 -NCT01240694 -NCT01240707 -NCT01240811 -NCT01240876 -NCT01240902 -NCT01240954 -NCT01241019 -NCT01241110 -NCT01241149 -NCT01241227 -NCT01241305 -NCT01241448 -NCT01241552 -NCT01241604 -NCT01241708 -NCT01241799 -NCT01241825 -NCT01241968 -NCT01241994 -NCT01242007 -NCT01242033 -NCT01242046 -NCT01242267 -NCT01242397 -NCT01242540 -NCT01242553 -NCT01242878 -NCT01243060 -NCT01243125 -NCT01243333 -NCT01243515 -NCT01243645 -NCT01243853 -NCT01243892 -NCT01243996 -NCT01244152 -NCT01244230 -NCT01244243 -NCT01244347 -NCT01244503 -NCT01244516 -NCT01244529 -NCT01244711 -NCT01244724 -NCT01244945 -NCT01245023 -NCT01245036 -NCT01245179 -NCT01245296 -NCT01245608 -NCT01245712 -NCT01245751 -NCT01245985 -NCT01246128 -NCT01246141 -NCT01246219 -NCT01246336 -NCT01246544 -NCT01246739 -NCT01246947 -NCT01247194 -NCT01247415 -NCT01247779 -NCT01247857 -NCT01247961 -NCT01248208 -NCT01248247 -NCT01248416 -NCT01248455 -NCT01248819 -NCT01249040 -NCT01249222 -NCT01249235 -NCT01249300 -NCT01249391 -NCT01249443 -NCT01249482 -NCT01249651 -NCT01249677 -NCT01249859 -NCT01249911 -NCT01250067 -NCT01250288 -NCT01250314 -NCT01250340 -NCT01250405 -NCT01250509 -NCT01250535 -NCT01250574 -NCT01250613 -NCT01250756 -NCT01250912 -NCT01251120 -NCT01251172 -NCT01251263 -NCT01251328 -NCT01251354 -NCT01251432 -NCT01251484 -NCT01251822 -NCT01251861 -NCT01251900 -NCT01251965 -NCT01252108 -NCT01252199 -NCT01252225 -NCT01252329 -NCT01252472 -NCT01252602 -NCT01252719 -NCT01252732 -NCT01252745 -NCT01252771 -NCT01252823 -NCT01252875 -NCT01253018 -NCT01253135 -NCT01253278 -NCT01253356 -NCT01253408 -NCT01253460 -NCT01253512 -NCT01253590 -NCT01253629 -NCT01253668 -NCT01253733 -NCT01254019 -NCT01254032 -NCT01254045 -NCT01254071 -NCT01254162 -NCT01254175 -NCT01254201 -NCT01254578 -NCT01254669 -NCT01254682 -NCT01254851 -NCT01254929 -NCT01254994 -NCT01255163 -NCT01255228 -NCT01255397 -NCT01255410 -NCT01255514 -NCT01255761 -NCT01255852 -NCT01256112 -NCT01256177 -NCT01256229 -NCT01256281 -NCT01256554 -NCT01256619 -NCT01256944 -NCT01257048 -NCT01257126 -NCT01257152 -NCT01257178 -NCT01257191 -NCT01257243 -NCT01257269 -NCT01257295 -NCT01257308 -NCT01257438 -NCT01257451 -NCT01257503 -NCT01257542 -NCT01257607 -NCT01257763 -NCT01257828 -NCT01257867 -NCT01257880 -NCT01257945 -NCT01258101 -NCT01258114 -NCT01258257 -NCT01258322 -NCT01258413 -NCT01258543 -NCT01258829 -NCT01258933 -NCT01258985 -NCT01259037 -NCT01259141 -NCT01259167 -NCT01259180 -NCT01259219 -NCT01259245 -NCT01259336 -NCT01259440 -NCT01259531 -NCT01259674 -NCT01259765 -NCT01259856 -NCT01260064 -NCT01260077 -NCT01260116 -NCT01260129 -NCT01260389 -NCT01260532 -NCT01260623 -NCT01260727 -NCT01260740 -NCT01260805 -NCT01260883 -NCT01261000 -NCT01261026 -NCT01261039 -NCT01261234 -NCT01261260 -NCT01261325 -NCT01261377 -NCT01261442 -NCT01261546 -NCT01261754 -NCT01261884 -NCT01261936 -NCT01262209 -NCT01262612 -NCT01263119 -NCT01263132 -NCT01263301 -NCT01263314 -NCT01263340 -NCT01263366 -NCT01263392 -NCT01263613 -NCT01263626 -NCT01263639 -NCT01263665 -NCT01263691 -NCT01263704 -NCT01264003 -NCT01264055 -NCT01264120 -NCT01264172 -NCT01264315 -NCT01264406 -NCT01264419 -NCT01264510 -NCT01264926 -NCT01264991 -NCT01265082 -NCT01265160 -NCT01265186 -NCT01265264 -NCT01265290 -NCT01265342 -NCT01265355 -NCT01265381 -NCT01265459 -NCT01265550 -NCT01265628 -NCT01265966 -NCT01266148 -NCT01266317 -NCT01266369 -NCT01266525 -NCT01266642 -NCT01266694 -NCT01266759 -NCT01266824 -NCT01266902 -NCT01266915 -NCT01267383 -NCT01267396 -NCT01267448 -NCT01267461 -NCT01267513 -NCT01267539 -NCT01267643 -NCT01267669 -NCT01267864 -NCT01267903 -NCT01267994 -NCT01268007 -NCT01268072 -NCT01268280 -NCT01268410 -NCT01268501 -NCT01268709 -NCT01268735 -NCT01268748 -NCT01268774 -NCT01268891 -NCT01268969 -NCT01269008 -NCT01269047 -NCT01269138 -NCT01269320 -NCT01269437 -NCT01269528 -NCT01269554 -NCT01269697 -NCT01269749 -NCT01269775 -NCT01269788 -NCT01269879 -NCT01269892 -NCT01269931 -NCT01269996 -NCT01270139 -NCT01270191 -NCT01270204 -NCT01270425 -NCT01270516 -NCT01270581 -NCT01270750 -NCT01270841 -NCT01270919 -NCT01271088 -NCT01271296 -NCT01271335 -NCT01271439 -NCT01271530 -NCT01272011 -NCT01272037 -NCT01272310 -NCT01272388 -NCT01272414 -NCT01272505 -NCT01272674 -NCT01272713 -NCT01272778 -NCT01273025 -NCT01273064 -NCT01273090 -NCT01273103 -NCT01273129 -NCT01273207 -NCT01273272 -NCT01273350 -NCT01273584 -NCT01273688 -NCT01273818 -NCT01273883 -NCT01273948 -NCT01273974 -NCT01274000 -NCT01274013 -NCT01274104 -NCT01274260 -NCT01274312 -NCT01274338 -NCT01274364 -NCT01274507 -NCT01274637 -NCT01274676 -NCT01274793 -NCT01275118 -NCT01275235 -NCT01275274 -NCT01275287 -NCT01275339 -NCT01275677 -NCT01275690 -NCT01276041 -NCT01276093 -NCT01276106 -NCT01276171 -NCT01276249 -NCT01276392 -NCT01276600 -NCT01276639 -NCT01276678 -NCT01276717 -NCT01276730 -NCT01276782 -NCT01276886 -NCT01276964 -NCT01276977 -NCT01277107 -NCT01277159 -NCT01277198 -NCT01277315 -NCT01277380 -NCT01277510 -NCT01277731 -NCT01277744 -NCT01277796 -NCT01277861 -NCT01277939 -NCT01278017 -NCT01278056 -NCT01278212 -NCT01278329 -NCT01278342 -NCT01278394 -NCT01278420 -NCT01278446 -NCT01279122 -NCT01279369 -NCT01279421 -NCT01279473 -NCT01279590 -NCT01279616 -NCT01279668 -NCT01279733 -NCT01279811 -NCT01279863 -NCT01279876 -NCT01280292 -NCT01280461 -NCT01280474 -NCT01280500 -NCT01280695 -NCT01280864 -NCT01280877 -NCT01280981 -NCT01280994 -NCT01281033 -NCT01281059 -NCT01281189 -NCT01281358 -NCT01281709 -NCT01281722 -NCT01281748 -NCT01281826 -NCT01281943 -NCT01281956 -NCT01282164 -NCT01282268 -NCT01282398 -NCT01283009 -NCT01283061 -NCT01283152 -NCT01283269 -NCT01283321 -NCT01283334 -NCT01283646 -NCT01283698 -NCT01283763 -NCT01283815 -NCT01283958 -NCT01284426 -NCT01284504 -NCT01284556 -NCT01284647 -NCT01284673 -NCT01284855 -NCT01284894 -NCT01284933 -NCT01284946 -NCT01284985 -NCT01285063 -NCT01285089 -NCT01285193 -NCT01285245 -NCT01285310 -NCT01285349 -NCT01285427 -NCT01285440 -NCT01285557 -NCT01285583 -NCT01285674 -NCT01286012 -NCT01286181 -NCT01286194 -NCT01286272 -NCT01286324 -NCT01286389 -NCT01286480 -NCT01286610 -NCT01286727 -NCT01286753 -NCT01286883 -NCT01287052 -NCT01287078 -NCT01287130 -NCT01287143 -NCT01287286 -NCT01287351 -NCT01287429 -NCT01287663 -NCT01287702 -NCT01287728 -NCT01288053 -NCT01288287 -NCT01288352 -NCT01288443 -NCT01288534 -NCT01288612 -NCT01288651 -NCT01288742 -NCT01288768 -NCT01289015 -NCT01289093 -NCT01289314 -NCT01289327 -NCT01289470 -NCT01289574 -NCT01289613 -NCT01289652 -NCT01289808 -NCT01289834 -NCT01289860 -NCT01290250 -NCT01290341 -NCT01290588 -NCT01290640 -NCT01290757 -NCT01290822 -NCT01290887 -NCT01291225 -NCT01291238 -NCT01291680 -NCT01291849 -NCT01292031 -NCT01292057 -NCT01292135 -NCT01292161 -NCT01292187 -NCT01292213 -NCT01292863 -NCT01292889 -NCT01293006 -NCT01293032 -NCT01293045 -NCT01293084 -NCT01293110 -NCT01293162 -NCT01293279 -NCT01293292 -NCT01293318 -NCT01293552 -NCT01293721 -NCT01293968 -NCT01294046 -NCT01294150 -NCT01294306 -NCT01294319 -NCT01294787 -NCT01294800 -NCT01294852 -NCT01294865 -NCT01294917 -NCT01295047 -NCT01295060 -NCT01295138 -NCT01295229 -NCT01295385 -NCT01295593 -NCT01295645 -NCT01295801 -NCT01295905 -NCT01295918 -NCT01295957 -NCT01295970 -NCT01296022 -NCT01296087 -NCT01296529 -NCT01297023 -NCT01297270 -NCT01297647 -NCT01297725 -NCT01297777 -NCT01297790 -NCT01297881 -NCT01297946 -NCT01298336 -NCT01298375 -NCT01298765 -NCT01298882 -NCT01298921 -NCT01299012 -NCT01299090 -NCT01299220 -NCT01299493 -NCT01299714 -NCT01299948 -NCT01300182 -NCT01300221 -NCT01300546 -NCT01300585 -NCT01300637 -NCT01300923 -NCT01300949 -NCT01300975 -NCT01301144 -NCT01301183 -NCT01301235 -NCT01301248 -NCT01301417 -NCT01301469 -NCT01301495 -NCT01301677 -NCT01301690 -NCT01301703 -NCT01301755 -NCT01301781 -NCT01302353 -NCT01302535 -NCT01302561 -NCT01302756 -NCT01302769 -NCT01303159 -NCT01303211 -NCT01303224 -NCT01303380 -NCT01303705 -NCT01303757 -NCT01304017 -NCT01304459 -NCT01304524 -NCT01304758 -NCT01304875 -NCT01304927 -NCT01304940 -NCT01305148 -NCT01305460 -NCT01305681 -NCT01305759 -NCT01305772 -NCT01306019 -NCT01306084 -NCT01306266 -NCT01306331 -NCT01306370 -NCT01306383 -NCT01306448 -NCT01306500 -NCT01306591 -NCT01306604 -NCT01306656 -NCT01306721 -NCT01307007 -NCT01307020 -NCT01307449 -NCT01307462 -NCT01307540 -NCT01307722 -NCT01307904 -NCT01307930 -NCT01307982 -NCT01308112 -NCT01308346 -NCT01308463 -NCT01308580 -NCT01308827 -NCT01309048 -NCT01309399 -NCT01309425 -NCT01309477 -NCT01309516 -NCT01309529 -NCT01309568 -NCT01309672 -NCT01309737 -NCT01309750 -NCT01309919 -NCT01310140 -NCT01310166 -NCT01310322 -NCT01310491 -NCT01310530 -NCT01310556 -NCT01310673 -NCT01311089 -NCT01311102 -NCT01311219 -NCT01311232 -NCT01311271 -NCT01311323 -NCT01311375 -NCT01311440 -NCT01311648 -NCT01311752 -NCT01311895 -NCT01311960 -NCT01311973 -NCT01311986 -NCT01312012 -NCT01312025 -NCT01312038 -NCT01312090 -NCT01312246 -NCT01312285 -NCT01312506 -NCT01312662 -NCT01312675 -NCT01312922 -NCT01313208 -NCT01313247 -NCT01313312 -NCT01313390 -NCT01313429 -NCT01313442 -NCT01313455 -NCT01313546 -NCT01313624 -NCT01313637 -NCT01313650 -NCT01313676 -NCT01313689 -NCT01313962 -NCT01314014 -NCT01314053 -NCT01314183 -NCT01314261 -NCT01314274 -NCT01314300 -NCT01314313 -NCT01314339 -NCT01314352 -NCT01314508 -NCT01314586 -NCT01314638 -NCT01314716 -NCT01314807 -NCT01314820 -NCT01315223 -NCT01315366 -NCT01315470 -NCT01315548 -NCT01315561 -NCT01315639 -NCT01315678 -NCT01315743 -NCT01315769 -NCT01315938 -NCT01316029 -NCT01316042 -NCT01316211 -NCT01316276 -NCT01316471 -NCT01316614 -NCT01316796 -NCT01317004 -NCT01317173 -NCT01317433 -NCT01317589 -NCT01317745 -NCT01317758 -NCT01317888 -NCT01318070 -NCT01318083 -NCT01318109 -NCT01318369 -NCT01318434 -NCT01318564 -NCT01318590 -NCT01318616 -NCT01318707 -NCT01318733 -NCT01318980 -NCT01319123 -NCT01319266 -NCT01319448 -NCT01319461 -NCT01319552 -NCT01319851 -NCT01319929 -NCT01320007 -NCT01320033 -NCT01320046 -NCT01320176 -NCT01320189 -NCT01320384 -NCT01320488 -NCT01320527 -NCT01320670 -NCT01320904 -NCT01321034 -NCT01321242 -NCT01321281 -NCT01321424 -NCT01321619 -NCT01321684 -NCT01321697 -NCT01321736 -NCT01321827 -NCT01321879 -NCT01321970 -NCT01321996 -NCT01322022 -NCT01322126 -NCT01322165 -NCT01322191 -NCT01322243 -NCT01322269 -NCT01322334 -NCT01322386 -NCT01322672 -NCT01322763 -NCT01322789 -NCT01322867 -NCT01323010 -NCT01323140 -NCT01323218 -NCT01323231 -NCT01323335 -NCT01323361 -NCT01323543 -NCT01323608 -NCT01323660 -NCT01323673 -NCT01323712 -NCT01323855 -NCT01324037 -NCT01324570 -NCT01324583 -NCT01324635 -NCT01324739 -NCT01324791 -NCT01324921 -NCT01324986 -NCT01325155 -NCT01325233 -NCT01325259 -NCT01325454 -NCT01325480 -NCT01325571 -NCT01325584 -NCT01325740 -NCT01325753 -NCT01325818 -NCT01326065 -NCT01326195 -NCT01326260 -NCT01326637 -NCT01326663 -NCT01326676 -NCT01326728 -NCT01326741 -NCT01326936 -NCT01326949 -NCT01327066 -NCT01327222 -NCT01327300 -NCT01327599 -NCT01327742 -NCT01327768 -NCT01327807 -NCT01327976 -NCT01327989 -NCT01328028 -NCT01328197 -NCT01328418 -NCT01328444 -NCT01328457 -NCT01328483 -NCT01328613 -NCT01328769 -NCT01328782 -NCT01328860 -NCT01328990 -NCT01329250 -NCT01329289 -NCT01329484 -NCT01329562 -NCT01329653 -NCT01329692 -NCT01329731 -NCT01329770 -NCT01329926 -NCT01330173 -NCT01330381 -NCT01330459 -NCT01330511 -NCT01330550 -NCT01330667 -NCT01330732 -NCT01331187 -NCT01331200 -NCT01331213 -NCT01331239 -NCT01331603 -NCT01331616 -NCT01331642 -NCT01331746 -NCT01332006 -NCT01332032 -NCT01332110 -NCT01332331 -NCT01332344 -NCT01332357 -NCT01332526 -NCT01332539 -NCT01332552 -NCT01332578 -NCT01332695 -NCT01332760 -NCT01332825 -NCT01332864 -NCT01333189 -NCT01333254 -NCT01333267 -NCT01333293 -NCT01333384 -NCT01333462 -NCT01333527 -NCT01333605 -NCT01333800 -NCT01333826 -NCT01333995 -NCT01334021 -NCT01334138 -NCT01334242 -NCT01334476 -NCT01334502 -NCT01334697 -NCT01334723 -NCT01334801 -NCT01334814 -NCT01334983 -NCT01334996 -NCT01335386 -NCT01335490 -NCT01335503 -NCT01335646 -NCT01335763 -NCT01335802 -NCT01335997 -NCT01336010 -NCT01336140 -NCT01336283 -NCT01336647 -NCT01336660 -NCT01336699 -NCT01336764 -NCT01337076 -NCT01337115 -NCT01337297 -NCT01337479 -NCT01337778 -NCT01337804 -NCT01337999 -NCT01338077 -NCT01338298 -NCT01338402 -NCT01338519 -NCT01338584 -NCT01338649 -NCT01338688 -NCT01338766 -NCT01339143 -NCT01339156 -NCT01339325 -NCT01339338 -NCT01339442 -NCT01339611 -NCT01339845 -NCT01340326 -NCT01340417 -NCT01340482 -NCT01340755 -NCT01341080 -NCT01341314 -NCT01341405 -NCT01341483 -NCT01341496 -NCT01341756 -NCT01341847 -NCT01341886 -NCT01342068 -NCT01342120 -NCT01342146 -NCT01342315 -NCT01342510 -NCT01342627 -NCT01342705 -NCT01342965 -NCT01343004 -NCT01343303 -NCT01343368 -NCT01343940 -NCT01343966 -NCT01344005 -NCT01344031 -NCT01344096 -NCT01344317 -NCT01344408 -NCT01344421 -NCT01344798 -NCT01344993 -NCT01345006 -NCT01345188 -NCT01345266 -NCT01345383 -NCT01345448 -NCT01345643 -NCT01345838 -NCT01345929 -NCT01346020 -NCT01346059 -NCT01346085 -NCT01346150 -NCT01346475 -NCT01346527 -NCT01346618 -NCT01346670 -NCT01346852 -NCT01346904 -NCT01347060 -NCT01347229 -NCT01347307 -NCT01347567 -NCT01347736 -NCT01347905 -NCT01347918 -NCT01347970 -NCT01348113 -NCT01348451 -NCT01348477 -NCT01348620 -NCT01348633 -NCT01348646 -NCT01348672 -NCT01349205 -NCT01349283 -NCT01349322 -NCT01349413 -NCT01349543 -NCT01349556 -NCT01349634 -NCT01349738 -NCT01349972 -NCT01349998 -NCT01350089 -NCT01350232 -NCT01350336 -NCT01350505 -NCT01350557 -NCT01350648 -NCT01350674 -NCT01350830 -NCT01351389 -NCT01351831 -NCT01351883 -NCT01351896 -NCT01351909 -NCT01351987 -NCT01352091 -NCT01352390 -NCT01352520 -NCT01352572 -NCT01352676 -NCT01352819 -NCT01352949 -NCT01353222 -NCT01353235 -NCT01353352 -NCT01353430 -NCT01353482 -NCT01353820 -NCT01353976 -NCT01354119 -NCT01354145 -NCT01354249 -NCT01354262 -NCT01354314 -NCT01354379 -NCT01354392 -NCT01354613 -NCT01354639 -NCT01354860 -NCT01354912 -NCT01355107 -NCT01355159 -NCT01355172 -NCT01355458 -NCT01355471 -NCT01355679 -NCT01355744 -NCT01355796 -NCT01355913 -NCT01356017 -NCT01356043 -NCT01356056 -NCT01356121 -NCT01356212 -NCT01356316 -NCT01356342 -NCT01356433 -NCT01356485 -NCT01356602 -NCT01356641 -NCT01356693 -NCT01357018 -NCT01357239 -NCT01357278 -NCT01357317 -NCT01357330 -NCT01357343 -NCT01357382 -NCT01357447 -NCT01357473 -NCT01357512 -NCT01357525 -NCT01357564 -NCT01357837 -NCT01358032 -NCT01358136 -NCT01358149 -NCT01358240 -NCT01358474 -NCT01358500 -NCT01358526 -NCT01358708 -NCT01358799 -NCT01359046 -NCT01359098 -NCT01359124 -NCT01359397 -NCT01359436 -NCT01359592 -NCT01359644 -NCT01359670 -NCT01359839 -NCT01359891 -NCT01359917 -NCT01360086 -NCT01360099 -NCT01360268 -NCT01360450 -NCT01360515 -NCT01360619 -NCT01360684 -NCT01360697 -NCT01360892 -NCT01360905 -NCT01360918 -NCT01360944 -NCT01360957 -NCT01360970 -NCT01360996 -NCT01361087 -NCT01361139 -NCT01361178 -NCT01361581 -NCT01361711 -NCT01361724 -NCT01361880 -NCT01361932 -NCT01362010 -NCT01362101 -NCT01362348 -NCT01362413 -NCT01362530 -NCT01362569 -NCT01362608 -NCT01362660 -NCT01362777 -NCT01363193 -NCT01363388 -NCT01363570 -NCT01363596 -NCT01364077 -NCT01364090 -NCT01364324 -NCT01364337 -NCT01364389 -NCT01364636 -NCT01364909 -NCT01365260 -NCT01365351 -NCT01365442 -NCT01365559 -NCT01365585 -NCT01365611 -NCT01366014 -NCT01366027 -NCT01366677 -NCT01367015 -NCT01367106 -NCT01367353 -NCT01367366 -NCT01367782 -NCT01367834 -NCT01367886 -NCT01367990 -NCT01368133 -NCT01368263 -NCT01368276 -NCT01368341 -NCT01368575 -NCT01368614 -NCT01368731 -NCT01368835 -NCT01369303 -NCT01369368 -NCT01369407 -NCT01369576 -NCT01369641 -NCT01369966 -NCT01370057 -NCT01370083 -NCT01370096 -NCT01370161 -NCT01370369 -NCT01370512 -NCT01370525 -NCT01370538 -NCT01370642 -NCT01370954 -NCT01371071 -NCT01371149 -NCT01371240 -NCT01371305 -NCT01371513 -NCT01371526 -NCT01371552 -NCT01371565 -NCT01371591 -NCT01371630 -NCT01371643 -NCT01371656 -NCT01371773 -NCT01371825 -NCT01371838 -NCT01371877 -NCT01371981 -NCT01372202 -NCT01372319 -NCT01372332 -NCT01372423 -NCT01372436 -NCT01372475 -NCT01372540 -NCT01372566 -NCT01372618 -NCT01372813 -NCT01372904 -NCT01372943 -NCT01373034 -NCT01373125 -NCT01373372 -NCT01373411 -NCT01373450 -NCT01373528 -NCT01373580 -NCT01373723 -NCT01373970 -NCT01374152 -NCT01374165 -NCT01374204 -NCT01374269 -NCT01374334 -NCT01374412 -NCT01374477 -NCT01374659 -NCT01374776 -NCT01374880 -NCT01374906 -NCT01375062 -NCT01375075 -NCT01375114 -NCT01375322 -NCT01375543 -NCT01375608 -NCT01375660 -NCT01375803 -NCT01375920 -NCT01375959 -NCT01376024 -NCT01376076 -NCT01376115 -NCT01376193 -NCT01376232 -NCT01376414 -NCT01376466 -NCT01376700 -NCT01376817 -NCT01376830 -NCT01376856 -NCT01376934 -NCT01376960 -NCT01377103 -NCT01377181 -NCT01377194 -NCT01377350 -NCT01377415 -NCT01377467 -NCT01377584 -NCT01377701 -NCT01377753 -NCT01377766 -NCT01378026 -NCT01378039 -NCT01378117 -NCT01378169 -NCT01378182 -NCT01378195 -NCT01378299 -NCT01378520 -NCT01378676 -NCT01378819 -NCT01379170 -NCT01379183 -NCT01379690 -NCT01380015 -NCT01380067 -NCT01380119 -NCT01380171 -NCT01380223 -NCT01380301 -NCT01380314 -NCT01380730 -NCT01380769 -NCT01380899 -NCT01380964 -NCT01381094 -NCT01381263 -NCT01381354 -NCT01381510 -NCT01381549 -NCT01381757 -NCT01381978 -NCT01382095 -NCT01382134 -NCT01382212 -NCT01382225 -NCT01382407 -NCT01382420 -NCT01382537 -NCT01382615 -NCT01382641 -NCT01382667 -NCT01382862 -NCT01382953 -NCT01383044 -NCT01383109 -NCT01383226 -NCT01383460 -NCT01383564 -NCT01383772 -NCT01383902 -NCT01383941 -NCT01383954 -NCT01384201 -NCT01384253 -NCT01384266 -NCT01384331 -NCT01384357 -NCT01384370 -NCT01384396 -NCT01384409 -NCT01384565 -NCT01384669 -NCT01384721 -NCT01384799 -NCT01384851 -NCT01384877 -NCT01385007 -NCT01385020 -NCT01385098 -NCT01385137 -NCT01385176 -NCT01385215 -NCT01385319 -NCT01385410 -NCT01385436 -NCT01385501 -NCT01385579 -NCT01385605 -NCT01385683 -NCT01385774 -NCT01385826 -NCT01385852 -NCT01385917 -NCT01385930 -NCT01386372 -NCT01386411 -NCT01386437 -NCT01386515 -NCT01386567 -NCT01386606 -NCT01386619 -NCT01386710 -NCT01386853 -NCT01386905 -NCT01386957 -NCT01386983 -NCT01386996 -NCT01387230 -NCT01387256 -NCT01387425 -NCT01387503 -NCT01387750 -NCT01387906 -NCT01387919 -NCT01387971 -NCT01388192 -NCT01388348 -NCT01388413 -NCT01388595 -NCT01388647 -NCT01388660 -NCT01388712 -NCT01388764 -NCT01388777 -NCT01388933 -NCT01388985 -NCT01389349 -NCT01389726 -NCT01389765 -NCT01389869 -NCT01389999 -NCT01390012 -NCT01390181 -NCT01390207 -NCT01390324 -NCT01390454 -NCT01390532 -NCT01390584 -NCT01390935 -NCT01391052 -NCT01391078 -NCT01391091 -NCT01391117 -NCT01391182 -NCT01391208 -NCT01391325 -NCT01391455 -NCT01391702 -NCT01391715 -NCT01391767 -NCT01391806 -NCT01392053 -NCT01392209 -NCT01392339 -NCT01392365 -NCT01392456 -NCT01392612 -NCT01392768 -NCT01392859 -NCT01392885 -NCT01392898 -NCT01392911 -NCT01392963 -NCT01392989 -NCT01393743 -NCT01393808 -NCT01393821 -NCT01393847 -NCT01393886 -NCT01394133 -NCT01394146 -NCT01394172 -NCT01394263 -NCT01394393 -NCT01394471 -NCT01394510 -NCT01394536 -NCT01394575 -NCT01394614 -NCT01394926 -NCT01394965 -NCT01395134 -NCT01395251 -NCT01395407 -NCT01395550 -NCT01395563 -NCT01396005 -NCT01396161 -NCT01396226 -NCT01396252 -NCT01396317 -NCT01396369 -NCT01396525 -NCT01396642 -NCT01396785 -NCT01396811 -NCT01396954 -NCT01397084 -NCT01397149 -NCT01397162 -NCT01397201 -NCT01397253 -NCT01397409 -NCT01397552 -NCT01397565 -NCT01397604 -NCT01397643 -NCT01397695 -NCT01397721 -NCT01397916 -NCT01398085 -NCT01398371 -NCT01398423 -NCT01398579 -NCT01398618 -NCT01398644 -NCT01399008 -NCT01399216 -NCT01399788 -NCT01399892 -NCT01399905 -NCT01399983 -NCT01400113 -NCT01400334 -NCT01400464 -NCT01400477 -NCT01400542 -NCT01400646 -NCT01400698 -NCT01400828 -NCT01400893 -NCT01400906 -NCT01400945 -NCT01401010 -NCT01401023 -NCT01401257 -NCT01401413 -NCT01401439 -NCT01401582 -NCT01401647 -NCT01401660 -NCT01401946 -NCT01401959 -NCT01402011 -NCT01402115 -NCT01402219 -NCT01402453 -NCT01402531 -NCT01402570 -NCT01402583 -NCT01402752 -NCT01402804 -NCT01402843 -NCT01402895 -NCT01402934 -NCT01403116 -NCT01403181 -NCT01403259 -NCT01403324 -NCT01403402 -NCT01403415 -NCT01403532 -NCT01403571 -NCT01403740 -NCT01403870 -NCT01404091 -NCT01404247 -NCT01404260 -NCT01404312 -NCT01404533 -NCT01404611 -NCT01404754 -NCT01404832 -NCT01404884 -NCT01404897 -NCT01405222 -NCT01405313 -NCT01405391 -NCT01405417 -NCT01405469 -NCT01405560 -NCT01405768 -NCT01405781 -NCT01405807 -NCT01405820 -NCT01405937 -NCT01406106 -NCT01406210 -NCT01406275 -NCT01406288 -NCT01406314 -NCT01406353 -NCT01406509 -NCT01406548 -NCT01406613 -NCT01406639 -NCT01406951 -NCT01406990 -NCT01407120 -NCT01407263 -NCT01407432 -NCT01407692 -NCT01407796 -NCT01407848 -NCT01407978 -NCT01408030 -NCT01408043 -NCT01408108 -NCT01408121 -NCT01408472 -NCT01408498 -NCT01408615 -NCT01408732 -NCT01408784 -NCT01408836 -NCT01408966 -NCT01408992 -NCT01409031 -NCT01409122 -NCT01409148 -NCT01409356 -NCT01409382 -NCT01409460 -NCT01409551 -NCT01409746 -NCT01409811 -NCT01409837 -NCT01409902 -NCT01409915 -NCT01410045 -NCT01410097 -NCT01410227 -NCT01410409 -NCT01410526 -NCT01410565 -NCT01410578 -NCT01410734 -NCT01410825 -NCT01410916 -NCT01411072 -NCT01411176 -NCT01411202 -NCT01411306 -NCT01411319 -NCT01411358 -NCT01411527 -NCT01411657 -NCT01411722 -NCT01411826 -NCT01411878 -NCT01411995 -NCT01412047 -NCT01412177 -NCT01412242 -NCT01412294 -NCT01412424 -NCT01412918 -NCT01413074 -NCT01413152 -NCT01413256 -NCT01413555 -NCT01413581 -NCT01413607 -NCT01413633 -NCT01413646 -NCT01413698 -NCT01413711 -NCT01414062 -NCT01414205 -NCT01414244 -NCT01414257 -NCT01414322 -NCT01414387 -NCT01414530 -NCT01414556 -NCT01414673 -NCT01414686 -NCT01414803 -NCT01414868 -NCT01415050 -NCT01415115 -NCT01415193 -NCT01415427 -NCT01415648 -NCT01415700 -NCT01415830 -NCT01415856 -NCT01415869 -NCT01415882 -NCT01415908 -NCT01415921 -NCT01415947 -NCT01415986 -NCT01416181 -NCT01416246 -NCT01416480 -NCT01416493 -NCT01416571 -NCT01416597 -NCT01416844 -NCT01416922 -NCT01416961 -NCT01417130 -NCT01417208 -NCT01417377 -NCT01417442 -NCT01417520 -NCT01417533 -NCT01417598 -NCT01417923 -NCT01418079 -NCT01418131 -NCT01418157 -NCT01418235 -NCT01418287 -NCT01418534 -NCT01418547 -NCT01418924 -NCT01419015 -NCT01419028 -NCT01419119 -NCT01419184 -NCT01419236 -NCT01419249 -NCT01419535 -NCT01419561 -NCT01419574 -NCT01419704 -NCT01419821 -NCT01419860 -NCT01419886 -NCT01419938 -NCT01419977 -NCT01420003 -NCT01420055 -NCT01420133 -NCT01420146 -NCT01420354 -NCT01420367 -NCT01420419 -NCT01420523 -NCT01420744 -NCT01420874 -NCT01420887 -NCT01420913 -NCT01420939 -NCT01420965 -NCT01420991 -NCT01421160 -NCT01421355 -NCT01421368 -NCT01421693 -NCT01421797 -NCT01421810 -NCT01421888 -NCT01421927 -NCT01422057 -NCT01422226 -NCT01422239 -NCT01422616 -NCT01422668 -NCT01422707 -NCT01422746 -NCT01422759 -NCT01422798 -NCT01423071 -NCT01423266 -NCT01423331 -NCT01423344 -NCT01423396 -NCT01423591 -NCT01423604 -NCT01423734 -NCT01423890 -NCT01423942 -NCT01423994 -NCT01424046 -NCT01424176 -NCT01424241 -NCT01424254 -NCT01424306 -NCT01424423 -NCT01424475 -NCT01424514 -NCT01424527 -NCT01424631 -NCT01424748 -NCT01424761 -NCT01424904 -NCT01425034 -NCT01425177 -NCT01425463 -NCT01425528 -NCT01425541 -NCT01425606 -NCT01425619 -NCT01425775 -NCT01425788 -NCT01425827 -NCT01425892 -NCT01425957 -NCT01425970 -NCT01426087 -NCT01426269 -NCT01426672 -NCT01426724 -NCT01426932 -NCT01427114 -NCT01427179 -NCT01427192 -NCT01427244 -NCT01427270 -NCT01427283 -NCT01427491 -NCT01427556 -NCT01427595 -NCT01427608 -NCT01427673 -NCT01427842 -NCT01427855 -NCT01427894 -NCT01428089 -NCT01428167 -NCT01428193 -NCT01428245 -NCT01428336 -NCT01428531 -NCT01428544 -NCT01428648 -NCT01428713 -NCT01428726 -NCT01428908 -NCT01429090 -NCT01429155 -NCT01429168 -NCT01429207 -NCT01429259 -NCT01429298 -NCT01429376 -NCT01429389 -NCT01429402 -NCT01429480 -NCT01429597 -NCT01429844 -NCT01429909 -NCT01429935 -NCT01430000 -NCT01430091 -NCT01430286 -NCT01430403 -NCT01430442 -NCT01430520 -NCT01430689 -NCT01430754 -NCT01430793 -NCT01430845 -NCT01430897 -NCT01430988 -NCT01431222 -NCT01431313 -NCT01431326 -NCT01431586 -NCT01431638 -NCT01431651 -NCT01431755 -NCT01431794 -NCT01431924 -NCT01431963 -NCT01432093 -NCT01432392 -NCT01432470 -NCT01432613 -NCT01432626 -NCT01432769 -NCT01432782 -NCT01432821 -NCT01432847 -NCT01432873 -NCT01432938 -NCT01433003 -NCT01433107 -NCT01433263 -NCT01433354 -NCT01433601 -NCT01433744 -NCT01433809 -NCT01433848 -NCT01433874 -NCT01434108 -NCT01434121 -NCT01434251 -NCT01434355 -NCT01434368 -NCT01434446 -NCT01434602 -NCT01434758 -NCT01434810 -NCT01434862 -NCT01434992 -NCT01435070 -NCT01435551 -NCT01435603 -NCT01435616 -NCT01435629 -NCT01435733 -NCT01435902 -NCT01435941 -NCT01435954 -NCT01436071 -NCT01436110 -NCT01436253 -NCT01436266 -NCT01436318 -NCT01436370 -NCT01436747 -NCT01436877 -NCT01436890 -NCT01436955 -NCT01436994 -NCT01437098 -NCT01437345 -NCT01437410 -NCT01437436 -NCT01437735 -NCT01437956 -NCT01437969 -NCT01438034 -NCT01438073 -NCT01438203 -NCT01438398 -NCT01438567 -NCT01438593 -NCT01438710 -NCT01438762 -NCT01438853 -NCT01439100 -NCT01439256 -NCT01439269 -NCT01439360 -NCT01439516 -NCT01439581 -NCT01439672 -NCT01439711 -NCT01439815 -NCT01439854 -NCT01439971 -NCT01440036 -NCT01440140 -NCT01440205 -NCT01440361 -NCT01440439 -NCT01440491 -NCT01440517 -NCT01440582 -NCT01440764 -NCT01440777 -NCT01441024 -NCT01441037 -NCT01441089 -NCT01441102 -NCT01441141 -NCT01441154 -NCT01441284 -NCT01441375 -NCT01441466 -NCT01441479 -NCT01441635 -NCT01441648 -NCT01441882 -NCT01441895 -NCT01441934 -NCT01442181 -NCT01442220 -NCT01442233 -NCT01442259 -NCT01442350 -NCT01442441 -NCT01442454 -NCT01442623 -NCT01442649 -NCT01442701 -NCT01442779 -NCT01443065 -NCT01443494 -NCT01443624 -NCT01443832 -NCT01443845 -NCT01443923 -NCT01443936 -NCT01444001 -NCT01444014 -NCT01444066 -NCT01444209 -NCT01444365 -NCT01444521 -NCT01444534 -NCT01444625 -NCT01444768 -NCT01444846 -NCT01445041 -NCT01445080 -NCT01445119 -NCT01445171 -NCT01445301 -NCT01445418 -NCT01445613 -NCT01445821 -NCT01445977 -NCT01446042 -NCT01446211 -NCT01446237 -NCT01446276 -NCT01446315 -NCT01446393 -NCT01446471 -NCT01446549 -NCT01446666 -NCT01446848 -NCT01446887 -NCT01446900 -NCT01446939 -NCT01447069 -NCT01447199 -NCT01447329 -NCT01447381 -NCT01447693 -NCT01447745 -NCT01447823 -NCT01447888 -NCT01447927 -NCT01447979 -NCT01447992 -NCT01448005 -NCT01448044 -NCT01448161 -NCT01448395 -NCT01448434 -NCT01448473 -NCT01448733 -NCT01448772 -NCT01448850 -NCT01448980 -NCT01449019 -NCT01449084 -NCT01449110 -NCT01449162 -NCT01449253 -NCT01449266 -NCT01449292 -NCT01449305 -NCT01449409 -NCT01449513 -NCT01449539 -NCT01449591 -NCT01449916 -NCT01449994 -NCT01450137 -NCT01450150 -NCT01450202 -NCT01450501 -NCT01450566 -NCT01450748 -NCT01450930 -NCT01451086 -NCT01451281 -NCT01451372 -NCT01451411 -NCT01451437 -NCT01451593 -NCT01451619 -NCT01451749 -NCT01452061 -NCT01452165 -NCT01452477 -NCT01452490 -NCT01452516 -NCT01452659 -NCT01452815 -NCT01452893 -NCT01452932 -NCT01452945 -NCT01452997 -NCT01453062 -NCT01453075 -NCT01453101 -NCT01453114 -NCT01453244 -NCT01453283 -NCT01453335 -NCT01453452 -NCT01453738 -NCT01453777 -NCT01453985 -NCT01454284 -NCT01454349 -NCT01454375 -NCT01454505 -NCT01454635 -NCT01454661 -NCT01454739 -NCT01455077 -NCT01455090 -NCT01455298 -NCT01455376 -NCT01455402 -NCT01455454 -NCT01455753 -NCT01455805 -NCT01455935 -NCT01456377 -NCT01456416 -NCT01456481 -NCT01456637 -NCT01456650 -NCT01456845 -NCT01456858 -NCT01456975 -NCT01457014 -NCT01457053 -NCT01457092 -NCT01457313 -NCT01457443 -NCT01457573 -NCT01457625 -NCT01457703 -NCT01457924 -NCT01457950 -NCT01458106 -NCT01458301 -NCT01458418 -NCT01458613 -NCT01458704 -NCT01458808 -NCT01458860 -NCT01458886 -NCT01459016 -NCT01459081 -NCT01459237 -NCT01459393 -NCT01459627 -NCT01459640 -NCT01459770 -NCT01459783 -NCT01459913 -NCT01460017 -NCT01460043 -NCT01460082 -NCT01460108 -NCT01460121 -NCT01460199 -NCT01460368 -NCT01460758 -NCT01460797 -NCT01460810 -NCT01460966 -NCT01461005 -NCT01461174 -NCT01461200 -NCT01461330 -NCT01461369 -NCT01461408 -NCT01461473 -NCT01461525 -NCT01461616 -NCT01461954 -NCT01462006 -NCT01462292 -NCT01462526 -NCT01462877 -NCT01462903 -NCT01463007 -NCT01463085 -NCT01463098 -NCT01463189 -NCT01463280 -NCT01463358 -NCT01463462 -NCT01463488 -NCT01463540 -NCT01463592 -NCT01463644 -NCT01463761 -NCT01463787 -NCT01464021 -NCT01464203 -NCT01464762 -NCT01464775 -NCT01464788 -NCT01464879 -NCT01464905 -NCT01464944 -NCT01464983 -NCT01465022 -NCT01465295 -NCT01465334 -NCT01465399 -NCT01465516 -NCT01465568 -NCT01465594 -NCT01465633 -NCT01465646 -NCT01465672 -NCT01465841 -NCT01465867 -NCT01466036 -NCT01466114 -NCT01466348 -NCT01466504 -NCT01466686 -NCT01466712 -NCT01467037 -NCT01467102 -NCT01467297 -NCT01467479 -NCT01467505 -NCT01467635 -NCT01467700 -NCT01467869 -NCT01467882 -NCT01468025 -NCT01468038 -NCT01468220 -NCT01468311 -NCT01468441 -NCT01468493 -NCT01468532 -NCT01468636 -NCT01468831 -NCT01468844 -NCT01468909 -NCT01468948 -NCT01468987 -NCT01469000 -NCT01469117 -NCT01469221 -NCT01469364 -NCT01469533 -NCT01469546 -NCT01469663 -NCT01469676 -NCT01469702 -NCT01469715 -NCT01469819 -NCT01469832 -NCT01470040 -NCT01470534 -NCT01470638 -NCT01470729 -NCT01470807 -NCT01470820 -NCT01470885 -NCT01470937 -NCT01470989 -NCT01471054 -NCT01471119 -NCT01471184 -NCT01471288 -NCT01471314 -NCT01471379 -NCT01471405 -NCT01471522 -NCT01471600 -NCT01471639 -NCT01471652 -NCT01471678 -NCT01471899 -NCT01472029 -NCT01472133 -NCT01472432 -NCT01472523 -NCT01472692 -NCT01472874 -NCT01472913 -NCT01472978 -NCT01473290 -NCT01473303 -NCT01473472 -NCT01473524 -NCT01473849 -NCT01473979 -NCT01474369 -NCT01474447 -NCT01474499 -NCT01474564 -NCT01474746 -NCT01474811 -NCT01475019 -NCT01475214 -NCT01475227 -NCT01475240 -NCT01475292 -NCT01475318 -NCT01475344 -NCT01475370 -NCT01475708 -NCT01475890 -NCT01476150 -NCT01476423 -NCT01476501 -NCT01476527 -NCT01476605 -NCT01476644 -NCT01476683 -NCT01476930 -NCT01476956 -NCT01476995 -NCT01477073 -NCT01477138 -NCT01477333 -NCT01477346 -NCT01477437 -NCT01477476 -NCT01477827 -NCT01478009 -NCT01478204 -NCT01478347 -NCT01478438 -NCT01478620 -NCT01478724 -NCT01478802 -NCT01478932 -NCT01479075 -NCT01479426 -NCT01479569 -NCT01479686 -NCT01479855 -NCT01479920 -NCT01480167 -NCT01480349 -NCT01480427 -NCT01480596 -NCT01480778 -NCT01480843 -NCT01480908 -NCT01481168 -NCT01481324 -NCT01481376 -NCT01481701 -NCT01481779 -NCT01481792 -NCT01481909 -NCT01481948 -NCT01482130 -NCT01482143 -NCT01482208 -NCT01482286 -NCT01482299 -NCT01482312 -NCT01482338 -NCT01482481 -NCT01482494 -NCT01482520 -NCT01482559 -NCT01482767 -NCT01482858 -NCT01482897 -NCT01483118 -NCT01483287 -NCT01483365 -NCT01483560 -NCT01483573 -NCT01483625 -NCT01483716 -NCT01483742 -NCT01483768 -NCT01483911 -NCT01483989 -NCT01484106 -NCT01484405 -NCT01484483 -NCT01484574 -NCT01484678 -NCT01484925 -NCT01485055 -NCT01485094 -NCT01485172 -NCT01485198 -NCT01485224 -NCT01485263 -NCT01485276 -NCT01485471 -NCT01485692 -NCT01485913 -NCT01485978 -NCT01486225 -NCT01486381 -NCT01486394 -NCT01486667 -NCT01486745 -NCT01486849 -NCT01486927 -NCT01486979 -NCT01487239 -NCT01487252 -NCT01487486 -NCT01487525 -NCT01487538 -NCT01487590 -NCT01487694 -NCT01487837 -NCT01488136 -NCT01488175 -NCT01488500 -NCT01488591 -NCT01488773 -NCT01488981 -NCT01489215 -NCT01489241 -NCT01489254 -NCT01489397 -NCT01489436 -NCT01489527 -NCT01489592 -NCT01489839 -NCT01489969 -NCT01490164 -NCT01490190 -NCT01490203 -NCT01490320 -NCT01490502 -NCT01490892 -NCT01490905 -NCT01491048 -NCT01491100 -NCT01491165 -NCT01491360 -NCT01491490 -NCT01491516 -NCT01491542 -NCT01491555 -NCT01491568 -NCT01491763 -NCT01491828 -NCT01491971 -NCT01492062 -NCT01492179 -NCT01492270 -NCT01492296 -NCT01492374 -NCT01492387 -NCT01492413 -NCT01492517 -NCT01492790 -NCT01492855 -NCT01493050 -NCT01493089 -NCT01493128 -NCT01493284 -NCT01493349 -NCT01493531 -NCT01493687 -NCT01493791 -NCT01494025 -NCT01494168 -NCT01494181 -NCT01494285 -NCT01494337 -NCT01494467 -NCT01494532 -NCT01494571 -NCT01494610 -NCT01494636 -NCT01494649 -NCT01494714 -NCT01495000 -NCT01495026 -NCT01495065 -NCT01495325 -NCT01495455 -NCT01495585 -NCT01495676 -NCT01495806 -NCT01495897 -NCT01495923 -NCT01496066 -NCT01496079 -NCT01496248 -NCT01496326 -NCT01496404 -NCT01496482 -NCT01496599 -NCT01496612 -NCT01496651 -NCT01496872 -NCT01496885 -NCT01496963 -NCT01497158 -NCT01497197 -NCT01497262 -NCT01497392 -NCT01497548 -NCT01497691 -NCT01497977 -NCT01498068 -NCT01498081 -NCT01498211 -NCT01498289 -NCT01498406 -NCT01498419 -NCT01498432 -NCT01498471 -NCT01498653 -NCT01498666 -NCT01498679 -NCT01498705 -NCT01499056 -NCT01499134 -NCT01499446 -NCT01499485 -NCT01499628 -NCT01499667 -NCT01499784 -NCT01499823 -NCT01499888 -NCT01499901 -NCT01499914 -NCT01500057 -NCT01500122 -NCT01500148 -NCT01500200 -NCT01500304 -NCT01500356 -NCT01500447 -NCT01500512 -NCT01500525 -NCT01500616 -NCT01500629 -NCT01500733 -NCT01500889 -NCT01500915 -NCT01501162 -NCT01501279 -NCT01501409 -NCT01501487 -NCT01501500 -NCT01501578 -NCT01501643 -NCT01501942 -NCT01502059 -NCT01502124 -NCT01502137 -NCT01502176 -NCT01502189 -NCT01502241 -NCT01502410 -NCT01502514 -NCT01502527 -NCT01502748 -NCT01502982 -NCT01503099 -NCT01503125 -NCT01503164 -NCT01503294 -NCT01503307 -NCT01503346 -NCT01503476 -NCT01503749 -NCT01503775 -NCT01503905 -NCT01504009 -NCT01504048 -NCT01504126 -NCT01504399 -NCT01504464 -NCT01504555 -NCT01504802 -NCT01504880 -NCT01504945 -NCT01504958 -NCT01504997 -NCT01505010 -NCT01505400 -NCT01505426 -NCT01505517 -NCT01505582 -NCT01505595 -NCT01505686 -NCT01505751 -NCT01505842 -NCT01505868 -NCT01505946 -NCT01506037 -NCT01506050 -NCT01506128 -NCT01506479 -NCT01506518 -NCT01506557 -NCT01506661 -NCT01506700 -NCT01506791 -NCT01506908 -NCT01506947 -NCT01506960 -NCT01507207 -NCT01507285 -NCT01507428 -NCT01507480 -NCT01507610 -NCT01507662 -NCT01507792 -NCT01507974 -NCT01508520 -NCT01508702 -NCT01508741 -NCT01508767 -NCT01508819 -NCT01508884 -NCT01509014 -NCT01509066 -NCT01509079 -NCT01509183 -NCT01509482 -NCT01509534 -NCT01509599 -NCT01509612 -NCT01509924 -NCT01509963 -NCT01510002 -NCT01510041 -NCT01510158 -NCT01510392 -NCT01510418 -NCT01510457 -NCT01510769 -NCT01510847 -NCT01510912 -NCT01511042 -NCT01511081 -NCT01511211 -NCT01511302 -NCT01511419 -NCT01511458 -NCT01511575 -NCT01511588 -NCT01511601 -NCT01511939 -NCT01511952 -NCT01512056 -NCT01512277 -NCT01512342 -NCT01512472 -NCT01512537 -NCT01512589 -NCT01512654 -NCT01512719 -NCT01512927 -NCT01512940 -NCT01512992 -NCT01513161 -NCT01513239 -NCT01513408 -NCT01513421 -NCT01513447 -NCT01513616 -NCT01513655 -NCT01513707 -NCT01513928 -NCT01513980 -NCT01514071 -NCT01514110 -NCT01514201 -NCT01514253 -NCT01514279 -NCT01514630 -NCT01514643 -NCT01514734 -NCT01514760 -NCT01514890 -NCT01515137 -NCT01515150 -NCT01515176 -NCT01515215 -NCT01515254 -NCT01515293 -NCT01515566 -NCT01515683 -NCT01515696 -NCT01515865 -NCT01515995 -NCT01516008 -NCT01516203 -NCT01516229 -NCT01516320 -NCT01516528 -NCT01516840 -NCT01516931 -NCT01517048 -NCT01517126 -NCT01517165 -NCT01517191 -NCT01517217 -NCT01517529 -NCT01517646 -NCT01517659 -NCT01517698 -NCT01517828 -NCT01518036 -NCT01518049 -NCT01518062 -NCT01518075 -NCT01518192 -NCT01518218 -NCT01518231 -NCT01518322 -NCT01518374 -NCT01518686 -NCT01518920 -NCT01518946 -NCT01519050 -NCT01519076 -NCT01519141 -NCT01519193 -NCT01519271 -NCT01519349 -NCT01519388 -NCT01519414 -NCT01519752 -NCT01519778 -NCT01519882 -NCT01520038 -NCT01520051 -NCT01520181 -NCT01520194 -NCT01520272 -NCT01520454 -NCT01520467 -NCT01520584 -NCT01520675 -NCT01520740 -NCT01520909 -NCT01520948 -NCT01521013 -NCT01521117 -NCT01521221 -NCT01521351 -NCT01521468 -NCT01521481 -NCT01521546 -NCT01521754 -NCT01522170 -NCT01522183 -NCT01522196 -NCT01522326 -NCT01522521 -NCT01522534 -NCT01522547 -NCT01522573 -NCT01522794 -NCT01522859 -NCT01522950 -NCT01523002 -NCT01523015 -NCT01523197 -NCT01523561 -NCT01523964 -NCT01524081 -NCT01524159 -NCT01524198 -NCT01524432 -NCT01524458 -NCT01524471 -NCT01524536 -NCT01524562 -NCT01524640 -NCT01524705 -NCT01524731 -NCT01524757 -NCT01524926 -NCT01524991 -NCT01525004 -NCT01525043 -NCT01525121 -NCT01525134 -NCT01525173 -NCT01525563 -NCT01525732 -NCT01525875 -NCT01525966 -NCT01526161 -NCT01526174 -NCT01526278 -NCT01526304 -NCT01526356 -NCT01526408 -NCT01526486 -NCT01526590 -NCT01526707 -NCT01526772 -NCT01526811 -NCT01526889 -NCT01526902 -NCT01526915 -NCT01527669 -NCT01527812 -NCT01527955 -NCT01528176 -NCT01528345 -NCT01528462 -NCT01528488 -NCT01528540 -NCT01528566 -NCT01528722 -NCT01528735 -NCT01528748 -NCT01528930 -NCT01529073 -NCT01529099 -NCT01529177 -NCT01529242 -NCT01529333 -NCT01529359 -NCT01529385 -NCT01529437 -NCT01529645 -NCT01529788 -NCT01529827 -NCT01529996 -NCT01530035 -NCT01530061 -NCT01530178 -NCT01530217 -NCT01530256 -NCT01530568 -NCT01530724 -NCT01530880 -NCT01530971 -NCT01531023 -NCT01531218 -NCT01531374 -NCT01531439 -NCT01531478 -NCT01531504 -NCT01531673 -NCT01531699 -NCT01531712 -NCT01531829 -NCT01531868 -NCT01531998 -NCT01532089 -NCT01532401 -NCT01532765 -NCT01532830 -NCT01532856 -NCT01533012 -NCT01533129 -NCT01533246 -NCT01533285 -NCT01533571 -NCT01533636 -NCT01533649 -NCT01534065 -NCT01534117 -NCT01534130 -NCT01534182 -NCT01534208 -NCT01534273 -NCT01534286 -NCT01534351 -NCT01534377 -NCT01534429 -NCT01534507 -NCT01534650 -NCT01534754 -NCT01534793 -NCT01534806 -NCT01534819 -NCT01534832 -NCT01534897 -NCT01535001 -NCT01535027 -NCT01535053 -NCT01535131 -NCT01535352 -NCT01535560 -NCT01535599 -NCT01535612 -NCT01535664 -NCT01535846 -NCT01535950 -NCT01536067 -NCT01536080 -NCT01536262 -NCT01536288 -NCT01536301 -NCT01536678 -NCT01536717 -NCT01536795 -NCT01537081 -NCT01537211 -NCT01537666 -NCT01537770 -NCT01537900 -NCT01537926 -NCT01538017 -NCT01538238 -NCT01538329 -NCT01538355 -NCT01538381 -NCT01538407 -NCT01538420 -NCT01538459 -NCT01538745 -NCT01538849 -NCT01538862 -NCT01538966 -NCT01539044 -NCT01539161 -NCT01539187 -NCT01539356 -NCT01539395 -NCT01539447 -NCT01539512 -NCT01539525 -NCT01539681 -NCT01539772 -NCT01539824 -NCT01539980 -NCT01540396 -NCT01540617 -NCT01540708 -NCT01540747 -NCT01540799 -NCT01541020 -NCT01541111 -NCT01541124 -NCT01541241 -NCT01541306 -NCT01541423 -NCT01541618 -NCT01541722 -NCT01541813 -NCT01541878 -NCT01541943 -NCT01542138 -NCT01542177 -NCT01542437 -NCT01542515 -NCT01542606 -NCT01542632 -NCT01542892 -NCT01542957 -NCT01543022 -NCT01543048 -NCT01543204 -NCT01543334 -NCT01543347 -NCT01543399 -NCT01543438 -NCT01543594 -NCT01543607 -NCT01543659 -NCT01543997 -NCT01544101 -NCT01544205 -NCT01544478 -NCT01544647 -NCT01544738 -NCT01544920 -NCT01545011 -NCT01545037 -NCT01545193 -NCT01545518 -NCT01545674 -NCT01545830 -NCT01545869 -NCT01545986 -NCT01546012 -NCT01546116 -NCT01546207 -NCT01546298 -NCT01546363 -NCT01546454 -NCT01546675 -NCT01546701 -NCT01546740 -NCT01546766 -NCT01546844 -NCT01546922 -NCT01546987 -NCT01547078 -NCT01547169 -NCT01547208 -NCT01547364 -NCT01547442 -NCT01547481 -NCT01547494 -NCT01547715 -NCT01547793 -NCT01547845 -NCT01547871 -NCT01547949 -NCT01548105 -NCT01548118 -NCT01548170 -NCT01548222 -NCT01548313 -NCT01548339 -NCT01548352 -NCT01548482 -NCT01548573 -NCT01548651 -NCT01548690 -NCT01548950 -NCT01549015 -NCT01549184 -NCT01549210 -NCT01549756 -NCT01549847 -NCT01549873 -NCT01550094 -NCT01550276 -NCT01550484 -NCT01550497 -NCT01550627 -NCT01550783 -NCT01550913 -NCT01551030 -NCT01551407 -NCT01551446 -NCT01551498 -NCT01551511 -NCT01551654 -NCT01551706 -NCT01551719 -NCT01551966 -NCT01552005 -NCT01552031 -NCT01552083 -NCT01552161 -NCT01552421 -NCT01552681 -NCT01552694 -NCT01552811 -NCT01552824 -NCT01552993 -NCT01553071 -NCT01553227 -NCT01553240 -NCT01553253 -NCT01553318 -NCT01553396 -NCT01553487 -NCT01553643 -NCT01553747 -NCT01553838 -NCT01553890 -NCT01554020 -NCT01554163 -NCT01554384 -NCT01554514 -NCT01554553 -NCT01554579 -NCT01554592 -NCT01554683 -NCT01554774 -NCT01554852 -NCT01555021 -NCT01555047 -NCT01555138 -NCT01555216 -NCT01555333 -NCT01555346 -NCT01555437 -NCT01555463 -NCT01555515 -NCT01555580 -NCT01555606 -NCT01555840 -NCT01555892 -NCT01555905 -NCT01555957 -NCT01556230 -NCT01556243 -NCT01556360 -NCT01556581 -NCT01556646 -NCT01556711 -NCT01556841 -NCT01556958 -NCT01557075 -NCT01557140 -NCT01557361 -NCT01557400 -NCT01557439 -NCT01557465 -NCT01557556 -NCT01557595 -NCT01557738 -NCT01557842 -NCT01557855 -NCT01557868 -NCT01558050 -NCT01558115 -NCT01558141 -NCT01558245 -NCT01558479 -NCT01558869 -NCT01559025 -NCT01559116 -NCT01559181 -NCT01559220 -NCT01559545 -NCT01559636 -NCT01559714 -NCT01559740 -NCT01559987 -NCT01560260 -NCT01560559 -NCT01560663 -NCT01560676 -NCT01560741 -NCT01560832 -NCT01560845 -NCT01560962 -NCT01561040 -NCT01561118 -NCT01561248 -NCT01561326 -NCT01561430 -NCT01561664 -NCT01561755 -NCT01561885 -NCT01561924 -NCT01561989 -NCT01562093 -NCT01562184 -NCT01562301 -NCT01562418 -NCT01562457 -NCT01562496 -NCT01562509 -NCT01562535 -NCT01562548 -NCT01562678 -NCT01562717 -NCT01562756 -NCT01562782 -NCT01563055 -NCT01563094 -NCT01563133 -NCT01563172 -NCT01563289 -NCT01563536 -NCT01563627 -NCT01563757 -NCT01563796 -NCT01563822 -NCT01563900 -NCT01563926 -NCT01564004 -NCT01564121 -NCT01564264 -NCT01564290 -NCT01564602 -NCT01564849 -NCT01565109 -NCT01565135 -NCT01565200 -NCT01565239 -NCT01565486 -NCT01565512 -NCT01565616 -NCT01565889 -NCT01566071 -NCT01566292 -NCT01566383 -NCT01566409 -NCT01566448 -NCT01566500 -NCT01566604 -NCT01566734 -NCT01566799 -NCT01566812 -NCT01566838 -NCT01566890 -NCT01566903 -NCT01566968 -NCT01567072 -NCT01567137 -NCT01567501 -NCT01567709 -NCT01567735 -NCT01568034 -NCT01568138 -NCT01568307 -NCT01568359 -NCT01568450 -NCT01568476 -NCT01568580 -NCT01568658 -NCT01568684 -NCT01568697 -NCT01568710 -NCT01568853 -NCT01568879 -NCT01568918 -NCT01569074 -NCT01569425 -NCT01569633 -NCT01569763 -NCT01569815 -NCT01569958 -NCT01570023 -NCT01570192 -NCT01570231 -NCT01570257 -NCT01570309 -NCT01570361 -NCT01570621 -NCT01570634 -NCT01570647 -NCT01570816 -NCT01571141 -NCT01571180 -NCT01571271 -NCT01571362 -NCT01571453 -NCT01571596 -NCT01571622 -NCT01571739 -NCT01571934 -NCT01571960 -NCT01572012 -NCT01572051 -NCT01572064 -NCT01572090 -NCT01572103 -NCT01572116 -NCT01572233 -NCT01572428 -NCT01572545 -NCT01572571 -NCT01572623 -NCT01572818 -NCT01572857 -NCT01572935 -NCT01573169 -NCT01573260 -NCT01573286 -NCT01573416 -NCT01573442 -NCT01573546 -NCT01573611 -NCT01573793 -NCT01574001 -NCT01574066 -NCT01574209 -NCT01574339 -NCT01574365 -NCT01574456 -NCT01574495 -NCT01574781 -NCT01574859 -NCT01574989 -NCT01575249 -NCT01575444 -NCT01575535 -NCT01575548 -NCT01575678 -NCT01575821 -NCT01575834 -NCT01575873 -NCT01576055 -NCT01576354 -NCT01576393 -NCT01576419 -NCT01576458 -NCT01576549 -NCT01576562 -NCT01576588 -NCT01576705 -NCT01576718 -NCT01576900 -NCT01577017 -NCT01577316 -NCT01577355 -NCT01577407 -NCT01577459 -NCT01577602 -NCT01577771 -NCT01577862 -NCT01577914 -NCT01577953 -NCT01577966 -NCT01578031 -NCT01578252 -NCT01578265 -NCT01578317 -NCT01578577 -NCT01578642 -NCT01578681 -NCT01578694 -NCT01578733 -NCT01578811 -NCT01578824 -NCT01578889 -NCT01578967 -NCT01578980 -NCT01579058 -NCT01579084 -NCT01579110 -NCT01579227 -NCT01579435 -NCT01579487 -NCT01579539 -NCT01579747 -NCT01579929 -NCT01579942 -NCT01580033 -NCT01580085 -NCT01580137 -NCT01580293 -NCT01580345 -NCT01580462 -NCT01580501 -NCT01580787 -NCT01580878 -NCT01580891 -NCT01580982 -NCT01581008 -NCT01581034 -NCT01581125 -NCT01581281 -NCT01581294 -NCT01581463 -NCT01581580 -NCT01581645 -NCT01581775 -NCT01581801 -NCT01581944 -NCT01581996 -NCT01582035 -NCT01582061 -NCT01582100 -NCT01582139 -NCT01582529 -NCT01582659 -NCT01582724 -NCT01582984 -NCT01583205 -NCT01583296 -NCT01583309 -NCT01583348 -NCT01583426 -NCT01583478 -NCT01583517 -NCT01583621 -NCT01583660 -NCT01583699 -NCT01583712 -NCT01583881 -NCT01584011 -NCT01584076 -NCT01584141 -NCT01584271 -NCT01584440 -NCT01584674 -NCT01585012 -NCT01585051 -NCT01585311 -NCT01585454 -NCT01585532 -NCT01585597 -NCT01585662 -NCT01585831 -NCT01586000 -NCT01586104 -NCT01586169 -NCT01586234 -NCT01586260 -NCT01586299 -NCT01586520 -NCT01586728 -NCT01586858 -NCT01586884 -NCT01586910 -NCT01586988 -NCT01587014 -NCT01587313 -NCT01587443 -NCT01587586 -NCT01587677 -NCT01587807 -NCT01587846 -NCT01587859 -NCT01587885 -NCT01588015 -NCT01588132 -NCT01588236 -NCT01588249 -NCT01588301 -NCT01588340 -NCT01588379 -NCT01588418 -NCT01588483 -NCT01588509 -NCT01588873 -NCT01589003 -NCT01589016 -NCT01589172 -NCT01589289 -NCT01589380 -NCT01589497 -NCT01589601 -NCT01589627 -NCT01589796 -NCT01589848 -NCT01589926 -NCT01590095 -NCT01590316 -NCT01590745 -NCT01590758 -NCT01590784 -NCT01590862 -NCT01590940 -NCT01591005 -NCT01591018 -NCT01591031 -NCT01591096 -NCT01591174 -NCT01591226 -NCT01591317 -NCT01591395 -NCT01591473 -NCT01591486 -NCT01591499 -NCT01591681 -NCT01591863 -NCT01591902 -NCT01591967 -NCT01591980 -NCT01592019 -NCT01592240 -NCT01592396 -NCT01592500 -NCT01592578 -NCT01592669 -NCT01592708 -NCT01592734 -NCT01592747 -NCT01592929 -NCT01592981 -NCT01592994 -NCT01593007 -NCT01593111 -NCT01593124 -NCT01593189 -NCT01593280 -NCT01593449 -NCT01593514 -NCT01593527 -NCT01593644 -NCT01593761 -NCT01593852 -NCT01593943 -NCT01594112 -NCT01594229 -NCT01594346 -NCT01594372 -NCT01594567 -NCT01594658 -NCT01594762 -NCT01594996 -NCT01595178 -NCT01595438 -NCT01595451 -NCT01595503 -NCT01595529 -NCT01595542 -NCT01595607 -NCT01595646 -NCT01595672 -NCT01595763 -NCT01596049 -NCT01596101 -NCT01596153 -NCT01596166 -NCT01596244 -NCT01596257 -NCT01596829 -NCT01596907 -NCT01596972 -NCT01597063 -NCT01597076 -NCT01597232 -NCT01597336 -NCT01597349 -NCT01597375 -NCT01597401 -NCT01597505 -NCT01597518 -NCT01597687 -NCT01597778 -NCT01597791 -NCT01597817 -NCT01597830 -NCT01597973 -NCT01598090 -NCT01598311 -NCT01598415 -NCT01598649 -NCT01598857 -NCT01598935 -NCT01599026 -NCT01599039 -NCT01599156 -NCT01599195 -NCT01599208 -NCT01599273 -NCT01599416 -NCT01599533 -NCT01599546 -NCT01599780 -NCT01599806 -NCT01599884 -NCT01599897 -NCT01599910 -NCT01599923 -NCT01599936 -NCT01599975 -NCT01600105 -NCT01600417 -NCT01600521 -NCT01600638 -NCT01600833 -NCT01600859 -NCT01600898 -NCT01600963 -NCT01600976 -NCT01601015 -NCT01601041 -NCT01601197 -NCT01601262 -NCT01601275 -NCT01601288 -NCT01601327 -NCT01601340 -NCT01601366 -NCT01601379 -NCT01601444 -NCT01601678 -NCT01601977 -NCT01602042 -NCT01602055 -NCT01602068 -NCT01602406 -NCT01602471 -NCT01602601 -NCT01602809 -NCT01602926 -NCT01602939 -NCT01602965 -NCT01603017 -NCT01603095 -NCT01603134 -NCT01603160 -NCT01603173 -NCT01603186 -NCT01603407 -NCT01603459 -NCT01603576 -NCT01603693 -NCT01603745 -NCT01603888 -NCT01604031 -NCT01604070 -NCT01604148 -NCT01604161 -NCT01604174 -NCT01604239 -NCT01604356 -NCT01604382 -NCT01604395 -NCT01604408 -NCT01604460 -NCT01604655 -NCT01604759 -NCT01604772 -NCT01604785 -NCT01604811 -NCT01604980 -NCT01605240 -NCT01605331 -NCT01605513 -NCT01605669 -NCT01605929 -NCT01606072 -NCT01606085 -NCT01606228 -NCT01606384 -NCT01606397 -NCT01606449 -NCT01606631 -NCT01606774 -NCT01606878 -NCT01607047 -NCT01607151 -NCT01607216 -NCT01607294 -NCT01607658 -NCT01607684 -NCT01607996 -NCT01608360 -NCT01608399 -NCT01608529 -NCT01608620 -NCT01608971 -NCT01609010 -NCT01609062 -NCT01609140 -NCT01609257 -NCT01609309 -NCT01609504 -NCT01609582 -NCT01609608 -NCT01609894 -NCT01609933 -NCT01610193 -NCT01610219 -NCT01610440 -NCT01610648 -NCT01610843 -NCT01610908 -NCT01610934 -NCT01611025 -NCT01611090 -NCT01611532 -NCT01611571 -NCT01611597 -NCT01611649 -NCT01612091 -NCT01612182 -NCT01612338 -NCT01612351 -NCT01612416 -NCT01612624 -NCT01612793 -NCT01612871 -NCT01612910 -NCT01613131 -NCT01613222 -NCT01613248 -NCT01613300 -NCT01613313 -NCT01613443 -NCT01613534 -NCT01613573 -NCT01613586 -NCT01613599 -NCT01613638 -NCT01613729 -NCT01613807 -NCT01613833 -NCT01613885 -NCT01613924 -NCT01614184 -NCT01614379 -NCT01614392 -NCT01614522 -NCT01614561 -NCT01614652 -NCT01614717 -NCT01614743 -NCT01614847 -NCT01614886 -NCT01615224 -NCT01615367 -NCT01615380 -NCT01615510 -NCT01615562 -NCT01615653 -NCT01615666 -NCT01615705 -NCT01615783 -NCT01615913 -NCT01615926 -NCT01616056 -NCT01616134 -NCT01616160 -NCT01616381 -NCT01616537 -NCT01616589 -NCT01616602 -NCT01616641 -NCT01616862 -NCT01616875 -NCT01616901 -NCT01617031 -NCT01617057 -NCT01617603 -NCT01617616 -NCT01617642 -NCT01617733 -NCT01617915 -NCT01618149 -NCT01618227 -NCT01618422 -NCT01618448 -NCT01618487 -NCT01618513 -NCT01618591 -NCT01618617 -NCT01618721 -NCT01618760 -NCT01618890 -NCT01618929 -NCT01619033 -NCT01619046 -NCT01619098 -NCT01619150 -NCT01619163 -NCT01619228 -NCT01619293 -NCT01619358 -NCT01619475 -NCT01619514 -NCT01619553 -NCT01619605 -NCT01619631 -NCT01619683 -NCT01619761 -NCT01619839 -NCT01619943 -NCT01619969 -NCT01619995 -NCT01620138 -NCT01620164 -NCT01620281 -NCT01620398 -NCT01620411 -NCT01620515 -NCT01620580 -NCT01620645 -NCT01620684 -NCT01620801 -NCT01620996 -NCT01621061 -NCT01621256 -NCT01621282 -NCT01621308 -NCT01621451 -NCT01621529 -NCT01621685 -NCT01621789 -NCT01621971 -NCT01622114 -NCT01622218 -NCT01622257 -NCT01622322 -NCT01622361 -NCT01622582 -NCT01622621 -NCT01622699 -NCT01622712 -NCT01622751 -NCT01622894 -NCT01623037 -NCT01623115 -NCT01623141 -NCT01623154 -NCT01623206 -NCT01623336 -NCT01623440 -NCT01623596 -NCT01623739 -NCT01623765 -NCT01623804 -NCT01623817 -NCT01623869 -NCT01623921 -NCT01624090 -NCT01624155 -NCT01624220 -NCT01624272 -NCT01624610 -NCT01624753 -NCT01624805 -NCT01625013 -NCT01625338 -NCT01625390 -NCT01625442 -NCT01625520 -NCT01625533 -NCT01625546 -NCT01626079 -NCT01626105 -NCT01626235 -NCT01626391 -NCT01626417 -NCT01626820 -NCT01626833 -NCT01627028 -NCT01627522 -NCT01627717 -NCT01627951 -NCT01628263 -NCT01628315 -NCT01628484 -NCT01628497 -NCT01628510 -NCT01628549 -NCT01628653 -NCT01628900 -NCT01628978 -NCT01629095 -NCT01629147 -NCT01629160 -NCT01629251 -NCT01629303 -NCT01629329 -NCT01629381 -NCT01629563 -NCT01629667 -NCT01629797 -NCT01629823 -NCT01630096 -NCT01630265 -NCT01630291 -NCT01630408 -NCT01630421 -NCT01630525 -NCT01630590 -NCT01630603 -NCT01630655 -NCT01630746 -NCT01630772 -NCT01630798 -NCT01630889 -NCT01631214 -NCT01631305 -NCT01631409 -NCT01631422 -NCT01631435 -NCT01631474 -NCT01631513 -NCT01631591 -NCT01631708 -NCT01631760 -NCT01631890 -NCT01631903 -NCT01631968 -NCT01632137 -NCT01632241 -NCT01632332 -NCT01632787 -NCT01632800 -NCT01632956 -NCT01633008 -NCT01633021 -NCT01633437 -NCT01633463 -NCT01633476 -NCT01633762 -NCT01633918 -NCT01633931 -NCT01634009 -NCT01634113 -NCT01634269 -NCT01634282 -NCT01634620 -NCT01634750 -NCT01634984 -NCT01635088 -NCT01635244 -NCT01635374 -NCT01635504 -NCT01635530 -NCT01635647 -NCT01635699 -NCT01635868 -NCT01635946 -NCT01635959 -NCT01636219 -NCT01636245 -NCT01636427 -NCT01636492 -NCT01637129 -NCT01637220 -NCT01637376 -NCT01637402 -NCT01637558 -NCT01637584 -NCT01637623 -NCT01637649 -NCT01637701 -NCT01637714 -NCT01637857 -NCT01638039 -NCT01638091 -NCT01638156 -NCT01638390 -NCT01638611 -NCT01638923 -NCT01638962 -NCT01639118 -NCT01639170 -NCT01639274 -NCT01639287 -NCT01639365 -NCT01639391 -NCT01639430 -NCT01639443 -NCT01639508 -NCT01639677 -NCT01639846 -NCT01639924 -NCT01640015 -NCT01640119 -NCT01640353 -NCT01640678 -NCT01640717 -NCT01640782 -NCT01640886 -NCT01641029 -NCT01641107 -NCT01641406 -NCT01641419 -NCT01641653 -NCT01641679 -NCT01641705 -NCT01641718 -NCT01641757 -NCT01641835 -NCT01641952 -NCT01642251 -NCT01642511 -NCT01642615 -NCT01642797 -NCT01642849 -NCT01642888 -NCT01642914 -NCT01642953 -NCT01643005 -NCT01643109 -NCT01643239 -NCT01643499 -NCT01643577 -NCT01643707 -NCT01643759 -NCT01643811 -NCT01643837 -NCT01643902 -NCT01644305 -NCT01644448 -NCT01644565 -NCT01644682 -NCT01644708 -NCT01644864 -NCT01644916 -NCT01645046 -NCT01645098 -NCT01645111 -NCT01645176 -NCT01645306 -NCT01645332 -NCT01645371 -NCT01645384 -NCT01645449 -NCT01645696 -NCT01645709 -NCT01645774 -NCT01645826 -NCT01646086 -NCT01646268 -NCT01646346 -NCT01646541 -NCT01647620 -NCT01647646 -NCT01647737 -NCT01647750 -NCT01647958 -NCT01648140 -NCT01648218 -NCT01648348 -NCT01648452 -NCT01648530 -NCT01648608 -NCT01648803 -NCT01648972 -NCT01649180 -NCT01649700 -NCT01649804 -NCT01649843 -NCT01650207 -NCT01650389 -NCT01650402 -NCT01650597 -NCT01650688 -NCT01651078 -NCT01651312 -NCT01651377 -NCT01651468 -NCT01651494 -NCT01651520 -NCT01651663 -NCT01651767 -NCT01651793 -NCT01651871 -NCT01651975 -NCT01652027 -NCT01652066 -NCT01652157 -NCT01652170 -NCT01652183 -NCT01652222 -NCT01652521 -NCT01652547 -NCT01652573 -NCT01652625 -NCT01652651 -NCT01652859 -NCT01652898 -NCT01652911 -NCT01652963 -NCT01652989 -NCT01653002 -NCT01653054 -NCT01653145 -NCT01653171 -NCT01653249 -NCT01653418 -NCT01653522 -NCT01653639 -NCT01653873 -NCT01653886 -NCT01653899 -NCT01653964 -NCT01653990 -NCT01654068 -NCT01654120 -NCT01654159 -NCT01654198 -NCT01654224 -NCT01654289 -NCT01654445 -NCT01654588 -NCT01654666 -NCT01654809 -NCT01655043 -NCT01655056 -NCT01655121 -NCT01655212 -NCT01655238 -NCT01655251 -NCT01655264 -NCT01655329 -NCT01655446 -NCT01655472 -NCT01655537 -NCT01655550 -NCT01655589 -NCT01655719 -NCT01655797 -NCT01655966 -NCT01656278 -NCT01656629 -NCT01656668 -NCT01656772 -NCT01656863 -NCT01657123 -NCT01657175 -NCT01657188 -NCT01657370 -NCT01657409 -NCT01657448 -NCT01657461 -NCT01657487 -NCT01657656 -NCT01657695 -NCT01657786 -NCT01657981 -NCT01658020 -NCT01658124 -NCT01658228 -NCT01658280 -NCT01658319 -NCT01658345 -NCT01658423 -NCT01658436 -NCT01658670 -NCT01658800 -NCT01658930 -NCT01658943 -NCT01659008 -NCT01659021 -NCT01659112 -NCT01659411 -NCT01659463 -NCT01659476 -NCT01659541 -NCT01659567 -NCT01659606 -NCT01659632 -NCT01659788 -NCT01659853 -NCT01659879 -NCT01660009 -NCT01660048 -NCT01660347 -NCT01660542 -NCT01660672 -NCT01660711 -NCT01660997 -NCT01661010 -NCT01661127 -NCT01661322 -NCT01661387 -NCT01661439 -NCT01661465 -NCT01661595 -NCT01661621 -NCT01661686 -NCT01661712 -NCT01661777 -NCT01661842 -NCT01661959 -NCT01661998 -NCT01662128 -NCT01662427 -NCT01662453 -NCT01662531 -NCT01662596 -NCT01662609 -NCT01662739 -NCT01662843 -NCT01662921 -NCT01662947 -NCT01662960 -NCT01663103 -NCT01663155 -NCT01663207 -NCT01663350 -NCT01663493 -NCT01663545 -NCT01663584 -NCT01663597 -NCT01663623 -NCT01663675 -NCT01663701 -NCT01663909 -NCT01663935 -NCT01664026 -NCT01664195 -NCT01664221 -NCT01664546 -NCT01665118 -NCT01665495 -NCT01665521 -NCT01665547 -NCT01665599 -NCT01665768 -NCT01665781 -NCT01665820 -NCT01665859 -NCT01666509 -NCT01666548 -NCT01666873 -NCT01667042 -NCT01667068 -NCT01667081 -NCT01667172 -NCT01667211 -NCT01667250 -NCT01667367 -NCT01667627 -NCT01667718 -NCT01667744 -NCT01667770 -NCT01667848 -NCT01668251 -NCT01668290 -NCT01668381 -NCT01668472 -NCT01668498 -NCT01668654 -NCT01668862 -NCT01668875 -NCT01668953 -NCT01669161 -NCT01669174 -NCT01669304 -NCT01669317 -NCT01669655 -NCT01669928 -NCT01670006 -NCT01670097 -NCT01670292 -NCT01670422 -NCT01670435 -NCT01670474 -NCT01670617 -NCT01670643 -NCT01670786 -NCT01671150 -NCT01671267 -NCT01671319 -NCT01671371 -NCT01671384 -NCT01671397 -NCT01671423 -NCT01671436 -NCT01671462 -NCT01671774 -NCT01671826 -NCT01671878 -NCT01671943 -NCT01672151 -NCT01672216 -NCT01672242 -NCT01672268 -NCT01672307 -NCT01672411 -NCT01672658 -NCT01672749 -NCT01672918 -NCT01673152 -NCT01673282 -NCT01673347 -NCT01673373 -NCT01673490 -NCT01673568 -NCT01673633 -NCT01673646 -NCT01673698 -NCT01673789 -NCT01673919 -NCT01673932 -NCT01673945 -NCT01674049 -NCT01674101 -NCT01674140 -NCT01674205 -NCT01674530 -NCT01674608 -NCT01674621 -NCT01674725 -NCT01674998 -NCT01675037 -NCT01675141 -NCT01675310 -NCT01675323 -NCT01675362 -NCT01675401 -NCT01675440 -NCT01675466 -NCT01675635 -NCT01675713 -NCT01675778 -NCT01675856 -NCT01675921 -NCT01676090 -NCT01676363 -NCT01676493 -NCT01676753 -NCT01676909 -NCT01676948 -NCT01677091 -NCT01677234 -NCT01677260 -NCT01677416 -NCT01677455 -NCT01677481 -NCT01677559 -NCT01677572 -NCT01677624 -NCT01677637 -NCT01677689 -NCT01677715 -NCT01678053 -NCT01678131 -NCT01678144 -NCT01678157 -NCT01678261 -NCT01678274 -NCT01678365 -NCT01678391 -NCT01678443 -NCT01678690 -NCT01678729 -NCT01678859 -NCT01678963 -NCT01679041 -NCT01679158 -NCT01679210 -NCT01679431 -NCT01679548 -NCT01679574 -NCT01679717 -NCT01679925 -NCT01679951 -NCT01679977 -NCT01680029 -NCT01680198 -NCT01680211 -NCT01680380 -NCT01680432 -NCT01680523 -NCT01680640 -NCT01680822 -NCT01680874 -NCT01681004 -NCT01681303 -NCT01681472 -NCT01681615 -NCT01681641 -NCT01681667 -NCT01681836 -NCT01681875 -NCT01682122 -NCT01682187 -NCT01682200 -NCT01682317 -NCT01682460 -NCT01682720 -NCT01682733 -NCT01682772 -NCT01682798 -NCT01682837 -NCT01683019 -NCT01683162 -NCT01683435 -NCT01683487 -NCT01683565 -NCT01683708 -NCT01683786 -NCT01683799 -NCT01683812 -NCT01683825 -NCT01683864 -NCT01683968 -NCT01684072 -NCT01684384 -NCT01684397 -NCT01684605 -NCT01684670 -NCT01684839 -NCT01684943 -NCT01685021 -NCT01685047 -NCT01685190 -NCT01685333 -NCT01685359 -NCT01685385 -NCT01685515 -NCT01685567 -NCT01685749 -NCT01685827 -NCT01685996 -NCT01686282 -NCT01686568 -NCT01686594 -NCT01686672 -NCT01686698 -NCT01686776 -NCT01686828 -NCT01686971 -NCT01687101 -NCT01687192 -NCT01687205 -NCT01687244 -NCT01687257 -NCT01687283 -NCT01687543 -NCT01687608 -NCT01687647 -NCT01687790 -NCT01687842 -NCT01687959 -NCT01687972 -NCT01687998 -NCT01688076 -NCT01688128 -NCT01688349 -NCT01688388 -NCT01688453 -NCT01688466 -NCT01688531 -NCT01688609 -NCT01688934 -NCT01688973 -NCT01689064 -NCT01689350 -NCT01689402 -NCT01689467 -NCT01689532 -NCT01689558 -NCT01689610 -NCT01689623 -NCT01689883 -NCT01689896 -NCT01689948 -NCT01689961 -NCT01689974 -NCT01689987 -NCT01690013 -NCT01690182 -NCT01690559 -NCT01690767 -NCT01690936 -NCT01691040 -NCT01691196 -NCT01691248 -NCT01691339 -NCT01691352 -NCT01691508 -NCT01691521 -NCT01691547 -NCT01691781 -NCT01692015 -NCT01692106 -NCT01692132 -NCT01692223 -NCT01692379 -NCT01692626 -NCT01692834 -NCT01692964 -NCT01693237 -NCT01693432 -NCT01693510 -NCT01693575 -NCT01693783 -NCT01693939 -NCT01694043 -NCT01694056 -NCT01694238 -NCT01694251 -NCT01694654 -NCT01694771 -NCT01694875 -NCT01694953 -NCT01695031 -NCT01695187 -NCT01695265 -NCT01695330 -NCT01695369 -NCT01695434 -NCT01695525 -NCT01695577 -NCT01695850 -NCT01695902 -NCT01695915 -NCT01695993 -NCT01696123 -NCT01696136 -NCT01696227 -NCT01696266 -NCT01696552 -NCT01696734 -NCT01696799 -NCT01696864 -NCT01696955 -NCT01697059 -NCT01697150 -NCT01697228 -NCT01697267 -NCT01697332 -NCT01697345 -NCT01697358 -NCT01697540 -NCT01697891 -NCT01698047 -NCT01698073 -NCT01698086 -NCT01698099 -NCT01698203 -NCT01698268 -NCT01698398 -NCT01698411 -NCT01698424 -NCT01698489 -NCT01698697 -NCT01698840 -NCT01699009 -NCT01699022 -NCT01699074 -NCT01699139 -NCT01699542 -NCT01699555 -NCT01699607 -NCT01699906 -NCT01699919 -NCT01700049 -NCT01700244 -NCT01700309 -NCT01700426 -NCT01700439 -NCT01700517 -NCT01700530 -NCT01700634 -NCT01700686 -NCT01700738 -NCT01700829 -NCT01700881 -NCT01700959 -NCT01701076 -NCT01701089 -NCT01701245 -NCT01701258 -NCT01701388 -NCT01701427 -NCT01701622 -NCT01701687 -NCT01701804 -NCT01701843 -NCT01701869 -NCT01701947 -NCT01702012 -NCT01702246 -NCT01702337 -NCT01702376 -NCT01702519 -NCT01702610 -NCT01702636 -NCT01702740 -NCT01702844 -NCT01702870 -NCT01703065 -NCT01703091 -NCT01703403 -NCT01703494 -NCT01703559 -NCT01703676 -NCT01703728 -NCT01703780 -NCT01703806 -NCT01703845 -NCT01704157 -NCT01704313 -NCT01704339 -NCT01704430 -NCT01704495 -NCT01704664 -NCT01704729 -NCT01704742 -NCT01704807 -NCT01704872 -NCT01704976 -NCT01705054 -NCT01705366 -NCT01705379 -NCT01705444 -NCT01705496 -NCT01705587 -NCT01705600 -NCT01705795 -NCT01705834 -NCT01705847 -NCT01705886 -NCT01705899 -NCT01705964 -NCT01706068 -NCT01706081 -NCT01706094 -NCT01706237 -NCT01706250 -NCT01706263 -NCT01706445 -NCT01706458 -NCT01706562 -NCT01706900 -NCT01707121 -NCT01707173 -NCT01707212 -NCT01707225 -NCT01707238 -NCT01707251 -NCT01707290 -NCT01707472 -NCT01707524 -NCT01707563 -NCT01707615 -NCT01707771 -NCT01707966 -NCT01708005 -NCT01708109 -NCT01708174 -NCT01708265 -NCT01708317 -NCT01708564 -NCT01708941 -NCT01709058 -NCT01709071 -NCT01709110 -NCT01709149 -NCT01709214 -NCT01709227 -NCT01709292 -NCT01709331 -NCT01709435 -NCT01709513 -NCT01709812 -NCT01709864 -NCT01710072 -NCT01710254 -NCT01710501 -NCT01710618 -NCT01710683 -NCT01710696 -NCT01710722 -NCT01711099 -NCT01711229 -NCT01711528 -NCT01711541 -NCT01711580 -NCT01711606 -NCT01711749 -NCT01711879 -NCT01711918 -NCT01711983 -NCT01712178 -NCT01712204 -NCT01712230 -NCT01712243 -NCT01712269 -NCT01712360 -NCT01712438 -NCT01712646 -NCT01712841 -NCT01712893 -NCT01712984 -NCT01713023 -NCT01713361 -NCT01713452 -NCT01713582 -NCT01713699 -NCT01713842 -NCT01713972 -NCT01714089 -NCT01714102 -NCT01714167 -NCT01714505 -NCT01714557 -NCT01714635 -NCT01714648 -NCT01714661 -NCT01714791 -NCT01714843 -NCT01714934 -NCT01715025 -NCT01715077 -NCT01715207 -NCT01715220 -NCT01715376 -NCT01715415 -NCT01715727 -NCT01715948 -NCT01716000 -NCT01716104 -NCT01716156 -NCT01716416 -NCT01716520 -NCT01716611 -NCT01716754 -NCT01716767 -NCT01716897 -NCT01717079 -NCT01717118 -NCT01717196 -NCT01717326 -NCT01717404 -NCT01717430 -NCT01717599 -NCT01717664 -NCT01717703 -NCT01717716 -NCT01717768 -NCT01717794 -NCT01717911 -NCT01717924 -NCT01718067 -NCT01718119 -NCT01718171 -NCT01718275 -NCT01718366 -NCT01718379 -NCT01718444 -NCT01718496 -NCT01718561 -NCT01718639 -NCT01718886 -NCT01719068 -NCT01719081 -NCT01719107 -NCT01719120 -NCT01719211 -NCT01719237 -NCT01719393 -NCT01719445 -NCT01719471 -NCT01719484 -NCT01719575 -NCT01719679 -NCT01719783 -NCT01720004 -NCT01720342 -NCT01720433 -NCT01720459 -NCT01720745 -NCT01720771 -NCT01721018 -NCT01721083 -NCT01721265 -NCT01721291 -NCT01721369 -NCT01721577 -NCT01721668 -NCT01721694 -NCT01721850 -NCT01721902 -NCT01721967 -NCT01722084 -NCT01722201 -NCT01722214 -NCT01722240 -NCT01722305 -NCT01722318 -NCT01722578 -NCT01722617 -NCT01722773 -NCT01722812 -NCT01722942 -NCT01723124 -NCT01723150 -NCT01723202 -NCT01723488 -NCT01723553 -NCT01723644 -NCT01723748 -NCT01723839 -NCT01723904 -NCT01723943 -NCT01723956 -NCT01723995 -NCT01724034 -NCT01724086 -NCT01724112 -NCT01724229 -NCT01724463 -NCT01724580 -NCT01724619 -NCT01724658 -NCT01724671 -NCT01724840 -NCT01724905 -NCT01724996 -NCT01725048 -NCT01725152 -NCT01725217 -NCT01725438 -NCT01725451 -NCT01725477 -NCT01725529 -NCT01725568 -NCT01725581 -NCT01725815 -NCT01725828 -NCT01725893 -NCT01726036 -NCT01726049 -NCT01726062 -NCT01726465 -NCT01726556 -NCT01726725 -NCT01726751 -NCT01726803 -NCT01726842 -NCT01726920 -NCT01726985 -NCT01727193 -NCT01727349 -NCT01727583 -NCT01727674 -NCT01727687 -NCT01727752 -NCT01727817 -NCT01728090 -NCT01728454 -NCT01728662 -NCT01728896 -NCT01729039 -NCT01729104 -NCT01729481 -NCT01729533 -NCT01729559 -NCT01729624 -NCT01729715 -NCT01729806 -NCT01730053 -NCT01730144 -NCT01730404 -NCT01730560 -NCT01730612 -NCT01730651 -NCT01730664 -NCT01730716 -NCT01730781 -NCT01730833 -NCT01730911 -NCT01731028 -NCT01731054 -NCT01731145 -NCT01731223 -NCT01731262 -NCT01731288 -NCT01731301 -NCT01731340 -NCT01731444 -NCT01731561 -NCT01731665 -NCT01731678 -NCT01731795 -NCT01731821 -NCT01731886 -NCT01732107 -NCT01732497 -NCT01732627 -NCT01732770 -NCT01732796 -NCT01732835 -NCT01733069 -NCT01733095 -NCT01733290 -NCT01733472 -NCT01733511 -NCT01733823 -NCT01733979 -NCT01734044 -NCT01734096 -NCT01734122 -NCT01734161 -NCT01734174 -NCT01734187 -NCT01734369 -NCT01734447 -NCT01734473 -NCT01734486 -NCT01734525 -NCT01734655 -NCT01734707 -NCT01734720 -NCT01734837 -NCT01734967 -NCT01735006 -NCT01735032 -NCT01735045 -NCT01735136 -NCT01735201 -NCT01735760 -NCT01735799 -NCT01735812 -NCT01735851 -NCT01735877 -NCT01736033 -NCT01736059 -NCT01736111 -NCT01736267 -NCT01736345 -NCT01736410 -NCT01736423 -NCT01736475 -NCT01736670 -NCT01736774 -NCT01736917 -NCT01736956 -NCT01737008 -NCT01737138 -NCT01737164 -NCT01737723 -NCT01737801 -NCT01737840 -NCT01737983 -NCT01738087 -NCT01738113 -NCT01738139 -NCT01738243 -NCT01738347 -NCT01738412 -NCT01738776 -NCT01738802 -NCT01738945 -NCT01738984 -NCT01738997 -NCT01739244 -NCT01739283 -NCT01739335 -NCT01739634 -NCT01739972 -NCT01740063 -NCT01740388 -NCT01740492 -NCT01740583 -NCT01740726 -NCT01740999 -NCT01741428 -NCT01741519 -NCT01741623 -NCT01741805 -NCT01741948 -NCT01742026 -NCT01742117 -NCT01742156 -NCT01742338 -NCT01742377 -NCT01742494 -NCT01742598 -NCT01742741 -NCT01742819 -NCT01742897 -NCT01742936 -NCT01743001 -NCT01743040 -NCT01743066 -NCT01743235 -NCT01743469 -NCT01743521 -NCT01743729 -NCT01743768 -NCT01744015 -NCT01744028 -NCT01744041 -NCT01744106 -NCT01744847 -NCT01744873 -NCT01745237 -NCT01745354 -NCT01745406 -NCT01745601 -NCT01745796 -NCT01745822 -NCT01745861 -NCT01745939 -NCT01745952 -NCT01746420 -NCT01746498 -NCT01746511 -NCT01746589 -NCT01746602 -NCT01746628 -NCT01746693 -NCT01746771 -NCT01746823 -NCT01746862 -NCT01747005 -NCT01747018 -NCT01747070 -NCT01747135 -NCT01747148 -NCT01747174 -NCT01747187 -NCT01747213 -NCT01747226 -NCT01747304 -NCT01747577 -NCT01747603 -NCT01747629 -NCT01747772 -NCT01747811 -NCT01747824 -NCT01747993 -NCT01748136 -NCT01748357 -NCT01748370 -NCT01748578 -NCT01748656 -NCT01748682 -NCT01748721 -NCT01748734 -NCT01748812 -NCT01749384 -NCT01749527 -NCT01749592 -NCT01750099 -NCT01750151 -NCT01750398 -NCT01750515 -NCT01750632 -NCT01750658 -NCT01750697 -NCT01750957 -NCT01751191 -NCT01751451 -NCT01751516 -NCT01751555 -NCT01751568 -NCT01751776 -NCT01752309 -NCT01752387 -NCT01752621 -NCT01752647 -NCT01752920 -NCT01752998 -NCT01753076 -NCT01753128 -NCT01753154 -NCT01753219 -NCT01753414 -NCT01753479 -NCT01753856 -NCT01754038 -NCT01754441 -NCT01754493 -NCT01754519 -NCT01754792 -NCT01754935 -NCT01755364 -NCT01755429 -NCT01755598 -NCT01755832 -NCT01755897 -NCT01756105 -NCT01756196 -NCT01756209 -NCT01756222 -NCT01756339 -NCT01756391 -NCT01756547 -NCT01756690 -NCT01756742 -NCT01757145 -NCT01757158 -NCT01757223 -NCT01757314 -NCT01757327 -NCT01757405 -NCT01757418 -NCT01757431 -NCT01757444 -NCT01757769 -NCT01758094 -NCT01758211 -NCT01758497 -NCT01758549 -NCT01758614 -NCT01758692 -NCT01758718 -NCT01758874 -NCT01759095 -NCT01759108 -NCT01759134 -NCT01759186 -NCT01759225 -NCT01759472 -NCT01759615 -NCT01759654 -NCT01759758 -NCT01759849 -NCT01759914 -NCT01760226 -NCT01760421 -NCT01760642 -NCT01760655 -NCT01760668 -NCT01760798 -NCT01760915 -NCT01760980 -NCT01761201 -NCT01761305 -NCT01761331 -NCT01761435 -NCT01761539 -NCT01761604 -NCT01761630 -NCT01761825 -NCT01761838 -NCT01761864 -NCT01761955 -NCT01761981 -NCT01762189 -NCT01762215 -NCT01762540 -NCT01762722 -NCT01762982 -NCT01763034 -NCT01763047 -NCT01763164 -NCT01763320 -NCT01763489 -NCT01764061 -NCT01764074 -NCT01764139 -NCT01764412 -NCT01764503 -NCT01764815 -NCT01764867 -NCT01764919 -NCT01765088 -NCT01765179 -NCT01765192 -NCT01765348 -NCT01765387 -NCT01765439 -NCT01765465 -NCT01765764 -NCT01765894 -NCT01765920 -NCT01766037 -NCT01766115 -NCT01766141 -NCT01766180 -NCT01766206 -NCT01766284 -NCT01766297 -NCT01766700 -NCT01766713 -NCT01766739 -NCT01766830 -NCT01766856 -NCT01767220 -NCT01767233 -NCT01767610 -NCT01767701 -NCT01767818 -NCT01767909 -NCT01767922 -NCT01767961 -NCT01768247 -NCT01768351 -NCT01768403 -NCT01768468 -NCT01768494 -NCT01768520 -NCT01768546 -NCT01768598 -NCT01768715 -NCT01768793 -NCT01768806 -NCT01768832 -NCT01768962 -NCT01768975 -NCT01769040 -NCT01769092 -NCT01769105 -NCT01769157 -NCT01769222 -NCT01769352 -NCT01769729 -NCT01769820 -NCT01770080 -NCT01770106 -NCT01770197 -NCT01770210 -NCT01770223 -NCT01770249 -NCT01770275 -NCT01770366 -NCT01770405 -NCT01770483 -NCT01770509 -NCT01770886 -NCT01770951 -NCT01770964 -NCT01771133 -NCT01771159 -NCT01771172 -NCT01771276 -NCT01771328 -NCT01771952 -NCT01772043 -NCT01772095 -NCT01772121 -NCT01772134 -NCT01772147 -NCT01772199 -NCT01772316 -NCT01772368 -NCT01772459 -NCT01772758 -NCT01772862 -NCT01772888 -NCT01772979 -NCT01773031 -NCT01773330 -NCT01773447 -NCT01773486 -NCT01773538 -NCT01773616 -NCT01773772 -NCT01773837 -NCT01774045 -NCT01774162 -NCT01774253 -NCT01774279 -NCT01774318 -NCT01774357 -NCT01774448 -NCT01774526 -NCT01774903 -NCT01774916 -NCT01775098 -NCT01775215 -NCT01775293 -NCT01775371 -NCT01775488 -NCT01775501 -NCT01775592 -NCT01775618 -NCT01775709 -NCT01775813 -NCT01775865 -NCT01775917 -NCT01775995 -NCT01776021 -NCT01776060 -NCT01776125 -NCT01776255 -NCT01776372 -NCT01776749 -NCT01776931 -NCT01777243 -NCT01777334 -NCT01777347 -NCT01777373 -NCT01777711 -NCT01777815 -NCT01777828 -NCT01777867 -NCT01777971 -NCT01778023 -NCT01778270 -NCT01778348 -NCT01778673 -NCT01778738 -NCT01778959 -NCT01779050 -NCT01779063 -NCT01779115 -NCT01779167 -NCT01779323 -NCT01779583 -NCT01779596 -NCT01779609 -NCT01779635 -NCT01779921 -NCT01779947 -NCT01780025 -NCT01780285 -NCT01780298 -NCT01780311 -NCT01780350 -NCT01780610 -NCT01780649 -NCT01780831 -NCT01780857 -NCT01780870 -NCT01780961 -NCT01781039 -NCT01781182 -NCT01781325 -NCT01781468 -NCT01781507 -NCT01781546 -NCT01781663 -NCT01781689 -NCT01781715 -NCT01781793 -NCT01781975 -NCT01782040 -NCT01782105 -NCT01782339 -NCT01782378 -NCT01782443 -NCT01782495 -NCT01782521 -NCT01782560 -NCT01782625 -NCT01782651 -NCT01782677 -NCT01782690 -NCT01782703 -NCT01782768 -NCT01782820 -NCT01783054 -NCT01783171 -NCT01783522 -NCT01783535 -NCT01783574 -NCT01783600 -NCT01783639 -NCT01783730 -NCT01783808 -NCT01784055 -NCT01784185 -NCT01784237 -NCT01784302 -NCT01784328 -NCT01784393 -NCT01784848 -NCT01784874 -NCT01784939 -NCT01784952 -NCT01785173 -NCT01785186 -NCT01785368 -NCT01785394 -NCT01785420 -NCT01785459 -NCT01785511 -NCT01785550 -NCT01785563 -NCT01785589 -NCT01785602 -NCT01785641 -NCT01785680 -NCT01785706 -NCT01785719 -NCT01785758 -NCT01785940 -NCT01785979 -NCT01786018 -NCT01786109 -NCT01786135 -NCT01786174 -NCT01786200 -NCT01786252 -NCT01786278 -NCT01786473 -NCT01786512 -NCT01786590 -NCT01786603 -NCT01786720 -NCT01786746 -NCT01786837 -NCT01786902 -NCT01786928 -NCT01787084 -NCT01787097 -NCT01787175 -NCT01787188 -NCT01787500 -NCT01787552 -NCT01787591 -NCT01787604 -NCT01787760 -NCT01788020 -NCT01788085 -NCT01788098 -NCT01788111 -NCT01788176 -NCT01788215 -NCT01788579 -NCT01788735 -NCT01788748 -NCT01788813 -NCT01788878 -NCT01789008 -NCT01789255 -NCT01789268 -NCT01789567 -NCT01789658 -NCT01789775 -NCT01789788 -NCT01789840 -NCT01789866 -NCT01790022 -NCT01790074 -NCT01790087 -NCT01790269 -NCT01790282 -NCT01790685 -NCT01790776 -NCT01790919 -NCT01791153 -NCT01791335 -NCT01791452 -NCT01791478 -NCT01791608 -NCT01791634 -NCT01791660 -NCT01791816 -NCT01791842 -NCT01791933 -NCT01791946 -NCT01791985 -NCT01791998 -NCT01792245 -NCT01792336 -NCT01792362 -NCT01792427 -NCT01792466 -NCT01792739 -NCT01792778 -NCT01792791 -NCT01792817 -NCT01792830 -NCT01792947 -NCT01792973 -NCT01793064 -NCT01793168 -NCT01793272 -NCT01793493 -NCT01793519 -NCT01793532 -NCT01793649 -NCT01793883 -NCT01793922 -NCT01793948 -NCT01793987 -NCT01794026 -NCT01794117 -NCT01794585 -NCT01794624 -NCT01794819 -NCT01794845 -NCT01795014 -NCT01795131 -NCT01795443 -NCT01795456 -NCT01795573 -NCT01795794 -NCT01795898 -NCT01796041 -NCT01796184 -NCT01796301 -NCT01796314 -NCT01796353 -NCT01796444 -NCT01796548 -NCT01796652 -NCT01796665 -NCT01796808 -NCT01796860 -NCT01797016 -NCT01797055 -NCT01797068 -NCT01797289 -NCT01797484 -NCT01797575 -NCT01797627 -NCT01797718 -NCT01797848 -NCT01798173 -NCT01798212 -NCT01798277 -NCT01798316 -NCT01798368 -NCT01798628 -NCT01798641 -NCT01798706 -NCT01798823 -NCT01798875 -NCT01798914 -NCT01798953 -NCT01799018 -NCT01799070 -NCT01799109 -NCT01799213 -NCT01799317 -NCT01799408 -NCT01799902 -NCT01799915 -NCT01800149 -NCT01800162 -NCT01800188 -NCT01800305 -NCT01800487 -NCT01800500 -NCT01800526 -NCT01800552 -NCT01800565 -NCT01800591 -NCT01800604 -NCT01800617 -NCT01800799 -NCT01800981 -NCT01800994 -NCT01801449 -NCT01801475 -NCT01801553 -NCT01801670 -NCT01801735 -NCT01801761 -NCT01801826 -NCT01801839 -NCT01802060 -NCT01802190 -NCT01802398 -NCT01802463 -NCT01802723 -NCT01803113 -NCT01803256 -NCT01803334 -NCT01803386 -NCT01803607 -NCT01803646 -NCT01803685 -NCT01803906 -NCT01803919 -NCT01803997 -NCT01804036 -NCT01804140 -NCT01804231 -NCT01804309 -NCT01804426 -NCT01804478 -NCT01804517 -NCT01804543 -NCT01804634 -NCT01804647 -NCT01804751 -NCT01804790 -NCT01804946 -NCT01805557 -NCT01805596 -NCT01805817 -NCT01805882 -NCT01806025 -NCT01806207 -NCT01806272 -NCT01806324 -NCT01806506 -NCT01806792 -NCT01806857 -NCT01806961 -NCT01807065 -NCT01807286 -NCT01807325 -NCT01807429 -NCT01807533 -NCT01807559 -NCT01807598 -NCT01807637 -NCT01807832 -NCT01807936 -NCT01808131 -NCT01808183 -NCT01808248 -NCT01808417 -NCT01808508 -NCT01808638 -NCT01808742 -NCT01808755 -NCT01808885 -NCT01809132 -NCT01809262 -NCT01809301 -NCT01809496 -NCT01809730 -NCT01809808 -NCT01810068 -NCT01810081 -NCT01810237 -NCT01810302 -NCT01810432 -NCT01810666 -NCT01810692 -NCT01810705 -NCT01810809 -NCT01810835 -NCT01810848 -NCT01810939 -NCT01810952 -NCT01810965 -NCT01811069 -NCT01811147 -NCT01811212 -NCT01811264 -NCT01811459 -NCT01811537 -NCT01811563 -NCT01811654 -NCT01811706 -NCT01811771 -NCT01811823 -NCT01811992 -NCT01812070 -NCT01812109 -NCT01812161 -NCT01812278 -NCT01812304 -NCT01812395 -NCT01812447 -NCT01812460 -NCT01812551 -NCT01812694 -NCT01812876 -NCT01812928 -NCT01813006 -NCT01813058 -NCT01813071 -NCT01813084 -NCT01813097 -NCT01813162 -NCT01813396 -NCT01813409 -NCT01813630 -NCT01813825 -NCT01813916 -NCT01813929 -NCT01814033 -NCT01814046 -NCT01814111 -NCT01814228 -NCT01814345 -NCT01814631 -NCT01814982 -NCT01815021 -NCT01815086 -NCT01815112 -NCT01815190 -NCT01815281 -NCT01815424 -NCT01815476 -NCT01815645 -NCT01815697 -NCT01815710 -NCT01815775 -NCT01815827 -NCT01815905 -NCT01815918 -NCT01815970 -NCT01816295 -NCT01816334 -NCT01816490 -NCT01816516 -NCT01816555 -NCT01816711 -NCT01816815 -NCT01816919 -NCT01816932 -NCT01817296 -NCT01817322 -NCT01817400 -NCT01817686 -NCT01817738 -NCT01817764 -NCT01817868 -NCT01817894 -NCT01817907 -NCT01818050 -NCT01818089 -NCT01818180 -NCT01818206 -NCT01818336 -NCT01818349 -NCT01818479 -NCT01818505 -NCT01818557 -NCT01818739 -NCT01818804 -NCT01818999 -NCT01819077 -NCT01819220 -NCT01819272 -NCT01819363 -NCT01819376 -NCT01819389 -NCT01819441 -NCT01819519 -NCT01819701 -NCT01819714 -NCT01819844 -NCT01819987 -NCT01820117 -NCT01820416 -NCT01820546 -NCT01820793 -NCT01820871 -NCT01821001 -NCT01821040 -NCT01821196 -NCT01821586 -NCT01821638 -NCT01821768 -NCT01821911 -NCT01822106 -NCT01822119 -NCT01822158 -NCT01822275 -NCT01822301 -NCT01822379 -NCT01822522 -NCT01822561 -NCT01822665 -NCT01822795 -NCT01822808 -NCT01822860 -NCT01822873 -NCT01822899 -NCT01822977 -NCT01823224 -NCT01823250 -NCT01823393 -NCT01823432 -NCT01823783 -NCT01823848 -NCT01823939 -NCT01823952 -NCT01823965 -NCT01824108 -NCT01824186 -NCT01824368 -NCT01824420 -NCT01824459 -NCT01824537 -NCT01824654 -NCT01824875 -NCT01824901 -NCT01824940 -NCT01824966 -NCT01824992 -NCT01825187 -NCT01825239 -NCT01825330 -NCT01825408 -NCT01825421 -NCT01825434 -NCT01825538 -NCT01825642 -NCT01825785 -NCT01825863 -NCT01825967 -NCT01826071 -NCT01826201 -NCT01826266 -NCT01826279 -NCT01826474 -NCT01826487 -NCT01826513 -NCT01826617 -NCT01826682 -NCT01826708 -NCT01826851 -NCT01827046 -NCT01827150 -NCT01827371 -NCT01827436 -NCT01827462 -NCT01827592 -NCT01827904 -NCT01828073 -NCT01828125 -NCT01828138 -NCT01828177 -NCT01828216 -NCT01828255 -NCT01828294 -NCT01828333 -NCT01828645 -NCT01828684 -NCT01828723 -NCT01829074 -NCT01829139 -NCT01829191 -NCT01829386 -NCT01829399 -NCT01829737 -NCT01829906 -NCT01830283 -NCT01830387 -NCT01830452 -NCT01830751 -NCT01830894 -NCT01831011 -NCT01831037 -NCT01831115 -NCT01831180 -NCT01831297 -NCT01831388 -NCT01831739 -NCT01831882 -NCT01831960 -NCT01832233 -NCT01832246 -NCT01832259 -NCT01832311 -NCT01832402 -NCT01832623 -NCT01832636 -NCT01832753 -NCT01832766 -NCT01832805 -NCT01832935 -NCT01832961 -NCT01832987 -NCT01833026 -NCT01833065 -NCT01833091 -NCT01833325 -NCT01833390 -NCT01833533 -NCT01833676 -NCT01833858 -NCT01834001 -NCT01834027 -NCT01834079 -NCT01834300 -NCT01834898 -NCT01835054 -NCT01835067 -NCT01835145 -NCT01835158 -NCT01835379 -NCT01835483 -NCT01835496 -NCT01835522 -NCT01835561 -NCT01835756 -NCT01835860 -NCT01835873 -NCT01835964 -NCT01836055 -NCT01836107 -NCT01836172 -NCT01836211 -NCT01836354 -NCT01836393 -NCT01836679 -NCT01836822 -NCT01836926 -NCT01837017 -NCT01837160 -NCT01837199 -NCT01837290 -NCT01837303 -NCT01837316 -NCT01837342 -NCT01837407 -NCT01837459 -NCT01837524 -NCT01837745 -NCT01837784 -NCT01837862 -NCT01837927 -NCT01837979 -NCT01838057 -NCT01838122 -NCT01838252 -NCT01838343 -NCT01838356 -NCT01838447 -NCT01838460 -NCT01838551 -NCT01838642 -NCT01838655 -NCT01838668 -NCT01839110 -NCT01839175 -NCT01839188 -NCT01839331 -NCT01839370 -NCT01839383 -NCT01839448 -NCT01839461 -NCT01839682 -NCT01839851 -NCT01839942 -NCT01840111 -NCT01840189 -NCT01840306 -NCT01840449 -NCT01840618 -NCT01840670 -NCT01840852 -NCT01841372 -NCT01841515 -NCT01841528 -NCT01841541 -NCT01841554 -NCT01841723 -NCT01841736 -NCT01841775 -NCT01841814 -NCT01841827 -NCT01841840 -NCT01841957 -NCT01842035 -NCT01842048 -NCT01842113 -NCT01842139 -NCT01842230 -NCT01842256 -NCT01842308 -NCT01842347 -NCT01842373 -NCT01842399 -NCT01842425 -NCT01842490 -NCT01842542 -NCT01842581 -NCT01842633 -NCT01842724 -NCT01842737 -NCT01843439 -NCT01843478 -NCT01843582 -NCT01843660 -NCT01843803 -NCT01843816 -NCT01844180 -NCT01844271 -NCT01844440 -NCT01844609 -NCT01844622 -NCT01844856 -NCT01844934 -NCT01845025 -NCT01845090 -NCT01845285 -NCT01845376 -NCT01845441 -NCT01845454 -NCT01845493 -NCT01845506 -NCT01845532 -NCT01845662 -NCT01845727 -NCT01845805 -NCT01845831 -NCT01845883 -NCT01845922 -NCT01845935 -NCT01846130 -NCT01846182 -NCT01846221 -NCT01846234 -NCT01846286 -NCT01846442 -NCT01846468 -NCT01846507 -NCT01846533 -NCT01846676 -NCT01846689 -NCT01846793 -NCT01846806 -NCT01846819 -NCT01846832 -NCT01847027 -NCT01847157 -NCT01847235 -NCT01847300 -NCT01847352 -NCT01847378 -NCT01847573 -NCT01847651 -NCT01847690 -NCT01847937 -NCT01848015 -NCT01848041 -NCT01848171 -NCT01848197 -NCT01848353 -NCT01848600 -NCT01848782 -NCT01848925 -NCT01848990 -NCT01849016 -NCT01849055 -NCT01849159 -NCT01849250 -NCT01849302 -NCT01849406 -NCT01849445 -NCT01849484 -NCT01849536 -NCT01849627 -NCT01849770 -NCT01849796 -NCT01849952 -NCT01850030 -NCT01850095 -NCT01850108 -NCT01850498 -NCT01850628 -NCT01850693 -NCT01850745 -NCT01850758 -NCT01850771 -NCT01850797 -NCT01850836 -NCT01850979 -NCT01851044 -NCT01851226 -NCT01851252 -NCT01851278 -NCT01851499 -NCT01851577 -NCT01851681 -NCT01852006 -NCT01852045 -NCT01852266 -NCT01852448 -NCT01852578 -NCT01852591 -NCT01852708 -NCT01852786 -NCT01852799 -NCT01852968 -NCT01853098 -NCT01853293 -NCT01853579 -NCT01853631 -NCT01853644 -NCT01853748 -NCT01853787 -NCT01853800 -NCT01854047 -NCT01854268 -NCT01854294 -NCT01854372 -NCT01854385 -NCT01854515 -NCT01854528 -NCT01854580 -NCT01854723 -NCT01854970 -NCT01855126 -NCT01855165 -NCT01855178 -NCT01855243 -NCT01855308 -NCT01855334 -NCT01855360 -NCT01855503 -NCT01855516 -NCT01855568 -NCT01855672 -NCT01855841 -NCT01855880 -NCT01855932 -NCT01855958 -NCT01855971 -NCT01856036 -NCT01856101 -NCT01856114 -NCT01856140 -NCT01856192 -NCT01856205 -NCT01856270 -NCT01856361 -NCT01856426 -NCT01856621 -NCT01856686 -NCT01856699 -NCT01856751 -NCT01856777 -NCT01856868 -NCT01856920 -NCT01856972 -NCT01857102 -NCT01857310 -NCT01857401 -NCT01857440 -NCT01857505 -NCT01857570 -NCT01857661 -NCT01857713 -NCT01857778 -NCT01857947 -NCT01857999 -NCT01858129 -NCT01858168 -NCT01858558 -NCT01858766 -NCT01858935 -NCT01858961 -NCT01859130 -NCT01859182 -NCT01859234 -NCT01859286 -NCT01859312 -NCT01859507 -NCT01859663 -NCT01859819 -NCT01859949 -NCT01860027 -NCT01860222 -NCT01860482 -NCT01860534 -NCT01860612 -NCT01860833 -NCT01860963 -NCT01861067 -NCT01861431 -NCT01861639 -NCT01861652 -NCT01861704 -NCT01861717 -NCT01861977 -NCT01861990 -NCT01862068 -NCT01862159 -NCT01862237 -NCT01862341 -NCT01862380 -NCT01862510 -NCT01862536 -NCT01862640 -NCT01862744 -NCT01862770 -NCT01862809 -NCT01862900 -NCT01862978 -NCT01863017 -NCT01863095 -NCT01863173 -NCT01863264 -NCT01863381 -NCT01863628 -NCT01863758 -NCT01863914 -NCT01864070 -NCT01864135 -NCT01864382 -NCT01864408 -NCT01864434 -NCT01864473 -NCT01864486 -NCT01864525 -NCT01864564 -NCT01864655 -NCT01864733 -NCT01864876 -NCT01864941 -NCT01865084 -NCT01865227 -NCT01865279 -NCT01865292 -NCT01865305 -NCT01865448 -NCT01865500 -NCT01865539 -NCT01865656 -NCT01865903 -NCT01865929 -NCT01865955 -NCT01866111 -NCT01866527 -NCT01866774 -NCT01866995 -NCT01867008 -NCT01867294 -NCT01867346 -NCT01867359 -NCT01867424 -NCT01867437 -NCT01867502 -NCT01867515 -NCT01867554 -NCT01867645 -NCT01867749 -NCT01867931 -NCT01867944 -NCT01868009 -NCT01868204 -NCT01868230 -NCT01868334 -NCT01868373 -NCT01868438 -NCT01868542 -NCT01868581 -NCT01868880 -NCT01868932 -NCT01869192 -NCT01869478 -NCT01869491 -NCT01869699 -NCT01869751 -NCT01870050 -NCT01870310 -NCT01870492 -NCT01870661 -NCT01870700 -NCT01870830 -NCT01870895 -NCT01870960 -NCT01871038 -NCT01871779 -NCT01871896 -NCT01872078 -NCT01872273 -NCT01872351 -NCT01872481 -NCT01872572 -NCT01872585 -NCT01872884 -NCT01872897 -NCT01872949 -NCT01872975 -NCT01872988 -NCT01873014 -NCT01873066 -NCT01873287 -NCT01873417 -NCT01873664 -NCT01873690 -NCT01873872 -NCT01874028 -NCT01874067 -NCT01874132 -NCT01874223 -NCT01874275 -NCT01874288 -NCT01874301 -NCT01874418 -NCT01874483 -NCT01874535 -NCT01874548 -NCT01874561 -NCT01874808 -NCT01874860 -NCT01875042 -NCT01875133 -NCT01875198 -NCT01875341 -NCT01875458 -NCT01875510 -NCT01875523 -NCT01875640 -NCT01875744 -NCT01875926 -NCT01876004 -NCT01876121 -NCT01876147 -NCT01876290 -NCT01876342 -NCT01876420 -NCT01876511 -NCT01876550 -NCT01876706 -NCT01876784 -NCT01877083 -NCT01877122 -NCT01877174 -NCT01877278 -NCT01877317 -NCT01877590 -NCT01877616 -NCT01877681 -NCT01877694 -NCT01877707 -NCT01877863 -NCT01878019 -NCT01878032 -NCT01878136 -NCT01878175 -NCT01878370 -NCT01878604 -NCT01878799 -NCT01878955 -NCT01879241 -NCT01879293 -NCT01879397 -NCT01879410 -NCT01879475 -NCT01879501 -NCT01879592 -NCT01879618 -NCT01879787 -NCT01879969 -NCT01880086 -NCT01880151 -NCT01880281 -NCT01880320 -NCT01880463 -NCT01880515 -NCT01880580 -NCT01880632 -NCT01880645 -NCT01880710 -NCT01880892 -NCT01880970 -NCT01881126 -NCT01881295 -NCT01881399 -NCT01881542 -NCT01881607 -NCT01881789 -NCT01881867 -NCT01882088 -NCT01882153 -NCT01882205 -NCT01882283 -NCT01882478 -NCT01882712 -NCT01882855 -NCT01882894 -NCT01883024 -NCT01883115 -NCT01883245 -NCT01883271 -NCT01883349 -NCT01883375 -NCT01883427 -NCT01883609 -NCT01883726 -NCT01883778 -NCT01883869 -NCT01884168 -NCT01884467 -NCT01884571 -NCT01884649 -NCT01884844 -NCT01884870 -NCT01884922 -NCT01884935 -NCT01885000 -NCT01885104 -NCT01885156 -NCT01885182 -NCT01885273 -NCT01885650 -NCT01885689 -NCT01886027 -NCT01886131 -NCT01886222 -NCT01886248 -NCT01886313 -NCT01886391 -NCT01886508 -NCT01886521 -NCT01886573 -NCT01886846 -NCT01886859 -NCT01886872 -NCT01886898 -NCT01886937 -NCT01887002 -NCT01887067 -NCT01887119 -NCT01887132 -NCT01887301 -NCT01887327 -NCT01887418 -NCT01887431 -NCT01887678 -NCT01887912 -NCT01888120 -NCT01888133 -NCT01888562 -NCT01888614 -NCT01888705 -NCT01888822 -NCT01888835 -NCT01888900 -NCT01888939 -NCT01888991 -NCT01889056 -NCT01889186 -NCT01889199 -NCT01889264 -NCT01889368 -NCT01889641 -NCT01889719 -NCT01889849 -NCT01889888 -NCT01890161 -NCT01890200 -NCT01890525 -NCT01890538 -NCT01890616 -NCT01890694 -NCT01890759 -NCT01890837 -NCT01890954 -NCT01891084 -NCT01891149 -NCT01891305 -NCT01891487 -NCT01891630 -NCT01891682 -NCT01891773 -NCT01891838 -NCT01891851 -NCT01891890 -NCT01891903 -NCT01892007 -NCT01892111 -NCT01892176 -NCT01892215 -NCT01892241 -NCT01892254 -NCT01892488 -NCT01892501 -NCT01892553 -NCT01892579 -NCT01892644 -NCT01892709 -NCT01892904 -NCT01892930 -NCT01892982 -NCT01893047 -NCT01893216 -NCT01893281 -NCT01893476 -NCT01893554 -NCT01893606 -NCT01893775 -NCT01893918 -NCT01894269 -NCT01894282 -NCT01894308 -NCT01894321 -NCT01894763 -NCT01894958 -NCT01895192 -NCT01895361 -NCT01895400 -NCT01895478 -NCT01895647 -NCT01895725 -NCT01895790 -NCT01895803 -NCT01895816 -NCT01895959 -NCT01896076 -NCT01896167 -NCT01896245 -NCT01896271 -NCT01896414 -NCT01896557 -NCT01896973 -NCT01897181 -NCT01897259 -NCT01897402 -NCT01897441 -NCT01897571 -NCT01897623 -NCT01898351 -NCT01898572 -NCT01898637 -NCT01898936 -NCT01899105 -NCT01899183 -NCT01899209 -NCT01899222 -NCT01899300 -NCT01899339 -NCT01899508 -NCT01899573 -NCT01899599 -NCT01899703 -NCT01899742 -NCT01899833 -NCT01899950 -NCT01899976 -NCT01900132 -NCT01900327 -NCT01900392 -NCT01900470 -NCT01900548 -NCT01900626 -NCT01900665 -NCT01900847 -NCT01900860 -NCT01900925 -NCT01901029 -NCT01901094 -NCT01901146 -NCT01901224 -NCT01901666 -NCT01901861 -NCT01901874 -NCT01901991 -NCT01902017 -NCT01902030 -NCT01902264 -NCT01902407 -NCT01902420 -NCT01902511 -NCT01902914 -NCT01902940 -NCT01902953 -NCT01903135 -NCT01903148 -NCT01903239 -NCT01903278 -NCT01903317 -NCT01903564 -NCT01903746 -NCT01903811 -NCT01904006 -NCT01904162 -NCT01904188 -NCT01904396 -NCT01904474 -NCT01904604 -NCT01904734 -NCT01904786 -NCT01904864 -NCT01905007 -NCT01905072 -NCT01905085 -NCT01905202 -NCT01905228 -NCT01905254 -NCT01905358 -NCT01905410 -NCT01905488 -NCT01905709 -NCT01905748 -NCT01905800 -NCT01905839 -NCT01905852 -NCT01905865 -NCT01905956 -NCT01905995 -NCT01906099 -NCT01906190 -NCT01906372 -NCT01906411 -NCT01906554 -NCT01906567 -NCT01906658 -NCT01906775 -NCT01906944 -NCT01906996 -NCT01907269 -NCT01907321 -NCT01907334 -NCT01907425 -NCT01907438 -NCT01907464 -NCT01907737 -NCT01907880 -NCT01907893 -NCT01908335 -NCT01908400 -NCT01908543 -NCT01908868 -NCT01908933 -NCT01909245 -NCT01909284 -NCT01909336 -NCT01909505 -NCT01909531 -NCT01909609 -NCT01909648 -NCT01909791 -NCT01909804 -NCT01909960 -NCT01910038 -NCT01910064 -NCT01910129 -NCT01910233 -NCT01910584 -NCT01910792 -NCT01911260 -NCT01911351 -NCT01911455 -NCT01911689 -NCT01911702 -NCT01911806 -NCT01911819 -NCT01911975 -NCT01912001 -NCT01912066 -NCT01912209 -NCT01912261 -NCT01912313 -NCT01912326 -NCT01912339 -NCT01912430 -NCT01912560 -NCT01912677 -NCT01912690 -NCT01913054 -NCT01913132 -NCT01913223 -NCT01913262 -NCT01913275 -NCT01913366 -NCT01913405 -NCT01913561 -NCT01913574 -NCT01913613 -NCT01913782 -NCT01913860 -NCT01914016 -NCT01914029 -NCT01914172 -NCT01914718 -NCT01914757 -NCT01914770 -NCT01915004 -NCT01915173 -NCT01915303 -NCT01915368 -NCT01915381 -NCT01915420 -NCT01915511 -NCT01915745 -NCT01915940 -NCT01916005 -NCT01916018 -NCT01916070 -NCT01916109 -NCT01916304 -NCT01916356 -NCT01916421 -NCT01916655 -NCT01916772 -NCT01916824 -NCT01916850 -NCT01916967 -NCT01917019 -NCT01917084 -NCT01917110 -NCT01917331 -NCT01917474 -NCT01917500 -NCT01917539 -NCT01917708 -NCT01917773 -NCT01918098 -NCT01918280 -NCT01918332 -NCT01918384 -NCT01918410 -NCT01918631 -NCT01918917 -NCT01919151 -NCT01919164 -NCT01919294 -NCT01919359 -NCT01919476 -NCT01919489 -NCT01919736 -NCT01919762 -NCT01919788 -NCT01919801 -NCT01919840 -NCT01920087 -NCT01920139 -NCT01920204 -NCT01920269 -NCT01920321 -NCT01920373 -NCT01920451 -NCT01920477 -NCT01920529 -NCT01920633 -NCT01920698 -NCT01920750 -NCT01920815 -NCT01920880 -NCT01920906 -NCT01921023 -NCT01921218 -NCT01921244 -NCT01921452 -NCT01921504 -NCT01921517 -NCT01921569 -NCT01921686 -NCT01921816 -NCT01921855 -NCT01921972 -NCT01922011 -NCT01922089 -NCT01922180 -NCT01922258 -NCT01922596 -NCT01922674 -NCT01922700 -NCT01922882 -NCT01922895 -NCT01922986 -NCT01922999 -NCT01923051 -NCT01923077 -NCT01923103 -NCT01923129 -NCT01923168 -NCT01923194 -NCT01923376 -NCT01923571 -NCT01923675 -NCT01923701 -NCT01923753 -NCT01924000 -NCT01924091 -NCT01924104 -NCT01924117 -NCT01924208 -NCT01924312 -NCT01924390 -NCT01924455 -NCT01924572 -NCT01924806 -NCT01924884 -NCT01924988 -NCT01925001 -NCT01925014 -NCT01925053 -NCT01925092 -NCT01925131 -NCT01925261 -NCT01925287 -NCT01925378 -NCT01925391 -NCT01925482 -NCT01925495 -NCT01925547 -NCT01925638 -NCT01925703 -NCT01925742 -NCT01925833 -NCT01925872 -NCT01925976 -NCT01926249 -NCT01926327 -NCT01926600 -NCT01926808 -NCT01927094 -NCT01927133 -NCT01927146 -NCT01927198 -NCT01927432 -NCT01927445 -NCT01927458 -NCT01927471 -NCT01927536 -NCT01927653 -NCT01927692 -NCT01927757 -NCT01927809 -NCT01927835 -NCT01927861 -NCT01927939 -NCT01928368 -NCT01928381 -NCT01928433 -NCT01928472 -NCT01928589 -NCT01928641 -NCT01928719 -NCT01928758 -NCT01928784 -NCT01928888 -NCT01929057 -NCT01929239 -NCT01929395 -NCT01929538 -NCT01929850 -NCT01929954 -NCT01929993 -NCT01930032 -NCT01930396 -NCT01930513 -NCT01930643 -NCT01930708 -NCT01930747 -NCT01930799 -NCT01930916 -NCT01930929 -NCT01931046 -NCT01931319 -NCT01931449 -NCT01931540 -NCT01931605 -NCT01931644 -NCT01931696 -NCT01931826 -NCT01931956 -NCT01931969 -NCT01932047 -NCT01932164 -NCT01932190 -NCT01932450 -NCT01932463 -NCT01932554 -NCT01932580 -NCT01932671 -NCT01932723 -NCT01932736 -NCT01932788 -NCT01932931 -NCT01933022 -NCT01933373 -NCT01933464 -NCT01933516 -NCT01933555 -NCT01933607 -NCT01933841 -NCT01933984 -NCT01934023 -NCT01934270 -NCT01934283 -NCT01934322 -NCT01934504 -NCT01934660 -NCT01934673 -NCT01934829 -NCT01934959 -NCT01934998 -NCT01935050 -NCT01935063 -NCT01935232 -NCT01935258 -NCT01935401 -NCT01935427 -NCT01935752 -NCT01935765 -NCT01935817 -NCT01935843 -NCT01936077 -NCT01936129 -NCT01936155 -NCT01936207 -NCT01936298 -NCT01936350 -NCT01936571 -NCT01936584 -NCT01936818 -NCT01936922 -NCT01937455 -NCT01937468 -NCT01937624 -NCT01937663 -NCT01937676 -NCT01937728 -NCT01937910 -NCT01938196 -NCT01938430 -NCT01938781 -NCT01938820 -NCT01938924 -NCT01938950 -NCT01938989 -NCT01939184 -NCT01939236 -NCT01939327 -NCT01939431 -NCT01939496 -NCT01939561 -NCT01939834 -NCT01940081 -NCT01940094 -NCT01940120 -NCT01940328 -NCT01940393 -NCT01940406 -NCT01940510 -NCT01940666 -NCT01940718 -NCT01940744 -NCT01940809 -NCT01940835 -NCT01941108 -NCT01941459 -NCT01941537 -NCT01941784 -NCT01942018 -NCT01942122 -NCT01942265 -NCT01942395 -NCT01942434 -NCT01942447 -NCT01942486 -NCT01942564 -NCT01942577 -NCT01942733 -NCT01942746 -NCT01942941 -NCT01943162 -NCT01943279 -NCT01943318 -NCT01943448 -NCT01943513 -NCT01943526 -NCT01943617 -NCT01943721 -NCT01943799 -NCT01943929 -NCT01944020 -NCT01944176 -NCT01944228 -NCT01944306 -NCT01944384 -NCT01944475 -NCT01944501 -NCT01944696 -NCT01944787 -NCT01944878 -NCT01944904 -NCT01944969 -NCT01945008 -NCT01945034 -NCT01945060 -NCT01945125 -NCT01945164 -NCT01945177 -NCT01945528 -NCT01945567 -NCT01945593 -NCT01946126 -NCT01946165 -NCT01946438 -NCT01946724 -NCT01946750 -NCT01946776 -NCT01946828 -NCT01946880 -NCT01946984 -NCT01947023 -NCT01947140 -NCT01947556 -NCT01947582 -NCT01948076 -NCT01948141 -NCT01948388 -NCT01948453 -NCT01948518 -NCT01948544 -NCT01948778 -NCT01949051 -NCT01949090 -NCT01949168 -NCT01949233 -NCT01949246 -NCT01949337 -NCT01949467 -NCT01949493 -NCT01949532 -NCT01949675 -NCT01949727 -NCT01949987 -NCT01950039 -NCT01950065 -NCT01950169 -NCT01950260 -NCT01950286 -NCT01950338 -NCT01950377 -NCT01950429 -NCT01950624 -NCT01950741 -NCT01950806 -NCT01950871 -NCT01950936 -NCT01950975 -NCT01951040 -NCT01951066 -NCT01951079 -NCT01951105 -NCT01951287 -NCT01951378 -NCT01951391 -NCT01951859 -NCT01952054 -NCT01952080 -NCT01952275 -NCT01952327 -NCT01952379 -NCT01952431 -NCT01952470 -NCT01952613 -NCT01952678 -NCT01952834 -NCT01952886 -NCT01952912 -NCT01953172 -NCT01953198 -NCT01953289 -NCT01953458 -NCT01953588 -NCT01953679 -NCT01954082 -NCT01954121 -NCT01954199 -NCT01954225 -NCT01954303 -NCT01954446 -NCT01954524 -NCT01954550 -NCT01954615 -NCT01954628 -NCT01954667 -NCT01954875 -NCT01954940 -NCT01955005 -NCT01955018 -NCT01955057 -NCT01955174 -NCT01955317 -NCT01955369 -NCT01955382 -NCT01955460 -NCT01955486 -NCT01955499 -NCT01955681 -NCT01955707 -NCT01955746 -NCT01955811 -NCT01956266 -NCT01956500 -NCT01956669 -NCT01956877 -NCT01956955 -NCT01957020 -NCT01957059 -NCT01957150 -NCT01957163 -NCT01957319 -NCT01957345 -NCT01957501 -NCT01957527 -NCT01957618 -NCT01957761 -NCT01957774 -NCT01957813 -NCT01958073 -NCT01958125 -NCT01958268 -NCT01958281 -NCT01958294 -NCT01958463 -NCT01958476 -NCT01958736 -NCT01958749 -NCT01958931 -NCT01959048 -NCT01959139 -NCT01959152 -NCT01959204 -NCT01959256 -NCT01959412 -NCT01959464 -NCT01959581 -NCT01959698 -NCT01959841 -NCT01959919 -NCT01960101 -NCT01960452 -NCT01960478 -NCT01960530 -NCT01960777 -NCT01960803 -NCT01961115 -NCT01961154 -NCT01961219 -NCT01961258 -NCT01961271 -NCT01961284 -NCT01961466 -NCT01961557 -NCT01961570 -NCT01961726 -NCT01961804 -NCT01961908 -NCT01961973 -NCT01962129 -NCT01962246 -NCT01962441 -NCT01962467 -NCT01962480 -NCT01962532 -NCT01962610 -NCT01962779 -NCT01962883 -NCT01963039 -NCT01963312 -NCT01963390 -NCT01963481 -NCT01963611 -NCT01963793 -NCT01963845 -NCT01963910 -NCT01964040 -NCT01964144 -NCT01964339 -NCT01964430 -NCT01964742 -NCT01964885 -NCT01964924 -NCT01965171 -NCT01965587 -NCT01965756 -NCT01965873 -NCT01965886 -NCT01965964 -NCT01966081 -NCT01966341 -NCT01966393 -NCT01966406 -NCT01966419 -NCT01966549 -NCT01966614 -NCT01966640 -NCT01966653 -NCT01966848 -NCT01966991 -NCT01967030 -NCT01967173 -NCT01967251 -NCT01967290 -NCT01967342 -NCT01967433 -NCT01967459 -NCT01967498 -NCT01967550 -NCT01967628 -NCT01967745 -NCT01967927 -NCT01968083 -NCT01968226 -NCT01968291 -NCT01968408 -NCT01968434 -NCT01968603 -NCT01968655 -NCT01968733 -NCT01969006 -NCT01969071 -NCT01969123 -NCT01969136 -NCT01969201 -NCT01969214 -NCT01969396 -NCT01969409 -NCT01969734 -NCT01969799 -NCT01969916 -NCT01970163 -NCT01970306 -NCT01970319 -NCT01970488 -NCT01970501 -NCT01970631 -NCT01970670 -NCT01970722 -NCT01970735 -NCT01970748 -NCT01970800 -NCT01970813 -NCT01970891 -NCT01970969 -NCT01971099 -NCT01971255 -NCT01971294 -NCT01971645 -NCT01971658 -NCT01971697 -NCT01971944 -NCT01971957 -NCT01971983 -NCT01972347 -NCT01972477 -NCT01972594 -NCT01972620 -NCT01972802 -NCT01973179 -NCT01973387 -NCT01973465 -NCT01973647 -NCT01973751 -NCT01973855 -NCT01973985 -NCT01973998 -NCT01974011 -NCT01974024 -NCT01974089 -NCT01974102 -NCT01974167 -NCT01974180 -NCT01974284 -NCT01974297 -NCT01974466 -NCT01974726 -NCT01974791 -NCT01974908 -NCT01974947 -NCT01975038 -NCT01975090 -NCT01975194 -NCT01975259 -NCT01975376 -NCT01975389 -NCT01975545 -NCT01975571 -NCT01975727 -NCT01975909 -NCT01976091 -NCT01976117 -NCT01976273 -NCT01976351 -NCT01976364 -NCT01976416 -NCT01976429 -NCT01976741 -NCT01976936 -NCT01977001 -NCT01977196 -NCT01977313 -NCT01977417 -NCT01977456 -NCT01977833 -NCT01977898 -NCT01977937 -NCT01978080 -NCT01978119 -NCT01978145 -NCT01978158 -NCT01978262 -NCT01978444 -NCT01978470 -NCT01978834 -NCT01978899 -NCT01978938 -NCT01979042 -NCT01979250 -NCT01979328 -NCT01979419 -NCT01979471 -NCT01979588 -NCT01979718 -NCT01979861 -NCT01979952 -NCT01980199 -NCT01980238 -NCT01980303 -NCT01980407 -NCT01980433 -NCT01980498 -NCT01980680 -NCT01980693 -NCT01980745 -NCT01980797 -NCT01980888 -NCT01980940 -NCT01981135 -NCT01981265 -NCT01981369 -NCT01981525 -NCT01981590 -NCT01981655 -NCT01981733 -NCT01982136 -NCT01982149 -NCT01982214 -NCT01982292 -NCT01982331 -NCT01982422 -NCT01982448 -NCT01982604 -NCT01982695 -NCT01982747 -NCT01982760 -NCT01982929 -NCT01983072 -NCT01983397 -NCT01983514 -NCT01983683 -NCT01983943 -NCT01984593 -NCT01984619 -NCT01984710 -NCT01984775 -NCT01984866 -NCT01984996 -NCT01985126 -NCT01985256 -NCT01985633 -NCT01985646 -NCT01985867 -NCT01986205 -NCT01986322 -NCT01986465 -NCT01986660 -NCT01986686 -NCT01986972 -NCT01987063 -NCT01987076 -NCT01987128 -NCT01987245 -NCT01987609 -NCT01987622 -NCT01987635 -NCT01987804 -NCT01987869 -NCT01987895 -NCT01988090 -NCT01988181 -NCT01988194 -NCT01988376 -NCT01988402 -NCT01988428 -NCT01988623 -NCT01988753 -NCT01989221 -NCT01989299 -NCT01989325 -NCT01989507 -NCT01989533 -NCT01989585 -NCT01989624 -NCT01989689 -NCT01989923 -NCT01990274 -NCT01990287 -NCT01990313 -NCT01990339 -NCT01990365 -NCT01990404 -NCT01990612 -NCT01991041 -NCT01991197 -NCT01991223 -NCT01991314 -NCT01991392 -NCT01991405 -NCT01991457 -NCT01991548 -NCT01991925 -NCT01992016 -NCT01992146 -NCT01992159 -NCT01992198 -NCT01992328 -NCT01992380 -NCT01992536 -NCT01992562 -NCT01992575 -NCT01992627 -NCT01992666 -NCT01992718 -NCT01992783 -NCT01992796 -NCT01992809 -NCT01993290 -NCT01993342 -NCT01993394 -NCT01993498 -NCT01993654 -NCT01993693 -NCT01993719 -NCT01993836 -NCT01994044 -NCT01994187 -NCT01994200 -NCT01994330 -NCT01994343 -NCT01994382 -NCT01994395 -NCT01994434 -NCT01994460 -NCT01994538 -NCT01994564 -NCT01994577 -NCT01994642 -NCT01994889 -NCT01995019 -NCT01995071 -NCT01995266 -NCT01995370 -NCT01995500 -NCT01995591 -NCT01995695 -NCT01995734 -NCT01995812 -NCT01995851 -NCT01995929 -NCT01996007 -NCT01996124 -NCT01996267 -NCT01996345 -NCT01996449 -NCT01996527 -NCT01996683 -NCT01996930 -NCT01997047 -NCT01997229 -NCT01997255 -NCT01997476 -NCT01997489 -NCT01997554 -NCT01997580 -NCT01997658 -NCT01997866 -NCT01998334 -NCT01998633 -NCT01998724 -NCT01998737 -NCT01998841 -NCT01998880 -NCT01998893 -NCT01998958 -NCT01998971 -NCT01999075 -NCT01999166 -NCT01999231 -NCT01999270 -NCT01999335 -NCT01999387 -NCT01999556 -NCT01999595 -NCT01999803 -NCT01999907 -NCT02000414 -NCT02000427 -NCT02000635 -NCT02001051 -NCT02001324 -NCT02001415 -NCT02001441 -NCT02001454 -NCT02001688 -NCT02001701 -NCT02001948 -NCT02002000 -NCT02002065 -NCT02002143 -NCT02002234 -NCT02002260 -NCT02002286 -NCT02002299 -NCT02002468 -NCT02002572 -NCT02002663 -NCT02002793 -NCT02002871 -NCT02003209 -NCT02003521 -NCT02003586 -NCT02003651 -NCT02003742 -NCT02003963 -NCT02004275 -NCT02004366 -NCT02004431 -NCT02004470 -NCT02004535 -NCT02004561 -NCT02004925 -NCT02004964 -NCT02005029 -NCT02005042 -NCT02005068 -NCT02005172 -NCT02005380 -NCT02005562 -NCT02005666 -NCT02005705 -NCT02005822 -NCT02005874 -NCT02005900 -NCT02006056 -NCT02006290 -NCT02006303 -NCT02006342 -NCT02006368 -NCT02006420 -NCT02006615 -NCT02006940 -NCT02007083 -NCT02007226 -NCT02007291 -NCT02007330 -NCT02007473 -NCT02007564 -NCT02007850 -NCT02007967 -NCT02008045 -NCT02008084 -NCT02008214 -NCT02008305 -NCT02008344 -NCT02008617 -NCT02008721 -NCT02008799 -NCT02009319 -NCT02009345 -NCT02009462 -NCT02009722 -NCT02009787 -NCT02009969 -NCT02009982 -NCT02010047 -NCT02010125 -NCT02010138 -NCT02010164 -NCT02010177 -NCT02010268 -NCT02010385 -NCT02010398 -NCT02010671 -NCT02010697 -NCT02010710 -NCT02010814 -NCT02010840 -NCT02010853 -NCT02010918 -NCT02010970 -NCT02011048 -NCT02011126 -NCT02011191 -NCT02011204 -NCT02011243 -NCT02011308 -NCT02011360 -NCT02011464 -NCT02011542 -NCT02011620 -NCT02011698 -NCT02011776 -NCT02011789 -NCT02012023 -NCT02012049 -NCT02012088 -NCT02012101 -NCT02012127 -NCT02012231 -NCT02012413 -NCT02012426 -NCT02012465 -NCT02012491 -NCT02012582 -NCT02012634 -NCT02012647 -NCT02012673 -NCT02013076 -NCT02013479 -NCT02013700 -NCT02013999 -NCT02014025 -NCT02014246 -NCT02014311 -NCT02014389 -NCT02014467 -NCT02014571 -NCT02014597 -NCT02014649 -NCT02014688 -NCT02014831 -NCT02015091 -NCT02015195 -NCT02015468 -NCT02015572 -NCT02015858 -NCT02016118 -NCT02016170 -NCT02016222 -NCT02016248 -NCT02016560 -NCT02016586 -NCT02016716 -NCT02017275 -NCT02017327 -NCT02017574 -NCT02017587 -NCT02017782 -NCT02017795 -NCT02017808 -NCT02017912 -NCT02018003 -NCT02018068 -NCT02018172 -NCT02018432 -NCT02018497 -NCT02018653 -NCT02018705 -NCT02018835 -NCT02019017 -NCT02019355 -NCT02019446 -NCT02019641 -NCT02019680 -NCT02019706 -NCT02019784 -NCT02019888 -NCT02020018 -NCT02020096 -NCT02020174 -NCT02020278 -NCT02020369 -NCT02020499 -NCT02020642 -NCT02020655 -NCT02020681 -NCT02020785 -NCT02020889 -NCT02020941 -NCT02021019 -NCT02021032 -NCT02021097 -NCT02021253 -NCT02021474 -NCT02021617 -NCT02021643 -NCT02021656 -NCT02021695 -NCT02021721 -NCT02021747 -NCT02022137 -NCT02022384 -NCT02022566 -NCT02022644 -NCT02022670 -NCT02022826 -NCT02023203 -NCT02023229 -NCT02023424 -NCT02023476 -NCT02023489 -NCT02023554 -NCT02023671 -NCT02023762 -NCT02023801 -NCT02023931 -NCT02024113 -NCT02024217 -NCT02024256 -NCT02024269 -NCT02024282 -NCT02024347 -NCT02024360 -NCT02024386 -NCT02024399 -NCT02024425 -NCT02024451 -NCT02024529 -NCT02024555 -NCT02024568 -NCT02024685 -NCT02024789 -NCT02024906 -NCT02025049 -NCT02025088 -NCT02025179 -NCT02025270 -NCT02025465 -NCT02025504 -NCT02025543 -NCT02025699 -NCT02025751 -NCT02025777 -NCT02025790 -NCT02026115 -NCT02026154 -NCT02026258 -NCT02026310 -NCT02026349 -NCT02026427 -NCT02026479 -NCT02026596 -NCT02026609 -NCT02026726 -NCT02026869 -NCT02026908 -NCT02027077 -NCT02027207 -NCT02027220 -NCT02027298 -NCT02027350 -NCT02027610 -NCT02027623 -NCT02027779 -NCT02028013 -NCT02028052 -NCT02028065 -NCT02028286 -NCT02028351 -NCT02028429 -NCT02028468 -NCT02028572 -NCT02028637 -NCT02028858 -NCT02028910 -NCT02029053 -NCT02029144 -NCT02029183 -NCT02029352 -NCT02029443 -NCT02029456 -NCT02029690 -NCT02029781 -NCT02029859 -NCT02029911 -NCT02029937 -NCT02029950 -NCT02030223 -NCT02030249 -NCT02030314 -NCT02030392 -NCT02030418 -NCT02030457 -NCT02030756 -NCT02030951 -NCT02031029 -NCT02031120 -NCT02031172 -NCT02031263 -NCT02031328 -NCT02031393 -NCT02031484 -NCT02031523 -NCT02031588 -NCT02031614 -NCT02031640 -NCT02031653 -NCT02032251 -NCT02032277 -NCT02032576 -NCT02032693 -NCT02032745 -NCT02032888 -NCT02032979 -NCT02033096 -NCT02033200 -NCT02033408 -NCT02033473 -NCT02033642 -NCT02033720 -NCT02033811 -NCT02033876 -NCT02034279 -NCT02034344 -NCT02034435 -NCT02034487 -NCT02034513 -NCT02034903 -NCT02035033 -NCT02035293 -NCT02035319 -NCT02035332 -NCT02035345 -NCT02035423 -NCT02035514 -NCT02035670 -NCT02035774 -NCT02035904 -NCT02035930 -NCT02035982 -NCT02036086 -NCT02036177 -NCT02036203 -NCT02036463 -NCT02036528 -NCT02036580 -NCT02036710 -NCT02036866 -NCT02036944 -NCT02036957 -NCT02037035 -NCT02037048 -NCT02037217 -NCT02037347 -NCT02037438 -NCT02037451 -NCT02037516 -NCT02037776 -NCT02037893 -NCT02038049 -NCT02038205 -NCT02038322 -NCT02038374 -NCT02038400 -NCT02038478 -NCT02038634 -NCT02038699 -NCT02038712 -NCT02038751 -NCT02038868 -NCT02038972 -NCT02039011 -NCT02039219 -NCT02039232 -NCT02039323 -NCT02039375 -NCT02039388 -NCT02039778 -NCT02039869 -NCT02039999 -NCT02040142 -NCT02040181 -NCT02040194 -NCT02040233 -NCT02040493 -NCT02040545 -NCT02040766 -NCT02040779 -NCT02040831 -NCT02040922 -NCT02041169 -NCT02041195 -NCT02041858 -NCT02041910 -NCT02041923 -NCT02042092 -NCT02042170 -NCT02042196 -NCT02042261 -NCT02042404 -NCT02042443 -NCT02042638 -NCT02042755 -NCT02042820 -NCT02042846 -NCT02043054 -NCT02043444 -NCT02043470 -NCT02043587 -NCT02044198 -NCT02044341 -NCT02044419 -NCT02044510 -NCT02044523 -NCT02044536 -NCT02044640 -NCT02044965 -NCT02045004 -NCT02045017 -NCT02045121 -NCT02045199 -NCT02045238 -NCT02045264 -NCT02045342 -NCT02045420 -NCT02045550 -NCT02045641 -NCT02045771 -NCT02045784 -NCT02045901 -NCT02045940 -NCT02046057 -NCT02046395 -NCT02046603 -NCT02046863 -NCT02046941 -NCT02047136 -NCT02047162 -NCT02047175 -NCT02047279 -NCT02047370 -NCT02047552 -NCT02047825 -NCT02047851 -NCT02047864 -NCT02048163 -NCT02048267 -NCT02048553 -NCT02048670 -NCT02048748 -NCT02048813 -NCT02048904 -NCT02048956 -NCT02049073 -NCT02049086 -NCT02049190 -NCT02049203 -NCT02049268 -NCT02049606 -NCT02049892 -NCT02049918 -NCT02049957 -NCT02050022 -NCT02050048 -NCT02050282 -NCT02050347 -NCT02050529 -NCT02050685 -NCT02050763 -NCT02050815 -NCT02051101 -NCT02051205 -NCT02051244 -NCT02051413 -NCT02051530 -NCT02051608 -NCT02051855 -NCT02051894 -NCT02051907 -NCT02051972 -NCT02052089 -NCT02052271 -NCT02052479 -NCT02052661 -NCT02052752 -NCT02052934 -NCT02052947 -NCT02052999 -NCT02053181 -NCT02053350 -NCT02053402 -NCT02053467 -NCT02053480 -NCT02053493 -NCT02053597 -NCT02053610 -NCT02053623 -NCT02053636 -NCT02053753 -NCT02053961 -NCT02054013 -NCT02054052 -NCT02054104 -NCT02054117 -NCT02054221 -NCT02054286 -NCT02054455 -NCT02054624 -NCT02054780 -NCT02054923 -NCT02055053 -NCT02055157 -NCT02055248 -NCT02055495 -NCT02055534 -NCT02055573 -NCT02055729 -NCT02056054 -NCT02056067 -NCT02056223 -NCT02056288 -NCT02056457 -NCT02056522 -NCT02056678 -NCT02056730 -NCT02056756 -NCT02056847 -NCT02056886 -NCT02057003 -NCT02057055 -NCT02057198 -NCT02057328 -NCT02057393 -NCT02057471 -NCT02057484 -NCT02057523 -NCT02057627 -NCT02057809 -NCT02058069 -NCT02058082 -NCT02058303 -NCT02058459 -NCT02058628 -NCT02058823 -NCT02058953 -NCT02059018 -NCT02059122 -NCT02059135 -NCT02059317 -NCT02059473 -NCT02059538 -NCT02059993 -NCT02060058 -NCT02060071 -NCT02060136 -NCT02060149 -NCT02060253 -NCT02060331 -NCT02060383 -NCT02060474 -NCT02060487 -NCT02060539 -NCT02060552 -NCT02060695 -NCT02060799 -NCT02060929 -NCT02060994 -NCT02061033 -NCT02061072 -NCT02061228 -NCT02061332 -NCT02061384 -NCT02061514 -NCT02061592 -NCT02061995 -NCT02062229 -NCT02062242 -NCT02062307 -NCT02062372 -NCT02062554 -NCT02062606 -NCT02062632 -NCT02062775 -NCT02062840 -NCT02063048 -NCT02063087 -NCT02063126 -NCT02063282 -NCT02063568 -NCT02063633 -NCT02063724 -NCT02063971 -NCT02063997 -NCT02064127 -NCT02064166 -NCT02064244 -NCT02064309 -NCT02064361 -NCT02064686 -NCT02064881 -NCT02065219 -NCT02065479 -NCT02065492 -NCT02065804 -NCT02065921 -NCT02065999 -NCT02066012 -NCT02066116 -NCT02066129 -NCT02066233 -NCT02066298 -NCT02066493 -NCT02066506 -NCT02066519 -NCT02066532 -NCT02066545 -NCT02066649 -NCT02066896 -NCT02066922 -NCT02067026 -NCT02067052 -NCT02067130 -NCT02067247 -NCT02067260 -NCT02067286 -NCT02067299 -NCT02067312 -NCT02067325 -NCT02067377 -NCT02067468 -NCT02067520 -NCT02067546 -NCT02067598 -NCT02067624 -NCT02067663 -NCT02067702 -NCT02067806 -NCT02067897 -NCT02068053 -NCT02068079 -NCT02068157 -NCT02068677 -NCT02068872 -NCT02069106 -NCT02069197 -NCT02069366 -NCT02069626 -NCT02069678 -NCT02069756 -NCT02069873 -NCT02069912 -NCT02070016 -NCT02070224 -NCT02070640 -NCT02070679 -NCT02070952 -NCT02071004 -NCT02071056 -NCT02071225 -NCT02071355 -NCT02071394 -NCT02071472 -NCT02071511 -NCT02071589 -NCT02071654 -NCT02071693 -NCT02071849 -NCT02072057 -NCT02072070 -NCT02072473 -NCT02072590 -NCT02073006 -NCT02073071 -NCT02073201 -NCT02073305 -NCT02073396 -NCT02073448 -NCT02073461 -NCT02073487 -NCT02073591 -NCT02073773 -NCT02073890 -NCT02073968 -NCT02074007 -NCT02074111 -NCT02074150 -NCT02074202 -NCT02074553 -NCT02074644 -NCT02074709 -NCT02074787 -NCT02074839 -NCT02075021 -NCT02075177 -NCT02075229 -NCT02075320 -NCT02075372 -NCT02075437 -NCT02075489 -NCT02075567 -NCT02075606 -NCT02075632 -NCT02075671 -NCT02075775 -NCT02075879 -NCT02076074 -NCT02076243 -NCT02076308 -NCT02076438 -NCT02076581 -NCT02076620 -NCT02076672 -NCT02076776 -NCT02076867 -NCT02076906 -NCT02077023 -NCT02077036 -NCT02077101 -NCT02077348 -NCT02077439 -NCT02077530 -NCT02077673 -NCT02078076 -NCT02078102 -NCT02078154 -NCT02078167 -NCT02078219 -NCT02078245 -NCT02078258 -NCT02078323 -NCT02078531 -NCT02078661 -NCT02078687 -NCT02078739 -NCT02078765 -NCT02078791 -NCT02079103 -NCT02079363 -NCT02079389 -NCT02079428 -NCT02079558 -NCT02079636 -NCT02079688 -NCT02079714 -NCT02079727 -NCT02079753 -NCT02079948 -NCT02080247 -NCT02080299 -NCT02080312 -NCT02080455 -NCT02080598 -NCT02080624 -NCT02080663 -NCT02080806 -NCT02080962 -NCT02080988 -NCT02081040 -NCT02081066 -NCT02081079 -NCT02081196 -NCT02081222 -NCT02081300 -NCT02081339 -NCT02081365 -NCT02081404 -NCT02081456 -NCT02081508 -NCT02081625 -NCT02082197 -NCT02082275 -NCT02082340 -NCT02082353 -NCT02082379 -NCT02082431 -NCT02082691 -NCT02082730 -NCT02082925 -NCT02082951 -NCT02083016 -NCT02083029 -NCT02083185 -NCT02083510 -NCT02083848 -NCT02083861 -NCT02083887 -NCT02083926 -NCT02083939 -NCT02083965 -NCT02083978 -NCT02084095 -NCT02084134 -NCT02084160 -NCT02084199 -NCT02084238 -NCT02084264 -NCT02084342 -NCT02084407 -NCT02084459 -NCT02084472 -NCT02084745 -NCT02084888 -NCT02084914 -NCT02085018 -NCT02085187 -NCT02085304 -NCT02085408 -NCT02085499 -NCT02085603 -NCT02085655 -NCT02085928 -NCT02085941 -NCT02086136 -NCT02086292 -NCT02086448 -NCT02086825 -NCT02086838 -NCT02086890 -NCT02086916 -NCT02086994 -NCT02087007 -NCT02087046 -NCT02087059 -NCT02087150 -NCT02087397 -NCT02087488 -NCT02087631 -NCT02087748 -NCT02087852 -NCT02087917 -NCT02087956 -NCT02088086 -NCT02088281 -NCT02088372 -NCT02088827 -NCT02088866 -NCT02089048 -NCT02089087 -NCT02089217 -NCT02089243 -NCT02089555 -NCT02089711 -NCT02089750 -NCT02089854 -NCT02089932 -NCT02090348 -NCT02090374 -NCT02090400 -NCT02090413 -NCT02090816 -NCT02090907 -NCT02090933 -NCT02090998 -NCT02091024 -NCT02091167 -NCT02091362 -NCT02091492 -NCT02091596 -NCT02091674 -NCT02091778 -NCT02091791 -NCT02091869 -NCT02091947 -NCT02092064 -NCT02092129 -NCT02092155 -NCT02092337 -NCT02092571 -NCT02092584 -NCT02092662 -NCT02092714 -NCT02092740 -NCT02092831 -NCT02092935 -NCT02093013 -NCT02093065 -NCT02093247 -NCT02093299 -NCT02093767 -NCT02094053 -NCT02094079 -NCT02094144 -NCT02094235 -NCT02094274 -NCT02094313 -NCT02094339 -NCT02094443 -NCT02094482 -NCT02094729 -NCT02094742 -NCT02094950 -NCT02095041 -NCT02095093 -NCT02095132 -NCT02095158 -NCT02095301 -NCT02095561 -NCT02095587 -NCT02095600 -NCT02095834 -NCT02096068 -NCT02096094 -NCT02096237 -NCT02096406 -NCT02096445 -NCT02096458 -NCT02096510 -NCT02096562 -NCT02096835 -NCT02097095 -NCT02097212 -NCT02097225 -NCT02097368 -NCT02097420 -NCT02097615 -NCT02097719 -NCT02098044 -NCT02098109 -NCT02098239 -NCT02098252 -NCT02098265 -NCT02098369 -NCT02098499 -NCT02098616 -NCT02098642 -NCT02098681 -NCT02098707 -NCT02098759 -NCT02098772 -NCT02098863 -NCT02098889 -NCT02098902 -NCT02098915 -NCT02099006 -NCT02099045 -NCT02099214 -NCT02099240 -NCT02099487 -NCT02099578 -NCT02099604 -NCT02099721 -NCT02099734 -NCT02099773 -NCT02099916 -NCT02100150 -NCT02100189 -NCT02100202 -NCT02100332 -NCT02100358 -NCT02100488 -NCT02100670 -NCT02100722 -NCT02100969 -NCT02101034 -NCT02101177 -NCT02101203 -NCT02101242 -NCT02101281 -NCT02101294 -NCT02101385 -NCT02101606 -NCT02101931 -NCT02102009 -NCT02102035 -NCT02102061 -NCT02102100 -NCT02102165 -NCT02102269 -NCT02102542 -NCT02102568 -NCT02102620 -NCT02102724 -NCT02102880 -NCT02102906 -NCT02102958 -NCT02103075 -NCT02103192 -NCT02103218 -NCT02103335 -NCT02103348 -NCT02103426 -NCT02103504 -NCT02103582 -NCT02103608 -NCT02104050 -NCT02104180 -NCT02104440 -NCT02104492 -NCT02104505 -NCT02104583 -NCT02104609 -NCT02104817 -NCT02104921 -NCT02105090 -NCT02105103 -NCT02105441 -NCT02105480 -NCT02105519 -NCT02105714 -NCT02105766 -NCT02105909 -NCT02105948 -NCT02105961 -NCT02105974 -NCT02106182 -NCT02106442 -NCT02106455 -NCT02106520 -NCT02106572 -NCT02106676 -NCT02106741 -NCT02106819 -NCT02106897 -NCT02106910 -NCT02107196 -NCT02107495 -NCT02107521 -NCT02107638 -NCT02107898 -NCT02108132 -NCT02108340 -NCT02108392 -NCT02108431 -NCT02108509 -NCT02108522 -NCT02108613 -NCT02108782 -NCT02108821 -NCT02108860 -NCT02108912 -NCT02108925 -NCT02108990 -NCT02109016 -NCT02109159 -NCT02109198 -NCT02109237 -NCT02109263 -NCT02109289 -NCT02109302 -NCT02109354 -NCT02109614 -NCT02109640 -NCT02109770 -NCT02109887 -NCT02109939 -NCT02109952 -NCT02110004 -NCT02110069 -NCT02110186 -NCT02110225 -NCT02110355 -NCT02110433 -NCT02110485 -NCT02110706 -NCT02110745 -NCT02110810 -NCT02110914 -NCT02111005 -NCT02111044 -NCT02111057 -NCT02111304 -NCT02111356 -NCT02111369 -NCT02111538 -NCT02111668 -NCT02111785 -NCT02111837 -NCT02111850 -NCT02112019 -NCT02112045 -NCT02112175 -NCT02112279 -NCT02112409 -NCT02112422 -NCT02112578 -NCT02112604 -NCT02112617 -NCT02112643 -NCT02112721 -NCT02112799 -NCT02112812 -NCT02112864 -NCT02112890 -NCT02112903 -NCT02112929 -NCT02113163 -NCT02113241 -NCT02113332 -NCT02113436 -NCT02113514 -NCT02113527 -NCT02113618 -NCT02113709 -NCT02113774 -NCT02113787 -NCT02113865 -NCT02113891 -NCT02113904 -NCT02113917 -NCT02114034 -NCT02114099 -NCT02114112 -NCT02114203 -NCT02114216 -NCT02114411 -NCT02114476 -NCT02114489 -NCT02114528 -NCT02114684 -NCT02114710 -NCT02114762 -NCT02114775 -NCT02114944 -NCT02115009 -NCT02115100 -NCT02115126 -NCT02115178 -NCT02115230 -NCT02115269 -NCT02115282 -NCT02115334 -NCT02115490 -NCT02115802 -NCT02115867 -NCT02115906 -NCT02115919 -NCT02115997 -NCT02116101 -NCT02116127 -NCT02116140 -NCT02116244 -NCT02116361 -NCT02116439 -NCT02116647 -NCT02116673 -NCT02116738 -NCT02116764 -NCT02116829 -NCT02116907 -NCT02116920 -NCT02117063 -NCT02117284 -NCT02117336 -NCT02117375 -NCT02117401 -NCT02117427 -NCT02117453 -NCT02117635 -NCT02117661 -NCT02117960 -NCT02117973 -NCT02118233 -NCT02118532 -NCT02118558 -NCT02118675 -NCT02118727 -NCT02118766 -NCT02118792 -NCT02118805 -NCT02119091 -NCT02119286 -NCT02119338 -NCT02119429 -NCT02119494 -NCT02119559 -NCT02119611 -NCT02119624 -NCT02119637 -NCT02119754 -NCT02119780 -NCT02119871 -NCT02119884 -NCT02119923 -NCT02120027 -NCT02120053 -NCT02120638 -NCT02120651 -NCT02120833 -NCT02120924 -NCT02121028 -NCT02121080 -NCT02121171 -NCT02121301 -NCT02121353 -NCT02121457 -NCT02121496 -NCT02121561 -NCT02121587 -NCT02121613 -NCT02121756 -NCT02121938 -NCT02122159 -NCT02122211 -NCT02122419 -NCT02122432 -NCT02122445 -NCT02122601 -NCT02122614 -NCT02122640 -NCT02122653 -NCT02122783 -NCT02122900 -NCT02123043 -NCT02123056 -NCT02123147 -NCT02123407 -NCT02123498 -NCT02123537 -NCT02123641 -NCT02123680 -NCT02123953 -NCT02124031 -NCT02124044 -NCT02124070 -NCT02124096 -NCT02124109 -NCT02124356 -NCT02124551 -NCT02124577 -NCT02124850 -NCT02124889 -NCT02124928 -NCT02125318 -NCT02125344 -NCT02125591 -NCT02125604 -NCT02125682 -NCT02125747 -NCT02125760 -NCT02125825 -NCT02125929 -NCT02126098 -NCT02126137 -NCT02126176 -NCT02126254 -NCT02126501 -NCT02126631 -NCT02126644 -NCT02126670 -NCT02126683 -NCT02126709 -NCT02126722 -NCT02126774 -NCT02126891 -NCT02126982 -NCT02126995 -NCT02127073 -NCT02127333 -NCT02127398 -NCT02127515 -NCT02127554 -NCT02127645 -NCT02127814 -NCT02127827 -NCT02128061 -NCT02128126 -NCT02128152 -NCT02128165 -NCT02128217 -NCT02128438 -NCT02128490 -NCT02128529 -NCT02128542 -NCT02128646 -NCT02128659 -NCT02128685 -NCT02128698 -NCT02128763 -NCT02128776 -NCT02129088 -NCT02129309 -NCT02129335 -NCT02129348 -NCT02129413 -NCT02129439 -NCT02129452 -NCT02129608 -NCT02129634 -NCT02129764 -NCT02129855 -NCT02130180 -NCT02130193 -NCT02130245 -NCT02130258 -NCT02130271 -NCT02130284 -NCT02130323 -NCT02130505 -NCT02130570 -NCT02130687 -NCT02130765 -NCT02130843 -NCT02130882 -NCT02130973 -NCT02131064 -NCT02131207 -NCT02131259 -NCT02131324 -NCT02131350 -NCT02131467 -NCT02131545 -NCT02131636 -NCT02131701 -NCT02131714 -NCT02131766 -NCT02132052 -NCT02132078 -NCT02132117 -NCT02132130 -NCT02132208 -NCT02132260 -NCT02132364 -NCT02132507 -NCT02132533 -NCT02132585 -NCT02132637 -NCT02132728 -NCT02133014 -NCT02133027 -NCT02133222 -NCT02133300 -NCT02133417 -NCT02133651 -NCT02133768 -NCT02133781 -NCT02133794 -NCT02133820 -NCT02133885 -NCT02133898 -NCT02133924 -NCT02134223 -NCT02134327 -NCT02134392 -NCT02134444 -NCT02134457 -NCT02134470 -NCT02134522 -NCT02134535 -NCT02134652 -NCT02134704 -NCT02134717 -NCT02135094 -NCT02135133 -NCT02135276 -NCT02135380 -NCT02135445 -NCT02135601 -NCT02135692 -NCT02135731 -NCT02135900 -NCT02136043 -NCT02136095 -NCT02136368 -NCT02136394 -NCT02136459 -NCT02136602 -NCT02136719 -NCT02136758 -NCT02136823 -NCT02136836 -NCT02136849 -NCT02136953 -NCT02137044 -NCT02137135 -NCT02137200 -NCT02137213 -NCT02137252 -NCT02137265 -NCT02137278 -NCT02137291 -NCT02137304 -NCT02137317 -NCT02137408 -NCT02137460 -NCT02137538 -NCT02137577 -NCT02138214 -NCT02138331 -NCT02138422 -NCT02138539 -NCT02138630 -NCT02138643 -NCT02138786 -NCT02138890 -NCT02139046 -NCT02139644 -NCT02139813 -NCT02139852 -NCT02139930 -NCT02140021 -NCT02140073 -NCT02140164 -NCT02140203 -NCT02140320 -NCT02140567 -NCT02140632 -NCT02140892 -NCT02140905 -NCT02140983 -NCT02141035 -NCT02141061 -NCT02141451 -NCT02141464 -NCT02141490 -NCT02141555 -NCT02141698 -NCT02141802 -NCT02141854 -NCT02141932 -NCT02141971 -NCT02142257 -NCT02142439 -NCT02142491 -NCT02142543 -NCT02142660 -NCT02142751 -NCT02142829 -NCT02142894 -NCT02143154 -NCT02143414 -NCT02143609 -NCT02143700 -NCT02143726 -NCT02143830 -NCT02143908 -NCT02143986 -NCT02144103 -NCT02144181 -NCT02144441 -NCT02144493 -NCT02144545 -NCT02144584 -NCT02144753 -NCT02144857 -NCT02145169 -NCT02145208 -NCT02145234 -NCT02145247 -NCT02145338 -NCT02145442 -NCT02145611 -NCT02145650 -NCT02145663 -NCT02145728 -NCT02145754 -NCT02145819 -NCT02145858 -NCT02145949 -NCT02145975 -NCT02146040 -NCT02146053 -NCT02146105 -NCT02146144 -NCT02146222 -NCT02146248 -NCT02146274 -NCT02146287 -NCT02146521 -NCT02146586 -NCT02146755 -NCT02146911 -NCT02146989 -NCT02147054 -NCT02147158 -NCT02147171 -NCT02147197 -NCT02147210 -NCT02147249 -NCT02147366 -NCT02147509 -NCT02147574 -NCT02147639 -NCT02147691 -NCT02147808 -NCT02147821 -NCT02147964 -NCT02148250 -NCT02148276 -NCT02148549 -NCT02148601 -NCT02148874 -NCT02148900 -NCT02148926 -NCT02149121 -NCT02149199 -NCT02149264 -NCT02149485 -NCT02149550 -NCT02149654 -NCT02149914 -NCT02150031 -NCT02150083 -NCT02150486 -NCT02150590 -NCT02150616 -NCT02150629 -NCT02150863 -NCT02150941 -NCT02150967 -NCT02151006 -NCT02151487 -NCT02151552 -NCT02151591 -NCT02151825 -NCT02152072 -NCT02152124 -NCT02152163 -NCT02152202 -NCT02152488 -NCT02152553 -NCT02152592 -NCT02152644 -NCT02152696 -NCT02152709 -NCT02152735 -NCT02152800 -NCT02152995 -NCT02153008 -NCT02153021 -NCT02153034 -NCT02153073 -NCT02153086 -NCT02153398 -NCT02153567 -NCT02153580 -NCT02153619 -NCT02153645 -NCT02153658 -NCT02153671 -NCT02153840 -NCT02153983 -NCT02154009 -NCT02154061 -NCT02154087 -NCT02154100 -NCT02154152 -NCT02154165 -NCT02154334 -NCT02154386 -NCT02154464 -NCT02154490 -NCT02154568 -NCT02154620 -NCT02154724 -NCT02154880 -NCT02154958 -NCT02155153 -NCT02155244 -NCT02155257 -NCT02155283 -NCT02155374 -NCT02155790 -NCT02155894 -NCT02155933 -NCT02155985 -NCT02156050 -NCT02156063 -NCT02156102 -NCT02156232 -NCT02156271 -NCT02156310 -NCT02156375 -NCT02156570 -NCT02156648 -NCT02156726 -NCT02156843 -NCT02156947 -NCT02156999 -NCT02157155 -NCT02157194 -NCT02157207 -NCT02157259 -NCT02157441 -NCT02157506 -NCT02157545 -NCT02157558 -NCT02157584 -NCT02157766 -NCT02157857 -NCT02157896 -NCT02157935 -NCT02157948 -NCT02158000 -NCT02158013 -NCT02158026 -NCT02158052 -NCT02158182 -NCT02158195 -NCT02158208 -NCT02158338 -NCT02158351 -NCT02158416 -NCT02158572 -NCT02158585 -NCT02158780 -NCT02158975 -NCT02159079 -NCT02159287 -NCT02159339 -NCT02159469 -NCT02159508 -NCT02159573 -NCT02159612 -NCT02159625 -NCT02159638 -NCT02159755 -NCT02159794 -NCT02159924 -NCT02159963 -NCT02159989 -NCT02160015 -NCT02160080 -NCT02160132 -NCT02160288 -NCT02160301 -NCT02160535 -NCT02160678 -NCT02160717 -NCT02160730 -NCT02161354 -NCT02161367 -NCT02161380 -NCT02161952 -NCT02162134 -NCT02162160 -NCT02162316 -NCT02162342 -NCT02162381 -NCT02162420 -NCT02162524 -NCT02162589 -NCT02162862 -NCT02163031 -NCT02163044 -NCT02163096 -NCT02163252 -NCT02163291 -NCT02163304 -NCT02163577 -NCT02163668 -NCT02163759 -NCT02163863 -NCT02163954 -NCT02163993 -NCT02164149 -NCT02164383 -NCT02164513 -NCT02164643 -NCT02165176 -NCT02165267 -NCT02165293 -NCT02165384 -NCT02165436 -NCT02165462 -NCT02165514 -NCT02165527 -NCT02165566 -NCT02165761 -NCT02165826 -NCT02165865 -NCT02165917 -NCT02166320 -NCT02166333 -NCT02166372 -NCT02166463 -NCT02166476 -NCT02166619 -NCT02166697 -NCT02166723 -NCT02166788 -NCT02166801 -NCT02166814 -NCT02166892 -NCT02166944 -NCT02167009 -NCT02167204 -NCT02167217 -NCT02167256 -NCT02167412 -NCT02167568 -NCT02167581 -NCT02167594 -NCT02167646 -NCT02167698 -NCT02167737 -NCT02167906 -NCT02167919 -NCT02168036 -NCT02168088 -NCT02168101 -NCT02168114 -NCT02168153 -NCT02168179 -NCT02168205 -NCT02168296 -NCT02168387 -NCT02168660 -NCT02168673 -NCT02168842 -NCT02169219 -NCT02169323 -NCT02169531 -NCT02169765 -NCT02169830 -NCT02169856 -NCT02170025 -NCT02170064 -NCT02170077 -NCT02170142 -NCT02170220 -NCT02170402 -NCT02170441 -NCT02170727 -NCT02170740 -NCT02170831 -NCT02170844 -NCT02171130 -NCT02171312 -NCT02171403 -NCT02171429 -NCT02172027 -NCT02172105 -NCT02172300 -NCT02172326 -NCT02172339 -NCT02172651 -NCT02172833 -NCT02172911 -NCT02172950 -NCT02173145 -NCT02173470 -NCT02173522 -NCT02173587 -NCT02173678 -NCT02173691 -NCT02173704 -NCT02173808 -NCT02173925 -NCT02173951 -NCT02174458 -NCT02174471 -NCT02174562 -NCT02174731 -NCT02174770 -NCT02174783 -NCT02174874 -NCT02174887 -NCT02174978 -NCT02175316 -NCT02175498 -NCT02175511 -NCT02175641 -NCT02175758 -NCT02175966 -NCT02176031 -NCT02176070 -NCT02176304 -NCT02176408 -NCT02176460 -NCT02176525 -NCT02176564 -NCT02176655 -NCT02176707 -NCT02176785 -NCT02176863 -NCT02176941 -NCT02177136 -NCT02177162 -NCT02177188 -NCT02177214 -NCT02177331 -NCT02177396 -NCT02177461 -NCT02177513 -NCT02177552 -NCT02177643 -NCT02177669 -NCT02177838 -NCT02178098 -NCT02178150 -NCT02178241 -NCT02178319 -NCT02178345 -NCT02178449 -NCT02178514 -NCT02178579 -NCT02178761 -NCT02178774 -NCT02178800 -NCT02178891 -NCT02179034 -NCT02179073 -NCT02179125 -NCT02179177 -NCT02179294 -NCT02179333 -NCT02179359 -NCT02179658 -NCT02179788 -NCT02180126 -NCT02180204 -NCT02180217 -NCT02180269 -NCT02180282 -NCT02180412 -NCT02180555 -NCT02180568 -NCT02180789 -NCT02180919 -NCT02181257 -NCT02181335 -NCT02181478 -NCT02181686 -NCT02181751 -NCT02181933 -NCT02182089 -NCT02182102 -NCT02182232 -NCT02182440 -NCT02182830 -NCT02182973 -NCT02183116 -NCT02183129 -NCT02183155 -NCT02183168 -NCT02183259 -NCT02183311 -NCT02183519 -NCT02183688 -NCT02183753 -NCT02183766 -NCT02183831 -NCT02183948 -NCT02183961 -NCT02183974 -NCT02184156 -NCT02184299 -NCT02184559 -NCT02184715 -NCT02184767 -NCT02184975 -NCT02185092 -NCT02185105 -NCT02185170 -NCT02185313 -NCT02185456 -NCT02185807 -NCT02185963 -NCT02186028 -NCT02186106 -NCT02186119 -NCT02186145 -NCT02186171 -NCT02186405 -NCT02186470 -NCT02186639 -NCT02187003 -NCT02187029 -NCT02187133 -NCT02187276 -NCT02187341 -NCT02187393 -NCT02187549 -NCT02187601 -NCT02187627 -NCT02187640 -NCT02187822 -NCT02188147 -NCT02188329 -NCT02188589 -NCT02188628 -NCT02188784 -NCT02189005 -NCT02189148 -NCT02189291 -NCT02189434 -NCT02189551 -NCT02189603 -NCT02189629 -NCT02189668 -NCT02189694 -NCT02189707 -NCT02189798 -NCT02189902 -NCT02190006 -NCT02190097 -NCT02190110 -NCT02190149 -NCT02190214 -NCT02190227 -NCT02190266 -NCT02190279 -NCT02190448 -NCT02190604 -NCT02190669 -NCT02190747 -NCT02190786 -NCT02190812 -NCT02190916 -NCT02190929 -NCT02190942 -NCT02190981 -NCT02190994 -NCT02191267 -NCT02191475 -NCT02191839 -NCT02192125 -NCT02192138 -NCT02192190 -NCT02192229 -NCT02192242 -NCT02192411 -NCT02192450 -NCT02192606 -NCT02193061 -NCT02193321 -NCT02193451 -NCT02193464 -NCT02193490 -NCT02193581 -NCT02193685 -NCT02193815 -NCT02194127 -NCT02194140 -NCT02194205 -NCT02194348 -NCT02194361 -NCT02194647 -NCT02194816 -NCT02194829 -NCT02194842 -NCT02194894 -NCT02194972 -NCT02194998 -NCT02195063 -NCT02195076 -NCT02195115 -NCT02195375 -NCT02195596 -NCT02195635 -NCT02195752 -NCT02195791 -NCT02195960 -NCT02195986 -NCT02196012 -NCT02196025 -NCT02196064 -NCT02196077 -NCT02196129 -NCT02196207 -NCT02196220 -NCT02196311 -NCT02196337 -NCT02196467 -NCT02196493 -NCT02196662 -NCT02196727 -NCT02196987 -NCT02197026 -NCT02197208 -NCT02197299 -NCT02197351 -NCT02197585 -NCT02197611 -NCT02197702 -NCT02197780 -NCT02197832 -NCT02197871 -NCT02197923 -NCT02197936 -NCT02197962 -NCT02198001 -NCT02198040 -NCT02198183 -NCT02198235 -NCT02198248 -NCT02198339 -NCT02198469 -NCT02198651 -NCT02198677 -NCT02198742 -NCT02198755 -NCT02198820 -NCT02198833 -NCT02198911 -NCT02199119 -NCT02199262 -NCT02199314 -NCT02199418 -NCT02199483 -NCT02199496 -NCT02199587 -NCT02199717 -NCT02199795 -NCT02199990 -NCT02200107 -NCT02200263 -NCT02200276 -NCT02200302 -NCT02200328 -NCT02200367 -NCT02200484 -NCT02200796 -NCT02200887 -NCT02200991 -NCT02201355 -NCT02201719 -NCT02201732 -NCT02201862 -NCT02201966 -NCT02202109 -NCT02202382 -NCT02202395 -NCT02202408 -NCT02202512 -NCT02202538 -NCT02202759 -NCT02202902 -NCT02202980 -NCT02203045 -NCT02203058 -NCT02203162 -NCT02203188 -NCT02203227 -NCT02203240 -NCT02203305 -NCT02203318 -NCT02203357 -NCT02203721 -NCT02204150 -NCT02204163 -NCT02204189 -NCT02204254 -NCT02204306 -NCT02204371 -NCT02204423 -NCT02204462 -NCT02204553 -NCT02204579 -NCT02204618 -NCT02204735 -NCT02204748 -NCT02204774 -NCT02204826 -NCT02204969 -NCT02205008 -NCT02205125 -NCT02205281 -NCT02205346 -NCT02205463 -NCT02205541 -NCT02205554 -NCT02206061 -NCT02206100 -NCT02206191 -NCT02206243 -NCT02206256 -NCT02206321 -NCT02206360 -NCT02206373 -NCT02206503 -NCT02206685 -NCT02206919 -NCT02206984 -NCT02207114 -NCT02207231 -NCT02207400 -NCT02207491 -NCT02207595 -NCT02207647 -NCT02207842 -NCT02207894 -NCT02207907 -NCT02207946 -NCT02207998 -NCT02208037 -NCT02208050 -NCT02208154 -NCT02208323 -NCT02208375 -NCT02208895 -NCT02208947 -NCT02209259 -NCT02209324 -NCT02209519 -NCT02209636 -NCT02209688 -NCT02209935 -NCT02210000 -NCT02210039 -NCT02210117 -NCT02210637 -NCT02210689 -NCT02210715 -NCT02210741 -NCT02210884 -NCT02210923 -NCT02210975 -NCT02211027 -NCT02211053 -NCT02211105 -NCT02211313 -NCT02211404 -NCT02211898 -NCT02212028 -NCT02212054 -NCT02212548 -NCT02212652 -NCT02212678 -NCT02212717 -NCT02212886 -NCT02213094 -NCT02213120 -NCT02213341 -NCT02213354 -NCT02213484 -NCT02213653 -NCT02213692 -NCT02213757 -NCT02214147 -NCT02214186 -NCT02214212 -NCT02214238 -NCT02214277 -NCT02214290 -NCT02214368 -NCT02214745 -NCT02214771 -NCT02214914 -NCT02215161 -NCT02215395 -NCT02215551 -NCT02215707 -NCT02215967 -NCT02216071 -NCT02216084 -NCT02216123 -NCT02216279 -NCT02216292 -NCT02216344 -NCT02216422 -NCT02216435 -NCT02216513 -NCT02216552 -NCT02216799 -NCT02216994 -NCT02217202 -NCT02217228 -NCT02217358 -NCT02217423 -NCT02217540 -NCT02217631 -NCT02217852 -NCT02217943 -NCT02218099 -NCT02218164 -NCT02218268 -NCT02218372 -NCT02218398 -NCT02218554 -NCT02218580 -NCT02218762 -NCT02218827 -NCT02218879 -NCT02218931 -NCT02218957 -NCT02219074 -NCT02219113 -NCT02219126 -NCT02219204 -NCT02219360 -NCT02219503 -NCT02219529 -NCT02219555 -NCT02219698 -NCT02219763 -NCT02219815 -NCT02219828 -NCT02219854 -NCT02219997 -NCT02220270 -NCT02220374 -NCT02220517 -NCT02220543 -NCT02220699 -NCT02220842 -NCT02220972 -NCT02221141 -NCT02221245 -NCT02221427 -NCT02221648 -NCT02221713 -NCT02221908 -NCT02221921 -NCT02221947 -NCT02221973 -NCT02221999 -NCT02222155 -NCT02222246 -NCT02222311 -NCT02222545 -NCT02222558 -NCT02222623 -NCT02222688 -NCT02222714 -NCT02222740 -NCT02222948 -NCT02223039 -NCT02223221 -NCT02223286 -NCT02223299 -NCT02223325 -NCT02223364 -NCT02223377 -NCT02223546 -NCT02223572 -NCT02223676 -NCT02223715 -NCT02223754 -NCT02223832 -NCT02223936 -NCT02223975 -NCT02224014 -NCT02224209 -NCT02224586 -NCT02224664 -NCT02224677 -NCT02224781 -NCT02225119 -NCT02225132 -NCT02225444 -NCT02225483 -NCT02225795 -NCT02225834 -NCT02226471 -NCT02226484 -NCT02226692 -NCT02226731 -NCT02226939 -NCT02227537 -NCT02227732 -NCT02227784 -NCT02227823 -NCT02227888 -NCT02227940 -NCT02227953 -NCT02228057 -NCT02228174 -NCT02228239 -NCT02228265 -NCT02228343 -NCT02228395 -NCT02228837 -NCT02228889 -NCT02228902 -NCT02229370 -NCT02229500 -NCT02229539 -NCT02229747 -NCT02229799 -NCT02229812 -NCT02229890 -NCT02229955 -NCT02229994 -NCT02230020 -NCT02230397 -NCT02230475 -NCT02230631 -NCT02230722 -NCT02230813 -NCT02230943 -NCT02231047 -NCT02231229 -NCT02231294 -NCT02231320 -NCT02231424 -NCT02231593 -NCT02231606 -NCT02231619 -NCT02231658 -NCT02232178 -NCT02232386 -NCT02232737 -NCT02232893 -NCT02232906 -NCT02232945 -NCT02233231 -NCT02233257 -NCT02233322 -NCT02233335 -NCT02233543 -NCT02233569 -NCT02233868 -NCT02233985 -NCT02233998 -NCT02234154 -NCT02234206 -NCT02234219 -NCT02234284 -NCT02234310 -NCT02234388 -NCT02234596 -NCT02234661 -NCT02235025 -NCT02235129 -NCT02235142 -NCT02235207 -NCT02235233 -NCT02235311 -NCT02235402 -NCT02235428 -NCT02235493 -NCT02235506 -NCT02235519 -NCT02235571 -NCT02235623 -NCT02235662 -NCT02235818 -NCT02235974 -NCT02235987 -NCT02236078 -NCT02236273 -NCT02236299 -NCT02236442 -NCT02236572 -NCT02236611 -NCT02236689 -NCT02236871 -NCT02237092 -NCT02237196 -NCT02237209 -NCT02237248 -NCT02237261 -NCT02237391 -NCT02237547 -NCT02237625 -NCT02237729 -NCT02237755 -NCT02237846 -NCT02237859 -NCT02237937 -NCT02238184 -NCT02238223 -NCT02238288 -NCT02238418 -NCT02238587 -NCT02238626 -NCT02238704 -NCT02238912 -NCT02239016 -NCT02239185 -NCT02239224 -NCT02239289 -NCT02239666 -NCT02239705 -NCT02239991 -NCT02240251 -NCT02240407 -NCT02240472 -NCT02240498 -NCT02240550 -NCT02240563 -NCT02240966 -NCT02241044 -NCT02241109 -NCT02241122 -NCT02241161 -NCT02241278 -NCT02241356 -NCT02241434 -NCT02241499 -NCT02241681 -NCT02241707 -NCT02241928 -NCT02241954 -NCT02242058 -NCT02242084 -NCT02242123 -NCT02242175 -NCT02242227 -NCT02242266 -NCT02242292 -NCT02242305 -NCT02242448 -NCT02242526 -NCT02242617 -NCT02242708 -NCT02242747 -NCT02242812 -NCT02243007 -NCT02243228 -NCT02243280 -NCT02243293 -NCT02243488 -NCT02243501 -NCT02243540 -NCT02243605 -NCT02243657 -NCT02243917 -NCT02244060 -NCT02244125 -NCT02244138 -NCT02244242 -NCT02244255 -NCT02244268 -NCT02244281 -NCT02244294 -NCT02244320 -NCT02244463 -NCT02244749 -NCT02244957 -NCT02245139 -NCT02245295 -NCT02245490 -NCT02245529 -NCT02245555 -NCT02245737 -NCT02245828 -NCT02245854 -NCT02245919 -NCT02246270 -NCT02246400 -NCT02246439 -NCT02246673 -NCT02246699 -NCT02246894 -NCT02246946 -NCT02247011 -NCT02247076 -NCT02247180 -NCT02247375 -NCT02247401 -NCT02247635 -NCT02247726 -NCT02247843 -NCT02247973 -NCT02248194 -NCT02248233 -NCT02248688 -NCT02248753 -NCT02248831 -NCT02248909 -NCT02249052 -NCT02249065 -NCT02249104 -NCT02249156 -NCT02249182 -NCT02249195 -NCT02249273 -NCT02249312 -NCT02249494 -NCT02249546 -NCT02249624 -NCT02249637 -NCT02249767 -NCT02249858 -NCT02249988 -NCT02250209 -NCT02250222 -NCT02250313 -NCT02250352 -NCT02250430 -NCT02250456 -NCT02250521 -NCT02250716 -NCT02250781 -NCT02250794 -NCT02250859 -NCT02250885 -NCT02250950 -NCT02251210 -NCT02251327 -NCT02251379 -NCT02251392 -NCT02251548 -NCT02251574 -NCT02251600 -NCT02251639 -NCT02251665 -NCT02251756 -NCT02251795 -NCT02251912 -NCT02251938 -NCT02251951 -NCT02252367 -NCT02252640 -NCT02252666 -NCT02252679 -NCT02252874 -NCT02253095 -NCT02253134 -NCT02253290 -NCT02253485 -NCT02253524 -NCT02253537 -NCT02253550 -NCT02253576 -NCT02253719 -NCT02253901 -NCT02254265 -NCT02254382 -NCT02254473 -NCT02254811 -NCT02254850 -NCT02254863 -NCT02254889 -NCT02254967 -NCT02255071 -NCT02255084 -NCT02255305 -NCT02255331 -NCT02255396 -NCT02255474 -NCT02255578 -NCT02255617 -NCT02255721 -NCT02255734 -NCT02255747 -NCT02255825 -NCT02255903 -NCT02255929 -NCT02256046 -NCT02256111 -NCT02256163 -NCT02256319 -NCT02256397 -NCT02256501 -NCT02256631 -NCT02256696 -NCT02256774 -NCT02256813 -NCT02256917 -NCT02257307 -NCT02257385 -NCT02257398 -NCT02257606 -NCT02257723 -NCT02257814 -NCT02257892 -NCT02258100 -NCT02258152 -NCT02258204 -NCT02258217 -NCT02258269 -NCT02258295 -NCT02258347 -NCT02258360 -NCT02258490 -NCT02258763 -NCT02258802 -NCT02258841 -NCT02258932 -NCT02258945 -NCT02258997 -NCT02259101 -NCT02259192 -NCT02259283 -NCT02259361 -NCT02259387 -NCT02259465 -NCT02259595 -NCT02259920 -NCT02260128 -NCT02260206 -NCT02260362 -NCT02260453 -NCT02260635 -NCT02260648 -NCT02260674 -NCT02260817 -NCT02260908 -NCT02261246 -NCT02261467 -NCT02261506 -NCT02261610 -NCT02261662 -NCT02261727 -NCT02261753 -NCT02261987 -NCT02262143 -NCT02262156 -NCT02262299 -NCT02262715 -NCT02262728 -NCT02262806 -NCT02262845 -NCT02263027 -NCT02263118 -NCT02263638 -NCT02263703 -NCT02263898 -NCT02264002 -NCT02264314 -NCT02264392 -NCT02264574 -NCT02264652 -NCT02264730 -NCT02264925 -NCT02265003 -NCT02265107 -NCT02265185 -NCT02265237 -NCT02265328 -NCT02265341 -NCT02265380 -NCT02265614 -NCT02265952 -NCT02266095 -NCT02266160 -NCT02266199 -NCT02266238 -NCT02266329 -NCT02266433 -NCT02266667 -NCT02266823 -NCT02267278 -NCT02267655 -NCT02267772 -NCT02267941 -NCT02268058 -NCT02268305 -NCT02268383 -NCT02268578 -NCT02268617 -NCT02268630 -NCT02268877 -NCT02268890 -NCT02268903 -NCT02268955 -NCT02269046 -NCT02269098 -NCT02269124 -NCT02269306 -NCT02269592 -NCT02269644 -NCT02269722 -NCT02269735 -NCT02269761 -NCT02269826 -NCT02269865 -NCT02269891 -NCT02270216 -NCT02270255 -NCT02270476 -NCT02270593 -NCT02270697 -NCT02270827 -NCT02270840 -NCT02270866 -NCT02270996 -NCT02271126 -NCT02271178 -NCT02271217 -NCT02271243 -NCT02271282 -NCT02271308 -NCT02271399 -NCT02271568 -NCT02271594 -NCT02271620 -NCT02271724 -NCT02271737 -NCT02271750 -NCT02271984 -NCT02272075 -NCT02272153 -NCT02272218 -NCT02272608 -NCT02272998 -NCT02273596 -NCT02273882 -NCT02273973 -NCT02274155 -NCT02274168 -NCT02274272 -NCT02274311 -NCT02274363 -NCT02274402 -NCT02274493 -NCT02274532 -NCT02274597 -NCT02274636 -NCT02274740 -NCT02274753 -NCT02274831 -NCT02274987 -NCT02275169 -NCT02275221 -NCT02275390 -NCT02275533 -NCT02275546 -NCT02275611 -NCT02275793 -NCT02275910 -NCT02275936 -NCT02276053 -NCT02276547 -NCT02276573 -NCT02276690 -NCT02276716 -NCT02276768 -NCT02277028 -NCT02277106 -NCT02277119 -NCT02277184 -NCT02277197 -NCT02277210 -NCT02277275 -NCT02277327 -NCT02277366 -NCT02277444 -NCT02277587 -NCT02277730 -NCT02277834 -NCT02277860 -NCT02277886 -NCT02277964 -NCT02278341 -NCT02278536 -NCT02278718 -NCT02278744 -NCT02278874 -NCT02278913 -NCT02278965 -NCT02279017 -NCT02279199 -NCT02279264 -NCT02279277 -NCT02279368 -NCT02279472 -NCT02279511 -NCT02279550 -NCT02279641 -NCT02279745 -NCT02279875 -NCT02279901 -NCT02279940 -NCT02280005 -NCT02280083 -NCT02280174 -NCT02280239 -NCT02280265 -NCT02280343 -NCT02280707 -NCT02280772 -NCT02281006 -NCT02281097 -NCT02281162 -NCT02281318 -NCT02281513 -NCT02281669 -NCT02281812 -NCT02282033 -NCT02282111 -NCT02282150 -NCT02282202 -NCT02282410 -NCT02282436 -NCT02282488 -NCT02282514 -NCT02282540 -NCT02282995 -NCT02283008 -NCT02283151 -NCT02283203 -NCT02283268 -NCT02283411 -NCT02283424 -NCT02283632 -NCT02283684 -NCT02283853 -NCT02283892 -NCT02283957 -NCT02283970 -NCT02284074 -NCT02284334 -NCT02284464 -NCT02284724 -NCT02284789 -NCT02284841 -NCT02284867 -NCT02284958 -NCT02284997 -NCT02285231 -NCT02285244 -NCT02285400 -NCT02285439 -NCT02285634 -NCT02285920 -NCT02285998 -NCT02286076 -NCT02286245 -NCT02286817 -NCT02287311 -NCT02287337 -NCT02287402 -NCT02287506 -NCT02287558 -NCT02287675 -NCT02287818 -NCT02287844 -NCT02287883 -NCT02288052 -NCT02288156 -NCT02288351 -NCT02288455 -NCT02288572 -NCT02288702 -NCT02288858 -NCT02288910 -NCT02288949 -NCT02288988 -NCT02289092 -NCT02289183 -NCT02289352 -NCT02289560 -NCT02289924 -NCT02290002 -NCT02290210 -NCT02290288 -NCT02290340 -NCT02290405 -NCT02290431 -NCT02290444 -NCT02290587 -NCT02290613 -NCT02290730 -NCT02290808 -NCT02290886 -NCT02291016 -NCT02291029 -NCT02291107 -NCT02291224 -NCT02291237 -NCT02291354 -NCT02291757 -NCT02291796 -NCT02291913 -NCT02291991 -NCT02292095 -NCT02292238 -NCT02292316 -NCT02292394 -NCT02292420 -NCT02292459 -NCT02292940 -NCT02293447 -NCT02293772 -NCT02293863 -NCT02293993 -NCT02294136 -NCT02294253 -NCT02294279 -NCT02294500 -NCT02294708 -NCT02294734 -NCT02294773 -NCT02294981 -NCT02295007 -NCT02295033 -NCT02295176 -NCT02295189 -NCT02295254 -NCT02295280 -NCT02295397 -NCT02295748 -NCT02295761 -NCT02295917 -NCT02296047 -NCT02296216 -NCT02296307 -NCT02296411 -NCT02296437 -NCT02296528 -NCT02296541 -NCT02296710 -NCT02296944 -NCT02296970 -NCT02297048 -NCT02297061 -NCT02297178 -NCT02297217 -NCT02297282 -NCT02297451 -NCT02297542 -NCT02297698 -NCT02297711 -NCT02297841 -NCT02297919 -NCT02297945 -NCT02298257 -NCT02298491 -NCT02298569 -NCT02298595 -NCT02298621 -NCT02298634 -NCT02298647 -NCT02298673 -NCT02298686 -NCT02298699 -NCT02298712 -NCT02298764 -NCT02298933 -NCT02299089 -NCT02299115 -NCT02299128 -NCT02299206 -NCT02299245 -NCT02299323 -NCT02299375 -NCT02299388 -NCT02299414 -NCT02299570 -NCT02299583 -NCT02299713 -NCT02299778 -NCT02299973 -NCT02300103 -NCT02300129 -NCT02300272 -NCT02300506 -NCT02300519 -NCT02300792 -NCT02300883 -NCT02300909 -NCT02300948 -NCT02301000 -NCT02301052 -NCT02301221 -NCT02301325 -NCT02301338 -NCT02301390 -NCT02301481 -NCT02301741 -NCT02301845 -NCT02301897 -NCT02301962 -NCT02301975 -NCT02302092 -NCT02302118 -NCT02302196 -NCT02302300 -NCT02302365 -NCT02302417 -NCT02302794 -NCT02302898 -NCT02302937 -NCT02302963 -NCT02303080 -NCT02303093 -NCT02303145 -NCT02303288 -NCT02303301 -NCT02303340 -NCT02303392 -NCT02303574 -NCT02303600 -NCT02303730 -NCT02303808 -NCT02303873 -NCT02303925 -NCT02304302 -NCT02304471 -NCT02304510 -NCT02304848 -NCT02304874 -NCT02304887 -NCT02304926 -NCT02305043 -NCT02305199 -NCT02305342 -NCT02305914 -NCT02305953 -NCT02305992 -NCT02306070 -NCT02306187 -NCT02306317 -NCT02306473 -NCT02306499 -NCT02306512 -NCT02306564 -NCT02306590 -NCT02306694 -NCT02306707 -NCT02306759 -NCT02306993 -NCT02307006 -NCT02307162 -NCT02307253 -NCT02307526 -NCT02307565 -NCT02307617 -NCT02307721 -NCT02307916 -NCT02307981 -NCT02307994 -NCT02308124 -NCT02308202 -NCT02308254 -NCT02308280 -NCT02308449 -NCT02308514 -NCT02308540 -NCT02308735 -NCT02308748 -NCT02308891 -NCT02309047 -NCT02309099 -NCT02309307 -NCT02309476 -NCT02309515 -NCT02309554 -NCT02309814 -NCT02310061 -NCT02310074 -NCT02310191 -NCT02310230 -NCT02310425 -NCT02310607 -NCT02310737 -NCT02310763 -NCT02310828 -NCT02310880 -NCT02310906 -NCT02310919 -NCT02310945 -NCT02310958 -NCT02311075 -NCT02311283 -NCT02311309 -NCT02311322 -NCT02311361 -NCT02311478 -NCT02311530 -NCT02311608 -NCT02311673 -NCT02311829 -NCT02311881 -NCT02311894 -NCT02311933 -NCT02312102 -NCT02312115 -NCT02312206 -NCT02312297 -NCT02312453 -NCT02312505 -NCT02312570 -NCT02312609 -NCT02312778 -NCT02312804 -NCT02312908 -NCT02313103 -NCT02313233 -NCT02313454 -NCT02313467 -NCT02313480 -NCT02313506 -NCT02313636 -NCT02313675 -NCT02313805 -NCT02313870 -NCT02313909 -NCT02314039 -NCT02314325 -NCT02314377 -NCT02314676 -NCT02314715 -NCT02314741 -NCT02314936 -NCT02315105 -NCT02315131 -NCT02315235 -NCT02315430 -NCT02315443 -NCT02315521 -NCT02315560 -NCT02315586 -NCT02315664 -NCT02315781 -NCT02315833 -NCT02315859 -NCT02315885 -NCT02316171 -NCT02316197 -NCT02316249 -NCT02316366 -NCT02316444 -NCT02316587 -NCT02316743 -NCT02316899 -NCT02316912 -NCT02316925 -NCT02317042 -NCT02317120 -NCT02317211 -NCT02317315 -NCT02317328 -NCT02317549 -NCT02317653 -NCT02317887 -NCT02317926 -NCT02317965 -NCT02317978 -NCT02318082 -NCT02318147 -NCT02318160 -NCT02318225 -NCT02318407 -NCT02318420 -NCT02318511 -NCT02318550 -NCT02318875 -NCT02319070 -NCT02319083 -NCT02319109 -NCT02319122 -NCT02319200 -NCT02319395 -NCT02319421 -NCT02319486 -NCT02319538 -NCT02320006 -NCT02320071 -NCT02320149 -NCT02320214 -NCT02320227 -NCT02320253 -NCT02320318 -NCT02320383 -NCT02320552 -NCT02320565 -NCT02320617 -NCT02320760 -NCT02320851 -NCT02320968 -NCT02321124 -NCT02321267 -NCT02321280 -NCT02321384 -NCT02321449 -NCT02321514 -NCT02321527 -NCT02321540 -NCT02321670 -NCT02321696 -NCT02321800 -NCT02321826 -NCT02321930 -NCT02322021 -NCT02322112 -NCT02322138 -NCT02322203 -NCT02322333 -NCT02322411 -NCT02322671 -NCT02322866 -NCT02323087 -NCT02323204 -NCT02323269 -NCT02323451 -NCT02323646 -NCT02323724 -NCT02323932 -NCT02323997 -NCT02324023 -NCT02324036 -NCT02324049 -NCT02324192 -NCT02324517 -NCT02324907 -NCT02324920 -NCT02324985 -NCT02325024 -NCT02325063 -NCT02325089 -NCT02325128 -NCT02325154 -NCT02325375 -NCT02325440 -NCT02325453 -NCT02325492 -NCT02325973 -NCT02325999 -NCT02326324 -NCT02326454 -NCT02326597 -NCT02326623 -NCT02326805 -NCT02326857 -NCT02326909 -NCT02326922 -NCT02326974 -NCT02327091 -NCT02327247 -NCT02327377 -NCT02327390 -NCT02327481 -NCT02327494 -NCT02327520 -NCT02327650 -NCT02327793 -NCT02327871 -NCT02327884 -NCT02327897 -NCT02327936 -NCT02328040 -NCT02328196 -NCT02328274 -NCT02328339 -NCT02328404 -NCT02328469 -NCT02328625 -NCT02328664 -NCT02328872 -NCT02329054 -NCT02329171 -NCT02329210 -NCT02329236 -NCT02329275 -NCT02329301 -NCT02329327 -NCT02329379 -NCT02329470 -NCT02329509 -NCT02329522 -NCT02329548 -NCT02329730 -NCT02329873 -NCT02329938 -NCT02329977 -NCT02329990 -NCT02330094 -NCT02330107 -NCT02330302 -NCT02330315 -NCT02330328 -NCT02330471 -NCT02330510 -NCT02330770 -NCT02330796 -NCT02331017 -NCT02331147 -NCT02331550 -NCT02332031 -NCT02332096 -NCT02332122 -NCT02332187 -NCT02332369 -NCT02332447 -NCT02332486 -NCT02332538 -NCT02332590 -NCT02332707 -NCT02332772 -NCT02332785 -NCT02332980 -NCT02333292 -NCT02333617 -NCT02333708 -NCT02333721 -NCT02333851 -NCT02334111 -NCT02334163 -NCT02334189 -NCT02334202 -NCT02334254 -NCT02334475 -NCT02334657 -NCT02334774 -NCT02334826 -NCT02334852 -NCT02334891 -NCT02335034 -NCT02335099 -NCT02335164 -NCT02335190 -NCT02335216 -NCT02335255 -NCT02335359 -NCT02335567 -NCT02335580 -NCT02335710 -NCT02335749 -NCT02335853 -NCT02335879 -NCT02335957 -NCT02336009 -NCT02336139 -NCT02336165 -NCT02336256 -NCT02336425 -NCT02336438 -NCT02336464 -NCT02336490 -NCT02336516 -NCT02337049 -NCT02337088 -NCT02337179 -NCT02337244 -NCT02337673 -NCT02337738 -NCT02337764 -NCT02337829 -NCT02337868 -NCT02337907 -NCT02337933 -NCT02337972 -NCT02338050 -NCT02338076 -NCT02338167 -NCT02338297 -NCT02338609 -NCT02338713 -NCT02338882 -NCT02338895 -NCT02338973 -NCT02339090 -NCT02339142 -NCT02339272 -NCT02339337 -NCT02339376 -NCT02339402 -NCT02339506 -NCT02339831 -NCT02340013 -NCT02340273 -NCT02340377 -NCT02340390 -NCT02340429 -NCT02340507 -NCT02340520 -NCT02340533 -NCT02340845 -NCT02340871 -NCT02340923 -NCT02340936 -NCT02340962 -NCT02341040 -NCT02341196 -NCT02341287 -NCT02341339 -NCT02341365 -NCT02341547 -NCT02341664 -NCT02341690 -NCT02341846 -NCT02341989 -NCT02342067 -NCT02342093 -NCT02342132 -NCT02342197 -NCT02342223 -NCT02342262 -NCT02342301 -NCT02342457 -NCT02342483 -NCT02342639 -NCT02342704 -NCT02342808 -NCT02342886 -NCT02343237 -NCT02343276 -NCT02343315 -NCT02343354 -NCT02343562 -NCT02343575 -NCT02343627 -NCT02343692 -NCT02343822 -NCT02344004 -NCT02344108 -NCT02344199 -NCT02344264 -NCT02344277 -NCT02344316 -NCT02344329 -NCT02344407 -NCT02344446 -NCT02344485 -NCT02344537 -NCT02344563 -NCT02344654 -NCT02344862 -NCT02344992 -NCT02345031 -NCT02345161 -NCT02345421 -NCT02345473 -NCT02345616 -NCT02345629 -NCT02345876 -NCT02346032 -NCT02346071 -NCT02346214 -NCT02346227 -NCT02346331 -NCT02346409 -NCT02346448 -NCT02346500 -NCT02346604 -NCT02346656 -NCT02346825 -NCT02347059 -NCT02347111 -NCT02347215 -NCT02347241 -NCT02347267 -NCT02347280 -NCT02347449 -NCT02347462 -NCT02347501 -NCT02347618 -NCT02347722 -NCT02347787 -NCT02347969 -NCT02348021 -NCT02348099 -NCT02348203 -NCT02348229 -NCT02348294 -NCT02348372 -NCT02348385 -NCT02348398 -NCT02348437 -NCT02348502 -NCT02348684 -NCT02348983 -NCT02348996 -NCT02349048 -NCT02349061 -NCT02349295 -NCT02349386 -NCT02349399 -NCT02349451 -NCT02349464 -NCT02349568 -NCT02349841 -NCT02349854 -NCT02349893 -NCT02349919 -NCT02349945 -NCT02350153 -NCT02350179 -NCT02350283 -NCT02350309 -NCT02350387 -NCT02350400 -NCT02350556 -NCT02350660 -NCT02350881 -NCT02351128 -NCT02351141 -NCT02351180 -NCT02351297 -NCT02351349 -NCT02351375 -NCT02351401 -NCT02351453 -NCT02351492 -NCT02351596 -NCT02351700 -NCT02351791 -NCT02351882 -NCT02351960 -NCT02351986 -NCT02352181 -NCT02352220 -NCT02352324 -NCT02352519 -NCT02352532 -NCT02352545 -NCT02352636 -NCT02352727 -NCT02352766 -NCT02352818 -NCT02353039 -NCT02353091 -NCT02353143 -NCT02353338 -NCT02353364 -NCT02353390 -NCT02353481 -NCT02353572 -NCT02354079 -NCT02354118 -NCT02354352 -NCT02354365 -NCT02354469 -NCT02354508 -NCT02354534 -NCT02354677 -NCT02354781 -NCT02354924 -NCT02355067 -NCT02355223 -NCT02355418 -NCT02355483 -NCT02355496 -NCT02355756 -NCT02355925 -NCT02355938 -NCT02355990 -NCT02356068 -NCT02356159 -NCT02356172 -NCT02356250 -NCT02356276 -NCT02356302 -NCT02356419 -NCT02356445 -NCT02356562 -NCT02356575 -NCT02356666 -NCT02356679 -NCT02356913 -NCT02356926 -NCT02356965 -NCT02356978 -NCT02357134 -NCT02357225 -NCT02357407 -NCT02357420 -NCT02357485 -NCT02357498 -NCT02357524 -NCT02357550 -NCT02357667 -NCT02357758 -NCT02357862 -NCT02357914 -NCT02357992 -NCT02358213 -NCT02358239 -NCT02358330 -NCT02358434 -NCT02358590 -NCT02358642 -NCT02358681 -NCT02358850 -NCT02358876 -NCT02358954 -NCT02359097 -NCT02359266 -NCT02359643 -NCT02359682 -NCT02359812 -NCT02360046 -NCT02360072 -NCT02360241 -NCT02360254 -NCT02360384 -NCT02360540 -NCT02360618 -NCT02360787 -NCT02360826 -NCT02360852 -NCT02360865 -NCT02360969 -NCT02361008 -NCT02361112 -NCT02361125 -NCT02361164 -NCT02361281 -NCT02361359 -NCT02361372 -NCT02361385 -NCT02361411 -NCT02361424 -NCT02361437 -NCT02361450 -NCT02361541 -NCT02361580 -NCT02361593 -NCT02361606 -NCT02361749 -NCT02361788 -NCT02361827 -NCT02361996 -NCT02362243 -NCT02362295 -NCT02362425 -NCT02362438 -NCT02362659 -NCT02362737 -NCT02362932 -NCT02363010 -NCT02363049 -NCT02363075 -NCT02363153 -NCT02363179 -NCT02363192 -NCT02363244 -NCT02363309 -NCT02363335 -NCT02363413 -NCT02363465 -NCT02363569 -NCT02363595 -NCT02363634 -NCT02363686 -NCT02363790 -NCT02363816 -NCT02363985 -NCT02364037 -NCT02364089 -NCT02364128 -NCT02364180 -NCT02364336 -NCT02364427 -NCT02364518 -NCT02364778 -NCT02364960 -NCT02365142 -NCT02365168 -NCT02365376 -NCT02365415 -NCT02365454 -NCT02365506 -NCT02365532 -NCT02365610 -NCT02365675 -NCT02365701 -NCT02365714 -NCT02365740 -NCT02365779 -NCT02365935 -NCT02365974 -NCT02366182 -NCT02366208 -NCT02366221 -NCT02366507 -NCT02366650 -NCT02366975 -NCT02367027 -NCT02367066 -NCT02367157 -NCT02367222 -NCT02367573 -NCT02367703 -NCT02367729 -NCT02367976 -NCT02368002 -NCT02368054 -NCT02368340 -NCT02368496 -NCT02368639 -NCT02368730 -NCT02368795 -NCT02368912 -NCT02369042 -NCT02369081 -NCT02369471 -NCT02369718 -NCT02369861 -NCT02370108 -NCT02370121 -NCT02370134 -NCT02370381 -NCT02370420 -NCT02370511 -NCT02370524 -NCT02370602 -NCT02370628 -NCT02370667 -NCT02370771 -NCT02370797 -NCT02370823 -NCT02370849 -NCT02370953 -NCT02371018 -NCT02371044 -NCT02371070 -NCT02371200 -NCT02371252 -NCT02371330 -NCT02371408 -NCT02371473 -NCT02371499 -NCT02371564 -NCT02371590 -NCT02371642 -NCT02371681 -NCT02371798 -NCT02371824 -NCT02371863 -NCT02371902 -NCT02372058 -NCT02372071 -NCT02372123 -NCT02372487 -NCT02372513 -NCT02372747 -NCT02372760 -NCT02372838 -NCT02372968 -NCT02373007 -NCT02373072 -NCT02373267 -NCT02373488 -NCT02373553 -NCT02373618 -NCT02373631 -NCT02373644 -NCT02373891 -NCT02373930 -NCT02373969 -NCT02374593 -NCT02374684 -NCT02374957 -NCT02375087 -NCT02375113 -NCT02375425 -NCT02375529 -NCT02375620 -NCT02375724 -NCT02375789 -NCT02375828 -NCT02375945 -NCT02376075 -NCT02376114 -NCT02376166 -NCT02376634 -NCT02376725 -NCT02376790 -NCT02376816 -NCT02376868 -NCT02377128 -NCT02377141 -NCT02377180 -NCT02377206 -NCT02377284 -NCT02377362 -NCT02377570 -NCT02377817 -NCT02377869 -NCT02377947 -NCT02377973 -NCT02378038 -NCT02378233 -NCT02378285 -NCT02378311 -NCT02378350 -NCT02378415 -NCT02378493 -NCT02378779 -NCT02378805 -NCT02378844 -NCT02378883 -NCT02378935 -NCT02378961 -NCT02379169 -NCT02379182 -NCT02379221 -NCT02379364 -NCT02379507 -NCT02379585 -NCT02379728 -NCT02379754 -NCT02379819 -NCT02379871 -NCT02380053 -NCT02380118 -NCT02380131 -NCT02380170 -NCT02380209 -NCT02380222 -NCT02380235 -NCT02380378 -NCT02380560 -NCT02380651 -NCT02380729 -NCT02380755 -NCT02380898 -NCT02380911 -NCT02381002 -NCT02381028 -NCT02381184 -NCT02381288 -NCT02381327 -NCT02381366 -NCT02381457 -NCT02381470 -NCT02381587 -NCT02381665 -NCT02381678 -NCT02381834 -NCT02381925 -NCT02382068 -NCT02382107 -NCT02382250 -NCT02382458 -NCT02382471 -NCT02382523 -NCT02382640 -NCT02382653 -NCT02382770 -NCT02382809 -NCT02382991 -NCT02383277 -NCT02383316 -NCT02383407 -NCT02383641 -NCT02383797 -NCT02384200 -NCT02384252 -NCT02384343 -NCT02384408 -NCT02384421 -NCT02384616 -NCT02384668 -NCT02384876 -NCT02385188 -NCT02385240 -NCT02385266 -NCT02385292 -NCT02385461 -NCT02385487 -NCT02385604 -NCT02385812 -NCT02385929 -NCT02385994 -NCT02386007 -NCT02386228 -NCT02386332 -NCT02386397 -NCT02386436 -NCT02386527 -NCT02386631 -NCT02386657 -NCT02386722 -NCT02386735 -NCT02387138 -NCT02387242 -NCT02387281 -NCT02387359 -NCT02387853 -NCT02387879 -NCT02387892 -NCT02388126 -NCT02388152 -NCT02388204 -NCT02388269 -NCT02388321 -NCT02388516 -NCT02388750 -NCT02389023 -NCT02389088 -NCT02389114 -NCT02389153 -NCT02389192 -NCT02389205 -NCT02389244 -NCT02389270 -NCT02389309 -NCT02389335 -NCT02389413 -NCT02389582 -NCT02389634 -NCT02389647 -NCT02389660 -NCT02389673 -NCT02389686 -NCT02389777 -NCT02389803 -NCT02389998 -NCT02390089 -NCT02390115 -NCT02390284 -NCT02390388 -NCT02390596 -NCT02390739 -NCT02390752 -NCT02390843 -NCT02390856 -NCT02390882 -NCT02390934 -NCT02391012 -NCT02391220 -NCT02391350 -NCT02391415 -NCT02391896 -NCT02391987 -NCT02392156 -NCT02392299 -NCT02392403 -NCT02392611 -NCT02393001 -NCT02393170 -NCT02393183 -NCT02393248 -NCT02393365 -NCT02393430 -NCT02393560 -NCT02393690 -NCT02393755 -NCT02394184 -NCT02394197 -NCT02394236 -NCT02394314 -NCT02394327 -NCT02394340 -NCT02394392 -NCT02394431 -NCT02394470 -NCT02394548 -NCT02394613 -NCT02394626 -NCT02394678 -NCT02394782 -NCT02394899 -NCT02395107 -NCT02395120 -NCT02395276 -NCT02395471 -NCT02395484 -NCT02395510 -NCT02395549 -NCT02395601 -NCT02395770 -NCT02395848 -NCT02396147 -NCT02396212 -NCT02396251 -NCT02396420 -NCT02396446 -NCT02396537 -NCT02396589 -NCT02396706 -NCT02396732 -NCT02396745 -NCT02396810 -NCT02396823 -NCT02396849 -NCT02396862 -NCT02396927 -NCT02396940 -NCT02396953 -NCT02396966 -NCT02396992 -NCT02397005 -NCT02397018 -NCT02397057 -NCT02397135 -NCT02397148 -NCT02397200 -NCT02397252 -NCT02397304 -NCT02397343 -NCT02397499 -NCT02397525 -NCT02397785 -NCT02397993 -NCT02398019 -NCT02398032 -NCT02398188 -NCT02398201 -NCT02398214 -NCT02398253 -NCT02398344 -NCT02398396 -NCT02398656 -NCT02398721 -NCT02398734 -NCT02398773 -NCT02398786 -NCT02398864 -NCT02399150 -NCT02399176 -NCT02399215 -NCT02399254 -NCT02399345 -NCT02399449 -NCT02399475 -NCT02399670 -NCT02399683 -NCT02399800 -NCT02399839 -NCT02399969 -NCT02400073 -NCT02400216 -NCT02400229 -NCT02400359 -NCT02400580 -NCT02400697 -NCT02400775 -NCT02400970 -NCT02401321 -NCT02401347 -NCT02401568 -NCT02401581 -NCT02401789 -NCT02401919 -NCT02402439 -NCT02402543 -NCT02402569 -NCT02402803 -NCT02403011 -NCT02403414 -NCT02403492 -NCT02403687 -NCT02403700 -NCT02403726 -NCT02403752 -NCT02403830 -NCT02403843 -NCT02403908 -NCT02403921 -NCT02404064 -NCT02404103 -NCT02404285 -NCT02404493 -NCT02404623 -NCT02404753 -NCT02404857 -NCT02404870 -NCT02405104 -NCT02405143 -NCT02405312 -NCT02405533 -NCT02405572 -NCT02405780 -NCT02405793 -NCT02405897 -NCT02405949 -NCT02405962 -NCT02406287 -NCT02406326 -NCT02406365 -NCT02406391 -NCT02406586 -NCT02406820 -NCT02406859 -NCT02406963 -NCT02407002 -NCT02407067 -NCT02407080 -NCT02407119 -NCT02407561 -NCT02407587 -NCT02407613 -NCT02407704 -NCT02407938 -NCT02408003 -NCT02408016 -NCT02408068 -NCT02408120 -NCT02408159 -NCT02408328 -NCT02408445 -NCT02408523 -NCT02408627 -NCT02408679 -NCT02408692 -NCT02408887 -NCT02409043 -NCT02409160 -NCT02409238 -NCT02409251 -NCT02409264 -NCT02409290 -NCT02409381 -NCT02409407 -NCT02409797 -NCT02409914 -NCT02410018 -NCT02410135 -NCT02410226 -NCT02410304 -NCT02410382 -NCT02410486 -NCT02410629 -NCT02410772 -NCT02410785 -NCT02410889 -NCT02410993 -NCT02411019 -NCT02411175 -NCT02411266 -NCT02411396 -NCT02411461 -NCT02411513 -NCT02411578 -NCT02411643 -NCT02411682 -NCT02411734 -NCT02411825 -NCT02411890 -NCT02411916 -NCT02412020 -NCT02412046 -NCT02412137 -NCT02412176 -NCT02412254 -NCT02412332 -NCT02412527 -NCT02412592 -NCT02412631 -NCT02412683 -NCT02412735 -NCT02412826 -NCT02412839 -NCT02412956 -NCT02413138 -NCT02413268 -NCT02413359 -NCT02413450 -NCT02413580 -NCT02413671 -NCT02413697 -NCT02413788 -NCT02413853 -NCT02413944 -NCT02414152 -NCT02414165 -NCT02414191 -NCT02414217 -NCT02414269 -NCT02414295 -NCT02414438 -NCT02414529 -NCT02414659 -NCT02414672 -NCT02414789 -NCT02414893 -NCT02415062 -NCT02415140 -NCT02415179 -NCT02415270 -NCT02415361 -NCT02415465 -NCT02415608 -NCT02415725 -NCT02415933 -NCT02416063 -NCT02416154 -NCT02416167 -NCT02416206 -NCT02416219 -NCT02416440 -NCT02416752 -NCT02416960 -NCT02417181 -NCT02417298 -NCT02417337 -NCT02417480 -NCT02417506 -NCT02417701 -NCT02417740 -NCT02417896 -NCT02418039 -NCT02418182 -NCT02418195 -NCT02418325 -NCT02418390 -NCT02418429 -NCT02418507 -NCT02418533 -NCT02418767 -NCT02418832 -NCT02418858 -NCT02418897 -NCT02418949 -NCT02419027 -NCT02419092 -NCT02419105 -NCT02419209 -NCT02419261 -NCT02419339 -NCT02419443 -NCT02419456 -NCT02419534 -NCT02419547 -NCT02419664 -NCT02419768 -NCT02419924 -NCT02419950 -NCT02420002 -NCT02420067 -NCT02420093 -NCT02420184 -NCT02420457 -NCT02420548 -NCT02420561 -NCT02420665 -NCT02420691 -NCT02420769 -NCT02420912 -NCT02420925 -NCT02421276 -NCT02421354 -NCT02421406 -NCT02421523 -NCT02421705 -NCT02421757 -NCT02421770 -NCT02421822 -NCT02421848 -NCT02421887 -NCT02422017 -NCT02422030 -NCT02422082 -NCT02422095 -NCT02422108 -NCT02422147 -NCT02422160 -NCT02422199 -NCT02422394 -NCT02422433 -NCT02422459 -NCT02422511 -NCT02422524 -NCT02422576 -NCT02422680 -NCT02422784 -NCT02422797 -NCT02422953 -NCT02423083 -NCT02423395 -NCT02423564 -NCT02423811 -NCT02423967 -NCT02424123 -NCT02424240 -NCT02424396 -NCT02424461 -NCT02424474 -NCT02424539 -NCT02424708 -NCT02425033 -NCT02425150 -NCT02425228 -NCT02425280 -NCT02425449 -NCT02425475 -NCT02425553 -NCT02425631 -NCT02425722 -NCT02425930 -NCT02425982 -NCT02426034 -NCT02426112 -NCT02426385 -NCT02426424 -NCT02426515 -NCT02426658 -NCT02426814 -NCT02426905 -NCT02426931 -NCT02426944 -NCT02427009 -NCT02427113 -NCT02427269 -NCT02427295 -NCT02427321 -NCT02427399 -NCT02427620 -NCT02427646 -NCT02427828 -NCT02427958 -NCT02427984 -NCT02428010 -NCT02428062 -NCT02428218 -NCT02428478 -NCT02428530 -NCT02428582 -NCT02428842 -NCT02428881 -NCT02428920 -NCT02428959 -NCT02429050 -NCT02429232 -NCT02429349 -NCT02429362 -NCT02429505 -NCT02429518 -NCT02429544 -NCT02429609 -NCT02429765 -NCT02429830 -NCT02430181 -NCT02430194 -NCT02430285 -NCT02430428 -NCT02430532 -NCT02430688 -NCT02431052 -NCT02431117 -NCT02431390 -NCT02431416 -NCT02431442 -NCT02431494 -NCT02431507 -NCT02431520 -NCT02431533 -NCT02431624 -NCT02431754 -NCT02431806 -NCT02431884 -NCT02432196 -NCT02432209 -NCT02432274 -NCT02432521 -NCT02432547 -NCT02432625 -NCT02432729 -NCT02433002 -NCT02433483 -NCT02433535 -NCT02433639 -NCT02433730 -NCT02433769 -NCT02433808 -NCT02433847 -NCT02434432 -NCT02434536 -NCT02434562 -NCT02434575 -NCT02434731 -NCT02434822 -NCT02434939 -NCT02434991 -NCT02435147 -NCT02435264 -NCT02435303 -NCT02435329 -NCT02435342 -NCT02435381 -NCT02435524 -NCT02435745 -NCT02435810 -NCT02435888 -NCT02435940 -NCT02435966 -NCT02435979 -NCT02436070 -NCT02436213 -NCT02436252 -NCT02436343 -NCT02436499 -NCT02436590 -NCT02436681 -NCT02436707 -NCT02436720 -NCT02436850 -NCT02437019 -NCT02437162 -NCT02437201 -NCT02437292 -NCT02437383 -NCT02437500 -NCT02437669 -NCT02437760 -NCT02437799 -NCT02437942 -NCT02438189 -NCT02438202 -NCT02438579 -NCT02438917 -NCT02439112 -NCT02439125 -NCT02439216 -NCT02439242 -NCT02439281 -NCT02439307 -NCT02439528 -NCT02439554 -NCT02439567 -NCT02439645 -NCT02439905 -NCT02440139 -NCT02440347 -NCT02440438 -NCT02440516 -NCT02440646 -NCT02440841 -NCT02441049 -NCT02441166 -NCT02441270 -NCT02441335 -NCT02441413 -NCT02441491 -NCT02441530 -NCT02441816 -NCT02441868 -NCT02441933 -NCT02441946 -NCT02441985 -NCT02441998 -NCT02442102 -NCT02442271 -NCT02442284 -NCT02442297 -NCT02442440 -NCT02442661 -NCT02442674 -NCT02442713 -NCT02442765 -NCT02442778 -NCT02442882 -NCT02442999 -NCT02443090 -NCT02443142 -NCT02443181 -NCT02443246 -NCT02443259 -NCT02443298 -NCT02443311 -NCT02443415 -NCT02443597 -NCT02443623 -NCT02443636 -NCT02443649 -NCT02443740 -NCT02443896 -NCT02444026 -NCT02444715 -NCT02444884 -NCT02444910 -NCT02444936 -NCT02445014 -NCT02445027 -NCT02445118 -NCT02445261 -NCT02445391 -NCT02445430 -NCT02445469 -NCT02445573 -NCT02445664 -NCT02445716 -NCT02445755 -NCT02445911 -NCT02446132 -NCT02446184 -NCT02446301 -NCT02446626 -NCT02446665 -NCT02446678 -NCT02446769 -NCT02446821 -NCT02446951 -NCT02447055 -NCT02447120 -NCT02447159 -NCT02447172 -NCT02447237 -NCT02447250 -NCT02447276 -NCT02447588 -NCT02447692 -NCT02447731 -NCT02447991 -NCT02448069 -NCT02448121 -NCT02448251 -NCT02448485 -NCT02448654 -NCT02448862 -NCT02448927 -NCT02449083 -NCT02449161 -NCT02449304 -NCT02449668 -NCT02449850 -NCT02449863 -NCT02449902 -NCT02450058 -NCT02450097 -NCT02450188 -NCT02450474 -NCT02450630 -NCT02450825 -NCT02450942 -NCT02450955 -NCT02451384 -NCT02451423 -NCT02451462 -NCT02451657 -NCT02451709 -NCT02451761 -NCT02451787 -NCT02451800 -NCT02451826 -NCT02452073 -NCT02452112 -NCT02452164 -NCT02452437 -NCT02452502 -NCT02452567 -NCT02452671 -NCT02452762 -NCT02452944 -NCT02453126 -NCT02453243 -NCT02453269 -NCT02453295 -NCT02453360 -NCT02453373 -NCT02453412 -NCT02453438 -NCT02453503 -NCT02453529 -NCT02453620 -NCT02453685 -NCT02453737 -NCT02454127 -NCT02454153 -NCT02454166 -NCT02454192 -NCT02454283 -NCT02454335 -NCT02454374 -NCT02454426 -NCT02454439 -NCT02454595 -NCT02454751 -NCT02454907 -NCT02455011 -NCT02455076 -NCT02455297 -NCT02455323 -NCT02455362 -NCT02455427 -NCT02455544 -NCT02455622 -NCT02455648 -NCT02455804 -NCT02456025 -NCT02456051 -NCT02456155 -NCT02456272 -NCT02456662 -NCT02456701 -NCT02456779 -NCT02457104 -NCT02457338 -NCT02457390 -NCT02457468 -NCT02457637 -NCT02457728 -NCT02457897 -NCT02457910 -NCT02458118 -NCT02458326 -NCT02458404 -NCT02458417 -NCT02458612 -NCT02458703 -NCT02459041 -NCT02459392 -NCT02459431 -NCT02459600 -NCT02459652 -NCT02459717 -NCT02459951 -NCT02459964 -NCT02460055 -NCT02460133 -NCT02460159 -NCT02460237 -NCT02460315 -NCT02460380 -NCT02460445 -NCT02460458 -NCT02460653 -NCT02460679 -NCT02460783 -NCT02460809 -NCT02460913 -NCT02461069 -NCT02461095 -NCT02461147 -NCT02461173 -NCT02461303 -NCT02461407 -NCT02461628 -NCT02461719 -NCT02461784 -NCT02461862 -NCT02461940 -NCT02461966 -NCT02461992 -NCT02462018 -NCT02462213 -NCT02462226 -NCT02462278 -NCT02462291 -NCT02462369 -NCT02462408 -NCT02462486 -NCT02462811 -NCT02462954 -NCT02463019 -NCT02463045 -NCT02463331 -NCT02463435 -NCT02463461 -NCT02463539 -NCT02463578 -NCT02463656 -NCT02463799 -NCT02463825 -NCT02463851 -NCT02463942 -NCT02463968 -NCT02464124 -NCT02464176 -NCT02464215 -NCT02464241 -NCT02464319 -NCT02464371 -NCT02464553 -NCT02464592 -NCT02464644 -NCT02464683 -NCT02464748 -NCT02464774 -NCT02464826 -NCT02464839 -NCT02464891 -NCT02464982 -NCT02464995 -NCT02465060 -NCT02465190 -NCT02465229 -NCT02465359 -NCT02465385 -NCT02465528 -NCT02465580 -NCT02465632 -NCT02465645 -NCT02465749 -NCT02465775 -NCT02465788 -NCT02465814 -NCT02465840 -NCT02465931 -NCT02465970 -NCT02466204 -NCT02466269 -NCT02466308 -NCT02466360 -NCT02466464 -NCT02466477 -NCT02466529 -NCT02466633 -NCT02466698 -NCT02466776 -NCT02466789 -NCT02466802 -NCT02466828 -NCT02466906 -NCT02466932 -NCT02466971 -NCT02467088 -NCT02467114 -NCT02467127 -NCT02467140 -NCT02467192 -NCT02467244 -NCT02467257 -NCT02467270 -NCT02467517 -NCT02467751 -NCT02467881 -NCT02467959 -NCT02468037 -NCT02468193 -NCT02468258 -NCT02468271 -NCT02468284 -NCT02468453 -NCT02468596 -NCT02468635 -NCT02468648 -NCT02468765 -NCT02468778 -NCT02468817 -NCT02468830 -NCT02468921 -NCT02468973 -NCT02469012 -NCT02469298 -NCT02469571 -NCT02469662 -NCT02469675 -NCT02469779 -NCT02469805 -NCT02469844 -NCT02469935 -NCT02469948 -NCT02470117 -NCT02470169 -NCT02470273 -NCT02470364 -NCT02470390 -NCT02470494 -NCT02470507 -NCT02470663 -NCT02470702 -NCT02470884 -NCT02470962 -NCT02471014 -NCT02471118 -NCT02471261 -NCT02471352 -NCT02471482 -NCT02471573 -NCT02471599 -NCT02471989 -NCT02472145 -NCT02472223 -NCT02472288 -NCT02472340 -NCT02472418 -NCT02472431 -NCT02472509 -NCT02472548 -NCT02472574 -NCT02472665 -NCT02472808 -NCT02472899 -NCT02472912 -NCT02472938 -NCT02472990 -NCT02473029 -NCT02473042 -NCT02473341 -NCT02473393 -NCT02473406 -NCT02473614 -NCT02473653 -NCT02473952 -NCT02473965 -NCT02474004 -NCT02474056 -NCT02474108 -NCT02474251 -NCT02474602 -NCT02474615 -NCT02474680 -NCT02474706 -NCT02474719 -NCT02474732 -NCT02474745 -NCT02474823 -NCT02474888 -NCT02474940 -NCT02475005 -NCT02475057 -NCT02475122 -NCT02475226 -NCT02475291 -NCT02475317 -NCT02475668 -NCT02475733 -NCT02475993 -NCT02476006 -NCT02476019 -NCT02476097 -NCT02476175 -NCT02476240 -NCT02476279 -NCT02476292 -NCT02476357 -NCT02476383 -NCT02476396 -NCT02476409 -NCT02476513 -NCT02476617 -NCT02476721 -NCT02476864 -NCT02476942 -NCT02477007 -NCT02477059 -NCT02477176 -NCT02477228 -NCT02477254 -NCT02477358 -NCT02477436 -NCT02477488 -NCT02477631 -NCT02477644 -NCT02477839 -NCT02477969 -NCT02478190 -NCT02478242 -NCT02478398 -NCT02478411 -NCT02478450 -NCT02478580 -NCT02478710 -NCT02478892 -NCT02478905 -NCT02478957 -NCT02479048 -NCT02479074 -NCT02479087 -NCT02479243 -NCT02479295 -NCT02479438 -NCT02480283 -NCT02480595 -NCT02480634 -NCT02480881 -NCT02481037 -NCT02481076 -NCT02481128 -NCT02481258 -NCT02481414 -NCT02481947 -NCT02481973 -NCT02482025 -NCT02482233 -NCT02482324 -NCT02482337 -NCT02482350 -NCT02482467 -NCT02482818 -NCT02483156 -NCT02483208 -NCT02483429 -NCT02483637 -NCT02483689 -NCT02483728 -NCT02484092 -NCT02484118 -NCT02484300 -NCT02484404 -NCT02484417 -NCT02484508 -NCT02484560 -NCT02484638 -NCT02484716 -NCT02484755 -NCT02484846 -NCT02484937 -NCT02485145 -NCT02485275 -NCT02485340 -NCT02485418 -NCT02485574 -NCT02485665 -NCT02485704 -NCT02485717 -NCT02485743 -NCT02485808 -NCT02486016 -NCT02486042 -NCT02486081 -NCT02486276 -NCT02486302 -NCT02486380 -NCT02486614 -NCT02486653 -NCT02486666 -NCT02486731 -NCT02486757 -NCT02486783 -NCT02486809 -NCT02486835 -NCT02487134 -NCT02487277 -NCT02487394 -NCT02487407 -NCT02487472 -NCT02487602 -NCT02487615 -NCT02488122 -NCT02488135 -NCT02488187 -NCT02488200 -NCT02488434 -NCT02488772 -NCT02488889 -NCT02489110 -NCT02489370 -NCT02489500 -NCT02489617 -NCT02489630 -NCT02490007 -NCT02490046 -NCT02490059 -NCT02490202 -NCT02490358 -NCT02490527 -NCT02490878 -NCT02490930 -NCT02490943 -NCT02490982 -NCT02491060 -NCT02491125 -NCT02491255 -NCT02491281 -NCT02491320 -NCT02491554 -NCT02491567 -NCT02491632 -NCT02491814 -NCT02492087 -NCT02492126 -NCT02492295 -NCT02492347 -NCT02492373 -NCT02492945 -NCT02492984 -NCT02493036 -NCT02493049 -NCT02493127 -NCT02493296 -NCT02493374 -NCT02493452 -NCT02493517 -NCT02493543 -NCT02493673 -NCT02493855 -NCT02494011 -NCT02494076 -NCT02494206 -NCT02494297 -NCT02494323 -NCT02494440 -NCT02494466 -NCT02494635 -NCT02494674 -NCT02494687 -NCT02494882 -NCT02494973 -NCT02495090 -NCT02495168 -NCT02495311 -NCT02495610 -NCT02495844 -NCT02495883 -NCT02496013 -NCT02496078 -NCT02496104 -NCT02496221 -NCT02496299 -NCT02496338 -NCT02496429 -NCT02496546 -NCT02496572 -NCT02496585 -NCT02496689 -NCT02496715 -NCT02496741 -NCT02496767 -NCT02496780 -NCT02497066 -NCT02497079 -NCT02497183 -NCT02497261 -NCT02497417 -NCT02497443 -NCT02497534 -NCT02497547 -NCT02497638 -NCT02497677 -NCT02497781 -NCT02497846 -NCT02497872 -NCT02497898 -NCT02497976 -NCT02498275 -NCT02498301 -NCT02498340 -NCT02498418 -NCT02498535 -NCT02498587 -NCT02498613 -NCT02498639 -NCT02498886 -NCT02498964 -NCT02499120 -NCT02499419 -NCT02499484 -NCT02499497 -NCT02499575 -NCT02499601 -NCT02499835 -NCT02500030 -NCT02500056 -NCT02500147 -NCT02500238 -NCT02500264 -NCT02500277 -NCT02500329 -NCT02500407 -NCT02500420 -NCT02500459 -NCT02500641 -NCT02500693 -NCT02500732 -NCT02500901 -NCT02501070 -NCT02501135 -NCT02501148 -NCT02501213 -NCT02501239 -NCT02501291 -NCT02501304 -NCT02501369 -NCT02501395 -NCT02501486 -NCT02501876 -NCT02501902 -NCT02501941 -NCT02502097 -NCT02502149 -NCT02502331 -NCT02502422 -NCT02502487 -NCT02502669 -NCT02502682 -NCT02502734 -NCT02502747 -NCT02502890 -NCT02503072 -NCT02503098 -NCT02503111 -NCT02503163 -NCT02503176 -NCT02503189 -NCT02503501 -NCT02503709 -NCT02503761 -NCT02503891 -NCT02503904 -NCT02503917 -NCT02503943 -NCT02504021 -NCT02504034 -NCT02504073 -NCT02504112 -NCT02504203 -NCT02504359 -NCT02504541 -NCT02504554 -NCT02504671 -NCT02504749 -NCT02504762 -NCT02504814 -NCT02504840 -NCT02504853 -NCT02504931 -NCT02505152 -NCT02505282 -NCT02505763 -NCT02505919 -NCT02505932 -NCT02505945 -NCT02506023 -NCT02506036 -NCT02506088 -NCT02506140 -NCT02506166 -NCT02506244 -NCT02506257 -NCT02506387 -NCT02506465 -NCT02506478 -NCT02506634 -NCT02506959 -NCT02507024 -NCT02507180 -NCT02507297 -NCT02507492 -NCT02507661 -NCT02507713 -NCT02507765 -NCT02508142 -NCT02508207 -NCT02508298 -NCT02508467 -NCT02508623 -NCT02508909 -NCT02509026 -NCT02509065 -NCT02509364 -NCT02509468 -NCT02509702 -NCT02509780 -NCT02509975 -NCT02510001 -NCT02510066 -NCT02510118 -NCT02510326 -NCT02510443 -NCT02510482 -NCT02510495 -NCT02510638 -NCT02510898 -NCT02510989 -NCT02511067 -NCT02511197 -NCT02511327 -NCT02511431 -NCT02511496 -NCT02511522 -NCT02511847 -NCT02512146 -NCT02512250 -NCT02512263 -NCT02512276 -NCT02512341 -NCT02512354 -NCT02512575 -NCT02512913 -NCT02512965 -NCT02512978 -NCT02513082 -NCT02513173 -NCT02513277 -NCT02513472 -NCT02513485 -NCT02513524 -NCT02513589 -NCT02513615 -NCT02513914 -NCT02513992 -NCT02514005 -NCT02514070 -NCT02514083 -NCT02514200 -NCT02514252 -NCT02514265 -NCT02514343 -NCT02514499 -NCT02514629 -NCT02514837 -NCT02514889 -NCT02515058 -NCT02515110 -NCT02515162 -NCT02515357 -NCT02515474 -NCT02515539 -NCT02515669 -NCT02515903 -NCT02516020 -NCT02516059 -NCT02516085 -NCT02516137 -NCT02517151 -NCT02517359 -NCT02517385 -NCT02517489 -NCT02517528 -NCT02517749 -NCT02517762 -NCT02517931 -NCT02517944 -NCT02517970 -NCT02517983 -NCT02518035 -NCT02518087 -NCT02518100 -NCT02518113 -NCT02518347 -NCT02518412 -NCT02518451 -NCT02518464 -NCT02518542 -NCT02518685 -NCT02518854 -NCT02518945 -NCT02518997 -NCT02519231 -NCT02519244 -NCT02519361 -NCT02519387 -NCT02519491 -NCT02519556 -NCT02519582 -NCT02519621 -NCT02519764 -NCT02519816 -NCT02519868 -NCT02520258 -NCT02520518 -NCT02520609 -NCT02520648 -NCT02520817 -NCT02520856 -NCT02521142 -NCT02521181 -NCT02521298 -NCT02521324 -NCT02521493 -NCT02521558 -NCT02521818 -NCT02521922 -NCT02522000 -NCT02522013 -NCT02522091 -NCT02522195 -NCT02522273 -NCT02522299 -NCT02522351 -NCT02522364 -NCT02522403 -NCT02522455 -NCT02522611 -NCT02522819 -NCT02523066 -NCT02523235 -NCT02523521 -NCT02523586 -NCT02523625 -NCT02523703 -NCT02523781 -NCT02523807 -NCT02523833 -NCT02523885 -NCT02523950 -NCT02523963 -NCT02523976 -NCT02523989 -NCT02524041 -NCT02524080 -NCT02524106 -NCT02524236 -NCT02524262 -NCT02524405 -NCT02524470 -NCT02524665 -NCT02524782 -NCT02524990 -NCT02525055 -NCT02525172 -NCT02525224 -NCT02525276 -NCT02525497 -NCT02525549 -NCT02525562 -NCT02525640 -NCT02525666 -NCT02525692 -NCT02525757 -NCT02525822 -NCT02525991 -NCT02526160 -NCT02526498 -NCT02526628 -NCT02526654 -NCT02526680 -NCT02526693 -NCT02526719 -NCT02526771 -NCT02526836 -NCT02526849 -NCT02526927 -NCT02526979 -NCT02527187 -NCT02527213 -NCT02527278 -NCT02527486 -NCT02527707 -NCT02527759 -NCT02527954 -NCT02528123 -NCT02528188 -NCT02528279 -NCT02528370 -NCT02528760 -NCT02528955 -NCT02529306 -NCT02529345 -NCT02529540 -NCT02529553 -NCT02529735 -NCT02529748 -NCT02529826 -NCT02530151 -NCT02530229 -NCT02530281 -NCT02530294 -NCT02530346 -NCT02530476 -NCT02530515 -NCT02530580 -NCT02530593 -NCT02530736 -NCT02530762 -NCT02530931 -NCT02531217 -NCT02531503 -NCT02531542 -NCT02531568 -NCT02531581 -NCT02531594 -NCT02531633 -NCT02531685 -NCT02531802 -NCT02531906 -NCT02531971 -NCT02532075 -NCT02532114 -NCT02532140 -NCT02532322 -NCT02532361 -NCT02532426 -NCT02532543 -NCT02532608 -NCT02532660 -NCT02532816 -NCT02532894 -NCT02532907 -NCT02532920 -NCT02532972 -NCT02533011 -NCT02533089 -NCT02533154 -NCT02533271 -NCT02533687 -NCT02533739 -NCT02533778 -NCT02533817 -NCT02533869 -NCT02533947 -NCT02533999 -NCT02534051 -NCT02534194 -NCT02534220 -NCT02534428 -NCT02534493 -NCT02534519 -NCT02534571 -NCT02534714 -NCT02534727 -NCT02534779 -NCT02535026 -NCT02535091 -NCT02535260 -NCT02535273 -NCT02535286 -NCT02535650 -NCT02535858 -NCT02535871 -NCT02535949 -NCT02536027 -NCT02536079 -NCT02536144 -NCT02536274 -NCT02536287 -NCT02536378 -NCT02536638 -NCT02536677 -NCT02537171 -NCT02537353 -NCT02537431 -NCT02537483 -NCT02537548 -NCT02537613 -NCT02537626 -NCT02537834 -NCT02537847 -NCT02537860 -NCT02538042 -NCT02538120 -NCT02538133 -NCT02538276 -NCT02538289 -NCT02538328 -NCT02538523 -NCT02538575 -NCT02538731 -NCT02538770 -NCT02538783 -NCT02538822 -NCT02538861 -NCT02538926 -NCT02539121 -NCT02539134 -NCT02539160 -NCT02539290 -NCT02539472 -NCT02539680 -NCT02539706 -NCT02539784 -NCT02539810 -NCT02539836 -NCT02540031 -NCT02540096 -NCT02540148 -NCT02540187 -NCT02540382 -NCT02540421 -NCT02540512 -NCT02540538 -NCT02540668 -NCT02540694 -NCT02540876 -NCT02541058 -NCT02541253 -NCT02541292 -NCT02541331 -NCT02541383 -NCT02541409 -NCT02541487 -NCT02541617 -NCT02541864 -NCT02541877 -NCT02541942 -NCT02542046 -NCT02542098 -NCT02542254 -NCT02542735 -NCT02542878 -NCT02542891 -NCT02543385 -NCT02543476 -NCT02543606 -NCT02543658 -NCT02543697 -NCT02543775 -NCT02543801 -NCT02543892 -NCT02543905 -NCT02544100 -NCT02544165 -NCT02544191 -NCT02544217 -NCT02544230 -NCT02544282 -NCT02544529 -NCT02544659 -NCT02544672 -NCT02544880 -NCT02544958 -NCT02544984 -NCT02545036 -NCT02545114 -NCT02545270 -NCT02545322 -NCT02545387 -NCT02545686 -NCT02545777 -NCT02545868 -NCT02545907 -NCT02546193 -NCT02546323 -NCT02546388 -NCT02546414 -NCT02546466 -NCT02546518 -NCT02546622 -NCT02546843 -NCT02546856 -NCT02546921 -NCT02547090 -NCT02547103 -NCT02547246 -NCT02547298 -NCT02547324 -NCT02547441 -NCT02547636 -NCT02547753 -NCT02547792 -NCT02547857 -NCT02547896 -NCT02548117 -NCT02548143 -NCT02548221 -NCT02548234 -NCT02548481 -NCT02548494 -NCT02548585 -NCT02548637 -NCT02548715 -NCT02548767 -NCT02548793 -NCT02548806 -NCT02548832 -NCT02548975 -NCT02549196 -NCT02549274 -NCT02549300 -NCT02549495 -NCT02549612 -NCT02549664 -NCT02549677 -NCT02549768 -NCT02549859 -NCT02550041 -NCT02550119 -NCT02550184 -NCT02550236 -NCT02550288 -NCT02550314 -NCT02550366 -NCT02550457 -NCT02550496 -NCT02550665 -NCT02550756 -NCT02551068 -NCT02551081 -NCT02551120 -NCT02551367 -NCT02551588 -NCT02551744 -NCT02551757 -NCT02551783 -NCT02551822 -NCT02551848 -NCT02552225 -NCT02552251 -NCT02552290 -NCT02552420 -NCT02552433 -NCT02552459 -NCT02552485 -NCT02552576 -NCT02552615 -NCT02552628 -NCT02552641 -NCT02552771 -NCT02552875 -NCT02552966 -NCT02553005 -NCT02553083 -NCT02553096 -NCT02553174 -NCT02553200 -NCT02553265 -NCT02553304 -NCT02553343 -NCT02553525 -NCT02553590 -NCT02553746 -NCT02553798 -NCT02553889 -NCT02553954 -NCT02554097 -NCT02554188 -NCT02554201 -NCT02554240 -NCT02554331 -NCT02554422 -NCT02554526 -NCT02554552 -NCT02554565 -NCT02554773 -NCT02554838 -NCT02554851 -NCT02554890 -NCT02555033 -NCT02555137 -NCT02555215 -NCT02555280 -NCT02555332 -NCT02555345 -NCT02555384 -NCT02555462 -NCT02555514 -NCT02555683 -NCT02555735 -NCT02555943 -NCT02555969 -NCT02555982 -NCT02556034 -NCT02556047 -NCT02556086 -NCT02556216 -NCT02556411 -NCT02556437 -NCT02556515 -NCT02556554 -NCT02556658 -NCT02556710 -NCT02556749 -NCT02556827 -NCT02556866 -NCT02556918 -NCT02556944 -NCT02557126 -NCT02557243 -NCT02557399 -NCT02557412 -NCT02557464 -NCT02557737 -NCT02557776 -NCT02557828 -NCT02557841 -NCT02557932 -NCT02558374 -NCT02558400 -NCT02558478 -NCT02558712 -NCT02558842 -NCT02558855 -NCT02558933 -NCT02558972 -NCT02559011 -NCT02559063 -NCT02559115 -NCT02559128 -NCT02559206 -NCT02559219 -NCT02559310 -NCT02559362 -NCT02559427 -NCT02559479 -NCT02559518 -NCT02559570 -NCT02559765 -NCT02559817 -NCT02560129 -NCT02560259 -NCT02560350 -NCT02560467 -NCT02560480 -NCT02560493 -NCT02560883 -NCT02561026 -NCT02561039 -NCT02561091 -NCT02561117 -NCT02561182 -NCT02561208 -NCT02561312 -NCT02561533 -NCT02561611 -NCT02561663 -NCT02561728 -NCT02561793 -NCT02561819 -NCT02561845 -NCT02561910 -NCT02561923 -NCT02561936 -NCT02561988 -NCT02562118 -NCT02562638 -NCT02562716 -NCT02562729 -NCT02562911 -NCT02563067 -NCT02563080 -NCT02563093 -NCT02563184 -NCT02563379 -NCT02563626 -NCT02563873 -NCT02563886 -NCT02563977 -NCT02564016 -NCT02564237 -NCT02564497 -NCT02564848 -NCT02564874 -NCT02564952 -NCT02564978 -NCT02565082 -NCT02565095 -NCT02565160 -NCT02565303 -NCT02565342 -NCT02565368 -NCT02565407 -NCT02565446 -NCT02565524 -NCT02565563 -NCT02565576 -NCT02565628 -NCT02565654 -NCT02565836 -NCT02565849 -NCT02565940 -NCT02566447 -NCT02566551 -NCT02566655 -NCT02566876 -NCT02566889 -NCT02566902 -NCT02567084 -NCT02567162 -NCT02567448 -NCT02567461 -NCT02567500 -NCT02567708 -NCT02567877 -NCT02568319 -NCT02568488 -NCT02568657 -NCT02568826 -NCT02568891 -NCT02568982 -NCT02569164 -NCT02569307 -NCT02569398 -NCT02569450 -NCT02569658 -NCT02569697 -NCT02569827 -NCT02569918 -NCT02569970 -NCT02570165 -NCT02570386 -NCT02570477 -NCT02570529 -NCT02570568 -NCT02570581 -NCT02570698 -NCT02570776 -NCT02570828 -NCT02570867 -NCT02570958 -NCT02571088 -NCT02571439 -NCT02571478 -NCT02571543 -NCT02571569 -NCT02571582 -NCT02571660 -NCT02571686 -NCT02571868 -NCT02571998 -NCT02572193 -NCT02572232 -NCT02572336 -NCT02572479 -NCT02572544 -NCT02572583 -NCT02572713 -NCT02572869 -NCT02573012 -NCT02573051 -NCT02573194 -NCT02573233 -NCT02573272 -NCT02573389 -NCT02573428 -NCT02573571 -NCT02573740 -NCT02573870 -NCT02574039 -NCT02574195 -NCT02574273 -NCT02574364 -NCT02574403 -NCT02574546 -NCT02574559 -NCT02574676 -NCT02574793 -NCT02574819 -NCT02574910 -NCT02574975 -NCT02575157 -NCT02575287 -NCT02575365 -NCT02575508 -NCT02575729 -NCT02575742 -NCT02576106 -NCT02576470 -NCT02576535 -NCT02576626 -NCT02576652 -NCT02576756 -NCT02576795 -NCT02576808 -NCT02576821 -NCT02576847 -NCT02576860 -NCT02576873 -NCT02576925 -NCT02577055 -NCT02577120 -NCT02577133 -NCT02577159 -NCT02577367 -NCT02577419 -NCT02577536 -NCT02577861 -NCT02578108 -NCT02578134 -NCT02578186 -NCT02578368 -NCT02578394 -NCT02578524 -NCT02578797 -NCT02579083 -NCT02579096 -NCT02579148 -NCT02579200 -NCT02579226 -NCT02579252 -NCT02579473 -NCT02579551 -NCT02579681 -NCT02579694 -NCT02579720 -NCT02579954 -NCT02579967 -NCT02580006 -NCT02580032 -NCT02580084 -NCT02580175 -NCT02580344 -NCT02580422 -NCT02580474 -NCT02580487 -NCT02580669 -NCT02580799 -NCT02581085 -NCT02581241 -NCT02581358 -NCT02581397 -NCT02581462 -NCT02581514 -NCT02581527 -NCT02581748 -NCT02581761 -NCT02581813 -NCT02582021 -NCT02582060 -NCT02582151 -NCT02582164 -NCT02582177 -NCT02582307 -NCT02582320 -NCT02582411 -NCT02582424 -NCT02582450 -NCT02582541 -NCT02582723 -NCT02582762 -NCT02582996 -NCT02583100 -NCT02583152 -NCT02583282 -NCT02583360 -NCT02583451 -NCT02583646 -NCT02583737 -NCT02583763 -NCT02583893 -NCT02584413 -NCT02584426 -NCT02584478 -NCT02584517 -NCT02584582 -NCT02584595 -NCT02584738 -NCT02585089 -NCT02585219 -NCT02585271 -NCT02585323 -NCT02585492 -NCT02585518 -NCT02585583 -NCT02585674 -NCT02585739 -NCT02585765 -NCT02585778 -NCT02585791 -NCT02585817 -NCT02585843 -NCT02586012 -NCT02586129 -NCT02586142 -NCT02586337 -NCT02586402 -NCT02586506 -NCT02586623 -NCT02586961 -NCT02587000 -NCT02587078 -NCT02587494 -NCT02587559 -NCT02587624 -NCT02587715 -NCT02587806 -NCT02587923 -NCT02588469 -NCT02588495 -NCT02588560 -NCT02588612 -NCT02588638 -NCT02588677 -NCT02589041 -NCT02589249 -NCT02589431 -NCT02589600 -NCT02589847 -NCT02589860 -NCT02589925 -NCT02589964 -NCT02589977 -NCT02590380 -NCT02590393 -NCT02590432 -NCT02590484 -NCT02590666 -NCT02590809 -NCT02590978 -NCT02591134 -NCT02591381 -NCT02591394 -NCT02591407 -NCT02591446 -NCT02591550 -NCT02591641 -NCT02591654 -NCT02591667 -NCT02591836 -NCT02591888 -NCT02591901 -NCT02592369 -NCT02592408 -NCT02592434 -NCT02592473 -NCT02592629 -NCT02592642 -NCT02592681 -NCT02592759 -NCT02592811 -NCT02592837 -NCT02592863 -NCT02593279 -NCT02593331 -NCT02593487 -NCT02593643 -NCT02593799 -NCT02593968 -NCT02593981 -NCT02594189 -NCT02594475 -NCT02594631 -NCT02594683 -NCT02594709 -NCT02594774 -NCT02594787 -NCT02594904 -NCT02594943 -NCT02595034 -NCT02595073 -NCT02595099 -NCT02595255 -NCT02595307 -NCT02595489 -NCT02595515 -NCT02595567 -NCT02595723 -NCT02595827 -NCT02596100 -NCT02596243 -NCT02596308 -NCT02596659 -NCT02596776 -NCT02596997 -NCT02597101 -NCT02597166 -NCT02597309 -NCT02597374 -NCT02597426 -NCT02597478 -NCT02597621 -NCT02597634 -NCT02597712 -NCT02597777 -NCT02597881 -NCT02598414 -NCT02598453 -NCT02598531 -NCT02598674 -NCT02598713 -NCT02598895 -NCT02598973 -NCT02599090 -NCT02599246 -NCT02599376 -NCT02599701 -NCT02600000 -NCT02600013 -NCT02600039 -NCT02600065 -NCT02600234 -NCT02600312 -NCT02600364 -NCT02600390 -NCT02600533 -NCT02600598 -NCT02600611 -NCT02600650 -NCT02600806 -NCT02600871 -NCT02601053 -NCT02601144 -NCT02601183 -NCT02601339 -NCT02601404 -NCT02601573 -NCT02601651 -NCT02601703 -NCT02601807 -NCT02601937 -NCT02602080 -NCT02602119 -NCT02602262 -NCT02602405 -NCT02602431 -NCT02602470 -NCT02602717 -NCT02602808 -NCT02602977 -NCT02603042 -NCT02603068 -NCT02603081 -NCT02603146 -NCT02603172 -NCT02603640 -NCT02603653 -NCT02603783 -NCT02603861 -NCT02603900 -NCT02603926 -NCT02603939 -NCT02603952 -NCT02604082 -NCT02604251 -NCT02604368 -NCT02604394 -NCT02604498 -NCT02604732 -NCT02604745 -NCT02604953 -NCT02605070 -NCT02605161 -NCT02605213 -NCT02605304 -NCT02605408 -NCT02605564 -NCT02605720 -NCT02606006 -NCT02606045 -NCT02606097 -NCT02606357 -NCT02606383 -NCT02606396 -NCT02606578 -NCT02606851 -NCT02607046 -NCT02607085 -NCT02607098 -NCT02607176 -NCT02607462 -NCT02607488 -NCT02607527 -NCT02607579 -NCT02607618 -NCT02607904 -NCT02607956 -NCT02608125 -NCT02608177 -NCT02608255 -NCT02608489 -NCT02608554 -NCT02608580 -NCT02608814 -NCT02609009 -NCT02609022 -NCT02609100 -NCT02609204 -NCT02609295 -NCT02609529 -NCT02609581 -NCT02609594 -NCT02609659 -NCT02609685 -NCT02609919 -NCT02610127 -NCT02610335 -NCT02610621 -NCT02610660 -NCT02610699 -NCT02610855 -NCT02610920 -NCT02611050 -NCT02611128 -NCT02611167 -NCT02611206 -NCT02611258 -NCT02611453 -NCT02611466 -NCT02611583 -NCT02611921 -NCT02612051 -NCT02612207 -NCT02612376 -NCT02612558 -NCT02612571 -NCT02612636 -NCT02612649 -NCT02612714 -NCT02612727 -NCT02613065 -NCT02613078 -NCT02613234 -NCT02613299 -NCT02613312 -NCT02613338 -NCT02613364 -NCT02613455 -NCT02613520 -NCT02613611 -NCT02613676 -NCT02613858 -NCT02613871 -NCT02614118 -NCT02614144 -NCT02614183 -NCT02614235 -NCT02614248 -NCT02614274 -NCT02614365 -NCT02614482 -NCT02614599 -NCT02614651 -NCT02614703 -NCT02614729 -NCT02614898 -NCT02614989 -NCT02615041 -NCT02615132 -NCT02615158 -NCT02615691 -NCT02615730 -NCT02615808 -NCT02615834 -NCT02615964 -NCT02616172 -NCT02616250 -NCT02616263 -NCT02616302 -NCT02616406 -NCT02616497 -NCT02616562 -NCT02616575 -NCT02616614 -NCT02616653 -NCT02616705 -NCT02616731 -NCT02616757 -NCT02616796 -NCT02616900 -NCT02616952 -NCT02616978 -NCT02617173 -NCT02617199 -NCT02617407 -NCT02617537 -NCT02617615 -NCT02617706 -NCT02617771 -NCT02617784 -NCT02617810 -NCT02617888 -NCT02617966 -NCT02618044 -NCT02618083 -NCT02618278 -NCT02618317 -NCT02618343 -NCT02618369 -NCT02618421 -NCT02618681 -NCT02619084 -NCT02619149 -NCT02619240 -NCT02619357 -NCT02619396 -NCT02619461 -NCT02619474 -NCT02619734 -NCT02619747 -NCT02619812 -NCT02619838 -NCT02619903 -NCT02619955 -NCT02620202 -NCT02620254 -NCT02620280 -NCT02620397 -NCT02620488 -NCT02620605 -NCT02620631 -NCT02620644 -NCT02620670 -NCT02620735 -NCT02620748 -NCT02620774 -NCT02620787 -NCT02620839 -NCT02621021 -NCT02621372 -NCT02621541 -NCT02621567 -NCT02621710 -NCT02621996 -NCT02622009 -NCT02622178 -NCT02622321 -NCT02622373 -NCT02622490 -NCT02622516 -NCT02622594 -NCT02622607 -NCT02622620 -NCT02622646 -NCT02622776 -NCT02623062 -NCT02623166 -NCT02623413 -NCT02623556 -NCT02623647 -NCT02624024 -NCT02624102 -NCT02624362 -NCT02624531 -NCT02624687 -NCT02624934 -NCT02625038 -NCT02625077 -NCT02625090 -NCT02625272 -NCT02625454 -NCT02625662 -NCT02625688 -NCT02625831 -NCT02625909 -NCT02625987 -NCT02626052 -NCT02626117 -NCT02626208 -NCT02626533 -NCT02626598 -NCT02626637 -NCT02626663 -NCT02626806 -NCT02626845 -NCT02626897 -NCT02626923 -NCT02627027 -NCT02627209 -NCT02627274 -NCT02627339 -NCT02627352 -NCT02627391 -NCT02627456 -NCT02627469 -NCT02627664 -NCT02627781 -NCT02627872 -NCT02628015 -NCT02628041 -NCT02628119 -NCT02628171 -NCT02628691 -NCT02628808 -NCT02628886 -NCT02628899 -NCT02628951 -NCT02629029 -NCT02629081 -NCT02629133 -NCT02629185 -NCT02629406 -NCT02629523 -NCT02629549 -NCT02629614 -NCT02629874 -NCT02629913 -NCT02630394 -NCT02630433 -NCT02630446 -NCT02630485 -NCT02630589 -NCT02630823 -NCT02630927 -NCT02631135 -NCT02631187 -NCT02631226 -NCT02631538 -NCT02631616 -NCT02631668 -NCT02631928 -NCT02632136 -NCT02632253 -NCT02632266 -NCT02632461 -NCT02632565 -NCT02632760 -NCT02632786 -NCT02632851 -NCT02632903 -NCT02632955 -NCT02633189 -NCT02633280 -NCT02633462 -NCT02633475 -NCT02633579 -NCT02633592 -NCT02633644 -NCT02633696 -NCT02633735 -NCT02633813 -NCT02633917 -NCT02633943 -NCT02633969 -NCT02634216 -NCT02634307 -NCT02634411 -NCT02634619 -NCT02634723 -NCT02634827 -NCT02634905 -NCT02634918 -NCT02635022 -NCT02635217 -NCT02635425 -NCT02635724 -NCT02635750 -NCT02635763 -NCT02635906 -NCT02635997 -NCT02636192 -NCT02636205 -NCT02636465 -NCT02636543 -NCT02636569 -NCT02636647 -NCT02636894 -NCT02637115 -NCT02637141 -NCT02637284 -NCT02637557 -NCT02637661 -NCT02637739 -NCT02637921 -NCT02637947 -NCT02637986 -NCT02638012 -NCT02638025 -NCT02638038 -NCT02638285 -NCT02638311 -NCT02638350 -NCT02638389 -NCT02638415 -NCT02638467 -NCT02638506 -NCT02638519 -NCT02638649 -NCT02638714 -NCT02638740 -NCT02638831 -NCT02638922 -NCT02638935 -NCT02639104 -NCT02639156 -NCT02639247 -NCT02639273 -NCT02639325 -NCT02639390 -NCT02639403 -NCT02639819 -NCT02639897 -NCT02640092 -NCT02640105 -NCT02640118 -NCT02640313 -NCT02640352 -NCT02640378 -NCT02640495 -NCT02640573 -NCT02640599 -NCT02640664 -NCT02640768 -NCT02640976 -NCT02641015 -NCT02641054 -NCT02641145 -NCT02641327 -NCT02641353 -NCT02641366 -NCT02641379 -NCT02641431 -NCT02641483 -NCT02641600 -NCT02641652 -NCT02641769 -NCT02641912 -NCT02642419 -NCT02642432 -NCT02642653 -NCT02642744 -NCT02642926 -NCT02642991 -NCT02643160 -NCT02643212 -NCT02643238 -NCT02643290 -NCT02643342 -NCT02643355 -NCT02643849 -NCT02643875 -NCT02644018 -NCT02644070 -NCT02644135 -NCT02644187 -NCT02644200 -NCT02644213 -NCT02644304 -NCT02644707 -NCT02644772 -NCT02645045 -NCT02645123 -NCT02645292 -NCT02645461 -NCT02645604 -NCT02645760 -NCT02645786 -NCT02645877 -NCT02645968 -NCT02646423 -NCT02646553 -NCT02646566 -NCT02646943 -NCT02647281 -NCT02647502 -NCT02647528 -NCT02647593 -NCT02647671 -NCT02647749 -NCT02647788 -NCT02647827 -NCT02647853 -NCT02647944 -NCT02647957 -NCT02648009 -NCT02648074 -NCT02648308 -NCT02648399 -NCT02648490 -NCT02648555 -NCT02648763 -NCT02648815 -NCT02648854 -NCT02648984 -NCT02649062 -NCT02649153 -NCT02649166 -NCT02649335 -NCT02649439 -NCT02649452 -NCT02649621 -NCT02649894 -NCT02649946 -NCT02649985 -NCT02650011 -NCT02650258 -NCT02650271 -NCT02650349 -NCT02650453 -NCT02650505 -NCT02650622 -NCT02650765 -NCT02650830 -NCT02650843 -NCT02650960 -NCT02651116 -NCT02651129 -NCT02651142 -NCT02651155 -NCT02651207 -NCT02651220 -NCT02651493 -NCT02651818 -NCT02651844 -NCT02651883 -NCT02651909 -NCT02652195 -NCT02652299 -NCT02652364 -NCT02652572 -NCT02652767 -NCT02652780 -NCT02653183 -NCT02653443 -NCT02653625 -NCT02653664 -NCT02653911 -NCT02653937 -NCT02654054 -NCT02654158 -NCT02654262 -NCT02654405 -NCT02654431 -NCT02654561 -NCT02654665 -NCT02654951 -NCT02655055 -NCT02655068 -NCT02655094 -NCT02655224 -NCT02655341 -NCT02655367 -NCT02655575 -NCT02655653 -NCT02655809 -NCT02656082 -NCT02656121 -NCT02656368 -NCT02656381 -NCT02656654 -NCT02656953 -NCT02657031 -NCT02657070 -NCT02657083 -NCT02657135 -NCT02657187 -NCT02657213 -NCT02657317 -NCT02657356 -NCT02657369 -NCT02657408 -NCT02657538 -NCT02657551 -NCT02657603 -NCT02657681 -NCT02657694 -NCT02657707 -NCT02657824 -NCT02657876 -NCT02657993 -NCT02658149 -NCT02658162 -NCT02658201 -NCT02658396 -NCT02658500 -NCT02658552 -NCT02658669 -NCT02658695 -NCT02658721 -NCT02659189 -NCT02659241 -NCT02659722 -NCT02659813 -NCT02659839 -NCT02659943 -NCT02659995 -NCT02660060 -NCT02660125 -NCT02660138 -NCT02660190 -NCT02660255 -NCT02660320 -NCT02660359 -NCT02660372 -NCT02660437 -NCT02660489 -NCT02660515 -NCT02660528 -NCT02660697 -NCT02660736 -NCT02660801 -NCT02660853 -NCT02660905 -NCT02660918 -NCT02660970 -NCT02661191 -NCT02661256 -NCT02661360 -NCT02661386 -NCT02661425 -NCT02661451 -NCT02661672 -NCT02661789 -NCT02661971 -NCT02662075 -NCT02662114 -NCT02662192 -NCT02662218 -NCT02662426 -NCT02662491 -NCT02662712 -NCT02662894 -NCT02662907 -NCT02663011 -NCT02663206 -NCT02663479 -NCT02663531 -NCT02663544 -NCT02663570 -NCT02663609 -NCT02663895 -NCT02664077 -NCT02664220 -NCT02664298 -NCT02664428 -NCT02664467 -NCT02664493 -NCT02664688 -NCT02664805 -NCT02664896 -NCT02665104 -NCT02665117 -NCT02665182 -NCT02665195 -NCT02665325 -NCT02665442 -NCT02665546 -NCT02665559 -NCT02665572 -NCT02665585 -NCT02665728 -NCT02665871 -NCT02665923 -NCT02666040 -NCT02666118 -NCT02666209 -NCT02666222 -NCT02666261 -NCT02666326 -NCT02666534 -NCT02666742 -NCT02666807 -NCT02667145 -NCT02667249 -NCT02667288 -NCT02667301 -NCT02667392 -NCT02667418 -NCT02667483 -NCT02667496 -NCT02667548 -NCT02667561 -NCT02667925 -NCT02667977 -NCT02668029 -NCT02668081 -NCT02668146 -NCT02668172 -NCT02668185 -NCT02668276 -NCT02668289 -NCT02668471 -NCT02668497 -NCT02668523 -NCT02668575 -NCT02668601 -NCT02668783 -NCT02668822 -NCT02668835 -NCT02669004 -NCT02669056 -NCT02669108 -NCT02669251 -NCT02669420 -NCT02669459 -NCT02669485 -NCT02669823 -NCT02669849 -NCT02669888 -NCT02669966 -NCT02670031 -NCT02670044 -NCT02670057 -NCT02670083 -NCT02670317 -NCT02670343 -NCT02670356 -NCT02670382 -NCT02670486 -NCT02670577 -NCT02670642 -NCT02670980 -NCT02671032 -NCT02671071 -NCT02671188 -NCT02671292 -NCT02671760 -NCT02671877 -NCT02671903 -NCT02671942 -NCT02672553 -NCT02672969 -NCT02672995 -NCT02673528 -NCT02673632 -NCT02673879 -NCT02674178 -NCT02674191 -NCT02674243 -NCT02674256 -NCT02674269 -NCT02674282 -NCT02674412 -NCT02674659 -NCT02674672 -NCT02674750 -NCT02674776 -NCT02674971 -NCT02674997 -NCT02675114 -NCT02675244 -NCT02675491 -NCT02675660 -NCT02675764 -NCT02675985 -NCT02675998 -NCT02676388 -NCT02676479 -NCT02676544 -NCT02676557 -NCT02676570 -NCT02676674 -NCT02676882 -NCT02676895 -NCT02676908 -NCT02676973 -NCT02677090 -NCT02677207 -NCT02677220 -NCT02677233 -NCT02677259 -NCT02677467 -NCT02677506 -NCT02677558 -NCT02677610 -NCT02677636 -NCT02677649 -NCT02677779 -NCT02677818 -NCT02677883 -NCT02677961 -NCT02678104 -NCT02678143 -NCT02678169 -NCT02678182 -NCT02678429 -NCT02678481 -NCT02678520 -NCT02678780 -NCT02678832 -NCT02678936 -NCT02678949 -NCT02679066 -NCT02679118 -NCT02679261 -NCT02679339 -NCT02679482 -NCT02679547 -NCT02679573 -NCT02679794 -NCT02679937 -NCT02679963 -NCT02680093 -NCT02680301 -NCT02680379 -NCT02680405 -NCT02680470 -NCT02680483 -NCT02680639 -NCT02680717 -NCT02680847 -NCT02680873 -NCT02680925 -NCT02680977 -NCT02681068 -NCT02681172 -NCT02681198 -NCT02681211 -NCT02681250 -NCT02681263 -NCT02681315 -NCT02681445 -NCT02681458 -NCT02681471 -NCT02681588 -NCT02681640 -NCT02681718 -NCT02681770 -NCT02682082 -NCT02682251 -NCT02682355 -NCT02682368 -NCT02682563 -NCT02682589 -NCT02682693 -NCT02682745 -NCT02682862 -NCT02683109 -NCT02683174 -NCT02683239 -NCT02683304 -NCT02683343 -NCT02683382 -NCT02683486 -NCT02683694 -NCT02683772 -NCT02683785 -NCT02683954 -NCT02684097 -NCT02684136 -NCT02684344 -NCT02684409 -NCT02684422 -NCT02684448 -NCT02684591 -NCT02684799 -NCT02684812 -NCT02684851 -NCT02685137 -NCT02685150 -NCT02685202 -NCT02685280 -NCT02685319 -NCT02685332 -NCT02685527 -NCT02685709 -NCT02685774 -NCT02685826 -NCT02685865 -NCT02685904 -NCT02685995 -NCT02686294 -NCT02686385 -NCT02686528 -NCT02686645 -NCT02686788 -NCT02686840 -NCT02686879 -NCT02686931 -NCT02686996 -NCT02687165 -NCT02687217 -NCT02687308 -NCT02687464 -NCT02687620 -NCT02687685 -NCT02687711 -NCT02687815 -NCT02687841 -NCT02687880 -NCT02687919 -NCT02688114 -NCT02688153 -NCT02688205 -NCT02688218 -NCT02688244 -NCT02688348 -NCT02688543 -NCT02688569 -NCT02688608 -NCT02688621 -NCT02688699 -NCT02688816 -NCT02688920 -NCT02688972 -NCT02689050 -NCT02689349 -NCT02689375 -NCT02689427 -NCT02689440 -NCT02689466 -NCT02689726 -NCT02689752 -NCT02689765 -NCT02689817 -NCT02689830 -NCT02689960 -NCT02689986 -NCT02689999 -NCT02690038 -NCT02690233 -NCT02690246 -NCT02690285 -NCT02690337 -NCT02690376 -NCT02690480 -NCT02690545 -NCT02690610 -NCT02690636 -NCT02690922 -NCT02690987 -NCT02691143 -NCT02691312 -NCT02691325 -NCT02691338 -NCT02691494 -NCT02691533 -NCT02691689 -NCT02691845 -NCT02691936 -NCT02692183 -NCT02692508 -NCT02692521 -NCT02692534 -NCT02692573 -NCT02692638 -NCT02692872 -NCT02693119 -NCT02693132 -NCT02693379 -NCT02693457 -NCT02693509 -NCT02693535 -NCT02693548 -NCT02693704 -NCT02693847 -NCT02693977 -NCT02694172 -NCT02694198 -NCT02694302 -NCT02694315 -NCT02694393 -NCT02694419 -NCT02694445 -NCT02694770 -NCT02694926 -NCT02695173 -NCT02695602 -NCT02695719 -NCT02695732 -NCT02695940 -NCT02696044 -NCT02696083 -NCT02696122 -NCT02696239 -NCT02696304 -NCT02696330 -NCT02696486 -NCT02696668 -NCT02696837 -NCT02697162 -NCT02697188 -NCT02697201 -NCT02697214 -NCT02697240 -NCT02697331 -NCT02697370 -NCT02697383 -NCT02697396 -NCT02697435 -NCT02697539 -NCT02697734 -NCT02697838 -NCT02698046 -NCT02698150 -NCT02698176 -NCT02698215 -NCT02698332 -NCT02698423 -NCT02698761 -NCT02698995 -NCT02699125 -NCT02699138 -NCT02699320 -NCT02699385 -NCT02699463 -NCT02700022 -NCT02700074 -NCT02700087 -NCT02700139 -NCT02700360 -NCT02700451 -NCT02700477 -NCT02700503 -NCT02700529 -NCT02700555 -NCT02700776 -NCT02700789 -NCT02700906 -NCT02701101 -NCT02701205 -NCT02701244 -NCT02701283 -NCT02701309 -NCT02701439 -NCT02701491 -NCT02701504 -NCT02701595 -NCT02701608 -NCT02701751 -NCT02701803 -NCT02701920 -NCT02701946 -NCT02701985 -NCT02702232 -NCT02702349 -NCT02702388 -NCT02702596 -NCT02702648 -NCT02702752 -NCT02702765 -NCT02702778 -NCT02702882 -NCT02702947 -NCT02703064 -NCT02703129 -NCT02703207 -NCT02703246 -NCT02703285 -NCT02703311 -NCT02703402 -NCT02703467 -NCT02703493 -NCT02703545 -NCT02703623 -NCT02703701 -NCT02703818 -NCT02703844 -NCT02703922 -NCT02704078 -NCT02704091 -NCT02704247 -NCT02704338 -NCT02704637 -NCT02704689 -NCT02704741 -NCT02704754 -NCT02704793 -NCT02704819 -NCT02704845 -NCT02705014 -NCT02705144 -NCT02705157 -NCT02705183 -NCT02705352 -NCT02705443 -NCT02705573 -NCT02705599 -NCT02705664 -NCT02705768 -NCT02705781 -NCT02705937 -NCT02706132 -NCT02706158 -NCT02706210 -NCT02706262 -NCT02706431 -NCT02706691 -NCT02706938 -NCT02707042 -NCT02707198 -NCT02707588 -NCT02707601 -NCT02707653 -NCT02707952 -NCT02708095 -NCT02708186 -NCT02708355 -NCT02708368 -NCT02708953 -NCT02708966 -NCT02709408 -NCT02709460 -NCT02709681 -NCT02709850 -NCT02709967 -NCT02710045 -NCT02710110 -NCT02710162 -NCT02710175 -NCT02710214 -NCT02710461 -NCT02710474 -NCT02710487 -NCT02710526 -NCT02710591 -NCT02710669 -NCT02710682 -NCT02710786 -NCT02710799 -NCT02710838 -NCT02710942 -NCT02710968 -NCT02710981 -NCT02711397 -NCT02711449 -NCT02711514 -NCT02711540 -NCT02711683 -NCT02711735 -NCT02711800 -NCT02711826 -NCT02711995 -NCT02712060 -NCT02712138 -NCT02712216 -NCT02712242 -NCT02712281 -NCT02712346 -NCT02712437 -NCT02712515 -NCT02712671 -NCT02712762 -NCT02712814 -NCT02712827 -NCT02712840 -NCT02712892 -NCT02712957 -NCT02712983 -NCT02713035 -NCT02713178 -NCT02713256 -NCT02713412 -NCT02713464 -NCT02713555 -NCT02713737 -NCT02713932 -NCT02713945 -NCT02714023 -NCT02714127 -NCT02714439 -NCT02714582 -NCT02714946 -NCT02714972 -NCT02714985 -NCT02715024 -NCT02715102 -NCT02715154 -NCT02715193 -NCT02715323 -NCT02715713 -NCT02715765 -NCT02715791 -NCT02715999 -NCT02716012 -NCT02716025 -NCT02716103 -NCT02716194 -NCT02716285 -NCT02716376 -NCT02716415 -NCT02716428 -NCT02716571 -NCT02716662 -NCT02716688 -NCT02716714 -NCT02716779 -NCT02717000 -NCT02717455 -NCT02717689 -NCT02717793 -NCT02717832 -NCT02717975 -NCT02718001 -NCT02718027 -NCT02718066 -NCT02718092 -NCT02718495 -NCT02718534 -NCT02718560 -NCT02718586 -NCT02718677 -NCT02718703 -NCT02718846 -NCT02718963 -NCT02718976 -NCT02719028 -NCT02719093 -NCT02719119 -NCT02719145 -NCT02719158 -NCT02719197 -NCT02719249 -NCT02719340 -NCT02719418 -NCT02719509 -NCT02719600 -NCT02719717 -NCT02719769 -NCT02719821 -NCT02719912 -NCT02720055 -NCT02720081 -NCT02720211 -NCT02720302 -NCT02720315 -NCT02720341 -NCT02720458 -NCT02720640 -NCT02720679 -NCT02720822 -NCT02720861 -NCT02720952 -NCT02721069 -NCT02721173 -NCT02721186 -NCT02721251 -NCT02721277 -NCT02721355 -NCT02721394 -NCT02721732 -NCT02721745 -NCT02721771 -NCT02721862 -NCT02722278 -NCT02722330 -NCT02722343 -NCT02722551 -NCT02722668 -NCT02722681 -NCT02722720 -NCT02722772 -NCT02722811 -NCT02722980 -NCT02722993 -NCT02723032 -NCT02723305 -NCT02723474 -NCT02723500 -NCT02723539 -NCT02723552 -NCT02723617 -NCT02723721 -NCT02723864 -NCT02723877 -NCT02723890 -NCT02724059 -NCT02724176 -NCT02724228 -NCT02724254 -NCT02724306 -NCT02724410 -NCT02724462 -NCT02724696 -NCT02724722 -NCT02724761 -NCT02724774 -NCT02724865 -NCT02725047 -NCT02725411 -NCT02725463 -NCT02725502 -NCT02725632 -NCT02725671 -NCT02725879 -NCT02726048 -NCT02726087 -NCT02726113 -NCT02726139 -NCT02726152 -NCT02726295 -NCT02726451 -NCT02726919 -NCT02726984 -NCT02727010 -NCT02727114 -NCT02727231 -NCT02727244 -NCT02727361 -NCT02727465 -NCT02727530 -NCT02727569 -NCT02727582 -NCT02727647 -NCT02727686 -NCT02727959 -NCT02728102 -NCT02728375 -NCT02728427 -NCT02728440 -NCT02728544 -NCT02728765 -NCT02728882 -NCT02729012 -NCT02729051 -NCT02729220 -NCT02729350 -NCT02729454 -NCT02729545 -NCT02729636 -NCT02729649 -NCT02729740 -NCT02729909 -NCT02729948 -NCT02729961 -NCT02730052 -NCT02730065 -NCT02730169 -NCT02730338 -NCT02730351 -NCT02730390 -NCT02730442 -NCT02730585 -NCT02730598 -NCT02730728 -NCT02730793 -NCT02730988 -NCT02731014 -NCT02731118 -NCT02731170 -NCT02731300 -NCT02731313 -NCT02731417 -NCT02731469 -NCT02731586 -NCT02731872 -NCT02731924 -NCT02731989 -NCT02732145 -NCT02732314 -NCT02732392 -NCT02732431 -NCT02732587 -NCT02732600 -NCT02732613 -NCT02732691 -NCT02732743 -NCT02732795 -NCT02732912 -NCT02732925 -NCT02733133 -NCT02733172 -NCT02733276 -NCT02733328 -NCT02733367 -NCT02733510 -NCT02733549 -NCT02733666 -NCT02733744 -NCT02733809 -NCT02733861 -NCT02734082 -NCT02734160 -NCT02734173 -NCT02734186 -NCT02734199 -NCT02734251 -NCT02734342 -NCT02734368 -NCT02734446 -NCT02734459 -NCT02735018 -NCT02735109 -NCT02735343 -NCT02735421 -NCT02735447 -NCT02735681 -NCT02735694 -NCT02735707 -NCT02735837 -NCT02735863 -NCT02736240 -NCT02736370 -NCT02736461 -NCT02736591 -NCT02736734 -NCT02736968 -NCT02736981 -NCT02737085 -NCT02737189 -NCT02737228 -NCT02737267 -NCT02737436 -NCT02737449 -NCT02737527 -NCT02737592 -NCT02737631 -NCT02737761 -NCT02737852 -NCT02737930 -NCT02738138 -NCT02738177 -NCT02738294 -NCT02738450 -NCT02738671 -NCT02738853 -NCT02739555 -NCT02739672 -NCT02739737 -NCT02740088 -NCT02740153 -NCT02740166 -NCT02740322 -NCT02740413 -NCT02740543 -NCT02740673 -NCT02740686 -NCT02740738 -NCT02740790 -NCT02740972 -NCT02741024 -NCT02741245 -NCT02741440 -NCT02741453 -NCT02741492 -NCT02741531 -NCT02741544 -NCT02741609 -NCT02741674 -NCT02741687 -NCT02741778 -NCT02742051 -NCT02742116 -NCT02742129 -NCT02742155 -NCT02742272 -NCT02742298 -NCT02742311 -NCT02742376 -NCT02742402 -NCT02742558 -NCT02742844 -NCT02743234 -NCT02743338 -NCT02743364 -NCT02743455 -NCT02743598 -NCT02743650 -NCT02743845 -NCT02743949 -NCT02744053 -NCT02744131 -NCT02744157 -NCT02744170 -NCT02744352 -NCT02744469 -NCT02744495 -NCT02744508 -NCT02744521 -NCT02744703 -NCT02744729 -NCT02745054 -NCT02745093 -NCT02745171 -NCT02745301 -NCT02745392 -NCT02745717 -NCT02745808 -NCT02746029 -NCT02746367 -NCT02746432 -NCT02746536 -NCT02746562 -NCT02746588 -NCT02746614 -NCT02746770 -NCT02746783 -NCT02746809 -NCT02746887 -NCT02747056 -NCT02747394 -NCT02747485 -NCT02747511 -NCT02747654 -NCT02747810 -NCT02747849 -NCT02748005 -NCT02748018 -NCT02748135 -NCT02748174 -NCT02748291 -NCT02748343 -NCT02748356 -NCT02748395 -NCT02748434 -NCT02748525 -NCT02748616 -NCT02748681 -NCT02748798 -NCT02748902 -NCT02748941 -NCT02749071 -NCT02749110 -NCT02749123 -NCT02749201 -NCT02749214 -NCT02749227 -NCT02749292 -NCT02749344 -NCT02749474 -NCT02749565 -NCT02749682 -NCT02749786 -NCT02749929 -NCT02750046 -NCT02750085 -NCT02750228 -NCT02750319 -NCT02750371 -NCT02750423 -NCT02750618 -NCT02750644 -NCT02750761 -NCT02750826 -NCT02750839 -NCT02751008 -NCT02751190 -NCT02751307 -NCT02751502 -NCT02751736 -NCT02751944 -NCT02751996 -NCT02752009 -NCT02752113 -NCT02752256 -NCT02752373 -NCT02752399 -NCT02752542 -NCT02752620 -NCT02752711 -NCT02752841 -NCT02752906 -NCT02752971 -NCT02753023 -NCT02753270 -NCT02753283 -NCT02753361 -NCT02753621 -NCT02753634 -NCT02753764 -NCT02753777 -NCT02753920 -NCT02753972 -NCT02754128 -NCT02754232 -NCT02754245 -NCT02754258 -NCT02754453 -NCT02754765 -NCT02754999 -NCT02755168 -NCT02755272 -NCT02755285 -NCT02755363 -NCT02755519 -NCT02755727 -NCT02755753 -NCT02755766 -NCT02755961 -NCT02755987 -NCT02756104 -NCT02756299 -NCT02756325 -NCT02756468 -NCT02756650 -NCT02756910 -NCT02757040 -NCT02757066 -NCT02757079 -NCT02757105 -NCT02757170 -NCT02757495 -NCT02757534 -NCT02757547 -NCT02757573 -NCT02757586 -NCT02757612 -NCT02757768 -NCT02757885 -NCT02757963 -NCT02758015 -NCT02758106 -NCT02758158 -NCT02758236 -NCT02758275 -NCT02758327 -NCT02758431 -NCT02758483 -NCT02758548 -NCT02758704 -NCT02758717 -NCT02758860 -NCT02758912 -NCT02758977 -NCT02759016 -NCT02759094 -NCT02759302 -NCT02759380 -NCT02759393 -NCT02759536 -NCT02759562 -NCT02759653 -NCT02759757 -NCT02760108 -NCT02760264 -NCT02760420 -NCT02760602 -NCT02760745 -NCT02760862 -NCT02760914 -NCT02760940 -NCT02761057 -NCT02761070 -NCT02761174 -NCT02761239 -NCT02761252 -NCT02761265 -NCT02761291 -NCT02761473 -NCT02761499 -NCT02761707 -NCT02761902 -NCT02761928 -NCT02761980 -NCT02762188 -NCT02762318 -NCT02762487 -NCT02762682 -NCT02762760 -NCT02763111 -NCT02763176 -NCT02763215 -NCT02763423 -NCT02763722 -NCT02763761 -NCT02763826 -NCT02763865 -NCT02764177 -NCT02764242 -NCT02764372 -NCT02764541 -NCT02764645 -NCT02764723 -NCT02765035 -NCT02765048 -NCT02765113 -NCT02765217 -NCT02765256 -NCT02765269 -NCT02765308 -NCT02765490 -NCT02765581 -NCT02765620 -NCT02765750 -NCT02765776 -NCT02765789 -NCT02765802 -NCT02765984 -NCT02766114 -NCT02766465 -NCT02766491 -NCT02766517 -NCT02766621 -NCT02766764 -NCT02766933 -NCT02767115 -NCT02767128 -NCT02767193 -NCT02767271 -NCT02767297 -NCT02767453 -NCT02767635 -NCT02767726 -NCT02767921 -NCT02767973 -NCT02768181 -NCT02768233 -NCT02768259 -NCT02768402 -NCT02768454 -NCT02768545 -NCT02768753 -NCT02768870 -NCT02768896 -NCT02769000 -NCT02769039 -NCT02769286 -NCT02769442 -NCT02769494 -NCT02769650 -NCT02769858 -NCT02769884 -NCT02769949 -NCT02769962 -NCT02769988 -NCT02770040 -NCT02770157 -NCT02770326 -NCT02770443 -NCT02770534 -NCT02770703 -NCT02770820 -NCT02770833 -NCT02770846 -NCT02770859 -NCT02771145 -NCT02771184 -NCT02771236 -NCT02771262 -NCT02771275 -NCT02771418 -NCT02771483 -NCT02771496 -NCT02771561 -NCT02771587 -NCT02771600 -NCT02771743 -NCT02771769 -NCT02771860 -NCT02771873 -NCT02772003 -NCT02772042 -NCT02772380 -NCT02772432 -NCT02772510 -NCT02772549 -NCT02772627 -NCT02772692 -NCT02772757 -NCT02772848 -NCT02772900 -NCT02772913 -NCT02773264 -NCT02773290 -NCT02773316 -NCT02773407 -NCT02773446 -NCT02773498 -NCT02773537 -NCT02773563 -NCT02773589 -NCT02773654 -NCT02773719 -NCT02773784 -NCT02773992 -NCT02774109 -NCT02774148 -NCT02774239 -NCT02774304 -NCT02774434 -NCT02774460 -NCT02774538 -NCT02774590 -NCT02774668 -NCT02774707 -NCT02774733 -NCT02774746 -NCT02774928 -NCT02774993 -NCT02775318 -NCT02775396 -NCT02775461 -NCT02775578 -NCT02775630 -NCT02775799 -NCT02775851 -NCT02775916 -NCT02775968 -NCT02776072 -NCT02776137 -NCT02776150 -NCT02776176 -NCT02776202 -NCT02776215 -NCT02776228 -NCT02776345 -NCT02776397 -NCT02776462 -NCT02776540 -NCT02776709 -NCT02776748 -NCT02776787 -NCT02776826 -NCT02776891 -NCT02776930 -NCT02776943 -NCT02776969 -NCT02777073 -NCT02777099 -NCT02777164 -NCT02777203 -NCT02777242 -NCT02777320 -NCT02777398 -NCT02777606 -NCT02777684 -NCT02777762 -NCT02777827 -NCT02777866 -NCT02778087 -NCT02778204 -NCT02778217 -NCT02778295 -NCT02778386 -NCT02778399 -NCT02778425 -NCT02778906 -NCT02779023 -NCT02779062 -NCT02779153 -NCT02779166 -NCT02779348 -NCT02779426 -NCT02779478 -NCT02779543 -NCT02779621 -NCT02779816 -NCT02779959 -NCT02780180 -NCT02780349 -NCT02780388 -NCT02780479 -NCT02780492 -NCT02780531 -NCT02780570 -NCT02780583 -NCT02780596 -NCT02780687 -NCT02780882 -NCT02780895 -NCT02780947 -NCT02780960 -NCT02780999 -NCT02781012 -NCT02781181 -NCT02781207 -NCT02781298 -NCT02781363 -NCT02781402 -NCT02781415 -NCT02781454 -NCT02781571 -NCT02781701 -NCT02781714 -NCT02781766 -NCT02781870 -NCT02782013 -NCT02782052 -NCT02782065 -NCT02782195 -NCT02782247 -NCT02782325 -NCT02782351 -NCT02782533 -NCT02782689 -NCT02782832 -NCT02782858 -NCT02782884 -NCT02782949 -NCT02783118 -NCT02783183 -NCT02783326 -NCT02783404 -NCT02783508 -NCT02783573 -NCT02783794 -NCT02783820 -NCT02783898 -NCT02783989 -NCT02784093 -NCT02784184 -NCT02784613 -NCT02784678 -NCT02784977 -NCT02785029 -NCT02785042 -NCT02785120 -NCT02785419 -NCT02785510 -NCT02785679 -NCT02786017 -NCT02786082 -NCT02786238 -NCT02786290 -NCT02786316 -NCT02786368 -NCT02786433 -NCT02786927 -NCT02786940 -NCT02787486 -NCT02787603 -NCT02787616 -NCT02787811 -NCT02787863 -NCT02787980 -NCT02788019 -NCT02788136 -NCT02788149 -NCT02788188 -NCT02788214 -NCT02788513 -NCT02788643 -NCT02788890 -NCT02788942 -NCT02789020 -NCT02789163 -NCT02789306 -NCT02789332 -NCT02789436 -NCT02789488 -NCT02789566 -NCT02789579 -NCT02789592 -NCT02789605 -NCT02789735 -NCT02789826 -NCT02789852 -NCT02789865 -NCT02789891 -NCT02789917 -NCT02790112 -NCT02790138 -NCT02790463 -NCT02790489 -NCT02790827 -NCT02790918 -NCT02791191 -NCT02791373 -NCT02791516 -NCT02791607 -NCT02791698 -NCT02791724 -NCT02791776 -NCT02791828 -NCT02791880 -NCT02791893 -NCT02792205 -NCT02792257 -NCT02792426 -NCT02792452 -NCT02792530 -NCT02792738 -NCT02792894 -NCT02793206 -NCT02793232 -NCT02793375 -NCT02793479 -NCT02793739 -NCT02793791 -NCT02793869 -NCT02793908 -NCT02793934 -NCT02794012 -NCT02794103 -NCT02794129 -NCT02794194 -NCT02794454 -NCT02794467 -NCT02794532 -NCT02794675 -NCT02794766 -NCT02794844 -NCT02794857 -NCT02794870 -NCT02794909 -NCT02794948 -NCT02794974 -NCT02795234 -NCT02795442 -NCT02795767 -NCT02796209 -NCT02796261 -NCT02796391 -NCT02796443 -NCT02796846 -NCT02797119 -NCT02797158 -NCT02797171 -NCT02797275 -NCT02797314 -NCT02797366 -NCT02797574 -NCT02797587 -NCT02797600 -NCT02797639 -NCT02797665 -NCT02797678 -NCT02797704 -NCT02797834 -NCT02797977 -NCT02798172 -NCT02798536 -NCT02798653 -NCT02798666 -NCT02798744 -NCT02798965 -NCT02798978 -NCT02799030 -NCT02799277 -NCT02799472 -NCT02799589 -NCT02799615 -NCT02799693 -NCT02799823 -NCT02799836 -NCT02799953 -NCT02800135 -NCT02800174 -NCT02800460 -NCT02800486 -NCT02800525 -NCT02800629 -NCT02800759 -NCT02800785 -NCT02801032 -NCT02801383 -NCT02801565 -NCT02801656 -NCT02801955 -NCT02801994 -NCT02802072 -NCT02802319 -NCT02802332 -NCT02802358 -NCT02802384 -NCT02802449 -NCT02802566 -NCT02802657 -NCT02802774 -NCT02802800 -NCT02802865 -NCT02802878 -NCT02803190 -NCT02803320 -NCT02803346 -NCT02803658 -NCT02803697 -NCT02803788 -NCT02803801 -NCT02803892 -NCT02803957 -NCT02804178 -NCT02804230 -NCT02804750 -NCT02804789 -NCT02805296 -NCT02805647 -NCT02805816 -NCT02805920 -NCT02805998 -NCT02806115 -NCT02806167 -NCT02806297 -NCT02806310 -NCT02806414 -NCT02806479 -NCT02806492 -NCT02806609 -NCT02806648 -NCT02806661 -NCT02806882 -NCT02806999 -NCT02807025 -NCT02807077 -NCT02807103 -NCT02807233 -NCT02807246 -NCT02807545 -NCT02807623 -NCT02807649 -NCT02807740 -NCT02807753 -NCT02807844 -NCT02808000 -NCT02808013 -NCT02808247 -NCT02808299 -NCT02808377 -NCT02808494 -NCT02808793 -NCT02808897 -NCT02809040 -NCT02809118 -NCT02809235 -NCT02809352 -NCT02809560 -NCT02809599 -NCT02809651 -NCT02809807 -NCT02809833 -NCT02809859 -NCT02809872 -NCT02809911 -NCT02810015 -NCT02810028 -NCT02810236 -NCT02810288 -NCT02810418 -NCT02810483 -NCT02810847 -NCT02810860 -NCT02810912 -NCT02811120 -NCT02811146 -NCT02811172 -NCT02811367 -NCT02811549 -NCT02811614 -NCT02811809 -NCT02811887 -NCT02811900 -NCT02811926 -NCT02811978 -NCT02812056 -NCT02812069 -NCT02812173 -NCT02812225 -NCT02812316 -NCT02812394 -NCT02812511 -NCT02812615 -NCT02812719 -NCT02812836 -NCT02812914 -NCT02812992 -NCT02813044 -NCT02813057 -NCT02813122 -NCT02813603 -NCT02813616 -NCT02813655 -NCT02813694 -NCT02813746 -NCT02813876 -NCT02813967 -NCT02813993 -NCT02814006 -NCT02814019 -NCT02814032 -NCT02814045 -NCT02814175 -NCT02814201 -NCT02814227 -NCT02814318 -NCT02814396 -NCT02814448 -NCT02814656 -NCT02814695 -NCT02814799 -NCT02814916 -NCT02814929 -NCT02815072 -NCT02815267 -NCT02815280 -NCT02815397 -NCT02815488 -NCT02815566 -NCT02815709 -NCT02815761 -NCT02816099 -NCT02816125 -NCT02816281 -NCT02816294 -NCT02816333 -NCT02816645 -NCT02816658 -NCT02816762 -NCT02817347 -NCT02817464 -NCT02817490 -NCT02817581 -NCT02817633 -NCT02817893 -NCT02817997 -NCT02818660 -NCT02818777 -NCT02818829 -NCT02818946 -NCT02819245 -NCT02819479 -NCT02819856 -NCT02819960 -NCT02820012 -NCT02820077 -NCT02820142 -NCT02820155 -NCT02820415 -NCT02820688 -NCT02820714 -NCT02820740 -NCT02820844 -NCT02820896 -NCT02820974 -NCT02821026 -NCT02821169 -NCT02821234 -NCT02821468 -NCT02821546 -NCT02821637 -NCT02821650 -NCT02821741 -NCT02821832 -NCT02821884 -NCT02821923 -NCT02821988 -NCT02822014 -NCT02822287 -NCT02822378 -NCT02822456 -NCT02822508 -NCT02822794 -NCT02822807 -NCT02822846 -NCT02822924 -NCT02822963 -NCT02823223 -NCT02823626 -NCT02823704 -NCT02823795 -NCT02823899 -NCT02823912 -NCT02824172 -NCT02824523 -NCT02824575 -NCT02824718 -NCT02824926 -NCT02825043 -NCT02825095 -NCT02825108 -NCT02825199 -NCT02825212 -NCT02825238 -NCT02825290 -NCT02825550 -NCT02826005 -NCT02826031 -NCT02826304 -NCT02826343 -NCT02826408 -NCT02826655 -NCT02826720 -NCT02826850 -NCT02827006 -NCT02827019 -NCT02827175 -NCT02827318 -NCT02827630 -NCT02827734 -NCT02827851 -NCT02827955 -NCT02827994 -NCT02828020 -NCT02828085 -NCT02828098 -NCT02828163 -NCT02828241 -NCT02828410 -NCT02828514 -NCT02828527 -NCT02828670 -NCT02828774 -NCT02829047 -NCT02829060 -NCT02829450 -NCT02829619 -NCT02829684 -NCT02829749 -NCT02829853 -NCT02830048 -NCT02830204 -NCT02830321 -NCT02830347 -NCT02830360 -NCT02830399 -NCT02830412 -NCT02830425 -NCT02830477 -NCT02830568 -NCT02830607 -NCT02830984 -NCT02831049 -NCT02831088 -NCT02831179 -NCT02831244 -NCT02831296 -NCT02831374 -NCT02831387 -NCT02831530 -NCT02831569 -NCT02831699 -NCT02831712 -NCT02831855 -NCT02831894 -NCT02831985 -NCT02832011 -NCT02832063 -NCT02832401 -NCT02832414 -NCT02832492 -NCT02832648 -NCT02832713 -NCT02832765 -NCT02832947 -NCT02832960 -NCT02833090 -NCT02833103 -NCT02833168 -NCT02833233 -NCT02833480 -NCT02833493 -NCT02833610 -NCT02833636 -NCT02833662 -NCT02833714 -NCT02833870 -NCT02833896 -NCT02833909 -NCT02833974 -NCT02834013 -NCT02834052 -NCT02834286 -NCT02834429 -NCT02834455 -NCT02835157 -NCT02835443 -NCT02835521 -NCT02835599 -NCT02835807 -NCT02835820 -NCT02836405 -NCT02836496 -NCT02836509 -NCT02836665 -NCT02836717 -NCT02836743 -NCT02836860 -NCT02836899 -NCT02837146 -NCT02837172 -NCT02837237 -NCT02837367 -NCT02837523 -NCT02837783 -NCT02837900 -NCT02837926 -NCT02837965 -NCT02838095 -NCT02838277 -NCT02838368 -NCT02838576 -NCT02838628 -NCT02838641 -NCT02838654 -NCT02838680 -NCT02838758 -NCT02838849 -NCT02839031 -NCT02839096 -NCT02839109 -NCT02839356 -NCT02839434 -NCT02839564 -NCT02839577 -NCT02839694 -NCT02839759 -NCT02839785 -NCT02840201 -NCT02840214 -NCT02840266 -NCT02840292 -NCT02840461 -NCT02840487 -NCT02840929 -NCT02840981 -NCT02841137 -NCT02841163 -NCT02841215 -NCT02841254 -NCT02841553 -NCT02841605 -NCT02842008 -NCT02842021 -NCT02842268 -NCT02842346 -NCT02842359 -NCT02842541 -NCT02842736 -NCT02842814 -NCT02842892 -NCT02842905 -NCT02843347 -NCT02843516 -NCT02843529 -NCT02843633 -NCT02844023 -NCT02844101 -NCT02844192 -NCT02844465 -NCT02844478 -NCT02844517 -NCT02844569 -NCT02844751 -NCT02844829 -NCT02844868 -NCT02845024 -NCT02845115 -NCT02845427 -NCT02845466 -NCT02845596 -NCT02845752 -NCT02845843 -NCT02845986 -NCT02846454 -NCT02846766 -NCT02846974 -NCT02847065 -NCT02847078 -NCT02847247 -NCT02847403 -NCT02847637 -NCT02847689 -NCT02847806 -NCT02847832 -NCT02847845 -NCT02847871 -NCT02847897 -NCT02847923 -NCT02847975 -NCT02848027 -NCT02848235 -NCT02848495 -NCT02848573 -NCT02848664 -NCT02848716 -NCT02848755 -NCT02848781 -NCT02848820 -NCT02849093 -NCT02849145 -NCT02849418 -NCT02849444 -NCT02849496 -NCT02849548 -NCT02849678 -NCT02849743 -NCT02849977 -NCT02850042 -NCT02850068 -NCT02850081 -NCT02850497 -NCT02850588 -NCT02850796 -NCT02850848 -NCT02850978 -NCT02851121 -NCT02851251 -NCT02851290 -NCT02851407 -NCT02851537 -NCT02851563 -NCT02851693 -NCT02851797 -NCT02851927 -NCT02851953 -NCT02851966 -NCT02852005 -NCT02852096 -NCT02852109 -NCT02852343 -NCT02852408 -NCT02852460 -NCT02852525 -NCT02852824 -NCT02853123 -NCT02853149 -NCT02853292 -NCT02853357 -NCT02853487 -NCT02853539 -NCT02853578 -NCT02853708 -NCT02853968 -NCT02854033 -NCT02854059 -NCT02854098 -NCT02854176 -NCT02854280 -NCT02854514 -NCT02854592 -NCT02854826 -NCT02854930 -NCT02854956 -NCT02855138 -NCT02855281 -NCT02855437 -NCT02855645 -NCT02855814 -NCT02855840 -NCT02855892 -NCT02856022 -NCT02856113 -NCT02856217 -NCT02856269 -NCT02856373 -NCT02856516 -NCT02856633 -NCT02856789 -NCT02856802 -NCT02856815 -NCT02856919 -NCT02857192 -NCT02857205 -NCT02857283 -NCT02857439 -NCT02857556 -NCT02857582 -NCT02857686 -NCT02857712 -NCT02857842 -NCT02857972 -NCT02858102 -NCT02858297 -NCT02858336 -NCT02858362 -NCT02858414 -NCT02858583 -NCT02858661 -NCT02858687 -NCT02858986 -NCT02859129 -NCT02859142 -NCT02859207 -NCT02859350 -NCT02859389 -NCT02859519 -NCT02859532 -NCT02859584 -NCT02859844 -NCT02860039 -NCT02860052 -NCT02860182 -NCT02860247 -NCT02860377 -NCT02860494 -NCT02860572 -NCT02860663 -NCT02860702 -NCT02860975 -NCT02861014 -NCT02861105 -NCT02861183 -NCT02861274 -NCT02861430 -NCT02861443 -NCT02861456 -NCT02861508 -NCT02861521 -NCT02861885 -NCT02861911 -NCT02861937 -NCT02862067 -NCT02862132 -NCT02862249 -NCT02862340 -NCT02862353 -NCT02862405 -NCT02862470 -NCT02862483 -NCT02862600 -NCT02862808 -NCT02862847 -NCT02862925 -NCT02863120 -NCT02863133 -NCT02863159 -NCT02863211 -NCT02863250 -NCT02863289 -NCT02863406 -NCT02863562 -NCT02863692 -NCT02863770 -NCT02863822 -NCT02863835 -NCT02863848 -NCT02864108 -NCT02864342 -NCT02864420 -NCT02864433 -NCT02865096 -NCT02865161 -NCT02865187 -NCT02865252 -NCT02865304 -NCT02865577 -NCT02865616 -NCT02865902 -NCT02865915 -NCT02866006 -NCT02866045 -NCT02866084 -NCT02866162 -NCT02866240 -NCT02866851 -NCT02866864 -NCT02866877 -NCT02866942 -NCT02866994 -NCT02867072 -NCT02867111 -NCT02867319 -NCT02867358 -NCT02867371 -NCT02867410 -NCT02867592 -NCT02867709 -NCT02867761 -NCT02868034 -NCT02868216 -NCT02868359 -NCT02868411 -NCT02868476 -NCT02868567 -NCT02868580 -NCT02868593 -NCT02868606 -NCT02868632 -NCT02868684 -NCT02868762 -NCT02868827 -NCT02868983 -NCT02869035 -NCT02869074 -NCT02869360 -NCT02869425 -NCT02869490 -NCT02869529 -NCT02869555 -NCT02869620 -NCT02869698 -NCT02869763 -NCT02869945 -NCT02869958 -NCT02869971 -NCT02870023 -NCT02870114 -NCT02870478 -NCT02870673 -NCT02870686 -NCT02870751 -NCT02870985 -NCT02871011 -NCT02871024 -NCT02871076 -NCT02871089 -NCT02871180 -NCT02871427 -NCT02871570 -NCT02871648 -NCT02871661 -NCT02871791 -NCT02871817 -NCT02871908 -NCT02872064 -NCT02872077 -NCT02872090 -NCT02872376 -NCT02872428 -NCT02872467 -NCT02872532 -NCT02872831 -NCT02872948 -NCT02873000 -NCT02873195 -NCT02873273 -NCT02873286 -NCT02873377 -NCT02873559 -NCT02873689 -NCT02873741 -NCT02873793 -NCT02873845 -NCT02874066 -NCT02874287 -NCT02874352 -NCT02874612 -NCT02874846 -NCT02874937 -NCT02875119 -NCT02875678 -NCT02875691 -NCT02875756 -NCT02875782 -NCT02876289 -NCT02876380 -NCT02876393 -NCT02876419 -NCT02876497 -NCT02876575 -NCT02876601 -NCT02876770 -NCT02876874 -NCT02877329 -NCT02877394 -NCT02877537 -NCT02878148 -NCT02878252 -NCT02878265 -NCT02878330 -NCT02878395 -NCT02878694 -NCT02878785 -NCT02878863 -NCT02878915 -NCT02878941 -NCT02879045 -NCT02879071 -NCT02879344 -NCT02879409 -NCT02879461 -NCT02879721 -NCT02879747 -NCT02879773 -NCT02879799 -NCT02879825 -NCT02879903 -NCT02880072 -NCT02880293 -NCT02880332 -NCT02880709 -NCT02880878 -NCT02880904 -NCT02880930 -NCT02880956 -NCT02881073 -NCT02881099 -NCT02881229 -NCT02881255 -NCT02881333 -NCT02881515 -NCT02881554 -NCT02881567 -NCT02881814 -NCT02881996 -NCT02882139 -NCT02882152 -NCT02882165 -NCT02882191 -NCT02882217 -NCT02882269 -NCT02882295 -NCT02882334 -NCT02882438 -NCT02882503 -NCT02882555 -NCT02882698 -NCT02882776 -NCT02882893 -NCT02882945 -NCT02882971 -NCT02883049 -NCT02883738 -NCT02884102 -NCT02884141 -NCT02884154 -NCT02884492 -NCT02884505 -NCT02884570 -NCT02884791 -NCT02884830 -NCT02884882 -NCT02884960 -NCT02885116 -NCT02885207 -NCT02885259 -NCT02885467 -NCT02885636 -NCT02885688 -NCT02885935 -NCT02886052 -NCT02886143 -NCT02886247 -NCT02886273 -NCT02886390 -NCT02886559 -NCT02886741 -NCT02886819 -NCT02886949 -NCT02887092 -NCT02887105 -NCT02887196 -NCT02887365 -NCT02887443 -NCT02887547 -NCT02887703 -NCT02887716 -NCT02887742 -NCT02887846 -NCT02887911 -NCT02888015 -NCT02888106 -NCT02888132 -NCT02888171 -NCT02888223 -NCT02888392 -NCT02888496 -NCT02889068 -NCT02889224 -NCT02889380 -NCT02889471 -NCT02889510 -NCT02889536 -NCT02889627 -NCT02889653 -NCT02889705 -NCT02889796 -NCT02889809 -NCT02889822 -NCT02889913 -NCT02889926 -NCT02890004 -NCT02890017 -NCT02890342 -NCT02890420 -NCT02890485 -NCT02890524 -NCT02890654 -NCT02890862 -NCT02890901 -NCT02890966 -NCT02891161 -NCT02891434 -NCT02891460 -NCT02891538 -NCT02891642 -NCT02891668 -NCT02891863 -NCT02892058 -NCT02892071 -NCT02892188 -NCT02892266 -NCT02892383 -NCT02892396 -NCT02892474 -NCT02892656 -NCT02892760 -NCT02892877 -NCT02892942 -NCT02893124 -NCT02893163 -NCT02893176 -NCT02893241 -NCT02893267 -NCT02893306 -NCT02893358 -NCT02893501 -NCT02893683 -NCT02893709 -NCT02893813 -NCT02893930 -NCT02893969 -NCT02894151 -NCT02894411 -NCT02894567 -NCT02894658 -NCT02894671 -NCT02894723 -NCT02894762 -NCT02894775 -NCT02894866 -NCT02895256 -NCT02895425 -NCT02895594 -NCT02895763 -NCT02895802 -NCT02895919 -NCT02895932 -NCT02895945 -NCT02896192 -NCT02896244 -NCT02896309 -NCT02896361 -NCT02896387 -NCT02896465 -NCT02896530 -NCT02896751 -NCT02896816 -NCT02896946 -NCT02897388 -NCT02897596 -NCT02897622 -NCT02897661 -NCT02897700 -NCT02898064 -NCT02898363 -NCT02898519 -NCT02898766 -NCT02898844 -NCT02898896 -NCT02898922 -NCT02899026 -NCT02899039 -NCT02899091 -NCT02899325 -NCT02899598 -NCT02899611 -NCT02899624 -NCT02899702 -NCT02899923 -NCT02900105 -NCT02900248 -NCT02900352 -NCT02900495 -NCT02900521 -NCT02900755 -NCT02900820 -NCT02900898 -NCT02900911 -NCT02900963 -NCT02901106 -NCT02901288 -NCT02901392 -NCT02901938 -NCT02902185 -NCT02902302 -NCT02902432 -NCT02902510 -NCT02902536 -NCT02902575 -NCT02902588 -NCT02902601 -NCT02902731 -NCT02902809 -NCT02902822 -NCT02903017 -NCT02903160 -NCT02903290 -NCT02903355 -NCT02903446 -NCT02903537 -NCT02903615 -NCT02903680 -NCT02904447 -NCT02904564 -NCT02904629 -NCT02904707 -NCT02904746 -NCT02904759 -NCT02904798 -NCT02904837 -NCT02904863 -NCT02905019 -NCT02905175 -NCT02905305 -NCT02905669 -NCT02905786 -NCT02905877 -NCT02905903 -NCT02905981 -NCT02906046 -NCT02906098 -NCT02906293 -NCT02906540 -NCT02906566 -NCT02906722 -NCT02906904 -NCT02906917 -NCT02907359 -NCT02907411 -NCT02907788 -NCT02907866 -NCT02907918 -NCT02908048 -NCT02908217 -NCT02908256 -NCT02908269 -NCT02908451 -NCT02908607 -NCT02908685 -NCT02908698 -NCT02908958 -NCT02908971 -NCT02909036 -NCT02909127 -NCT02909257 -NCT02909465 -NCT02909569 -NCT02909647 -NCT02909842 -NCT02909855 -NCT02909907 -NCT02909985 -NCT02910037 -NCT02910180 -NCT02910271 -NCT02910323 -NCT02910336 -NCT02910349 -NCT02910388 -NCT02910596 -NCT02910791 -NCT02910869 -NCT02911025 -NCT02911103 -NCT02911129 -NCT02911233 -NCT02911610 -NCT02911662 -NCT02911688 -NCT02911740 -NCT02911831 -NCT02911844 -NCT02911948 -NCT02912013 -NCT02912065 -NCT02912143 -NCT02912195 -NCT02912403 -NCT02912559 -NCT02912611 -NCT02912624 -NCT02912754 -NCT02912832 -NCT02912845 -NCT02912923 -NCT02912936 -NCT02912988 -NCT02913521 -NCT02913664 -NCT02913742 -NCT02913794 -NCT02914106 -NCT02914132 -NCT02914145 -NCT02914353 -NCT02914496 -NCT02914704 -NCT02914782 -NCT02914808 -NCT02914821 -NCT02914886 -NCT02914925 -NCT02914964 -NCT02915016 -NCT02915120 -NCT02915172 -NCT02915263 -NCT02915393 -NCT02915432 -NCT02915562 -NCT02915835 -NCT02915848 -NCT02915965 -NCT02916134 -NCT02916212 -NCT02916342 -NCT02916433 -NCT02916550 -NCT02916602 -NCT02916680 -NCT02916914 -NCT02917135 -NCT02917291 -NCT02917356 -NCT02917408 -NCT02917460 -NCT02917525 -NCT02917551 -NCT02917863 -NCT02917928 -NCT02917954 -NCT02917980 -NCT02918045 -NCT02918071 -NCT02918162 -NCT02918188 -NCT02918201 -NCT02918214 -NCT02918422 -NCT02918474 -NCT02918656 -NCT02918682 -NCT02918773 -NCT02918786 -NCT02919033 -NCT02919215 -NCT02919293 -NCT02919345 -NCT02919436 -NCT02919618 -NCT02919800 -NCT02920177 -NCT02920229 -NCT02920268 -NCT02920307 -NCT02920385 -NCT02920515 -NCT02920645 -NCT02920658 -NCT02921204 -NCT02921490 -NCT02921542 -NCT02921893 -NCT02921945 -NCT02921958 -NCT02921997 -NCT02922049 -NCT02922127 -NCT02922179 -NCT02922257 -NCT02922322 -NCT02922348 -NCT02922478 -NCT02922647 -NCT02922738 -NCT02922855 -NCT02922998 -NCT02923011 -NCT02923232 -NCT02923297 -NCT02923310 -NCT02923323 -NCT02923609 -NCT02923700 -NCT02923830 -NCT02923895 -NCT02924025 -NCT02924116 -NCT02924363 -NCT02924402 -NCT02924441 -NCT02924623 -NCT02924818 -NCT02925026 -NCT02925260 -NCT02925390 -NCT02925455 -NCT02925507 -NCT02925533 -NCT02925650 -NCT02925819 -NCT02925884 -NCT02926014 -NCT02926079 -NCT02926131 -NCT02926196 -NCT02926261 -NCT02926534 -NCT02926625 -NCT02926703 -NCT02926716 -NCT02926729 -NCT02926872 -NCT02926911 -NCT02926963 -NCT02927093 -NCT02927145 -NCT02927366 -NCT02927431 -NCT02927691 -NCT02927743 -NCT02927977 -NCT02928055 -NCT02928107 -NCT02928146 -NCT02928172 -NCT02928341 -NCT02928367 -NCT02928406 -NCT02928731 -NCT02929160 -NCT02929225 -NCT02929316 -NCT02929355 -NCT02929420 -NCT02929524 -NCT02929589 -NCT02929758 -NCT02929875 -NCT02929966 -NCT02930044 -NCT02930122 -NCT02930213 -NCT02930278 -NCT02930291 -NCT02930304 -NCT02930317 -NCT02930460 -NCT02930512 -NCT02930538 -NCT02930889 -NCT02930915 -NCT02930928 -NCT02930941 -NCT02931032 -NCT02931097 -NCT02931188 -NCT02931292 -NCT02931318 -NCT02931331 -NCT02931448 -NCT02931461 -NCT02931591 -NCT02931695 -NCT02931721 -NCT02931760 -NCT02932033 -NCT02932046 -NCT02932137 -NCT02932189 -NCT02932267 -NCT02932475 -NCT02932501 -NCT02932527 -NCT02932540 -NCT02932618 -NCT02932761 -NCT02932826 -NCT02932865 -NCT02932904 -NCT02932982 -NCT02933060 -NCT02933190 -NCT02933216 -NCT02933411 -NCT02933476 -NCT02933580 -NCT02933892 -NCT02933957 -NCT02934152 -NCT02934399 -NCT02934451 -NCT02934490 -NCT02934620 -NCT02934854 -NCT02934932 -NCT02934945 -NCT02935036 -NCT02935374 -NCT02935452 -NCT02935491 -NCT02935699 -NCT02935868 -NCT02935881 -NCT02935946 -NCT02935985 -NCT02936024 -NCT02936167 -NCT02936206 -NCT02936375 -NCT02936492 -NCT02936531 -NCT02936596 -NCT02936739 -NCT02936765 -NCT02936817 -NCT02936986 -NCT02937155 -NCT02937233 -NCT02937311 -NCT02937428 -NCT02937493 -NCT02937727 -NCT02937740 -NCT02938000 -NCT02938182 -NCT02938585 -NCT02938689 -NCT02938767 -NCT02938988 -NCT02939079 -NCT02939118 -NCT02939326 -NCT02939404 -NCT02939443 -NCT02939573 -NCT02939586 -NCT02939664 -NCT02939755 -NCT02940119 -NCT02940496 -NCT02940613 -NCT02940704 -NCT02940782 -NCT02940860 -NCT02941185 -NCT02941211 -NCT02941263 -NCT02941328 -NCT02941471 -NCT02941497 -NCT02941627 -NCT02941640 -NCT02941718 -NCT02941770 -NCT02941783 -NCT02941887 -NCT02941965 -NCT02942043 -NCT02942251 -NCT02942264 -NCT02942277 -NCT02942433 -NCT02942498 -NCT02942628 -NCT02942641 -NCT02942797 -NCT02943070 -NCT02943083 -NCT02943109 -NCT02943252 -NCT02943278 -NCT02943304 -NCT02943447 -NCT02943486 -NCT02943655 -NCT02943746 -NCT02943837 -NCT02943850 -NCT02944032 -NCT02944188 -NCT02944435 -NCT02944513 -NCT02944539 -NCT02944643 -NCT02944747 -NCT02944799 -NCT02944825 -NCT02945085 -NCT02945098 -NCT02945189 -NCT02945371 -NCT02945579 -NCT02945605 -NCT02945761 -NCT02945826 -NCT02945891 -NCT02945969 -NCT02945995 -NCT02946528 -NCT02946606 -NCT02946710 -NCT02946775 -NCT02946840 -NCT02946866 -NCT02946918 -NCT02947022 -NCT02947035 -NCT02947048 -NCT02947243 -NCT02947256 -NCT02947360 -NCT02947841 -NCT02947945 -NCT02947958 -NCT02948023 -NCT02948062 -NCT02948088 -NCT02948166 -NCT02948179 -NCT02948218 -NCT02948244 -NCT02948283 -NCT02948491 -NCT02948738 -NCT02948842 -NCT02948907 -NCT02949128 -NCT02949336 -NCT02949622 -NCT02950051 -NCT02950077 -NCT02950090 -NCT02950129 -NCT02950155 -NCT02950402 -NCT02950428 -NCT02950480 -NCT02950545 -NCT02950662 -NCT02950727 -NCT02950753 -NCT02951195 -NCT02951234 -NCT02951481 -NCT02951585 -NCT02951702 -NCT02951715 -NCT02951832 -NCT02952209 -NCT02952456 -NCT02952612 -NCT02952677 -NCT02952781 -NCT02952820 -NCT02952885 -NCT02952924 -NCT02953158 -NCT02953223 -NCT02953249 -NCT02953431 -NCT02953704 -NCT02953834 -NCT02953860 -NCT02953912 -NCT02954107 -NCT02954289 -NCT02954354 -NCT02954432 -NCT02954471 -NCT02954510 -NCT02954575 -NCT02954601 -NCT02954640 -NCT02954666 -NCT02954705 -NCT02954718 -NCT02954757 -NCT02954809 -NCT02954874 -NCT02955147 -NCT02955199 -NCT02955225 -NCT02955290 -NCT02955329 -NCT02955368 -NCT02955381 -NCT02955537 -NCT02955680 -NCT02955797 -NCT02955901 -NCT02955927 -NCT02956213 -NCT02956512 -NCT02956525 -NCT02956668 -NCT02956720 -NCT02956772 -NCT02956915 -NCT02956980 -NCT02957136 -NCT02957227 -NCT02957474 -NCT02957513 -NCT02957708 -NCT02957747 -NCT02957968 -NCT02958059 -NCT02958150 -NCT02958267 -NCT02958319 -NCT02958345 -NCT02958436 -NCT02958579 -NCT02958605 -NCT02958813 -NCT02958826 -NCT02958878 -NCT02958930 -NCT02959047 -NCT02959125 -NCT02959177 -NCT02959294 -NCT02959320 -NCT02959359 -NCT02959450 -NCT02959502 -NCT02959671 -NCT02959788 -NCT02959853 -NCT02959918 -NCT02959931 -NCT02959957 -NCT02959983 -NCT02960048 -NCT02960178 -NCT02960191 -NCT02960230 -NCT02960243 -NCT02960295 -NCT02960399 -NCT02960477 -NCT02960503 -NCT02960672 -NCT02960828 -NCT02960984 -NCT02960997 -NCT02961114 -NCT02961127 -NCT02961218 -NCT02961335 -NCT02961426 -NCT02961647 -NCT02961790 -NCT02961907 -NCT02961959 -NCT02962154 -NCT02962180 -NCT02962427 -NCT02962557 -NCT02962895 -NCT02962908 -NCT02963129 -NCT02963337 -NCT02963428 -NCT02963454 -NCT02963584 -NCT02963597 -NCT02963662 -NCT02963974 -NCT02964130 -NCT02964169 -NCT02964195 -NCT02964273 -NCT02964364 -NCT02964377 -NCT02964494 -NCT02964702 -NCT02964754 -NCT02964858 -NCT02964871 -NCT02964884 -NCT02964910 -NCT02965027 -NCT02965248 -NCT02965352 -NCT02965365 -NCT02965495 -NCT02965534 -NCT02965573 -NCT02966041 -NCT02966249 -NCT02966366 -NCT02966431 -NCT02966561 -NCT02966587 -NCT02966756 -NCT02967029 -NCT02967042 -NCT02967250 -NCT02967445 -NCT02967536 -NCT02967770 -NCT02967822 -NCT02967926 -NCT02968004 -NCT02968043 -NCT02968147 -NCT02968160 -NCT02968329 -NCT02968355 -NCT02968394 -NCT02968511 -NCT02968615 -NCT02968641 -NCT02968758 -NCT02968849 -NCT02968966 -NCT02969590 -NCT02969772 -NCT02970097 -NCT02970266 -NCT02970396 -NCT02970695 -NCT02970877 -NCT02970890 -NCT02971059 -NCT02971124 -NCT02971163 -NCT02971189 -NCT02971254 -NCT02971293 -NCT02971306 -NCT02971436 -NCT02971475 -NCT02971657 -NCT02971683 -NCT02971878 -NCT02972047 -NCT02972073 -NCT02972138 -NCT02972229 -NCT02972242 -NCT02972268 -NCT02972346 -NCT02972580 -NCT02972671 -NCT02972749 -NCT02972801 -NCT02973009 -NCT02973061 -NCT02973087 -NCT02973139 -NCT02973191 -NCT02973230 -NCT02973282 -NCT02973438 -NCT02973503 -NCT02973555 -NCT02973737 -NCT02973776 -NCT02973841 -NCT02973971 -NCT02973997 -NCT02974218 -NCT02974335 -NCT02974426 -NCT02974595 -NCT02974751 -NCT02974764 -NCT02974790 -NCT02974907 -NCT02975141 -NCT02975284 -NCT02975297 -NCT02975401 -NCT02975505 -NCT02975570 -NCT02975661 -NCT02975804 -NCT02975843 -NCT02975921 -NCT02976064 -NCT02976142 -NCT02976181 -NCT02976246 -NCT02976259 -NCT02976493 -NCT02976675 -NCT02976818 -NCT02976870 -NCT02976922 -NCT02977013 -NCT02977065 -NCT02977091 -NCT02977169 -NCT02977182 -NCT02977403 -NCT02977468 -NCT02977507 -NCT02977572 -NCT02977637 -NCT02977832 -NCT02977858 -NCT02977897 -NCT02978105 -NCT02978144 -NCT02978170 -NCT02978209 -NCT02978508 -NCT02978625 -NCT02978742 -NCT02978781 -NCT02978794 -NCT02978820 -NCT02979093 -NCT02979119 -NCT02979288 -NCT02979431 -NCT02979509 -NCT02979730 -NCT02980211 -NCT02980263 -NCT02980302 -NCT02980406 -NCT02980445 -NCT02980523 -NCT02980640 -NCT02980666 -NCT02980731 -NCT02980770 -NCT02980783 -NCT02980926 -NCT02980965 -NCT02981056 -NCT02981069 -NCT02981121 -NCT02981147 -NCT02981199 -NCT02981303 -NCT02981433 -NCT02981459 -NCT02981875 -NCT02982096 -NCT02982148 -NCT02982161 -NCT02982213 -NCT02982304 -NCT02982382 -NCT02982473 -NCT02982512 -NCT02982811 -NCT02983032 -NCT02983253 -NCT02983305 -NCT02983760 -NCT02984254 -NCT02984384 -NCT02984501 -NCT02984540 -NCT02984618 -NCT02984631 -NCT02984930 -NCT02984943 -NCT02984969 -NCT02985008 -NCT02985151 -NCT02985268 -NCT02985385 -NCT02985424 -NCT02985528 -NCT02985541 -NCT02985723 -NCT02985840 -NCT02986334 -NCT02986347 -NCT02986373 -NCT02986646 -NCT02986685 -NCT02986828 -NCT02986854 -NCT02986932 -NCT02987257 -NCT02987478 -NCT02987738 -NCT02987751 -NCT02987764 -NCT02987790 -NCT02987985 -NCT02988063 -NCT02988518 -NCT02988596 -NCT02988869 -NCT02988934 -NCT02988999 -NCT02989012 -NCT02989090 -NCT02989142 -NCT02989259 -NCT02989337 -NCT02989376 -NCT02989428 -NCT02989480 -NCT02989493 -NCT02989519 -NCT02989701 -NCT02990130 -NCT02990494 -NCT02990585 -NCT02990676 -NCT02990936 -NCT02991339 -NCT02991352 -NCT02991456 -NCT02991482 -NCT02991547 -NCT02991560 -NCT02991612 -NCT02991638 -NCT02991833 -NCT02992015 -NCT02992067 -NCT02992132 -NCT02992145 -NCT02992236 -NCT02992262 -NCT02992301 -NCT02992327 -NCT02992379 -NCT02992665 -NCT02992678 -NCT02992808 -NCT02992821 -NCT02992925 -NCT02992951 -NCT02993042 -NCT02993159 -NCT02993198 -NCT02993211 -NCT02993250 -NCT02993562 -NCT02993731 -NCT02993744 -NCT02993783 -NCT02993796 -NCT02993822 -NCT02994030 -NCT02994186 -NCT02994342 -NCT02994420 -NCT02994446 -NCT02994459 -NCT02994472 -NCT02994485 -NCT02994511 -NCT02994602 -NCT02994706 -NCT02994797 -NCT02994823 -NCT02994849 -NCT02994927 -NCT02995304 -NCT02995330 -NCT02995356 -NCT02995525 -NCT02995538 -NCT02995668 -NCT02995733 -NCT02995798 -NCT02995915 -NCT02996266 -NCT02996461 -NCT02996487 -NCT02996552 -NCT02996565 -NCT02996877 -NCT02996955 -NCT02997150 -NCT02997254 -NCT02997527 -NCT02997787 -NCT02997839 -NCT02997943 -NCT02997969 -NCT02997982 -NCT02998151 -NCT02998359 -NCT02998450 -NCT02998619 -NCT02998658 -NCT02998671 -NCT02998788 -NCT02998996 -NCT02999048 -NCT02999165 -NCT02999295 -NCT02999308 -NCT02999386 -NCT02999412 -NCT02999451 -NCT02999594 -NCT02999646 -NCT02999698 -NCT02999711 -NCT02999958 -NCT02999997 -NCT03000049 -NCT03000127 -NCT03000231 -NCT03000517 -NCT03000660 -NCT03000712 -NCT03000790 -NCT03000933 -NCT03001050 -NCT03001167 -NCT03001323 -NCT03001362 -NCT03001401 -NCT03001453 -NCT03001466 -NCT03001583 -NCT03001739 -NCT03001791 -NCT03001843 -NCT03002012 -NCT03002051 -NCT03002298 -NCT03002324 -NCT03002623 -NCT03002818 -NCT03002922 -NCT03002974 -NCT03003208 -NCT03003234 -NCT03003273 -NCT03003507 -NCT03003533 -NCT03003572 -NCT03003663 -NCT03004118 -NCT03004573 -NCT03004586 -NCT03004599 -NCT03004677 -NCT03004768 -NCT03004924 -NCT03004976 -NCT03005093 -NCT03005145 -NCT03005275 -NCT03005379 -NCT03005444 -NCT03005522 -NCT03005561 -NCT03005587 -NCT03005600 -NCT03005717 -NCT03005834 -NCT03005912 -NCT03006224 -NCT03006263 -NCT03006276 -NCT03006354 -NCT03006445 -NCT03006679 -NCT03006718 -NCT03006796 -NCT03006978 -NCT03007004 -NCT03007095 -NCT03007147 -NCT03007173 -NCT03007251 -NCT03007277 -NCT03007316 -NCT03007381 -NCT03007420 -NCT03007433 -NCT03007550 -NCT03007563 -NCT03007589 -NCT03007732 -NCT03007797 -NCT03007849 -NCT03008005 -NCT03008044 -NCT03008161 -NCT03008252 -NCT03008291 -NCT03008369 -NCT03008447 -NCT03008551 -NCT03008655 -NCT03008668 -NCT03008707 -NCT03008733 -NCT03008824 -NCT03009019 -NCT03009331 -NCT03009565 -NCT03009591 -NCT03009643 -NCT03009760 -NCT03010059 -NCT03010358 -NCT03010449 -NCT03010540 -NCT03010553 -NCT03010631 -NCT03010709 -NCT03010735 -NCT03011294 -NCT03011307 -NCT03011463 -NCT03011476 -NCT03011489 -NCT03011736 -NCT03011775 -NCT03011840 -NCT03012178 -NCT03012256 -NCT03012334 -NCT03012529 -NCT03012555 -NCT03012594 -NCT03012776 -NCT03012841 -NCT03012932 -NCT03013010 -NCT03013166 -NCT03013179 -NCT03013348 -NCT03013608 -NCT03013686 -NCT03013985 -NCT03014024 -NCT03014037 -NCT03014076 -NCT03014154 -NCT03014258 -NCT03014687 -NCT03014726 -NCT03014804 -NCT03014843 -NCT03014921 -NCT03014986 -NCT03015220 -NCT03015233 -NCT03015311 -NCT03015363 -NCT03015415 -NCT03015493 -NCT03015532 -NCT03015701 -NCT03015753 -NCT03015779 -NCT03015948 -NCT03015987 -NCT03016000 -NCT03016026 -NCT03016195 -NCT03016286 -NCT03016299 -NCT03016312 -NCT03016377 -NCT03016715 -NCT03016910 -NCT03016949 -NCT03017248 -NCT03017274 -NCT03017339 -NCT03017391 -NCT03017443 -NCT03017482 -NCT03017612 -NCT03017716 -NCT03017768 -NCT03018132 -NCT03018288 -NCT03018431 -NCT03018613 -NCT03018652 -NCT03018808 -NCT03018821 -NCT03018912 -NCT03019029 -NCT03019055 -NCT03019172 -NCT03019237 -NCT03019328 -NCT03019380 -NCT03019393 -NCT03019510 -NCT03019536 -NCT03019575 -NCT03019679 -NCT03019757 -NCT03019991 -NCT03020004 -NCT03020147 -NCT03020160 -NCT03020212 -NCT03020238 -NCT03020303 -NCT03020498 -NCT03020511 -NCT03020550 -NCT03020797 -NCT03020862 -NCT03020888 -NCT03020966 -NCT03021122 -NCT03021395 -NCT03021408 -NCT03021603 -NCT03021629 -NCT03021681 -NCT03021785 -NCT03021889 -NCT03022110 -NCT03022162 -NCT03022500 -NCT03022513 -NCT03022552 -NCT03022578 -NCT03022656 -NCT03022786 -NCT03022864 -NCT03022968 -NCT03022994 -NCT03023046 -NCT03023098 -NCT03023111 -NCT03023137 -NCT03023189 -NCT03023397 -NCT03023462 -NCT03023592 -NCT03023683 -NCT03023774 -NCT03024151 -NCT03024190 -NCT03024242 -NCT03024333 -NCT03024359 -NCT03024658 -NCT03024749 -NCT03025152 -NCT03025269 -NCT03025464 -NCT03025516 -NCT03025529 -NCT03025646 -NCT03025672 -NCT03025750 -NCT03025776 -NCT03025841 -NCT03025906 -NCT03025932 -NCT03025971 -NCT03025984 -NCT03026088 -NCT03026101 -NCT03026439 -NCT03026478 -NCT03026491 -NCT03026504 -NCT03026556 -NCT03026686 -NCT03026712 -NCT03026933 -NCT03026972 -NCT03027037 -NCT03027076 -NCT03027089 -NCT03027115 -NCT03027154 -NCT03027258 -NCT03027310 -NCT03027349 -NCT03027401 -NCT03027427 -NCT03027492 -NCT03027609 -NCT03027648 -NCT03027752 -NCT03027973 -NCT03028077 -NCT03028142 -NCT03028181 -NCT03028272 -NCT03028285 -NCT03028298 -NCT03028467 -NCT03028493 -NCT03028506 -NCT03028623 -NCT03028701 -NCT03028753 -NCT03028779 -NCT03028818 -NCT03028883 -NCT03028974 -NCT03029039 -NCT03029156 -NCT03029299 -NCT03029429 -NCT03029468 -NCT03029806 -NCT03029832 -NCT03029897 -NCT03029949 -NCT03030248 -NCT03030274 -NCT03030365 -NCT03030573 -NCT03030586 -NCT03030664 -NCT03030794 -NCT03031093 -NCT03031132 -NCT03031145 -NCT03031158 -NCT03031236 -NCT03031301 -NCT03031418 -NCT03031535 -NCT03031639 -NCT03031730 -NCT03031873 -NCT03031977 -NCT03032003 -NCT03032029 -NCT03032055 -NCT03032107 -NCT03032172 -NCT03032211 -NCT03032224 -NCT03032315 -NCT03032380 -NCT03032510 -NCT03032536 -NCT03032848 -NCT03033082 -NCT03033121 -NCT03033160 -NCT03033381 -NCT03033485 -NCT03033758 -NCT03033771 -NCT03033914 -NCT03033940 -NCT03034044 -NCT03034148 -NCT03034330 -NCT03034525 -NCT03034564 -NCT03034733 -NCT03034850 -NCT03034915 -NCT03034941 -NCT03034967 -NCT03035201 -NCT03035292 -NCT03035357 -NCT03035396 -NCT03035487 -NCT03035656 -NCT03035708 -NCT03035760 -NCT03035929 -NCT03035955 -NCT03036020 -NCT03036033 -NCT03036254 -NCT03036267 -NCT03036475 -NCT03036553 -NCT03036761 -NCT03036995 -NCT03037021 -NCT03037073 -NCT03037112 -NCT03037190 -NCT03037359 -NCT03037385 -NCT03037554 -NCT03037762 -NCT03037944 -NCT03038191 -NCT03038204 -NCT03038282 -NCT03038386 -NCT03038425 -NCT03038529 -NCT03038581 -NCT03038620 -NCT03038633 -NCT03038672 -NCT03038763 -NCT03038828 -NCT03038893 -NCT03038958 -NCT03039205 -NCT03039270 -NCT03039296 -NCT03039439 -NCT03039673 -NCT03039777 -NCT03039855 -NCT03040089 -NCT03040310 -NCT03040375 -NCT03040401 -NCT03040414 -NCT03040531 -NCT03040583 -NCT03040778 -NCT03040882 -NCT03040986 -NCT03041038 -NCT03041051 -NCT03041064 -NCT03041077 -NCT03041142 -NCT03041168 -NCT03041246 -NCT03041402 -NCT03041454 -NCT03041506 -NCT03041519 -NCT03041701 -NCT03041714 -NCT03041766 -NCT03041935 -NCT03042026 -NCT03042065 -NCT03042182 -NCT03042247 -NCT03042624 -NCT03043118 -NCT03043131 -NCT03043170 -NCT03043209 -NCT03043222 -NCT03043326 -NCT03043469 -NCT03043495 -NCT03043521 -NCT03043586 -NCT03043794 -NCT03043885 -NCT03043898 -NCT03044028 -NCT03044223 -NCT03044353 -NCT03044704 -NCT03044782 -NCT03045094 -NCT03045107 -NCT03045172 -NCT03045211 -NCT03045679 -NCT03045705 -NCT03045757 -NCT03046082 -NCT03046394 -NCT03046433 -NCT03046485 -NCT03046563 -NCT03046693 -NCT03046745 -NCT03047096 -NCT03047122 -NCT03047187 -NCT03047239 -NCT03047694 -NCT03047941 -NCT03048032 -NCT03048058 -NCT03048097 -NCT03048175 -NCT03048383 -NCT03048461 -NCT03048656 -NCT03048669 -NCT03048682 -NCT03048708 -NCT03048916 -NCT03048955 -NCT03048994 -NCT03049033 -NCT03049111 -NCT03049202 -NCT03049345 -NCT03049449 -NCT03049475 -NCT03049488 -NCT03049735 -NCT03049800 -NCT03049956 -NCT03049995 -NCT03050034 -NCT03050177 -NCT03050268 -NCT03050476 -NCT03050489 -NCT03050515 -NCT03050528 -NCT03050723 -NCT03050749 -NCT03050762 -NCT03050879 -NCT03050931 -NCT03050957 -NCT03050996 -NCT03051048 -NCT03051178 -NCT03051243 -NCT03051256 -NCT03051334 -NCT03051360 -NCT03051451 -NCT03051555 -NCT03051581 -NCT03051646 -NCT03051737 -NCT03051789 -NCT03051815 -NCT03051880 -NCT03052049 -NCT03052179 -NCT03052231 -NCT03052361 -NCT03052374 -NCT03052400 -NCT03052556 -NCT03052751 -NCT03052920 -NCT03052998 -NCT03053115 -NCT03053154 -NCT03053271 -NCT03053492 -NCT03053804 -NCT03053830 -NCT03054194 -NCT03054259 -NCT03054285 -NCT03054389 -NCT03054454 -NCT03054506 -NCT03054558 -NCT03054597 -NCT03054649 -NCT03054701 -NCT03054753 -NCT03054805 -NCT03054896 -NCT03054961 -NCT03055013 -NCT03055481 -NCT03055598 -NCT03055624 -NCT03055637 -NCT03055650 -NCT03055728 -NCT03055754 -NCT03056027 -NCT03056131 -NCT03056144 -NCT03056352 -NCT03056547 -NCT03056573 -NCT03056924 -NCT03057015 -NCT03057171 -NCT03057340 -NCT03057392 -NCT03057470 -NCT03057496 -NCT03057509 -NCT03057743 -NCT03057821 -NCT03057860 -NCT03057873 -NCT03058094 -NCT03058380 -NCT03058419 -NCT03058549 -NCT03058575 -NCT03058627 -NCT03058640 -NCT03058822 -NCT03058874 -NCT03058900 -NCT03059043 -NCT03059251 -NCT03059329 -NCT03059342 -NCT03059381 -NCT03059420 -NCT03059888 -NCT03059914 -NCT03060057 -NCT03060200 -NCT03060304 -NCT03060421 -NCT03060499 -NCT03060512 -NCT03060863 -NCT03060876 -NCT03061110 -NCT03061201 -NCT03061344 -NCT03061435 -NCT03061669 -NCT03061682 -NCT03061929 -NCT03062072 -NCT03062111 -NCT03062124 -NCT03062137 -NCT03062319 -NCT03062332 -NCT03062462 -NCT03062631 -NCT03062644 -NCT03062683 -NCT03062696 -NCT03063125 -NCT03063151 -NCT03063398 -NCT03063684 -NCT03063723 -NCT03063827 -NCT03064022 -NCT03064035 -NCT03064087 -NCT03064308 -NCT03064464 -NCT03064659 -NCT03064945 -NCT03065166 -NCT03065205 -NCT03065231 -NCT03065270 -NCT03065335 -NCT03065348 -NCT03065374 -NCT03065387 -NCT03065543 -NCT03065556 -NCT03065582 -NCT03065608 -NCT03065647 -NCT03065686 -NCT03065816 -NCT03065855 -NCT03065907 -NCT03065920 -NCT03066050 -NCT03066115 -NCT03066128 -NCT03066167 -NCT03066336 -NCT03066388 -NCT03066414 -NCT03066440 -NCT03066817 -NCT03066882 -NCT03066999 -NCT03067090 -NCT03067181 -NCT03067298 -NCT03067558 -NCT03067623 -NCT03067688 -NCT03067701 -NCT03067831 -NCT03068221 -NCT03068260 -NCT03068468 -NCT03068572 -NCT03068910 -NCT03068949 -NCT03069079 -NCT03069365 -NCT03069534 -NCT03069729 -NCT03069963 -NCT03070067 -NCT03070184 -NCT03070496 -NCT03070769 -NCT03070808 -NCT03070860 -NCT03070899 -NCT03070951 -NCT03071081 -NCT03071185 -NCT03071354 -NCT03071445 -NCT03071471 -NCT03071549 -NCT03071861 -NCT03071965 -NCT03072017 -NCT03072030 -NCT03072160 -NCT03072225 -NCT03072303 -NCT03072368 -NCT03072550 -NCT03072576 -NCT03072602 -NCT03072771 -NCT03072940 -NCT03074045 -NCT03074084 -NCT03074279 -NCT03074292 -NCT03074344 -NCT03074474 -NCT03074500 -NCT03074513 -NCT03074552 -NCT03074669 -NCT03074916 -NCT03074942 -NCT03075163 -NCT03075228 -NCT03075449 -NCT03075605 -NCT03075618 -NCT03075631 -NCT03075852 -NCT03075891 -NCT03076034 -NCT03076099 -NCT03076177 -NCT03076281 -NCT03076307 -NCT03076411 -NCT03076515 -NCT03076541 -NCT03076554 -NCT03076619 -NCT03076632 -NCT03076645 -NCT03076671 -NCT03076697 -NCT03076749 -NCT03076840 -NCT03076853 -NCT03076879 -NCT03077243 -NCT03077308 -NCT03077542 -NCT03077555 -NCT03077633 -NCT03077659 -NCT03077711 -NCT03077776 -NCT03078036 -NCT03078166 -NCT03078335 -NCT03078387 -NCT03078530 -NCT03078595 -NCT03078608 -NCT03078712 -NCT03078816 -NCT03078829 -NCT03078920 -NCT03078972 -NCT03078998 -NCT03079102 -NCT03079115 -NCT03079128 -NCT03079193 -NCT03079232 -NCT03079414 -NCT03079453 -NCT03079466 -NCT03079700 -NCT03079843 -NCT03079960 -NCT03080129 -NCT03080181 -NCT03080337 -NCT03080389 -NCT03080428 -NCT03080454 -NCT03080519 -NCT03080688 -NCT03080714 -NCT03080779 -NCT03080805 -NCT03080831 -NCT03080909 -NCT03080961 -NCT03081104 -NCT03081130 -NCT03081221 -NCT03081338 -NCT03081468 -NCT03081507 -NCT03081533 -NCT03081546 -NCT03081663 -NCT03081793 -NCT03081806 -NCT03081871 -NCT03082066 -NCT03082092 -NCT03082105 -NCT03082157 -NCT03082404 -NCT03082417 -NCT03082508 -NCT03082547 -NCT03082573 -NCT03082586 -NCT03082599 -NCT03082716 -NCT03082781 -NCT03082794 -NCT03082807 -NCT03083197 -NCT03083223 -NCT03083236 -NCT03083262 -NCT03083288 -NCT03083405 -NCT03083522 -NCT03083548 -NCT03083704 -NCT03083834 -NCT03083847 -NCT03083886 -NCT03083899 -NCT03083964 -NCT03084016 -NCT03084055 -NCT03084120 -NCT03084159 -NCT03084211 -NCT03084341 -NCT03084445 -NCT03084497 -NCT03084510 -NCT03084666 -NCT03084705 -NCT03084744 -NCT03085004 -NCT03085121 -NCT03085212 -NCT03085368 -NCT03085407 -NCT03085472 -NCT03085537 -NCT03085784 -NCT03085810 -NCT03086018 -NCT03086044 -NCT03086161 -NCT03086226 -NCT03086278 -NCT03087123 -NCT03087149 -NCT03087357 -NCT03087370 -NCT03087422 -NCT03087448 -NCT03087500 -NCT03087526 -NCT03087552 -NCT03087565 -NCT03087591 -NCT03087643 -NCT03087747 -NCT03087851 -NCT03088007 -NCT03088046 -NCT03088059 -NCT03088098 -NCT03088397 -NCT03088488 -NCT03088501 -NCT03088605 -NCT03088748 -NCT03088774 -NCT03088839 -NCT03088917 -NCT03089060 -NCT03089125 -NCT03089164 -NCT03089190 -NCT03089398 -NCT03089411 -NCT03089424 -NCT03089528 -NCT03089619 -NCT03089723 -NCT03089762 -NCT03089853 -NCT03089892 -NCT03089944 -NCT03090035 -NCT03090295 -NCT03090516 -NCT03091023 -NCT03091049 -NCT03091140 -NCT03091283 -NCT03091296 -NCT03091348 -NCT03091647 -NCT03091660 -NCT03091816 -NCT03092011 -NCT03092167 -NCT03092180 -NCT03092492 -NCT03092518 -NCT03092622 -NCT03092648 -NCT03092661 -NCT03092700 -NCT03092817 -NCT03093194 -NCT03093285 -NCT03093324 -NCT03093363 -NCT03093454 -NCT03093480 -NCT03093675 -NCT03093714 -NCT03093844 -NCT03093909 -NCT03093935 -NCT03093961 -NCT03094143 -NCT03094156 -NCT03094299 -NCT03094325 -NCT03094364 -NCT03094403 -NCT03094416 -NCT03094806 -NCT03094832 -NCT03094949 -NCT03095001 -NCT03095066 -NCT03095118 -NCT03095781 -NCT03095963 -NCT03096444 -NCT03096457 -NCT03096613 -NCT03096652 -NCT03096665 -NCT03096704 -NCT03096782 -NCT03097107 -NCT03097211 -NCT03097224 -NCT03097237 -NCT03097718 -NCT03097809 -NCT03097952 -NCT03097965 -NCT03097991 -NCT03098056 -NCT03098082 -NCT03098147 -NCT03098160 -NCT03098199 -NCT03098355 -NCT03098381 -NCT03098771 -NCT03099070 -NCT03099317 -NCT03099421 -NCT03099564 -NCT03099902 -NCT03099954 -NCT03099993 -NCT03100149 -NCT03100188 -NCT03100266 -NCT03100292 -NCT03100513 -NCT03100604 -NCT03100851 -NCT03100877 -NCT03100916 -NCT03100942 -NCT03101020 -NCT03101033 -NCT03101059 -NCT03101098 -NCT03101241 -NCT03101397 -NCT03101527 -NCT03101670 -NCT03101683 -NCT03101748 -NCT03101800 -NCT03101995 -NCT03102177 -NCT03102203 -NCT03102281 -NCT03102411 -NCT03102489 -NCT03102554 -NCT03102658 -NCT03102684 -NCT03102801 -NCT03102840 -NCT03103087 -NCT03103100 -NCT03103256 -NCT03103347 -NCT03103464 -NCT03103607 -NCT03103776 -NCT03103815 -NCT03103854 -NCT03103906 -NCT03103971 -NCT03104309 -NCT03104465 -NCT03104660 -NCT03104725 -NCT03104881 -NCT03104907 -NCT03104998 -NCT03105050 -NCT03105141 -NCT03105206 -NCT03105297 -NCT03105362 -NCT03105596 -NCT03105700 -NCT03105843 -NCT03105856 -NCT03105947 -NCT03106207 -NCT03106298 -NCT03106389 -NCT03106467 -NCT03106584 -NCT03106701 -NCT03106766 -NCT03106857 -NCT03106883 -NCT03106935 -NCT03107208 -NCT03107234 -NCT03107455 -NCT03107468 -NCT03107533 -NCT03107611 -NCT03107871 -NCT03107884 -NCT03107897 -NCT03108079 -NCT03108131 -NCT03108222 -NCT03108430 -NCT03108443 -NCT03108547 -NCT03108573 -NCT03108612 -NCT03108729 -NCT03108807 -NCT03108846 -NCT03108898 -NCT03108963 -NCT03109106 -NCT03109301 -NCT03109522 -NCT03109756 -NCT03109795 -NCT03109808 -NCT03109834 -NCT03109873 -NCT03109925 -NCT03110263 -NCT03110523 -NCT03110614 -NCT03110679 -NCT03110783 -NCT03110822 -NCT03110887 -NCT03110900 -NCT03110965 -NCT03110978 -NCT03111056 -NCT03111108 -NCT03111199 -NCT03111407 -NCT03111446 -NCT03111563 -NCT03111732 -NCT03111771 -NCT03112200 -NCT03112538 -NCT03112642 -NCT03112850 -NCT03112954 -NCT03113006 -NCT03113110 -NCT03113149 -NCT03113357 -NCT03113448 -NCT03113630 -NCT03113682 -NCT03113942 -NCT03113994 -NCT03114150 -NCT03114215 -NCT03114267 -NCT03114345 -NCT03114501 -NCT03114514 -NCT03114527 -NCT03114657 -NCT03114839 -NCT03114930 -NCT03115125 -NCT03115177 -NCT03115450 -NCT03115463 -NCT03115515 -NCT03115762 -NCT03115814 -NCT03115853 -NCT03115879 -NCT03115944 -NCT03115983 -NCT03116009 -NCT03116256 -NCT03116360 -NCT03116386 -NCT03116568 -NCT03116607 -NCT03116763 -NCT03117010 -NCT03117075 -NCT03117179 -NCT03117283 -NCT03117400 -NCT03117426 -NCT03117543 -NCT03117582 -NCT03117764 -NCT03117829 -NCT03117855 -NCT03117972 -NCT03117998 -NCT03118180 -NCT03118258 -NCT03118271 -NCT03118479 -NCT03118830 -NCT03118882 -NCT03118895 -NCT03118973 -NCT03119051 -NCT03119181 -NCT03119376 -NCT03119571 -NCT03119584 -NCT03119714 -NCT03119961 -NCT03120013 -NCT03120078 -NCT03120585 -NCT03120728 -NCT03120754 -NCT03120884 -NCT03120988 -NCT03121001 -NCT03121170 -NCT03121209 -NCT03121534 -NCT03121547 -NCT03121807 -NCT03121859 -NCT03122145 -NCT03122223 -NCT03122275 -NCT03122496 -NCT03122678 -NCT03122873 -NCT03122951 -NCT03123003 -NCT03123081 -NCT03123185 -NCT03123224 -NCT03123562 -NCT03123601 -NCT03123653 -NCT03123796 -NCT03123822 -NCT03123952 -NCT03124004 -NCT03124017 -NCT03124030 -NCT03124108 -NCT03124160 -NCT03124199 -NCT03124407 -NCT03124524 -NCT03125031 -NCT03125083 -NCT03125525 -NCT03125564 -NCT03125590 -NCT03125616 -NCT03125642 -NCT03125733 -NCT03125759 -NCT03125811 -NCT03125941 -NCT03125967 -NCT03126175 -NCT03126240 -NCT03126383 -NCT03126396 -NCT03126474 -NCT03126604 -NCT03126734 -NCT03126760 -NCT03126955 -NCT03127046 -NCT03127241 -NCT03127267 -NCT03127293 -NCT03127384 -NCT03127410 -NCT03127514 -NCT03127969 -NCT03128190 -NCT03128216 -NCT03128229 -NCT03128359 -NCT03128619 -NCT03128736 -NCT03128762 -NCT03128827 -NCT03128905 -NCT03128944 -NCT03128983 -NCT03128996 -NCT03129204 -NCT03129243 -NCT03129295 -NCT03129321 -NCT03129451 -NCT03129477 -NCT03129737 -NCT03129789 -NCT03129971 -NCT03130049 -NCT03130062 -NCT03130101 -NCT03130179 -NCT03130335 -NCT03130517 -NCT03130543 -NCT03130595 -NCT03130738 -NCT03130790 -NCT03130946 -NCT03130972 -NCT03131219 -NCT03131323 -NCT03131349 -NCT03131362 -NCT03131427 -NCT03131453 -NCT03131609 -NCT03131726 -NCT03131869 -NCT03132142 -NCT03132246 -NCT03132324 -NCT03132558 -NCT03132883 -NCT03132909 -NCT03132961 -NCT03133221 -NCT03133351 -NCT03133533 -NCT03133637 -NCT03133650 -NCT03133663 -NCT03133780 -NCT03133884 -NCT03133897 -NCT03134118 -NCT03134339 -NCT03134352 -NCT03134378 -NCT03134404 -NCT03134586 -NCT03134690 -NCT03134742 -NCT03134755 -NCT03134924 -NCT03134963 -NCT03135015 -NCT03135236 -NCT03135275 -NCT03135496 -NCT03135522 -NCT03135769 -NCT03135808 -NCT03135821 -NCT03135860 -NCT03135912 -NCT03135938 -NCT03135964 -NCT03136003 -NCT03136172 -NCT03136198 -NCT03136341 -NCT03136354 -NCT03136562 -NCT03136991 -NCT03137069 -NCT03137147 -NCT03137173 -NCT03137823 -NCT03138005 -NCT03138239 -NCT03138655 -NCT03139032 -NCT03139058 -NCT03139071 -NCT03139084 -NCT03139201 -NCT03139305 -NCT03139383 -NCT03139487 -NCT03139669 -NCT03139890 -NCT03139916 -NCT03139955 -NCT03140085 -NCT03140111 -NCT03140228 -NCT03140280 -NCT03140358 -NCT03140449 -NCT03140735 -NCT03140761 -NCT03140787 -NCT03140813 -NCT03140865 -NCT03140982 -NCT03141060 -NCT03141086 -NCT03141216 -NCT03141268 -NCT03141320 -NCT03141359 -NCT03141372 -NCT03141697 -NCT03141775 -NCT03141814 -NCT03141853 -NCT03141944 -NCT03142035 -NCT03142152 -NCT03142178 -NCT03142217 -NCT03142295 -NCT03142451 -NCT03142867 -NCT03142984 -NCT03142997 -NCT03143036 -NCT03143062 -NCT03143088 -NCT03143413 -NCT03143465 -NCT03143478 -NCT03143517 -NCT03143569 -NCT03143608 -NCT03143699 -NCT03143868 -NCT03143920 -NCT03144037 -NCT03144063 -NCT03144362 -NCT03144440 -NCT03144791 -NCT03144804 -NCT03144817 -NCT03145051 -NCT03145064 -NCT03145285 -NCT03145467 -NCT03145480 -NCT03145831 -NCT03145883 -NCT03145922 -NCT03145935 -NCT03146000 -NCT03146065 -NCT03146091 -NCT03146156 -NCT03146260 -NCT03146299 -NCT03146312 -NCT03146351 -NCT03146741 -NCT03146884 -NCT03147027 -NCT03147105 -NCT03147118 -NCT03147443 -NCT03147495 -NCT03148002 -NCT03148015 -NCT03148041 -NCT03148158 -NCT03148262 -NCT03148691 -NCT03149042 -NCT03149250 -NCT03149289 -NCT03149302 -NCT03149380 -NCT03149393 -NCT03149692 -NCT03149965 -NCT03150108 -NCT03150212 -NCT03150225 -NCT03150433 -NCT03150446 -NCT03150524 -NCT03150745 -NCT03150927 -NCT03150992 -NCT03151200 -NCT03151356 -NCT03151967 -NCT03152019 -NCT03152136 -NCT03152188 -NCT03152305 -NCT03152383 -NCT03152474 -NCT03152487 -NCT03152578 -NCT03152656 -NCT03152851 -NCT03152877 -NCT03153267 -NCT03153293 -NCT03153371 -NCT03153449 -NCT03153501 -NCT03153514 -NCT03153527 -NCT03153553 -NCT03153670 -NCT03153813 -NCT03153826 -NCT03153852 -NCT03154034 -NCT03154099 -NCT03154164 -NCT03154255 -NCT03154268 -NCT03154307 -NCT03154437 -NCT03154489 -NCT03154515 -NCT03154593 -NCT03154606 -NCT03154619 -NCT03154762 -NCT03154814 -NCT03155217 -NCT03155282 -NCT03155373 -NCT03155529 -NCT03155620 -NCT03155737 -NCT03155750 -NCT03155867 -NCT03155958 -NCT03155984 -NCT03156062 -NCT03156465 -NCT03156517 -NCT03156673 -NCT03156777 -NCT03156829 -NCT03156842 -NCT03156946 -NCT03156959 -NCT03156998 -NCT03157011 -NCT03157050 -NCT03157271 -NCT03157518 -NCT03157544 -NCT03157596 -NCT03157726 -NCT03157739 -NCT03157752 -NCT03157882 -NCT03157986 -NCT03158090 -NCT03158116 -NCT03158207 -NCT03158246 -NCT03158259 -NCT03158441 -NCT03158467 -NCT03158493 -NCT03158571 -NCT03158727 -NCT03158805 -NCT03158818 -NCT03158831 -NCT03158857 -NCT03159091 -NCT03159104 -NCT03159351 -NCT03159377 -NCT03159702 -NCT03159754 -NCT03159767 -NCT03160313 -NCT03160443 -NCT03160469 -NCT03160612 -NCT03160638 -NCT03160716 -NCT03160807 -NCT03160833 -NCT03160898 -NCT03161080 -NCT03161106 -NCT03161314 -NCT03161327 -NCT03161353 -NCT03161470 -NCT03161587 -NCT03161782 -NCT03161834 -NCT03161964 -NCT03162068 -NCT03162094 -NCT03162172 -NCT03162263 -NCT03162328 -NCT03162341 -NCT03162458 -NCT03162536 -NCT03162731 -NCT03163095 -NCT03163134 -NCT03163290 -NCT03163329 -NCT03163342 -NCT03163355 -NCT03163394 -NCT03163719 -NCT03163758 -NCT03163797 -NCT03163849 -NCT03163875 -NCT03163888 -NCT03163901 -NCT03163979 -NCT03164044 -NCT03164070 -NCT03164083 -NCT03164122 -NCT03164291 -NCT03164382 -NCT03164720 -NCT03164928 -NCT03165214 -NCT03165253 -NCT03165266 -NCT03165370 -NCT03165604 -NCT03165812 -NCT03166046 -NCT03166072 -NCT03166202 -NCT03166215 -NCT03166254 -NCT03166280 -NCT03166345 -NCT03166410 -NCT03166449 -NCT03166670 -NCT03166735 -NCT03167008 -NCT03167047 -NCT03167112 -NCT03167151 -NCT03167255 -NCT03167320 -NCT03167463 -NCT03167476 -NCT03167567 -NCT03167593 -NCT03167632 -NCT03167671 -NCT03167710 -NCT03167749 -NCT03167918 -NCT03167970 -NCT03167983 -NCT03168178 -NCT03168321 -NCT03168334 -NCT03168386 -NCT03168529 -NCT03168620 -NCT03168646 -NCT03168854 -NCT03168997 -NCT03169114 -NCT03169257 -NCT03169309 -NCT03169322 -NCT03169361 -NCT03169621 -NCT03169634 -NCT03169699 -NCT03169751 -NCT03169829 -NCT03169855 -NCT03169907 -NCT03170076 -NCT03170388 -NCT03170557 -NCT03170622 -NCT03170687 -NCT03170752 -NCT03170765 -NCT03170804 -NCT03171012 -NCT03171168 -NCT03171272 -NCT03171285 -NCT03171324 -NCT03171467 -NCT03171610 -NCT03171857 -NCT03171870 -NCT03171987 -NCT03172052 -NCT03172117 -NCT03172130 -NCT03172195 -NCT03172208 -NCT03172312 -NCT03172390 -NCT03172507 -NCT03172585 -NCT03172663 -NCT03172767 -NCT03172988 -NCT03173118 -NCT03173144 -NCT03173222 -NCT03173235 -NCT03173378 -NCT03173560 -NCT03173638 -NCT03173690 -NCT03173742 -NCT03173989 -NCT03174028 -NCT03174080 -NCT03174145 -NCT03174171 -NCT03174509 -NCT03174626 -NCT03174743 -NCT03174782 -NCT03174795 -NCT03174834 -NCT03174873 -NCT03174938 -NCT03175055 -NCT03175107 -NCT03175211 -NCT03175367 -NCT03175393 -NCT03175562 -NCT03175731 -NCT03175874 -NCT03176121 -NCT03176199 -NCT03176589 -NCT03176602 -NCT03176732 -NCT03176927 -NCT03176992 -NCT03177122 -NCT03177213 -NCT03177278 -NCT03177434 -NCT03177447 -NCT03177642 -NCT03177902 -NCT03177967 -NCT03178071 -NCT03178136 -NCT03178162 -NCT03178214 -NCT03178682 -NCT03178760 -NCT03178799 -NCT03179072 -NCT03179111 -NCT03179124 -NCT03179150 -NCT03179228 -NCT03179267 -NCT03179280 -NCT03179306 -NCT03179332 -NCT03179735 -NCT03179891 -NCT03180034 -NCT03180138 -NCT03180164 -NCT03180190 -NCT03180203 -NCT03180268 -NCT03180424 -NCT03180463 -NCT03180515 -NCT03180554 -NCT03180671 -NCT03180684 -NCT03180801 -NCT03180892 -NCT03181100 -NCT03181204 -NCT03181230 -NCT03181243 -NCT03181282 -NCT03181464 -NCT03181503 -NCT03181893 -NCT03181932 -NCT03182036 -NCT03182049 -NCT03182127 -NCT03182296 -NCT03182309 -NCT03182439 -NCT03182452 -NCT03182686 -NCT03182699 -NCT03182907 -NCT03182920 -NCT03182933 -NCT03183063 -NCT03183089 -NCT03183141 -NCT03183167 -NCT03183414 -NCT03183479 -NCT03183518 -NCT03183531 -NCT03183687 -NCT03183752 -NCT03183778 -NCT03183986 -NCT03184233 -NCT03184259 -NCT03184324 -NCT03184337 -NCT03184389 -NCT03184415 -NCT03184688 -NCT03184714 -NCT03184727 -NCT03184740 -NCT03184818 -NCT03184948 -NCT03185013 -NCT03185130 -NCT03185208 -NCT03185325 -NCT03185364 -NCT03185390 -NCT03185533 -NCT03185637 -NCT03185702 -NCT03185806 -NCT03185884 -NCT03185897 -NCT03185988 -NCT03186014 -NCT03186079 -NCT03186105 -NCT03186222 -NCT03186248 -NCT03186313 -NCT03186586 -NCT03186664 -NCT03186729 -NCT03186742 -NCT03186976 -NCT03187080 -NCT03187119 -NCT03187132 -NCT03187236 -NCT03187340 -NCT03187561 -NCT03187600 -NCT03187626 -NCT03187652 -NCT03187743 -NCT03187795 -NCT03187847 -NCT03187925 -NCT03188107 -NCT03188276 -NCT03188380 -NCT03188393 -NCT03188406 -NCT03188588 -NCT03188627 -NCT03188666 -NCT03188692 -NCT03188757 -NCT03188900 -NCT03189004 -NCT03189108 -NCT03189160 -NCT03189316 -NCT03189459 -NCT03190148 -NCT03190421 -NCT03190525 -NCT03190551 -NCT03190577 -NCT03190642 -NCT03190759 -NCT03190980 -NCT03191006 -NCT03191097 -NCT03191201 -NCT03191448 -NCT03191552 -NCT03191604 -NCT03191734 -NCT03191799 -NCT03191864 -NCT03191903 -NCT03191942 -NCT03191955 -NCT03192072 -NCT03192098 -NCT03192358 -NCT03192527 -NCT03192540 -NCT03192683 -NCT03192709 -NCT03192722 -NCT03192813 -NCT03192891 -NCT03192969 -NCT03193047 -NCT03193073 -NCT03193541 -NCT03193658 -NCT03193892 -NCT03193918 -NCT03193944 -NCT03193996 -NCT03194568 -NCT03194737 -NCT03194750 -NCT03194802 -NCT03195166 -NCT03195179 -NCT03195218 -NCT03195322 -NCT03195413 -NCT03195517 -NCT03195673 -NCT03195725 -NCT03195751 -NCT03195855 -NCT03195907 -NCT03195959 -NCT03196011 -NCT03196115 -NCT03196180 -NCT03196453 -NCT03196492 -NCT03196661 -NCT03197025 -NCT03197194 -NCT03197259 -NCT03197272 -NCT03197766 -NCT03197831 -NCT03197883 -NCT03197909 -NCT03197922 -NCT03198026 -NCT03198065 -NCT03198104 -NCT03198156 -NCT03198260 -NCT03198351 -NCT03198390 -NCT03198403 -NCT03198598 -NCT03198611 -NCT03198650 -NCT03198676 -NCT03198728 -NCT03198793 -NCT03198897 -NCT03198962 -NCT03199027 -NCT03199053 -NCT03199352 -NCT03199495 -NCT03199716 -NCT03199768 -NCT03199833 -NCT03199898 -NCT03199911 -NCT03200002 -NCT03200093 -NCT03200171 -NCT03200262 -NCT03200496 -NCT03200600 -NCT03200769 -NCT03200834 -NCT03200977 -NCT03200990 -NCT03201042 -NCT03201159 -NCT03201302 -NCT03201367 -NCT03201458 -NCT03201471 -NCT03201588 -NCT03201614 -NCT03201666 -NCT03201679 -NCT03201835 -NCT03202212 -NCT03202251 -NCT03202316 -NCT03202407 -NCT03202537 -NCT03202771 -NCT03202875 -NCT03202966 -NCT03203070 -NCT03203356 -NCT03203382 -NCT03203421 -NCT03203460 -NCT03203564 -NCT03203655 -NCT03203681 -NCT03203694 -NCT03203759 -NCT03203850 -NCT03203863 -NCT03204292 -NCT03204409 -NCT03204500 -NCT03204539 -NCT03204747 -NCT03204760 -NCT03204799 -NCT03205163 -NCT03205202 -NCT03205228 -NCT03205306 -NCT03205579 -NCT03205995 -NCT03206125 -NCT03206281 -NCT03206346 -NCT03206359 -NCT03206489 -NCT03206554 -NCT03206567 -NCT03206658 -NCT03206671 -NCT03206827 -NCT03206905 -NCT03207100 -NCT03207139 -NCT03207230 -NCT03207763 -NCT03207828 -NCT03207997 -NCT03208309 -NCT03208361 -NCT03208582 -NCT03208842 -NCT03208894 -NCT03208933 -NCT03209050 -NCT03209063 -NCT03209089 -NCT03209141 -NCT03209258 -NCT03209375 -NCT03209453 -NCT03209466 -NCT03209583 -NCT03209700 -NCT03209752 -NCT03209895 -NCT03210038 -NCT03210168 -NCT03210207 -NCT03210545 -NCT03210558 -NCT03210714 -NCT03210987 -NCT03211026 -NCT03211091 -NCT03211351 -NCT03211403 -NCT03211416 -NCT03211507 -NCT03211572 -NCT03211585 -NCT03211624 -NCT03211858 -NCT03211897 -NCT03212014 -NCT03212079 -NCT03212248 -NCT03212261 -NCT03212521 -NCT03212547 -NCT03212560 -NCT03212573 -NCT03212872 -NCT03212950 -NCT03213132 -NCT03213262 -NCT03213535 -NCT03213626 -NCT03213678 -NCT03213717 -NCT03213769 -NCT03213834 -NCT03214185 -NCT03214263 -NCT03214393 -NCT03214419 -NCT03214666 -NCT03214692 -NCT03214809 -NCT03214926 -NCT03215056 -NCT03215147 -NCT03215186 -NCT03215407 -NCT03215901 -NCT03215914 -NCT03216031 -NCT03216057 -NCT03216174 -NCT03216239 -NCT03216330 -NCT03216369 -NCT03216395 -NCT03216772 -NCT03216889 -NCT03216941 -NCT03217032 -NCT03217227 -NCT03217409 -NCT03217513 -NCT03217617 -NCT03217656 -NCT03217799 -NCT03217812 -NCT03217851 -NCT03217890 -NCT03217903 -NCT03217968 -NCT03218007 -NCT03218059 -NCT03218384 -NCT03218410 -NCT03218618 -NCT03218696 -NCT03218709 -NCT03218787 -NCT03218826 -NCT03218839 -NCT03218917 -NCT03218982 -NCT03218995 -NCT03219021 -NCT03219359 -NCT03219476 -NCT03219515 -NCT03219684 -NCT03219736 -NCT03220022 -NCT03220113 -NCT03220256 -NCT03220282 -NCT03220321 -NCT03220451 -NCT03220958 -NCT03221088 -NCT03221205 -NCT03221322 -NCT03221335 -NCT03221387 -NCT03221790 -NCT03221803 -NCT03221907 -NCT03221933 -NCT03222011 -NCT03222193 -NCT03222297 -NCT03222323 -NCT03222414 -NCT03222635 -NCT03222648 -NCT03222713 -NCT03222739 -NCT03222817 -NCT03222830 -NCT03222882 -NCT03222895 -NCT03222947 -NCT03223025 -NCT03223116 -NCT03223181 -NCT03223441 -NCT03223454 -NCT03223467 -NCT03223519 -NCT03223558 -NCT03223610 -NCT03223649 -NCT03223688 -NCT03223805 -NCT03223870 -NCT03223935 -NCT03224000 -NCT03224039 -NCT03224104 -NCT03224143 -NCT03224416 -NCT03224598 -NCT03224806 -NCT03224949 -NCT03224988 -NCT03225040 -NCT03225053 -NCT03225131 -NCT03225157 -NCT03225625 -NCT03225885 -NCT03225911 -NCT03226054 -NCT03226145 -NCT03226171 -NCT03226301 -NCT03226444 -NCT03226522 -NCT03226535 -NCT03226691 -NCT03226717 -NCT03226860 -NCT03227120 -NCT03227211 -NCT03227263 -NCT03227497 -NCT03227848 -NCT03227939 -NCT03228056 -NCT03228225 -NCT03228407 -NCT03228459 -NCT03228485 -NCT03228641 -NCT03228680 -NCT03228719 -NCT03228758 -NCT03228862 -NCT03228992 -NCT03229057 -NCT03229174 -NCT03229395 -NCT03229408 -NCT03229421 -NCT03229460 -NCT03229512 -NCT03229603 -NCT03229668 -NCT03229798 -NCT03229850 -NCT03229993 -NCT03230331 -NCT03230396 -NCT03230474 -NCT03230500 -NCT03230513 -NCT03230539 -NCT03230825 -NCT03230994 -NCT03231072 -NCT03231137 -NCT03231163 -NCT03231176 -NCT03231423 -NCT03231644 -NCT03231657 -NCT03231683 -NCT03231865 -NCT03231878 -NCT03232177 -NCT03232515 -NCT03232567 -NCT03232684 -NCT03232710 -NCT03232775 -NCT03232801 -NCT03233009 -NCT03233035 -NCT03233048 -NCT03233126 -NCT03233204 -NCT03233295 -NCT03233321 -NCT03233386 -NCT03233399 -NCT03233854 -NCT03234049 -NCT03234114 -NCT03234218 -NCT03234296 -NCT03234309 -NCT03234361 -NCT03234556 -NCT03234569 -NCT03234621 -NCT03234634 -NCT03234764 -NCT03234855 -NCT03234946 -NCT03235076 -NCT03235141 -NCT03235245 -NCT03235271 -NCT03235349 -NCT03235466 -NCT03235570 -NCT03235596 -NCT03235713 -NCT03235908 -NCT03235947 -NCT03236103 -NCT03236155 -NCT03236181 -NCT03236311 -NCT03236467 -NCT03236571 -NCT03236662 -NCT03236792 -NCT03236831 -NCT03236909 -NCT03236961 -NCT03236974 -NCT03236987 -NCT03237156 -NCT03237182 -NCT03237208 -NCT03237221 -NCT03237299 -NCT03237312 -NCT03237533 -NCT03237611 -NCT03237663 -NCT03237702 -NCT03237715 -NCT03237780 -NCT03237962 -NCT03238014 -NCT03238053 -NCT03238092 -NCT03238105 -NCT03238235 -NCT03238274 -NCT03238339 -NCT03238365 -NCT03238391 -NCT03238443 -NCT03238495 -NCT03238534 -NCT03238638 -NCT03238742 -NCT03238807 -NCT03238989 -NCT03239041 -NCT03239262 -NCT03239535 -NCT03239613 -NCT03239626 -NCT03239652 -NCT03239730 -NCT03239782 -NCT03239925 -NCT03239951 -NCT03240146 -NCT03240224 -NCT03240640 -NCT03240731 -NCT03240900 -NCT03240926 -NCT03241420 -NCT03241680 -NCT03241823 -NCT03241940 -NCT03242226 -NCT03242421 -NCT03242499 -NCT03242525 -NCT03242629 -NCT03242642 -NCT03243097 -NCT03243188 -NCT03243240 -NCT03243305 -NCT03243565 -NCT03243695 -NCT03243721 -NCT03243773 -NCT03243825 -NCT03243955 -NCT03244137 -NCT03244280 -NCT03244345 -NCT03244553 -NCT03244670 -NCT03244696 -NCT03244709 -NCT03244735 -NCT03244969 -NCT03245073 -NCT03245294 -NCT03245385 -NCT03245463 -NCT03245476 -NCT03245554 -NCT03245645 -NCT03245827 -NCT03245944 -NCT03245957 -NCT03246009 -NCT03246230 -NCT03246412 -NCT03246464 -NCT03246542 -NCT03246711 -NCT03246802 -NCT03246841 -NCT03246945 -NCT03246958 -NCT03247231 -NCT03247413 -NCT03247478 -NCT03247686 -NCT03247738 -NCT03247764 -NCT03247829 -NCT03247933 -NCT03247946 -NCT03247998 -NCT03248219 -NCT03248713 -NCT03248765 -NCT03248973 -NCT03249480 -NCT03249766 -NCT03249844 -NCT03250065 -NCT03250091 -NCT03250338 -NCT03250689 -NCT03250702 -NCT03250884 -NCT03250910 -NCT03251066 -NCT03251183 -NCT03251469 -NCT03251495 -NCT03251547 -NCT03251560 -NCT03251586 -NCT03251638 -NCT03251677 -NCT03252028 -NCT03252067 -NCT03252106 -NCT03252353 -NCT03252392 -NCT03252509 -NCT03252548 -NCT03252561 -NCT03252600 -NCT03252899 -NCT03252912 -NCT03252925 -NCT03253172 -NCT03253211 -NCT03253276 -NCT03253367 -NCT03253653 -NCT03253705 -NCT03253744 -NCT03253861 -NCT03253965 -NCT03253991 -NCT03254160 -NCT03254212 -NCT03254407 -NCT03254615 -NCT03254940 -NCT03255018 -NCT03255031 -NCT03255057 -NCT03255161 -NCT03255369 -NCT03255421 -NCT03255460 -NCT03255473 -NCT03255603 -NCT03255642 -NCT03255720 -NCT03255733 -NCT03255915 -NCT03256292 -NCT03256305 -NCT03256383 -NCT03256396 -NCT03256604 -NCT03256708 -NCT03256825 -NCT03256877 -NCT03257111 -NCT03257137 -NCT03257319 -NCT03257410 -NCT03257462 -NCT03257553 -NCT03257566 -NCT03257644 -NCT03257657 -NCT03257696 -NCT03257735 -NCT03257761 -NCT03257800 -NCT03257930 -NCT03258008 -NCT03258229 -NCT03258658 -NCT03258684 -NCT03258710 -NCT03258736 -NCT03258944 -NCT03259022 -NCT03259048 -NCT03259061 -NCT03259087 -NCT03259152 -NCT03259165 -NCT03259178 -NCT03259282 -NCT03259438 -NCT03259607 -NCT03259880 -NCT03260062 -NCT03260088 -NCT03260140 -NCT03260231 -NCT03260673 -NCT03260868 -NCT03260881 -NCT03261245 -NCT03261297 -NCT03261648 -NCT03261713 -NCT03261778 -NCT03262207 -NCT03262246 -NCT03262259 -NCT03262610 -NCT03262623 -NCT03262753 -NCT03262792 -NCT03262805 -NCT03263130 -NCT03263195 -NCT03263273 -NCT03263299 -NCT03263351 -NCT03263403 -NCT03263585 -NCT03263611 -NCT03263715 -NCT03263923 -NCT03264040 -NCT03264131 -NCT03264170 -NCT03264352 -NCT03264482 -NCT03264599 -NCT03264612 -NCT03264781 -NCT03264885 -NCT03264989 -NCT03265080 -NCT03265132 -NCT03265301 -NCT03265392 -NCT03265652 -NCT03265730 -NCT03265860 -NCT03265925 -NCT03266003 -NCT03266068 -NCT03266419 -NCT03266432 -NCT03266471 -NCT03266731 -NCT03266770 -NCT03266913 -NCT03267017 -NCT03267069 -NCT03267082 -NCT03267108 -NCT03267147 -NCT03267251 -NCT03267303 -NCT03267329 -NCT03267381 -NCT03267433 -NCT03267602 -NCT03267628 -NCT03267680 -NCT03267888 -NCT03268200 -NCT03268317 -NCT03268343 -NCT03268603 -NCT03268629 -NCT03268681 -NCT03268785 -NCT03268824 -NCT03269149 -NCT03269201 -NCT03269292 -NCT03269318 -NCT03269435 -NCT03269604 -NCT03269630 -NCT03269812 -NCT03269877 -NCT03269903 -NCT03269981 -NCT03270059 -NCT03270085 -NCT03270137 -NCT03270215 -NCT03270241 -NCT03270384 -NCT03270488 -NCT03270553 -NCT03270657 -NCT03270722 -NCT03270982 -NCT03271021 -NCT03271138 -NCT03271203 -NCT03271294 -NCT03271385 -NCT03271476 -NCT03271489 -NCT03271567 -NCT03271606 -NCT03271671 -NCT03271723 -NCT03271762 -NCT03271814 -NCT03271892 -NCT03271905 -NCT03271918 -NCT03271957 -NCT03271970 -NCT03272087 -NCT03272217 -NCT03272334 -NCT03272373 -NCT03272386 -NCT03272399 -NCT03272503 -NCT03272568 -NCT03272932 -NCT03272997 -NCT03273348 -NCT03273465 -NCT03273621 -NCT03273634 -NCT03273998 -NCT03274063 -NCT03274232 -NCT03274349 -NCT03274388 -NCT03274544 -NCT03274726 -NCT03274830 -NCT03274960 -NCT03274973 -NCT03275090 -NCT03275181 -NCT03275272 -NCT03275519 -NCT03275792 -NCT03275844 -NCT03276195 -NCT03276234 -NCT03276247 -NCT03276507 -NCT03276585 -NCT03276624 -NCT03276650 -NCT03276715 -NCT03276728 -NCT03276845 -NCT03276871 -NCT03276923 -NCT03276962 -NCT03276975 -NCT03277066 -NCT03277170 -NCT03277261 -NCT03277287 -NCT03277690 -NCT03277859 -NCT03277963 -NCT03278158 -NCT03278210 -NCT03278561 -NCT03278574 -NCT03278652 -NCT03278808 -NCT03279120 -NCT03279367 -NCT03279432 -NCT03279588 -NCT03279770 -NCT03279939 -NCT03279952 -NCT03279991 -NCT03280056 -NCT03280121 -NCT03280147 -NCT03280355 -NCT03280368 -NCT03280381 -NCT03280420 -NCT03280433 -NCT03280446 -NCT03280511 -NCT03280693 -NCT03280784 -NCT03280849 -NCT03280862 -NCT03281018 -NCT03281031 -NCT03281070 -NCT03281109 -NCT03281122 -NCT03281187 -NCT03281421 -NCT03281551 -NCT03281837 -NCT03281902 -NCT03281915 -NCT03281954 -NCT03282006 -NCT03282058 -NCT03282084 -NCT03282149 -NCT03282474 -NCT03282487 -NCT03282682 -NCT03283007 -NCT03283059 -NCT03283176 -NCT03283306 -NCT03283319 -NCT03283371 -NCT03283813 -NCT03283852 -NCT03284489 -NCT03284554 -NCT03284658 -NCT03284710 -NCT03284775 -NCT03284866 -NCT03285620 -NCT03285724 -NCT03285919 -NCT03285945 -NCT03286088 -NCT03286153 -NCT03286166 -NCT03286517 -NCT03286634 -NCT03286842 -NCT03286855 -NCT03287024 -NCT03287141 -NCT03287193 -NCT03287206 -NCT03287557 -NCT03287635 -NCT03287648 -NCT03287778 -NCT03287791 -NCT03287817 -NCT03287921 -NCT03287999 -NCT03288012 -NCT03288103 -NCT03288116 -NCT03288259 -NCT03288337 -NCT03288454 -NCT03288545 -NCT03288636 -NCT03288714 -NCT03288831 -NCT03288922 -NCT03289039 -NCT03289117 -NCT03289195 -NCT03289221 -NCT03289351 -NCT03289390 -NCT03289416 -NCT03289585 -NCT03289702 -NCT03289832 -NCT03290027 -NCT03290066 -NCT03290183 -NCT03290209 -NCT03290235 -NCT03290313 -NCT03290456 -NCT03290586 -NCT03290703 -NCT03290755 -NCT03290807 -NCT03291015 -NCT03291028 -NCT03291210 -NCT03291327 -NCT03291522 -NCT03291535 -NCT03291600 -NCT03291652 -NCT03291678 -NCT03291912 -NCT03291925 -NCT03291938 -NCT03291964 -NCT03291977 -NCT03292055 -NCT03292146 -NCT03292211 -NCT03292237 -NCT03292302 -NCT03292497 -NCT03292588 -NCT03292640 -NCT03292835 -NCT03292978 -NCT03293108 -NCT03293173 -NCT03293186 -NCT03293212 -NCT03293238 -NCT03293251 -NCT03293368 -NCT03293394 -NCT03293524 -NCT03293615 -NCT03293628 -NCT03293667 -NCT03293693 -NCT03293992 -NCT03294044 -NCT03294148 -NCT03294187 -NCT03294239 -NCT03294252 -NCT03294317 -NCT03294408 -NCT03294421 -NCT03294460 -NCT03294525 -NCT03294538 -NCT03294603 -NCT03294733 -NCT03294902 -NCT03295162 -NCT03295175 -NCT03295279 -NCT03295383 -NCT03295526 -NCT03295643 -NCT03295721 -NCT03295747 -NCT03296098 -NCT03296241 -NCT03296267 -NCT03296319 -NCT03296358 -NCT03296501 -NCT03296514 -NCT03296527 -NCT03296579 -NCT03296709 -NCT03296787 -NCT03296878 -NCT03296930 -NCT03296982 -NCT03297177 -NCT03297307 -NCT03297632 -NCT03297671 -NCT03297892 -NCT03297957 -NCT03298373 -NCT03298399 -NCT03298594 -NCT03298607 -NCT03298685 -NCT03298867 -NCT03299036 -NCT03299114 -NCT03299283 -NCT03299322 -NCT03299335 -NCT03299439 -NCT03299673 -NCT03299829 -NCT03299894 -NCT03299985 -NCT03299998 -NCT03300193 -NCT03300284 -NCT03300362 -NCT03300375 -NCT03300674 -NCT03300687 -NCT03300908 -NCT03301155 -NCT03301168 -NCT03301233 -NCT03301272 -NCT03301350 -NCT03301675 -NCT03301701 -NCT03301753 -NCT03302104 -NCT03302403 -NCT03302442 -NCT03302468 -NCT03302559 -NCT03302598 -NCT03302676 -NCT03302910 -NCT03302962 -NCT03303053 -NCT03303157 -NCT03303183 -NCT03303287 -NCT03303313 -NCT03303352 -NCT03303430 -NCT03303482 -NCT03303521 -NCT03303586 -NCT03303937 -NCT03303963 -NCT03304054 -NCT03304184 -NCT03304314 -NCT03304366 -NCT03304379 -NCT03304405 -NCT03304730 -NCT03304795 -NCT03304847 -NCT03304925 -NCT03305185 -NCT03305276 -NCT03305549 -NCT03305588 -NCT03305653 -NCT03305705 -NCT03305783 -NCT03305809 -NCT03306004 -NCT03306030 -NCT03306290 -NCT03306329 -NCT03306381 -NCT03306485 -NCT03306498 -NCT03306641 -NCT03306771 -NCT03306784 -NCT03306823 -NCT03306849 -NCT03307005 -NCT03307070 -NCT03307096 -NCT03307122 -NCT03307265 -NCT03307317 -NCT03307330 -NCT03307382 -NCT03307512 -NCT03307876 -NCT03307993 -NCT03308006 -NCT03308084 -NCT03308149 -NCT03308266 -NCT03308370 -NCT03308435 -NCT03308487 -NCT03308526 -NCT03309293 -NCT03309319 -NCT03309358 -NCT03309410 -NCT03309488 -NCT03309501 -NCT03309852 -NCT03309891 -NCT03310021 -NCT03310164 -NCT03310424 -NCT03310463 -NCT03310645 -NCT03310671 -NCT03311035 -NCT03311204 -NCT03311334 -NCT03311685 -NCT03311932 -NCT03312062 -NCT03312153 -NCT03312244 -NCT03312257 -NCT03312309 -NCT03312478 -NCT03312530 -NCT03312543 -NCT03312634 -NCT03312686 -NCT03312777 -NCT03312907 -NCT03313011 -NCT03313089 -NCT03313102 -NCT03313128 -NCT03313154 -NCT03313271 -NCT03313284 -NCT03313362 -NCT03313531 -NCT03313635 -NCT03313700 -NCT03313856 -NCT03314025 -NCT03314090 -NCT03314116 -NCT03314259 -NCT03314415 -NCT03314441 -NCT03314480 -NCT03314584 -NCT03314792 -NCT03314844 -NCT03314987 -NCT03315026 -NCT03315078 -NCT03315130 -NCT03315286 -NCT03315403 -NCT03315455 -NCT03315481 -NCT03315533 -NCT03315871 -NCT03315975 -NCT03316053 -NCT03316469 -NCT03316521 -NCT03316547 -NCT03316742 -NCT03316898 -NCT03317158 -NCT03317210 -NCT03317262 -NCT03317327 -NCT03317366 -NCT03317405 -NCT03317574 -NCT03317795 -NCT03317808 -NCT03317977 -NCT03318029 -NCT03318198 -NCT03318237 -NCT03318315 -NCT03318328 -NCT03318341 -NCT03318510 -NCT03318523 -NCT03318614 -NCT03318783 -NCT03318952 -NCT03318991 -NCT03319030 -NCT03319043 -NCT03319121 -NCT03319186 -NCT03319251 -NCT03319420 -NCT03319472 -NCT03319602 -NCT03319810 -NCT03319823 -NCT03319862 -NCT03319901 -NCT03319966 -NCT03319992 -NCT03320083 -NCT03320213 -NCT03320460 -NCT03320486 -NCT03320538 -NCT03320577 -NCT03320590 -NCT03320733 -NCT03320798 -NCT03320811 -NCT03320928 -NCT03320941 -NCT03321019 -NCT03321097 -NCT03321240 -NCT03321487 -NCT03321513 -NCT03321526 -NCT03321734 -NCT03321825 -NCT03321903 -NCT03322215 -NCT03322345 -NCT03322514 -NCT03322644 -NCT03322670 -NCT03322696 -NCT03322761 -NCT03322800 -NCT03322865 -NCT03322904 -NCT03322930 -NCT03323047 -NCT03323060 -NCT03323151 -NCT03323229 -NCT03323346 -NCT03323476 -NCT03323528 -NCT03323658 -NCT03323775 -NCT03323788 -NCT03323801 -NCT03323827 -NCT03324009 -NCT03324061 -NCT03324074 -NCT03324165 -NCT03324295 -NCT03324308 -NCT03324373 -NCT03324503 -NCT03324542 -NCT03324737 -NCT03324880 -NCT03325023 -NCT03325088 -NCT03325192 -NCT03325205 -NCT03325244 -NCT03325296 -NCT03325309 -NCT03325348 -NCT03325374 -NCT03325387 -NCT03325647 -NCT03325790 -NCT03325803 -NCT03325829 -NCT03325868 -NCT03325933 -NCT03326024 -NCT03326154 -NCT03326232 -NCT03326258 -NCT03326583 -NCT03326622 -NCT03326843 -NCT03326895 -NCT03327233 -NCT03327428 -NCT03327636 -NCT03327688 -NCT03327701 -NCT03327740 -NCT03327779 -NCT03327857 -NCT03327974 -NCT03327987 -NCT03328000 -NCT03328065 -NCT03328325 -NCT03328338 -NCT03328403 -NCT03328429 -NCT03328676 -NCT03328936 -NCT03328975 -NCT03329027 -NCT03329040 -NCT03329235 -NCT03329261 -NCT03329274 -NCT03329300 -NCT03329365 -NCT03329885 -NCT03329963 -NCT03330015 -NCT03330158 -NCT03330275 -NCT03330288 -NCT03330353 -NCT03330379 -NCT03330457 -NCT03330522 -NCT03330600 -NCT03331042 -NCT03331276 -NCT03331315 -NCT03331445 -NCT03331510 -NCT03331627 -NCT03332303 -NCT03332355 -NCT03332368 -NCT03332472 -NCT03332745 -NCT03332927 -NCT03332992 -NCT03333070 -NCT03333109 -NCT03333330 -NCT03333837 -NCT03333863 -NCT03334188 -NCT03334227 -NCT03334292 -NCT03334539 -NCT03334682 -NCT03334695 -NCT03334708 -NCT03334864 -NCT03334955 -NCT03335033 -NCT03335098 -NCT03335124 -NCT03335202 -NCT03335254 -NCT03335319 -NCT03335332 -NCT03335384 -NCT03335527 -NCT03335839 -NCT03335865 -NCT03335878 -NCT03335904 -NCT03335969 -NCT03336021 -NCT03336034 -NCT03336047 -NCT03336203 -NCT03336476 -NCT03336528 -NCT03337035 -NCT03337048 -NCT03337061 -NCT03337139 -NCT03337165 -NCT03337256 -NCT03337360 -NCT03337607 -NCT03337789 -NCT03337932 -NCT03338218 -NCT03338348 -NCT03338400 -NCT03338426 -NCT03338465 -NCT03338530 -NCT03338621 -NCT03338764 -NCT03338868 -NCT03338920 -NCT03339076 -NCT03339102 -NCT03339115 -NCT03339128 -NCT03339362 -NCT03339544 -NCT03339635 -NCT03339726 -NCT03339908 -NCT03339973 -NCT03340012 -NCT03340116 -NCT03340155 -NCT03340259 -NCT03340298 -NCT03340415 -NCT03340584 -NCT03340740 -NCT03340896 -NCT03340948 -NCT03340961 -NCT03340974 -NCT03341039 -NCT03341104 -NCT03341143 -NCT03341208 -NCT03341221 -NCT03341338 -NCT03341468 -NCT03341533 -NCT03341546 -NCT03341650 -NCT03341689 -NCT03341754 -NCT03341871 -NCT03341910 -NCT03341936 -NCT03341988 -NCT03342001 -NCT03342235 -NCT03342261 -NCT03342274 -NCT03342365 -NCT03342430 -NCT03342664 -NCT03342716 -NCT03342755 -NCT03342794 -NCT03342859 -NCT03343002 -NCT03343327 -NCT03343405 -NCT03343470 -NCT03343925 -NCT03344029 -NCT03344276 -NCT03344406 -NCT03344497 -NCT03344588 -NCT03344744 -NCT03344835 -NCT03344913 -NCT03344965 -NCT03344991 -NCT03345108 -NCT03345134 -NCT03345186 -NCT03345251 -NCT03345277 -NCT03345407 -NCT03345420 -NCT03345472 -NCT03345498 -NCT03345641 -NCT03345654 -NCT03345693 -NCT03345784 -NCT03345875 -NCT03345940 -NCT03346057 -NCT03346135 -NCT03346421 -NCT03346603 -NCT03346733 -NCT03346759 -NCT03346954 -NCT03346967 -NCT03347149 -NCT03347253 -NCT03347344 -NCT03347461 -NCT03347513 -NCT03347591 -NCT03347630 -NCT03347656 -NCT03347721 -NCT03347799 -NCT03347838 -NCT03347903 -NCT03347929 -NCT03348007 -NCT03348046 -NCT03348059 -NCT03348124 -NCT03348189 -NCT03348215 -NCT03348280 -NCT03348761 -NCT03348917 -NCT03349008 -NCT03349021 -NCT03349034 -NCT03349060 -NCT03349177 -NCT03349320 -NCT03349411 -NCT03349437 -NCT03349840 -NCT03349879 -NCT03349892 -NCT03350048 -NCT03350087 -NCT03350139 -NCT03350217 -NCT03350243 -NCT03350425 -NCT03350503 -NCT03350529 -NCT03350594 -NCT03350620 -NCT03350646 -NCT03350659 -NCT03350685 -NCT03350906 -NCT03350919 -NCT03351127 -NCT03351335 -NCT03351517 -NCT03351725 -NCT03351855 -NCT03351907 -NCT03352089 -NCT03352115 -NCT03352154 -NCT03352271 -NCT03352323 -NCT03352349 -NCT03352362 -NCT03352375 -NCT03352739 -NCT03352804 -NCT03352895 -NCT03352908 -NCT03352921 -NCT03353064 -NCT03353129 -NCT03353194 -NCT03353233 -NCT03353246 -NCT03353506 -NCT03353558 -NCT03353571 -NCT03353610 -NCT03353948 -NCT03354000 -NCT03354026 -NCT03354039 -NCT03354065 -NCT03354169 -NCT03354299 -NCT03354351 -NCT03354455 -NCT03354533 -NCT03354572 -NCT03354598 -NCT03354611 -NCT03354689 -NCT03354832 -NCT03355014 -NCT03355196 -NCT03355248 -NCT03355261 -NCT03355339 -NCT03355378 -NCT03355612 -NCT03355742 -NCT03355937 -NCT03356301 -NCT03356405 -NCT03356522 -NCT03356548 -NCT03356665 -NCT03356769 -NCT03356795 -NCT03356925 -NCT03356938 -NCT03357029 -NCT03357042 -NCT03357237 -NCT03357419 -NCT03357484 -NCT03357614 -NCT03357679 -NCT03357770 -NCT03357809 -NCT03358017 -NCT03358199 -NCT03358407 -NCT03358576 -NCT03358732 -NCT03358862 -NCT03358979 -NCT03359070 -NCT03359083 -NCT03359161 -NCT03359252 -NCT03359265 -NCT03359278 -NCT03359434 -NCT03359447 -NCT03359525 -NCT03359603 -NCT03359668 -NCT03359941 -NCT03360110 -NCT03360149 -NCT03360162 -NCT03360227 -NCT03360292 -NCT03360318 -NCT03360331 -NCT03360344 -NCT03360383 -NCT03360500 -NCT03360591 -NCT03360890 -NCT03360916 -NCT03360929 -NCT03361111 -NCT03361137 -NCT03361345 -NCT03361423 -NCT03361709 -NCT03361982 -NCT03362060 -NCT03362138 -NCT03362255 -NCT03362268 -NCT03362281 -NCT03362437 -NCT03362619 -NCT03362632 -NCT03362762 -NCT03362827 -NCT03362970 -NCT03363126 -NCT03363191 -NCT03363451 -NCT03363490 -NCT03363529 -NCT03363620 -NCT03363633 -NCT03363698 -NCT03364166 -NCT03364270 -NCT03364803 -NCT03364881 -NCT03364998 -NCT03365336 -NCT03365414 -NCT03365687 -NCT03365778 -NCT03366012 -NCT03366077 -NCT03366103 -NCT03366142 -NCT03366181 -NCT03366207 -NCT03366454 -NCT03366493 -NCT03366558 -NCT03366649 -NCT03366740 -NCT03366779 -NCT03366805 -NCT03367091 -NCT03367156 -NCT03367338 -NCT03367429 -NCT03367572 -NCT03367715 -NCT03367728 -NCT03367793 -NCT03367845 -NCT03368066 -NCT03368079 -NCT03368534 -NCT03368664 -NCT03368729 -NCT03368742 -NCT03368898 -NCT03368924 -NCT03368963 -NCT03368976 -NCT03369119 -NCT03369132 -NCT03369353 -NCT03369509 -NCT03369522 -NCT03369587 -NCT03369600 -NCT03369652 -NCT03369730 -NCT03369782 -NCT03369847 -NCT03370055 -NCT03370172 -NCT03370185 -NCT03370406 -NCT03370718 -NCT03370744 -NCT03370835 -NCT03370913 -NCT03370926 -NCT03370965 -NCT03371277 -NCT03371407 -NCT03371433 -NCT03371446 -NCT03371563 -NCT03371589 -NCT03372096 -NCT03372122 -NCT03372148 -NCT03372200 -NCT03372421 -NCT03372499 -NCT03372551 -NCT03372642 -NCT03372655 -NCT03372772 -NCT03373019 -NCT03373110 -NCT03373123 -NCT03373266 -NCT03373383 -NCT03373422 -NCT03373552 -NCT03373708 -NCT03373760 -NCT03373773 -NCT03373942 -NCT03374059 -NCT03374319 -NCT03374475 -NCT03374501 -NCT03374683 -NCT03374865 -NCT03374982 -NCT03375112 -NCT03375164 -NCT03375320 -NCT03375359 -NCT03375502 -NCT03375593 -NCT03375632 -NCT03375814 -NCT03376087 -NCT03376412 -NCT03376451 -NCT03376568 -NCT03376594 -NCT03376919 -NCT03376945 -NCT03377062 -NCT03377166 -NCT03377192 -NCT03377218 -NCT03377296 -NCT03377309 -NCT03377426 -NCT03377439 -NCT03377465 -NCT03377530 -NCT03377569 -NCT03377660 -NCT03377764 -NCT03377894 -NCT03378167 -NCT03378193 -NCT03378258 -NCT03378362 -NCT03378375 -NCT03378466 -NCT03378479 -NCT03378648 -NCT03378934 -NCT03379012 -NCT03379025 -NCT03379168 -NCT03379194 -NCT03379363 -NCT03379415 -NCT03379493 -NCT03379571 -NCT03379597 -NCT03379675 -NCT03379792 -NCT03379805 -NCT03379935 -NCT03379948 -NCT03379961 -NCT03379974 -NCT03380052 -NCT03380182 -NCT03380299 -NCT03380364 -NCT03380572 -NCT03380793 -NCT03380845 -NCT03380897 -NCT03381092 -NCT03381287 -NCT03381300 -NCT03381339 -NCT03381534 -NCT03381560 -NCT03381573 -NCT03381612 -NCT03381677 -NCT03381755 -NCT03381820 -NCT03381846 -NCT03382106 -NCT03382145 -NCT03382249 -NCT03382392 -NCT03382418 -NCT03382574 -NCT03382964 -NCT03383016 -NCT03383614 -NCT03383705 -NCT03383757 -NCT03384043 -NCT03384056 -NCT03384082 -NCT03384095 -NCT03384251 -NCT03384407 -NCT03384628 -NCT03384784 -NCT03385070 -NCT03385096 -NCT03385187 -NCT03385343 -NCT03385408 -NCT03385551 -NCT03385616 -NCT03385668 -NCT03385798 -NCT03385889 -NCT03385915 -NCT03385941 -NCT03386292 -NCT03386409 -NCT03386552 -NCT03386578 -NCT03386643 -NCT03386773 -NCT03387046 -NCT03387085 -NCT03387228 -NCT03387241 -NCT03387280 -NCT03387306 -NCT03387501 -NCT03387670 -NCT03387774 -NCT03387969 -NCT03388021 -NCT03388073 -NCT03388125 -NCT03388268 -NCT03388385 -NCT03388606 -NCT03388632 -NCT03388645 -NCT03388671 -NCT03388905 -NCT03388970 -NCT03389061 -NCT03389204 -NCT03389347 -NCT03389464 -NCT03389516 -NCT03389542 -NCT03389568 -NCT03389776 -NCT03390166 -NCT03390231 -NCT03390348 -NCT03390608 -NCT03390634 -NCT03390894 -NCT03390972 -NCT03391011 -NCT03391154 -NCT03391271 -NCT03391310 -NCT03391427 -NCT03391466 -NCT03391531 -NCT03391557 -NCT03391895 -NCT03391934 -NCT03391947 -NCT03392064 -NCT03392129 -NCT03392220 -NCT03392363 -NCT03392402 -NCT03392519 -NCT03392571 -NCT03392935 -NCT03392974 -NCT03393065 -NCT03393078 -NCT03393091 -NCT03393208 -NCT03393286 -NCT03393546 -NCT03393715 -NCT03393754 -NCT03393975 -NCT03394014 -NCT03394027 -NCT03394040 -NCT03394157 -NCT03394300 -NCT03394313 -NCT03394443 -NCT03394547 -NCT03394651 -NCT03394664 -NCT03394703 -NCT03394807 -NCT03394898 -NCT03394924 -NCT03394963 -NCT03394989 -NCT03395028 -NCT03395067 -NCT03395119 -NCT03395132 -NCT03395249 -NCT03395340 -NCT03395444 -NCT03395457 -NCT03395496 -NCT03395522 -NCT03395626 -NCT03395704 -NCT03395717 -NCT03395756 -NCT03396042 -NCT03396107 -NCT03396289 -NCT03396341 -NCT03396562 -NCT03396666 -NCT03396757 -NCT03396770 -NCT03396822 -NCT03396913 -NCT03396991 -NCT03397017 -NCT03397056 -NCT03397160 -NCT03397472 -NCT03397511 -NCT03397693 -NCT03397758 -NCT03397784 -NCT03397849 -NCT03398070 -NCT03398252 -NCT03398538 -NCT03398603 -NCT03398629 -NCT03398668 -NCT03398798 -NCT03398811 -NCT03398915 -NCT03398993 -NCT03399214 -NCT03399331 -NCT03399383 -NCT03399396 -NCT03399474 -NCT03399955 -NCT03400124 -NCT03400202 -NCT03400280 -NCT03400631 -NCT03400644 -NCT03400826 -NCT03400904 -NCT03400930 -NCT03400956 -NCT03401008 -NCT03401047 -NCT03401060 -NCT03401125 -NCT03401177 -NCT03401229 -NCT03401281 -NCT03401593 -NCT03401671 -NCT03401710 -NCT03401879 -NCT03401918 -NCT03402100 -NCT03402269 -NCT03402412 -NCT03402594 -NCT03402620 -NCT03402633 -NCT03402828 -NCT03402854 -NCT03402893 -NCT03403062 -NCT03403101 -NCT03403205 -NCT03403322 -NCT03403387 -NCT03403400 -NCT03403413 -NCT03403530 -NCT03403855 -NCT03403920 -NCT03404128 -NCT03404297 -NCT03404310 -NCT03404336 -NCT03404414 -NCT03404804 -NCT03404843 -NCT03404934 -NCT03405025 -NCT03405090 -NCT03405155 -NCT03405285 -NCT03405337 -NCT03405363 -NCT03405597 -NCT03405649 -NCT03405701 -NCT03405922 -NCT03406130 -NCT03406195 -NCT03406260 -NCT03406325 -NCT03406416 -NCT03407053 -NCT03407066 -NCT03407430 -NCT03407534 -NCT03407612 -NCT03407651 -NCT03407716 -NCT03407807 -NCT03407859 -NCT03407989 -NCT03408080 -NCT03408093 -NCT03408119 -NCT03408158 -NCT03408184 -NCT03408197 -NCT03408223 -NCT03408236 -NCT03408613 -NCT03408639 -NCT03408808 -NCT03408938 -NCT03409042 -NCT03409055 -NCT03409120 -NCT03409146 -NCT03409380 -NCT03409406 -NCT03409471 -NCT03409510 -NCT03409679 -NCT03409705 -NCT03409822 -NCT03409861 -NCT03409874 -NCT03409913 -NCT03410004 -NCT03410069 -NCT03410095 -NCT03410134 -NCT03410160 -NCT03410290 -NCT03410407 -NCT03410498 -NCT03410628 -NCT03410745 -NCT03410862 -NCT03410888 -NCT03411226 -NCT03411252 -NCT03411278 -NCT03411538 -NCT03411577 -NCT03411629 -NCT03411642 -NCT03411811 -NCT03411850 -NCT03411863 -NCT03411928 -NCT03412019 -NCT03412045 -NCT03412201 -NCT03412292 -NCT03412357 -NCT03412474 -NCT03412591 -NCT03412643 -NCT03412669 -NCT03412708 -NCT03412929 -NCT03413085 -NCT03413202 -NCT03413254 -NCT03413462 -NCT03413514 -NCT03413553 -NCT03413631 -NCT03413683 -NCT03413826 -NCT03413839 -NCT03413891 -NCT03414021 -NCT03414411 -NCT03414424 -NCT03414593 -NCT03414697 -NCT03414710 -NCT03414749 -NCT03414853 -NCT03414905 -NCT03414957 -NCT03415165 -NCT03415204 -NCT03415269 -NCT03415321 -NCT03415334 -NCT03415347 -NCT03415477 -NCT03415776 -NCT03415880 -NCT03415945 -NCT03416010 -NCT03416062 -NCT03416101 -NCT03416205 -NCT03416283 -NCT03416309 -NCT03416452 -NCT03416647 -NCT03416686 -NCT03416725 -NCT03416738 -NCT03416751 -NCT03416842 -NCT03416998 -NCT03417063 -NCT03417102 -NCT03417284 -NCT03417297 -NCT03417414 -NCT03417596 -NCT03417648 -NCT03417817 -NCT03417869 -NCT03417973 -NCT03418116 -NCT03418337 -NCT03418441 -NCT03418584 -NCT03418610 -NCT03418805 -NCT03418857 -NCT03418883 -NCT03418935 -NCT03418961 -NCT03418987 -NCT03419000 -NCT03419130 -NCT03419234 -NCT03419338 -NCT03419364 -NCT03419650 -NCT03419754 -NCT03419767 -NCT03419858 -NCT03420144 -NCT03420157 -NCT03420274 -NCT03420300 -NCT03420339 -NCT03420482 -NCT03420651 -NCT03420885 -NCT03420911 -NCT03420963 -NCT03421028 -NCT03421288 -NCT03421340 -NCT03421834 -NCT03421899 -NCT03421925 -NCT03421951 -NCT03422211 -NCT03422315 -NCT03422380 -NCT03422796 -NCT03422809 -NCT03423082 -NCT03423277 -NCT03423303 -NCT03423472 -NCT03423498 -NCT03423511 -NCT03423537 -NCT03423550 -NCT03423771 -NCT03423784 -NCT03423836 -NCT03423966 -NCT03423979 -NCT03424018 -NCT03424044 -NCT03424278 -NCT03424499 -NCT03424733 -NCT03424772 -NCT03424980 -NCT03425214 -NCT03425383 -NCT03425578 -NCT03425617 -NCT03425851 -NCT03425864 -NCT03426189 -NCT03426241 -NCT03426319 -NCT03426332 -NCT03426384 -NCT03426475 -NCT03426800 -NCT03426839 -NCT03426904 -NCT03426943 -NCT03426982 -NCT03426995 -NCT03427099 -NCT03427125 -NCT03427216 -NCT03427229 -NCT03427411 -NCT03427710 -NCT03427853 -NCT03427944 -NCT03427957 -NCT03427970 -NCT03427983 -NCT03428048 -NCT03428113 -NCT03428347 -NCT03428672 -NCT03428841 -NCT03428854 -NCT03428919 -NCT03429062 -NCT03429127 -NCT03429400 -NCT03429426 -NCT03429478 -NCT03429517 -NCT03429582 -NCT03429764 -NCT03429777 -NCT03429894 -NCT03430011 -NCT03430648 -NCT03430804 -NCT03430856 -NCT03430869 -NCT03431103 -NCT03431272 -NCT03431285 -NCT03431415 -NCT03431584 -NCT03431727 -NCT03432026 -NCT03432052 -NCT03432143 -NCT03432221 -NCT03432299 -NCT03432416 -NCT03432507 -NCT03432520 -NCT03432533 -NCT03432559 -NCT03432611 -NCT03432741 -NCT03432806 -NCT03432962 -NCT03433196 -NCT03433274 -NCT03433287 -NCT03433313 -NCT03433404 -NCT03433417 -NCT03433430 -NCT03433716 -NCT03433807 -NCT03433950 -NCT03434067 -NCT03434080 -NCT03434093 -NCT03434262 -NCT03434470 -NCT03434730 -NCT03434951 -NCT03435016 -NCT03435159 -NCT03435224 -NCT03435237 -NCT03435315 -NCT03435367 -NCT03435432 -NCT03435653 -NCT03435692 -NCT03435731 -NCT03435913 -NCT03435926 -NCT03435939 -NCT03435952 -NCT03436069 -NCT03436082 -NCT03436108 -NCT03436147 -NCT03436186 -NCT03436225 -NCT03436251 -NCT03436420 -NCT03436550 -NCT03436576 -NCT03436654 -NCT03436732 -NCT03436758 -NCT03436836 -NCT03436914 -NCT03436953 -NCT03437135 -NCT03437239 -NCT03437252 -NCT03437486 -NCT03437733 -NCT03437837 -NCT03438266 -NCT03438734 -NCT03438760 -NCT03438786 -NCT03439137 -NCT03439163 -NCT03439202 -NCT03439254 -NCT03439449 -NCT03439592 -NCT03439670 -NCT03439709 -NCT03439787 -NCT03439982 -NCT03440034 -NCT03440164 -NCT03440346 -NCT03440359 -NCT03440411 -NCT03440489 -NCT03440515 -NCT03440632 -NCT03440697 -NCT03440827 -NCT03440957 -NCT03441191 -NCT03441347 -NCT03441373 -NCT03441516 -NCT03442049 -NCT03442062 -NCT03442296 -NCT03442400 -NCT03442764 -NCT03442777 -NCT03443011 -NCT03443115 -NCT03443414 -NCT03443505 -NCT03443544 -NCT03443596 -NCT03443765 -NCT03443843 -NCT03443973 -NCT03444181 -NCT03444259 -NCT03444272 -NCT03444298 -NCT03444324 -NCT03444376 -NCT03444428 -NCT03444545 -NCT03444584 -NCT03444623 -NCT03444688 -NCT03444831 -NCT03444870 -NCT03444883 -NCT03445013 -NCT03445195 -NCT03445403 -NCT03445481 -NCT03445611 -NCT03445624 -NCT03445962 -NCT03446001 -NCT03446118 -NCT03446261 -NCT03446339 -NCT03446352 -NCT03446534 -NCT03446612 -NCT03446625 -NCT03446768 -NCT03446807 -NCT03446989 -NCT03447015 -NCT03447093 -NCT03447340 -NCT03447639 -NCT03447782 -NCT03448029 -NCT03448055 -NCT03448276 -NCT03448341 -NCT03448471 -NCT03448484 -NCT03448510 -NCT03448536 -NCT03448640 -NCT03448770 -NCT03448939 -NCT03448952 -NCT03449082 -NCT03449095 -NCT03449134 -NCT03449147 -NCT03449225 -NCT03449316 -NCT03449368 -NCT03449433 -NCT03449459 -NCT03449498 -NCT03449511 -NCT03449524 -NCT03449628 -NCT03449641 -NCT03449979 -NCT03450135 -NCT03450213 -NCT03450252 -NCT03450369 -NCT03450473 -NCT03450538 -NCT03450564 -NCT03450603 -NCT03450616 -NCT03450642 -NCT03450668 -NCT03450681 -NCT03450811 -NCT03450824 -NCT03450850 -NCT03450889 -NCT03451045 -NCT03451266 -NCT03451292 -NCT03451435 -NCT03451513 -NCT03451734 -NCT03451773 -NCT03451942 -NCT03451968 -NCT03452111 -NCT03452267 -NCT03452280 -NCT03452384 -NCT03452462 -NCT03452696 -NCT03452735 -NCT03452774 -NCT03452787 -NCT03453216 -NCT03453255 -NCT03453307 -NCT03453346 -NCT03453580 -NCT03453593 -NCT03453632 -NCT03453645 -NCT03453697 -NCT03453853 -NCT03453918 -NCT03453931 -NCT03453944 -NCT03453970 -NCT03454009 -NCT03454035 -NCT03454087 -NCT03454165 -NCT03454360 -NCT03454464 -NCT03454477 -NCT03454516 -NCT03454542 -NCT03455036 -NCT03455153 -NCT03455205 -NCT03455712 -NCT03455790 -NCT03455907 -NCT03455998 -NCT03456024 -NCT03456349 -NCT03456479 -NCT03456531 -NCT03456544 -NCT03456557 -NCT03456622 -NCT03456752 -NCT03456882 -NCT03456895 -NCT03456934 -NCT03457025 -NCT03457116 -NCT03457168 -NCT03457233 -NCT03457246 -NCT03457363 -NCT03457571 -NCT03457610 -NCT03457753 -NCT03457805 -NCT03457818 -NCT03457857 -NCT03457909 -NCT03457961 -NCT03458000 -NCT03458026 -NCT03458247 -NCT03458559 -NCT03458598 -NCT03458702 -NCT03458780 -NCT03458806 -NCT03458871 -NCT03459248 -NCT03459261 -NCT03459326 -NCT03459443 -NCT03459482 -NCT03459547 -NCT03459599 -NCT03459651 -NCT03460080 -NCT03460171 -NCT03460236 -NCT03460470 -NCT03460613 -NCT03460743 -NCT03460795 -NCT03460873 -NCT03460912 -NCT03461068 -NCT03461159 -NCT03461237 -NCT03461250 -NCT03461393 -NCT03461458 -NCT03461536 -NCT03461601 -NCT03461640 -NCT03461835 -NCT03462056 -NCT03462160 -NCT03462329 -NCT03462459 -NCT03462589 -NCT03462602 -NCT03462641 -NCT03462810 -NCT03463200 -NCT03463213 -NCT03463226 -NCT03463694 -NCT03463720 -NCT03463759 -NCT03463811 -NCT03463824 -NCT03463850 -NCT03463889 -NCT03464253 -NCT03464279 -NCT03464487 -NCT03464578 -NCT03464656 -NCT03464682 -NCT03464695 -NCT03464851 -NCT03465020 -NCT03465111 -NCT03465150 -NCT03465176 -NCT03465267 -NCT03465293 -NCT03465423 -NCT03465748 -NCT03465761 -NCT03465826 -NCT03466099 -NCT03466398 -NCT03466450 -NCT03466502 -NCT03466684 -NCT03466710 -NCT03466736 -NCT03466918 -NCT03467165 -NCT03467191 -NCT03467347 -NCT03467438 -NCT03467477 -NCT03467685 -NCT03467828 -NCT03467880 -NCT03468205 -NCT03468387 -NCT03468452 -NCT03468465 -NCT03468491 -NCT03468660 -NCT03468725 -NCT03468933 -NCT03468959 -NCT03468985 -NCT03469011 -NCT03469024 -NCT03469037 -NCT03469050 -NCT03469219 -NCT03469544 -NCT03469583 -NCT03469609 -NCT03469895 -NCT03470090 -NCT03470155 -NCT03470220 -NCT03470246 -NCT03470259 -NCT03470298 -NCT03470545 -NCT03470662 -NCT03470740 -NCT03470766 -NCT03471065 -NCT03471156 -NCT03471312 -NCT03471364 -NCT03471455 -NCT03471494 -NCT03471650 -NCT03471728 -NCT03471767 -NCT03471832 -NCT03471936 -NCT03472014 -NCT03472092 -NCT03472183 -NCT03472196 -NCT03472235 -NCT03472378 -NCT03472599 -NCT03472625 -NCT03472677 -NCT03472716 -NCT03472807 -NCT03472859 -NCT03472872 -NCT03472924 -NCT03473119 -NCT03473236 -NCT03473938 -NCT03474016 -NCT03474068 -NCT03474081 -NCT03474159 -NCT03474198 -NCT03474237 -NCT03474263 -NCT03474367 -NCT03474406 -NCT03474575 -NCT03474601 -NCT03474744 -NCT03475199 -NCT03475355 -NCT03475368 -NCT03475524 -NCT03475589 -NCT03475823 -NCT03475888 -NCT03476044 -NCT03476083 -NCT03476135 -NCT03476187 -NCT03476317 -NCT03476447 -NCT03476486 -NCT03476564 -NCT03476616 -NCT03476941 -NCT03477188 -NCT03477201 -NCT03477240 -NCT03477253 -NCT03477396 -NCT03477422 -NCT03477500 -NCT03477552 -NCT03477760 -NCT03477890 -NCT03477929 -NCT03477942 -NCT03478033 -NCT03478072 -NCT03478163 -NCT03478176 -NCT03478189 -NCT03478371 -NCT03478397 -NCT03478423 -NCT03478826 -NCT03478852 -NCT03478865 -NCT03478878 -NCT03478891 -NCT03478982 -NCT03479008 -NCT03479190 -NCT03479268 -NCT03479437 -NCT03479463 -NCT03479476 -NCT03479528 -NCT03479554 -NCT03479567 -NCT03479749 -NCT03479788 -NCT03479827 -NCT03479905 -NCT03479983 -NCT03480022 -NCT03480243 -NCT03480490 -NCT03480503 -NCT03480841 -NCT03480893 -NCT03480997 -NCT03481010 -NCT03481491 -NCT03481504 -NCT03481517 -NCT03481829 -NCT03481946 -NCT03482050 -NCT03482128 -NCT03482180 -NCT03482310 -NCT03482375 -NCT03482479 -NCT03482570 -NCT03482609 -NCT03482713 -NCT03482895 -NCT03482921 -NCT03482960 -NCT03483090 -NCT03483194 -NCT03483298 -NCT03483337 -NCT03483519 -NCT03483844 -NCT03484026 -NCT03484039 -NCT03484078 -NCT03484130 -NCT03484143 -NCT03484611 -NCT03484702 -NCT03484832 -NCT03485079 -NCT03485118 -NCT03485170 -NCT03485183 -NCT03485495 -NCT03485625 -NCT03485768 -NCT03485911 -NCT03486262 -NCT03486366 -NCT03486587 -NCT03486626 -NCT03486730 -NCT03486899 -NCT03486912 -NCT03487120 -NCT03487237 -NCT03487250 -NCT03487276 -NCT03487705 -NCT03487731 -NCT03487757 -NCT03487809 -NCT03487965 -NCT03488134 -NCT03488147 -NCT03488212 -NCT03488485 -NCT03488589 -NCT03488628 -NCT03488797 -NCT03489031 -NCT03489044 -NCT03489265 -NCT03489278 -NCT03489317 -NCT03489356 -NCT03489681 -NCT03489824 -NCT03489876 -NCT03489993 -NCT03490045 -NCT03490071 -NCT03490084 -NCT03490123 -NCT03490214 -NCT03490279 -NCT03490370 -NCT03490409 -NCT03490448 -NCT03490474 -NCT03490487 -NCT03490500 -NCT03490513 -NCT03490539 -NCT03490578 -NCT03490773 -NCT03490799 -NCT03491111 -NCT03491280 -NCT03491410 -NCT03491436 -NCT03491462 -NCT03491657 -NCT03491696 -NCT03491904 -NCT03492450 -NCT03492463 -NCT03492515 -NCT03492762 -NCT03492853 -NCT03493204 -NCT03493360 -NCT03493438 -NCT03493477 -NCT03493529 -NCT03493542 -NCT03493594 -NCT03493633 -NCT03493802 -NCT03493880 -NCT03493945 -NCT03493971 -NCT03494023 -NCT03494283 -NCT03494452 -NCT03494517 -NCT03494621 -NCT03494673 -NCT03494751 -NCT03494764 -NCT03494881 -NCT03495050 -NCT03495219 -NCT03495258 -NCT03495271 -NCT03495388 -NCT03495440 -NCT03495479 -NCT03495492 -NCT03495570 -NCT03495661 -NCT03495830 -NCT03496220 -NCT03496233 -NCT03496545 -NCT03496558 -NCT03496753 -NCT03496792 -NCT03496805 -NCT03496818 -NCT03496831 -NCT03496961 -NCT03497039 -NCT03497117 -NCT03497208 -NCT03497442 -NCT03497455 -NCT03497468 -NCT03497520 -NCT03497663 -NCT03497728 -NCT03497806 -NCT03497845 -NCT03497871 -NCT03497897 -NCT03498001 -NCT03498053 -NCT03498417 -NCT03498664 -NCT03498742 -NCT03498794 -NCT03498976 -NCT03499119 -NCT03499210 -NCT03499301 -NCT03499353 -NCT03499418 -NCT03499496 -NCT03499522 -NCT03499561 -NCT03499613 -NCT03499665 -NCT03499756 -NCT03499795 -NCT03499964 -NCT03499990 -NCT03500016 -NCT03500263 -NCT03500328 -NCT03500367 -NCT03500588 -NCT03500666 -NCT03500692 -NCT03500770 -NCT03500861 -NCT03501407 -NCT03501420 -NCT03501680 -NCT03501758 -NCT03501771 -NCT03501901 -NCT03501966 -NCT03502135 -NCT03502213 -NCT03502265 -NCT03502330 -NCT03502421 -NCT03502473 -NCT03502655 -NCT03502720 -NCT03502746 -NCT03502993 -NCT03503032 -NCT03503123 -NCT03503175 -NCT03503240 -NCT03503305 -NCT03503344 -NCT03503474 -NCT03503487 -NCT03503500 -NCT03503513 -NCT03503539 -NCT03503617 -NCT03503721 -NCT03503734 -NCT03503955 -NCT03503994 -NCT03504046 -NCT03504150 -NCT03504202 -NCT03504280 -NCT03504293 -NCT03504345 -NCT03504475 -NCT03504618 -NCT03504787 -NCT03504878 -NCT03505021 -NCT03505151 -NCT03505203 -NCT03505216 -NCT03505411 -NCT03505606 -NCT03505645 -NCT03505775 -NCT03505827 -NCT03505879 -NCT03505983 -NCT03506009 -NCT03506048 -NCT03506217 -NCT03506230 -NCT03506256 -NCT03506295 -NCT03506321 -NCT03506334 -NCT03506425 -NCT03506438 -NCT03506607 -NCT03506906 -NCT03506919 -NCT03507218 -NCT03507257 -NCT03507322 -NCT03507374 -NCT03507400 -NCT03507452 -NCT03507530 -NCT03507569 -NCT03507673 -NCT03507699 -NCT03507829 -NCT03507959 -NCT03508024 -NCT03508037 -NCT03508076 -NCT03508115 -NCT03508232 -NCT03508284 -NCT03508440 -NCT03508479 -NCT03508518 -NCT03508622 -NCT03508817 -NCT03508869 -NCT03508947 -NCT03508986 -NCT03509103 -NCT03509350 -NCT03509532 -NCT03509662 -NCT03509675 -NCT03509805 -NCT03509974 -NCT03510156 -NCT03510312 -NCT03510351 -NCT03510442 -NCT03510455 -NCT03510507 -NCT03510546 -NCT03510559 -NCT03510923 -NCT03510936 -NCT03511053 -NCT03511326 -NCT03511417 -NCT03511625 -NCT03511716 -NCT03511846 -NCT03512106 -NCT03512158 -NCT03512171 -NCT03512262 -NCT03512275 -NCT03512288 -NCT03512340 -NCT03512366 -NCT03512951 -NCT03513055 -NCT03513094 -NCT03513120 -NCT03513354 -NCT03513367 -NCT03513458 -NCT03513471 -NCT03513484 -NCT03513549 -NCT03513679 -NCT03513731 -NCT03513744 -NCT03513861 -NCT03513887 -NCT03513900 -NCT03514017 -NCT03514069 -NCT03514082 -NCT03514108 -NCT03514173 -NCT03514277 -NCT03514459 -NCT03514667 -NCT03514979 -NCT03515044 -NCT03515070 -NCT03515187 -NCT03515278 -NCT03515603 -NCT03515746 -NCT03515759 -NCT03515772 -NCT03515863 -NCT03516149 -NCT03516188 -NCT03516240 -NCT03516487 -NCT03516526 -NCT03516747 -NCT03516773 -NCT03516929 -NCT03517072 -NCT03517111 -NCT03517150 -NCT03517319 -NCT03517371 -NCT03517423 -NCT03517514 -NCT03517579 -NCT03517670 -NCT03517722 -NCT03517982 -NCT03518034 -NCT03518099 -NCT03518203 -NCT03518281 -NCT03518294 -NCT03518424 -NCT03518775 -NCT03518918 -NCT03519360 -NCT03519425 -NCT03519464 -NCT03519490 -NCT03519516 -NCT03519581 -NCT03519607 -NCT03519646 -NCT03519737 -NCT03520140 -NCT03520166 -NCT03520322 -NCT03520348 -NCT03520439 -NCT03520517 -NCT03520530 -NCT03520647 -NCT03520660 -NCT03520673 -NCT03520712 -NCT03520790 -NCT03520855 -NCT03520998 -NCT03521011 -NCT03521167 -NCT03521271 -NCT03521479 -NCT03521518 -NCT03521557 -NCT03521583 -NCT03521648 -NCT03521739 -NCT03521817 -NCT03521869 -NCT03521921 -NCT03522207 -NCT03522233 -NCT03522441 -NCT03522493 -NCT03522506 -NCT03522766 -NCT03522831 -NCT03522909 -NCT03523065 -NCT03523104 -NCT03523247 -NCT03523273 -NCT03523286 -NCT03523520 -NCT03523728 -NCT03523741 -NCT03523845 -NCT03523897 -NCT03524001 -NCT03524040 -NCT03524066 -NCT03524118 -NCT03524222 -NCT03524235 -NCT03524287 -NCT03524300 -NCT03524378 -NCT03524573 -NCT03524677 -NCT03524755 -NCT03524781 -NCT03524807 -NCT03524872 -NCT03525392 -NCT03525431 -NCT03525522 -NCT03525535 -NCT03525691 -NCT03525717 -NCT03525808 -NCT03525925 -NCT03526016 -NCT03526211 -NCT03526250 -NCT03526536 -NCT03526588 -NCT03526731 -NCT03526874 -NCT03526913 -NCT03527277 -NCT03527498 -NCT03527563 -NCT03527589 -NCT03527706 -NCT03527810 -NCT03527836 -NCT03527966 -NCT03527992 -NCT03528070 -NCT03528161 -NCT03528226 -NCT03528265 -NCT03528304 -NCT03528343 -NCT03528369 -NCT03528382 -NCT03528538 -NCT03528616 -NCT03528642 -NCT03528746 -NCT03528785 -NCT03528824 -NCT03529071 -NCT03529188 -NCT03529318 -NCT03529370 -NCT03529461 -NCT03529474 -NCT03529513 -NCT03529565 -NCT03529591 -NCT03529630 -NCT03529708 -NCT03529747 -NCT03529786 -NCT03529955 -NCT03530033 -NCT03530124 -NCT03530241 -NCT03530423 -NCT03530514 -NCT03530553 -NCT03530592 -NCT03530787 -NCT03530917 -NCT03531008 -NCT03531034 -NCT03531138 -NCT03531372 -NCT03531502 -NCT03531619 -NCT03531645 -NCT03531775 -NCT03532074 -NCT03532165 -NCT03532230 -NCT03532269 -NCT03532282 -NCT03532347 -NCT03532451 -NCT03532516 -NCT03532620 -NCT03532750 -NCT03532802 -NCT03532932 -NCT03533010 -NCT03533257 -NCT03533270 -NCT03533322 -NCT03533504 -NCT03533569 -NCT03533582 -NCT03533647 -NCT03533686 -NCT03533699 -NCT03533764 -NCT03533985 -NCT03534024 -NCT03534245 -NCT03534323 -NCT03534505 -NCT03534557 -NCT03534739 -NCT03534804 -NCT03534934 -NCT03534986 -NCT03534999 -NCT03535129 -NCT03535272 -NCT03535415 -NCT03535636 -NCT03535675 -NCT03535688 -NCT03535909 -NCT03536078 -NCT03536104 -NCT03536533 -NCT03536572 -NCT03536936 -NCT03536962 -NCT03537001 -NCT03537092 -NCT03537378 -NCT03537443 -NCT03537495 -NCT03537534 -NCT03537573 -NCT03537625 -NCT03537768 -NCT03537807 -NCT03537989 -NCT03538041 -NCT03538327 -NCT03538574 -NCT03538587 -NCT03538834 -NCT03539094 -NCT03539302 -NCT03539471 -NCT03539588 -NCT03539614 -NCT03539627 -NCT03539861 -NCT03539952 -NCT03540160 -NCT03540368 -NCT03540706 -NCT03540823 -NCT03540862 -NCT03540953 -NCT03541278 -NCT03541304 -NCT03541330 -NCT03541395 -NCT03541421 -NCT03541538 -NCT03541551 -NCT03541629 -NCT03541733 -NCT03541902 -NCT03541941 -NCT03541967 -NCT03541980 -NCT03542240 -NCT03542318 -NCT03542370 -NCT03542474 -NCT03542539 -NCT03542838 -NCT03542877 -NCT03542916 -NCT03543046 -NCT03543085 -NCT03543345 -NCT03543410 -NCT03543436 -NCT03543501 -NCT03544086 -NCT03544216 -NCT03544502 -NCT03544671 -NCT03544840 -NCT03544918 -NCT03545048 -NCT03545113 -NCT03545204 -NCT03545230 -NCT03545529 -NCT03545815 -NCT03545945 -NCT03546660 -NCT03546686 -NCT03546816 -NCT03546842 -NCT03546959 -NCT03547011 -NCT03547024 -NCT03547050 -NCT03547206 -NCT03547232 -NCT03547323 -NCT03547336 -NCT03547453 -NCT03547492 -NCT03547596 -NCT03547661 -NCT03547687 -NCT03547895 -NCT03547960 -NCT03548103 -NCT03548168 -NCT03548181 -NCT03548246 -NCT03548285 -NCT03548415 -NCT03548688 -NCT03548740 -NCT03548753 -NCT03548831 -NCT03548896 -NCT03549052 -NCT03549117 -NCT03549130 -NCT03549273 -NCT03549286 -NCT03549377 -NCT03549390 -NCT03549559 -NCT03549689 -NCT03549715 -NCT03549728 -NCT03549949 -NCT03550014 -NCT03550027 -NCT03550040 -NCT03550157 -NCT03550183 -NCT03550287 -NCT03550313 -NCT03550365 -NCT03550586 -NCT03550690 -NCT03550716 -NCT03551015 -NCT03551379 -NCT03551600 -NCT03551717 -NCT03551821 -NCT03551847 -NCT03551977 -NCT03551990 -NCT03552016 -NCT03552055 -NCT03552068 -NCT03552081 -NCT03552120 -NCT03552861 -NCT03552874 -NCT03552887 -NCT03553381 -NCT03553576 -NCT03553654 -NCT03553693 -NCT03553706 -NCT03553849 -NCT03553862 -NCT03553888 -NCT03553966 -NCT03554018 -NCT03554200 -NCT03554265 -NCT03554447 -NCT03554785 -NCT03554954 -NCT03555188 -NCT03555396 -NCT03555474 -NCT03555500 -NCT03555734 -NCT03555877 -NCT03556020 -NCT03556475 -NCT03556527 -NCT03556657 -NCT03556709 -NCT03556917 -NCT03557216 -NCT03557268 -NCT03557463 -NCT03557528 -NCT03557788 -NCT03557840 -NCT03557879 -NCT03557905 -NCT03558165 -NCT03558204 -NCT03558230 -NCT03558542 -NCT03558841 -NCT03558919 -NCT03559023 -NCT03559244 -NCT03559348 -NCT03559374 -NCT03559439 -NCT03559478 -NCT03559556 -NCT03559894 -NCT03560050 -NCT03560089 -NCT03560102 -NCT03560154 -NCT03560167 -NCT03560180 -NCT03560349 -NCT03560622 -NCT03560635 -NCT03560648 -NCT03560661 -NCT03560869 -NCT03561051 -NCT03561090 -NCT03561168 -NCT03561181 -NCT03561207 -NCT03561428 -NCT03561441 -NCT03561623 -NCT03561688 -NCT03561727 -NCT03561753 -NCT03561779 -NCT03561805 -NCT03561844 -NCT03561883 -NCT03562039 -NCT03562143 -NCT03562182 -NCT03562195 -NCT03562403 -NCT03562429 -NCT03562663 -NCT03562715 -NCT03562741 -NCT03562975 -NCT03563001 -NCT03563066 -NCT03563196 -NCT03563261 -NCT03563300 -NCT03563313 -NCT03563365 -NCT03563599 -NCT03563625 -NCT03563677 -NCT03563690 -NCT03563703 -NCT03563898 -NCT03564119 -NCT03564379 -NCT03564418 -NCT03564535 -NCT03564730 -NCT03564808 -NCT03565068 -NCT03565146 -NCT03565198 -NCT03565341 -NCT03565354 -NCT03565393 -NCT03565471 -NCT03565536 -NCT03565822 -NCT03565835 -NCT03565926 -NCT03565965 -NCT03566316 -NCT03566433 -NCT03566563 -NCT03566745 -NCT03566784 -NCT03566862 -NCT03567265 -NCT03567343 -NCT03567369 -NCT03567395 -NCT03567460 -NCT03567499 -NCT03567785 -NCT03567837 -NCT03568019 -NCT03568032 -NCT03568123 -NCT03568370 -NCT03568682 -NCT03568747 -NCT03568773 -NCT03568825 -NCT03568851 -NCT03568942 -NCT03568968 -NCT03568994 -NCT03569007 -NCT03569046 -NCT03569228 -NCT03569254 -NCT03569306 -NCT03569384 -NCT03569397 -NCT03569527 -NCT03569540 -NCT03569631 -NCT03569787 -NCT03569800 -NCT03569826 -NCT03569943 -NCT03569969 -NCT03570021 -NCT03570138 -NCT03570177 -NCT03570190 -NCT03570307 -NCT03570359 -NCT03570398 -NCT03570775 -NCT03570905 -NCT03571139 -NCT03571191 -NCT03571737 -NCT03571828 -NCT03571867 -NCT03571997 -NCT03572088 -NCT03572296 -NCT03572348 -NCT03572452 -NCT03572504 -NCT03572556 -NCT03572569 -NCT03572634 -NCT03572647 -NCT03572712 -NCT03572738 -NCT03572803 -NCT03572855 -NCT03572959 -NCT03572998 -NCT03573141 -NCT03573271 -NCT03573284 -NCT03573362 -NCT03573531 -NCT03573635 -NCT03573765 -NCT03573921 -NCT03573947 -NCT03574038 -NCT03574051 -NCT03574207 -NCT03574298 -NCT03574610 -NCT03574636 -NCT03574792 -NCT03574805 -NCT03574831 -NCT03574922 -NCT03575104 -NCT03575143 -NCT03575195 -NCT03575221 -NCT03575247 -NCT03575312 -NCT03575351 -NCT03575377 -NCT03575390 -NCT03575507 -NCT03575871 -NCT03576183 -NCT03576430 -NCT03576456 -NCT03576534 -NCT03576755 -NCT03576768 -NCT03576794 -NCT03576820 -NCT03576833 -NCT03577184 -NCT03577236 -NCT03577262 -NCT03577613 -NCT03577795 -NCT03577873 -NCT03577925 -NCT03578042 -NCT03578263 -NCT03578289 -NCT03578445 -NCT03578679 -NCT03578705 -NCT03578952 -NCT03578991 -NCT03579147 -NCT03579303 -NCT03579368 -NCT03579485 -NCT03579550 -NCT03579576 -NCT03579654 -NCT03579966 -NCT03580044 -NCT03580135 -NCT03580252 -NCT03580434 -NCT03580525 -NCT03580577 -NCT03580655 -NCT03580681 -NCT03580928 -NCT03580941 -NCT03580967 -NCT03581201 -NCT03581253 -NCT03581279 -NCT03581292 -NCT03581344 -NCT03581370 -NCT03581422 -NCT03581435 -NCT03581565 -NCT03581591 -NCT03581630 -NCT03581682 -NCT03581695 -NCT03581838 -NCT03582059 -NCT03582111 -NCT03582176 -NCT03582319 -NCT03582462 -NCT03582566 -NCT03582670 -NCT03582683 -NCT03582722 -NCT03582891 -NCT03582969 -NCT03583164 -NCT03583242 -NCT03583294 -NCT03583320 -NCT03583489 -NCT03583541 -NCT03583567 -NCT03583606 -NCT03583697 -NCT03583879 -NCT03583905 -NCT03583931 -NCT03583957 -NCT03584048 -NCT03584269 -NCT03584360 -NCT03584425 -NCT03584438 -NCT03584776 -NCT03584802 -NCT03584815 -NCT03584919 -NCT03585114 -NCT03585257 -NCT03585426 -NCT03585569 -NCT03585673 -NCT03585712 -NCT03585933 -NCT03585972 -NCT03586089 -NCT03586167 -NCT03586206 -NCT03586427 -NCT03586544 -NCT03586687 -NCT03586700 -NCT03586778 -NCT03586804 -NCT03586908 -NCT03586986 -NCT03587012 -NCT03587116 -NCT03587168 -NCT03587233 -NCT03587246 -NCT03587402 -NCT03587714 -NCT03587740 -NCT03588065 -NCT03588182 -NCT03588208 -NCT03588234 -NCT03588247 -NCT03588286 -NCT03588299 -NCT03588325 -NCT03588364 -NCT03588533 -NCT03588676 -NCT03588689 -NCT03588832 -NCT03588845 -NCT03588949 -NCT03589014 -NCT03589053 -NCT03589196 -NCT03589300 -NCT03589430 -NCT03589443 -NCT03589573 -NCT03589612 -NCT03589716 -NCT03589768 -NCT03589820 -NCT03589833 -NCT03590080 -NCT03590145 -NCT03590197 -NCT03590249 -NCT03590353 -NCT03590366 -NCT03590418 -NCT03590457 -NCT03590509 -NCT03590626 -NCT03590665 -NCT03590743 -NCT03590899 -NCT03590912 -NCT03591263 -NCT03591380 -NCT03591419 -NCT03591497 -NCT03591523 -NCT03591562 -NCT03591575 -NCT03591952 -NCT03591978 -NCT03592043 -NCT03592082 -NCT03592212 -NCT03592316 -NCT03592342 -NCT03592381 -NCT03592719 -NCT03592810 -NCT03592849 -NCT03593057 -NCT03593447 -NCT03593512 -NCT03593551 -NCT03593798 -NCT03593902 -NCT03593993 -NCT03594058 -NCT03594292 -NCT03594383 -NCT03594409 -NCT03594487 -NCT03594669 -NCT03594799 -NCT03594916 -NCT03595150 -NCT03595189 -NCT03595436 -NCT03595462 -NCT03595553 -NCT03595566 -NCT03595579 -NCT03595618 -NCT03595735 -NCT03595813 -NCT03595852 -NCT03595982 -NCT03596320 -NCT03596372 -NCT03596411 -NCT03596437 -NCT03596476 -NCT03596541 -NCT03596554 -NCT03596567 -NCT03596619 -NCT03596684 -NCT03596736 -NCT03596814 -NCT03596827 -NCT03597022 -NCT03597061 -NCT03597100 -NCT03597347 -NCT03597360 -NCT03597373 -NCT03597451 -NCT03597620 -NCT03597737 -NCT03597763 -NCT03597802 -NCT03598010 -NCT03598088 -NCT03598270 -NCT03598387 -NCT03598491 -NCT03598647 -NCT03598842 -NCT03599011 -NCT03599180 -NCT03599193 -NCT03599258 -NCT03599323 -NCT03599453 -NCT03599648 -NCT03599700 -NCT03599804 -NCT03599921 -NCT03600051 -NCT03600064 -NCT03600207 -NCT03600324 -NCT03600363 -NCT03600454 -NCT03600597 -NCT03600701 -NCT03600714 -NCT03600766 -NCT03600805 -NCT03600818 -NCT03600974 -NCT03601039 -NCT03601208 -NCT03601247 -NCT03601260 -NCT03601273 -NCT03601325 -NCT03601533 -NCT03601832 -NCT03602027 -NCT03602079 -NCT03602313 -NCT03602326 -NCT03602534 -NCT03602612 -NCT03602729 -NCT03602976 -NCT03603015 -NCT03603067 -NCT03603171 -NCT03603197 -NCT03603275 -NCT03603314 -NCT03603327 -NCT03603405 -NCT03603418 -NCT03603444 -NCT03603483 -NCT03603522 -NCT03603587 -NCT03603691 -NCT03603821 -NCT03603899 -NCT03604042 -NCT03604094 -NCT03604198 -NCT03604250 -NCT03604276 -NCT03604289 -NCT03604315 -NCT03604497 -NCT03604692 -NCT03604848 -NCT03604978 -NCT03605069 -NCT03605173 -NCT03605329 -NCT03605355 -NCT03605368 -NCT03605459 -NCT03605511 -NCT03605563 -NCT03605745 -NCT03605979 -NCT03606031 -NCT03606057 -NCT03606135 -NCT03606330 -NCT03606395 -NCT03606408 -NCT03606486 -NCT03606642 -NCT03607162 -NCT03607292 -NCT03607357 -NCT03607396 -NCT03607474 -NCT03607487 -NCT03607929 -NCT03608215 -NCT03608228 -NCT03608293 -NCT03608423 -NCT03608527 -NCT03608566 -NCT03608670 -NCT03608748 -NCT03608761 -NCT03608787 -NCT03608943 -NCT03609073 -NCT03609099 -NCT03609255 -NCT03609476 -NCT03609541 -NCT03609554 -NCT03609580 -NCT03609593 -NCT03609684 -NCT03609931 -NCT03609944 -NCT03610100 -NCT03610178 -NCT03610243 -NCT03610256 -NCT03610308 -NCT03610386 -NCT03610412 -NCT03610646 -NCT03610776 -NCT03610997 -NCT03611127 -NCT03611244 -NCT03611296 -NCT03611777 -NCT03611855 -NCT03611920 -NCT03611972 -NCT03612011 -NCT03612089 -NCT03612323 -NCT03612440 -NCT03612531 -NCT03612648 -NCT03612830 -NCT03612973 -NCT03612986 -NCT03613025 -NCT03613116 -NCT03613129 -NCT03613207 -NCT03613493 -NCT03613519 -NCT03613545 -NCT03613584 -NCT03613623 -NCT03613779 -NCT03613974 -NCT03614000 -NCT03614169 -NCT03614221 -NCT03614299 -NCT03614364 -NCT03614468 -NCT03614481 -NCT03614663 -NCT03614754 -NCT03614767 -NCT03614793 -NCT03614806 -NCT03614975 -NCT03614988 -NCT03615352 -NCT03615547 -NCT03615599 -NCT03615859 -NCT03615976 -NCT03616223 -NCT03616262 -NCT03616600 -NCT03616626 -NCT03616678 -NCT03616847 -NCT03617016 -NCT03617029 -NCT03617133 -NCT03617172 -NCT03617354 -NCT03617393 -NCT03617497 -NCT03617614 -NCT03617640 -NCT03617835 -NCT03617900 -NCT03617965 -NCT03618082 -NCT03618095 -NCT03618277 -NCT03618329 -NCT03618407 -NCT03618433 -NCT03618576 -NCT03618680 -NCT03618797 -NCT03619161 -NCT03619200 -NCT03619317 -NCT03619369 -NCT03619408 -NCT03619486 -NCT03619512 -NCT03619551 -NCT03619642 -NCT03619733 -NCT03619746 -NCT03619811 -NCT03620084 -NCT03620123 -NCT03620253 -NCT03620422 -NCT03620500 -NCT03620526 -NCT03620877 -NCT03620942 -NCT03620955 -NCT03620994 -NCT03621020 -NCT03621046 -NCT03621072 -NCT03621085 -NCT03621137 -NCT03621150 -NCT03621215 -NCT03621280 -NCT03621449 -NCT03621462 -NCT03621527 -NCT03621553 -NCT03621579 -NCT03621696 -NCT03621735 -NCT03621995 -NCT03622008 -NCT03622060 -NCT03622216 -NCT03622541 -NCT03622554 -NCT03622723 -NCT03622892 -NCT03623074 -NCT03623191 -NCT03623230 -NCT03623295 -NCT03623516 -NCT03623620 -NCT03623672 -NCT03623789 -NCT03623802 -NCT03623867 -NCT03623893 -NCT03623945 -NCT03624075 -NCT03624088 -NCT03624114 -NCT03624179 -NCT03624374 -NCT03624517 -NCT03624556 -NCT03624608 -NCT03624920 -NCT03625089 -NCT03625102 -NCT03625167 -NCT03625375 -NCT03625401 -NCT03625570 -NCT03625622 -NCT03625752 -NCT03625817 -NCT03625882 -NCT03625973 -NCT03626090 -NCT03626168 -NCT03626246 -NCT03626298 -NCT03626311 -NCT03626324 -NCT03626428 -NCT03626519 -NCT03626558 -NCT03626675 -NCT03626753 -NCT03626766 -NCT03626779 -NCT03626805 -NCT03626896 -NCT03626974 -NCT03627234 -NCT03627364 -NCT03627507 -NCT03627611 -NCT03627702 -NCT03627962 -NCT03628066 -NCT03628313 -NCT03628456 -NCT03628508 -NCT03628534 -NCT03628885 -NCT03629275 -NCT03629288 -NCT03629522 -NCT03629587 -NCT03629613 -NCT03629743 -NCT03629808 -NCT03629899 -NCT03629977 -NCT03630081 -NCT03630120 -NCT03630419 -NCT03630653 -NCT03630900 -NCT03630926 -NCT03630939 -NCT03631108 -NCT03631290 -NCT03631420 -NCT03631446 -NCT03631472 -NCT03631615 -NCT03631771 -NCT03631992 -NCT03632187 -NCT03632200 -NCT03632486 -NCT03632512 -NCT03632525 -NCT03632551 -NCT03632577 -NCT03632629 -NCT03632642 -NCT03632772 -NCT03632811 -NCT03632876 -NCT03632928 -NCT03633149 -NCT03633227 -NCT03633279 -NCT03633305 -NCT03633344 -NCT03633383 -NCT03633500 -NCT03633552 -NCT03633565 -NCT03633695 -NCT03633708 -NCT03633721 -NCT03633799 -NCT03633812 -NCT03633877 -NCT03634098 -NCT03634371 -NCT03634384 -NCT03634397 -NCT03634748 -NCT03634891 -NCT03634930 -NCT03635008 -NCT03635034 -NCT03635060 -NCT03635164 -NCT03635294 -NCT03635359 -NCT03635372 -NCT03635385 -NCT03635424 -NCT03635450 -NCT03635528 -NCT03635580 -NCT03635632 -NCT03635710 -NCT03635749 -NCT03635918 -NCT03636373 -NCT03636568 -NCT03636659 -NCT03636711 -NCT03636737 -NCT03636841 -NCT03636958 -NCT03637023 -NCT03637348 -NCT03637400 -NCT03637413 -NCT03637595 -NCT03637673 -NCT03637777 -NCT03637985 -NCT03638063 -NCT03638479 -NCT03638531 -NCT03638752 -NCT03638830 -NCT03638921 -NCT03639051 -NCT03639103 -NCT03639207 -NCT03639272 -NCT03639298 -NCT03639376 -NCT03639415 -NCT03639428 -NCT03639454 -NCT03639545 -NCT03639571 -NCT03639688 -NCT03639727 -NCT03639805 -NCT03640078 -NCT03640260 -NCT03640273 -NCT03640351 -NCT03640429 -NCT03640533 -NCT03640819 -NCT03640832 -NCT03640871 -NCT03640897 -NCT03640962 -NCT03640975 -NCT03641040 -NCT03641157 -NCT03641261 -NCT03641274 -NCT03641339 -NCT03641430 -NCT03641443 -NCT03641482 -NCT03641573 -NCT03641599 -NCT03641638 -NCT03641742 -NCT03641872 -NCT03642210 -NCT03642418 -NCT03642522 -NCT03642613 -NCT03642626 -NCT03642678 -NCT03642769 -NCT03642782 -NCT03642938 -NCT03642964 -NCT03643016 -NCT03643055 -NCT03643146 -NCT03643172 -NCT03643237 -NCT03643263 -NCT03643471 -NCT03643692 -NCT03643783 -NCT03643835 -NCT03643861 -NCT03643900 -NCT03643978 -NCT03644108 -NCT03644186 -NCT03644212 -NCT03644368 -NCT03644550 -NCT03644602 -NCT03644615 -NCT03644797 -NCT03644810 -NCT03644849 -NCT03644966 -NCT03645031 -NCT03645057 -NCT03645239 -NCT03645291 -NCT03645434 -NCT03645447 -NCT03645785 -NCT03645889 -NCT03645993 -NCT03646019 -NCT03646669 -NCT03646955 -NCT03647007 -NCT03647046 -NCT03647072 -NCT03647241 -NCT03647293 -NCT03647358 -NCT03647397 -NCT03647462 -NCT03647540 -NCT03647631 -NCT03647904 -NCT03647917 -NCT03647995 -NCT03648190 -NCT03648502 -NCT03648528 -NCT03648827 -NCT03648879 -NCT03648944 -NCT03648996 -NCT03649256 -NCT03649295 -NCT03649399 -NCT03649516 -NCT03649542 -NCT03649906 -NCT03649919 -NCT03649932 -NCT03649958 -NCT03649971 -NCT03650023 -NCT03650062 -NCT03650075 -NCT03650140 -NCT03650283 -NCT03650296 -NCT03650361 -NCT03650387 -NCT03650439 -NCT03650543 -NCT03650673 -NCT03650712 -NCT03650738 -NCT03650920 -NCT03650933 -NCT03651167 -NCT03651349 -NCT03651362 -NCT03651388 -NCT03651492 -NCT03651570 -NCT03651739 -NCT03651765 -NCT03651947 -NCT03651999 -NCT03652246 -NCT03652285 -NCT03652415 -NCT03652480 -NCT03652571 -NCT03652688 -NCT03652714 -NCT03653039 -NCT03653104 -NCT03653117 -NCT03653143 -NCT03653156 -NCT03653221 -NCT03653299 -NCT03653338 -NCT03653364 -NCT03653585 -NCT03653741 -NCT03653780 -NCT03654053 -NCT03654144 -NCT03654300 -NCT03654326 -NCT03654456 -NCT03654469 -NCT03654521 -NCT03654664 -NCT03654794 -NCT03654872 -NCT03654911 -NCT03654950 -NCT03655093 -NCT03655171 -NCT03655197 -NCT03655236 -NCT03655340 -NCT03655366 -NCT03655392 -NCT03655496 -NCT03655522 -NCT03655665 -NCT03655873 -NCT03655938 -NCT03656003 -NCT03656055 -NCT03656159 -NCT03656172 -NCT03656185 -NCT03656211 -NCT03656237 -NCT03656575 -NCT03656627 -NCT03657056 -NCT03657303 -NCT03657316 -NCT03657329 -NCT03657667 -NCT03657732 -NCT03657745 -NCT03657849 -NCT03657888 -NCT03657914 -NCT03658031 -NCT03658096 -NCT03658356 -NCT03658369 -NCT03658447 -NCT03658668 -NCT03658759 -NCT03658863 -NCT03658889 -NCT03658915 -NCT03659032 -NCT03659227 -NCT03659331 -NCT03659487 -NCT03659617 -NCT03659695 -NCT03659864 -NCT03659981 -NCT03660098 -NCT03660111 -NCT03660163 -NCT03660176 -NCT03660189 -NCT03660293 -NCT03660592 -NCT03660605 -NCT03660631 -NCT03660761 -NCT03660852 -NCT03660917 -NCT03661021 -NCT03661086 -NCT03661307 -NCT03661398 -NCT03661541 -NCT03661684 -NCT03661697 -NCT03661762 -NCT03661801 -NCT03661892 -NCT03662048 -NCT03662269 -NCT03662438 -NCT03662516 -NCT03662555 -NCT03662789 -NCT03662802 -NCT03662893 -NCT03662906 -NCT03663062 -NCT03663088 -NCT03663153 -NCT03663842 -NCT03663855 -NCT03663959 -NCT03664063 -NCT03664167 -NCT03664206 -NCT03664531 -NCT03664609 -NCT03664674 -NCT03664726 -NCT03664739 -NCT03664752 -NCT03664830 -NCT03664934 -NCT03665142 -NCT03665194 -NCT03665441 -NCT03665454 -NCT03665493 -NCT03665519 -NCT03665584 -NCT03665779 -NCT03665844 -NCT03665974 -NCT03666052 -NCT03666117 -NCT03666260 -NCT03666351 -NCT03666429 -NCT03666520 -NCT03666572 -NCT03666624 -NCT03666676 -NCT03666962 -NCT03667027 -NCT03667222 -NCT03667469 -NCT03667534 -NCT03667664 -NCT03667677 -NCT03667742 -NCT03667820 -NCT03667833 -NCT03667950 -NCT03668028 -NCT03668067 -NCT03668457 -NCT03668522 -NCT03668574 -NCT03668808 -NCT03668821 -NCT03668977 -NCT03669146 -NCT03669237 -NCT03669432 -NCT03669549 -NCT03669562 -NCT03669614 -NCT03669666 -NCT03669705 -NCT03669770 -NCT03669900 -NCT03669939 -NCT03669952 -NCT03669978 -NCT03670056 -NCT03670134 -NCT03670160 -NCT03670173 -NCT03670251 -NCT03670355 -NCT03670394 -NCT03670459 -NCT03670563 -NCT03670576 -NCT03670693 -NCT03670706 -NCT03670719 -NCT03670862 -NCT03670927 -NCT03670966 -NCT03671083 -NCT03671343 -NCT03671395 -NCT03671798 -NCT03671915 -NCT03671928 -NCT03672032 -NCT03672149 -NCT03672266 -NCT03672318 -NCT03672422 -NCT03672500 -NCT03672617 -NCT03672799 -NCT03672851 -NCT03672877 -NCT03672955 -NCT03672968 -NCT03672994 -NCT03673072 -NCT03673085 -NCT03673202 -NCT03673319 -NCT03673410 -NCT03673618 -NCT03673813 -NCT03673826 -NCT03673865 -NCT03673904 -NCT03674047 -NCT03674086 -NCT03674281 -NCT03674411 -NCT03674593 -NCT03674632 -NCT03675035 -NCT03675152 -NCT03675256 -NCT03675269 -NCT03675282 -NCT03675425 -NCT03675581 -NCT03675646 -NCT03675841 -NCT03675958 -NCT03675984 -NCT03676023 -NCT03676036 -NCT03676049 -NCT03676257 -NCT03676309 -NCT03676426 -NCT03676530 -NCT03676556 -NCT03676686 -NCT03676712 -NCT03676777 -NCT03676790 -NCT03676868 -NCT03676933 -NCT03676972 -NCT03677154 -NCT03677206 -NCT03677245 -NCT03677349 -NCT03677362 -NCT03677401 -NCT03677544 -NCT03677648 -NCT03677661 -NCT03677713 -NCT03678025 -NCT03678090 -NCT03678233 -NCT03678259 -NCT03678272 -NCT03678389 -NCT03678519 -NCT03678922 -NCT03678935 -NCT03678948 -NCT03679091 -NCT03679169 -NCT03679208 -NCT03679286 -NCT03679312 -NCT03679377 -NCT03679507 -NCT03679520 -NCT03679663 -NCT03679819 -NCT03679910 -NCT03679975 -NCT03680365 -NCT03680495 -NCT03680612 -NCT03680651 -NCT03680872 -NCT03680989 -NCT03681015 -NCT03681197 -NCT03681392 -NCT03681418 -NCT03681470 -NCT03681665 -NCT03681951 -NCT03681964 -NCT03682094 -NCT03682211 -NCT03682380 -NCT03682458 -NCT03682549 -NCT03682614 -NCT03682666 -NCT03682939 -NCT03683043 -NCT03683069 -NCT03683121 -NCT03683134 -NCT03683212 -NCT03683342 -NCT03683615 -NCT03683849 -NCT03683875 -NCT03684083 -NCT03684148 -NCT03684161 -NCT03684265 -NCT03684278 -NCT03684330 -NCT03684408 -NCT03684499 -NCT03684512 -NCT03684629 -NCT03684772 -NCT03684837 -NCT03684850 -NCT03684928 -NCT03685461 -NCT03685526 -NCT03685591 -NCT03685617 -NCT03685721 -NCT03685929 -NCT03686072 -NCT03686371 -NCT03686384 -NCT03686397 -NCT03686436 -NCT03686475 -NCT03686514 -NCT03686527 -NCT03686592 -NCT03686618 -NCT03686644 -NCT03686787 -NCT03686852 -NCT03686891 -NCT03687190 -NCT03687216 -NCT03687229 -NCT03687424 -NCT03687502 -NCT03687606 -NCT03687710 -NCT03687762 -NCT03687814 -NCT03687866 -NCT03687944 -NCT03688269 -NCT03688295 -NCT03688321 -NCT03688386 -NCT03688685 -NCT03688971 -NCT03688984 -NCT03689049 -NCT03689335 -NCT03689361 -NCT03689439 -NCT03689517 -NCT03689699 -NCT03689972 -NCT03690024 -NCT03690115 -NCT03690245 -NCT03690349 -NCT03690414 -NCT03690544 -NCT03691077 -NCT03691181 -NCT03691272 -NCT03691311 -NCT03691337 -NCT03691857 -NCT03691870 -NCT03691883 -NCT03691896 -NCT03691974 -NCT03692013 -NCT03692039 -NCT03692221 -NCT03692403 -NCT03692793 -NCT03692832 -NCT03692845 -NCT03692858 -NCT03693261 -NCT03693365 -NCT03693469 -NCT03693586 -NCT03693807 -NCT03693820 -NCT03693833 -NCT03693898 -NCT03693950 -NCT03694158 -NCT03694197 -NCT03694535 -NCT03694626 -NCT03694990 -NCT03695029 -NCT03695042 -NCT03695120 -NCT03695250 -NCT03695276 -NCT03695315 -NCT03695705 -NCT03695731 -NCT03695848 -NCT03695965 -NCT03695978 -NCT03696030 -NCT03696108 -NCT03696121 -NCT03696394 -NCT03696524 -NCT03696602 -NCT03696784 -NCT03696940 -NCT03696979 -NCT03697096 -NCT03697109 -NCT03697161 -NCT03697226 -NCT03697395 -NCT03697512 -NCT03697655 -NCT03697863 -NCT03697876 -NCT03697889 -NCT03697993 -NCT03698071 -NCT03698266 -NCT03698461 -NCT03698487 -NCT03698539 -NCT03698630 -NCT03698721 -NCT03698903 -NCT03698994 -NCT03699098 -NCT03699124 -NCT03699176 -NCT03699202 -NCT03699280 -NCT03699293 -NCT03699514 -NCT03699722 -NCT03699735 -NCT03699800 -NCT03700229 -NCT03700281 -NCT03700450 -NCT03700502 -NCT03700710 -NCT03700814 -NCT03700983 -NCT03701061 -NCT03701282 -NCT03701477 -NCT03701490 -NCT03701737 -NCT03701776 -NCT03702010 -NCT03702023 -NCT03702101 -NCT03702218 -NCT03702244 -NCT03702296 -NCT03702309 -NCT03702478 -NCT03702582 -NCT03702647 -NCT03702829 -NCT03702998 -NCT03703011 -NCT03703024 -NCT03703115 -NCT03703323 -NCT03703479 -NCT03703570 -NCT03703830 -NCT03703882 -NCT03703986 -NCT03703999 -NCT03704051 -NCT03704233 -NCT03704259 -NCT03704298 -NCT03704311 -NCT03704584 -NCT03704610 -NCT03704649 -NCT03704922 -NCT03704987 -NCT03705078 -NCT03705117 -NCT03705130 -NCT03705325 -NCT03705377 -NCT03705390 -NCT03705403 -NCT03705416 -NCT03705507 -NCT03705533 -NCT03705650 -NCT03705832 -NCT03706079 -NCT03706131 -NCT03706183 -NCT03706586 -NCT03706599 -NCT03706768 -NCT03706820 -NCT03706833 -NCT03707353 -NCT03707431 -NCT03707444 -NCT03707496 -NCT03707600 -NCT03708003 -NCT03708120 -NCT03708237 -NCT03708263 -NCT03708302 -NCT03708341 -NCT03708354 -NCT03708471 -NCT03708497 -NCT03708679 -NCT03708692 -NCT03708744 -NCT03708783 -NCT03708796 -NCT03708874 -NCT03708900 -NCT03708965 -NCT03708978 -NCT03709030 -NCT03709069 -NCT03709121 -NCT03709134 -NCT03709238 -NCT03709290 -NCT03709329 -NCT03709381 -NCT03709758 -NCT03709810 -NCT03709849 -NCT03709888 -NCT03710148 -NCT03710187 -NCT03710226 -NCT03710278 -NCT03710356 -NCT03710369 -NCT03710499 -NCT03710525 -NCT03710577 -NCT03710772 -NCT03710798 -NCT03710889 -NCT03710902 -NCT03710928 -NCT03710954 -NCT03710993 -NCT03711214 -NCT03711448 -NCT03711461 -NCT03711695 -NCT03712020 -NCT03712085 -NCT03712098 -NCT03712345 -NCT03712683 -NCT03712722 -NCT03712800 -NCT03712865 -NCT03712891 -NCT03712982 -NCT03712995 -NCT03713047 -NCT03713060 -NCT03713203 -NCT03713229 -NCT03713411 -NCT03713528 -NCT03713671 -NCT03713879 -NCT03714165 -NCT03714282 -NCT03714412 -NCT03714607 -NCT03714659 -NCT03714763 -NCT03715140 -NCT03715231 -NCT03715322 -NCT03715374 -NCT03715413 -NCT03715478 -NCT03715569 -NCT03715673 -NCT03715764 -NCT03715881 -NCT03715933 -NCT03716128 -NCT03716180 -NCT03716232 -NCT03716245 -NCT03716258 -NCT03716284 -NCT03716635 -NCT03716661 -NCT03716739 -NCT03716843 -NCT03717051 -NCT03717207 -NCT03717428 -NCT03717506 -NCT03717532 -NCT03717584 -NCT03717714 -NCT03717844 -NCT03717857 -NCT03717883 -NCT03717896 -NCT03718000 -NCT03718013 -NCT03718104 -NCT03718234 -NCT03718325 -NCT03718442 -NCT03718559 -NCT03718637 -NCT03718728 -NCT03718767 -NCT03718910 -NCT03718949 -NCT03719196 -NCT03719248 -NCT03719274 -NCT03719547 -NCT03719560 -NCT03719742 -NCT03719807 -NCT03719846 -NCT03719859 -NCT03719885 -NCT03719950 -NCT03720132 -NCT03720197 -NCT03720392 -NCT03720470 -NCT03720574 -NCT03720626 -NCT03720639 -NCT03720886 -NCT03721146 -NCT03721159 -NCT03721497 -NCT03721523 -NCT03721601 -NCT03721627 -NCT03721770 -NCT03721848 -NCT03721952 -NCT03721978 -NCT03721991 -NCT03722251 -NCT03722277 -NCT03722290 -NCT03722329 -NCT03722394 -NCT03722472 -NCT03722537 -NCT03722602 -NCT03722628 -NCT03722771 -NCT03722810 -NCT03722888 -NCT03722914 -NCT03723044 -NCT03723330 -NCT03723564 -NCT03723824 -NCT03723902 -NCT03724461 -NCT03724617 -NCT03724773 -NCT03724825 -NCT03724851 -NCT03724877 -NCT03724903 -NCT03725007 -NCT03725059 -NCT03725202 -NCT03725306 -NCT03725384 -NCT03725553 -NCT03725696 -NCT03726385 -NCT03726398 -NCT03726424 -NCT03726658 -NCT03726697 -NCT03726749 -NCT03726801 -NCT03726879 -NCT03726983 -NCT03727308 -NCT03727360 -NCT03727373 -NCT03727412 -NCT03727516 -NCT03727646 -NCT03727672 -NCT03727685 -NCT03727841 -NCT03727919 -NCT03728036 -NCT03728062 -NCT03728114 -NCT03728140 -NCT03728179 -NCT03728218 -NCT03728231 -NCT03728296 -NCT03728387 -NCT03728426 -NCT03728491 -NCT03728595 -NCT03728660 -NCT03728712 -NCT03728777 -NCT03728803 -NCT03728907 -NCT03729271 -NCT03729323 -NCT03729375 -NCT03729479 -NCT03729544 -NCT03729817 -NCT03729882 -NCT03729921 -NCT03729947 -NCT03730181 -NCT03730233 -NCT03730311 -NCT03730519 -NCT03730662 -NCT03730714 -NCT03730727 -NCT03730974 -NCT03731078 -NCT03731247 -NCT03731260 -NCT03731351 -NCT03731624 -NCT03731663 -NCT03731858 -NCT03731988 -NCT03732118 -NCT03732261 -NCT03732365 -NCT03732391 -NCT03732469 -NCT03732664 -NCT03732703 -NCT03732859 -NCT03732872 -NCT03732937 -NCT03733067 -NCT03733171 -NCT03733210 -NCT03733249 -NCT03733821 -NCT03733886 -NCT03734120 -NCT03734146 -NCT03734224 -NCT03734237 -NCT03734263 -NCT03734302 -NCT03734354 -NCT03734523 -NCT03734562 -NCT03734588 -NCT03734900 -NCT03735030 -NCT03735186 -NCT03735199 -NCT03735277 -NCT03735303 -NCT03735316 -NCT03735355 -NCT03735511 -NCT03735654 -NCT03735693 -NCT03735849 -NCT03735862 -NCT03735979 -NCT03736057 -NCT03736083 -NCT03736109 -NCT03736122 -NCT03736174 -NCT03736265 -NCT03736330 -NCT03736369 -NCT03736382 -NCT03736811 -NCT03736824 -NCT03736902 -NCT03736941 -NCT03737175 -NCT03737344 -NCT03737448 -NCT03737526 -NCT03737630 -NCT03737708 -NCT03737721 -NCT03737786 -NCT03737851 -NCT03737890 -NCT03737903 -NCT03738072 -NCT03738358 -NCT03738540 -NCT03738618 -NCT03738761 -NCT03738813 -NCT03738865 -NCT03738969 -NCT03738982 -NCT03739047 -NCT03739190 -NCT03739398 -NCT03739502 -NCT03739554 -NCT03739567 -NCT03739606 -NCT03739736 -NCT03739775 -NCT03739814 -NCT03739840 -NCT03739957 -NCT03740685 -NCT03740737 -NCT03740750 -NCT03740789 -NCT03740893 -NCT03740906 -NCT03740958 -NCT03741283 -NCT03741322 -NCT03741803 -NCT03741972 -NCT03742024 -NCT03742128 -NCT03742336 -NCT03742362 -NCT03742427 -NCT03742479 -NCT03742635 -NCT03742843 -NCT03742869 -NCT03743038 -NCT03743467 -NCT03743649 -NCT03743688 -NCT03743740 -NCT03743792 -NCT03743844 -NCT03744234 -NCT03744338 -NCT03744585 -NCT03744650 -NCT03744676 -NCT03744728 -NCT03744793 -NCT03744975 -NCT03744988 -NCT03745014 -NCT03745027 -NCT03745105 -NCT03745157 -NCT03745183 -NCT03745196 -NCT03745287 -NCT03745365 -NCT03745586 -NCT03745690 -NCT03745937 -NCT03746184 -NCT03746665 -NCT03746847 -NCT03747029 -NCT03747042 -NCT03747185 -NCT03747198 -NCT03747289 -NCT03747510 -NCT03747614 -NCT03747679 -NCT03747796 -NCT03747874 -NCT03748017 -NCT03748563 -NCT03748589 -NCT03748966 -NCT03749096 -NCT03749109 -NCT03749252 -NCT03749447 -NCT03749499 -NCT03749564 -NCT03749707 -NCT03749720 -NCT03750032 -NCT03750149 -NCT03750370 -NCT03750396 -NCT03750656 -NCT03750760 -NCT03750773 -NCT03750968 -NCT03751241 -NCT03751462 -NCT03751644 -NCT03751800 -NCT03751878 -NCT03751930 -NCT03751956 -NCT03751969 -NCT03752047 -NCT03752060 -NCT03752164 -NCT03752190 -NCT03752567 -NCT03752619 -NCT03752645 -NCT03752697 -NCT03752710 -NCT03752827 -NCT03752983 -NCT03753035 -NCT03753100 -NCT03753178 -NCT03753373 -NCT03753438 -NCT03753542 -NCT03753633 -NCT03753672 -NCT03753724 -NCT03753802 -NCT03753841 -NCT03753854 -NCT03753893 -NCT03754075 -NCT03754335 -NCT03754361 -NCT03754387 -NCT03754465 -NCT03754491 -NCT03754517 -NCT03754608 -NCT03754621 -NCT03754725 -NCT03754751 -NCT03754777 -NCT03754959 -NCT03754985 -NCT03754998 -NCT03755037 -NCT03755193 -NCT03755219 -NCT03755388 -NCT03755505 -NCT03755544 -NCT03755726 -NCT03755752 -NCT03755765 -NCT03755869 -NCT03755973 -NCT03756116 -NCT03756155 -NCT03756168 -NCT03756454 -NCT03756467 -NCT03756480 -NCT03756493 -NCT03756519 -NCT03756818 -NCT03756896 -NCT03756909 -NCT03757078 -NCT03757143 -NCT03757169 -NCT03757364 -NCT03757442 -NCT03757572 -NCT03757611 -NCT03758183 -NCT03758222 -NCT03758326 -NCT03758508 -NCT03758534 -NCT03758781 -NCT03758807 -NCT03758820 -NCT03759184 -NCT03759301 -NCT03759366 -NCT03759470 -NCT03759483 -NCT03759613 -NCT03759691 -NCT03759730 -NCT03759756 -NCT03759821 -NCT03759951 -NCT03760094 -NCT03760120 -NCT03760380 -NCT03760406 -NCT03760627 -NCT03760666 -NCT03760835 -NCT03760861 -NCT03760887 -NCT03761238 -NCT03761498 -NCT03761667 -NCT03762122 -NCT03762174 -NCT03762382 -NCT03762473 -NCT03762525 -NCT03762785 -NCT03762902 -NCT03762967 -NCT03762980 -NCT03763019 -NCT03763175 -NCT03763383 -NCT03763513 -NCT03763552 -NCT03763565 -NCT03763604 -NCT03763617 -NCT03763734 -NCT03763799 -NCT03763955 -NCT03764020 -NCT03764072 -NCT03764085 -NCT03764163 -NCT03764306 -NCT03764735 -NCT03764761 -NCT03764865 -NCT03764995 -NCT03765021 -NCT03765073 -NCT03765268 -NCT03765346 -NCT03765424 -NCT03765593 -NCT03765632 -NCT03765684 -NCT03765762 -NCT03765775 -NCT03765788 -NCT03765801 -NCT03765892 -NCT03766061 -NCT03766074 -NCT03766100 -NCT03766243 -NCT03766373 -NCT03766386 -NCT03766412 -NCT03766854 -NCT03766984 -NCT03767179 -NCT03767257 -NCT03767790 -NCT03767881 -NCT03767959 -NCT03767998 -NCT03768115 -NCT03768661 -NCT03768765 -NCT03768830 -NCT03768882 -NCT03769090 -NCT03769116 -NCT03769246 -NCT03769376 -NCT03769688 -NCT03769961 -NCT03769987 -NCT03770026 -NCT03770234 -NCT03770273 -NCT03770442 -NCT03770546 -NCT03770585 -NCT03770611 -NCT03770715 -NCT03770754 -NCT03770884 -NCT03770897 -NCT03770962 -NCT03771027 -NCT03771222 -NCT03771287 -NCT03771378 -NCT03771456 -NCT03771469 -NCT03771768 -NCT03771794 -NCT03771989 -NCT03772158 -NCT03772561 -NCT03772587 -NCT03772626 -NCT03772912 -NCT03773107 -NCT03773224 -NCT03773263 -NCT03773302 -NCT03773666 -NCT03773718 -NCT03773809 -NCT03773991 -NCT03774017 -NCT03774121 -NCT03774199 -NCT03774277 -NCT03774355 -NCT03774446 -NCT03774563 -NCT03774784 -NCT03774810 -NCT03774862 -NCT03774888 -NCT03774966 -NCT03774992 -NCT03775096 -NCT03775148 -NCT03775161 -NCT03775239 -NCT03775291 -NCT03775629 -NCT03775733 -NCT03775811 -NCT03776006 -NCT03776110 -NCT03776175 -NCT03776318 -NCT03776383 -NCT03776669 -NCT03776851 -NCT03776955 -NCT03777046 -NCT03777319 -NCT03777488 -NCT03777722 -NCT03777774 -NCT03777969 -NCT03778021 -NCT03778060 -NCT03778086 -NCT03778125 -NCT03778138 -NCT03778151 -NCT03778359 -NCT03778411 -NCT03778593 -NCT03778658 -NCT03778879 -NCT03779152 -NCT03779165 -NCT03779477 -NCT03779503 -NCT03779529 -NCT03779568 -NCT03779581 -NCT03779594 -NCT03779620 -NCT03779646 -NCT03779659 -NCT03779737 -NCT03779750 -NCT03779815 -NCT03780153 -NCT03780296 -NCT03780309 -NCT03780387 -NCT03780426 -NCT03780569 -NCT03780712 -NCT03780972 -NCT03781011 -NCT03781050 -NCT03781089 -NCT03781739 -NCT03781895 -NCT03781908 -NCT03782051 -NCT03782480 -NCT03782701 -NCT03782714 -NCT03782727 -NCT03782870 -NCT03783143 -NCT03783182 -NCT03783273 -NCT03783312 -NCT03783572 -NCT03783585 -NCT03783728 -NCT03783780 -NCT03783897 -NCT03784027 -NCT03784157 -NCT03784183 -NCT03784339 -NCT03784430 -NCT03784456 -NCT03784547 -NCT03784703 -NCT03784729 -NCT03784742 -NCT03784794 -NCT03785015 -NCT03785210 -NCT03785262 -NCT03785366 -NCT03785418 -NCT03785457 -NCT03785678 -NCT03785756 -NCT03785795 -NCT03785886 -NCT03786289 -NCT03786367 -NCT03786406 -NCT03786666 -NCT03786744 -NCT03786770 -NCT03786861 -NCT03786913 -NCT03787017 -NCT03787043 -NCT03787056 -NCT03787303 -NCT03787511 -NCT03787589 -NCT03787914 -NCT03787940 -NCT03787953 -NCT03787979 -NCT03788031 -NCT03788057 -NCT03788109 -NCT03788122 -NCT03788161 -NCT03788174 -NCT03788434 -NCT03788460 -NCT03788512 -NCT03788590 -NCT03788733 -NCT03788772 -NCT03788850 -NCT03788889 -NCT03788954 -NCT03788967 -NCT03789357 -NCT03789422 -NCT03789552 -NCT03789656 -NCT03789838 -NCT03790072 -NCT03790098 -NCT03790215 -NCT03790241 -NCT03790592 -NCT03790631 -NCT03790748 -NCT03790826 -NCT03790852 -NCT03791060 -NCT03791164 -NCT03791229 -NCT03791242 -NCT03791515 -NCT03791528 -NCT03791658 -NCT03791814 -NCT03792165 -NCT03792191 -NCT03792230 -NCT03792321 -NCT03792425 -NCT03792438 -NCT03792477 -NCT03792490 -NCT03792503 -NCT03792529 -NCT03792555 -NCT03792620 -NCT03792659 -NCT03792789 -NCT03792802 -NCT03792919 -NCT03792971 -NCT03793049 -NCT03793114 -NCT03793140 -NCT03793192 -NCT03793348 -NCT03793491 -NCT03793595 -NCT03793686 -NCT03794102 -NCT03794219 -NCT03794284 -NCT03794557 -NCT03794596 -NCT03794609 -NCT03794661 -NCT03794713 -NCT03794726 -NCT03794752 -NCT03794791 -NCT03794830 -NCT03794843 -NCT03794895 -NCT03794999 -NCT03795012 -NCT03795194 -NCT03795233 -NCT03795285 -NCT03795350 -NCT03795584 -NCT03795597 -NCT03795662 -NCT03795675 -NCT03795714 -NCT03795935 -NCT03795987 -NCT03796026 -NCT03796052 -NCT03796091 -NCT03796143 -NCT03796247 -NCT03796416 -NCT03796455 -NCT03796481 -NCT03796520 -NCT03796598 -NCT03796637 -NCT03796650 -NCT03796767 -NCT03796988 -NCT03797131 -NCT03797157 -NCT03797235 -NCT03797326 -NCT03797469 -NCT03797508 -NCT03797547 -NCT03797833 -NCT03797846 -NCT03797989 -NCT03798002 -NCT03798015 -NCT03798080 -NCT03798119 -NCT03798158 -NCT03798444 -NCT03798457 -NCT03798561 -NCT03798704 -NCT03798769 -NCT03798860 -NCT03798899 -NCT03799406 -NCT03799445 -NCT03799484 -NCT03799510 -NCT03799575 -NCT03799614 -NCT03799705 -NCT03799887 -NCT03799926 -NCT03799952 -NCT03799991 -NCT03800290 -NCT03800446 -NCT03800498 -NCT03800524 -NCT03800615 -NCT03800654 -NCT03800927 -NCT03801213 -NCT03801356 -NCT03801395 -NCT03801499 -NCT03801863 -NCT03802019 -NCT03802045 -NCT03802188 -NCT03802448 -NCT03802474 -NCT03802487 -NCT03802734 -NCT03802799 -NCT03802851 -NCT03802903 -NCT03802994 -NCT03803007 -NCT03803033 -NCT03803046 -NCT03803215 -NCT03803293 -NCT03803319 -NCT03803410 -NCT03803943 -NCT03803969 -NCT03804502 -NCT03804580 -NCT03804671 -NCT03804710 -NCT03804736 -NCT03804775 -NCT03804983 -NCT03805165 -NCT03805282 -NCT03805334 -NCT03805477 -NCT03805581 -NCT03805607 -NCT03805711 -NCT03805750 -NCT03805776 -NCT03805828 -NCT03805906 -NCT03805932 -NCT03806036 -NCT03806062 -NCT03806088 -NCT03806153 -NCT03806205 -NCT03806322 -NCT03806543 -NCT03806595 -NCT03806647 -NCT03806894 -NCT03806985 -NCT03807024 -NCT03807050 -NCT03807076 -NCT03807414 -NCT03807570 -NCT03807830 -NCT03807856 -NCT03808012 -NCT03808038 -NCT03808168 -NCT03808311 -NCT03808415 -NCT03808428 -NCT03808675 -NCT03808779 -NCT03808831 -NCT03808883 -NCT03808935 -NCT03809026 -NCT03809065 -NCT03809104 -NCT03809117 -NCT03809221 -NCT03809338 -NCT03809585 -NCT03809832 -NCT03810196 -NCT03810261 -NCT03810287 -NCT03810326 -NCT03810443 -NCT03810482 -NCT03810716 -NCT03810781 -NCT03810846 -NCT03811002 -NCT03811106 -NCT03811145 -NCT03811288 -NCT03811405 -NCT03811431 -NCT03811535 -NCT03811743 -NCT03811769 -NCT03811782 -NCT03811951 -NCT03811964 -NCT03812016 -NCT03812068 -NCT03812198 -NCT03812211 -NCT03812263 -NCT03812302 -NCT03812341 -NCT03812367 -NCT03812393 -NCT03812432 -NCT03812692 -NCT03812744 -NCT03812913 -NCT03813056 -NCT03813173 -NCT03813498 -NCT03813524 -NCT03813576 -NCT03813706 -NCT03813732 -NCT03813810 -NCT03814161 -NCT03814239 -NCT03814317 -NCT03814343 -NCT03814408 -NCT03814577 -NCT03814668 -NCT03814694 -NCT03814720 -NCT03814837 -NCT03815149 -NCT03815175 -NCT03815214 -NCT03815279 -NCT03815318 -NCT03815331 -NCT03815357 -NCT03815370 -NCT03815448 -NCT03815526 -NCT03815747 -NCT03815812 -NCT03815838 -NCT03815968 -NCT03816098 -NCT03816462 -NCT03816540 -NCT03817216 -NCT03817242 -NCT03817385 -NCT03817645 -NCT03817762 -NCT03817840 -NCT03817996 -NCT03818529 -NCT03818555 -NCT03818568 -NCT03818646 -NCT03818763 -NCT03818802 -NCT03818815 -NCT03818880 -NCT03818919 -NCT03819062 -NCT03819140 -NCT03819166 -NCT03819257 -NCT03819348 -NCT03819478 -NCT03819504 -NCT03819569 -NCT03819777 -NCT03819907 -NCT03820011 -NCT03820089 -NCT03820115 -NCT03820206 -NCT03820414 -NCT03820427 -NCT03820453 -NCT03820518 -NCT03820570 -NCT03820674 -NCT03820791 -NCT03820830 -NCT03820843 -NCT03820856 -NCT03820999 -NCT03821038 -NCT03821051 -NCT03821116 -NCT03821194 -NCT03821207 -NCT03821285 -NCT03821675 -NCT03821870 -NCT03822156 -NCT03822195 -NCT03822494 -NCT03822520 -NCT03822533 -NCT03822650 -NCT03822780 -NCT03822871 -NCT03823027 -NCT03823040 -NCT03823053 -NCT03823404 -NCT03823560 -NCT03823742 -NCT03823846 -NCT03823859 -NCT03824002 -NCT03824223 -NCT03824379 -NCT03824431 -NCT03824457 -NCT03824587 -NCT03824665 -NCT03824717 -NCT03824834 -NCT03824886 -NCT03824912 -NCT03824977 -NCT03824990 -NCT03825042 -NCT03825055 -NCT03825159 -NCT03825237 -NCT03825289 -NCT03825302 -NCT03825445 -NCT03825484 -NCT03825757 -NCT03825770 -NCT03825783 -NCT03825835 -NCT03825848 -NCT03825926 -NCT03825991 -NCT03826030 -NCT03826056 -NCT03826095 -NCT03826446 -NCT03826524 -NCT03827018 -NCT03827070 -NCT03827317 -NCT03827395 -NCT03827447 -NCT03827668 -NCT03827837 -NCT03827850 -NCT03828071 -NCT03828123 -NCT03828136 -NCT03828201 -NCT03828279 -NCT03828422 -NCT03828630 -NCT03828864 -NCT03828903 -NCT03828929 -NCT03829059 -NCT03829098 -NCT03829111 -NCT03829475 -NCT03829631 -NCT03829683 -NCT03829904 -NCT03829917 -NCT03829930 -NCT03829943 -NCT03830060 -NCT03830073 -NCT03830190 -NCT03830242 -NCT03830281 -NCT03830398 -NCT03830437 -NCT03830502 -NCT03830580 -NCT03830658 -NCT03830671 -NCT03830697 -NCT03830775 -NCT03830905 -NCT03830957 -NCT03831035 -NCT03831256 -NCT03831269 -NCT03831334 -NCT03831373 -NCT03831386 -NCT03831464 -NCT03831477 -NCT03831516 -NCT03831581 -NCT03831724 -NCT03831893 -NCT03831906 -NCT03831958 -NCT03831971 -NCT03832010 -NCT03832049 -NCT03832283 -NCT03832647 -NCT03832712 -NCT03832907 -NCT03832959 -NCT03832972 -NCT03832998 -NCT03833011 -NCT03833206 -NCT03833232 -NCT03833388 -NCT03833414 -NCT03833648 -NCT03833687 -NCT03833752 -NCT03833869 -NCT03833973 -NCT03834012 -NCT03834038 -NCT03834077 -NCT03834194 -NCT03834246 -NCT03834311 -NCT03834350 -NCT03834402 -NCT03834454 -NCT03834480 -NCT03834727 -NCT03834779 -NCT03834805 -NCT03834961 -NCT03835000 -NCT03835065 -NCT03835299 -NCT03835325 -NCT03835351 -NCT03835624 -NCT03835741 -NCT03835910 -NCT03836040 -NCT03836053 -NCT03836274 -NCT03836287 -NCT03836300 -NCT03836430 -NCT03836495 -NCT03836521 -NCT03836534 -NCT03836586 -NCT03836807 -NCT03836872 -NCT03836885 -NCT03836937 -NCT03837028 -NCT03837301 -NCT03837444 -NCT03837574 -NCT03837652 -NCT03837691 -NCT03837717 -NCT03837769 -NCT03837834 -NCT03837938 -NCT03837951 -NCT03838120 -NCT03838237 -NCT03838484 -NCT03838575 -NCT03838653 -NCT03838913 -NCT03838952 -NCT03838991 -NCT03839160 -NCT03839173 -NCT03839420 -NCT03839433 -NCT03839459 -NCT03839576 -NCT03839615 -NCT03839836 -NCT03839901 -NCT03839992 -NCT03840005 -NCT03840148 -NCT03840265 -NCT03840317 -NCT03840538 -NCT03840564 -NCT03840603 -NCT03840980 -NCT03841006 -NCT03841032 -NCT03841045 -NCT03841162 -NCT03841240 -NCT03841266 -NCT03841318 -NCT03841383 -NCT03841422 -NCT03841461 -NCT03841526 -NCT03841617 -NCT03841721 -NCT03841734 -NCT03842007 -NCT03842059 -NCT03842215 -NCT03842254 -NCT03842358 -NCT03842566 -NCT03842605 -NCT03842826 -NCT03842852 -NCT03843073 -NCT03843151 -NCT03843177 -NCT03843346 -NCT03843437 -NCT03843554 -NCT03843645 -NCT03843710 -NCT03843814 -NCT03843931 -NCT03844100 -NCT03844490 -NCT03844568 -NCT03844711 -NCT03844776 -NCT03845231 -NCT03845608 -NCT03845647 -NCT03845764 -NCT03846024 -NCT03846323 -NCT03846336 -NCT03846349 -NCT03846401 -NCT03846427 -NCT03846492 -NCT03846570 -NCT03846674 -NCT03846700 -NCT03846804 -NCT03846817 -NCT03846869 -NCT03846908 -NCT03846934 -NCT03847064 -NCT03847103 -NCT03847194 -NCT03847506 -NCT03847558 -NCT03847571 -NCT03847688 -NCT03847753 -NCT03847896 -NCT03848013 -NCT03848039 -NCT03848117 -NCT03848195 -NCT03848260 -NCT03848455 -NCT03848494 -NCT03848507 -NCT03848702 -NCT03848845 -NCT03849053 -NCT03849066 -NCT03849365 -NCT03849482 -NCT03849534 -NCT03849625 -NCT03849794 -NCT03850080 -NCT03850119 -NCT03850197 -NCT03850327 -NCT03850353 -NCT03850587 -NCT03850717 -NCT03850730 -NCT03850964 -NCT03851003 -NCT03851042 -NCT03851328 -NCT03851367 -NCT03851406 -NCT03851497 -NCT03851562 -NCT03851601 -NCT03851614 -NCT03851627 -NCT03851861 -NCT03851952 -NCT03851991 -NCT03852173 -NCT03852433 -NCT03852472 -NCT03852563 -NCT03852576 -NCT03852836 -NCT03852901 -NCT03852966 -NCT03853070 -NCT03853135 -NCT03853486 -NCT03853538 -NCT03853551 -NCT03853603 -NCT03853915 -NCT03853928 -NCT03853954 -NCT03854032 -NCT03854058 -NCT03854084 -NCT03854136 -NCT03854175 -NCT03854396 -NCT03854448 -NCT03854474 -NCT03854500 -NCT03854526 -NCT03854786 -NCT03854929 -NCT03854981 -NCT03855007 -NCT03855072 -NCT03855514 -NCT03855644 -NCT03855670 -NCT03855709 -NCT03855813 -NCT03855904 -NCT03856125 -NCT03856138 -NCT03856164 -NCT03856229 -NCT03856268 -NCT03856294 -NCT03856476 -NCT03856528 -NCT03856684 -NCT03856710 -NCT03856801 -NCT03856983 -NCT03857048 -NCT03857061 -NCT03857191 -NCT03857230 -NCT03857451 -NCT03857464 -NCT03857529 -NCT03857607 -NCT03857633 -NCT03857646 -NCT03857672 -NCT03857698 -NCT03857737 -NCT03857828 -NCT03857867 -NCT03857880 -NCT03857919 -NCT03857997 -NCT03858010 -NCT03858036 -NCT03858049 -NCT03858127 -NCT03858192 -NCT03858244 -NCT03858374 -NCT03858595 -NCT03858608 -NCT03858660 -NCT03858738 -NCT03858855 -NCT03858920 -NCT03859011 -NCT03859154 -NCT03859193 -NCT03859206 -NCT03859362 -NCT03859596 -NCT03859648 -NCT03859687 -NCT03859830 -NCT03859895 -NCT03859921 -NCT03860155 -NCT03860233 -NCT03860285 -NCT03860519 -NCT03860831 -NCT03861039 -NCT03861052 -NCT03861130 -NCT03861195 -NCT03861260 -NCT03861286 -NCT03861390 -NCT03861468 -NCT03861520 -NCT03861611 -NCT03861637 -NCT03861897 -NCT03862092 -NCT03862274 -NCT03862417 -NCT03862625 -NCT03862729 -NCT03862742 -NCT03862755 -NCT03862950 -NCT03862976 -NCT03862989 -NCT03863080 -NCT03863093 -NCT03863132 -NCT03863210 -NCT03863340 -NCT03863418 -NCT03863496 -NCT03863626 -NCT03863717 -NCT03863730 -NCT03863743 -NCT03863769 -NCT03863847 -NCT03863873 -NCT03863977 -NCT03864172 -NCT03864198 -NCT03864328 -NCT03864406 -NCT03864419 -NCT03864523 -NCT03864562 -NCT03864614 -NCT03865030 -NCT03865056 -NCT03865121 -NCT03865589 -NCT03865641 -NCT03865797 -NCT03865888 -NCT03865966 -NCT03865992 -NCT03866161 -NCT03866187 -NCT03866200 -NCT03866213 -NCT03866291 -NCT03866382 -NCT03866447 -NCT03866590 -NCT03866603 -NCT03866694 -NCT03867214 -NCT03867240 -NCT03867331 -NCT03867396 -NCT03867435 -NCT03867487 -NCT03867526 -NCT03867591 -NCT03867630 -NCT03867708 -NCT03867747 -NCT03867786 -NCT03868267 -NCT03868293 -NCT03868332 -NCT03868358 -NCT03868397 -NCT03868449 -NCT03868462 -NCT03868475 -NCT03868553 -NCT03868579 -NCT03868657 -NCT03868683 -NCT03868852 -NCT03868891 -NCT03869268 -NCT03869437 -NCT03869515 -NCT03869632 -NCT03869788 -NCT03869944 -NCT03870035 -NCT03870308 -NCT03870321 -NCT03870347 -NCT03870438 -NCT03870620 -NCT03870763 -NCT03870789 -NCT03870828 -NCT03870854 -NCT03870867 -NCT03870945 -NCT03871127 -NCT03871192 -NCT03871322 -NCT03871335 -NCT03871426 -NCT03871699 -NCT03871725 -NCT03871842 -NCT03871868 -NCT03871933 -NCT03872102 -NCT03872115 -NCT03872375 -NCT03872531 -NCT03872583 -NCT03872778 -NCT03872856 -NCT03872908 -NCT03873116 -NCT03873168 -NCT03873285 -NCT03873571 -NCT03873584 -NCT03873649 -NCT03873662 -NCT03873792 -NCT03873974 -NCT03874013 -NCT03874182 -NCT03874364 -NCT03874416 -NCT03874442 -NCT03874624 -NCT03874676 -NCT03874936 -NCT03874962 -NCT03874975 -NCT03875027 -NCT03875040 -NCT03875105 -NCT03875300 -NCT03875326 -NCT03875339 -NCT03875365 -NCT03875404 -NCT03875495 -NCT03875534 -NCT03875560 -NCT03875638 -NCT03875833 -NCT03875924 -NCT03876093 -NCT03876145 -NCT03876210 -NCT03876236 -NCT03876249 -NCT03876301 -NCT03876327 -NCT03876509 -NCT03876522 -NCT03876613 -NCT03876652 -NCT03876678 -NCT03876847 -NCT03876951 -NCT03876977 -NCT03877068 -NCT03877211 -NCT03877302 -NCT03877315 -NCT03877614 -NCT03877718 -NCT03877731 -NCT03877939 -NCT03878108 -NCT03878251 -NCT03878316 -NCT03878446 -NCT03878459 -NCT03878524 -NCT03878732 -NCT03878771 -NCT03878875 -NCT03878940 -NCT03878979 -NCT03879044 -NCT03879135 -NCT03879213 -NCT03879369 -NCT03879460 -NCT03879551 -NCT03879577 -NCT03880097 -NCT03880240 -NCT03880279 -NCT03880292 -NCT03880305 -NCT03880370 -NCT03880409 -NCT03880513 -NCT03880539 -NCT03880565 -NCT03880708 -NCT03880903 -NCT03881046 -NCT03881059 -NCT03881124 -NCT03881189 -NCT03881228 -NCT03881254 -NCT03881267 -NCT03881319 -NCT03881345 -NCT03881514 -NCT03881657 -NCT03881787 -NCT03881839 -NCT03882034 -NCT03882060 -NCT03882307 -NCT03882385 -NCT03882411 -NCT03882528 -NCT03882606 -NCT03882801 -NCT03882853 -NCT03882970 -NCT03883048 -NCT03883152 -NCT03883217 -NCT03883243 -NCT03883269 -NCT03883464 -NCT03883490 -NCT03883568 -NCT03883698 -NCT03883750 -NCT03883815 -NCT03883945 -NCT03883958 -NCT03884010 -NCT03884127 -NCT03884140 -NCT03884348 -NCT03884426 -NCT03884582 -NCT03884777 -NCT03884816 -NCT03884985 -NCT03884998 -NCT03885076 -NCT03885154 -NCT03885232 -NCT03885297 -NCT03885557 -NCT03885570 -NCT03885726 -NCT03885791 -NCT03885817 -NCT03885908 -NCT03886220 -NCT03886532 -NCT03886740 -NCT03886844 -NCT03886896 -NCT03887013 -NCT03887195 -NCT03887364 -NCT03887455 -NCT03887663 -NCT03887754 -NCT03887910 -NCT03887936 -NCT03887962 -NCT03887975 -NCT03888274 -NCT03888287 -NCT03888495 -NCT03888664 -NCT03888846 -NCT03889002 -NCT03889106 -NCT03889158 -NCT03889223 -NCT03889249 -NCT03889743 -NCT03889769 -NCT03889821 -NCT03889990 -NCT03890042 -NCT03890211 -NCT03890224 -NCT03890237 -NCT03890367 -NCT03890679 -NCT03890757 -NCT03890939 -NCT03891069 -NCT03891108 -NCT03891147 -NCT03891394 -NCT03891433 -NCT03891667 -NCT03891719 -NCT03891732 -NCT03891784 -NCT03891823 -NCT03891836 -NCT03891901 -NCT03892044 -NCT03892187 -NCT03892213 -NCT03892265 -NCT03892538 -NCT03892655 -NCT03892668 -NCT03892681 -NCT03892785 -NCT03892798 -NCT03892980 -NCT03893058 -NCT03893136 -NCT03893162 -NCT03893292 -NCT03893370 -NCT03893396 -NCT03893643 -NCT03893929 -NCT03893981 -NCT03894267 -NCT03894293 -NCT03894709 -NCT03894865 -NCT03894982 -NCT03895281 -NCT03895294 -NCT03895450 -NCT03895593 -NCT03895710 -NCT03895905 -NCT03895996 -NCT03896035 -NCT03896204 -NCT03896230 -NCT03896373 -NCT03896516 -NCT03896542 -NCT03896568 -NCT03896659 -NCT03896672 -NCT03896685 -NCT03896737 -NCT03896750 -NCT03896867 -NCT03896997 -NCT03897049 -NCT03897218 -NCT03897244 -NCT03897257 -NCT03897439 -NCT03897504 -NCT03897595 -NCT03897634 -NCT03897647 -NCT03897686 -NCT03897829 -NCT03897959 -NCT03898167 -NCT03898245 -NCT03898284 -NCT03898388 -NCT03898583 -NCT03898622 -NCT03898648 -NCT03898661 -NCT03898726 -NCT03898856 -NCT03898973 -NCT03899129 -NCT03899246 -NCT03899272 -NCT03899298 -NCT03899337 -NCT03899428 -NCT03899506 -NCT03899766 -NCT03899792 -NCT03900312 -NCT03900325 -NCT03900468 -NCT03900520 -NCT03900585 -NCT03900624 -NCT03900650 -NCT03900676 -NCT03900819 -NCT03900845 -NCT03900871 -NCT03900936 -NCT03900975 -NCT03901183 -NCT03901261 -NCT03901365 -NCT03901417 -NCT03901495 -NCT03901664 -NCT03901703 -NCT03901755 -NCT03901781 -NCT03902080 -NCT03902223 -NCT03902262 -NCT03902340 -NCT03902379 -NCT03902496 -NCT03902678 -NCT03902730 -NCT03902886 -NCT03903029 -NCT03903146 -NCT03903393 -NCT03903471 -NCT03903562 -NCT03903614 -NCT03903666 -NCT03903744 -NCT03903770 -NCT03903783 -NCT03903952 -NCT03904004 -NCT03904095 -NCT03904199 -NCT03904355 -NCT03904368 -NCT03904485 -NCT03904511 -NCT03904589 -NCT03904602 -NCT03904810 -NCT03904888 -NCT03904966 -NCT03905135 -NCT03905161 -NCT03905369 -NCT03905434 -NCT03905460 -NCT03905473 -NCT03905512 -NCT03905525 -NCT03905603 -NCT03905681 -NCT03905694 -NCT03905824 -NCT03905941 -NCT03905954 -NCT03906006 -NCT03906045 -NCT03906201 -NCT03906214 -NCT03906227 -NCT03906292 -NCT03906448 -NCT03906539 -NCT03906682 -NCT03906708 -NCT03906812 -NCT03907007 -NCT03907098 -NCT03907358 -NCT03907384 -NCT03907488 -NCT03907514 -NCT03907566 -NCT03907670 -NCT03907748 -NCT03907787 -NCT03907852 -NCT03907865 -NCT03908099 -NCT03908164 -NCT03908177 -NCT03908255 -NCT03908320 -NCT03908372 -NCT03908424 -NCT03908632 -NCT03908697 -NCT03908827 -NCT03908944 -NCT03908983 -NCT03909204 -NCT03909282 -NCT03909321 -NCT03909438 -NCT03909477 -NCT03909529 -NCT03909607 -NCT03909802 -NCT03909880 -NCT03910101 -NCT03910231 -NCT03910244 -NCT03910257 -NCT03910335 -NCT03910374 -NCT03910413 -NCT03910426 -NCT03910452 -NCT03910543 -NCT03910582 -NCT03910621 -NCT03910647 -NCT03910738 -NCT03910764 -NCT03910894 -NCT03910985 -NCT03911037 -NCT03911115 -NCT03911271 -NCT03911336 -NCT03911531 -NCT03911557 -NCT03911791 -NCT03911817 -NCT03912142 -NCT03912311 -NCT03912454 -NCT03912480 -NCT03912519 -NCT03912558 -NCT03912571 -NCT03912623 -NCT03912636 -NCT03912818 -NCT03912935 -NCT03912948 -NCT03913117 -NCT03913286 -NCT03913416 -NCT03913429 -NCT03913559 -NCT03914014 -NCT03914066 -NCT03914092 -NCT03914209 -NCT03914248 -NCT03914300 -NCT03914378 -NCT03914586 -NCT03914625 -NCT03914638 -NCT03914716 -NCT03914846 -NCT03915054 -NCT03915106 -NCT03915249 -NCT03915418 -NCT03915457 -NCT03915626 -NCT03915652 -NCT03915704 -NCT03915730 -NCT03915873 -NCT03915912 -NCT03916029 -NCT03916289 -NCT03916302 -NCT03916354 -NCT03916458 -NCT03916536 -NCT03916601 -NCT03916705 -NCT03916718 -NCT03916744 -NCT03916770 -NCT03916978 -NCT03917082 -NCT03917173 -NCT03917654 -NCT03917693 -NCT03917719 -NCT03917992 -NCT03918005 -NCT03918109 -NCT03918135 -NCT03918174 -NCT03918226 -NCT03918330 -NCT03918356 -NCT03918668 -NCT03918772 -NCT03918915 -NCT03919136 -NCT03919162 -NCT03919188 -NCT03919474 -NCT03919630 -NCT03919734 -NCT03919773 -NCT03920072 -NCT03920150 -NCT03920189 -NCT03920202 -NCT03920293 -NCT03920397 -NCT03920449 -NCT03920514 -NCT03920527 -NCT03920657 -NCT03920683 -NCT03920800 -NCT03920826 -NCT03921034 -NCT03921294 -NCT03921372 -NCT03921554 -NCT03921710 -NCT03921749 -NCT03921801 -NCT03921814 -NCT03921827 -NCT03921931 -NCT03921983 -NCT03922165 -NCT03922295 -NCT03922308 -NCT03922321 -NCT03922438 -NCT03922490 -NCT03922841 -NCT03922867 -NCT03923062 -NCT03923153 -NCT03923218 -NCT03923322 -NCT03923374 -NCT03923569 -NCT03923673 -NCT03923686 -NCT03923803 -NCT03924037 -NCT03924089 -NCT03924206 -NCT03924232 -NCT03924258 -NCT03924271 -NCT03924414 -NCT03924583 -NCT03924843 -NCT03924895 -NCT03924947 -NCT03924999 -NCT03925012 -NCT03925168 -NCT03925233 -NCT03925298 -NCT03925454 -NCT03925467 -NCT03925610 -NCT03925636 -NCT03925688 -NCT03925727 -NCT03925909 -NCT03926286 -NCT03926299 -NCT03926351 -NCT03926468 -NCT03926520 -NCT03926559 -NCT03926832 -NCT03926845 -NCT03926923 -NCT03927040 -NCT03927339 -NCT03927664 -NCT03927885 -NCT03928158 -NCT03928379 -NCT03928470 -NCT03928483 -NCT03928730 -NCT03928951 -NCT03929029 -NCT03929042 -NCT03929120 -NCT03929159 -NCT03929198 -NCT03929263 -NCT03929302 -NCT03929341 -NCT03929354 -NCT03929432 -NCT03929510 -NCT03929757 -NCT03929809 -NCT03930004 -NCT03930277 -NCT03930433 -NCT03930446 -NCT03930576 -NCT03930745 -NCT03931018 -NCT03931083 -NCT03931161 -NCT03931200 -NCT03931395 -NCT03931408 -NCT03931538 -NCT03931551 -NCT03931577 -NCT03931642 -NCT03931941 -NCT03932201 -NCT03932214 -NCT03932331 -NCT03932461 -NCT03932656 -NCT03932877 -NCT03932942 -NCT03932968 -NCT03932981 -NCT03933007 -NCT03933124 -NCT03933150 -NCT03933241 -NCT03933358 -NCT03933384 -NCT03933397 -NCT03933423 -NCT03933605 -NCT03933618 -NCT03933683 -NCT03933969 -NCT03934047 -NCT03934073 -NCT03934203 -NCT03934502 -NCT03934736 -NCT03934775 -NCT03934788 -NCT03934866 -NCT03935048 -NCT03935100 -NCT03935178 -NCT03935217 -NCT03935295 -NCT03935477 -NCT03935503 -NCT03935516 -NCT03935581 -NCT03935633 -NCT03935646 -NCT03935880 -NCT03935906 -NCT03935984 -NCT03936101 -NCT03936244 -NCT03936283 -NCT03936517 -NCT03936543 -NCT03936660 -NCT03936699 -NCT03936751 -NCT03936790 -NCT03936829 -NCT03937102 -NCT03937193 -NCT03937232 -NCT03937323 -NCT03937479 -NCT03937518 -NCT03937635 -NCT03937700 -NCT03937739 -NCT03937791 -NCT03937817 -NCT03937895 -NCT03937947 -NCT03937960 -NCT03937999 -NCT03938064 -NCT03938168 -NCT03938194 -NCT03938220 -NCT03938545 -NCT03938792 -NCT03938896 -NCT03939000 -NCT03939013 -NCT03939169 -NCT03939247 -NCT03939351 -NCT03939598 -NCT03939650 -NCT03940027 -NCT03940040 -NCT03940066 -NCT03940105 -NCT03940209 -NCT03940248 -NCT03940287 -NCT03940313 -NCT03940365 -NCT03940482 -NCT03940495 -NCT03940625 -NCT03940807 -NCT03941184 -NCT03941301 -NCT03941379 -NCT03941405 -NCT03941613 -NCT03941730 -NCT03941860 -NCT03941925 -NCT03942263 -NCT03942315 -NCT03942523 -NCT03942562 -NCT03942692 -NCT03942718 -NCT03942757 -NCT03942861 -NCT03942887 -NCT03942965 -NCT03943069 -NCT03943134 -NCT03943173 -NCT03943251 -NCT03943277 -NCT03943303 -NCT03943394 -NCT03943420 -NCT03943680 -NCT03943992 -NCT03944005 -NCT03944096 -NCT03944122 -NCT03944148 -NCT03944226 -NCT03944278 -NCT03944382 -NCT03944551 -NCT03944720 -NCT03944876 -NCT03944928 -NCT03945110 -NCT03945266 -NCT03945461 -NCT03945474 -NCT03945487 -NCT03945526 -NCT03945552 -NCT03945851 -NCT03946072 -NCT03946553 -NCT03946618 -NCT03946683 -NCT03946709 -NCT03946722 -NCT03946826 -NCT03947112 -NCT03947138 -NCT03947242 -NCT03947320 -NCT03947372 -NCT03947567 -NCT03947723 -NCT03947736 -NCT03947866 -NCT03948074 -NCT03948113 -NCT03948295 -NCT03948386 -NCT03948399 -NCT03948438 -NCT03948620 -NCT03948646 -NCT03948659 -NCT03948802 -NCT03948906 -NCT03948997 -NCT03949101 -NCT03949166 -NCT03949179 -NCT03949374 -NCT03949647 -NCT03949660 -NCT03949777 -NCT03949933 -NCT03950531 -NCT03950583 -NCT03950609 -NCT03950648 -NCT03950908 -NCT03951129 -NCT03951298 -NCT03951324 -NCT03951467 -NCT03951584 -NCT03951649 -NCT03952117 -NCT03952130 -NCT03952286 -NCT03952442 -NCT03952650 -NCT03952741 -NCT03952845 -NCT03953053 -NCT03953118 -NCT03953183 -NCT03953261 -NCT03953469 -NCT03953625 -NCT03953703 -NCT03953755 -NCT03953794 -NCT03954145 -NCT03954210 -NCT03954327 -NCT03954444 -NCT03954522 -NCT03954561 -NCT03954782 -NCT03954821 -NCT03955055 -NCT03955081 -NCT03955120 -NCT03955146 -NCT03955458 -NCT03955484 -NCT03955588 -NCT03955653 -NCT03955887 -NCT03955913 -NCT03956069 -NCT03956160 -NCT03956212 -NCT03956238 -NCT03956303 -NCT03956316 -NCT03956368 -NCT03956446 -NCT03956485 -NCT03956550 -NCT03956810 -NCT03956823 -NCT03956888 -NCT03956979 -NCT03957200 -NCT03957408 -NCT03957421 -NCT03957577 -NCT03957642 -NCT03957668 -NCT03957720 -NCT03957759 -NCT03957811 -NCT03957837 -NCT03957863 -NCT03957967 -NCT03958006 -NCT03958058 -NCT03958175 -NCT03958227 -NCT03958305 -NCT03958383 -NCT03958435 -NCT03958487 -NCT03958656 -NCT03958773 -NCT03958877 -NCT03959020 -NCT03959059 -NCT03959085 -NCT03959137 -NCT03959150 -NCT03959319 -NCT03959358 -NCT03959410 -NCT03959553 -NCT03959605 -NCT03959631 -NCT03959644 -NCT03959748 -NCT03959852 -NCT03959917 -NCT03959956 -NCT03959982 -NCT03960099 -NCT03960320 -NCT03960333 -NCT03960450 -NCT03960554 -NCT03960853 -NCT03960892 -NCT03961152 -NCT03961178 -NCT03961282 -NCT03961555 -NCT03961659 -NCT03961750 -NCT03961763 -NCT03962023 -NCT03962634 -NCT03962686 -NCT03962829 -NCT03963115 -NCT03963128 -NCT03963375 -NCT03963453 -NCT03963466 -NCT03963635 -NCT03963648 -NCT03963752 -NCT03963765 -NCT03963804 -NCT03963999 -NCT03964285 -NCT03964324 -NCT03964441 -NCT03964688 -NCT03964714 -NCT03964779 -NCT03964818 -NCT03964844 -NCT03965091 -NCT03965273 -NCT03965286 -NCT03965637 -NCT03965676 -NCT03965767 -NCT03965819 -NCT03966014 -NCT03966066 -NCT03966248 -NCT03966482 -NCT03967041 -NCT03967145 -NCT03967613 -NCT03967743 -NCT03967886 -NCT03967925 -NCT03967990 -NCT03968146 -NCT03968276 -NCT03968328 -NCT03968367 -NCT03968601 -NCT03968614 -NCT03968692 -NCT03968796 -NCT03968913 -NCT03968978 -NCT03969095 -NCT03969277 -NCT03969316 -NCT03969459 -NCT03969511 -NCT03969732 -NCT03969979 -NCT03970018 -NCT03970200 -NCT03970551 -NCT03970564 -NCT03970668 -NCT03970694 -NCT03970733 -NCT03970967 -NCT03970993 -NCT03971006 -NCT03971032 -NCT03971292 -NCT03971422 -NCT03971448 -NCT03971500 -NCT03971526 -NCT03971539 -NCT03971643 -NCT03971786 -NCT03971981 -NCT03972033 -NCT03972059 -NCT03972098 -NCT03972241 -NCT03972254 -NCT03972332 -NCT03972358 -NCT03972605 -NCT03972683 -NCT03972813 -NCT03972917 -NCT03973086 -NCT03973138 -NCT03973255 -NCT03973268 -NCT03973450 -NCT03973463 -NCT03973528 -NCT03973619 -NCT03973658 -NCT03973697 -NCT03973788 -NCT03973905 -NCT03973918 -NCT03973931 -NCT03973957 -NCT03974009 -NCT03974087 -NCT03974100 -NCT03974191 -NCT03974412 -NCT03974451 -NCT03974464 -NCT03974789 -NCT03974841 -NCT03974867 -NCT03975101 -NCT03975231 -NCT03975309 -NCT03975413 -NCT03975465 -NCT03975478 -NCT03975608 -NCT03975660 -NCT03975725 -NCT03975790 -NCT03975842 -NCT03975855 -NCT03975998 -NCT03976349 -NCT03976609 -NCT03976739 -NCT03976843 -NCT03976856 -NCT03977025 -NCT03977155 -NCT03977207 -NCT03977220 -NCT03977389 -NCT03977415 -NCT03977532 -NCT03977662 -NCT03977792 -NCT03977948 -NCT03978195 -NCT03978273 -NCT03978546 -NCT03978897 -NCT03978923 -NCT03979157 -NCT03979274 -NCT03979313 -NCT03979326 -NCT03979456 -NCT03979508 -NCT03979521 -NCT03979638 -NCT03979664 -NCT03979677 -NCT03979924 -NCT03979937 -NCT03980002 -NCT03980015 -NCT03980080 -NCT03980145 -NCT03980327 -NCT03980340 -NCT03980457 -NCT03980717 -NCT03980743 -NCT03980964 -NCT03981159 -NCT03981276 -NCT03981315 -NCT03981328 -NCT03981406 -NCT03981432 -NCT03981536 -NCT03981562 -NCT03981614 -NCT03981705 -NCT03981744 -NCT03981874 -NCT03981978 -NCT03982017 -NCT03982420 -NCT03982446 -NCT03982472 -NCT03982511 -NCT03982628 -NCT03983109 -NCT03983122 -NCT03983161 -NCT03983174 -NCT03983434 -NCT03983538 -NCT03983564 -NCT03983629 -NCT03983746 -NCT03984006 -NCT03984045 -NCT03984149 -NCT03984253 -NCT03984370 -NCT03984448 -NCT03984604 -NCT03984643 -NCT03984695 -NCT03984721 -NCT03984825 -NCT03984890 -NCT03984903 -NCT03984955 -NCT03985033 -NCT03985475 -NCT03985657 -NCT03985748 -NCT03985774 -NCT03985787 -NCT03985891 -NCT03986021 -NCT03986216 -NCT03986255 -NCT03986281 -NCT03986554 -NCT03986580 -NCT03986684 -NCT03986775 -NCT03987022 -NCT03987126 -NCT03987152 -NCT03987165 -NCT03987269 -NCT03987399 -NCT03987438 -NCT03987503 -NCT03987737 -NCT03987854 -NCT03987880 -NCT03987893 -NCT03987971 -NCT03987984 -NCT03988023 -NCT03988088 -NCT03988296 -NCT03988374 -NCT03988504 -NCT03988517 -NCT03988660 -NCT03988712 -NCT03988764 -NCT03988803 -NCT03988816 -NCT03988855 -NCT03988868 -NCT03989193 -NCT03989544 -NCT03989622 -NCT03989752 -NCT03989869 -NCT03989947 -NCT03989973 -NCT03989999 -NCT03990090 -NCT03990181 -NCT03990220 -NCT03990402 -NCT03990506 -NCT03991065 -NCT03991169 -NCT03991247 -NCT03991286 -NCT03991429 -NCT03991520 -NCT03991598 -NCT03991663 -NCT03991702 -NCT03991793 -NCT03991845 -NCT03991897 -NCT03991910 -NCT03992144 -NCT03992170 -NCT03992209 -NCT03992521 -NCT03992573 -NCT03992625 -NCT03992664 -NCT03992677 -NCT03993015 -NCT03993223 -NCT03993301 -NCT03993314 -NCT03993613 -NCT03993691 -NCT03993821 -NCT03993860 -NCT03993899 -NCT03993925 -NCT03994068 -NCT03994094 -NCT03994133 -NCT03994172 -NCT03994185 -NCT03994263 -NCT03994315 -NCT03994367 -NCT03994406 -NCT03994588 -NCT03994848 -NCT03995017 -NCT03995147 -NCT03995511 -NCT03995602 -NCT03995641 -NCT03995823 -NCT03995836 -NCT03995953 -NCT03996057 -NCT03996148 -NCT03996161 -NCT03996291 -NCT03996356 -NCT03996395 -NCT03996460 -NCT03996486 -NCT03996590 -NCT03996668 -NCT03996928 -NCT03996954 -NCT03997201 -NCT03997214 -NCT03997396 -NCT03997513 -NCT03997669 -NCT03997682 -NCT03997760 -NCT03997786 -NCT03997890 -NCT03997903 -NCT03997942 -NCT03997994 -NCT03998020 -NCT03998098 -NCT03998150 -NCT03998254 -NCT03998293 -NCT03998358 -NCT03998514 -NCT03998553 -NCT03998566 -NCT03998722 -NCT03998761 -NCT03998891 -NCT03998930 -NCT03998969 -NCT03999008 -NCT03999034 -NCT03999164 -NCT03999190 -NCT03999203 -NCT03999333 -NCT03999437 -NCT03999502 -NCT03999671 -NCT03999775 -NCT03999840 -NCT04000165 -NCT04000204 -NCT04000269 -NCT04000373 -NCT04000386 -NCT04000412 -NCT04000451 -NCT04000464 -NCT04000477 -NCT04000490 -NCT04000503 -NCT04000555 -NCT04000711 -NCT04000763 -NCT04001400 -NCT04001582 -NCT04001842 -NCT04001933 -NCT04002024 -NCT04002089 -NCT04002219 -NCT04002271 -NCT04002362 -NCT04002596 -NCT04002661 -NCT04002674 -NCT04002817 -NCT04002947 -NCT04003077 -NCT04003233 -NCT04003363 -NCT04003415 -NCT04003558 -NCT04003597 -NCT04003623 -NCT04003649 -NCT04003662 -NCT04003701 -NCT04003818 -NCT04003844 -NCT04003935 -NCT04004026 -NCT04004104 -NCT04004117 -NCT04004273 -NCT04004338 -NCT04004416 -NCT04004468 -NCT04004507 -NCT04004702 -NCT04004767 -NCT04004897 -NCT04004962 -NCT04004975 -NCT04005040 -NCT04005209 -NCT04005222 -NCT04005235 -NCT04005625 -NCT04005638 -NCT04005651 -NCT04006067 -NCT04006132 -NCT04006223 -NCT04006249 -NCT04006314 -NCT04006405 -NCT04006795 -NCT04006834 -NCT04006990 -NCT04007055 -NCT04007276 -NCT04007432 -NCT04007471 -NCT04007497 -NCT04007614 -NCT04007757 -NCT04007809 -NCT04007874 -NCT04008017 -NCT04008069 -NCT04008134 -NCT04008264 -NCT04008277 -NCT04008368 -NCT04008381 -NCT04008706 -NCT04008732 -NCT04008940 -NCT04008966 -NCT04009005 -NCT04009070 -NCT04009096 -NCT04009213 -NCT04009226 -NCT04009421 -NCT04009434 -NCT04009538 -NCT04009837 -NCT04009967 -NCT04010006 -NCT04010097 -NCT04010214 -NCT04010227 -NCT04010305 -NCT04010383 -NCT04010409 -NCT04010461 -NCT04010487 -NCT04010500 -NCT04010799 -NCT04010825 -NCT04010955 -NCT04010994 -NCT04011059 -NCT04011319 -NCT04011332 -NCT04011592 -NCT04011605 -NCT04011631 -NCT04011696 -NCT04011878 -NCT04011930 -NCT04011982 -NCT04012138 -NCT04012294 -NCT04012346 -NCT04012502 -NCT04012528 -NCT04012554 -NCT04012658 -NCT04012671 -NCT04012723 -NCT04012801 -NCT04012905 -NCT04012918 -NCT04012970 -NCT04013126 -NCT04013139 -NCT04013256 -NCT04013542 -NCT04013750 -NCT04013802 -NCT04013984 -NCT04014179 -NCT04014244 -NCT04014985 -NCT04015037 -NCT04015063 -NCT04015206 -NCT04015336 -NCT04015375 -NCT04015388 -NCT04015492 -NCT04015544 -NCT04015791 -NCT04015856 -NCT04015986 -NCT04015999 -NCT04016129 -NCT04016168 -NCT04016181 -NCT04016350 -NCT04016389 -NCT04016571 -NCT04016584 -NCT04016623 -NCT04016779 -NCT04016974 -NCT04017286 -NCT04017650 -NCT04017754 -NCT04017936 -NCT04018118 -NCT04018131 -NCT04018287 -NCT04018547 -NCT04018625 -NCT04018859 -NCT04018898 -NCT04018963 -NCT04019054 -NCT04019197 -NCT04019223 -NCT04019379 -NCT04019535 -NCT04019652 -NCT04019678 -NCT04019730 -NCT04019912 -NCT04019964 -NCT04019990 -NCT04020133 -NCT04020172 -NCT04020198 -NCT04020276 -NCT04020380 -NCT04020406 -NCT04020744 -NCT04020835 -NCT04020848 -NCT04020913 -NCT04021160 -NCT04021186 -NCT04021212 -NCT04021316 -NCT04021498 -NCT04021524 -NCT04021537 -NCT04021576 -NCT04021589 -NCT04021615 -NCT04021654 -NCT04021706 -NCT04021784 -NCT04021914 -NCT04021927 -NCT04022057 -NCT04022187 -NCT04022226 -NCT04022330 -NCT04022460 -NCT04022551 -NCT04022733 -NCT04022798 -NCT04022837 -NCT04023019 -NCT04023084 -NCT04023149 -NCT04023201 -NCT04023279 -NCT04023409 -NCT04023422 -NCT04023448 -NCT04023617 -NCT04023825 -NCT04023864 -NCT04023890 -NCT04024072 -NCT04024085 -NCT04024202 -NCT04024215 -NCT04024228 -NCT04024319 -NCT04024332 -NCT04024449 -NCT04024462 -NCT04024566 -NCT04024735 -NCT04024774 -NCT04024826 -NCT04024839 -NCT04024930 -NCT04025021 -NCT04025164 -NCT04025242 -NCT04025281 -NCT04025320 -NCT04025372 -NCT04025567 -NCT04025580 -NCT04025645 -NCT04025710 -NCT04025801 -NCT04025840 -NCT04025918 -NCT04025944 -NCT04026035 -NCT04026113 -NCT04026191 -NCT04026204 -NCT04026360 -NCT04026516 -NCT04026529 -NCT04026542 -NCT04026620 -NCT04026763 -NCT04026789 -NCT04026958 -NCT04026984 -NCT04027049 -NCT04027101 -NCT04027322 -NCT04027348 -NCT04027777 -NCT04027803 -NCT04027894 -NCT04027946 -NCT04027985 -NCT04028011 -NCT04028115 -NCT04028180 -NCT04028375 -NCT04028453 -NCT04028466 -NCT04028479 -NCT04028518 -NCT04028531 -NCT04028596 -NCT04029077 -NCT04029272 -NCT04029337 -NCT04029363 -NCT04029441 -NCT04029727 -NCT04029766 -NCT04029792 -NCT04030052 -NCT04030338 -NCT04030468 -NCT04030741 -NCT04030819 -NCT04030884 -NCT04030975 -NCT04031092 -NCT04031235 -NCT04031261 -NCT04031287 -NCT04031339 -NCT04031521 -NCT04031560 -NCT04031638 -NCT04031729 -NCT04031781 -NCT04031885 -NCT04032067 -NCT04032080 -NCT04032132 -NCT04032158 -NCT04032236 -NCT04032262 -NCT04032470 -NCT04032691 -NCT04032769 -NCT04032847 -NCT04032860 -NCT04032951 -NCT04032990 -NCT04033029 -NCT04033094 -NCT04033120 -NCT04033146 -NCT04033172 -NCT04033198 -NCT04033406 -NCT04033549 -NCT04033744 -NCT04033822 -NCT04033874 -NCT04033887 -NCT04034004 -NCT04034043 -NCT04034199 -NCT04034238 -NCT04034251 -NCT04034264 -NCT04034394 -NCT04034472 -NCT04034550 -NCT04034641 -NCT04034940 -NCT04035096 -NCT04035148 -NCT04035213 -NCT04035252 -NCT04035265 -NCT04035291 -NCT04035421 -NCT04035460 -NCT04035616 -NCT04035707 -NCT04035811 -NCT04035837 -NCT04035954 -NCT04035967 -NCT04035980 -NCT04036149 -NCT04036409 -NCT04036565 -NCT04036604 -NCT04036656 -NCT04036721 -NCT04036760 -NCT04036929 -NCT04037267 -NCT04037384 -NCT04037423 -NCT04037488 -NCT04037553 -NCT04037579 -NCT04037618 -NCT04037748 -NCT04037800 -NCT04037813 -NCT04037891 -NCT04037995 -NCT04038138 -NCT04038229 -NCT04038307 -NCT04038346 -NCT04038372 -NCT04038450 -NCT04038463 -NCT04038554 -NCT04038801 -NCT04038879 -NCT04039022 -NCT04039126 -NCT04039152 -NCT04039191 -NCT04039399 -NCT04039451 -NCT04039750 -NCT04039828 -NCT04039893 -NCT04040036 -NCT04040166 -NCT04040179 -NCT04040218 -NCT04040426 -NCT04040634 -NCT04040673 -NCT04040790 -NCT04040855 -NCT04040894 -NCT04041505 -NCT04041674 -NCT04041700 -NCT04041726 -NCT04041882 -NCT04041895 -NCT04042090 -NCT04042259 -NCT04042467 -NCT04042519 -NCT04042532 -NCT04042753 -NCT04042870 -NCT04042922 -NCT04042948 -NCT04043117 -NCT04043169 -NCT04043260 -NCT04043312 -NCT04043390 -NCT04043416 -NCT04043520 -NCT04043715 -NCT04043832 -NCT04043923 -NCT04044131 -NCT04044248 -NCT04044352 -NCT04044430 -NCT04044547 -NCT04044573 -NCT04044651 -NCT04044716 -NCT04044742 -NCT04044755 -NCT04044833 -NCT04044885 -NCT04045015 -NCT04045067 -NCT04045080 -NCT04045119 -NCT04045158 -NCT04045314 -NCT04045444 -NCT04045652 -NCT04045678 -NCT04045821 -NCT04045860 -NCT04045951 -NCT04046003 -NCT04046055 -NCT04046159 -NCT04046172 -NCT04046328 -NCT04046601 -NCT04046614 -NCT04046848 -NCT04047004 -NCT04047095 -NCT04047134 -NCT04047225 -NCT04047303 -NCT04047316 -NCT04047628 -NCT04047680 -NCT04047706 -NCT04047732 -NCT04047758 -NCT04047784 -NCT04047966 -NCT04047979 -NCT04048031 -NCT04048083 -NCT04048148 -NCT04048187 -NCT04048291 -NCT04048343 -NCT04048538 -NCT04048785 -NCT04048889 -NCT04048941 -NCT04048954 -NCT04049058 -NCT04049253 -NCT04049331 -NCT04049370 -NCT04049448 -NCT04049604 -NCT04050111 -NCT04050176 -NCT04050215 -NCT04050514 -NCT04050553 -NCT04050579 -NCT04050774 -NCT04050787 -NCT04050852 -NCT04050930 -NCT04051060 -NCT04051112 -NCT04051125 -NCT04051203 -NCT04051411 -NCT04051658 -NCT04051697 -NCT04051736 -NCT04051931 -NCT04052074 -NCT04052113 -NCT04052308 -NCT04052321 -NCT04052555 -NCT04052607 -NCT04052698 -NCT04052737 -NCT04053010 -NCT04053062 -NCT04053088 -NCT04053166 -NCT04053192 -NCT04053309 -NCT04053426 -NCT04053699 -NCT04053816 -NCT04053868 -NCT04054037 -NCT04054063 -NCT04054206 -NCT04054219 -NCT04054349 -NCT04054453 -NCT04054505 -NCT04054609 -NCT04054687 -NCT04054726 -NCT04054882 -NCT04054960 -NCT04055012 -NCT04055220 -NCT04055441 -NCT04055467 -NCT04055480 -NCT04055584 -NCT04055597 -NCT04055610 -NCT04055675 -NCT04055714 -NCT04055766 -NCT04055818 -NCT04055831 -NCT04056078 -NCT04056117 -NCT04056130 -NCT04056221 -NCT04056247 -NCT04056442 -NCT04056832 -NCT04056845 -NCT04056858 -NCT04057066 -NCT04057183 -NCT04057222 -NCT04057313 -NCT04057638 -NCT04057664 -NCT04057794 -NCT04057807 -NCT04057846 -NCT04057924 -NCT04058015 -NCT04058028 -NCT04058132 -NCT04058158 -NCT04058171 -NCT04058197 -NCT04058223 -NCT04058327 -NCT04058353 -NCT04058366 -NCT04058379 -NCT04058509 -NCT04058522 -NCT04058561 -NCT04059159 -NCT04059172 -NCT04059601 -NCT04059679 -NCT04059822 -NCT04059900 -NCT04060043 -NCT04060121 -NCT04060160 -NCT04060238 -NCT04060251 -NCT04060264 -NCT04060303 -NCT04060368 -NCT04060472 -NCT04060550 -NCT04060589 -NCT04060732 -NCT04060836 -NCT04060888 -NCT04061109 -NCT04061135 -NCT04061161 -NCT04061187 -NCT04061213 -NCT04061226 -NCT04061291 -NCT04061343 -NCT04061395 -NCT04061707 -NCT04061733 -NCT04061772 -NCT04061785 -NCT04061811 -NCT04061824 -NCT04061980 -NCT04062006 -NCT04062110 -NCT04062201 -NCT04062279 -NCT04062331 -NCT04062344 -NCT04062526 -NCT04062617 -NCT04062747 -NCT04062877 -NCT04062929 -NCT04063020 -NCT04063631 -NCT04063722 -NCT04063839 -NCT04063852 -NCT04063865 -NCT04063891 -NCT04063956 -NCT04063982 -NCT04063995 -NCT04064021 -NCT04064047 -NCT04064281 -NCT04064294 -NCT04064307 -NCT04064411 -NCT04064437 -NCT04064567 -NCT04064736 -NCT04064788 -NCT04064840 -NCT04064957 -NCT04064983 -NCT04065022 -NCT04065321 -NCT04065516 -NCT04065802 -NCT04065893 -NCT04066023 -NCT04066166 -NCT04066205 -NCT04066530 -NCT04066569 -NCT04066621 -NCT04066634 -NCT04066647 -NCT04066777 -NCT04066868 -NCT04067180 -NCT04067427 -NCT04067453 -NCT04067492 -NCT04067596 -NCT04067609 -NCT04067622 -NCT04067635 -NCT04067648 -NCT04067973 -NCT04068220 -NCT04068246 -NCT04068376 -NCT04068415 -NCT04068480 -NCT04068506 -NCT04068740 -NCT04068961 -NCT04069052 -NCT04069234 -NCT04069286 -NCT04069325 -NCT04069572 -NCT04069793 -NCT04069819 -NCT04069884 -NCT04069897 -NCT04069975 -NCT04070001 -NCT04070222 -NCT04070300 -NCT04070352 -NCT04070534 -NCT04070781 -NCT04070898 -NCT04071106 -NCT04071223 -NCT04071314 -NCT04071340 -NCT04071353 -NCT04071379 -NCT04071574 -NCT04071626 -NCT04071665 -NCT04071691 -NCT04071847 -NCT04071899 -NCT04071925 -NCT04072146 -NCT04072289 -NCT04072302 -NCT04072367 -NCT04072380 -NCT04072458 -NCT04072640 -NCT04072653 -NCT04072783 -NCT04072796 -NCT04072822 -NCT04072835 -NCT04072874 -NCT04073043 -NCT04073173 -NCT04073212 -NCT04073251 -NCT04073290 -NCT04073329 -NCT04073342 -NCT04073511 -NCT04073706 -NCT04073888 -NCT04073927 -NCT04073940 -NCT04073953 -NCT04074031 -NCT04074239 -NCT04074330 -NCT04074408 -NCT04074421 -NCT04074473 -NCT04074486 -NCT04074512 -NCT04074525 -NCT04074772 -NCT04074824 -NCT04074902 -NCT04074941 -NCT04075097 -NCT04075149 -NCT04075188 -NCT04075253 -NCT04075266 -NCT04075422 -NCT04075539 -NCT04075851 -NCT04075903 -NCT04076111 -NCT04076189 -NCT04076280 -NCT04076332 -NCT04076345 -NCT04076397 -NCT04076462 -NCT04076501 -NCT04076514 -NCT04076605 -NCT04076618 -NCT04076683 -NCT04076696 -NCT04077060 -NCT04077073 -NCT04077086 -NCT04077112 -NCT04077489 -NCT04077749 -NCT04077840 -NCT04077996 -NCT04078139 -NCT04078217 -NCT04078230 -NCT04078386 -NCT04078425 -NCT04078451 -NCT04078542 -NCT04078737 -NCT04078763 -NCT04078841 -NCT04078867 -NCT04078945 -NCT04079179 -NCT04079361 -NCT04079439 -NCT04079504 -NCT04079712 -NCT04079777 -NCT04079868 -NCT04079881 -NCT04079894 -NCT04079959 -NCT04079985 -NCT04080128 -NCT04080141 -NCT04080232 -NCT04080245 -NCT04080258 -NCT04080362 -NCT04080427 -NCT04080570 -NCT04080583 -NCT04080674 -NCT04080687 -NCT04080726 -NCT04080830 -NCT04080921 -NCT04080934 -NCT04080999 -NCT04081103 -NCT04081116 -NCT04081220 -NCT04081402 -NCT04081415 -NCT04081571 -NCT04081701 -NCT04081870 -NCT04082065 -NCT04082143 -NCT04082260 -NCT04082338 -NCT04082676 -NCT04082689 -NCT04082780 -NCT04082832 -NCT04082897 -NCT04083027 -NCT04083092 -NCT04083118 -NCT04083131 -NCT04083274 -NCT04083313 -NCT04083443 -NCT04083495 -NCT04083586 -NCT04083729 -NCT04083768 -NCT04083976 -NCT04084015 -NCT04084067 -NCT04084119 -NCT04084236 -NCT04084665 -NCT04084704 -NCT04084730 -NCT04084912 -NCT04084938 -NCT04085042 -NCT04085055 -NCT04085367 -NCT04085419 -NCT04085471 -NCT04085497 -NCT04085523 -NCT04085705 -NCT04085796 -NCT04085861 -NCT04085952 -NCT04086134 -NCT04086173 -NCT04086199 -NCT04086212 -NCT04086303 -NCT04086316 -NCT04086472 -NCT04086524 -NCT04086589 -NCT04086628 -NCT04086667 -NCT04086732 -NCT04086784 -NCT04087083 -NCT04087096 -NCT04087239 -NCT04087278 -NCT04087330 -NCT04087408 -NCT04087447 -NCT04087564 -NCT04087577 -NCT04087629 -NCT04087642 -NCT04087694 -NCT04087759 -NCT04087785 -NCT04088006 -NCT04088045 -NCT04088058 -NCT04088370 -NCT04088396 -NCT04088409 -NCT04088474 -NCT04088643 -NCT04088838 -NCT04088890 -NCT04088942 -NCT04089007 -NCT04089046 -NCT04089280 -NCT04089475 -NCT04089501 -NCT04089579 -NCT04089631 -NCT04089761 -NCT04089787 -NCT04089982 -NCT04089995 -NCT04090047 -NCT04090125 -NCT04090164 -NCT04090203 -NCT04090346 -NCT04090632 -NCT04090671 -NCT04090710 -NCT04090931 -NCT04091087 -NCT04091243 -NCT04091282 -NCT04091321 -NCT04091334 -NCT04091386 -NCT04091399 -NCT04091516 -NCT04091568 -NCT04091698 -NCT04091763 -NCT04091776 -NCT04091789 -NCT04091867 -NCT04091919 -NCT04091971 -NCT04092010 -NCT04092127 -NCT04092192 -NCT04092231 -NCT04092335 -NCT04092400 -NCT04092556 -NCT04092595 -NCT04092816 -NCT04092959 -NCT04092985 -NCT04093024 -NCT04093102 -NCT04093128 -NCT04093154 -NCT04093206 -NCT04093271 -NCT04093388 -NCT04093414 -NCT04093492 -NCT04093778 -NCT04093791 -NCT04093947 -NCT04094025 -NCT04094116 -NCT04094129 -NCT04094402 -NCT04094480 -NCT04094779 -NCT04094818 -NCT04094896 -NCT04094961 -NCT04095026 -NCT04095169 -NCT04095312 -NCT04095351 -NCT04095416 -NCT04095585 -NCT04095715 -NCT04095780 -NCT04095884 -NCT04096183 -NCT04096560 -NCT04096703 -NCT04096794 -NCT04096807 -NCT04096820 -NCT04096833 -NCT04096898 -NCT04096924 -NCT04097002 -NCT04097158 -NCT04097171 -NCT04097197 -NCT04097223 -NCT04097249 -NCT04097262 -NCT04097613 -NCT04097639 -NCT04097886 -NCT04098055 -NCT04098094 -NCT04098185 -NCT04098250 -NCT04098406 -NCT04098666 -NCT04098705 -NCT04098718 -NCT04099017 -NCT04099134 -NCT04099147 -NCT04099225 -NCT04099342 -NCT04099381 -NCT04099420 -NCT04099563 -NCT04099602 -NCT04099615 -NCT04099784 -NCT04099862 -NCT04099914 -NCT04100057 -NCT04100109 -NCT04100291 -NCT04100577 -NCT04100655 -NCT04100707 -NCT04100733 -NCT04100759 -NCT04100811 -NCT04100967 -NCT04101435 -NCT04101513 -NCT04101539 -NCT04101578 -NCT04101656 -NCT04101851 -NCT04101890 -NCT04101981 -NCT04102046 -NCT04102228 -NCT04102254 -NCT04102358 -NCT04102371 -NCT04102397 -NCT04102423 -NCT04102605 -NCT04102657 -NCT04102930 -NCT04103099 -NCT04103112 -NCT04103450 -NCT04103463 -NCT04103502 -NCT04103515 -NCT04103528 -NCT04103554 -NCT04103619 -NCT04103684 -NCT04103762 -NCT04104347 -NCT04104373 -NCT04104386 -NCT04104412 -NCT04104464 -NCT04104542 -NCT04104685 -NCT04104789 -NCT04104815 -NCT04104893 -NCT04104984 -NCT04104997 -NCT04105075 -NCT04105348 -NCT04105374 -NCT04105413 -NCT04105465 -NCT04105478 -NCT04105543 -NCT04105569 -NCT04105894 -NCT04105985 -NCT04106232 -NCT04106284 -NCT04106323 -NCT04106375 -NCT04106505 -NCT04106518 -NCT04106661 -NCT04106700 -NCT04106726 -NCT04106778 -NCT04106817 -NCT04106973 -NCT04106986 -NCT04107155 -NCT04107207 -NCT04107233 -NCT04107350 -NCT04107454 -NCT04107480 -NCT04107649 -NCT04107896 -NCT04108117 -NCT04108182 -NCT04108260 -NCT04108377 -NCT04108481 -NCT04108559 -NCT04108572 -NCT04108598 -NCT04108754 -NCT04108780 -NCT04108819 -NCT04108832 -NCT04108897 -NCT04108988 -NCT04109027 -NCT04109040 -NCT04109079 -NCT04109378 -NCT04109521 -NCT04109547 -NCT04109612 -NCT04109664 -NCT04109677 -NCT04109703 -NCT04109781 -NCT04109807 -NCT04109885 -NCT04110015 -NCT04110041 -NCT04110054 -NCT04110145 -NCT04110184 -NCT04110210 -NCT04110275 -NCT04110405 -NCT04110782 -NCT04110834 -NCT04110847 -NCT04110860 -NCT04110912 -NCT04111081 -NCT04111250 -NCT04111302 -NCT04111315 -NCT04111341 -NCT04111497 -NCT04111588 -NCT04111783 -NCT04111822 -NCT04112238 -NCT04112381 -NCT04112511 -NCT04112667 -NCT04112771 -NCT04112901 -NCT04112940 -NCT04113070 -NCT04113096 -NCT04113187 -NCT04113265 -NCT04113369 -NCT04113499 -NCT04113525 -NCT04113785 -NCT04113837 -NCT04113902 -NCT04113967 -NCT04114123 -NCT04114305 -NCT04114448 -NCT04114604 -NCT04114617 -NCT04114630 -NCT04114851 -NCT04115059 -NCT04115111 -NCT04115527 -NCT04115735 -NCT04115826 -NCT04115878 -NCT04115956 -NCT04116203 -NCT04116645 -NCT04116671 -NCT04116723 -NCT04116827 -NCT04116905 -NCT04117061 -NCT04117321 -NCT04117555 -NCT04117594 -NCT04117607 -NCT04117620 -NCT04117698 -NCT04117841 -NCT04118218 -NCT04118244 -NCT04118361 -NCT04118426 -NCT04118582 -NCT04118595 -NCT04118634 -NCT04118647 -NCT04118725 -NCT04118881 -NCT04118920 -NCT04118998 -NCT04119011 -NCT04119115 -NCT04119141 -NCT04119206 -NCT04119284 -NCT04119297 -NCT04119349 -NCT04119635 -NCT04120025 -NCT04120103 -NCT04120116 -NCT04120129 -NCT04120168 -NCT04120324 -NCT04120363 -NCT04120584 -NCT04120649 -NCT04120974 -NCT04121052 -NCT04121117 -NCT04121130 -NCT04121169 -NCT04121325 -NCT04121338 -NCT04121390 -NCT04121572 -NCT04121624 -NCT04121637 -NCT04121897 -NCT04121936 -NCT04121988 -NCT04122105 -NCT04122170 -NCT04122183 -NCT04122352 -NCT04122404 -NCT04122443 -NCT04122716 -NCT04122807 -NCT04122820 -NCT04123145 -NCT04123301 -NCT04123483 -NCT04123509 -NCT04123626 -NCT04123990 -NCT04124094 -NCT04124172 -NCT04124237 -NCT04124510 -NCT04124549 -NCT04124588 -NCT04124640 -NCT04124679 -NCT04124692 -NCT04124705 -NCT04124874 -NCT04125004 -NCT04125043 -NCT04125134 -NCT04125316 -NCT04125342 -NCT04125446 -NCT04125459 -NCT04125498 -NCT04125563 -NCT04125628 -NCT04125641 -NCT04125836 -NCT04125875 -NCT04126005 -NCT04126018 -NCT04126057 -NCT04126213 -NCT04126304 -NCT04126408 -NCT04126473 -NCT04126551 -NCT04126616 -NCT04126720 -NCT04126824 -NCT04126902 -NCT04127149 -NCT04127214 -NCT04127279 -NCT04127617 -NCT04127838 -NCT04127929 -NCT04127994 -NCT04128033 -NCT04128163 -NCT04128358 -NCT04128618 -NCT04128631 -NCT04128696 -NCT04128709 -NCT04129125 -NCT04129294 -NCT04129320 -NCT04129385 -NCT04129411 -NCT04129424 -NCT04129437 -NCT04129450 -NCT04129502 -NCT04129554 -NCT04129645 -NCT04129697 -NCT04129775 -NCT04129788 -NCT04129853 -NCT04129931 -NCT04130074 -NCT04130152 -NCT04130204 -NCT04130243 -NCT04130425 -NCT04130776 -NCT04130828 -NCT04130867 -NCT04130919 -NCT04131036 -NCT04131166 -NCT04131205 -NCT04131270 -NCT04131491 -NCT04131660 -NCT04131764 -NCT04131920 -NCT04131933 -NCT04131985 -NCT04131998 -NCT04132063 -NCT04132154 -NCT04132167 -NCT04132193 -NCT04132323 -NCT04132349 -NCT04132362 -NCT04132375 -NCT04132661 -NCT04132739 -NCT04132778 -NCT04133142 -NCT04133220 -NCT04133324 -NCT04133441 -NCT04133662 -NCT04133766 -NCT04133870 -NCT04133883 -NCT04134065 -NCT04134117 -NCT04134221 -NCT04134247 -NCT04134455 -NCT04134715 -NCT04134741 -NCT04134819 -NCT04135118 -NCT04135456 -NCT04135508 -NCT04135573 -NCT04135755 -NCT04135768 -NCT04135807 -NCT04135820 -NCT04135833 -NCT04135872 -NCT04136093 -NCT04136249 -NCT04136418 -NCT04136431 -NCT04136548 -NCT04136587 -NCT04136717 -NCT04136847 -NCT04136860 -NCT04137068 -NCT04137237 -NCT04137302 -NCT04137406 -NCT04137510 -NCT04137809 -NCT04137926 -NCT04138069 -NCT04138186 -NCT04138316 -NCT04138329 -NCT04138368 -NCT04138602 -NCT04138615 -NCT04138706 -NCT04138784 -NCT04138901 -NCT04139018 -NCT04139096 -NCT04139122 -NCT04139148 -NCT04139187 -NCT04139226 -NCT04139330 -NCT04139395 -NCT04139460 -NCT04139551 -NCT04139564 -NCT04139577 -NCT04139941 -NCT04139980 -NCT04140019 -NCT04140097 -NCT04140214 -NCT04140591 -NCT04140617 -NCT04140825 -NCT04140890 -NCT04140916 -NCT04141150 -NCT04141163 -NCT04141176 -NCT04141215 -NCT04141254 -NCT04141488 -NCT04141696 -NCT04141774 -NCT04141787 -NCT04141891 -NCT04141917 -NCT04141969 -NCT04142099 -NCT04142151 -NCT04142177 -NCT04142229 -NCT04142424 -NCT04142515 -NCT04142632 -NCT04142645 -NCT04142814 -NCT04142957 -NCT04143230 -NCT04143295 -NCT04143360 -NCT04143386 -NCT04143399 -NCT04143477 -NCT04143659 -NCT04143724 -NCT04143750 -NCT04143776 -NCT04143802 -NCT04143893 -NCT04143932 -NCT04144179 -NCT04144231 -NCT04144283 -NCT04144296 -NCT04144374 -NCT04144491 -NCT04144530 -NCT04144686 -NCT04144699 -NCT04144725 -NCT04145011 -NCT04145024 -NCT04145427 -NCT04145440 -NCT04145518 -NCT04145622 -NCT04145635 -NCT04145661 -NCT04145752 -NCT04145804 -NCT04145843 -NCT04145895 -NCT04146012 -NCT04146051 -NCT04146103 -NCT04146194 -NCT04146272 -NCT04146376 -NCT04146597 -NCT04146649 -NCT04146961 -NCT04147117 -NCT04147182 -NCT04147299 -NCT04147429 -NCT04147442 -NCT04147507 -NCT04147637 -NCT04147676 -NCT04147741 -NCT04147793 -NCT04147884 -NCT04148144 -NCT04148196 -NCT04148222 -NCT04148248 -NCT04148534 -NCT04148612 -NCT04148625 -NCT04148651 -NCT04148768 -NCT04148781 -NCT04148807 -NCT04148963 -NCT04149054 -NCT04149093 -NCT04149197 -NCT04149223 -NCT04149314 -NCT04149431 -NCT04149496 -NCT04149535 -NCT04149600 -NCT04149626 -NCT04149652 -NCT04149834 -NCT04149847 -NCT04150198 -NCT04150211 -NCT04150250 -NCT04150289 -NCT04150315 -NCT04150445 -NCT04150562 -NCT04150679 -NCT04150757 -NCT04150822 -NCT04150861 -NCT04150991 -NCT04151030 -NCT04151147 -NCT04151173 -NCT04151212 -NCT04151342 -NCT04151355 -NCT04151446 -NCT04151550 -NCT04151732 -NCT04151836 -NCT04152044 -NCT04152096 -NCT04152226 -NCT04152655 -NCT04152720 -NCT04152759 -NCT04152798 -NCT04152902 -NCT04153058 -NCT04153110 -NCT04153175 -NCT04153214 -NCT04153409 -NCT04153513 -NCT04153552 -NCT04153578 -NCT04153669 -NCT04153682 -NCT04153708 -NCT04154098 -NCT04154137 -NCT04154306 -NCT04154319 -NCT04154371 -NCT04154410 -NCT04154436 -NCT04154475 -NCT04154579 -NCT04154644 -NCT04154722 -NCT04154839 -NCT04154891 -NCT04155099 -NCT04155203 -NCT04155294 -NCT04155307 -NCT04155359 -NCT04155398 -NCT04155411 -NCT04155645 -NCT04155749 -NCT04155801 -NCT04155814 -NCT04155840 -NCT04155853 -NCT04155918 -NCT04155944 -NCT04155970 -NCT04156295 -NCT04156347 -NCT04156399 -NCT04156464 -NCT04156555 -NCT04156633 -NCT04156711 -NCT04156984 -NCT04156997 -NCT04157283 -NCT04157309 -NCT04157530 -NCT04157621 -NCT04157660 -NCT04157712 -NCT04157738 -NCT04157764 -NCT04157842 -NCT04157855 -NCT04157920 -NCT04157946 -NCT04158297 -NCT04158505 -NCT04158518 -NCT04158531 -NCT04158557 -NCT04158648 -NCT04158661 -NCT04158830 -NCT04158986 -NCT04159077 -NCT04159571 -NCT04159649 -NCT04159792 -NCT04159805 -NCT04159831 -NCT04159844 -NCT04159857 -NCT04159870 -NCT04160130 -NCT04160143 -NCT04160156 -NCT04160195 -NCT04160585 -NCT04160598 -NCT04160715 -NCT04160975 -NCT04161014 -NCT04161079 -NCT04161183 -NCT04161196 -NCT04161222 -NCT04161339 -NCT04161365 -NCT04161482 -NCT04161495 -NCT04161521 -NCT04161742 -NCT04161833 -NCT04161872 -NCT04162067 -NCT04162171 -NCT04162223 -NCT04162379 -NCT04162405 -NCT04162587 -NCT04162665 -NCT04162704 -NCT04162821 -NCT04162938 -NCT04163094 -NCT04163133 -NCT04163146 -NCT04163159 -NCT04163354 -NCT04163380 -NCT04163536 -NCT04163653 -NCT04163861 -NCT04164056 -NCT04164095 -NCT04164147 -NCT04164186 -NCT04164290 -NCT04164732 -NCT04164836 -NCT04164862 -NCT04164875 -NCT04164888 -NCT04165109 -NCT04165187 -NCT04165200 -NCT04165278 -NCT04165395 -NCT04165785 -NCT04166032 -NCT04166058 -NCT04166097 -NCT04166344 -NCT04166383 -NCT04166461 -NCT04166812 -NCT04166877 -NCT04167085 -NCT04167163 -NCT04167566 -NCT04168281 -NCT04168359 -NCT04168411 -NCT04168541 -NCT04168801 -NCT04168866 -NCT04168892 -NCT04168931 -NCT04169035 -NCT04169113 -NCT04169152 -NCT04169334 -NCT04169529 -NCT04169555 -NCT04169672 -NCT04169698 -NCT04169984 -NCT04170062 -NCT04170101 -NCT04170244 -NCT04170309 -NCT04170504 -NCT04170803 -NCT04171102 -NCT04171505 -NCT04171726 -NCT04171908 -NCT04171934 -NCT04172025 -NCT04172506 -NCT04172597 -NCT04172701 -NCT04173013 -NCT04173052 -NCT04173234 -NCT04173286 -NCT04173546 -NCT04173559 -NCT04173624 -NCT04173689 -NCT04173780 -NCT04173923 -NCT04174157 -NCT04174183 -NCT04174326 -NCT04174430 -NCT04174482 -NCT04174521 -NCT04174729 -NCT04174911 -NCT04175145 -NCT04175158 -NCT04175184 -NCT04175197 -NCT04175444 -NCT04175639 -NCT04175678 -NCT04175691 -NCT04175964 -NCT04176029 -NCT04176211 -NCT04176250 -NCT04176302 -NCT04176549 -NCT04176614 -NCT04176692 -NCT04176718 -NCT04176861 -NCT04176978 -NCT04177368 -NCT04177420 -NCT04177615 -NCT04177940 -NCT04178005 -NCT04178044 -NCT04178226 -NCT04178252 -NCT04178265 -NCT04178759 -NCT04178772 -NCT04178798 -NCT04178811 -NCT04178915 -NCT04178928 -NCT04178954 -NCT04178980 -NCT04179032 -NCT04179045 -NCT04179370 -NCT04179409 -NCT04179461 -NCT04179578 -NCT04179942 -NCT04180241 -NCT04180475 -NCT04180748 -NCT04181450 -NCT04181866 -NCT04181905 -NCT04181918 -NCT04181944 -NCT04182009 -NCT04182347 -NCT04182555 -NCT04182594 -NCT04182659 -NCT04182685 -NCT04182867 -NCT04182893 -NCT04182906 -NCT04182945 -NCT04182984 -NCT04182997 -NCT04183036 -NCT04183049 -NCT04183101 -NCT04183192 -NCT04183361 -NCT04183491 -NCT04183673 -NCT04183777 -NCT04184011 -NCT04184154 -NCT04184414 -NCT04184531 -NCT04184622 -NCT04184661 -NCT04184726 -NCT04184817 -NCT04184882 -NCT04185116 -NCT04185220 -NCT04185311 -NCT04185389 -NCT04185545 -NCT04185701 -NCT04185766 -NCT04185870 -NCT04186078 -NCT04186104 -NCT04186143 -NCT04186286 -NCT04186520 -NCT04186559 -NCT04186780 -NCT04186806 -NCT04187066 -NCT04187079 -NCT04187287 -NCT04187547 -NCT04187716 -NCT04187781 -NCT04188184 -NCT04188392 -NCT04188418 -NCT04188522 -NCT04188574 -NCT04188600 -NCT04188639 -NCT04189133 -NCT04189198 -NCT04189237 -NCT04189419 -NCT04189471 -NCT04189484 -NCT04189497 -NCT04189601 -NCT04189705 -NCT04189822 -NCT04189874 -NCT04189900 -NCT04189926 -NCT04189952 -NCT04190043 -NCT04190316 -NCT04190407 -NCT04190472 -NCT04190758 -NCT04190849 -NCT04191018 -NCT04191031 -NCT04191317 -NCT04191369 -NCT04191759 -NCT04191837 -NCT04192279 -NCT04192396 -NCT04192474 -NCT04192487 -NCT04192500 -NCT04192708 -NCT04192773 -NCT04193059 -NCT04193085 -NCT04193150 -NCT04193202 -NCT04193280 -NCT04193319 -NCT04193358 -NCT04193475 -NCT04193553 -NCT04193579 -NCT04193592 -NCT04193813 -NCT04193878 -NCT04193891 -NCT04193969 -NCT04193995 -NCT04194008 -NCT04194073 -NCT04194164 -NCT04194242 -NCT04194333 -NCT04194372 -NCT04194385 -NCT04194541 -NCT04194632 -NCT04194658 -NCT04194723 -NCT04195100 -NCT04195412 -NCT04195685 -NCT04195724 -NCT04195984 -NCT04196010 -NCT04196088 -NCT04196101 -NCT04196153 -NCT04196244 -NCT04196387 -NCT04196504 -NCT04196933 -NCT04197011 -NCT04197245 -NCT04197284 -NCT04197336 -NCT04197349 -NCT04197674 -NCT04197726 -NCT04197739 -NCT04197778 -NCT04197791 -NCT04197817 -NCT04197843 -NCT04197908 -NCT04197934 -NCT04197947 -NCT04198064 -NCT04198103 -NCT04198246 -NCT04198259 -NCT04198324 -NCT04198454 -NCT04198753 -NCT04199195 -NCT04199260 -NCT04199338 -NCT04199390 -NCT04199468 -NCT04199546 -NCT04199988 -NCT04200014 -NCT04200079 -NCT04200105 -NCT04200378 -NCT04200495 -NCT04200586 -NCT04200729 -NCT04200781 -NCT04201002 -NCT04201132 -NCT04201210 -NCT04201249 -NCT04201431 -NCT04201444 -NCT04201743 -NCT04201925 -NCT04202016 -NCT04202159 -NCT04202185 -NCT04202627 -NCT04202744 -NCT04202796 -NCT04202965 -NCT04203199 -NCT04203342 -NCT04203394 -NCT04203472 -NCT04203589 -NCT04203875 -NCT04203940 -NCT04203953 -NCT04204044 -NCT04204057 -NCT04204083 -NCT04204096 -NCT04204226 -NCT04204421 -NCT04204512 -NCT04204720 -NCT04204733 -NCT04204876 -NCT04204928 -NCT04205175 -NCT04205188 -NCT04205266 -NCT04205279 -NCT04205331 -NCT04205396 -NCT04205474 -NCT04205578 -NCT04205747 -NCT04205851 -NCT04206007 -NCT04206020 -NCT04206098 -NCT04206137 -NCT04206176 -NCT04206228 -NCT04206319 -NCT04206332 -NCT04206345 -NCT04206410 -NCT04206423 -NCT04206605 -NCT04206722 -NCT04206826 -NCT04206969 -NCT04207021 -NCT04207112 -NCT04207242 -NCT04207268 -NCT04207554 -NCT04207593 -NCT04207632 -NCT04207645 -NCT04207736 -NCT04207827 -NCT04208061 -NCT04208360 -NCT04208464 -NCT04208529 -NCT04208568 -NCT04208620 -NCT04208633 -NCT04208685 -NCT04208932 -NCT04208997 -NCT04209036 -NCT04209088 -NCT04209127 -NCT04209166 -NCT04209179 -NCT04209192 -NCT04209218 -NCT04209335 -NCT04209621 -NCT04209634 -NCT04209738 -NCT04209842 -NCT04209946 -NCT04210063 -NCT04210089 -NCT04210141 -NCT04210297 -NCT04210336 -NCT04210518 -NCT04210596 -NCT04210674 -NCT04210791 -NCT04210882 -NCT04211142 -NCT04211168 -NCT04211207 -NCT04211233 -NCT04211272 -NCT04211454 -NCT04211571 -NCT04211649 -NCT04211701 -NCT04211740 -NCT04211766 -NCT04211805 -NCT04211974 -NCT04212013 -NCT04212195 -NCT04212403 -NCT04212455 -NCT04212507 -NCT04212546 -NCT04212572 -NCT04212624 -NCT04212637 -NCT04212780 -NCT04212793 -NCT04212962 -NCT04213092 -NCT04213105 -NCT04213183 -NCT04213287 -NCT04213352 -NCT04213443 -NCT04213534 -NCT04213729 -NCT04213898 -NCT04214080 -NCT04214119 -NCT04214197 -NCT04214210 -NCT04214262 -NCT04214340 -NCT04214509 -NCT04214522 -NCT04214561 -NCT04214639 -NCT04214665 -NCT04214691 -NCT04214756 -NCT04214990 -NCT04215354 -NCT04215380 -NCT04215458 -NCT04215497 -NCT04215601 -NCT04215757 -NCT04215783 -NCT04215809 -NCT04216251 -NCT04216563 -NCT04216979 -NCT04216992 -NCT04217135 -NCT04217187 -NCT04217200 -NCT04217447 -NCT04217460 -NCT04217577 -NCT04217590 -NCT04217603 -NCT04217733 -NCT04217746 -NCT04217850 -NCT04217902 -NCT04217941 -NCT04217954 -NCT04218045 -NCT04218110 -NCT04218175 -NCT04218305 -NCT04218409 -NCT04218526 -NCT04218539 -NCT04218721 -NCT04218877 -NCT04218942 -NCT04219007 -NCT04219163 -NCT04219306 -NCT04219332 -NCT04219423 -NCT04219488 -NCT04219644 -NCT04219748 -NCT04219813 -NCT04219826 -NCT04220086 -NCT04220138 -NCT04220229 -NCT04220268 -NCT04220476 -NCT04220489 -NCT04220541 -NCT04220697 -NCT04220840 -NCT04221074 -NCT04221126 -NCT04221139 -NCT04221282 -NCT04221529 -NCT04221711 -NCT04221893 -NCT04222075 -NCT04222088 -NCT04222257 -NCT04222296 -NCT04222322 -NCT04222452 -NCT04222543 -NCT04222595 -NCT04222777 -NCT04222803 -NCT04222816 -NCT04222881 -NCT04222933 -NCT04222972 -NCT04223050 -NCT04223154 -NCT04223349 -NCT04223388 -NCT04223570 -NCT04223765 -NCT04223908 -NCT04223999 -NCT04224038 -NCT04224168 -NCT04224285 -NCT04224298 -NCT04224337 -NCT04224454 -NCT04224506 -NCT04224584 -NCT04224662 -NCT04224909 -NCT04224948 -NCT04225000 -NCT04225117 -NCT04225286 -NCT04225312 -NCT04225507 -NCT04225546 -NCT04225793 -NCT04225858 -NCT04226040 -NCT04226118 -NCT04226170 -NCT04226209 -NCT04226235 -NCT04226586 -NCT04226911 -NCT04226976 -NCT04227067 -NCT04227197 -NCT04227314 -NCT04227379 -NCT04227548 -NCT04227925 -NCT04227977 -NCT04228029 -NCT04228081 -NCT04228484 -NCT04228536 -NCT04228835 -NCT04229004 -NCT04229030 -NCT04229238 -NCT04229342 -NCT04229407 -NCT04229433 -NCT04229589 -NCT04229901 -NCT04229914 -NCT04229927 -NCT04229940 -NCT04230109 -NCT04230174 -NCT04230252 -NCT04230291 -NCT04230447 -NCT04230460 -NCT04230902 -NCT04231058 -NCT04231279 -NCT04231318 -NCT04231396 -NCT04231448 -NCT04231461 -NCT04231487 -NCT04231669 -NCT04231760 -NCT04232020 -NCT04232033 -NCT04232085 -NCT04232371 -NCT04232553 -NCT04232618 -NCT04232748 -NCT04232813 -NCT04232826 -NCT04232865 -NCT04232917 -NCT04232982 -NCT04233099 -NCT04233125 -NCT04233359 -NCT04233567 -NCT04233632 -NCT04233749 -NCT04233762 -NCT04233827 -NCT04233892 -NCT04234035 -NCT04234048 -NCT04234126 -NCT04234165 -NCT04234217 -NCT04234230 -NCT04234269 -NCT04234321 -NCT04234399 -NCT04234594 -NCT04234789 -NCT04234867 -NCT04234945 -NCT04235140 -NCT04235166 -NCT04235244 -NCT04235283 -NCT04235556 -NCT04235712 -NCT04235725 -NCT04235777 -NCT04235829 -NCT04235933 -NCT04235998 -NCT04236037 -NCT04236089 -NCT04236232 -NCT04236349 -NCT04236375 -NCT04236388 -NCT04236544 -NCT04236557 -NCT04236596 -NCT04236622 -NCT04236661 -NCT04236687 -NCT04236843 -NCT04236856 -NCT04236895 -NCT04236934 -NCT04236960 -NCT04236999 -NCT04237181 -NCT04237220 -NCT04237376 -NCT04237506 -NCT04237636 -NCT04237766 -NCT04237779 -NCT04237857 -NCT04237883 -NCT04237935 -NCT04237961 -NCT04238065 -NCT04238117 -NCT04238208 -NCT04238247 -NCT04238416 -NCT04238611 -NCT04238871 -NCT04238884 -NCT04238897 -NCT04239196 -NCT04239378 -NCT04239430 -NCT04239521 -NCT04239846 -NCT04239963 -NCT04240054 -NCT04240132 -NCT04240314 -NCT04240470 -NCT04240483 -NCT04240522 -NCT04240548 -NCT04240639 -NCT04240652 -NCT04240860 -NCT04240873 -NCT04241042 -NCT04241367 -NCT04241393 -NCT04241432 -NCT04241484 -NCT04241536 -NCT04241588 -NCT04241679 -NCT04241809 -NCT04241822 -NCT04241848 -NCT04242108 -NCT04242225 -NCT04242264 -NCT04242277 -NCT04242290 -NCT04242355 -NCT04242394 -NCT04242589 -NCT04242602 -NCT04242732 -NCT04242784 -NCT04242836 -NCT04243083 -NCT04243265 -NCT04243382 -NCT04243421 -NCT04243434 -NCT04243616 -NCT04243668 -NCT04243915 -NCT04244123 -NCT04244383 -NCT04244448 -NCT04244474 -NCT04244526 -NCT04244604 -NCT04244630 -NCT04244656 -NCT04244669 -NCT04244877 -NCT04245150 -NCT04245176 -NCT04245384 -NCT04245475 -NCT04245540 -NCT04245709 -NCT04245956 -NCT04246099 -NCT04246151 -NCT04246372 -NCT04246398 -NCT04246450 -NCT04246606 -NCT04246619 -NCT04246697 -NCT04247035 -NCT04247074 -NCT04247100 -NCT04247152 -NCT04247204 -NCT04247282 -NCT04247490 -NCT04247906 -NCT04248166 -NCT04248270 -NCT04248335 -NCT04248361 -NCT04248426 -NCT04248439 -NCT04248699 -NCT04248738 -NCT04249141 -NCT04249154 -NCT04249258 -NCT04249271 -NCT04249297 -NCT04249310 -NCT04249427 -NCT04249440 -NCT04249479 -NCT04249570 -NCT04249700 -NCT04249856 -NCT04249882 -NCT04249921 -NCT04249973 -NCT04250194 -NCT04250311 -NCT04250597 -NCT04250779 -NCT04250792 -NCT04251052 -NCT04251091 -NCT04251182 -NCT04251208 -NCT04251286 -NCT04251299 -NCT04251403 -NCT04251559 -NCT04251663 -NCT04252001 -NCT04252053 -NCT04252144 -NCT04252209 -NCT04252508 -NCT04252521 -NCT04252729 -NCT04252846 -NCT04252859 -NCT04252963 -NCT04253054 -NCT04253106 -NCT04253249 -NCT04253275 -NCT04253405 -NCT04253444 -NCT04253691 -NCT04253821 -NCT04253899 -NCT04253964 -NCT04254107 -NCT04254172 -NCT04254224 -NCT04254276 -NCT04254419 -NCT04254458 -NCT04254510 -NCT04254588 -NCT04254692 -NCT04254822 -NCT04254861 -NCT04255095 -NCT04255173 -NCT04255264 -NCT04255316 -NCT04255381 -NCT04255420 -NCT04255576 -NCT04255693 -NCT04255758 -NCT04255953 -NCT04256005 -NCT04256057 -NCT04256096 -NCT04256135 -NCT04256200 -NCT04256265 -NCT04256278 -NCT04256304 -NCT04256434 -NCT04256486 -NCT04256512 -NCT04256668 -NCT04256733 -NCT04257097 -NCT04257123 -NCT04257136 -NCT04257422 -NCT04257487 -NCT04257500 -NCT04257604 -NCT04257682 -NCT04258020 -NCT04258046 -NCT04258189 -NCT04258215 -NCT04258423 -NCT04258449 -NCT04258618 -NCT04258657 -NCT04258813 -NCT04258852 -NCT04258930 -NCT04259021 -NCT04259034 -NCT04259099 -NCT04259177 -NCT04259359 -NCT04259411 -NCT04259619 -NCT04259697 -NCT04259736 -NCT04259931 -NCT04259944 -NCT04260204 -NCT04260477 -NCT04260568 -NCT04260802 -NCT04260971 -NCT04260984 -NCT04261010 -NCT04261283 -NCT04261296 -NCT04261309 -NCT04261439 -NCT04261478 -NCT04261504 -NCT04261595 -NCT04261790 -NCT04261803 -NCT04261894 -NCT04262115 -NCT04262128 -NCT04262141 -NCT04262336 -NCT04262388 -NCT04262414 -NCT04262557 -NCT04262570 -NCT04262713 -NCT04262752 -NCT04263298 -NCT04263376 -NCT04263779 -NCT04263870 -NCT04263974 -NCT04264091 -NCT04264169 -NCT04264195 -NCT04264325 -NCT04264377 -NCT04264455 -NCT04264481 -NCT04264949 -NCT04265209 -NCT04265222 -NCT04265339 -NCT04265521 -NCT04265651 -NCT04265703 -NCT04265742 -NCT04265781 -NCT04265820 -NCT04265833 -NCT04266158 -NCT04266249 -NCT04266275 -NCT04266418 -NCT04266457 -NCT04266509 -NCT04266561 -NCT04266587 -NCT04266756 -NCT04266782 -NCT04266847 -NCT04266977 -NCT04266990 -NCT04267081 -NCT04267302 -NCT04267341 -NCT04267445 -NCT04267562 -NCT04267627 -NCT04267835 -NCT04267965 -NCT04268017 -NCT04268186 -NCT04268251 -NCT04268277 -NCT04268303 -NCT04268420 -NCT04268433 -NCT04268485 -NCT04268524 -NCT04268589 -NCT04268602 -NCT04268641 -NCT04268732 -NCT04268758 -NCT04268810 -NCT04268836 -NCT04268862 -NCT04268940 -NCT04269083 -NCT04269148 -NCT04269174 -NCT04269291 -NCT04269330 -NCT04269629 -NCT04269694 -NCT04269837 -NCT04270110 -NCT04270617 -NCT04270877 -NCT04271020 -NCT04271033 -NCT04271085 -NCT04271163 -NCT04271176 -NCT04271605 -NCT04271826 -NCT04271878 -NCT04271891 -NCT04271956 -NCT04272060 -NCT04272190 -NCT04272398 -NCT04272424 -NCT04272879 -NCT04272970 -NCT04273100 -NCT04273139 -NCT04273282 -NCT04273373 -NCT04273490 -NCT04273620 -NCT04273828 -NCT04273854 -NCT04273893 -NCT04273971 -NCT04274179 -NCT04274465 -NCT04274556 -NCT04274569 -NCT04274634 -NCT04274790 -NCT04274842 -NCT04274868 -NCT04274894 -NCT04274920 -NCT04275076 -NCT04275219 -NCT04275414 -NCT04275453 -NCT04275505 -NCT04275544 -NCT04275765 -NCT04275791 -NCT04275869 -NCT04275882 -NCT04276038 -NCT04276142 -NCT04276207 -NCT04276324 -NCT04276337 -NCT04276493 -NCT04276610 -NCT04276636 -NCT04276649 -NCT04276753 -NCT04276779 -NCT04276883 -NCT04276974 -NCT04277000 -NCT04277039 -NCT04277052 -NCT04277078 -NCT04277130 -NCT04277364 -NCT04277572 -NCT04277689 -NCT04277728 -NCT04277741 -NCT04278014 -NCT04278183 -NCT04278326 -NCT04278469 -NCT04278495 -NCT04278599 -NCT04278651 -NCT04278690 -NCT04278729 -NCT04278963 -NCT04279288 -NCT04279327 -NCT04279457 -NCT04279600 -NCT04279678 -NCT04279717 -NCT04279782 -NCT04279795 -NCT04279808 -NCT04279821 -NCT04279912 -NCT04280081 -NCT04280094 -NCT04280146 -NCT04280315 -NCT04280367 -NCT04280406 -NCT04280497 -NCT04280523 -NCT04280757 -NCT04281043 -NCT04281251 -NCT04281316 -NCT04281446 -NCT04281732 -NCT04281771 -NCT04281784 -NCT04281888 -NCT04282031 -NCT04282109 -NCT04282148 -NCT04282174 -NCT04282317 -NCT04282408 -NCT04282434 -NCT04282538 -NCT04282642 -NCT04282720 -NCT04282902 -NCT04282954 -NCT04283019 -NCT04283032 -NCT04283175 -NCT04283266 -NCT04283292 -NCT04283370 -NCT04283409 -NCT04283435 -NCT04283461 -NCT04283643 -NCT04283682 -NCT04283773 -NCT04283929 -NCT04283994 -NCT04284241 -NCT04284267 -NCT04284423 -NCT04284436 -NCT04284501 -NCT04284605 -NCT04284618 -NCT04284696 -NCT04284748 -NCT04284774 -NCT04284826 -NCT04284969 -NCT04285021 -NCT04285177 -NCT04285190 -NCT04285229 -NCT04285268 -NCT04285437 -NCT04285450 -NCT04285528 -NCT04285606 -NCT04285684 -NCT04285697 -NCT04285736 -NCT04285775 -NCT04285827 -NCT04286113 -NCT04286152 -NCT04286217 -NCT04286243 -NCT04286269 -NCT04286308 -NCT04286451 -NCT04286464 -NCT04286698 -NCT04286828 -NCT04287010 -NCT04287127 -NCT04287140 -NCT04287231 -NCT04287257 -NCT04287478 -NCT04287569 -NCT04287582 -NCT04287686 -NCT04287764 -NCT04287868 -NCT04287881 -NCT04287920 -NCT04288206 -NCT04288674 -NCT04288726 -NCT04288739 -NCT04288804 -NCT04288921 -NCT04289168 -NCT04289246 -NCT04289285 -NCT04289311 -NCT04289441 -NCT04289506 -NCT04289558 -NCT04289571 -NCT04289688 -NCT04289701 -NCT04289766 -NCT04289779 -NCT04289961 -NCT04290013 -NCT04290039 -NCT04290078 -NCT04290091 -NCT04290247 -NCT04290273 -NCT04290442 -NCT04290455 -NCT04290507 -NCT04290546 -NCT04290663 -NCT04290689 -NCT04290767 -NCT04290793 -NCT04290858 -NCT04291209 -NCT04291261 -NCT04291287 -NCT04291313 -NCT04291365 -NCT04291430 -NCT04291547 -NCT04291768 -NCT04291859 -NCT04291898 -NCT04292353 -NCT04292574 -NCT04292587 -NCT04292613 -NCT04292665 -NCT04292704 -NCT04292756 -NCT04292795 -NCT04292821 -NCT04292873 -NCT04292886 -NCT04293055 -NCT04293172 -NCT04293224 -NCT04293380 -NCT04293484 -NCT04293523 -NCT04293562 -NCT04293692 -NCT04293796 -NCT04293835 -NCT04293861 -NCT04293887 -NCT04293939 -NCT04293965 -NCT04294056 -NCT04294095 -NCT04294186 -NCT04294212 -NCT04294316 -NCT04294381 -NCT04294524 -NCT04295122 -NCT04295187 -NCT04295213 -NCT04295408 -NCT04295473 -NCT04295642 -NCT04295655 -NCT04295681 -NCT04295785 -NCT04295824 -NCT04295889 -NCT04295980 -NCT04296084 -NCT04296279 -NCT04296357 -NCT04296383 -NCT04296409 -NCT04296422 -NCT04296448 -NCT04296513 -NCT04296539 -NCT04296721 -NCT04296799 -NCT04296903 -NCT04296942 -NCT04297033 -NCT04297124 -NCT04297202 -NCT04297280 -NCT04297293 -NCT04297410 -NCT04297540 -NCT04297553 -NCT04297618 -NCT04297683 -NCT04297839 -NCT04297995 -NCT04298086 -NCT04298229 -NCT04298255 -NCT04298294 -NCT04298489 -NCT04298632 -NCT04298840 -NCT04298892 -NCT04298957 -NCT04299087 -NCT04299100 -NCT04299334 -NCT04299399 -NCT04299568 -NCT04299724 -NCT04299750 -NCT04299971 -NCT04300101 -NCT04300166 -NCT04300244 -NCT04300465 -NCT04300478 -NCT04300530 -NCT04300634 -NCT04300686 -NCT04301063 -NCT04301076 -NCT04301284 -NCT04301336 -NCT04301453 -NCT04301726 -NCT04301765 -NCT04301882 -NCT04302272 -NCT04302389 -NCT04302402 -NCT04302649 -NCT04302701 -NCT04303026 -NCT04303052 -NCT04303117 -NCT04303208 -NCT04303351 -NCT04303364 -NCT04303442 -NCT04303559 -NCT04303572 -NCT04303715 -NCT04303936 -NCT04304014 -NCT04304092 -NCT04304170 -NCT04304183 -NCT04304339 -NCT04304495 -NCT04304508 -NCT04304560 -NCT04304573 -NCT04304820 -NCT04304898 -NCT04305028 -NCT04305184 -NCT04305236 -NCT04305275 -NCT04305509 -NCT04305535 -NCT04305639 -NCT04305652 -NCT04305769 -NCT04305860 -NCT04305964 -NCT04306263 -NCT04306419 -NCT04306432 -NCT04306523 -NCT04306575 -NCT04306614 -NCT04306627 -NCT04306653 -NCT04306666 -NCT04306692 -NCT04306952 -NCT04306991 -NCT04307004 -NCT04307173 -NCT04307212 -NCT04307433 -NCT04307472 -NCT04307537 -NCT04307784 -NCT04307823 -NCT04307979 -NCT04308122 -NCT04308135 -NCT04308252 -NCT04308265 -NCT04308278 -NCT04308421 -NCT04308486 -NCT04308499 -NCT04308590 -NCT04308629 -NCT04308850 -NCT04308863 -NCT04308876 -NCT04308954 -NCT04309032 -NCT04309097 -NCT04309188 -NCT04309227 -NCT04309253 -NCT04309474 -NCT04309500 -NCT04309695 -NCT04309812 -NCT04309942 -NCT04310046 -NCT04310176 -NCT04310397 -NCT04310449 -NCT04310462 -NCT04310579 -NCT04310592 -NCT04310618 -NCT04310696 -NCT04310852 -NCT04311242 -NCT04311268 -NCT04311385 -NCT04311502 -NCT04311528 -NCT04311567 -NCT04311606 -NCT04311645 -NCT04311840 -NCT04311866 -NCT04311970 -NCT04312087 -NCT04312139 -NCT04312152 -NCT04312165 -NCT04312178 -NCT04312243 -NCT04312360 -NCT04312776 -NCT04312815 -NCT04313062 -NCT04313088 -NCT04313101 -NCT04313192 -NCT04313205 -NCT04313296 -NCT04313465 -NCT04313478 -NCT04313530 -NCT04313907 -NCT04313946 -NCT04314245 -NCT04314518 -NCT04314609 -NCT04314843 -NCT04314856 -NCT04314999 -NCT04315051 -NCT04315142 -NCT04315194 -NCT04315337 -NCT04315350 -NCT04315597 -NCT04315623 -NCT04315701 -NCT04315714 -NCT04315753 -NCT04315779 -NCT04315792 -NCT04316026 -NCT04316208 -NCT04316273 -NCT04316286 -NCT04316429 -NCT04316494 -NCT04316546 -NCT04316559 -NCT04316637 -NCT04316728 -NCT04316780 -NCT04316793 -NCT04317105 -NCT04317118 -NCT04317222 -NCT04317391 -NCT04317456 -NCT04317521 -NCT04317625 -NCT04317677 -NCT04317690 -NCT04317937 -NCT04318067 -NCT04318184 -NCT04318392 -NCT04318535 -NCT04318795 -NCT04318925 -NCT04319042 -NCT04319107 -NCT04319289 -NCT04319432 -NCT04319757 -NCT04319861 -NCT04319991 -NCT04320277 -NCT04320316 -NCT04320329 -NCT04320342 -NCT04320407 -NCT04320485 -NCT04320498 -NCT04320550 -NCT04320654 -NCT04320875 -NCT04321096 -NCT04321109 -NCT04321174 -NCT04321278 -NCT04321356 -NCT04321369 -NCT04321486 -NCT04321538 -NCT04321629 -NCT04321668 -NCT04321811 -NCT04321837 -NCT04321902 -NCT04322071 -NCT04322136 -NCT04322149 -NCT04322175 -NCT04322227 -NCT04322240 -NCT04322357 -NCT04322422 -NCT04322435 -NCT04322487 -NCT04322565 -NCT04322786 -NCT04322929 -NCT04322955 -NCT04322981 -NCT04323098 -NCT04323137 -NCT04323306 -NCT04323566 -NCT04323631 -NCT04323735 -NCT04323904 -NCT04324125 -NCT04324385 -NCT04324463 -NCT04324580 -NCT04324632 -NCT04324671 -NCT04324905 -NCT04324931 -NCT04325243 -NCT04325282 -NCT04325438 -NCT04325490 -NCT04325854 -NCT04325867 -NCT04326049 -NCT04326374 -NCT04326387 -NCT04326517 -NCT04326530 -NCT04326569 -NCT04326582 -NCT04326595 -NCT04326712 -NCT04326725 -NCT04326790 -NCT04326842 -NCT04326894 -NCT04326972 -NCT04327050 -NCT04327206 -NCT04327336 -NCT04327375 -NCT04327622 -NCT04327752 -NCT04327869 -NCT04327882 -NCT04327908 -NCT04327986 -NCT04327999 -NCT04328181 -NCT04328480 -NCT04328597 -NCT04328675 -NCT04328818 -NCT04328961 -NCT04329013 -NCT04329143 -NCT04329169 -NCT04329208 -NCT04329221 -NCT04329351 -NCT04329403 -NCT04329481 -NCT04329494 -NCT04329689 -NCT04329715 -NCT04329923 -NCT04330092 -NCT04330118 -NCT04330183 -NCT04330209 -NCT04330885 -NCT04330963 -NCT04331015 -NCT04331262 -NCT04331301 -NCT04331327 -NCT04331405 -NCT04331457 -NCT04331535 -NCT04331548 -NCT04331561 -NCT04331691 -NCT04331938 -NCT04331990 -NCT04332055 -NCT04332198 -NCT04332484 -NCT04332627 -NCT04332770 -NCT04332796 -NCT04332900 -NCT04333108 -NCT04333160 -NCT04333173 -NCT04333342 -NCT04333524 -NCT04333602 -NCT04333693 -NCT04333823 -NCT04333836 -NCT04333875 -NCT04334005 -NCT04334135 -NCT04334369 -NCT04334460 -NCT04334590 -NCT04334772 -NCT04334785 -NCT04334850 -NCT04335058 -NCT04335292 -NCT04335474 -NCT04335578 -NCT04335630 -NCT04335864 -NCT04335994 -NCT04336046 -NCT04336111 -NCT04336280 -NCT04336436 -NCT04336696 -NCT04336826 -NCT04336852 -NCT04336878 -NCT04336891 -NCT04337112 -NCT04337151 -NCT04337372 -NCT04337658 -NCT04337749 -NCT04337840 -NCT04337918 -NCT04338100 -NCT04338230 -NCT04338529 -NCT04338646 -NCT04338685 -NCT04338724 -NCT04338828 -NCT04338854 -NCT04339127 -NCT04339140 -NCT04339192 -NCT04339205 -NCT04339231 -NCT04339270 -NCT04339322 -NCT04339335 -NCT04339504 -NCT04339660 -NCT04339686 -NCT04339751 -NCT04339764 -NCT04339920 -NCT04340089 -NCT04340141 -NCT04340583 -NCT04340934 -NCT04341025 -NCT04341194 -NCT04341298 -NCT04341324 -NCT04341441 -NCT04341545 -NCT04341558 -NCT04341571 -NCT04341675 -NCT04341870 -NCT04342026 -NCT04342052 -NCT04342234 -NCT04342403 -NCT04342520 -NCT04342559 -NCT04342637 -NCT04342663 -NCT04342728 -NCT04343027 -NCT04343079 -NCT04343170 -NCT04343183 -NCT04343313 -NCT04343586 -NCT04343742 -NCT04343781 -NCT04343911 -NCT04343963 -NCT04344223 -NCT04344353 -NCT04344392 -NCT04344444 -NCT04344561 -NCT04344626 -NCT04344730 -NCT04344860 -NCT04344925 -NCT04344977 -NCT04345224 -NCT04345471 -NCT04345939 -NCT04346043 -NCT04346173 -NCT04346368 -NCT04346498 -NCT04346511 -NCT04346550 -NCT04346823 -NCT04346888 -NCT04346927 -NCT04347148 -NCT04347330 -NCT04347434 -NCT04347590 -NCT04347681 -NCT04347915 -NCT04348136 -NCT04348175 -NCT04348253 -NCT04348422 -NCT04348565 -NCT04348799 -NCT04348877 -NCT04348955 -NCT04349241 -NCT04349527 -NCT04349605 -NCT04349761 -NCT04349891 -NCT04349904 -NCT04350164 -NCT04350346 -NCT04350372 -NCT04350450 -NCT04350619 -NCT04350671 -NCT04350684 -NCT04350762 -NCT04350905 -NCT04350996 -NCT04351009 -NCT04351074 -NCT04351113 -NCT04351321 -NCT04351425 -NCT04351529 -NCT04351841 -NCT04351854 -NCT04351867 -NCT04351893 -NCT04351984 -NCT04352062 -NCT04352153 -NCT04352205 -NCT04352218 -NCT04352257 -NCT04352348 -NCT04352491 -NCT04352634 -NCT04352712 -NCT04352855 -NCT04352920 -NCT04353180 -NCT04353271 -NCT04353596 -NCT04353622 -NCT04353687 -NCT04353700 -NCT04354012 -NCT04354038 -NCT04354155 -NCT04354285 -NCT04354298 -NCT04354649 -NCT04354805 -NCT04354818 -NCT04354857 -NCT04355104 -NCT04355247 -NCT04355260 -NCT04355312 -NCT04355455 -NCT04355572 -NCT04355676 -NCT04355871 -NCT04355897 -NCT04356001 -NCT04356040 -NCT04356079 -NCT04356131 -NCT04356196 -NCT04356235 -NCT04356378 -NCT04356404 -NCT04356456 -NCT04356664 -NCT04356690 -NCT04356781 -NCT04357080 -NCT04357119 -NCT04357132 -NCT04357184 -NCT04357561 -NCT04357665 -NCT04357912 -NCT04358367 -NCT04358445 -NCT04358523 -NCT04358562 -NCT04358575 -NCT04358601 -NCT04358614 -NCT04358731 -NCT04359004 -NCT04359069 -NCT04359147 -NCT04359316 -NCT04359381 -NCT04359472 -NCT04359589 -NCT04359615 -NCT04359758 -NCT04359823 -NCT04359888 -NCT04359901 -NCT04359979 -NCT04360044 -NCT04360096 -NCT04360252 -NCT04360382 -NCT04360668 -NCT04360798 -NCT04360824 -NCT04360941 -NCT04360980 -NCT04361279 -NCT04361292 -NCT04361396 -NCT04361526 -NCT04361656 -NCT04361929 -NCT04362202 -NCT04362462 -NCT04362618 -NCT04362657 -NCT04362670 -NCT04362761 -NCT04362774 -NCT04362787 -NCT04362956 -NCT04362969 -NCT04363099 -NCT04363125 -NCT04363177 -NCT04363190 -NCT04363294 -NCT04363385 -NCT04363489 -NCT04363528 -NCT04363541 -NCT04363593 -NCT04363723 -NCT04363762 -NCT04363892 -NCT04363970 -NCT04364074 -NCT04364087 -NCT04364113 -NCT04364139 -NCT04364191 -NCT04364256 -NCT04364451 -NCT04364711 -NCT04364724 -NCT04364737 -NCT04364893 -NCT04365205 -NCT04365231 -NCT04365478 -NCT04365491 -NCT04365530 -NCT04365868 -NCT04365946 -NCT04365998 -NCT04366102 -NCT04366557 -NCT04366674 -NCT04366726 -NCT04366778 -NCT04367194 -NCT04367207 -NCT04367350 -NCT04367376 -NCT04367480 -NCT04367571 -NCT04367727 -NCT04367961 -NCT04367987 -NCT04368195 -NCT04368286 -NCT04368390 -NCT04368468 -NCT04368481 -NCT04368611 -NCT04368806 -NCT04368845 -NCT04369066 -NCT04369131 -NCT04369209 -NCT04369222 -NCT04369313 -NCT04369339 -NCT04369430 -NCT04369638 -NCT04369729 -NCT04369885 -NCT04369911 -NCT04370093 -NCT04370236 -NCT04370275 -NCT04370574 -NCT04370652 -NCT04370691 -NCT04370782 -NCT04370795 -NCT04370899 -NCT04370990 -NCT04371146 -NCT04371276 -NCT04371289 -NCT04371328 -NCT04371406 -NCT04371536 -NCT04371562 -NCT04371588 -NCT04371679 -NCT04371822 -NCT04371900 -NCT04372004 -NCT04372173 -NCT04372212 -NCT04372498 -NCT04372563 -NCT04372628 -NCT04372719 -NCT04372797 -NCT04372927 -NCT04373044 -NCT04373070 -NCT04373239 -NCT04373317 -NCT04373447 -NCT04373616 -NCT04373941 -NCT04373980 -NCT04373993 -NCT04374019 -NCT04374292 -NCT04374422 -NCT04374435 -NCT04374461 -NCT04374591 -NCT04374604 -NCT04374630 -NCT04374695 -NCT04374721 -NCT04374773 -NCT04374799 -NCT04375124 -NCT04375163 -NCT04375241 -NCT04375332 -NCT04375358 -NCT04375410 -NCT04375605 -NCT04375709 -NCT04375904 -NCT04375917 -NCT04376008 -NCT04376125 -NCT04376203 -NCT04376632 -NCT04376671 -NCT04376684 -NCT04376749 -NCT04377061 -NCT04377178 -NCT04377217 -NCT04377425 -NCT04377477 -NCT04377685 -NCT04377724 -NCT04377828 -NCT04378036 -NCT04378101 -NCT04378335 -NCT04378829 -NCT04378868 -NCT04378959 -NCT04378998 -NCT04379050 -NCT04379479 -NCT04379596 -NCT04379713 -NCT04379804 -NCT04379895 -NCT04380038 -NCT04380142 -NCT04380220 -NCT04380389 -NCT04380493 -NCT04380545 -NCT04380584 -NCT04380610 -NCT04380662 -NCT04380974 -NCT04380987 -NCT04381169 -NCT04381208 -NCT04381416 -NCT04381468 -NCT04381624 -NCT04381858 -NCT04381897 -NCT04381988 -NCT04382001 -NCT04382014 -NCT04382131 -NCT04382144 -NCT04382365 -NCT04382391 -NCT04382469 -NCT04382521 -NCT04382573 -NCT04382612 -NCT04382625 -NCT04382638 -NCT04382807 -NCT04383093 -NCT04383158 -NCT04383249 -NCT04383457 -NCT04383522 -NCT04383717 -NCT04383847 -NCT04383990 -NCT04384055 -NCT04384185 -NCT04384198 -NCT04384263 -NCT04384354 -NCT04384380 -NCT04384536 -NCT04384588 -NCT04384640 -NCT04384757 -NCT04384809 -NCT04384913 -NCT04384978 -NCT04385056 -NCT04385069 -NCT04385121 -NCT04385147 -NCT04385225 -NCT04385303 -NCT04385316 -NCT04385420 -NCT04385459 -NCT04385485 -NCT04385589 -NCT04385628 -NCT04385979 -NCT04386005 -NCT04386473 -NCT04386525 -NCT04386564 -NCT04386837 -NCT04386876 -NCT04386902 -NCT04386941 -NCT04386980 -NCT04387344 -NCT04387370 -NCT04387396 -NCT04387474 -NCT04387526 -NCT04387539 -NCT04387591 -NCT04387734 -NCT04387773 -NCT04387799 -NCT04387864 -NCT04388085 -NCT04388254 -NCT04388267 -NCT04388280 -NCT04388397 -NCT04388436 -NCT04388501 -NCT04388566 -NCT04388826 -NCT04388995 -NCT04389970 -NCT04390126 -NCT04390191 -NCT04390243 -NCT04390269 -NCT04390308 -NCT04390321 -NCT04390802 -NCT04390828 -NCT04390867 -NCT04391114 -NCT04391504 -NCT04391673 -NCT04391816 -NCT04391842 -NCT04391894 -NCT04391933 -NCT04391946 -NCT04392167 -NCT04392193 -NCT04392232 -NCT04392414 -NCT04392466 -NCT04392518 -NCT04392583 -NCT04392596 -NCT04392661 -NCT04392687 -NCT04392804 -NCT04392882 -NCT04392986 -NCT04393025 -NCT04393038 -NCT04393051 -NCT04393155 -NCT04393337 -NCT04393376 -NCT04393467 -NCT04393480 -NCT04393532 -NCT04393558 -NCT04393584 -NCT04393779 -NCT04393883 -NCT04393909 -NCT04394221 -NCT04394338 -NCT04394507 -NCT04394559 -NCT04394689 -NCT04394871 -NCT04395027 -NCT04395196 -NCT04395209 -NCT04395417 -NCT04395495 -NCT04395547 -NCT04395820 -NCT04396041 -NCT04396067 -NCT04396145 -NCT04396171 -NCT04396223 -NCT04396236 -NCT04396262 -NCT04396327 -NCT04396379 -NCT04396535 -NCT04396626 -NCT04396639 -NCT04396912 -NCT04396977 -NCT04397055 -NCT04397224 -NCT04397380 -NCT04397445 -NCT04397484 -NCT04397640 -NCT04397887 -NCT04398030 -NCT04398212 -NCT04398316 -NCT04398628 -NCT04398667 -NCT04398732 -NCT04398862 -NCT04399018 -NCT04399239 -NCT04399395 -NCT04399486 -NCT04399525 -NCT04399889 -NCT04400019 -NCT04400253 -NCT04400513 -NCT04400682 -NCT04400968 -NCT04401007 -NCT04401241 -NCT04401293 -NCT04401397 -NCT04401410 -NCT04401501 -NCT04401579 -NCT04401670 -NCT04401748 -NCT04401969 -NCT04402034 -NCT04402047 -NCT04402125 -NCT04402203 -NCT04402281 -NCT04402307 -NCT04402398 -NCT04402502 -NCT04402567 -NCT04402580 -NCT04402671 -NCT04402762 -NCT04402905 -NCT04402918 -NCT04402931 -NCT04402957 -NCT04403100 -NCT04403152 -NCT04403191 -NCT04403386 -NCT04403464 -NCT04403477 -NCT04403659 -NCT04403672 -NCT04403815 -NCT04403893 -NCT04404023 -NCT04404036 -NCT04404166 -NCT04404244 -NCT04404738 -NCT04404790 -NCT04404881 -NCT04405011 -NCT04405297 -NCT04405388 -NCT04405466 -NCT04405479 -NCT04405687 -NCT04405713 -NCT04405921 -NCT04405960 -NCT04406155 -NCT04406194 -NCT04406337 -NCT04406376 -NCT04406402 -NCT04406493 -NCT04406506 -NCT04406519 -NCT04406532 -NCT04406961 -NCT04407000 -NCT04407182 -NCT04407234 -NCT04407312 -NCT04407377 -NCT04407585 -NCT04407663 -NCT04407806 -NCT04408040 -NCT04408053 -NCT04408170 -NCT04408300 -NCT04408391 -NCT04408508 -NCT04408612 -NCT04408625 -NCT04408872 -NCT04408950 -NCT04408963 -NCT04408976 -NCT04409054 -NCT04409184 -NCT04409522 -NCT04409561 -NCT04409886 -NCT04410107 -NCT04410237 -NCT04410276 -NCT04410354 -NCT04410484 -NCT04410536 -NCT04410549 -NCT04410562 -NCT04410601 -NCT04410809 -NCT04410848 -NCT04410939 -NCT04411069 -NCT04411134 -NCT04411147 -NCT04411433 -NCT04411485 -NCT04411563 -NCT04411849 -NCT04411888 -NCT04411901 -NCT04411992 -NCT04412018 -NCT04412213 -NCT04412629 -NCT04412642 -NCT04412798 -NCT04412863 -NCT04413058 -NCT04413084 -NCT04413149 -NCT04413175 -NCT04413292 -NCT04413331 -NCT04413357 -NCT04413435 -NCT04413448 -NCT04413643 -NCT04413760 -NCT04413968 -NCT04414059 -NCT04414124 -NCT04414254 -NCT04414358 -NCT04414384 -NCT04414514 -NCT04414631 -NCT04414644 -NCT04414722 -NCT04414748 -NCT04414787 -NCT04414800 -NCT04414904 -NCT04414956 -NCT04415034 -NCT04415086 -NCT04415138 -NCT04415255 -NCT04415281 -NCT04415294 -NCT04415307 -NCT04415463 -NCT04415476 -NCT04415502 -NCT04415619 -NCT04415710 -NCT04415736 -NCT04415983 -NCT04416113 -NCT04416451 -NCT04416750 -NCT04416802 -NCT04416828 -NCT04417023 -NCT04417231 -NCT04417361 -NCT04417400 -NCT04417556 -NCT04417569 -NCT04417608 -NCT04417647 -NCT04417673 -NCT04417686 -NCT04417777 -NCT04417790 -NCT04417803 -NCT04417829 -NCT04418180 -NCT04418414 -NCT04418635 -NCT04418700 -NCT04418713 -NCT04418804 -NCT04419025 -NCT04419038 -NCT04419077 -NCT04419168 -NCT04419272 -NCT04419545 -NCT04419558 -NCT04419753 -NCT04419792 -NCT04419857 -NCT04420208 -NCT04420234 -NCT04420260 -NCT04420533 -NCT04420637 -NCT04420663 -NCT04420754 -NCT04420949 -NCT04420975 -NCT04421027 -NCT04421053 -NCT04421157 -NCT04421183 -NCT04421482 -NCT04421859 -NCT04422184 -NCT04422223 -NCT04422288 -NCT04422314 -NCT04422431 -NCT04422600 -NCT04422691 -NCT04422912 -NCT04423029 -NCT04423055 -NCT04423146 -NCT04423172 -NCT04423406 -NCT04423419 -NCT04423679 -NCT04423718 -NCT04423835 -NCT04424004 -NCT04424121 -NCT04424134 -NCT04424147 -NCT04424407 -NCT04424485 -NCT04424576 -NCT04424602 -NCT04424680 -NCT04424901 -NCT04424940 -NCT04424979 -NCT04425018 -NCT04425083 -NCT04425122 -NCT04425148 -NCT04425252 -NCT04425421 -NCT04425447 -NCT04425577 -NCT04425863 -NCT04425915 -NCT04425967 -NCT04426006 -NCT04426019 -NCT04426123 -NCT04426344 -NCT04426435 -NCT04426578 -NCT04426721 -NCT04426877 -NCT04427111 -NCT04427501 -NCT04427553 -NCT04427631 -NCT04427670 -NCT04427709 -NCT04427800 -NCT04427813 -NCT04427826 -NCT04427891 -NCT04428047 -NCT04428073 -NCT04428138 -NCT04428398 -NCT04428411 -NCT04428463 -NCT04428567 -NCT04428619 -NCT04428749 -NCT04429061 -NCT04429204 -NCT04429503 -NCT04429581 -NCT04429698 -NCT04429880 -NCT04429906 -NCT04429919 -NCT04429945 -NCT04430023 -NCT04430530 -NCT04430569 -NCT04430595 -NCT04430738 -NCT04430842 -NCT04430855 -NCT04430881 -NCT04430946 -NCT04431024 -NCT04431193 -NCT04431206 -NCT04431271 -NCT04431414 -NCT04431518 -NCT04431609 -NCT04431622 -NCT04431726 -NCT04431895 -NCT04432233 -NCT04432337 -NCT04432376 -NCT04432597 -NCT04432714 -NCT04433013 -NCT04433039 -NCT04433143 -NCT04433156 -NCT04433507 -NCT04433546 -NCT04433611 -NCT04433754 -NCT04433819 -NCT04433871 -NCT04433923 -NCT04433936 -NCT04433949 -NCT04434053 -NCT04434144 -NCT04434222 -NCT04434274 -NCT04434378 -NCT04434443 -NCT04434521 -NCT04434547 -NCT04434612 -NCT04434768 -NCT04434898 -NCT04434976 -NCT04435210 -NCT04435704 -NCT04435860 -NCT04435951 -NCT04436042 -NCT04436081 -NCT04436159 -NCT04436341 -NCT04436367 -NCT04436601 -NCT04436692 -NCT04436796 -NCT04436809 -NCT04436991 -NCT04437043 -NCT04437108 -NCT04437134 -NCT04437147 -NCT04437160 -NCT04437277 -NCT04437290 -NCT04437381 -NCT04437407 -NCT04437784 -NCT04437810 -NCT04437953 -NCT04437979 -NCT04438057 -NCT04438239 -NCT04438447 -NCT04438486 -NCT04438525 -NCT04438538 -NCT04438564 -NCT04438577 -NCT04438655 -NCT04439071 -NCT04439084 -NCT04439162 -NCT04439214 -NCT04439565 -NCT04439799 -NCT04439955 -NCT04440150 -NCT04440189 -NCT04440579 -NCT04440605 -NCT04440644 -NCT04440683 -NCT04440930 -NCT04441164 -NCT04441203 -NCT04441216 -NCT04441281 -NCT04441411 -NCT04441450 -NCT04441489 -NCT04441541 -NCT04441606 -NCT04441645 -NCT04441762 -NCT04441840 -NCT04442321 -NCT04442490 -NCT04442555 -NCT04442581 -NCT04442646 -NCT04442672 -NCT04442724 -NCT04442841 -NCT04442984 -NCT04443309 -NCT04443452 -NCT04444024 -NCT04444219 -NCT04444297 -NCT04444531 -NCT04444609 -NCT04444986 -NCT04445012 -NCT04445025 -NCT04445415 -NCT04445675 -NCT04445792 -NCT04445896 -NCT04445974 -NCT04445987 -NCT04446325 -NCT04446338 -NCT04446377 -NCT04446559 -NCT04446949 -NCT04447066 -NCT04447079 -NCT04447105 -NCT04447144 -NCT04447183 -NCT04447313 -NCT04447352 -NCT04447391 -NCT04447664 -NCT04447677 -NCT04447872 -NCT04447989 -NCT04448002 -NCT04448145 -NCT04448249 -NCT04448340 -NCT04448574 -NCT04448600 -NCT04448613 -NCT04448691 -NCT04448873 -NCT04448964 -NCT04449133 -NCT04449146 -NCT04449237 -NCT04449419 -NCT04449458 -NCT04449510 -NCT04449523 -NCT04449614 -NCT04449666 -NCT04449848 -NCT04450069 -NCT04450082 -NCT04450290 -NCT04450316 -NCT04450407 -NCT04450498 -NCT04450524 -NCT04450563 -NCT04450628 -NCT04450654 -NCT04450706 -NCT04451252 -NCT04451265 -NCT04451330 -NCT04451616 -NCT04451629 -NCT04451707 -NCT04451928 -NCT04452019 -NCT04452227 -NCT04452253 -NCT04452305 -NCT04452409 -NCT04452422 -NCT04452578 -NCT04452604 -NCT04452734 -NCT04452760 -NCT04452799 -NCT04452812 -NCT04452864 -NCT04452890 -NCT04452929 -NCT04453020 -NCT04453046 -NCT04453072 -NCT04453306 -NCT04453345 -NCT04453384 -NCT04453501 -NCT04453527 -NCT04453839 -NCT04453878 -NCT04454047 -NCT04454060 -NCT04454099 -NCT04454125 -NCT04454164 -NCT04454177 -NCT04454320 -NCT04454476 -NCT04454502 -NCT04454541 -NCT04454866 -NCT04454892 -NCT04454970 -NCT04454983 -NCT04455425 -NCT04455555 -NCT04455568 -NCT04455750 -NCT04455802 -NCT04455828 -NCT04455958 -NCT04456192 -NCT04456205 -NCT04456218 -NCT04456387 -NCT04456426 -NCT04456517 -NCT04456894 -NCT04457011 -NCT04457024 -NCT04457076 -NCT04457232 -NCT04457349 -NCT04457362 -NCT04457401 -NCT04457440 -NCT04457492 -NCT04457518 -NCT04457596 -NCT04457674 -NCT04457700 -NCT04457843 -NCT04458194 -NCT04458207 -NCT04458376 -NCT04458636 -NCT04458662 -NCT04458688 -NCT04458753 -NCT04458974 -NCT04459169 -NCT04459286 -NCT04459702 -NCT04459897 -NCT04460014 -NCT04460040 -NCT04460274 -NCT04460300 -NCT04460326 -NCT04460391 -NCT04460404 -NCT04460599 -NCT04460625 -NCT04460872 -NCT04460937 -NCT04460989 -NCT04461327 -NCT04461340 -NCT04461418 -NCT04461587 -NCT04461626 -NCT04461639 -NCT04461678 -NCT04461730 -NCT04461821 -NCT04462068 -NCT04462081 -NCT04462185 -NCT04462198 -NCT04462367 -NCT04462471 -NCT04462601 -NCT04462666 -NCT04462705 -NCT04462770 -NCT04462848 -NCT04462913 -NCT04462991 -NCT04463056 -NCT04463069 -NCT04463082 -NCT04463095 -NCT04463121 -NCT04463186 -NCT04463316 -NCT04463420 -NCT04463524 -NCT04463537 -NCT04463732 -NCT04463758 -NCT04463927 -NCT04464200 -NCT04464382 -NCT04464512 -NCT04464811 -NCT04464876 -NCT04464915 -NCT04465045 -NCT04465084 -NCT04465123 -NCT04465331 -NCT04465396 -NCT04465435 -NCT04465513 -NCT04465539 -NCT04465591 -NCT04465604 -NCT04465682 -NCT04465786 -NCT04465968 -NCT04466020 -NCT04466072 -NCT04466241 -NCT04466774 -NCT04466826 -NCT04467021 -NCT04467190 -NCT04467203 -NCT04467242 -NCT04467541 -NCT04467554 -NCT04467684 -NCT04467710 -NCT04467736 -NCT04467983 -NCT04468165 -NCT04468191 -NCT04468516 -NCT04468542 -NCT04468867 -NCT04469140 -NCT04469153 -NCT04469179 -NCT04469244 -NCT04469309 -NCT04469517 -NCT04469946 -NCT04470076 -NCT04470323 -NCT04470336 -NCT04470479 -NCT04470518 -NCT04470531 -NCT04470583 -NCT04470856 -NCT04471155 -NCT04471220 -NCT04471233 -NCT04471259 -NCT04471285 -NCT04471298 -NCT04471597 -NCT04471740 -NCT04471805 -NCT04471818 -NCT04471831 -NCT04471987 -NCT04472039 -NCT04472052 -NCT04472130 -NCT04472169 -NCT04472312 -NCT04472364 -NCT04472377 -NCT04472468 -NCT04472546 -NCT04472572 -NCT04472702 -NCT04472832 -NCT04472910 -NCT04472923 -NCT04472988 -NCT04473040 -NCT04473066 -NCT04473170 -NCT04473430 -NCT04473443 -NCT04473742 -NCT04473768 -NCT04473859 -NCT04473872 -NCT04474405 -NCT04474626 -NCT04474808 -NCT04474847 -NCT04474912 -NCT04475133 -NCT04475198 -NCT04475796 -NCT04475809 -NCT04475874 -NCT04476030 -NCT04476095 -NCT04476121 -NCT04476251 -NCT04476264 -NCT04476303 -NCT04476342 -NCT04476394 -NCT04476420 -NCT04476485 -NCT04476511 -NCT04476563 -NCT04476719 -NCT04476745 -NCT04476875 -NCT04476888 -NCT04476927 -NCT04477005 -NCT04477096 -NCT04477135 -NCT04477746 -NCT04477759 -NCT04477785 -NCT04477837 -NCT04478162 -NCT04478227 -NCT04478344 -NCT04478409 -NCT04478487 -NCT04478513 -NCT04478526 -NCT04478578 -NCT04478669 -NCT04479085 -NCT04479163 -NCT04479202 -NCT04479280 -NCT04479319 -NCT04479423 -NCT04479449 -NCT04479501 -NCT04479592 -NCT04479657 -NCT04479761 -NCT04479787 -NCT04479826 -NCT04480034 -NCT04480060 -NCT04480164 -NCT04480203 -NCT04480216 -NCT04480307 -NCT04480398 -NCT04480437 -NCT04480541 -NCT04480723 -NCT04480853 -NCT04480983 -NCT04481022 -NCT04481061 -NCT04481113 -NCT04481321 -NCT04481360 -NCT04481464 -NCT04481620 -NCT04481633 -NCT04481841 -NCT04481867 -NCT04481958 -NCT04482036 -NCT04482075 -NCT04482127 -NCT04482309 -NCT04482595 -NCT04482686 -NCT04482699 -NCT04482712 -NCT04482738 -NCT04482907 -NCT04482946 -NCT04483154 -NCT04483505 -NCT04483830 -NCT04483947 -NCT04484077 -NCT04484103 -NCT04484467 -NCT04484480 -NCT04484493 -NCT04484545 -NCT04484597 -NCT04484649 -NCT04484701 -NCT04484714 -NCT04485039 -NCT04485247 -NCT04485312 -NCT04485403 -NCT04485637 -NCT04485650 -NCT04485923 -NCT04486105 -NCT04486131 -NCT04486183 -NCT04486326 -NCT04486716 -NCT04486742 -NCT04486976 -NCT04487223 -NCT04487327 -NCT04487340 -NCT04487561 -NCT04487639 -NCT04488120 -NCT04488614 -NCT04488679 -NCT04488705 -NCT04488965 -NCT04489134 -NCT04489693 -NCT04489758 -NCT04490161 -NCT04490239 -NCT04490252 -NCT04490512 -NCT04490590 -NCT04490603 -NCT04490746 -NCT04490824 -NCT04490889 -NCT04490967 -NCT04491006 -NCT04491110 -NCT04491162 -NCT04491370 -NCT04491513 -NCT04491565 -NCT04491734 -NCT04491747 -NCT04491799 -NCT04491916 -NCT04491955 -NCT04492046 -NCT04492150 -NCT04492176 -NCT04492397 -NCT04492553 -NCT04492566 -NCT04492592 -NCT04492865 -NCT04492904 -NCT04493177 -NCT04493307 -NCT04493593 -NCT04493619 -NCT04493658 -NCT04494061 -NCT04494204 -NCT04494295 -NCT04494334 -NCT04494529 -NCT04494542 -NCT04494763 -NCT04495127 -NCT04495218 -NCT04495257 -NCT04495348 -NCT04495387 -NCT04495439 -NCT04495556 -NCT04495569 -NCT04495660 -NCT04495699 -NCT04495764 -NCT04495777 -NCT04495920 -NCT04496310 -NCT04496440 -NCT04496479 -NCT04496609 -NCT04496726 -NCT04496778 -NCT04496791 -NCT04496960 -NCT04496973 -NCT04496986 -NCT04497012 -NCT04497194 -NCT04497285 -NCT04497298 -NCT04497311 -NCT04497337 -NCT04497428 -NCT04497454 -NCT04497493 -NCT04497714 -NCT04497831 -NCT04497987 -NCT04498325 -NCT04498533 -NCT04498546 -NCT04498572 -NCT04498611 -NCT04498650 -NCT04498936 -NCT04499157 -NCT04499378 -NCT04499430 -NCT04499469 -NCT04499677 -NCT04500041 -NCT04500067 -NCT04500106 -NCT04500223 -NCT04500262 -NCT04500288 -NCT04500314 -NCT04500353 -NCT04500405 -NCT04500418 -NCT04501029 -NCT04501081 -NCT04501094 -NCT04501159 -NCT04501250 -NCT04501263 -NCT04501445 -NCT04501484 -NCT04501510 -NCT04501770 -NCT04501874 -NCT04501926 -NCT04502186 -NCT04502199 -NCT04502264 -NCT04502459 -NCT04502550 -NCT04502680 -NCT04502719 -NCT04502745 -NCT04502927 -NCT04503044 -NCT04503070 -NCT04503096 -NCT04503200 -NCT04503330 -NCT04503460 -NCT04503473 -NCT04503564 -NCT04503668 -NCT04503733 -NCT04503785 -NCT04503850 -NCT04503941 -NCT04504032 -NCT04504227 -NCT04504461 -NCT04504487 -NCT04504565 -NCT04504825 -NCT04504838 -NCT04504916 -NCT04505150 -NCT04505215 -NCT04505293 -NCT04505475 -NCT04505592 -NCT04505683 -NCT04505735 -NCT04505956 -NCT04506411 -NCT04506528 -NCT04506658 -NCT04506671 -NCT04506684 -NCT04506775 -NCT04506853 -NCT04506879 -NCT04507009 -NCT04507035 -NCT04507347 -NCT04507373 -NCT04507555 -NCT04507893 -NCT04507932 -NCT04507984 -NCT04508023 -NCT04508088 -NCT04508205 -NCT04508257 -NCT04508283 -NCT04508348 -NCT04508361 -NCT04508426 -NCT04508491 -NCT04508660 -NCT04509154 -NCT04509180 -NCT04509271 -NCT04509310 -NCT04509323 -NCT04509349 -NCT04509362 -NCT04509492 -NCT04509557 -NCT04509570 -NCT04509609 -NCT04509661 -NCT04509921 -NCT04509960 -NCT04510064 -NCT04510077 -NCT04510246 -NCT04510259 -NCT04510402 -NCT04510428 -NCT04511052 -NCT04511689 -NCT04511702 -NCT04511936 -NCT04512092 -NCT04512144 -NCT04512170 -NCT04512196 -NCT04512352 -NCT04512508 -NCT04512547 -NCT04512599 -NCT04512820 -NCT04512885 -NCT04512911 -NCT04513054 -NCT04513093 -NCT04513171 -NCT04513197 -NCT04513288 -NCT04513366 -NCT04513405 -NCT04513665 -NCT04513704 -NCT04513821 -NCT04513860 -NCT04514042 -NCT04514250 -NCT04514328 -NCT04514445 -NCT04514497 -NCT04514510 -NCT04514614 -NCT04514718 -NCT04514796 -NCT04514809 -NCT04514887 -NCT04515420 -NCT04515498 -NCT04515550 -NCT04515576 -NCT04515615 -NCT04515693 -NCT04515810 -NCT04515966 -NCT04516005 -NCT04516200 -NCT04516382 -NCT04516473 -NCT04516655 -NCT04516759 -NCT04516915 -NCT04517058 -NCT04517162 -NCT04517240 -NCT04517422 -NCT04517630 -NCT04517955 -NCT04518410 -NCT04518436 -NCT04518475 -NCT04518514 -NCT04518527 -NCT04518540 -NCT04518709 -NCT04518852 -NCT04518917 -NCT04518969 -NCT04519021 -NCT04519086 -NCT04519125 -NCT04519346 -NCT04519398 -NCT04519463 -NCT04519502 -NCT04519515 -NCT04520022 -NCT04520126 -NCT04520230 -NCT04520256 -NCT04520295 -NCT04520334 -NCT04520347 -NCT04520412 -NCT04520464 -NCT04520516 -NCT04520646 -NCT04520828 -NCT04521218 -NCT04521348 -NCT04521387 -NCT04521400 -NCT04521452 -NCT04521478 -NCT04521790 -NCT04521803 -NCT04521881 -NCT04521894 -NCT04521972 -NCT04522076 -NCT04522180 -NCT04522232 -NCT04522414 -NCT04522479 -NCT04522570 -NCT04522700 -NCT04522960 -NCT04522999 -NCT04523025 -NCT04523116 -NCT04523428 -NCT04523441 -NCT04523454 -NCT04523480 -NCT04523571 -NCT04523597 -NCT04524117 -NCT04524156 -NCT04524260 -NCT04524273 -NCT04524338 -NCT04524468 -NCT04524481 -NCT04524507 -NCT04524624 -NCT04524832 -NCT04524897 -NCT04524910 -NCT04525027 -NCT04525144 -NCT04525248 -NCT04525326 -NCT04525339 -NCT04525833 -NCT04525885 -NCT04526275 -NCT04526405 -NCT04526418 -NCT04526613 -NCT04526808 -NCT04526847 -NCT04526912 -NCT04526925 -NCT04526964 -NCT04527029 -NCT04527211 -NCT04527263 -NCT04527367 -NCT04527536 -NCT04527575 -NCT04527588 -NCT04527783 -NCT04527796 -NCT04528082 -NCT04528121 -NCT04528225 -NCT04528277 -NCT04528342 -NCT04528381 -NCT04528472 -NCT04528563 -NCT04528628 -NCT04528784 -NCT04528875 -NCT04528914 -NCT04528927 -NCT04528953 -NCT04529044 -NCT04529174 -NCT04529343 -NCT04529356 -NCT04529369 -NCT04529577 -NCT04529707 -NCT04529941 -NCT04529954 -NCT04529980 -NCT04529993 -NCT04530149 -NCT04530201 -NCT04530253 -NCT04530370 -NCT04530565 -NCT04530578 -NCT04530721 -NCT04530812 -NCT04531072 -NCT04531150 -NCT04531163 -NCT04531176 -NCT04531189 -NCT04531267 -NCT04531280 -NCT04531293 -NCT04531319 -NCT04531579 -NCT04531618 -NCT04531644 -NCT04531683 -NCT04532073 -NCT04532320 -NCT04532398 -NCT04532463 -NCT04532645 -NCT04532710 -NCT04532775 -NCT04532931 -NCT04532970 -NCT04532983 -NCT04533048 -NCT04533178 -NCT04533269 -NCT04533347 -NCT04533412 -NCT04533425 -NCT04533438 -NCT04533854 -NCT04534023 -NCT04534036 -NCT04534062 -NCT04534075 -NCT04534179 -NCT04534309 -NCT04534387 -NCT04534465 -NCT04534660 -NCT04534842 -NCT04534881 -NCT04534894 -NCT04535063 -NCT04535167 -NCT04535349 -NCT04535401 -NCT04535414 -NCT04535609 -NCT04535674 -NCT04535765 -NCT04535804 -NCT04535843 -NCT04535869 -NCT04535921 -NCT04535986 -NCT04536142 -NCT04536298 -NCT04536545 -NCT04536857 -NCT04536948 -NCT04537078 -NCT04537104 -NCT04537377 -NCT04537390 -NCT04537572 -NCT04537650 -NCT04537949 -NCT04538027 -NCT04538209 -NCT04538352 -NCT04538430 -NCT04538456 -NCT04538495 -NCT04538703 -NCT04538950 -NCT04538976 -NCT04539015 -NCT04539223 -NCT04539392 -NCT04539522 -NCT04539535 -NCT04539613 -NCT04539678 -NCT04540042 -NCT04540120 -NCT04540133 -NCT04540198 -NCT04540237 -NCT04540341 -NCT04540406 -NCT04540549 -NCT04540757 -NCT04540796 -NCT04540900 -NCT04541030 -NCT04541069 -NCT04541082 -NCT04541095 -NCT04541134 -NCT04541160 -NCT04541173 -NCT04541238 -NCT04541316 -NCT04541342 -NCT04541355 -NCT04541563 -NCT04541615 -NCT04542005 -NCT04542057 -NCT04542187 -NCT04542278 -NCT04542343 -NCT04542447 -NCT04542512 -NCT04542551 -NCT04542590 -NCT04542629 -NCT04542655 -NCT04542798 -NCT04542811 -NCT04542837 -NCT04543110 -NCT04543149 -NCT04543253 -NCT04543318 -NCT04543383 -NCT04543630 -NCT04543643 -NCT04543760 -NCT04543955 -NCT04543981 -NCT04544215 -NCT04544657 -NCT04544722 -NCT04544904 -NCT04545034 -NCT04545398 -NCT04545424 -NCT04545450 -NCT04545515 -NCT04545567 -NCT04545606 -NCT04545671 -NCT04545762 -NCT04545944 -NCT04545983 -NCT04546165 -NCT04546191 -NCT04546256 -NCT04546321 -NCT04546399 -NCT04546425 -NCT04546633 -NCT04546646 -NCT04546659 -NCT04546802 -NCT04546958 -NCT04546984 -NCT04546997 -NCT04547153 -NCT04547166 -NCT04547361 -NCT04547556 -NCT04547738 -NCT04547764 -NCT04547842 -NCT04547881 -NCT04547907 -NCT04548102 -NCT04548206 -NCT04548232 -NCT04548297 -NCT04548349 -NCT04548791 -NCT04548934 -NCT04549129 -NCT04549246 -NCT04549402 -NCT04549584 -NCT04549597 -NCT04549649 -NCT04549857 -NCT04550169 -NCT04550390 -NCT04550468 -NCT04550689 -NCT04550819 -NCT04550988 -NCT04551079 -NCT04551170 -NCT04551339 -NCT04551417 -NCT04551495 -NCT04551521 -NCT04551599 -NCT04551612 -NCT04551664 -NCT04551833 -NCT04551898 -NCT04551924 -NCT04552028 -NCT04552158 -NCT04552249 -NCT04552418 -NCT04552496 -NCT04552743 -NCT04552769 -NCT04553068 -NCT04553094 -NCT04553172 -NCT04553211 -NCT04553224 -NCT04553276 -NCT04553302 -NCT04553315 -NCT04553354 -NCT04553406 -NCT04553562 -NCT04553575 -NCT04553653 -NCT04553874 -NCT04553913 -NCT04553991 -NCT04554082 -NCT04554147 -NCT04554160 -NCT04554290 -NCT04554342 -NCT04554355 -NCT04554459 -NCT04554472 -NCT04554485 -NCT04554615 -NCT04554940 -NCT04554953 -NCT04555161 -NCT04555239 -NCT04555278 -NCT04555291 -NCT04555343 -NCT04555356 -NCT04555382 -NCT04555421 -NCT04555499 -NCT04555525 -NCT04555538 -NCT04555772 -NCT04555785 -NCT04556071 -NCT04556409 -NCT04556461 -NCT04556981 -NCT04556994 -NCT04557046 -NCT04557085 -NCT04557150 -NCT04557215 -NCT04557371 -NCT04557410 -NCT04557449 -NCT04557553 -NCT04557579 -NCT04557618 -NCT04557644 -NCT04557774 -NCT04557826 -NCT04557865 -NCT04557943 -NCT04558021 -NCT04558125 -NCT04558216 -NCT04558242 -NCT04558268 -NCT04558372 -NCT04558567 -NCT04558619 -NCT04558645 -NCT04558697 -NCT04558736 -NCT04558996 -NCT04559009 -NCT04559269 -NCT04559503 -NCT04559620 -NCT04559919 -NCT04559945 -NCT04560205 -NCT04560257 -NCT04560842 -NCT04560907 -NCT04560933 -NCT04560985 -NCT04561063 -NCT04561089 -NCT04561102 -NCT04561219 -NCT04561323 -NCT04561401 -NCT04561414 -NCT04561505 -NCT04561583 -NCT04561661 -NCT04561791 -NCT04561804 -NCT04561869 -NCT04561882 -NCT04561921 -NCT04561960 -NCT04561999 -NCT04562129 -NCT04562350 -NCT04562701 -NCT04562831 -NCT04563091 -NCT04563208 -NCT04563221 -NCT04563468 -NCT04563507 -NCT04563520 -NCT04563767 -NCT04563806 -NCT04564144 -NCT04564235 -NCT04564430 -NCT04564456 -NCT04564469 -NCT04564729 -NCT04564846 -NCT04565093 -NCT04565106 -NCT04565210 -NCT04565236 -NCT04565314 -NCT04565353 -NCT04565392 -NCT04565431 -NCT04565483 -NCT04565509 -NCT04565548 -NCT04565847 -NCT04565873 -NCT04566315 -NCT04566458 -NCT04566718 -NCT04566952 -NCT04566991 -NCT04567147 -NCT04567225 -NCT04567277 -NCT04567355 -NCT04567368 -NCT04567420 -NCT04567433 -NCT04567511 -NCT04567758 -NCT04567797 -NCT04567914 -NCT04568005 -NCT04568031 -NCT04568044 -NCT04568148 -NCT04568174 -NCT04568252 -NCT04568356 -NCT04568460 -NCT04568499 -NCT04568616 -NCT04568759 -NCT04568811 -NCT04568941 -NCT04568954 -NCT04569006 -NCT04569110 -NCT04569136 -NCT04569149 -NCT04569279 -NCT04569292 -NCT04569370 -NCT04569422 -NCT04569591 -NCT04569682 -NCT04569708 -NCT04569721 -NCT04569747 -NCT04569786 -NCT04569825 -NCT04570046 -NCT04570215 -NCT04570254 -NCT04570397 -NCT04570540 -NCT04570566 -NCT04570592 -NCT04570696 -NCT04570722 -NCT04570761 -NCT04570852 -NCT04571008 -NCT04571034 -NCT04571060 -NCT04571255 -NCT04571333 -NCT04571372 -NCT04571411 -NCT04571450 -NCT04571476 -NCT04571489 -NCT04571541 -NCT04571710 -NCT04571788 -NCT04571801 -NCT04572022 -NCT04572503 -NCT04572555 -NCT04572568 -NCT04572672 -NCT04572802 -NCT04572867 -NCT04572984 -NCT04573049 -NCT04573062 -NCT04573231 -NCT04573257 -NCT04573309 -NCT04573504 -NCT04573582 -NCT04573777 -NCT04573907 -NCT04574102 -NCT04574115 -NCT04574297 -NCT04574336 -NCT04574375 -NCT04574583 -NCT04574635 -NCT04574700 -NCT04574765 -NCT04574999 -NCT04575077 -NCT04575090 -NCT04575129 -NCT04575194 -NCT04575337 -NCT04575376 -NCT04575389 -NCT04575493 -NCT04575610 -NCT04575636 -NCT04575649 -NCT04575714 -NCT04575844 -NCT04575857 -NCT04575909 -NCT04575948 -NCT04575974 -NCT04576078 -NCT04576182 -NCT04576221 -NCT04576247 -NCT04576273 -NCT04576299 -NCT04576403 -NCT04576676 -NCT04576793 -NCT04576936 -NCT04577040 -NCT04577053 -NCT04577105 -NCT04577170 -NCT04577248 -NCT04577274 -NCT04577300 -NCT04577378 -NCT04577482 -NCT04577521 -NCT04577625 -NCT04577950 -NCT04578080 -NCT04578106 -NCT04578301 -NCT04578457 -NCT04578639 -NCT04578769 -NCT04578847 -NCT04578860 -NCT04578977 -NCT04579146 -NCT04579237 -NCT04579250 -NCT04579315 -NCT04579367 -NCT04579445 -NCT04579497 -NCT04579588 -NCT04579614 -NCT04579666 -NCT04579731 -NCT04579848 -NCT04579913 -NCT04579952 -NCT04579965 -NCT04580069 -NCT04580199 -NCT04580225 -NCT04580238 -NCT04580264 -NCT04580329 -NCT04580381 -NCT04580407 -NCT04580433 -NCT04580511 -NCT04580563 -NCT04580628 -NCT04580641 -NCT04580823 -NCT04581148 -NCT04581239 -NCT04581291 -NCT04581408 -NCT04581421 -NCT04581837 -NCT04581941 -NCT04581980 -NCT04582292 -NCT04582383 -NCT04582500 -NCT04582721 -NCT04582825 -NCT04583189 -NCT04583215 -NCT04583228 -NCT04583280 -NCT04583527 -NCT04583618 -NCT04583683 -NCT04583735 -NCT04583761 -NCT04583826 -NCT04584034 -NCT04584060 -NCT04584073 -NCT04584112 -NCT04584138 -NCT04584203 -NCT04584437 -NCT04584489 -NCT04584528 -NCT04584580 -NCT04584801 -NCT04584840 -NCT04584866 -NCT04584970 -NCT04585061 -NCT04585100 -NCT04585113 -NCT04585152 -NCT04585243 -NCT04585256 -NCT04585373 -NCT04585438 -NCT04585542 -NCT04585594 -NCT04585750 -NCT04585828 -NCT04585997 -NCT04586075 -NCT04586179 -NCT04586283 -NCT04586400 -NCT04586452 -NCT04586816 -NCT04587050 -NCT04587206 -NCT04587440 -NCT04587544 -NCT04587635 -NCT04587648 -NCT04587674 -NCT04587726 -NCT04588077 -NCT04588207 -NCT04588233 -NCT04588272 -NCT04588337 -NCT04588376 -NCT04588558 -NCT04588636 -NCT04588688 -NCT04588857 -NCT04588974 -NCT04589273 -NCT04589299 -NCT04589312 -NCT04589481 -NCT04589598 -NCT04589624 -NCT04589819 -NCT04589858 -NCT04589949 -NCT04590066 -NCT04590079 -NCT04590391 -NCT04590456 -NCT04590638 -NCT04590716 -NCT04590755 -NCT04590807 -NCT04591054 -NCT04591093 -NCT04591132 -NCT04591275 -NCT04591301 -NCT04591405 -NCT04591613 -NCT04591782 -NCT04591860 -NCT04591951 -NCT04591977 -NCT04592094 -NCT04592133 -NCT04592302 -NCT04592471 -NCT04592549 -NCT04592601 -NCT04592627 -NCT04592692 -NCT04592822 -NCT04593004 -NCT04593173 -NCT04593303 -NCT04593407 -NCT04593563 -NCT04593771 -NCT04593966 -NCT04594057 -NCT04594148 -NCT04594252 -NCT04594304 -NCT04594369 -NCT04594486 -NCT04594512 -NCT04594590 -NCT04594720 -NCT04594954 -NCT04595006 -NCT04595032 -NCT04595045 -NCT04595058 -NCT04595227 -NCT04595240 -NCT04595331 -NCT04595344 -NCT04595474 -NCT04595513 -NCT04595526 -NCT04595747 -NCT04595760 -NCT04595942 -NCT04596007 -NCT04596020 -NCT04596085 -NCT04596150 -NCT04596241 -NCT04596319 -NCT04596527 -NCT04596540 -NCT04596787 -NCT04596826 -NCT04596969 -NCT04596982 -NCT04597138 -NCT04597203 -NCT04597437 -NCT04597554 -NCT04598126 -NCT04598152 -NCT04598295 -NCT04598334 -NCT04598425 -NCT04598490 -NCT04598568 -NCT04598789 -NCT04598815 -NCT04598841 -NCT04598971 -NCT04599153 -NCT04599179 -NCT04599205 -NCT04599218 -NCT04599283 -NCT04599374 -NCT04599621 -NCT04599803 -NCT04599829 -NCT04599855 -NCT04600011 -NCT04600063 -NCT04600349 -NCT04600479 -NCT04600674 -NCT04600739 -NCT04600752 -NCT04600895 -NCT04600973 -NCT04601077 -NCT04601233 -NCT04601298 -NCT04601324 -NCT04601467 -NCT04601558 -NCT04601792 -NCT04601883 -NCT04601909 -NCT04601987 -NCT04602117 -NCT04602130 -NCT04602195 -NCT04602234 -NCT04602286 -NCT04602299 -NCT04602390 -NCT04602442 -NCT04602572 -NCT04602663 -NCT04602676 -NCT04602754 -NCT04602780 -NCT04602793 -NCT04602819 -NCT04602858 -NCT04603040 -NCT04603105 -NCT04603157 -NCT04603248 -NCT04603469 -NCT04603508 -NCT04603560 -NCT04603703 -NCT04603716 -NCT04604015 -NCT04604041 -NCT04604067 -NCT04604132 -NCT04604223 -NCT04604353 -NCT04604366 -NCT04604405 -NCT04604444 -NCT04604522 -NCT04604535 -NCT04604548 -NCT04604600 -NCT04604691 -NCT04604730 -NCT04604951 -NCT04604977 -NCT04605107 -NCT04605159 -NCT04605198 -NCT04605263 -NCT04605302 -NCT04605419 -NCT04605510 -NCT04605575 -NCT04605627 -NCT04605705 -NCT04605861 -NCT04605978 -NCT04606004 -NCT04606355 -NCT04606693 -NCT04606849 -NCT04606992 -NCT04607109 -NCT04607265 -NCT04607356 -NCT04607369 -NCT04607408 -NCT04607473 -NCT04607564 -NCT04607603 -NCT04607772 -NCT04607824 -NCT04607850 -NCT04607863 -NCT04607967 -NCT04608071 -NCT04608084 -NCT04608136 -NCT04608162 -NCT04608357 -NCT04608435 -NCT04608474 -NCT04608487 -NCT04608500 -NCT04608604 -NCT04608773 -NCT04608851 -NCT04608864 -NCT04608955 -NCT04609020 -NCT04609436 -NCT04609709 -NCT04609735 -NCT04609787 -NCT04609839 -NCT04609852 -NCT04609982 -NCT04610138 -NCT04610372 -NCT04610385 -NCT04610424 -NCT04610437 -NCT04610450 -NCT04610632 -NCT04610814 -NCT04610918 -NCT04610957 -NCT04611464 -NCT04611477 -NCT04611516 -NCT04611594 -NCT04611672 -NCT04611685 -NCT04611828 -NCT04611958 -NCT04611971 -NCT04611997 -NCT04612036 -NCT04612218 -NCT04612283 -NCT04612413 -NCT04612478 -NCT04612556 -NCT04612634 -NCT04612660 -NCT04612803 -NCT04613089 -NCT04613206 -NCT04613323 -NCT04613791 -NCT04613973 -NCT04613986 -NCT04614142 -NCT04614246 -NCT04614324 -NCT04614337 -NCT04614402 -NCT04614519 -NCT04614545 -NCT04614610 -NCT04614779 -NCT04614935 -NCT04614974 -NCT04615065 -NCT04615078 -NCT04615624 -NCT04615663 -NCT04615702 -NCT04615728 -NCT04615767 -NCT04616066 -NCT04616326 -NCT04616339 -NCT04616352 -NCT04616508 -NCT04616547 -NCT04616625 -NCT04616924 -NCT04616989 -NCT04617054 -NCT04617223 -NCT04617418 -NCT04617600 -NCT04617808 -NCT04617847 -NCT04618081 -NCT04618120 -NCT04618224 -NCT04618237 -NCT04618510 -NCT04618627 -NCT04618666 -NCT04618679 -NCT04618822 -NCT04619095 -NCT04619199 -NCT04619290 -NCT04619524 -NCT04619589 -NCT04619628 -NCT04619680 -NCT04619719 -NCT04619862 -NCT04620057 -NCT04620096 -NCT04620161 -NCT04620174 -NCT04620538 -NCT04620629 -NCT04620980 -NCT04620993 -NCT04621032 -NCT04621045 -NCT04621136 -NCT04621240 -NCT04621331 -NCT04621461 -NCT04621539 -NCT04621799 -NCT04621825 -NCT04621916 -NCT04622098 -NCT04622410 -NCT04622449 -NCT04622891 -NCT04622969 -NCT04623008 -NCT04623073 -NCT04623086 -NCT04623203 -NCT04623216 -NCT04623580 -NCT04623749 -NCT04623801 -NCT04623840 -NCT04623866 -NCT04624087 -NCT04624230 -NCT04624334 -NCT04624399 -NCT04624412 -NCT04624425 -NCT04624477 -NCT04624568 -NCT04624789 -NCT04624971 -NCT04625322 -NCT04625361 -NCT04625374 -NCT04625816 -NCT04625881 -NCT04626063 -NCT04626219 -NCT04626544 -NCT04626674 -NCT04626817 -NCT04626843 -NCT04626986 -NCT04627168 -NCT04627727 -NCT04627766 -NCT04627818 -NCT04627909 -NCT04627987 -NCT04628000 -NCT04628182 -NCT04628312 -NCT04628429 -NCT04628455 -NCT04628468 -NCT04628572 -NCT04628585 -NCT04628650 -NCT04628871 -NCT04628884 -NCT04628975 -NCT04629014 -NCT04629040 -NCT04629157 -NCT04629183 -NCT04629235 -NCT04629378 -NCT04629482 -NCT04629599 -NCT04629664 -NCT04629677 -NCT04629859 -NCT04630028 -NCT04630067 -NCT04630145 -NCT04630275 -NCT04630301 -NCT04630353 -NCT04630444 -NCT04630574 -NCT04630678 -NCT04630951 -NCT04631003 -NCT04631016 -NCT04631068 -NCT04631094 -NCT04631107 -NCT04631211 -NCT04631224 -NCT04631237 -NCT04631250 -NCT04631341 -NCT04631354 -NCT04631471 -NCT04631484 -NCT04631536 -NCT04631575 -NCT04631614 -NCT04631640 -NCT04631718 -NCT04631796 -NCT04631809 -NCT04632173 -NCT04632225 -NCT04632381 -NCT04632394 -NCT04632485 -NCT04632628 -NCT04632836 -NCT04632888 -NCT04632901 -NCT04632914 -NCT04633057 -NCT04633213 -NCT04633252 -NCT04633330 -NCT04633356 -NCT04633447 -NCT04633473 -NCT04633486 -NCT04633668 -NCT04633772 -NCT04633785 -NCT04634032 -NCT04634045 -NCT04634097 -NCT04634240 -NCT04634305 -NCT04634383 -NCT04634409 -NCT04634448 -NCT04634773 -NCT04635007 -NCT04635059 -NCT04635098 -NCT04635176 -NCT04635228 -NCT04635436 -NCT04635488 -NCT04635514 -NCT04635826 -NCT04635891 -NCT04635930 -NCT04635943 -NCT04635969 -NCT04636034 -NCT04636164 -NCT04636229 -NCT04636320 -NCT04636710 -NCT04636840 -NCT04636892 -NCT04636957 -NCT04636996 -NCT04637022 -NCT04637165 -NCT04637217 -NCT04637373 -NCT04637516 -NCT04637672 -NCT04638153 -NCT04638335 -NCT04638491 -NCT04638517 -NCT04638660 -NCT04638816 -NCT04639076 -NCT04639258 -NCT04639284 -NCT04639323 -NCT04639518 -NCT04639531 -NCT04639674 -NCT04639869 -NCT04640077 -NCT04640116 -NCT04640558 -NCT04640701 -NCT04640727 -NCT04640805 -NCT04641013 -NCT04641182 -NCT04641195 -NCT04641325 -NCT04641364 -NCT04641403 -NCT04641507 -NCT04641598 -NCT04641611 -NCT04641767 -NCT04641780 -NCT04642105 -NCT04642183 -NCT04642287 -NCT04642313 -NCT04642326 -NCT04642352 -NCT04642443 -NCT04642508 -NCT04642573 -NCT04642963 -NCT04643054 -NCT04643158 -NCT04643223 -NCT04643262 -NCT04643275 -NCT04643327 -NCT04643392 -NCT04643470 -NCT04643574 -NCT04643639 -NCT04643730 -NCT04643756 -NCT04643821 -NCT04643873 -NCT04644016 -NCT04644393 -NCT04644471 -NCT04644575 -NCT04644705 -NCT04644965 -NCT04645030 -NCT04645173 -NCT04645238 -NCT04645264 -NCT04645459 -NCT04645563 -NCT04645732 -NCT04645862 -NCT04645966 -NCT04646018 -NCT04646083 -NCT04646252 -NCT04646291 -NCT04646356 -NCT04646447 -NCT04646486 -NCT04646577 -NCT04646772 -NCT04646811 -NCT04646863 -NCT04647045 -NCT04647097 -NCT04647227 -NCT04647305 -NCT04647383 -NCT04647448 -NCT04647487 -NCT04647513 -NCT04647526 -NCT04647578 -NCT04647721 -NCT04647825 -NCT04647851 -NCT04647877 -NCT04647981 -NCT04647994 -NCT04648085 -NCT04648332 -NCT04648397 -NCT04648527 -NCT04648631 -NCT04648683 -NCT04648696 -NCT04648722 -NCT04649060 -NCT04649073 -NCT04649242 -NCT04649255 -NCT04649268 -NCT04649294 -NCT04649424 -NCT04649528 -NCT04649593 -NCT04649619 -NCT04649684 -NCT04649775 -NCT04649827 -NCT04649931 -NCT04650035 -NCT04650113 -NCT04650347 -NCT04650425 -NCT04650464 -NCT04650971 -NCT04651140 -NCT04651218 -NCT04651244 -NCT04651257 -NCT04651335 -NCT04651712 -NCT04651855 -NCT04651894 -NCT04651959 -NCT04651998 -NCT04652024 -NCT04652037 -NCT04652141 -NCT04652167 -NCT04652414 -NCT04652713 -NCT04652765 -NCT04652843 -NCT04653129 -NCT04653155 -NCT04653220 -NCT04653337 -NCT04653428 -NCT04653623 -NCT04653662 -NCT04653714 -NCT04653753 -NCT04653870 -NCT04653896 -NCT04653909 -NCT04653935 -NCT04654026 -NCT04654182 -NCT04654338 -NCT04654377 -NCT04654429 -NCT04654559 -NCT04654689 -NCT04654832 -NCT04654845 -NCT04655014 -NCT04655131 -NCT04655300 -NCT04655313 -NCT04655391 -NCT04655443 -NCT04655508 -NCT04655547 -NCT04655599 -NCT04655820 -NCT04656002 -NCT04656028 -NCT04656067 -NCT04656184 -NCT04656236 -NCT04656275 -NCT04656730 -NCT04656886 -NCT04657224 -NCT04657276 -NCT04657406 -NCT04657562 -NCT04657822 -NCT04657848 -NCT04657874 -NCT04657887 -NCT04657913 -NCT04657952 -NCT04658316 -NCT04658342 -NCT04658381 -NCT04658524 -NCT04658641 -NCT04658667 -NCT04658797 -NCT04659109 -NCT04659200 -NCT04659265 -NCT04659330 -NCT04659525 -NCT04659616 -NCT04659798 -NCT04659889 -NCT04660006 -NCT04660019 -NCT04660045 -NCT04660201 -NCT04660214 -NCT04660292 -NCT04660357 -NCT04660370 -NCT04660461 -NCT04660500 -NCT04660630 -NCT04660643 -NCT04660825 -NCT04660864 -NCT04661098 -NCT04661111 -NCT04661176 -NCT04661189 -NCT04661202 -NCT04661241 -NCT04661267 -NCT04661319 -NCT04661371 -NCT04661475 -NCT04661605 -NCT04661670 -NCT04661722 -NCT04661748 -NCT04661969 -NCT04662398 -NCT04662437 -NCT04662515 -NCT04662528 -NCT04662944 -NCT04663113 -NCT04663165 -NCT04663178 -NCT04663230 -NCT04663334 -NCT04663490 -NCT04663568 -NCT04663659 -NCT04663685 -NCT04663698 -NCT04664075 -NCT04664231 -NCT04664478 -NCT04664647 -NCT04664764 -NCT04664894 -NCT04665011 -NCT04665128 -NCT04665154 -NCT04665245 -NCT04665258 -NCT04665284 -NCT04665414 -NCT04665596 -NCT04665661 -NCT04665674 -NCT04665700 -NCT04665713 -NCT04665752 -NCT04665869 -NCT04665908 -NCT04666103 -NCT04666480 -NCT04666805 -NCT04666909 -NCT04666948 -NCT04666961 -NCT04667195 -NCT04667221 -NCT04667325 -NCT04667338 -NCT04667403 -NCT04667429 -NCT04667520 -NCT04667650 -NCT04667663 -NCT04667741 -NCT04667845 -NCT04667884 -NCT04667910 -NCT04667936 -NCT04668001 -NCT04668014 -NCT04668053 -NCT04668365 -NCT04668404 -NCT04668495 -NCT04668547 -NCT04668599 -NCT04668625 -NCT04668690 -NCT04668716 -NCT04668794 -NCT04668924 -NCT04668950 -NCT04668989 -NCT04669015 -NCT04669028 -NCT04669145 -NCT04669223 -NCT04669275 -NCT04669288 -NCT04669327 -NCT04669574 -NCT04669704 -NCT04669847 -NCT04669938 -NCT04670016 -NCT04670120 -NCT04670250 -NCT04670289 -NCT04670393 -NCT04670484 -NCT04670549 -NCT04670562 -NCT04670809 -NCT04670952 -NCT04671095 -NCT04671147 -NCT04671264 -NCT04671290 -NCT04671446 -NCT04671472 -NCT04671511 -NCT04671524 -NCT04671693 -NCT04671719 -NCT04671823 -NCT04671901 -NCT04671979 -NCT04672031 -NCT04672174 -NCT04672187 -NCT04672304 -NCT04672408 -NCT04672421 -NCT04672551 -NCT04672642 -NCT04672681 -NCT04672837 -NCT04672980 -NCT04673123 -NCT04673201 -NCT04673266 -NCT04673448 -NCT04673591 -NCT04673604 -NCT04673682 -NCT04673695 -NCT04673708 -NCT04673864 -NCT04673903 -NCT04674072 -NCT04674137 -NCT04674202 -NCT04674241 -NCT04674293 -NCT04674423 -NCT04674579 -NCT04674605 -NCT04674709 -NCT04674735 -NCT04674813 -NCT04675034 -NCT04675164 -NCT04675177 -NCT04675190 -NCT04675216 -NCT04675385 -NCT04675398 -NCT04675463 -NCT04675541 -NCT04675723 -NCT04675775 -NCT04675892 -NCT04675944 -NCT04676048 -NCT04676113 -NCT04676269 -NCT04676399 -NCT04676594 -NCT04676646 -NCT04676659 -NCT04676685 -NCT04676776 -NCT04676867 -NCT04677140 -NCT04677296 -NCT04677348 -NCT04677413 -NCT04677465 -NCT04677517 -NCT04677543 -NCT04677569 -NCT04677621 -NCT04677634 -NCT04677777 -NCT04677803 -NCT04677842 -NCT04677972 -NCT04678050 -NCT04678089 -NCT04678167 -NCT04678453 -NCT04678804 -NCT04678830 -NCT04678895 -NCT04679012 -NCT04679116 -NCT04679129 -NCT04679233 -NCT04679324 -NCT04679389 -NCT04679519 -NCT04679662 -NCT04679675 -NCT04679727 -NCT04679883 -NCT04679935 -NCT04679987 -NCT04680013 -NCT04680598 -NCT04680702 -NCT04680806 -NCT04680832 -NCT04680923 -NCT04680936 -NCT04681066 -NCT04681105 -NCT04681183 -NCT04681560 -NCT04681573 -NCT04681599 -NCT04681612 -NCT04681625 -NCT04681833 -NCT04681963 -NCT04682093 -NCT04682119 -NCT04682158 -NCT04682171 -NCT04682340 -NCT04682457 -NCT04682548 -NCT04682834 -NCT04682860 -NCT04682873 -NCT04682964 -NCT04682977 -NCT04683003 -NCT04683107 -NCT04683172 -NCT04683185 -NCT04683263 -NCT04683354 -NCT04683367 -NCT04683406 -NCT04683419 -NCT04683549 -NCT04683796 -NCT04683887 -NCT04683913 -NCT04683926 -NCT04683952 -NCT04684199 -NCT04684290 -NCT04684381 -NCT04684641 -NCT04684654 -NCT04684927 -NCT04684940 -NCT04685005 -NCT04685109 -NCT04685200 -NCT04685213 -NCT04685343 -NCT04685434 -NCT04685577 -NCT04685694 -NCT04685772 -NCT04685785 -NCT04685863 -NCT04686006 -NCT04686071 -NCT04686318 -NCT04686357 -NCT04686435 -NCT04686500 -NCT04686617 -NCT04686630 -NCT04686799 -NCT04687020 -NCT04687033 -NCT04687124 -NCT04687189 -NCT04687215 -NCT04687254 -NCT04687371 -NCT04687878 -NCT04687943 -NCT04687995 -NCT04688034 -NCT04688112 -NCT04688125 -NCT04688190 -NCT04688398 -NCT04688437 -NCT04688463 -NCT04688476 -NCT04688528 -NCT04688788 -NCT04688905 -NCT04689009 -NCT04689165 -NCT04689191 -NCT04689230 -NCT04689243 -NCT04689295 -NCT04689607 -NCT04689906 -NCT04690075 -NCT04690166 -NCT04690192 -NCT04690322 -NCT04690374 -NCT04690491 -NCT04690543 -NCT04690634 -NCT04690803 -NCT04690816 -NCT04691011 -NCT04691089 -NCT04691258 -NCT04691414 -NCT04691440 -NCT04691453 -NCT04691544 -NCT04691583 -NCT04691687 -NCT04691752 -NCT04691791 -NCT04691830 -NCT04691947 -NCT04691960 -NCT04692597 -NCT04692805 -NCT04692844 -NCT04693104 -NCT04693156 -NCT04693247 -NCT04693299 -NCT04693312 -NCT04693624 -NCT04693689 -NCT04693702 -NCT04693871 -NCT04693936 -NCT04694040 -NCT04694053 -NCT04694079 -NCT04694092 -NCT04694313 -NCT04694534 -NCT04694586 -NCT04694612 -NCT04694729 -NCT04694859 -NCT04694989 -NCT04695171 -NCT04695275 -NCT04695379 -NCT04695418 -NCT04695431 -NCT04695483 -NCT04695600 -NCT04695626 -NCT04695795 -NCT04695860 -NCT04695912 -NCT04696133 -NCT04696289 -NCT04696341 -NCT04696497 -NCT04696510 -NCT04696640 -NCT04696666 -NCT04696770 -NCT04696874 -NCT04696952 -NCT04697043 -NCT04697069 -NCT04697368 -NCT04697498 -NCT04697563 -NCT04697641 -NCT04697693 -NCT04697784 -NCT04697797 -NCT04697875 -NCT04697992 -NCT04698083 -NCT04698239 -NCT04698265 -NCT04698304 -NCT04698421 -NCT04698460 -NCT04698499 -NCT04698525 -NCT04698551 -NCT04698668 -NCT04698759 -NCT04698772 -NCT04698915 -NCT04698928 -NCT04698967 -NCT04698993 -NCT04699045 -NCT04699136 -NCT04699175 -NCT04699279 -NCT04699344 -NCT04699357 -NCT04699513 -NCT04699578 -NCT04699591 -NCT04699656 -NCT04699786 -NCT04700059 -NCT04700111 -NCT04700163 -NCT04700280 -NCT04700319 -NCT04700332 -NCT04700436 -NCT04700501 -NCT04700540 -NCT04700579 -NCT04700761 -NCT04701034 -NCT04701086 -NCT04701242 -NCT04701879 -NCT04701944 -NCT04701957 -NCT04702022 -NCT04702139 -NCT04702152 -NCT04702204 -NCT04702217 -NCT04702373 -NCT04702620 -NCT04702750 -NCT04702776 -NCT04702893 -NCT04702932 -NCT04703062 -NCT04703192 -NCT04703218 -NCT04703231 -NCT04703439 -NCT04703569 -NCT04703595 -NCT04703608 -NCT04703647 -NCT04703699 -NCT04703959 -NCT04704076 -NCT04704141 -NCT04704154 -NCT04704193 -NCT04704245 -NCT04704258 -NCT04704284 -NCT04704297 -NCT04704336 -NCT04704401 -NCT04704466 -NCT04704531 -NCT04704661 -NCT04704947 -NCT04705337 -NCT04705350 -NCT04705558 -NCT04705571 -NCT04705597 -NCT04705727 -NCT04705753 -NCT04706104 -NCT04706169 -NCT04706364 -NCT04706416 -NCT04706455 -NCT04706520 -NCT04706533 -NCT04706559 -NCT04706689 -NCT04706715 -NCT04706819 -NCT04706910 -NCT04707001 -NCT04707092 -NCT04707274 -NCT04707287 -NCT04707521 -NCT04707573 -NCT04707664 -NCT04707820 -NCT04707885 -NCT04707963 -NCT04708041 -NCT04708158 -NCT04708249 -NCT04708288 -NCT04708314 -NCT04708327 -NCT04708483 -NCT04708743 -NCT04708925 -NCT04709133 -NCT04709146 -NCT04709276 -NCT04709302 -NCT04709393 -NCT04709601 -NCT04709744 -NCT04709822 -NCT04709965 -NCT04709978 -NCT04710160 -NCT04710186 -NCT04710238 -NCT04710407 -NCT04710654 -NCT04710745 -NCT04710758 -NCT04710862 -NCT04711122 -NCT04711148 -NCT04711356 -NCT04711447 -NCT04711551 -NCT04711642 -NCT04711655 -NCT04711720 -NCT04711863 -NCT04711876 -NCT04712448 -NCT04712552 -NCT04712760 -NCT04712799 -NCT04712825 -NCT04713085 -NCT04713098 -NCT04713150 -NCT04713293 -NCT04713345 -NCT04713423 -NCT04713475 -NCT04713527 -NCT04713579 -NCT04713852 -NCT04713930 -NCT04713969 -NCT04714021 -NCT04714086 -NCT04714099 -NCT04714203 -NCT04714398 -NCT04714424 -NCT04714567 -NCT04714658 -NCT04714736 -NCT04715087 -NCT04715100 -NCT04715113 -NCT04715126 -NCT04715139 -NCT04715256 -NCT04715542 -NCT04715568 -NCT04715685 -NCT04715724 -NCT04715867 -NCT04715932 -NCT04715945 -NCT04715971 -NCT04716049 -NCT04716127 -NCT04716244 -NCT04716309 -NCT04716322 -NCT04716374 -NCT04716543 -NCT04716582 -NCT04716712 -NCT04716738 -NCT04716868 -NCT04716985 -NCT04717206 -NCT04717219 -NCT04717271 -NCT04717362 -NCT04717583 -NCT04717609 -NCT04717622 -NCT04717661 -NCT04718103 -NCT04718233 -NCT04718246 -NCT04718285 -NCT04718298 -NCT04718337 -NCT04718389 -NCT04718545 -NCT04718558 -NCT04718597 -NCT04718649 -NCT04718662 -NCT04718766 -NCT04718831 -NCT04718948 -NCT04719104 -NCT04719468 -NCT04719572 -NCT04719624 -NCT04719715 -NCT04719754 -NCT04719819 -NCT04719832 -NCT04719910 -NCT04719962 -NCT04720092 -NCT04720170 -NCT04720235 -NCT04720469 -NCT04720651 -NCT04720690 -NCT04720794 -NCT04720950 -NCT04721028 -NCT04721041 -NCT04721795 -NCT04722172 -NCT04722458 -NCT04722523 -NCT04722588 -NCT04722601 -NCT04722614 -NCT04722796 -NCT04722965 -NCT04723147 -NCT04723173 -NCT04723394 -NCT04723524 -NCT04723589 -NCT04723719 -NCT04723745 -NCT04723862 -NCT04724135 -NCT04724291 -NCT04724330 -NCT04724512 -NCT04724876 -NCT04725045 -NCT04725123 -NCT04725175 -NCT04725305 -NCT04725734 -NCT04725786 -NCT04725812 -NCT04725929 -NCT04726046 -NCT04726059 -NCT04726085 -NCT04726150 -NCT04726306 -NCT04726345 -NCT04726748 -NCT04727112 -NCT04727177 -NCT04727424 -NCT04727606 -NCT04727866 -NCT04727892 -NCT04728191 -NCT04728217 -NCT04728269 -NCT04728386 -NCT04728399 -NCT04728412 -NCT04728425 -NCT04728438 -NCT04728685 -NCT04728841 -NCT04728880 -NCT04729218 -NCT04729621 -NCT04729842 -NCT04729933 -NCT04729959 -NCT04730076 -NCT04730154 -NCT04730245 -NCT04730713 -NCT04730752 -NCT04730765 -NCT04730973 -NCT04730986 -NCT04731129 -NCT04731233 -NCT04731246 -NCT04731428 -NCT04731493 -NCT04731636 -NCT04731727 -NCT04731740 -NCT04731818 -NCT04731974 -NCT04732026 -NCT04732052 -NCT04732260 -NCT04732533 -NCT04732546 -NCT04732572 -NCT04732650 -NCT04732663 -NCT04732728 -NCT04732793 -NCT04732897 -NCT04733040 -NCT04733079 -NCT04733092 -NCT04733170 -NCT04733248 -NCT04733274 -NCT04733326 -NCT04733573 -NCT04733755 -NCT04733781 -NCT04733924 -NCT04733937 -NCT04733950 -NCT04733976 -NCT04734080 -NCT04734093 -NCT04734119 -NCT04734236 -NCT04734457 -NCT04734522 -NCT04734561 -NCT04734795 -NCT04734925 -NCT04735055 -NCT04735302 -NCT04735432 -NCT04735458 -NCT04735484 -NCT04735627 -NCT04735705 -NCT04735783 -NCT04735874 -NCT04736030 -NCT04736095 -NCT04736264 -NCT04736537 -NCT04736563 -NCT04736602 -NCT04736758 -NCT04736836 -NCT04737031 -NCT04737070 -NCT04737278 -NCT04737330 -NCT04737343 -NCT04737395 -NCT04737538 -NCT04737642 -NCT04737681 -NCT04737837 -NCT04737954 -NCT04738058 -NCT04738201 -NCT04738409 -NCT04738422 -NCT04738812 -NCT04738851 -NCT04738864 -NCT04738890 -NCT04738968 -NCT04739033 -NCT04739085 -NCT04739202 -NCT04739319 -NCT04739345 -NCT04739423 -NCT04739436 -NCT04739553 -NCT04739566 -NCT04739592 -NCT04739644 -NCT04739813 -NCT04739839 -NCT04739891 -NCT04740255 -NCT04740320 -NCT04740333 -NCT04740359 -NCT04740554 -NCT04740788 -NCT04741126 -NCT04741139 -NCT04741295 -NCT04741334 -NCT04741477 -NCT04741620 -NCT04741737 -NCT04741763 -NCT04741880 -NCT04741932 -NCT04741971 -NCT04742088 -NCT04742114 -NCT04742127 -NCT04742205 -NCT04742465 -NCT04742543 -NCT04742608 -NCT04743089 -NCT04743102 -NCT04743167 -NCT04743232 -NCT04743323 -NCT04743349 -NCT04743362 -NCT04743583 -NCT04743596 -NCT04743609 -NCT04743804 -NCT04743921 -NCT04743934 -NCT04744064 -NCT04744168 -NCT04744532 -NCT04744636 -NCT04744675 -NCT04744701 -NCT04744753 -NCT04744766 -NCT04745039 -NCT04745156 -NCT04745195 -NCT04745299 -NCT04745858 -NCT04745897 -NCT04746066 -NCT04746092 -NCT04746599 -NCT04746742 -NCT04747262 -NCT04747275 -NCT04747353 -NCT04747444 -NCT04747483 -NCT04747652 -NCT04747808 -NCT04747925 -NCT04747964 -NCT04748237 -NCT04748263 -NCT04748302 -NCT04748393 -NCT04748406 -NCT04748640 -NCT04748731 -NCT04748796 -NCT04748991 -NCT04749017 -NCT04749472 -NCT04749563 -NCT04749589 -NCT04749602 -NCT04749693 -NCT04749810 -NCT04749875 -NCT04749914 -NCT04749992 -NCT04750044 -NCT04750226 -NCT04750252 -NCT04750317 -NCT04750369 -NCT04750421 -NCT04750460 -NCT04750850 -NCT04750941 -NCT04750993 -NCT04751006 -NCT04751019 -NCT04751058 -NCT04751123 -NCT04751136 -NCT04751149 -NCT04751214 -NCT04751435 -NCT04751656 -NCT04751734 -NCT04751929 -NCT04751942 -NCT04751994 -NCT04752007 -NCT04752202 -NCT04752371 -NCT04752384 -NCT04752410 -NCT04752449 -NCT04752475 -NCT04752553 -NCT04752592 -NCT04752826 -NCT04752930 -NCT04753034 -NCT04753190 -NCT04753216 -NCT04753255 -NCT04753307 -NCT04754126 -NCT04754152 -NCT04754178 -NCT04754243 -NCT04754503 -NCT04754516 -NCT04754594 -NCT04754607 -NCT04754633 -NCT04754880 -NCT04754997 -NCT04755010 -NCT04755101 -NCT04755114 -NCT04755179 -NCT04755452 -NCT04755647 -NCT04755881 -NCT04756141 -NCT04756193 -NCT04756271 -NCT04756362 -NCT04756557 -NCT04756596 -NCT04756739 -NCT04756778 -NCT04756921 -NCT04756986 -NCT04757116 -NCT04757376 -NCT04757441 -NCT04757571 -NCT04757662 -NCT04757688 -NCT04757779 -NCT04758117 -NCT04758351 -NCT04758624 -NCT04758871 -NCT04758884 -NCT04758923 -NCT04758962 -NCT04759131 -NCT04759144 -NCT04759378 -NCT04759430 -NCT04759534 -NCT04759586 -NCT04759833 -NCT04759859 -NCT04759911 -NCT04759937 -NCT04759989 -NCT04760080 -NCT04760145 -NCT04760210 -NCT04760288 -NCT04760340 -NCT04760366 -NCT04760379 -NCT04760483 -NCT04760548 -NCT04760561 -NCT04760821 -NCT04761003 -NCT04761250 -NCT04761289 -NCT04761419 -NCT04761549 -NCT04761562 -NCT04761757 -NCT04762108 -NCT04762277 -NCT04762446 -NCT04762498 -NCT04762563 -NCT04762615 -NCT04762667 -NCT04762810 -NCT04762823 -NCT04762940 -NCT04763057 -NCT04763122 -NCT04763135 -NCT04763187 -NCT04763395 -NCT04763538 -NCT04763629 -NCT04763694 -NCT04763876 -NCT04763941 -NCT04763967 -NCT04764097 -NCT04764110 -NCT04764136 -NCT04764253 -NCT04764344 -NCT04764370 -NCT04764461 -NCT04764552 -NCT04764578 -NCT04764682 -NCT04764760 -NCT04764903 -NCT04765293 -NCT04765527 -NCT04765618 -NCT04765644 -NCT04765722 -NCT04765930 -NCT04765943 -NCT04766216 -NCT04766242 -NCT04766268 -NCT04766307 -NCT04766645 -NCT04766723 -NCT04766853 -NCT04766931 -NCT04767074 -NCT04767412 -NCT04767516 -NCT04767542 -NCT04767620 -NCT04767698 -NCT04767919 -NCT04767945 -NCT04768010 -NCT04768062 -NCT04768088 -NCT04768257 -NCT04768400 -NCT04768439 -NCT04768465 -NCT04768517 -NCT04768608 -NCT04768647 -NCT04768699 -NCT04768803 -NCT04769180 -NCT04769323 -NCT04769375 -NCT04769401 -NCT04769531 -NCT04769661 -NCT04769895 -NCT04769973 -NCT04770142 -NCT04770220 -NCT04770337 -NCT04770441 -NCT04770454 -NCT04770467 -NCT04770701 -NCT04770727 -NCT04770740 -NCT04770792 -NCT04770909 -NCT04770935 -NCT04770948 -NCT04770961 -NCT04771065 -NCT04771221 -NCT04771481 -NCT04771520 -NCT04771533 -NCT04771663 -NCT04771741 -NCT04771910 -NCT04771936 -NCT04772105 -NCT04772183 -NCT04772196 -NCT04772378 -NCT04772456 -NCT04772573 -NCT04772677 -NCT04772755 -NCT04772937 -NCT04772963 -NCT04773028 -NCT04773184 -NCT04773249 -NCT04773353 -NCT04773470 -NCT04773509 -NCT04773535 -NCT04773613 -NCT04773626 -NCT04773652 -NCT04773899 -NCT04774029 -NCT04774172 -NCT04774367 -NCT04774536 -NCT04774796 -NCT04775069 -NCT04775108 -NCT04775381 -NCT04775394 -NCT04775498 -NCT04775758 -NCT04775810 -NCT04775836 -NCT04775940 -NCT04776057 -NCT04776109 -NCT04776616 -NCT04776668 -NCT04776681 -NCT04776889 -NCT04777188 -NCT04777396 -NCT04777409 -NCT04777526 -NCT04777682 -NCT04777708 -NCT04777734 -NCT04777903 -NCT04777981 -NCT04778176 -NCT04778358 -NCT04778384 -NCT04778683 -NCT04778748 -NCT04778865 -NCT04779047 -NCT04779151 -NCT04779190 -NCT04779359 -NCT04779489 -NCT04779515 -NCT04779593 -NCT04779645 -NCT04779749 -NCT04780165 -NCT04780230 -NCT04780399 -NCT04780477 -NCT04780828 -NCT04780893 -NCT04780906 -NCT04780958 -NCT04780997 -NCT04781387 -NCT04781426 -NCT04781452 -NCT04781582 -NCT04781738 -NCT04781842 -NCT04781894 -NCT04781985 -NCT04782037 -NCT04782063 -NCT04782076 -NCT04782167 -NCT04782349 -NCT04782440 -NCT04782479 -NCT04782596 -NCT04782856 -NCT04782986 -NCT04783038 -NCT04783129 -NCT04783259 -NCT04783337 -NCT04783441 -NCT04783532 -NCT04783714 -NCT04783727 -NCT04783805 -NCT04783922 -NCT04783974 -NCT04784065 -NCT04784104 -NCT04784208 -NCT04784234 -NCT04784312 -NCT04784351 -NCT04784546 -NCT04784585 -NCT04784780 -NCT04784988 -NCT04785014 -NCT04785040 -NCT04785235 -NCT04785248 -NCT04785612 -NCT04785924 -NCT04785950 -NCT04786041 -NCT04786262 -NCT04786353 -NCT04786457 -NCT04786522 -NCT04786535 -NCT04786587 -NCT04786743 -NCT04786795 -NCT04786873 -NCT04786886 -NCT04786951 -NCT04787757 -NCT04788407 -NCT04788433 -NCT04788459 -NCT04788745 -NCT04788771 -NCT04788914 -NCT04789057 -NCT04789083 -NCT04789096 -NCT04789135 -NCT04789317 -NCT04789434 -NCT04789447 -NCT04789538 -NCT04789629 -NCT04789733 -NCT04789824 -NCT04789902 -NCT04789941 -NCT04789993 -NCT04790006 -NCT04790019 -NCT04790045 -NCT04790058 -NCT04790110 -NCT04790305 -NCT04790370 -NCT04790435 -NCT04790487 -NCT04790500 -NCT04790513 -NCT04790591 -NCT04790669 -NCT04790799 -NCT04790994 -NCT04791033 -NCT04791059 -NCT04791111 -NCT04791202 -NCT04791228 -NCT04791241 -NCT04791397 -NCT04791410 -NCT04791462 -NCT04791475 -NCT04791579 -NCT04791683 -NCT04791930 -NCT04791956 -NCT04792164 -NCT04792255 -NCT04792385 -NCT04792450 -NCT04792892 -NCT04792931 -NCT04792944 -NCT04792957 -NCT04792970 -NCT04793035 -NCT04793256 -NCT04793321 -NCT04793412 -NCT04793646 -NCT04793724 -NCT04793763 -NCT04793776 -NCT04793789 -NCT04794023 -NCT04794049 -NCT04794088 -NCT04794244 -NCT04794595 -NCT04794634 -NCT04794660 -NCT04794673 -NCT04794803 -NCT04794842 -NCT04794881 -NCT04794985 -NCT04795063 -NCT04795089 -NCT04795271 -NCT04795310 -NCT04795440 -NCT04795466 -NCT04795557 -NCT04795570 -NCT04795934 -NCT04795947 -NCT04796051 -NCT04796090 -NCT04796129 -NCT04796155 -NCT04796246 -NCT04796350 -NCT04796532 -NCT04796597 -NCT04796740 -NCT04796753 -NCT04796987 -NCT04797013 -NCT04797494 -NCT04797520 -NCT04797572 -NCT04797611 -NCT04797715 -NCT04797936 -NCT04798053 -NCT04798079 -NCT04798248 -NCT04798313 -NCT04798326 -NCT04798365 -NCT04798378 -NCT04798469 -NCT04798547 -NCT04798625 -NCT04798690 -NCT04798768 -NCT04798911 -NCT04799015 -NCT04799132 -NCT04799223 -NCT04799275 -NCT04799392 -NCT04799405 -NCT04799418 -NCT04799834 -NCT04800185 -NCT04800406 -NCT04800445 -NCT04800562 -NCT04800783 -NCT04800887 -NCT04800939 -NCT04801121 -NCT04801212 -NCT04801238 -NCT04801251 -NCT04801550 -NCT04801732 -NCT04801771 -NCT04801862 -NCT04801875 -NCT04802018 -NCT04802044 -NCT04802291 -NCT04802551 -NCT04802668 -NCT04802837 -NCT04802850 -NCT04803110 -NCT04803136 -NCT04803305 -NCT04803474 -NCT04803487 -NCT04803526 -NCT04803643 -NCT04803760 -NCT04803825 -NCT04803916 -NCT04804020 -NCT04804111 -NCT04804267 -NCT04804280 -NCT04804293 -NCT04804592 -NCT04804618 -NCT04804683 -NCT04804787 -NCT04804800 -NCT04804943 -NCT04805021 -NCT04805112 -NCT04805138 -NCT04805177 -NCT04805190 -NCT04805229 -NCT04805268 -NCT04805320 -NCT04805515 -NCT04805580 -NCT04805710 -NCT04805723 -NCT04805736 -NCT04805801 -NCT04806269 -NCT04806282 -NCT04806373 -NCT04806412 -NCT04806698 -NCT04806711 -NCT04806763 -NCT04806789 -NCT04806815 -NCT04806828 -NCT04806854 -NCT04806867 -NCT04807010 -NCT04807023 -NCT04807140 -NCT04807244 -NCT04807335 -NCT04807361 -NCT04807426 -NCT04807465 -NCT04807569 -NCT04807803 -NCT04807881 -NCT04807894 -NCT04808232 -NCT04808349 -NCT04808375 -NCT04808518 -NCT04808531 -NCT04808583 -NCT04808596 -NCT04808609 -NCT04808648 -NCT04808726 -NCT04808752 -NCT04808778 -NCT04808791 -NCT04808843 -NCT04808856 -NCT04808869 -NCT04808921 -NCT04808999 -NCT04809025 -NCT04809376 -NCT04809389 -NCT04809441 -NCT04809714 -NCT04809883 -NCT04809909 -NCT04809974 -NCT04810104 -NCT04810156 -NCT04810325 -NCT04810351 -NCT04810429 -NCT04810442 -NCT04810832 -NCT04810949 -NCT04811079 -NCT04811196 -NCT04811248 -NCT04811365 -NCT04811495 -NCT04811534 -NCT04811586 -NCT04811846 -NCT04811950 -NCT04811963 -NCT04812054 -NCT04812093 -NCT04812119 -NCT04812132 -NCT04812197 -NCT04812327 -NCT04812340 -NCT04812418 -NCT04812509 -NCT04812730 -NCT04812756 -NCT04812808 -NCT04812860 -NCT04813055 -NCT04813380 -NCT04813471 -NCT04813575 -NCT04813614 -NCT04813640 -NCT04813887 -NCT04813900 -NCT04814147 -NCT04814173 -NCT04814212 -NCT04814251 -NCT04814303 -NCT04814368 -NCT04814420 -NCT04814563 -NCT04814940 -NCT04815213 -NCT04815226 -NCT04815317 -NCT04815330 -NCT04815369 -NCT04815421 -NCT04815551 -NCT04815577 -NCT04815707 -NCT04815720 -NCT04815811 -NCT04815889 -NCT04815928 -NCT04815954 -NCT04815980 -NCT04816136 -NCT04816370 -NCT04816409 -NCT04816448 -NCT04816461 -NCT04816513 -NCT04816630 -NCT04816786 -NCT04816851 -NCT04816864 -NCT04816877 -NCT04816916 -NCT04817033 -NCT04817293 -NCT04817462 -NCT04817514 -NCT04817592 -NCT04817631 -NCT04817683 -NCT04817735 -NCT04817865 -NCT04818021 -NCT04818112 -NCT04818138 -NCT04818203 -NCT04818268 -NCT04818307 -NCT04818411 -NCT04818437 -NCT04818502 -NCT04818853 -NCT04819009 -NCT04819139 -NCT04819178 -NCT04819269 -NCT04819399 -NCT04819451 -NCT04819646 -NCT04819763 -NCT04819958 -NCT04819971 -NCT04820010 -NCT04820036 -NCT04820049 -NCT04820114 -NCT04820413 -NCT04820569 -NCT04820621 -NCT04820764 -NCT04820829 -NCT04821167 -NCT04821219 -NCT04821232 -NCT04821245 -NCT04821297 -NCT04821349 -NCT04821505 -NCT04821583 -NCT04821726 -NCT04821830 -NCT04821869 -NCT04821882 -NCT04821908 -NCT04821960 -NCT04822090 -NCT04822337 -NCT04822363 -NCT04822402 -NCT04822506 -NCT04822519 -NCT04822584 -NCT04822675 -NCT04822701 -NCT04822753 -NCT04822831 -NCT04822844 -NCT04822909 -NCT04822935 -NCT04823052 -NCT04823195 -NCT04823221 -NCT04823351 -NCT04823494 -NCT04823520 -NCT04823637 -NCT04823741 -NCT04823767 -NCT04823780 -NCT04823845 -NCT04823858 -NCT04823936 -NCT04824365 -NCT04824391 -NCT04824417 -NCT04824625 -NCT04824911 -NCT04825067 -NCT04825080 -NCT04825119 -NCT04825223 -NCT04825314 -NCT04825418 -NCT04825470 -NCT04825483 -NCT04825626 -NCT04825639 -NCT04825769 -NCT04825808 -NCT04825977 -NCT04826042 -NCT04826185 -NCT04826237 -NCT04826614 -NCT04826887 -NCT04826952 -NCT04826978 -NCT04827238 -NCT04827459 -NCT04827524 -NCT04827602 -NCT04827641 -NCT04827875 -NCT04828161 -NCT04828486 -NCT04828616 -NCT04828655 -NCT04828707 -NCT04828733 -NCT04828798 -NCT04828850 -NCT04828889 -NCT04829032 -NCT04829214 -NCT04829461 -NCT04829565 -NCT04829734 -NCT04829890 -NCT04830085 -NCT04830137 -NCT04830579 -NCT04830748 -NCT04830787 -NCT04830852 -NCT04831034 -NCT04831047 -NCT04831099 -NCT04831125 -NCT04831476 -NCT04831580 -NCT04831593 -NCT04831645 -NCT04831671 -NCT04831710 -NCT04831788 -NCT04831957 -NCT04832399 -NCT04832490 -NCT04832529 -NCT04832542 -NCT04832880 -NCT04832919 -NCT04833023 -NCT04833192 -NCT04833426 -NCT04833491 -NCT04833608 -NCT04833621 -NCT04833790 -NCT04833894 -NCT04833946 -NCT04833985 -NCT04834089 -NCT04834167 -NCT04834362 -NCT04834479 -NCT04834531 -NCT04834622 -NCT04834635 -NCT04834791 -NCT04834843 -NCT04835155 -NCT04835298 -NCT04835389 -NCT04835415 -NCT04835428 -NCT04835558 -NCT04835571 -NCT04835610 -NCT04835623 -NCT04835649 -NCT04835662 -NCT04835688 -NCT04835766 -NCT04835792 -NCT04835857 -NCT04836013 -NCT04836091 -NCT04836286 -NCT04836598 -NCT04836884 -NCT04836897 -NCT04837027 -NCT04837040 -NCT04837066 -NCT04837079 -NCT04837196 -NCT04837326 -NCT04837378 -NCT04837794 -NCT04837963 -NCT04838002 -NCT04838015 -NCT04838028 -NCT04838080 -NCT04838210 -NCT04838249 -NCT04838301 -NCT04838353 -NCT04838678 -NCT04838886 -NCT04839003 -NCT04839081 -NCT04839419 -NCT04839497 -NCT04839614 -NCT04839731 -NCT04839848 -NCT04839900 -NCT04840017 -NCT04840303 -NCT04840433 -NCT04840472 -NCT04840576 -NCT04840615 -NCT04840693 -NCT04840719 -NCT04840771 -NCT04841057 -NCT04841135 -NCT04841174 -NCT04841187 -NCT04841213 -NCT04841239 -NCT04841265 -NCT04841356 -NCT04841460 -NCT04841590 -NCT04841629 -NCT04841733 -NCT04842019 -NCT04842474 -NCT04842552 -NCT04842656 -NCT04842669 -NCT04842942 -NCT04843293 -NCT04843345 -NCT04843397 -NCT04843423 -NCT04843787 -NCT04843800 -NCT04843904 -NCT04844086 -NCT04844164 -NCT04844190 -NCT04844424 -NCT04844437 -NCT04844645 -NCT04844801 -NCT04844814 -NCT04844866 -NCT04845009 -NCT04845022 -NCT04845165 -NCT04845347 -NCT04845555 -NCT04845633 -NCT04845776 -NCT04845932 -NCT04846010 -NCT04846140 -NCT04846179 -NCT04846231 -NCT04846296 -NCT04846413 -NCT04846465 -NCT04846803 -NCT04846829 -NCT04847089 -NCT04847141 -NCT04847414 -NCT04847544 -NCT04847661 -NCT04847700 -NCT04847752 -NCT04847934 -NCT04847999 -NCT04848181 -NCT04848415 -NCT04848480 -NCT04848532 -NCT04848545 -NCT04848870 -NCT04849078 -NCT04849234 -NCT04849572 -NCT04849650 -NCT04849676 -NCT04849871 -NCT04850001 -NCT04850053 -NCT04850300 -NCT04850495 -NCT04850547 -NCT04850664 -NCT04850885 -NCT04851067 -NCT04851145 -NCT04851184 -NCT04851275 -NCT04851444 -NCT04851483 -NCT04851496 -NCT04851639 -NCT04851730 -NCT04851769 -NCT04852172 -NCT04852185 -NCT04852198 -NCT04852237 -NCT04852328 -NCT04852406 -NCT04852497 -NCT04852510 -NCT04852731 -NCT04853017 -NCT04853056 -NCT04853199 -NCT04853316 -NCT04853589 -NCT04853680 -NCT04853693 -NCT04853745 -NCT04853784 -NCT04853901 -NCT04853914 -NCT04854044 -NCT04854122 -NCT04854447 -NCT04854681 -NCT04854746 -NCT04854967 -NCT04855110 -NCT04855214 -NCT04855266 -NCT04855370 -NCT04855812 -NCT04855838 -NCT04855955 -NCT04856020 -NCT04856072 -NCT04856085 -NCT04856111 -NCT04856228 -NCT04856254 -NCT04856267 -NCT04856280 -NCT04856306 -NCT04856566 -NCT04856644 -NCT04856696 -NCT04856735 -NCT04856865 -NCT04856969 -NCT04856995 -NCT04857021 -NCT04857489 -NCT04857749 -NCT04858074 -NCT04858386 -NCT04858464 -NCT04858581 -NCT04858763 -NCT04858841 -NCT04858919 -NCT04859075 -NCT04859088 -NCT04859127 -NCT04859205 -NCT04859504 -NCT04859517 -NCT04859569 -NCT04859608 -NCT04859621 -NCT04859712 -NCT04859829 -NCT04859959 -NCT04860037 -NCT04860063 -NCT04860180 -NCT04860232 -NCT04860245 -NCT04860310 -NCT04860375 -NCT04860622 -NCT04860700 -NCT04860726 -NCT04860752 -NCT04860804 -NCT04860856 -NCT04861038 -NCT04861090 -NCT04861129 -NCT04861155 -NCT04861246 -NCT04861259 -NCT04861298 -NCT04861337 -NCT04861454 -NCT04861506 -NCT04861571 -NCT04861649 -NCT04861701 -NCT04861753 -NCT04861779 -NCT04861805 -NCT04861922 -NCT04862000 -NCT04862039 -NCT04862208 -NCT04862273 diff --git a/utils/Indexer/zipper.sh b/utils/Indexer/zipper.sh deleted file mode 100644 index e226ee02..00000000 --- a/utils/Indexer/zipper.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -IFS=$'\n\t' - -SRC_DIR="processed_criteria" -CHUNKS=6 -CHUNK_PREFIX="criteria_part" - -# Create a working directory for chunks -mkdir -p zip_chunks - -# Step 1: List top-level folders and count them -folders=($(find "$SRC_DIR" -mindepth 1 -maxdepth 1 -type d)) -total=${#folders[@]} -per_chunk=$(( (total + CHUNKS - 1) / CHUNKS )) # Round up - -# Step 2: Divide folders into 6 chunks and zip each -info() { echo -e "\033[0;32m[INFO]\033[0m $*"; } - -info "Total subfolders: $total" -info "Creating $CHUNKS zip chunks, ~${per_chunk} folders each..." - -for ((i=0; i>", # Double greater than - "\xc2\xbc": "1/4", # one quarter - "\xc2\xbd": "1/2", # one half - "\xc2\xbe": "3/4", # three quarters - "\xca\xbf": "\x27", # c-single quote - "\xcc\xa8": "", # modifier - under curve - "\xcc\xb1": "", # modifier - under line - "\x95": " ", -} - - -def replace_chars(match): - char = match.group(0) - return chars[char] - - -def remove_special_chars_encoding(text): - pattern = "(" + "|".join(chars.keys()) + ")" - return re.sub(pattern, replace_chars, text) - - -def add_space_after_parenthesis(text): - # Use regular expression to find ")" followed by a letter and insert a space - result = re.sub(r"\)([a-zA-Z])", r") \1", text) - return result - - -def tokenize_clinical_note(id_list, source_directory=INPUT_FILEPATH): - data = [] - for _id in id_list: - with open(source_directory + "/" + "%s" % _id + "/" + "clinical_note.txt") as f: - text = f.read() - - phi_tags = re.findall("(\[\*\*.*?\*\*\])", text) - for i, tag in enumerate(phi_tags): - text = text.replace(tag, " __PHI_%d__ " % i) - text = text.replace(tag, "__PHI__") - - """ - Thoughts & Strategies - - If a newline happens in between matching parens, then ignore newline - - Identify prose v nonprose. Use nltk.sent_tokenize on prose - - not perfect, but it is pretty good with ignoring mid-sentence newlines - - - section header: "\n------ Protected Section ------\n" - - - If you can detect a bulleted list, then those are sentences - - sometimes the bullets are hyphens "-", sometimes numbers "1." - - - ecg reports are very short & seem to be exclusively prose - - echo reports are VERY structured. definitely useful to do a echo-specific one - - nursing notes have a linear structure. sections are easily identifiable - - nursing_other notes are typically very short (and parse-able) - - radiology reports have lots of "________________________" sections - - seems like they always have "MEDICAL CONDITION" and "FINAL REPORT" sections - - found list example where "1." is its own line and its info is own next line :/ - - could be rehab-specific for notes - - strong consistency format in social_work - """ - - # break into many segments - segments = mimic_sent_tokenize_rules(text) - - # run nltk tokenizer on these segments to split prose - sents = [] - for segment in segments: - s = nltk.sent_tokenize(segment) - sents += s - - # put the PHI back - for i in range(len(sents)): - tags = re.findall("(__PHI_(\d+)__)", sents[i]) - for tag, ind in tags: - sents[i] = sents[i].replace(tag, phi_tags[int(ind)]) - - most_recent_title = None - most_recent_inline_title = None - - for sentence in sents: - sentence = remove_full_stops_and_commas(sentence) - - if len(sentence) > 1: - is_sentence_title = is_title(sentence) - is_sentence_inline_title = is_inline_title(sentence) - - field = None - - if is_sentence_title: - most_recent_title = sentence - field = sentence[:-1] - sentence = "___" - elif is_sentence_inline_title: - most_recent_inline_title = sentence.split(":", 1)[0] - field = most_recent_inline_title - sentence = sentence.split(":", 1)[1] - else: - # Check for the most recent title or inline title encountered - if most_recent_title: - field = most_recent_title[:-1] - elif most_recent_inline_title: - field = most_recent_inline_title - - data.append( - ( - _id, - field, - sentence.replace("___", ""), - is_sentence_title, - is_sentence_inline_title, - ) - ) - else: - continue - - # Create a DataFrame with 'Sentence' and 'IsTitle' columns - df = pd.DataFrame( - data, columns=["id", "field", "sentence", "IsTitle", "IsInlineTitle"] - ) - df.to_csv(PREPROCESSED_OUTPUT_FILEPATH + "%s_preprocessed.csv" % id_list[0]) - return df - - -def mimic_sent_tokenize_rules(text): - # long sections are OBVIOUSLY different sentences - text = re.sub("---+", "\n\n-----\n\n", text) - text = re.sub("___+", "\n\n_____\n\n", text) - text = re.sub("\n\n+", "\n\n", text) - text = text.replace("___", "") - text = re.sub(r"(? 0: - new_segments.append(prefix.strip()) - - # add the header - new_segments.append(h) - - # remove the prefix from processing (very unlikely to be empty) - segment = rest.strip() - - # add the final piece (aka what comes after all headers are processed) - if len(segment) > 0: - new_segments.append(segment.strip()) - - # copy over the new list of segments (further segmented than original segments) - segments = list(new_segments) - new_segments = [] - - ### Low-hanging fruit: "_____" is a delimiter - for segment in segments: - subsections = segment.split("\n_____\n") - new_segments.append(subsections[0]) - for ss in subsections[1:]: - new_segments.append("_____") - new_segments.append(ss) - - segments = list(new_segments) - new_segments = [] - - ### Low-hanging fruit: "-----" is a delimiter - for segment in segments: - subsections = segment.split("\n-----\n") - new_segments.append(subsections[0]) - for ss in subsections[1:]: - new_segments.append("-----") - new_segments.append(ss) - - segments = list(new_segments) - new_segments = [] - - """ - for segment in segments: - print('------------START------------') - print(segment) - print('-------------END-------------') - print - exit() - """ - - ### Separate enumerated lists ### - for segment in segments: - if not re.search("\n\s*\d+\.", "\n" + segment): - new_segments.append(segment) - continue - - """ - print('------------START------------') - print(segment) - print('-------------END-------------') - print - """ - - # generalizes in case the list STARTS this section - segment = "\n" + segment - - # determine whether this segment contains a bulleted list (assumes i,i+1,...,n) - start = int(re.search("\n\s*(\d+)\.", "\n" + segment).groups()[0]) - n = start - while re.search("\n\s*%d." % n, segment): - n += 1 - n -= 1 - - # no bulleted list - if n < 1: - new_segments.append(segment) - continue - - """ - print('------------START------------') - print(segment) - print('-------------END-------------') - - print(start,n) - print - """ - - # break each list into its own line - # challenge: not clear how to tell when the list ends if more text happens next - for i in range(start, n + 1): - matching_text = re.search("(\n\s*\d+\.)", segment) - if matching_text: - matching_text = matching_text.groups()[0] - prefix = segment[: segment.index(matching_text)].strip() - segment = segment[segment.index(matching_text) :].strip() - else: - continue - - if len(prefix) > 0: - new_segments.append(prefix) - - if len(segment) > 0: - new_segments.append(segment) - - segments = list(new_segments) - new_segments = [] - - """ - TODO: Big Challenge - - There is so much variation in what makes a list. Intuitively, I can tell it's a - list because it shows repeated structure (often following a header) - - Examples of some lists (with numbers & symptoms changed around to noise) - - Past Medical History: - -- Hyperlipidemia - -- lactose intolerance - -- Hypertension - - - Physical Exam: - Vitals - T 82.2 BP 123/23 HR 73 R 21 75% on 2L NC - General - well appearing male, sitting up in chair in NAD - Neck - supple, JVP elevated to angle of jaw - CV - distant heart sounds, RRR, faint __PHI_43__ murmur at - - - Labs: - __PHI_10__ 12:00PM BLOOD WBC-8.8 RBC-8.88* Hgb-88.8* Hct-88.8* - MCV-88 MCH-88.8 MCHC-88.8 RDW-88.8* Plt Ct-888 - __PHI_14__ 04:54AM BLOOD WBC-8.8 RBC-8.88* Hgb-88.8* Hct-88.8* - MCV-88 MCH-88.8 MCHC-88.8 RDW-88.8* Plt Ct-888 - __PHI_23__ 03:33AM BLOOD WBC-8.8 RBC-8.88* Hgb-88.8* Hct-88.8* - MCV-88 MCH-88.8 MCHC-88.8 RDW-88.8* Plt Ct-888 - __PHI_109__ 03:06AM BLOOD WBC-8.8 RBC-8.88* Hgb-88.8* Hct-88.8* - MCV-88 MCH-88.8 MCHC-88.8 RDW-88.8* Plt Ct-888 - __PHI_1__ 05:09AM BLOOD WBC-8.8 RBC-8.88* Hgb-88.8* Hct-88.8* - MCV-88 MCH-88.8 MCHC-88.8 RDW-88.8* Plt Ct-888 - __PHI_26__ 04:53AM BLOOD WBC-8.8 RBC-8.88* Hgb-88.8* Hct-88.8* - MCV-88 MCH-88.8 MCHC-88.8 RDW-88.8* Plt Ct-888 - __PHI_301__ 05:30AM BLOOD WBC-8.8 RBC-8.88* Hgb-88.8* Hct-88.8* - MCV-88 MCH-88.8 MCHC-88.8 RDW-88.8* Plt Ct-888 - - - Medications on Admission: - Allopurinol 100 mg DAILY - Aspirin 250 mg DAILY - Atorvastatin 10 mg DAILY - Glimepiride 1 mg once a week. - Hexavitamin DAILY - Lasix 50mg M-W-F; 60mg T-Th-Sat-Sun - Metoprolol 12.5mg TID - Prilosec OTC 20 mg once a day - Verapamil 120 mg SR DAILY - """ - - ### Remove lines with inline titles from larger segments (clearly nonprose) - for segment in segments: - """ - With: __PHI_6__, MD __PHI_5__ - Building: De __PHI_45__ Building (__PHI_32__ Complex) __PHI_87__ - Campus: WEST - """ - - lines = segment.split("\n") - - buf = [] - for i in range(len(lines)): - if is_inline_title(lines[i]): - if len(buf) > 0: - new_segments.append("\n".join(buf)) - buf = [] - buf.append(lines[i]) - if len(buf) > 0: - new_segments.append("\n".join(buf)) - - segments = list(new_segments) - new_segments = [] - # Going to put one-liner answers with their sections - # (aka A A' B B' C D D' --> AA' BB' C DD' ) - N = len(segments) - for i in range(len(segments)): - # avoid segfaults - if i == 0: - new_segments.append(segments[i]) - continue - - if ( - segments[i].count("\n") == 0 - and is_title(segments[i - 1]) - and not is_title(segments[i]) - ): - if (i == N - 1) or is_title(segments[i + 1]): - new_segments = new_segments[:-1] - new_segments.append(segments[i - 1] + " " + segments[i]) - else: - new_segments.append(segments[i].replace("\n", " ")) - - segments = list(new_segments) - new_segments = [] - - """ - Should do some kind of regex to find "TEST: value" in segments? - - Indication: Source of embolism. - BP (mm Hg): 145/89 - HR (bpm): 80 - - Note: I made a temporary hack that fixes this particular problem. - We'll see how it shakes out - """ - - """ - Separate ALL CAPS lines (Warning... is there ever prose that can be all caps?) - """ - - """ - for segment in segments: - print('------------START------------') - print(segment) - print('-------------END-------------') - print - exit() - """ - - return segments - - -def strip(s): - return s.strip() - - -def is_inline_title(text): - m = re.search("^([a-zA-Z ]+:) ", text) - if not m: - return False - - return is_title(m.groups()[0]) - - -def remove_full_stops_and_commas(text): - text = text.replace(",", "") - if text.endswith("."): - return text[:-1] # Return text without the last character (full stop) - return text - - -def drop_leading_character(sentence, regex_patterns): - """ - Drop leading characters from a sentence based on regex patterns. - - This function takes a sentence and a list of regular expression (regex) patterns. It iterates over the regex patterns, and for each - pattern, it drops the leading character from the sentence if there is a match. The loop continues until no more matches are found - for any of the patterns. The resulting sentence is then stripped of leading and trailing whitespaces. - - Parameters: - sentence (str): The input sentence from which leading characters will be dropped. - regex_patterns (list): A list of regular expression patterns to match against the leading characters. - - Returns: - str: The sentence with leading characters dropped. - - Example: - sentence = "A. This is a sample sentence." - regex_patterns = [r"^[A-Z]\.", r"^\d+\."] - drop_leading_character(sentence, regex_patterns) - # Output: "This is a sample sentence." - """ - for pattern in regex_patterns: - while True: - match = re.match(pattern, sentence) - if match: - # Drop the leading character by substituting it with an empty string, - # but only replace the first occurrence - sentence = re.sub(pattern, "", sentence, count=1).strip() - else: - # If no more matches found, exit the loop - break - return sentence.strip() - - -stopwords = set(["of", "on", "or"]) - - -def is_title(text): - if not text.endswith(":"): - return False - text = text[:-1] - - # be a little loose here... can tighten if it causes errors - text = re.sub("(\([^\)]*?\))", "", text) - - # Are all non-stopwords capitalized? - for word in text.split(): - if word in stopwords: - continue - if not word[0].isupper(): - return False - - # I noticed this is a common issue (non-title aapears at beginning of line) - if text == "Disp": - return False - - # optionally: could assert that it is less than 6 tokens - - return True - - -def main(): - """ - # read text file from command line - if len(sys.argv) != 2: - print(>>sys.stderr, '\n\tusage: python %s \n' % sys.argv[0] - exit(1) - mimic_note_file = sys.argv[1] - - with open(mimic_note_file, 'r') as f: - text = f.read() - - # tokenize - sents = tokenize_clinical_note(text) - """ - - for mimic_note_file in sys.argv[1:]: - print(mimic_note_file) - - with open(mimic_note_file, "r") as f: - text = f.read() - - # tokenize - sents = tokenize_clinical_note(text) - - for sent in sents: - print("-" * 40) - print(sent) - print("=" * 40) - print("\n\n") - - -if __name__ == "__main__": - main() diff --git a/utils/Preprocessor/preprocessing.py b/utils/Preprocessor/preprocessing.py deleted file mode 100644 index 7bea2c1d..00000000 --- a/utils/Preprocessor/preprocessing.py +++ /dev/null @@ -1,67 +0,0 @@ -import joblib -from tqdm.auto import tqdm -from preprocessing_utils import eic_text_preprocessing -from preprocess_clinical_notes import tokenize_clinical_note -import pandas as pd -import os - -memory = joblib.Memory(".") - - -def ParallelExecutor(use_bar="tqdm", **joblib_args): - """Utility for tqdm progress bar in joblib.Parallel""" - all_bar_funcs = { - "tqdm": lambda args: lambda x: tqdm(x, **args), - "False": lambda args: iter, - "None": lambda args: iter, - } - - def aprun(bar=use_bar, **tq_args): - def tmp(op_iter): - if str(bar) in all_bar_funcs.keys(): - bar_func = all_bar_funcs[str(bar)](tq_args) - else: - raise ValueError("Value %s not supported as bar type" % bar) - # Pass n_jobs from joblib_args - return joblib.Parallel(n_jobs=joblib_args.get("n_jobs", 10))( - bar_func(op_iter) - ) - - return tmp - - return aprun - - -class Preprocessor: - def __init__(self, id_list, n_jobs): - self.id_list = id_list - self.n_jobs = n_jobs - - def preprocess_clinical_trials_text(self): - parallel_runner = ParallelExecutor(n_jobs=self.n_jobs)(total=len(self.id_list)) - X = parallel_runner( - joblib.delayed(eic_text_preprocessing)([_id]) for _id in self.id_list - ) - return pd.concat(X).reset_index(drop=True) - - def preprocess_patient_clinical_notes(self): - parallel_runner = ParallelExecutor(n_jobs=self.n_jobs)(total=len(self.id_list)) - X = parallel_runner( - joblib.delayed(tokenize_clinical_note)([_id]) for _id in self.id_list - ) - return pd.concat(X).reset_index(drop=True) - - -if __name__ == "__main__": - # Load the list of NCT IDs - folder_path = "../../data/trials_xmls" - file_names = [] - # List all files in the folder - for file in os.listdir(folder_path): - if os.path.isfile(os.path.join(folder_path, file)): - file_name, file_extension = os.path.splitext(file) - file_names.append(file_name) - nct_ids = file_names - n_jobs = 10 - preprocessor = Preprocessor(nct_ids, n_jobs) - preprocessor.preprocess_clinical_trials_text() diff --git a/utils/Preprocessor/preprocessing_utils.py b/utils/Preprocessor/preprocessing_utils.py deleted file mode 100644 index 7dc346cb..00000000 --- a/utils/Preprocessor/preprocessing_utils.py +++ /dev/null @@ -1,649 +0,0 @@ -""" -Description: This script contains functions for pre-processing clinical trials eligibility criteria texts. -The functions serve to split the raw unstructured text into clean and structured sentences to be processed by a more advanced downstream NLP analysis. -""" - -import os -import re -import json -import logging -import itertools -import pandas as pd -import xml.etree.ElementTree as ET - - -def load_regex_patterns(file_path): - """ - Load regular expression patterns from a JSON file. - - Parameters: - file_path (str): Path to the JSON file containing regex patterns. - - Returns: - dict: A dictionary with pattern names as keys and regex patterns as values. - """ - with open(file_path, "r") as file: - data = json.load(file) - patterns = {key: value["regex"] for key, value in data["patterns"].items()} - return patterns - - -def split_on_leading_markers(lines): - """ - Attempt to split lines on various common list markers: - - Bullets (•) - - Dashes (-) at the start of items - - Numeric or alphabetical lists (e.g., "1)", "a)") - Adjust the patterns to fit your data. - """ - new_lines = [] - for line in lines: - # First split on bullet points - bullet_parts = [p.strip() for p in re.split(r"•", line) if p.strip()] - temp_lines = [] - for part in bullet_parts: - # Split on leading dashes - # This will split lines like "- Something" or multiple dashes in a single line. - dash_parts = [ - dp.strip() for dp in re.split(r"(? next_line_indent: - return True - - return False - - -def split_on_carriage_returns(text): - """ - Split text into lines separated by double carriage returns. - - Parameters: - text (str): The input text. - - Returns: - list: A list of lines. - """ - lines = re.split(r"\n\n+", re.sub(r":\n", ":\n\n", text)) - lines = [line.strip() for line in lines if line.strip()] - return lines - - -def split_lines_on_semicolon(lines): - """ - Splits lines on semicolons not within braces. - - Parameters: - lines (list): A list of lines. - - Returns: - list: A list of split lines. - """ - split_lines = [] - for line in lines: - line = replace_parentheses_with_braces(line) - parts = [] - temp = "" - inside_braces = False - for char in line: - if char == "{": - inside_braces = True - elif char == "}": - inside_braces = False - elif char == ";" and not inside_braces: - parts.append(temp.strip()) - temp = "" - continue - temp += char - parts.append(temp.strip()) - split_lines.extend(parts) - return split_lines - - -def split_to_sentences(text, regex_patterns, exception_patterns): - """ - Split text into sentences based on specific criteria. - - Parameters: - text (str): The input text. - regex_patterns (list): A list of regex patterns for splitting. - exception_patterns (list): A list of regex patterns to ignore during splitting. - - Returns: - list: A list of sentences. - """ - lines = split_on_carriage_returns(text) - lines = split_on_leading_markers(lines) - lines = split_lines_on_semicolon(lines) - sentences = [] - - for line in lines: - line = re.sub(r"\n", " ", line) - line = re.sub(" +", " ", line) - split_line = split_by_leading_char_from_regex_patterns( - line, regex_patterns, exceptions_patterns=exception_patterns - ) - split_line = [s for s in split_line if len(s.split()) > 1] - sentences.extend(split_line) - - return sentences - - -def drop_leading_character(sentence, regex_patterns): - """ - Drop leading characters from a sentence based on regex patterns. - - Parameters: - sentence (str): The input sentence. - regex_patterns (list): A list of regex patterns. - - Returns: - str: The cleaned sentence. - """ - for pattern in regex_patterns: - while True: - match = re.match(pattern, sentence) - if match: - sentence = re.sub(pattern, "", sentence, count=1).strip() - else: - break - return sentence.strip() - - -def extract_criteria_sections_headers(lines): - """ - Extract criteria sub-section headers from a list of lines. - - Parameters: - lines (list): A list of sentences. - - Returns: - dict: A dictionary with headers as keys and line indices as values. - """ - criteria_sections = {} - # Define explicit patterns for different writing styles of group-specific criteria headers - patterns = [ - r"^(?:-?\s*)(?:Inclusion|INCLUSION|Exclusion|EXCLUSION|Eligibility|Selection)\s?(?:Criteria|Requirements?)?\s?(?:for|in)?\s?(?:Patients|Subjects|Population|Cohort|Group|Arm)?\s?(?:with|without|who|where|having)?\s?[\w\d\s-]*[:\-]?", - r"^(?:Key\s)?(?:Inclusion|INCLUSION|EXCLUSION|Exclusion|Eligibility|Selection)(?:\s(?:Criteria|Requirements))?(?:\s?[-+:]|\sfor)?(?:\s[\w\s+-]+)?(?:\([\w\s]+\))?\s?[-+:]?\s?[\w\s]+$", - r"^(?:Key\s)?(?:Inclusion|INCLUSION|EXCLUSION|Exclusion|Eligibility|Selection)(?:\s(?:Criteria|Requirements?))(?:\s(?:for|in))?(?:\s(?:Patients|Subjects|Population|Cohort|Group|Arm))?(?:\s(?:with|without|who|where|having))?\s?(?:\([\w\s]+\))?\s?[\w\s+-]*[:\-]?", - r"^(?:[\w\d\s-]+)\s*-\s*(?:Inclusion|INCLUSION|EXCLUSION|Exclusion|Eligibility|Selection)\s(?:Criteria|Requirements?)?$", - r"^(?:[\w\s]+?)\s(?:group|patients|population|arm|subjects|cohort)\s(?:inclusion|exclusion|eligibility|selection|criteria)(?:\s?:|-)?", - r"^\b(?:\w+\s\w+|\w+)?\s(?:Inclusion|INCLUSION|EXCLUSION|Exclusion|Eligibility|Selection)\s(?:Criteria|Requirements)\b", - ] - for i, line in enumerate(lines): - header_candidate = line.strip() - if ":" in header_candidate: - header_candidate = header_candidate.split(":")[0].strip() - if len(header_candidate.split()) <= 10: - if any( - re.search(pattern, header_candidate, re.IGNORECASE) - for pattern in patterns - ): - header = header_candidate.strip() - if header not in criteria_sections: - criteria_sections[header] = [i] - else: - criteria_sections[header].append(i) - return criteria_sections - - -################################################# -# NEW FUNCTION TO HANDLE INLINE HEADERS -################################################# - - -def fix_inline_headers(text): - """ - Ensure that recognized headers (e.g., Inclusion Criteria, Exclusion Criteria, etc.) - appear on their own line by inserting a newline right after the header phrase - if it's directly followed by non-whitespace text. - """ - # Adjust or add more patterns as needed - patterns = [ - r"(Inclusion\s*Criteria\s*:)\s*(?=\S)", - r"(Exclusion\s*Criteria\s*:)\s*(?=\S)", - # Add more if needed - # r"(Eligibility\s*Criteria\s*:)\s*(?=\S)", - ] - - fixed_text = text - for pat in patterns: - fixed_text = re.sub(pat, r"\1\n", fixed_text, flags=re.IGNORECASE) - return fixed_text - - -def extract_separate_inclusion_exclusion(text, regex_patterns, exception_patterns): - """ - Extract preprocessed inclusion and exclusion criteria from eligibility criteria text. - - Parameters: - text (str): The preprocessed eligibility criteria text. - regex_patterns (list): A list of regex patterns for splitting. - exception_patterns (list): A list of regex patterns to ignore during splitting. - - Returns: - dict: A dictionary containing Inclusion Criteria, Exclusion Criteria, and Original Eligibility Criteria. - """ - # First, fix the scenario where "Inclusion Criteria:" or "Exclusion Criteria:" - # is immediately followed by text on the same line - text = fix_inline_headers(text) - - criteria = { - "Inclusion Criteria": {}, - "Exclusion Criteria": {}, - "Original Eligibility Criteria": text, - } - - lines = split_to_sentences(text, regex_patterns, exception_patterns) - subsection_indices = extract_criteria_sections_headers(lines) - - # Fallback: If no sections are identified, treat the entire text as one block of inclusion criteria - if not subsection_indices: - criteria["Inclusion Criteria"]["General"] = lines - return criteria - - inclusion_pattern = r"(? 200: # Adjust the threshold as needed - sentences = split_on_full_stops(sentence) - for s in sentences: - if s: # Ensure the sentence is not empty - new_row = row.copy() - new_row["sentence"] = s - new_rows.append(new_row) - else: - new_rows.append(row) - return pd.DataFrame(new_rows) - - -def eic_text_preprocessing( - _ids, - regex_path="../../data/regex/regex_patterns.json", - exceptions_path="../../data/regex/exception_regex_patterns.json", - output_path="../../data/preprocessed_data/clintra/", -): - """ - Main preprocessing function for eligibility criteria text from a list of clinical trial IDs. - - Parameters: - _ids (list): A list of clinical trial IDs. - regex_path (str): Path to the regex patterns JSON file. - exceptions_path (str): Path to the exception regex patterns JSON file. - output_path (str): Directory path to save the preprocessed CSV file. - - Returns: - pandas.DataFrame or None: The preprocessed DataFrame or None if no data is processed. - """ - regex_patterns = list(load_regex_patterns(regex_path).values()) - exception_patterns = list(load_regex_patterns(exceptions_path).values()) - texts = [] - trial_ids = [] - - for nid in _ids: - print(f"Processing Trial ID: {nid}") - eic_text = extract_eligibility_criteria(nid) - if eic_text: - preprocessed_text = extract_separate_inclusion_exclusion( - eic_text, regex_patterns, exception_patterns - ) - texts.append(preprocessed_text) - trial_ids.append(nid) - else: - continue - - to_concat = [] - for index, item in enumerate(texts): - _id = trial_ids[index] - for criteria_key in ["Inclusion Criteria", "Exclusion Criteria"]: - criteria_dict = item.get(criteria_key, {}) - for sub_key, sub_value in criteria_dict.items(): - df = pd.DataFrame(sub_value, columns=["sentence"]) - df["criteria"] = criteria_key - df["sub_criteria"] = sub_key - df["id"] = _id - to_concat.append(df) - - if to_concat: - final_df = pd.concat(to_concat, ignore_index=True) - final_df["sentence"] = final_df["sentence"].apply( - drop_leading_character, regex_patterns=regex_patterns - ) - final_df["sentence"] = final_df["sentence"].apply( - replace_braces_with_parentheses - ) - final_df = split_large_sentences(final_df) - final_df.to_csv( - os.path.join(output_path, f"{_ids[0]}_preprocessed.tsv"), - index=False, - sep="\t", - ) - return final_df - else: - return None diff --git a/utils/Preprocessor/test/__init__.py b/utils/Preprocessor/test/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/utils/Preprocessor/test/test_preprocessing.py b/utils/Preprocessor/test/test_preprocessing.py deleted file mode 100644 index 8ed08c7a..00000000 --- a/utils/Preprocessor/test/test_preprocessing.py +++ /dev/null @@ -1,336 +0,0 @@ -""" -test_preprocessing.py - -This file contains unit tests for the preprocessing functions used for handling -clinical trial eligibility criteria texts. -""" - -import os -import json -import tempfile -import unittest -import pandas as pd -from unittest.mock import patch - - -from src.Preprocessor.preprocessing_utils import ( - load_regex_patterns, - split_on_leading_markers, - replace_parentheses_with_braces, - replace_braces_with_parentheses, - line_starts_with_capitalized_alphanumeric, - read_xml_file, - parse_xml_content, - extract_eligibility_criteria, - split_by_leading_char_from_regex_patterns, - split_on_carriage_returns, - split_lines_on_semicolon, - split_to_sentences, - drop_leading_character, - extract_criteria_sections_headers, - fix_inline_headers, - extract_separate_inclusion_exclusion, - split_on_full_stops, - split_large_sentences, - eic_text_preprocessing, -) - - -class TestLoadRegexPatterns(unittest.TestCase): - def setUp(self): - # Create a temporary JSON file with a patterns dictionary. - self.temp_file = tempfile.NamedTemporaryFile( - mode="w+", delete=False, suffix=".json" - ) - sample_data = { - "patterns": { - "bullet": {"regex": r"•"}, - "dash": {"regex": r"^-"}, - "number": {"regex": r"^\d+\)"}, - } - } - json.dump(sample_data, self.temp_file) - self.temp_file.close() - - def tearDown(self): - os.unlink(self.temp_file.name) - - def test_load_regex_patterns(self): - patterns = load_regex_patterns(self.temp_file.name) - expected = {"bullet": r"•", "dash": r"^-", "number": r"^\d+\)"} - self.assertEqual(patterns, expected) - - -class TestSplittingAndReplacingFunctions(unittest.TestCase): - def test_split_on_leading_markers(self): - # Test splitting a line with bullet, dash and asterisk markers. - input_lines = ["• First item - subitem * detail", "No marker here"] - result = split_on_leading_markers(input_lines) - # Check that more than one line is returned and that it contains expected fragments. - self.assertIsInstance(result, list) - self.assertGreater(len(result), 1) - self.assertIn("First item", result[0]) - self.assertIn("subitem", " ".join(result)) - - def test_replace_parentheses_with_braces(self): - input_text = "This is a test (example) with [brackets]." - expected = "This is a test {example} with {brackets}." - # Note: The implementation replaces both '(' and '[' with '{' and their closing pairs with '}' - result = replace_parentheses_with_braces(input_text) - self.assertEqual(result, expected) - - def test_replace_braces_with_parentheses(self): - input_text = "This is a test {example} with {brackets}." - expected = "This is a test (example) with (brackets)." - result = replace_braces_with_parentheses(input_text) - self.assertEqual(result, expected) - - def test_line_starts_with_capitalized_alphanumeric(self): - self.assertTrue(line_starts_with_capitalized_alphanumeric("Hello world")) - self.assertFalse(line_starts_with_capitalized_alphanumeric("hello world")) - self.assertFalse(line_starts_with_capitalized_alphanumeric(" ")) - self.assertTrue(line_starts_with_capitalized_alphanumeric("A1 is valid")) - - def test_split_by_leading_char_from_regex_patterns(self): - # Use a regex that matches any numeric marker in the text (without the start-of-string anchor). - line = "1) First sentence. 2) Second sentence." - patterns = [r"\b\d+\)"] - result = split_by_leading_char_from_regex_patterns(line, patterns) - # Expect two parts: one starting from "1)" and another starting from "2)" - self.assertGreaterEqual(len(result), 2, f"Result was {result}") - - -class TestXMLFunctions(unittest.TestCase): - def setUp(self): - # Create temporary XML content. - self.valid_xml = "Eligibility Content" - self.invalid_xml = ( - "Missing closing tags" - ) - # Create a temporary file for testing read_xml_file. - self.temp_xml_file = tempfile.NamedTemporaryFile( - mode="w+", delete=False, suffix=".xml" - ) - self.temp_xml_file.write(self.valid_xml) - self.temp_xml_file.close() - - def tearDown(self): - os.unlink(self.temp_xml_file.name) - - def test_read_xml_file_success(self): - content = read_xml_file(self.temp_xml_file.name) - self.assertIn("Eligibility Content", content) - - def test_read_xml_file_failure(self): - # Attempt to read a non-existent file. - content = read_xml_file("nonexistent_file.xml") - self.assertIsNone(content) - - def test_parse_xml_content_success(self): - root = parse_xml_content(self.valid_xml) - self.assertIsNotNone(root) - self.assertEqual(root.tag, "root") - - def test_parse_xml_content_failure(self): - root = parse_xml_content(self.invalid_xml) - self.assertIsNone(root) - - -class TestExtractEligibilityCriteria(unittest.TestCase): - def setUp(self): - # Create dummy XML content that includes the eligibility textblock. - self.dummy_xml = "Eligibility Content for Trial" - # Create a temporary file that will be used to simulate a trial XML file. - self.temp_xml_file = tempfile.NamedTemporaryFile( - mode="w+", delete=False, suffix=".xml" - ) - self.temp_xml_file.write(self.dummy_xml) - self.temp_xml_file.close() - - def tearDown(self): - os.unlink(self.temp_xml_file.name) - - def test_extract_eligibility_criteria_found(self): - trial_id = "dummy_trial" - # Patch os.path.exists and os.path.join using the correct module path. - with ( - patch( - "src.Preprocessor.preprocessing_utils.os.path.exists", return_value=True - ), - patch( - "src.Preprocessor.preprocessing_utils.os.path.join", - return_value=self.temp_xml_file.name, - ), - ): - text = extract_eligibility_criteria(trial_id) - self.assertEqual(text, "Eligibility Content for Trial") - - def test_extract_eligibility_criteria_not_found(self): - trial_id = "dummy_trial" - # Return False for file existence. - with patch( - "src.Preprocessor.preprocessing_utils.os.path.exists", return_value=False - ): - text = extract_eligibility_criteria(trial_id) - self.assertIsNone(text) - - -class TestOtherTextProcessingFunctions(unittest.TestCase): - def test_split_on_carriage_returns(self): - text = "Line one.\n\nLine two.\n\n\nLine three." - result = split_on_carriage_returns(text) - self.assertEqual(len(result), 3) - self.assertIn("Line two.", result) - - def test_split_lines_on_semicolon(self): - lines = ["Sentence one; Sentence two {ignore; this} end."] - result = split_lines_on_semicolon(lines) - # Expect the semicolon outside braces to split the line - # and preserve the entire text "ignore; this" inside braces. - self.assertIn("Sentence one", result[0]) - self.assertEqual(result[1], "Sentence two {ignore; this} end.") - - def test_split_to_sentences(self): - text = "Inclusion Criteria: Patients over 18. Exclusion Criteria: Non-eligible subjects." - regex_patterns = [r"Inclusion Criteria", r"Exclusion Criteria"] - exception_patterns = [] - result = split_to_sentences(text, regex_patterns, exception_patterns) - self.assertIsInstance(result, list) - self.assertGreaterEqual(len(result), 1) - - def test_drop_leading_character(self): - # Suppose our regex patterns remove leading numbers and punctuation. - patterns = [r"^\d+\.", r"^-"] - sentence = "1. This is a test sentence." - result = drop_leading_character(sentence, patterns) - self.assertNotEqual(result, sentence) - self.assertTrue(result.startswith("This")) - - def test_extract_criteria_sections_headers(self): - # Provide a list of simulated lines where some lines look like headers. - lines = [ - "Inclusion Criteria:", - "Patients must be over 18.", - "Exclusion Criteria:", - "Patients with comorbidities.", - ] - sections = extract_criteria_sections_headers(lines) - self.assertIsInstance(sections, dict) - # There should be keys that contain "Inclusion" and "Exclusion". - keys_joined = " ".join(sections.keys()).lower() - self.assertIn("inclusion", keys_joined) - self.assertIn("exclusion", keys_joined) - - def test_fix_inline_headers(self): - text = "Inclusion Criteria:Patients must be over 18. Exclusion Criteria:Patients with comorbidities." - fixed = fix_inline_headers(text) - # Check that there is a newline inserted after the colon for each header. - self.assertIn("Criteria:\n", fixed) - - def test_extract_separate_inclusion_exclusion(self): - # Create a dummy eligibility text with inline headers. - text = "Inclusion Criteria: Patients must be over 18. Exclusion Criteria: Patients with comorbidities." - regex_patterns = [r"Inclusion Criteria", r"Exclusion Criteria"] - exception_patterns = [] - result = extract_separate_inclusion_exclusion( - text, regex_patterns, exception_patterns - ) - self.assertIn("Inclusion Criteria", result) - self.assertIn("Exclusion Criteria", result) - # The text for each header should be non-empty dictionaries. - self.assertIsInstance(result["Inclusion Criteria"], dict) - self.assertIsInstance(result["Exclusion Criteria"], dict) - - def test_split_on_full_stops(self): - text = "This is a sentence. And here is another? Yes, indeed. Final sentence." - sentences = split_on_full_stops(text) - self.assertGreaterEqual(len(sentences), 3) - self.assertTrue(any("Final sentence" in s for s in sentences)) - - def test_split_large_sentences(self): - # Create a DataFrame with one long sentence. - df = pd.DataFrame( - { - "sentence": [ - "This is a very long sentence. It should be split. Here is another sentence." - ], - "criteria": ["Inclusion"], - "sub_criteria": ["General"], - "id": ["trial1"], - } - ) - new_df = split_large_sentences(df) - # We expect that if the threshold is 200 characters, a sentence shorter than that remains unchanged. - self.assertFalse(new_df.empty) - self.assertTrue(new_df["sentence"].str.len().min() > 0) - - -class TestEICTextPreprocessing(unittest.TestCase): - def setUp(self): - # Create temporary dummy regex patterns files. - self.temp_regex_file = tempfile.NamedTemporaryFile( - mode="w+", delete=False, suffix=".json" - ) - regex_data = { - "patterns": { - "pattern1": {"regex": r"\d+\)"}, - "pattern2": {"regex": r"[•*]"}, - } - } - json.dump(regex_data, self.temp_regex_file) - self.temp_regex_file.close() - - self.temp_exceptions_file = tempfile.NamedTemporaryFile( - mode="w+", delete=False, suffix=".json" - ) - exceptions_data = {"patterns": {"exception": {"regex": r"EXCEPTION"}}} - json.dump(exceptions_data, self.temp_exceptions_file) - self.temp_exceptions_file.close() - - # Create a dummy eligibility criteria XML content. - self.dummy_xml = "Inclusion Criteria: Patients over 18. Exclusion Criteria: Patients with comorbidities." - # Create a temporary XML file to be read by extract_eligibility_criteria. - self.temp_xml_file = tempfile.NamedTemporaryFile( - mode="w+", delete=False, suffix=".xml" - ) - self.temp_xml_file.write(self.dummy_xml) - self.temp_xml_file.close() - - # Create a temporary output directory. - self.temp_output_dir = tempfile.mkdtemp() - - def tearDown(self): - os.unlink(self.temp_regex_file.name) - os.unlink(self.temp_exceptions_file.name) - os.unlink(self.temp_xml_file.name) - # Remove output files if created. - for f in os.listdir(self.temp_output_dir): - os.unlink(os.path.join(self.temp_output_dir, f)) - os.rmdir(self.temp_output_dir) - - def dummy_extract_eligibility_criteria(self, trial_id): - # Instead of reading a file from disk, simply return the text inside our dummy XML. - return "Inclusion Criteria: Patients over 18. Exclusion Criteria: Patients with comorbidities." - - @patch("src.Preprocessor.preprocessing_utils.extract_eligibility_criteria") - def test_eic_text_preprocessing(self, mock_extract): - # Patch extract_eligibility_criteria to return a dummy string. - mock_extract.side_effect = self.dummy_extract_eligibility_criteria - _ids = ["trial123"] - df = eic_text_preprocessing( - _ids, - regex_path=self.temp_regex_file.name, - exceptions_path=self.temp_exceptions_file.name, - output_path=self.temp_output_dir, - ) - self.assertIsNotNone(df) - # Check that the DataFrame contains expected columns. - for col in ["sentence", "criteria", "sub_criteria", "id"]: - self.assertIn(col, df.columns) - # Check that an output file was written to the output directory. - files = os.listdir(self.temp_output_dir) - self.assertTrue(any(f.endswith("_preprocessed.tsv") for f in files)) - - -if __name__ == "__main__": - unittest.main() diff --git a/utils/Preprocessor/utils.py b/utils/Preprocessor/utils.py deleted file mode 100644 index 0db22da9..00000000 --- a/utils/Preprocessor/utils.py +++ /dev/null @@ -1,603 +0,0 @@ -import requests -import xml.etree.ElementTree as ET -import os -import time -import re - - -def normalize_whitespace(s): - return " ".join(s.split()) - - -def download_study_info(nct_id, runs=2): - local_file_path = f"../data/trials_xmls/{nct_id}.xml" - updated_cts = [] - for _ in range(runs): - if os.path.exists(local_file_path): - # Read the content of the existing local XML file - with open(local_file_path, "r") as f: - local_xml_content = f.read() - try: - local_root = ET.fromstring(local_xml_content) - except ET.ParseError as e: - print(f"Error parsing XML for trial {nct_id}: {e}") - os.remove(local_file_path) - continue - - # Download the online version of the XML - url = f"https://clinicaltrials.gov/ct2/show/{nct_id}?displayxml=true" - response = requests.get(url) - - if response.status_code == 200: - online_xml_content = response.text - # Parse the XML content - online_root = ET.fromstring(online_xml_content) - to_check = ["eligibility", "brief_title", "overall_status", "location"] - - local_version = [] - online_version = [] - - for s in to_check: - local_elem = local_root.find(".//%s" % s) - online_elem = online_root.find(".//%s" % s) - - # Check if the element exists in both versions - if local_elem is not None and online_elem is not None: - local_version.append(local_elem) - online_version.append(online_elem) - else: - continue - - is_updated = any( - [ - normalize_whitespace(ET.tostring(a, encoding="unicode").strip()) - != normalize_whitespace( - ET.tostring(b, encoding="unicode").strip() - ) - for a, b in zip(local_version, online_version) - ] - ) - - if is_updated: - updated_cts.append(nct_id) - # Update the local XML with the online version - with open(local_file_path, "w") as f: - f.write(ET.tostring(online_root, encoding="unicode")) - print(f"Updated eligibility criteria for {nct_id}") - else: - print(f"No changes in eligibility criteria for {nct_id}.") - else: - print(f"Error downloading study information for {nct_id}") - else: - downloaded = False - while not downloaded: - url = f"https://clinicaltrials.gov/ct2/show/{nct_id}?displayxml=true" - response = requests.get(url) - if response.status_code == 200: - root = ET.fromstring(response.text) - with open(local_file_path, "w") as f: - f.write(ET.tostring(root, encoding="unicode")) - downloaded = True - print(f"Study information downloaded for {nct_id}") - else: - print(f"Error downloading study information for {nct_id}") - - if not downloaded: - print(f"Download of {nct_id}.xml failed. Retrying in 2 seconds...") - time.sleep(2) - return updated_cts - - -def extract_study_info(nct_id): - """ - Extract various study information from a clinical trial text with the given NCT identifier. - - This function attempts to extract various study information for a clinical trial specified by its unique - NCT identifier (NCT ID). The function checks if a file named '{nct_id}_info.txt' already exists - in the 'trials_texts' directory. If the file exists, the function returns 0, indicating that the - extraction is not required, and the information is already available locally. - - If the file '{nct_id}_info.txt' does not exist, the function parses the XML file with the name '{nct_id}.xml' - located in the 'trials_texts' directory. The XML content is parsed using the `xml.etree.ElementTree` - module. The function then extracts various study information from the XML content and saves it in a text file - with the name '{nct_id}_info.txt' in the 'trials_texts' directory. - - The extracted study information includes: - - Long title - - Short title - - Cancer sites - - Start date - - End date - - Primary end date - - Overall status - - Study phase - - Study type - - Brief summary - - Detailed description - - Number of arms - - Arms information - - Eligibility criteria - - Gender - - Minimum age - - Maximum age - - Intervention details - - Location details - - Parameters: - nct_id (str): The unique identifier (NCT ID) of the clinical trial for which study information - needs to be extracted. - - Returns: - int: Returns 0 if the study information file already exists locally and doesn't require extraction. - Otherwise, the function doesn't return anything directly (implicit return). - Note: The extracted study information is saved in the 'trials_texts' directory. - - """ - if os.path.exists(f"../data/trials_xmls/{nct_id}_info.txt"): - return 0 - # print(f"{nct_id}_info.txt already exists. Skipping extraction.") - else: - tree = ET.parse(f"../data/trials_xmls/{nct_id}.xml") - root = tree.getroot() - with open(f"../data/trials_xmls/{nct_id}_info.txt", "w") as f: - # Extract Long title - official_title = root.find(".//official_title") - if official_title is not None: - title_text = official_title.text.strip() - f.write(f"Long Title:\n{title_text}\n\n") - - # Extract short title - brief_title = root.find(".//brief_title") - if brief_title is not None: - title_text = brief_title.text.strip() - f.write(f"Short Title:\n{title_text}\n\n") - - # Extract cancer sites - conditions = root.findall(".//condition") - if conditions is not None: - f.write("Cancer Site(s):\n") - for condition in conditions: - condition_text = condition.text.strip() - f.write(f"- {condition_text}\n") - f.write("\n") - - # Extract start date - start_date = root.find(".//start_date") - if start_date is not None: - start_date_text = start_date.text.strip() - f.write(f"Start Date:\n{start_date_text}\n\n") - - # Extract end date - end_date = root.find(".//completion_date") - if end_date is not None: - end_date_text = end_date.text.strip() - f.write(f"End Date:\n{end_date_text}\n\n") - - # Extract primary end date - primary_end_date = root.find(".//primary_completion_date") - if end_date is not None: - end_date_text = end_date.text.strip() - f.write(f"Primary End Date:\n{end_date_text}\n\n") - - # Extract overall status - overall_status = root.find(".//overall_status") - if overall_status is not None: - overall_status_text = overall_status.text.strip() - f.write(f"Overall Status:\n{overall_status_text}\n\n") - - # Extract study phase - study_phase = root.find(".//phase") - if study_phase is not None: - f.write(f"Study Phase: \n{study_phase.text.strip()}\n\n") - - # Extract study type - study_type = root.find(".//study_type") - if study_type is not None: - study_type_text = study_type.text.strip() - f.write(f"Study Type:\n{study_type_text}\n\n") - - # Extract brief summary - brief_summary = root.find(".//brief_summary") - if brief_summary is not None: - brief_summary_text = brief_summary.find(".//textblock").text.strip() - f.write(f"Brief Summary:\n{brief_summary_text}\n\n") - - # Extract detailed description - detailed_description = root.find(".//detailed_description") - if detailed_description is not None: - detailed_description_text = detailed_description.find( - ".//textblock" - ).text.strip() - f.write(f"Detailed Description:\n{detailed_description_text}\n\n") - - # Extract number of arms - number_of_arms = root.find(".//number_of_arms") - if number_of_arms is not None: - f.write(f"Number of Arms: {number_of_arms.text.strip()}\n\n") - - arms = root.findall(".//arm_group") - if arms is not None: - f.write("Arms:\n") - for arm in arms: - arm_group_label = arm.find(".//arm_group_label").text.strip() - arm_group_description = arm.find(".//arm_group_description") - if arm_group_description is not None: - arm_group_description_text = arm_group_description.text.strip() - f.write(f"- {arm_group_label}: {arm_group_description_text}\n") - else: - f.write(f"- {arm_group_label}\n") - f.write("\n") - - # Extract eligibility criteria - eligibility_criteria = root.find(".//eligibility/criteria") - if eligibility_criteria is not None: - eligibility_criteria_text = eligibility_criteria.find( - ".//textblock" - ).text.strip() - f.write(f"Eligibility Criteria:\n{eligibility_criteria_text}\n\n") - - # Extract gender - gender = root.find(".//gender") - if gender is not None: - gender_text = gender.text.strip() - f.write(f"Gender:\n{gender_text}\n\n") - - # Extract minimum age - min_age = root.find(".//eligibility/minimum_age") - if min_age is not None: - min_age_text = min_age.text.strip() - f.write(f"Minimum Age:\n{min_age_text}\n\n") - - # Extract maximum age - max_age = root.find(".//eligibility/maximum_age") - if max_age is not None: - max_age_text = max_age.text.strip() - f.write(f"Maximum Age:\n{max_age_text}\n\n") - - # Extract intervention - intervention = root.findall(".//intervention") - if intervention is not None: - f.write("Interventions:\n") - for i in intervention: - intervention_name = i.find(".//intervention_name").text.strip() - f.write(f"- {intervention_name}\n") - f.write("\n") - - # Extract locations - locations = root.findall(".//location") - if locations is not None: - f.write("Locations:\n") - for location in locations: - city = location.find(".//city") - country = location.find(".//country") - if city is not None and country is not None: - location_text = f"{city.text.strip()}, {country.text.strip()}" - f.write(f"- {location_text}\n") - f.write("\n") - - print(f"{nct_id} info extracted and saved to {nct_id}_info.txt") - - -def add_spaces_around_punctuation(text): - """ - Add spaces around punctuation - - Parameters - ---------- - text : str - The text to be preprocessed - - Returns - ------- - str - The preprocessed text - """ - text = re.sub(r"([.,!?()])", r" \1 ", text) - return text - - -def remove_special_characters(text): - """ - Remove special characters - - Parameters - ---------- - text : str - The text to be preprocessed - - Returns - ------- - str - The preprocessed text - """ - text = re.sub(r"[^a-zA-Z0-9]", " ", text) - return text - - -def remove_dashes_at_the_start_of_sentences(text): - """ - Remove dashes at the start of sentences - - Parameters - ---------- - text : str - The text to be preprocessed - - Returns - ------- - str - The preprocessed text - """ - text = re.sub(r"^- ", "", text) - return text - - -def post_process_entities(entities): - """ - Merge consecutive entities and post-process the results. - - This function takes a list of entities generated from a named entity recognition (NER) model's output - and performs post-processing to merge consecutive entities of the same type. The input entities list - contains dictionaries representing each detected entity with the following keys: - - "entity" (str): The entity type represented as a prefixed tag (e.g., "B-ORG", "I-LOC"). - - "score" (float): The confidence score assigned to the entity by the NER model. - - "word" (str): The text of the entity in the input text. - - "start" (int): The starting index of the entity in the input text. - - "end" (int): The ending index (exclusive) of the entity in the input text. - - The function iterates through the entities and merges consecutive entities with the same type into a single - entity. It also handles entities that span multiple words, indicated by the presence of "I-" prefixes. - The merged entity is represented by a dictionary containing the merged information: - - "entity" (str): The entity type without the prefix (e.g., "ORG", "LOC"). - - "score" (float): The maximum confidence score among the merged entities. - - "word" (str): The combined text of the merged entities. - - "start" (int): The starting index of the first entity in the merged sequence. - - "end" (int): The ending index (exclusive) of the last entity in the merged sequence. - - Parameters: - entities (list): A list of dictionaries representing detected entities. - - Returns: - list: A list of dictionaries representing merged entities after post-processing. - Each dictionary contains the keys "entity", "score", "word", "start", and "end" - representing the entity type, confidence score, text, start index, and end index respectively. - """ - merged_entities = [] - current_entity = None - - for entity in entities: - if entity["entity"].startswith("B-"): - if current_entity is not None: - merged_entities.append(current_entity) - current_entity = { - "entity": entity["entity"][2:], - "score": entity["score"], - "word": entity["word"].replace("##", " "), - "start": entity["start"], - "end": entity["end"], - } - elif entity["entity"].startswith("I-"): - if (current_entity is not None) and entity["word"].startswith("##"): - current_entity["word"] += entity["word"].replace("##", "") - current_entity["end"] = entity["end"] - current_entity["score"] = max(current_entity["score"], entity["score"]) - else: - current_entity["word"] += " " + entity["word"].lstrip() - current_entity["end"] = entity["end"] - current_entity["score"] = max(current_entity["score"], entity["score"]) - else: - if current_entity is not None: - merged_entities.append(current_entity) - current_entity = None - - if current_entity is not None: - merged_entities.append(current_entity) - - return merged_entities - - -def get_dictionaries_with_values(list_of_dicts, key, values): - """ - Filter a list of dictionaries based on the presence of specific values in a specified key. - - This function takes a list of dictionaries and filters them based on the presence of specific values in a specified key. - The function checks each dictionary in the input list and includes only those dictionaries where any of the given values - are present in the specified key. The filtering is performed using list comprehensions. - - Parameters: - list_of_dicts (list): A list of dictionaries to be filtered. - key (str): The key in the dictionaries where the filtering is applied. - values (list): A list of values. The function will filter dictionaries where any of these values are present in the specified key. - - Returns: - list: A list of dictionaries that meet the filtering criteria. - - Example: - list_of_dicts = [ - {"name": "Alice", "age": 30}, - {"name": "Bob", "age": 25}, - {"name": "Charlie", "age": 35}, - {"name": "David", "age": 30}, - ] - - get_dictionaries_with_values(list_of_dicts, "age", [30, 35]) - # Output: [ - # {"name": "Alice", "age": 30}, - # {"name": "Charlie", "age": 35}, - # {"name": "David", "age": 30} - # ] - """ - return [d for d in list_of_dicts if any(val in d.get(key, []) for val in values)] - - -def resolve_ner_overlaps(ner1_results, ner2_results): - """ - Resolve overlaps between entities detected by two named entity recognition (NER) models. - - This function takes the results of two NER models (ner1_results and ner2_results) and resolves overlaps - between the entities detected by these models. An overlap occurs when the span of an entity detected by one - model partially or fully overlaps with the span of an entity detected by the other model. - - The function iterates through the entities detected by the first NER model (ner1_results). For each entity, - it checks if it overlaps with any entity from the second model (ner2_results). If there are no overlaps, - the entity from the first model is added to the resolved results. - - After processing the entities from the first model, the function then adds entities from the second model - that do not overlap with any entities from the first model. - - Parameters: - ner1_results (list): A list of dictionaries representing entities detected by the first NER model. - ner2_results (list): A list of dictionaries representing entities detected by the second NER model. - - Returns: - list: A list of dictionaries representing the resolved entities with overlaps removed. - - Example: - ner1_results = [ - {"start": 5, "end": 10, "entity_group": "PERSON"}, - {"start": 20, "end": 25, "entity_group": "LOCATION"} - ] - - ner2_results = [ - {"start": 8, "end": 15, "entity_group": "PERSON"}, - {"start": 18, "end": 30, "entity_group": "ORGANIZATION"} - ] - - resolve_ner_overlaps(ner1_results, ner2_results) - # Output: [ - # {"start": 5, "end": 10, "entity_group": "PERSON"}, - # {"start": 18, "end": 30, "entity_group": "ORGANIZATION"}, - # {"start": 20, "end": 25, "entity_group": "LOCATION"} - # ] - """ - resolved_results = [] - # Iterate over the entities detected by the first NER model - for entity1 in ner1_results: - entity1_start = entity1["start"] - entity1_end = entity1["end"] - entity1_label = entity1["entity_group"] - - # Check if the entity from the first model overlaps with any entity from the second model - overlaps = False - for entity2 in ner2_results: - entity2_start = entity2["start"] - entity2_end = entity2["end"] - entity2_label = entity2["entity_group"] - - if entity1_start < entity2_end and entity1_end > entity2_start: - overlaps = True - break - - # If there were no overlaps, add the entity from the first model to the resolved results - if not overlaps: - resolved_results.append(entity1) - - # Add entities from the second model that don't overlap with any entities from the first model - for entity2 in ner2_results: - entity2_start = entity2["start"] - entity2_end = entity2["end"] - entity2_label = entity2["entity_group"] - - overlaps = False - for entity1 in resolved_results: - entity1_start = entity1["start"] - entity1_end = entity1["end"] - entity1_label = entity1["entity_group"] - - if entity2_start < entity1_end and entity2_end > entity1_start: - overlaps = True - break - - if not overlaps: - resolved_results.append(entity2) - - return resolved_results - - -def extract_eligibility_criteria(trial_id): - """ - Extract the eligibility criteria text for a clinical trial with the given trial ID. - - This function attempts to locate and extract the eligibility criteria text for a clinical trial - specified by its trial ID. The function reads an XML file named '{trial_id}.xml' which is expected - to contain information for the clinical trial. It searches for the eligibility criteria textblock within - the XML and extracts the corresponding text. - - Parameters: - trial_id (str): The unique identifier of the clinical trial. - - Returns: - str or None: The extracted eligibility criteria text for the specified trial if found, - otherwise None. - """ - xml_file_path = f"../data/trials_xmls/{trial_id}.xml" - - if os.path.exists(xml_file_path): - with open(xml_file_path, "r") as xml_file: - xml_content = xml_file.read() - try: - tree = ET.ElementTree(ET.fromstring(xml_content)) - root = tree.getroot() - except ET.ParseError as e: - print(f"Error parsing XML for trial {trial_id}: {e}") - return None - # Find the Eligibility Criteria TextBlock section within the XML - eligibility_criteria_textblock = root.find(".//eligibility/criteria/textblock") - - if eligibility_criteria_textblock is not None: - # Extract the text from the Eligibility Criteria TextBlock section - eligibility_criteria_text = eligibility_criteria_textblock.text - return eligibility_criteria_text.strip() - - # If the trial ID is not found or the eligibility criteria textblock is missing, return None - return None - - -def replace_parentheses_with_braces(text): - """ - Replace parentheses with curly braces in the given text. - - This function takes a text as input and replaces all occurrences of opening parentheses '(' - with an opening curly brace '{', and closing parentheses ')' with a closing curly brace '}'. - The function maintains a stack to ensure proper matching of parentheses. If a closing parenthesis - is encountered without a corresponding opening parenthesis in the stack, it is left unchanged. - - Parameters: - text (str): The input text containing parentheses that need to be replaced. - - Returns: - str: The modified text with parentheses replaced by curly braces. - """ - stack = [] - result = "" - for char in text: - if char == "(" or char == "[": - stack.append(char) - result += "{" - elif char == ")" or char == "]": - if stack: - stack.pop() - result += "}" - else: - result += char - else: - result += char - return result - - -def line_starts_with_capitalized_alphanumeric(line): - """ - Check if the given line starts with a capitalized alphanumeric word. - - Parameters: - line (str): The input string representing a line. - - Returns: - bool: True if the line starts with a capitalized alphanumeric word, False otherwise. - """ - words = line.split() - if len(words) > 0: - first_word = words[0] - if first_word[0].isalpha() and first_word[0].isupper(): - return True - return False diff --git a/utils/finetuning/finetune_instruct/__init__.py b/utils/finetuning/finetune_instruct/__init__.py deleted file mode 100644 index d3f5a12f..00000000 --- a/utils/finetuning/finetune_instruct/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/utils/finetuning/finetune_instruct/arguments.py b/utils/finetuning/finetune_instruct/arguments.py deleted file mode 100644 index 6fdc440e..00000000 --- a/utils/finetuning/finetune_instruct/arguments.py +++ /dev/null @@ -1,184 +0,0 @@ -import os -from dataclasses import dataclass, field -from typing import Optional, List - -from transformers import TrainingArguments - -# Set desired GPU indices if needed -os.environ["CUDA_VISIBLE_DEVICES"] = "0,2,3,4,5,6,7" - - -def default_list() -> List[str]: - return ["q_proj", "v_proj", "o_proj", "down_proj", "up_proj", "gate_proj"] - - -@dataclass -class ModelArguments: - """ - Arguments pertaining to which model/config/tokenizer we are going to fine-tune from. - """ - - model_name_or_path: str = field( - metadata={ - "help": "Path to pretrained model or model identifier from huggingface.co/models" - } - ) - peft_model_path: str = field(default="") - config_name: Optional[str] = field( - default=None, - metadata={ - "help": "Pretrained config name or path if not the same as model_name" - }, - ) - tokenizer_name: Optional[str] = field( - default=None, - metadata={ - "help": "Pretrained tokenizer name or path if not the same as model_name" - }, - ) - use_lora: bool = field( - default=True, - metadata={ - "help": "If passed, will use LORA (low-rank parameter-efficient training) to train the model." - }, - ) - lora_rank: int = field( - default=64, metadata={"help": "The rank dimension for LoRA."} - ) - lora_alpha: float = field( - default=16, metadata={"help": "The scaling factor (alpha) for LoRA."} - ) - lora_dropout: float = field( - default=0.05, metadata={"help": "The dropout rate for LoRA layers."} - ) - target_modules: List[str] = field( - default_factory=default_list, - metadata={"help": "List of modules to apply LoRA to."}, - ) - save_merged_lora_model: bool = field( - default=False, - metadata={ - "help": "If True, merges the LoRA parameters into the base model before saving." - }, - ) - use_flash_attn: bool = field( - default=True, - metadata={ - "help": "If True, use flash attention during training (if supported)." - }, - ) - use_slow_tokenizer: bool = field( - default=False, - metadata={ - "help": "If True, use a slow (Python-based) tokenizer instead of a fast (C++/Rust) one." - }, - ) - low_cpu_mem_usage: bool = field( - default=False, - metadata={ - "help": "If True, create the model as an empty shell and then load weights, reducing RAM usage." - }, - ) - cache_dir: str = field( - default="tmp", - metadata={ - "help": "Path to the directory where models and tokenizers are cached." - }, - ) - token: str = field( - default=None, metadata={"help": "HuggingFace hub token for private models."} - ) - from_peft: str = field( - default=None, - metadata={"help": "Path to a PEFT checkpoint from which to load a model."}, - ) - lora_extra_parameters: str = field( - default=None, metadata={"help": "Additional modules to save when using LoRA."} - ) - - -@dataclass -class DataArguments: - train_data: str = field( - default="toy_finetune_data.jsonl", - metadata={"help": "Path to the training data file (in JSONL format)."}, - ) - - query_max_len: int = field( - default=32, - metadata={ - "help": "Max length of the input sequence for the instruction/input portion." - }, - ) - passage_max_len: int = field( - default=128, - metadata={ - "help": "Max length of the entire sequence (instruction + input + output)." - }, - ) - - max_example_num_per_dataset: int = field( - default=10, - metadata={"help": "Maximum number of examples to load from the dataset."}, - ) - - cache_path: str = field( - default="./data_dir", - metadata={"help": "Directory for caching processed datasets."}, - ) - - load_from_disk: bool = field( - default=False, - metadata={ - "help": "If True, load a previously saved dataset from disk instead of processing from scratch." - }, - ) - - load_disk_path: str = field( - default=None, - metadata={ - "help": "Path to the saved dataset on disk if load_from_disk is True." - }, - ) - - save_to_disk: bool = field( - default=False, metadata={"help": "If True, save the processed dataset to disk."} - ) - - save_disk_path: str = field( - default=None, - metadata={ - "help": "Path to save the processed dataset if save_to_disk is True." - }, - ) - - num_shards: int = field( - default=0, - metadata={"help": "Number of shards to split the dataset into when saving."}, - ) - - save_max_shard_size: str = field( - default="50GB", - metadata={"help": "Maximum size of each shard when saving the dataset."}, - ) - - exit_after_save: bool = field( - default=False, - metadata={"help": "If True, exit the program after saving the dataset."}, - ) - - def __post_init__(self): - if not os.path.exists(self.train_data): - raise FileNotFoundError( - f"Cannot find file: {self.train_data}. Please provide a valid path." - ) - - -@dataclass -class SFTTrainingArguments(TrainingArguments): - """ - Training arguments specifically for supervised fine-tuning a causal language model. - """ - - # Additional arguments can be added if needed. - pass diff --git a/utils/finetuning/finetune_instruct/data.py b/utils/finetuning/finetune_instruct/data.py deleted file mode 100644 index fa2e6039..00000000 --- a/utils/finetuning/finetune_instruct/data.py +++ /dev/null @@ -1,233 +0,0 @@ -import random -from dataclasses import dataclass -from typing import Any, Dict, List, Optional - -import torch -import datasets -from torch.utils.data import Dataset -from transformers import ( - DataCollatorForSeq2Seq, - PreTrainedTokenizer, - PreTrainedTokenizerBase, -) -from jinja2 import Template - -# Replace this import with your own arguments class or define it below -from arguments import DataArguments - -instruction_template = r""" -{%- set ns = namespace(found=false) -%} -{%- for message in messages -%} - {%- if message['role'] == 'system' -%} - {%- set ns.found = true -%} - {%- endif -%} -{%- endfor -%} - -{% for message in messages %} -{% if loop.first and message['role'] == 'system' %} - {% set role = 'user' %} -{% elif message['role'] == 'assistant' %} - {% set role = 'model' %} -{% else %} - {% set role = message['role'] %} -{% endif %} -{{ role }} -{{ message['content'].rstrip() }} -{% endfor %} -""" - - -def apply_chat_template(messages, add_generation_prompt=True): - """ - Renders a list of messages (dicts with 'role' and 'content') into - a single text prompt for causal language models, using Jinja. - """ - t = Template(instruction_template) - rendered = t.render(messages=messages) - if add_generation_prompt: - # Optionally append a small trigger or instruction for the model to continue - rendered += "\nuser\n" - return rendered - - -class TrainDataset(Dataset): - """ - A PyTorch Dataset for instruction-tuning on a causal language model. - """ - - def __init__(self, args: DataArguments, tokenizer: PreTrainedTokenizer): - """ - :param args: Custom DataArguments containing dataset paths, cache paths, etc. - :param tokenizer: A pretrained tokenizer (GPT-2, GPT-NeoX, or similar). - """ - # Load the dataset - self.dataset = datasets.load_dataset( - "json", data_files=args.train_data, split="train", cache_dir=args.cache_path - ) - - # Shuffle the dataset using random - self.dataset = self.dataset.shuffle(seed=42) - - # Randomly sample specified number of examples if needed - if len(self.dataset) > args.max_example_num_per_dataset: - sampled_indices = random.sample( - range(len(self.dataset)), args.max_example_num_per_dataset - ) - self.dataset = self.dataset.select(sampled_indices) - - # Basic setup - self.tokenizer = tokenizer - self.args = args - self.total_len = len(self.dataset) - - # Set the tokenizer's pad token - self.tokenizer.pad_token = self.tokenizer.eos_token - - # Generate the prompt format - messages = [ - {"role": "system", "content": "{instruction}"}, - { - "role": "user", - "content": ("{input}\n"), - }, - ] - self.prompt_format = self.tokenizer.apply_chat_template( - messages, tokenize=False, add_generation_prompt=True - ) - - print("Prompt format:", self.prompt_format) - - # Set max_length for prompt+output - self.max_length = self.args.query_max_len + self.args.passage_max_len - - def __len__(self): - return self.total_len - - def __getitem__(self, index: int) -> Dict[str, List[int]]: - """ - For each example: - 1. Read instruction, input, and output from the dataset. - 2. Build the prompt using the stored template. - 3. Concatenate prompt + output_text as the full input. - 4. Tokenize everything. - 5. Mask out the prompt portion in labels with -100. - """ - example = self.dataset[index] - instruction = example["instruction"] - input_text = example.get("input", "") - output_text = example["output"] - - # Build the prompt from our custom format - prompt = self.prompt_format.format( - instruction=instruction.strip(), input=input_text.strip() - ) - - # Concatenate prompt + output in one sequence for causal LM - full_input = prompt + output_text.strip() - - # Tokenize the entire sequence - tokenized = self.tokenizer( - full_input, - max_length=self.max_length, - truncation=True, - return_tensors=None, # return raw python lists - add_special_tokens=True, - ) - input_ids = tokenized["input_ids"] - attention_mask = tokenized["attention_mask"] - - # Tokenize just the prompt to find boundary - prompt_tokenized = self.tokenizer( - prompt, - max_length=self.max_length, - truncation=True, - return_tensors=None, - add_special_tokens=True, - ) - prompt_len = len(prompt_tokenized["input_ids"]) - - # Create labels array and mask out prompt tokens with -100 - labels = [-100] * len(input_ids) - if prompt_len < len(input_ids): - labels[prompt_len:] = input_ids[prompt_len:] - - return { - "input_ids": input_ids, - "attention_mask": attention_mask, - "labels": labels, - } - - -@dataclass -class DataCollatorForFinetuning(DataCollatorForSeq2Seq): - """ - Collator that pads input_ids, attention_mask, and labels for a - causal instruction-tuning scenario. - - In many seq2seq settings (T5/BART), you would rely on DataCollatorForSeq2Seq - to handle encoder/decoder inputs. However, here we can still inherit from it - for convenience if we only need padding on a single sequence + labels. - - If using a GPT-style model, consider using DataCollatorForLanguageModeling - from Hugging Face Transformers. But this approach will still work - if you only need to handle padding. - """ - - query_max_len: int = 32 - passage_max_len: int = 128 - label_pad_token_id: int = -100 - tokenizer: PreTrainedTokenizerBase = None - padding: bool = True - pad_to_multiple_of: Optional[int] = None - return_tensors: str = "pt" - - def __post_init__(self): - if self.tokenizer is None: - raise ValueError("Tokenizer must be provided to the DataCollator.") - - def __call__( - self, features: List[Dict[str, Any]], return_tensors: Optional[str] = None - ) -> Dict[str, Any]: - """ - Pads inputs and labels separately, then returns a batch of tensors. - """ - # 1. We use return_tensors from self if not explicitly provided - return_tensors = return_tensors or self.return_tensors - - # 2. Extract and remove labels from features - labels = [f.pop("labels") for f in features] - - # 3. Pad labels (treated as input_ids) to the longest label length - label_features = [{"input_ids": label} for label in labels] - padded_labels = self.tokenizer.pad( - label_features, - padding="longest", - max_length=None, # Let tokenizer do max length for labels - pad_to_multiple_of=self.pad_to_multiple_of, - return_tensors=return_tensors, - ) - - # Convert padded label IDs to a torch.Tensor of type long - labels_tensor = padded_labels["input_ids"] - if not isinstance(labels_tensor, torch.Tensor): - labels_tensor = torch.tensor(labels_tensor, dtype=torch.long) - - # Replace pad_token_id with -100 so they don't affect the loss - labels_tensor[labels_tensor == self.tokenizer.pad_token_id] = ( - self.label_pad_token_id - ) - - # 4. Pad the input features themselves (input_ids, attention_mask) - max_length = self.query_max_len + self.passage_max_len - padded_features = self.tokenizer.pad( - features, - padding=self.padding, - max_length=max_length, - pad_to_multiple_of=self.pad_to_multiple_of, - return_tensors=return_tensors, - ) - - # 5. Add the labels back in - padded_features["labels"] = labels_tensor - - return padded_features diff --git a/utils/finetuning/finetune_instruct/data_llama.py b/utils/finetuning/finetune_instruct/data_llama.py deleted file mode 100644 index c8ac64cc..00000000 --- a/utils/finetuning/finetune_instruct/data_llama.py +++ /dev/null @@ -1,172 +0,0 @@ -import sys -import os -import random -from typing import List, Any, Dict, Optional -from dataclasses import dataclass - -import datasets -from torch.utils.data import Dataset -from transformers import ( - PreTrainedTokenizer, - PreTrainedTokenizerBase, - DataCollatorForSeq2Seq, -) - - -class TrainDataset(Dataset): - def __init__(self, args, tokenizer: PreTrainedTokenizer): - # Load dataset (assuming args.train_data points to a directory or a JSON file) - if os.path.isdir(args.train_data): - train_datasets = [] - for file in os.listdir(args.train_data): - try: - temp_dataset = datasets.load_dataset( - "json", - data_files=os.path.join(args.train_data, file), - split="train", - cache_dir=args.cache_path, - ) - except Exception as e: - print(e, file) - sys.exit() - if len(temp_dataset) > args.max_example_num_per_dataset: - temp_dataset = temp_dataset.select( - random.sample( - range(len(temp_dataset)), args.max_example_num_per_dataset - ) - ) - train_datasets.append(temp_dataset) - - self.dataset = datasets.concatenate_datasets(train_datasets) - else: - self.dataset = datasets.load_dataset( - "json", - data_files=args.train_data, - split="train", - cache_dir=args.cache_path, - ) - - self.tokenizer = tokenizer - self.args = args - self.total_len = len(self.dataset) - - # Define prompt format - messages = [ - { - "role": "system", - "content": "You are an expert trained on healthcare and biomedical domain!{instruction}", - }, - {"role": "user", "content": "{input}\n"}, - ] - self.prompt_format = self.tokenizer.apply_chat_template( - messages, tokenize=False, add_generation_prompt=True - ) - - # Maximum length for the model input - self.max_length = self.args.query_max_len + self.args.passage_max_len - - def __len__(self): - return self.total_len - - def __getitem__(self, index): - example = self.dataset[index] - instruction = example["instruction"] - input_text = example.get("input", "") - output_text = example["output"] - - # Create the prompt - prompt = self.prompt_format.format( - instruction=instruction.strip(), input=input_text.strip() - ) - - # Tokenize the prompt and output together - full_input = prompt + output_text - tokenized = self.tokenizer( - full_input, - max_length=self.max_length, - truncation=True, - return_tensors=None, - add_special_tokens=True, - ) - - input_ids = tokenized["input_ids"] - attention_mask = tokenized["attention_mask"] - - # Determine where output starts - prompt_tokenized = self.tokenizer( - prompt, - max_length=self.max_length, - truncation=True, - return_tensors=None, - add_special_tokens=True, - ) - prompt_len = len(prompt_tokenized["input_ids"]) - - # Create labels - labels = [-100] * len(input_ids) - if prompt_len < len(input_ids): - labels[prompt_len:] = input_ids[prompt_len:] - - return { - "input_ids": input_ids, - "attention_mask": attention_mask, - "labels": labels, - } - - -@dataclass -class DataCollatorForFinetuning(DataCollatorForSeq2Seq): - """ - Collator that pads input_ids, attention_masks, and labels for LLaMA fine-tuning. - """ - - query_max_len: int = 32 - passage_max_len: int = 128 - label_pad_token_id: int = -100 - tokenizer: PreTrainedTokenizerBase = None - padding: bool = True - pad_to_multiple_of: Optional[int] = None - return_tensors: str = "pt" - - def __post_init__(self): - if self.tokenizer is None: - raise ValueError("Tokenizer must be provided to the DataCollator.") - if self.tokenizer.pad_token_id != 128009: - raise ValueError( - "The tokenizer pad_token_id must be set to 128009 for LLaMA." - ) - - def __call__( - self, features: List[Dict[str, Any]], return_tensors: Optional[str] = None - ) -> Dict[str, Any]: - return_tensors = return_tensors or self.return_tensors - - # Separate labels - labels = [feature.pop("labels") for feature in features] - - # Pad labels - label_features = [{"input_ids": label} for label in labels] - padded_labels = self.tokenizer.pad( - label_features, - padding="longest", - return_tensors=return_tensors, - pad_to_multiple_of=self.pad_to_multiple_of, - ) - labels_tensor = padded_labels["input_ids"] - labels_tensor[labels_tensor == self.tokenizer.pad_token_id] = ( - self.label_pad_token_id - ) - - # Pad input_ids and attention_mask - max_length = self.query_max_len + self.passage_max_len - padded_features = self.tokenizer.pad( - features, - padding=self.padding, - max_length=max_length, - pad_to_multiple_of=self.pad_to_multiple_of, - return_tensors=return_tensors, - ) - - # Add labels to the padded features - padded_features["labels"] = labels_tensor - return padded_features diff --git a/utils/finetuning/finetune_instruct/data_summary.py b/utils/finetuning/finetune_instruct/data_summary.py deleted file mode 100644 index c7f5cf7b..00000000 --- a/utils/finetuning/finetune_instruct/data_summary.py +++ /dev/null @@ -1,240 +0,0 @@ -import os -import os.path -import random -import sys -from dataclasses import dataclass - -import datasets -import numpy as np -import torch -from arguments import DataArguments -from torch.utils.data import Dataset -from transformers import DataCollatorForSeq2Seq, PreTrainedTokenizer - - -class TrainDataset(Dataset): - def __init__(self, args: DataArguments, tokenizer: PreTrainedTokenizer): - # Load dataset - if os.path.isdir(args.train_data): - train_datasets = [] - for file in os.listdir(args.train_data): - try: - temp_dataset = datasets.load_dataset( - "json", - data_files=os.path.join(args.train_data, file), - split="train", - cache_dir=args.cache_path, - ) - except Exception as e: - print(e) - print(file) - sys.exit() - if len(temp_dataset) > args.max_example_num_per_dataset: - temp_dataset = temp_dataset.select( - random.sample( - list(range(len(temp_dataset))), - args.max_example_num_per_dataset, - ) - ) - train_datasets.append(temp_dataset) - - self.dataset = datasets.concatenate_datasets(train_datasets) - else: - self.dataset = datasets.load_dataset( - "json", - data_files=args.train_data, - split="train", - cache_dir=args.cache_path, - ) - - self.tokenizer = tokenizer - self.args = args - self.total_len = len(self.dataset) - self.max_length = self.args.query_max_len + self.args.passage_max_len - - def __len__(self): - return self.total_len - - def apply_chat_template(self, chat_messages): - """Formats chat messages into a prompt for the model.""" - return ( - "\n".join( - f"{msg['role'].capitalize()}: {msg['content']}" for msg in chat_messages - ) - + "\nRespond with only the JSON object conforming to the schema." - ) - - def __getitem__(self, index): - example = self.dataset[index] - - # Extract fields from the dataset - inclusion_criteria = example.get("inclusion_criteria", "").strip() - exclusion_criteria = example.get("exclusion_criteria", "").strip() - classification = example.get("classification", "").strip() - reasoning = example.get("reasoning", "").strip() - - # Universal instruction as in the system chat role - system_message = ( - "You are a medical assistant tasked with evaluating a patient's eligibility for a clinical trial given the provided eligibility criteria and patient description." - "Your assessment must be detailed, accurate, and strictly based on the provided patient profile and eligibility criteria." - "\n\n" - "### Key Guidelines\n" - "1. **Critical Information**:\n" - " - Essential data includes age, sex, primary diagnosis (e.g., cancer type and stage), and treatment history.\n" - " - If any critical information is missing from the patient profile, classify the case as **Excluded**, explaining which data is missing and why it affects the decision.\n\n" - "2. **Classification Rules**:\n" - " - **Included**: The patient meets all inclusion criteria and violates no exclusion criteria.\n" - " - **Excluded**: The patient violates any exclusion criterion or fails to meet one or more inclusion criteria.\n" - " - **Undetermined**: When critical information is missing, preventing a definitive classification.\n\n" - "3. **Evaluation Process**:\n" - " - Compare each eligibility criterion with the patient's profile.\n" - " - Evaluate strictly based on the provided data—do not infer or assume missing details.\n" - " - Clearly outline your reasoning, step by step, ensuring it is logically structured and references specific criteria.\n\n" - "4. **Reasoning Template**:\n" - " - Always begin with a summary of the patient's key information relevant to the trial.\n" - " - Evaluate inclusion criteria one-by-one:\n" - " - Specify whether each criterion is met or not, with evidence from the profile.\n" - " - Evaluate exclusion criteria one-by-one:\n" - " - Specify whether each criterion is violated or not, with evidence from the profile.\n" - " - Conclude with your classification decision, summarizing how inclusion and exclusion criteria were addressed.\n\n" - "### Response Format\n" - "Your response must be a JSON object with the following structure:\n" - "{\n" - ' "classification": "string",\n' - ' "reasoning": "string"\n' - "}\n\n" - "### Example Reasoning Structure\n" - "Here is an example reasoning structure:\n\n" - "1. **Summary**:\n" - " The patient is a 65-year-old male with stage IV NSCLC who has completed two prior lines of chemotherapy.\n" - "2. **Inclusion Criteria Evaluation**:\n" - " - Criterion: Patient must have stage IV NSCLC. **Met**: Patient profile confirms stage IV NSCLC.\n" - " - Criterion: Must have measurable disease. **Not Evaluated**: Patient profile does not specify this information.\n" - "3. **Exclusion Criteria Evaluation**:\n" - " - Criterion: Prior treatment with immunotherapy. **Violated**: Patient profile confirms prior treatment with immunotherapy.\n" - "4. **Conclusion**:\n" - " Based on the criteria evaluation, the patient is classified as **Excluded** due to violation of the exclusion criterion regarding prior immunotherapy treatment.\n\n" - "### Additional Notes\n" - "- Be concise and precise in your reasoning.\n" - "- Avoid making assumptions about missing or unspecified information.\n" - "- If multiple factors lead to a classification, clearly state their contributions." - ) - - # Construct the user message with inclusion and exclusion criteria - user_message = ( - f"**Clinical Trial Eligibility Criteria:**\n\n" - f"**Inclusion Criteria:**\n{inclusion_criteria}\n\n" - f"**Exclusion Criteria:**\n{exclusion_criteria}\n\n" - "Evaluate the compatibility of the patient's profile with the eligibility criteria. Base your classification and reasoning only on the information provided." - ) - - # Build the chat-based prompt - chat = [ - {"role": "system", "content": system_message}, - {"role": "user", "content": user_message}, - ] - prompt = self.apply_chat_template(chat) - - # Construct the full input with the expected output appended - full_input = f'{prompt}\n\n{{\n "classification": "{classification}",\n "reasoning": "{reasoning}"\n}}' - - # Tokenize the full input - tokenized = self.tokenizer( - full_input, - max_length=self.max_length, - truncation=True, - return_tensors=None, - add_special_tokens=True, - ) - - input_ids = tokenized["input_ids"] - attention_mask = tokenized["attention_mask"] - - # Tokenize just the prompt to find where the completion starts - prompt_tokenized = self.tokenizer( - prompt, - max_length=self.max_length, - truncation=True, - return_tensors=None, - add_special_tokens=True, - ) - prompt_len = len(prompt_tokenized["input_ids"]) - - # Create labels, masking the prompt portion - labels = [-100] * len(input_ids) - if prompt_len < len(input_ids): - labels[prompt_len:] = input_ids[prompt_len:] - - return { - "input_ids": input_ids, - "attention_mask": attention_mask, - "labels": labels, - } - - -@dataclass -class DataCollatorForFinetuning(DataCollatorForSeq2Seq): - query_max_len: int = 32 # Maximum length for the prompt - passage_max_len: int = 128 # Maximum length for reasoning and classification - - def __call__(self, features, return_tensors="pt"): - """ - Custom data collator for fine-tuning a seq2seq model with chat-style prompts and structured output. - - Args: - features (list): A list of feature dictionaries containing `input_ids`, `attention_mask`, and `labels`. - return_tensors (str): The format for returned tensors (default is 'pt'). - """ - if return_tensors is None: - return_tensors = self.return_tensors - - # Extract labels and calculate the maximum label length - labels = [f["labels"] for f in features] - max_label_length = max(len(label) for label in labels) - - # Apply padding to labels - if self.pad_to_multiple_of is not None: - max_label_length = ( - (max_label_length + self.pad_to_multiple_of - 1) - // self.pad_to_multiple_of - * self.pad_to_multiple_of - ) - - # Determine padding side (left or right) - padding_side = self.tokenizer.padding_side - for feature in features: - remainder = [self.label_pad_token_id] * ( - max_label_length - len(feature["labels"]) - ) - if isinstance(feature["labels"], list): - feature["labels"] = ( - feature["labels"] + remainder - if padding_side == "right" - else remainder + feature["labels"] - ) - elif padding_side == "right": - feature["labels"] = np.concatenate( - [feature["labels"], remainder] - ).astype(np.int64) - else: - feature["labels"] = np.concatenate( - [remainder, feature["labels"]] - ).astype(np.int64) - - # Pad input_ids and attention_mask, ensuring proper alignment with labels - collated = self.tokenizer.pad( - features, - padding=self.padding, - max_length=self.query_max_len + self.passage_max_len, - return_tensors=return_tensors, - pad_to_multiple_of=self.pad_to_multiple_of, - ) - - # Apply masking to prevent training on prompt tokens - if "labels" in collated: - collated["labels"] = collated["labels"].clone().detach().to(torch.long) - collated["labels"][ - collated["labels"] == self.tokenizer.pad_token_id - ] = -100 # Mask padding tokens for labels - - return collated diff --git a/utils/finetuning/finetune_instruct/evaluate.py b/utils/finetuning/finetune_instruct/evaluate.py deleted file mode 100644 index 0adafc66..00000000 --- a/utils/finetuning/finetune_instruct/evaluate.py +++ /dev/null @@ -1,269 +0,0 @@ -import json -import os -import random -import re -import unicodedata -from multiprocessing import get_context - -import torch -from sklearn.metrics import accuracy_score, precision_recall_fscore_support -from tqdm import tqdm -from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig - -# Set CUDA devices -os.environ["CUDA_VISIBLE_DEVICES"] = "0,1,2,3,4,5,6,7" - - -class EvaluationScript: - def __init__( - self, model_path, adapter_path=None, devices=None, torch_dtype=torch.float16 - ): - self.model_path = model_path - self.adapter_path = adapter_path - self.torch_dtype = torch_dtype - self.devices = devices or list(range(torch.cuda.device_count())) - - # Initialize tokenizer - self.tokenizer = AutoTokenizer.from_pretrained( - model_path, trust_remote_code=True - ) - - # Initialize token IDs for responses - self._initialize_token_ids() - - def _initialize_token_ids(self): - responses = ["Match", "Mismatch", "Neutral"] - token_ids = [ - self.tokenizer(response, add_special_tokens=False)["input_ids"] - for response in responses - ] - self.match_token_id, self.mismatch_token_id, self.neutral_token_id = [ - ids[0] for ids in token_ids - ] - - def load_model(self, device): - print(f"Loading model on device cuda:{device}...") - quant_config = BitsAndBytesConfig(load_in_8bit=True) - model = AutoModelForCausalLM.from_pretrained( - self.model_path, - torch_dtype=self.torch_dtype, - quantization_config=quant_config, - device_map=f"cuda:{device}", - trust_remote_code=True, - ) - model.eval() - return model - - def preprocess_text(self, text): - match_a = re.search( - r"Statement A:\s*(.+?)(?=\nStatement B:|$)", text, re.DOTALL - ) - match_b = re.search(r"Statement B:\s*(.+)", text, re.DOTALL) - - statement_a = ( - unicodedata.normalize("NFKD", match_a.group(1).strip()) if match_a else "" - ) - statement_b = ( - unicodedata.normalize("NFKD", match_b.group(1).strip()) if match_b else "" - ) - - # remove unecessary punctuations - statement_a = re.sub(r"[^\w\s]", "", statement_a) - statement_b = re.sub(r"[^\w\s]", "", statement_b) - - combined_text = f"Statement A: {statement_a}\nStatement B: {statement_b}" - - return combined_text - - def create_messages(self, input_text): - messages = [ - { - "role": "system", - "content": ( - "You are a knowledgeable AI medical assistant. Your task is to evaluate the semantic consistency " - "and logical alignment between Statement A (patient description) and Statement B (eligibility criterion). " - "Apply the following rules strictly:\n" - "- Reply 'Match' if Statement A aligns with and satisfies Statement B.\n" - "- Reply 'Mismatch' if Statement A contradicts or is incompatible with Statement B.\n" - "- Reply 'Neutral' if Statement A and Statement B are unrelated, loosely related, or ambiguously connected " - "without clear alignment or contradiction.\n\n" - "Provide your response using only 'Match,' 'Mismatch,' or 'Neutral'." - ), - }, - # Few-shot example 1 - Match - { - "role": "user", - "content": ( - "Statement A: The patient has a confirmed diagnosis of Stage IV non-small cell lung cancer (NSCLC) " - "with an EGFR exon 19 deletion mutation.\n" - "Statement B: NSCLC cases associated with EGFR exon 19 mutations." - ), - }, - { - "role": "assistant", - "content": "Match", - }, - # Few-shot example 2 - Mismatch - { - "role": "user", - "content": ( - "Statement A: The patient has a history of allergic reactions to penicillin.\n" - "Statement B: No known severe hypersensitivity reactions to study drugs, especially to penicillin." - ), - }, - { - "role": "assistant", - "content": "Mismatch", - }, - # Few-shot example 3 - Neutral - { - "role": "user", - "content": ( - "Statement A: The patient is a 65-year-old male with mild osteoarthritis managed with physical therapy.\n" - "Statement B: Patients with respiratory disorders currently attending rehabilition and physical therapy." - ), - }, - { - "role": "assistant", - "content": "Neutral", - }, - # Input example to evaluate - { - "role": "user", - "content": input_text, - }, - ] - return messages - - def process_on_device(self, device, input_queue, output_queue): - model = self.load_model(device) - - while True: - input_data = input_queue.get() - if input_data is None: - break - - input_text = self.preprocess_text(input_data["input"]) - messages = self.create_messages(input_text) - prompt = self.tokenizer.apply_chat_template( - messages, tokenize=False, add_generation_prompt=True - ) - - inputs = self.tokenizer(prompt, return_tensors="pt").to(f"cuda:{device}") - - with torch.no_grad(): - outputs = model(**inputs, use_cache=False) - - last_token_logits = outputs.logits[0, -1, :] - probabilities = torch.softmax(last_token_logits, dim=-1) - top_prob, top_token_id = torch.topk(probabilities, 1) - prob = top_prob.item() - - if top_token_id == self.match_token_id: - answer = "Match" - elif top_token_id == self.mismatch_token_id: - answer = "Mismatch" - elif top_token_id == self.neutral_token_id: - answer = "Neutral" - else: - answer = "Unknown" - - result = { - "input": input_data["input"], - "ground_truth": input_data["output"], - "prediction": answer, - "llm_score": prob, - } - output_queue.put(result) - - def generate_predictions(self, dataset): - ctx = get_context("spawn") - input_queue = ctx.Queue() - output_queue = ctx.Queue() - - workers = [ - ctx.Process( - target=self.process_on_device, args=(device, input_queue, output_queue) - ) - for device in self.devices - ] - - for worker in workers: - worker.start() - - for entry in dataset: - input_queue.put(entry) - - for _ in self.devices: - input_queue.put(None) - - all_predictions = [] - for _ in tqdm(range(len(dataset)), desc="Processing inputs"): - all_predictions.append(output_queue.get()) - - for worker in workers: - worker.join() - - return all_predictions - - def evaluate(self, dataset, save_path="incorrect_predictions.jsonl"): - predictions = self.generate_predictions(dataset) - - incorrect_examples = [ - { - "input": entry["input"], - "ground_truth": entry["output"], - "prediction": pred["prediction"], - "llm_score": pred["llm_score"], - } - for entry, pred in zip(dataset, predictions) - if pred["prediction"] != entry["output"] - ] - - with open(save_path, "w", encoding="utf-8") as f: - for example in incorrect_examples: - json.dump(example, f) - f.write("\n") - - references = [entry["output"] for entry in dataset] - predictions_only = [pred["prediction"] for pred in predictions] - - accuracy = accuracy_score(references, predictions_only) - precision, recall, f1, _ = precision_recall_fscore_support( - references, predictions_only, average="weighted" - ) - - print(f"Incorrect examples saved to {save_path}") - - return { - "accuracy": accuracy, - "precision": precision, - "recall": recall, - "f1": f1, - } - - -if __name__ == "__main__": - model_path = "tiiuae/Falcon3-10B-Instruct" - adapter_path = None - devices = [0, 1] - - evaluator = EvaluationScript( - model_path=model_path, - adapter_path=adapter_path, - devices=devices, - torch_dtype=torch.float16, - ) - dataset_path = "finetuning_data/cleaned_filtered_test_data.jsonl" - with open(dataset_path, "r", encoding="utf-8") as f: - dataset = [json.loads(line) for line in f] - dataset = random.sample(dataset, 100) - # dataset = [ - # {"input": "Statement A: no history of liver diseases or kidney disease is present, and serum creatinine levels are maintained below 1.0 mg/dl.\nStatement B: participants must not have a history of liver diseases (such as hepatitis, biliary atresia, or cirrhosis) or kidney disease, defined by a serum creatinine level exceeding 1.0 mg/dl.", "output": "Match"} - - # ] - results = evaluator.evaluate(dataset) - - print("Evaluation Metrics:") - for metric, value in results.items(): - print(f"{metric.capitalize()}: {value:.4f}") diff --git a/utils/finetuning/finetune_instruct/evaluate_CoT.py b/utils/finetuning/finetune_instruct/evaluate_CoT.py deleted file mode 100644 index 7ce64d24..00000000 --- a/utils/finetuning/finetune_instruct/evaluate_CoT.py +++ /dev/null @@ -1,160 +0,0 @@ -import torch -import json -from bert_score import score -from transformers import ( - AutoModelForCausalLM, - AutoTokenizer, - BitsAndBytesConfig, - pipeline, -) -from peft import PeftModel -import random - - -def load_model(device, model_path, adapter_path): - """ - Loads the model on the specified device using 4-bit quantization. - """ - print(f"Loading model on device cuda:{device}...") - tokenizer = AutoTokenizer.from_pretrained(model_path) - tokenizer.pad_token = tokenizer.eos_token - quant_config = BitsAndBytesConfig( - load_in_4bit=True, - bnb_4bit_use_double_quant=True, - bnb_4bit_quant_type="nf4", - bnb_4bit_compute_dtype=torch.float16, - ) - base_model = AutoModelForCausalLM.from_pretrained( - model_path, - torch_dtype=torch.float16, - device_map=f"cuda:{device}", - attn_implementation="flash_attention_2", - trust_remote_code=True, - quantization_config=quant_config, - ) - - pipe = pipeline( - "text-generation", - model=base_model, - tokenizer=tokenizer, - max_new_tokens=1024, - do_sample=False, - repetition_penalty=1.05, - ) - - # Load the fine-tuned adapter model - pipe.model = PeftModel.from_pretrained(base_model, adapter_path) - - return pipe, tokenizer - - -def generate_output(pipe, tokenizer, instruction, input_text): - """ - Generates model output using the instruction as system prompt and input as user prompt. - This version instructs the model to include its internal chain-of-thought exactly once, - followed by the final answer. - """ - # Instruct the model to reveal its chain-of-thought once. - system_msg = ( - instruction + "\nPlease include your internal chain-of-thought exactly once, " - "followed by the final answer. Do not repeat the chain-of-thought." - ) - messages = [ - {"role": "system", "content": system_msg}, - {"role": "user", "content": input_text}, - ] - prompt = tokenizer.apply_chat_template( - messages, tokenize=False, add_generation_prompt=True - ) - generated = pipe(prompt)[0]["generated_text"].strip() - - # Optional post-processing: If the chain-of-thought is repeated, keep only the first occurrence. - # This snippet assumes the model labels its reasoning with "Chain-of-thought:" and final answer with "Final Answer:". - if generated.count("Chain-of-thought:") > 1: - # Split on the label and reconstruct output using only the first instance. - parts = generated.split("Chain-of-thought:") - first_cot = ( - parts[1].split("Final Answer:")[0] - if "Final Answer:" in parts[1] - else parts[1] - ) - final_answer = "" - if "Final Answer:" in generated: - final_answer = "Final Answer:" + generated.split("Final Answer:")[-1] - # Rebuild the output with a single chain-of-thought section. - generated = parts[0] + "Chain-of-thought:" + first_cot + "\n" + final_answer - generated = generated.strip() - - return generated - - -def compute_bertscore( - model_outputs, - reference_outputs, - lang="en", - model_type="allenai/longformer-base-4096", -): - """ - Computes BERTScore for evaluating model-generated outputs against reference texts. - """ - assert len(model_outputs) == len(reference_outputs), ( - "Mismatch in number of model and reference outputs" - ) - - print("Computing BERTScore...") - precision, recall, f1 = score( - model_outputs, - reference_outputs, - lang=lang, - model_type=model_type, - device="cuda" if torch.cuda.is_available() else "cpu", - ) - - return { - "precision": precision.mean().item(), - "recall": recall.mean().item(), - "f1": f1.mean().item(), - } - - -def main(): - device = 0 - model_path = "microsoft/phi-4" - adapter_path = "finetuned_phi_reasoning/" - pipe, tokenizer = load_model(device, model_path, adapter_path) - - file_path = "finetuning_data/medical_o1_reasoning_test.jsonl" - model_outputs = [] - reference_outputs = [] - - with open(file_path, "r") as f: - lines = f.readlines() - - # Randomly select 15 test cases - selected_lines = random.sample(lines, 500) - - for idx, line in enumerate(selected_lines, 1): - print(f"Processing randomly selected line {idx}") - data = json.loads(line) - generated_text = generate_output( - pipe, tokenizer, data["instruction"], data["input"] - ) - print("Generated Output:\n", generated_text, "\n") - model_outputs.append(generated_text) - reference_outputs.append(data["output"]) - - results = compute_bertscore(model_outputs, reference_outputs) - - print("\nBERTScore Results:") - print(f"Precision: {results['precision']:.4f}") - print(f"Recall: {results['recall']:.4f}") - print(f"F1 Score: {results['f1']:.4f}") - - with open("bertscore_results.txt", "w") as f: - f.write(f"Precision: {results['precision']:.4f}\n") - f.write(f"Recall: {results['recall']:.4f}\n") - f.write(f"F1 Score: {results['f1']:.4f}\n") - - -if __name__ == "__main__": - main() diff --git a/utils/finetuning/finetune_instruct/evaluate_gemma2.py b/utils/finetuning/finetune_instruct/evaluate_gemma2.py deleted file mode 100644 index 8fa9871a..00000000 --- a/utils/finetuning/finetune_instruct/evaluate_gemma2.py +++ /dev/null @@ -1,243 +0,0 @@ -import os -import torch -import unicodedata -import re -from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig -from multiprocessing import get_context -from sklearn.metrics import accuracy_score, precision_recall_fscore_support -from tqdm import tqdm -from peft import PeftModel -import json - -# Set CUDA devices -os.environ["CUDA_VISIBLE_DEVICES"] = "1" - - -class EvaluationScript: - def __init__( - self, model_path, adapter_path=None, devices=None, torch_dtype=torch.float16 - ): - self.model_path = model_path - self.adapter_path = adapter_path - self.torch_dtype = torch_dtype - self.devices = devices or list(range(torch.cuda.device_count())) - - # Initialize tokenizer - self.tokenizer = AutoTokenizer.from_pretrained( - model_path, trust_remote_code=True - ) - - # Initialize token IDs for responses "Yes" and "No" - self._initialize_token_ids() - - def _initialize_token_ids(self): - responses = ["Yes", "No"] - token_ids = [ - self.tokenizer(response, add_special_tokens=False)["input_ids"] - for response in responses - ] - self.yes_token_id, self.no_token_id = [ids[0] for ids in token_ids] - - def load_model(self, device): - """ - Loads the model on the specified device using 4-bit quantization. - If an adapter path is provided, it loads the adapter using PEFT. - """ - print(f"Loading model on device cuda:{device}...") - quant_config = BitsAndBytesConfig( - load_in_4bit=True, - bnb_4bit_use_double_quant=True, - bnb_4bit_quant_type="nf4", - bnb_4bit_compute_dtype=torch.float16, - ) - model = AutoModelForCausalLM.from_pretrained( - self.model_path, - torch_dtype=self.torch_dtype, - device_map=f"cuda:{device}", - attn_implementation="flash_attention_2", - quantization_config=quant_config, - trust_remote_code=True, - ) - if self.adapter_path is not None: - model = PeftModel.from_pretrained(model, self.adapter_path) - model.eval() - return model - - def preprocess_text(self, text): - # Extract Statement A and Statement B using regex. - match_a = re.search( - r"Statement A:\s*(.+?)(?=\nStatement B:|$)", text, re.DOTALL - ) - match_b = re.search(r"Statement B:\s*(.+)", text, re.DOTALL) - - statement_a = ( - unicodedata.normalize("NFKD", match_a.group(1).strip()) if match_a else "" - ) - statement_b = ( - unicodedata.normalize("NFKD", match_b.group(1).strip()) if match_b else "" - ) - - # Optionally, remove unnecessary punctuations - statement_a = re.sub(r"[^\w\s]", "", statement_a) - statement_b = re.sub(r"[^\w\s]", "", statement_b) - - combined_text = f"Statement A: {statement_a}\nStatement B: {statement_b}" - return combined_text - - def create_messages(self, input_text): - # Create a prompt with only the system instruction and the input example. - messages = [ - { - "role": "user", - "content": ( - "You are a clinical assistant tasked with determining whether the patient information (Statement A) " - "is related to the " - "trial eligibility criterion (Statement B). Respond with 'Yes' if Statement A contains sufficient " - "information to make this evaluation, or 'No' if it does not." - ), - }, - {"role": "assistant", "content": " "}, - { - "role": "user", - "content": input_text, - }, - ] - return messages - - def process_on_device(self, device, input_queue, output_queue): - model = self.load_model(device) - - while True: - input_data = input_queue.get() - if input_data is None: - break - - # Preprocess the input text (extract and clean Statement A and B) - input_text = self.preprocess_text(input_data["input"]) - messages = self.create_messages(input_text) - - # Use the model's chat template if available to format the prompt. - prompt = self.tokenizer.apply_chat_template( - messages, tokenize=False, add_generation_prompt=True - ) - inputs = self.tokenizer(prompt, return_tensors="pt").to(f"cuda:{device}") - - with torch.no_grad(): - outputs = model(**inputs, use_cache=False) - - # Get the logits of the last token and determine the top prediction. - last_token_logits = outputs.logits[0, -1, :] - probabilities = torch.softmax(last_token_logits, dim=-1) - top_prob, top_token_id = torch.topk(probabilities, 1) - prob = top_prob.item() - - if top_token_id == self.yes_token_id: - answer = "Yes" - elif top_token_id == self.no_token_id: - answer = "No" - else: - answer = "Unknown" - - result = { - "input": input_data["input"], - "ground_truth": input_data["output"], - "prediction": answer, - "llm_score": prob, - } - output_queue.put(result) - - def generate_predictions(self, dataset): - ctx = get_context("spawn") - input_queue = ctx.Queue() - output_queue = ctx.Queue() - - workers = [ - ctx.Process( - target=self.process_on_device, args=(device, input_queue, output_queue) - ) - for device in self.devices - ] - - for worker in workers: - worker.start() - - for entry in dataset: - input_queue.put(entry) - - # Signal workers to exit - for _ in self.devices: - input_queue.put(None) - - all_predictions = [] - for _ in tqdm(range(len(dataset)), desc="Processing inputs"): - all_predictions.append(output_queue.get()) - - for worker in workers: - worker.join() - - return all_predictions - - def evaluate(self, dataset, save_path="incorrect_predictions.jsonl"): - predictions = self.generate_predictions(dataset) - - incorrect_examples = [ - { - "input": entry["input"], - "ground_truth": entry["output"], - "prediction": pred["prediction"], - "llm_score": pred["llm_score"], - } - for entry, pred in zip(dataset, predictions) - if pred["prediction"] != entry["output"] - ] - - # Optionally, save incorrect examples. - # with open(save_path, "w", encoding="utf-8") as f: - # for example in incorrect_examples: - # json.dump(example, f) - # f.write("\n") - - references = [entry["output"] for entry in dataset] - predictions_only = [pred["prediction"] for pred in predictions] - - accuracy = accuracy_score(references, predictions_only) - precision, recall, f1, _ = precision_recall_fscore_support( - references, predictions_only, average="weighted", zero_division=0 - ) - - print(f"Incorrect examples saved to {save_path}") - - return { - "accuracy": accuracy, - "precision": precision, - "recall": recall, - "f1": f1, - } - - -if __name__ == "__main__": - # Use the model from the specified path. - model_path = "google/gemma-2-2b-it" - # Set adapter_path to a valid path if you want to load a PEFT adapter; otherwise, keep it as None. - adapter_path = "finetuned_gemma2/" - devices = [0] # Adjust the devices as needed. - - evaluator = EvaluationScript( - model_path=model_path, - adapter_path=adapter_path, - devices=devices, - torch_dtype=torch.float16, - ) - - # Path to the transformed test dataset. - dataset_path = "finetuning_data/transformed_test_data.jsonl" - with open(dataset_path, "r", encoding="utf-8") as f: - dataset = [json.loads(line) for line in f] - # Optionally, sample a subset for evaluation. - # dataset = random.sample(dataset, 100) - - results = evaluator.evaluate(dataset) - - print("Evaluation Metrics:") - for metric, value in results.items(): - print(f"{metric.capitalize()}: {value:.4f}") diff --git a/utils/finetuning/finetune_instruct/evaluate_llama.py b/utils/finetuning/finetune_instruct/evaluate_llama.py deleted file mode 100644 index 45a40bb5..00000000 --- a/utils/finetuning/finetune_instruct/evaluate_llama.py +++ /dev/null @@ -1,202 +0,0 @@ -import json - -import torch -import transformers -from sklearn.metrics import accuracy_score, precision_recall_fscore_support - - -class LlamaMatchMismatchEvaluator: - """ - Evaluates a Llama-based instruction model on a classification task: - ('Match', 'Mismatch', or 'Neutral'). - - Each data entry is expected to contain: - { - "instruction": , - "input": , - "output": - } - """ - - def __init__( - self, - model_id: str = "ContactDoctor/Bio-Medical-Llama-3-8B", - torch_dtype: torch.dtype = torch.bfloat16, - device_map: str = "auto", - ): - """ - Initialize the evaluator with the specified Llama-based model. - - :param model_id: Hugging Face model ID (must be Llama-based). - :param torch_dtype: Floating-point precision (bfloat16 recommended on GPUs like A100). - :param device_map: Device mapping setting for large models, e.g. "auto". - """ - self.model_id = model_id - self.torch_dtype = torch_dtype - self.device_map = device_map - - # Create a text-generation pipeline for Llama - self.pipe = transformers.pipeline( - task="text-generation", - model=self.model_id, - model_kwargs={"torch_dtype": self.torch_dtype}, - device_map=self.device_map, - trust_remote_code=True, - ) - - # Grab tokenizer from the pipeline (useful for custom logic) - self.tokenizer = self.pipe.tokenizer - - # Define a system prompt for the conversation: - # (Customizable to remind the model of its domain) - self.system_prompt = ( - "You are a clinical trials expert specializing in matching patients " - "to eligibility criteria. You must respond with exactly one of: " - "'Match', 'Mismatch', or 'Neutral'." - ) - - def _build_prompt(self, data_entry): - """ - Builds a single prompt (string) that includes both system and user instructions. - Uses apply_chat_template to emulate a conversation. - - :param data_entry: A dict with keys: "instruction", "input". - :return: A single text prompt ready for the pipeline. - """ - # Format role-based messages - messages = [ - {"role": "system", "content": self.system_prompt}, - { - "role": "user", - "content": f"{data_entry['instruction']}\n\n" - f"{data_entry['input']}\n\n" - "Respond with 'Match', 'Mismatch', or 'Neutral' only.", - }, - ] - - # Llama's apply_chat_template for multi-turn chat - prompt = self.tokenizer.apply_chat_template( - [messages], # pass a nested list of conversation turns - tokenize=False, - add_generation_prompt=True, - ) - return prompt - - def _extract_class_label(self, generated_text: str) -> str: - """ - Attempts to extract the predicted label from the model's output text. - Returns 'Match', 'Mismatch', or 'Neutral' if found; otherwise 'Unknown'. - - :param generated_text: The raw string output from the pipeline. - :return: One of "Match", "Mismatch", "Neutral", or "Unknown". - """ - # Simple case-insensitive substring check. You can refine parsing if needed. - for label in ["Match", "Mismatch", "Neutral"]: - if label.lower() in generated_text.lower(): - return label - return "Unknown" - - def generate_predictions( - self, - dataset: list, - max_new_tokens: int = 64, - temperature: float = 0.0, - top_p: float = 1.0, - ) -> list: - """ - Generates label predictions for each dataset entry using the pipeline. - - :param dataset: List of examples, each with "instruction", "input". - :param max_new_tokens: Maximum tokens to generate for each inference call. - :param temperature: Temperature for sampling. 0.0 = deterministic. - :param top_p: Nucleus sampling parameter (1.0 = no nucleus sampling). - :return: List of predicted labels (strings). - """ - predictions = [] - for data_entry in dataset: - # Build the prompt from system + user messages - prompt = self._build_prompt(data_entry) - - # Define custom end-of-sequence tokens if needed. - # Some Llama-based models use custom tokens or just rely on eos_token_id. - eos_token_ids = [ - self.tokenizer.eos_token_id, - # If your model uses <|end_of_turn|> or similar, convert to ID: - # self.tokenizer.convert_tokens_to_ids("<|end_of_turn|>") - ] - - # Run inference. We get a list of generated sequences; pick the first. - outputs = self.pipe( - prompt, - max_new_tokens=max_new_tokens, - eos_token_id=eos_token_ids, - do_sample=(temperature > 0.0), - temperature=temperature, - top_p=top_p, - ) - # The pipeline returns a list of dicts. We extract the full text from the first. - raw_generated = outputs[0]["generated_text"] - - # Slice out only the newly generated portion if desired. - # The prompt is the first part; everything after that is the response. - response_text = raw_generated[len(prompt) :] - - # Extract class label from the response - predicted_label = self._extract_class_label(response_text) - predictions.append(predicted_label) - - return predictions - - def evaluate(self, dataset: list) -> dict: - """ - Generates predictions and computes the classification metrics. - - :param dataset: List of examples, each with "output" as the ground truth label. - :return: Dictionary with accuracy, precision, recall, and f1 (weighted). - """ - # Ground truth labels - references = [entry["output"] for entry in dataset] - # Predictions - predictions = self.generate_predictions(dataset) - - # Compute metrics - accuracy = accuracy_score(references, predictions) - precision, recall, f1, _ = precision_recall_fscore_support( - references, - predictions, - average="weighted", - labels=["Match", "Mismatch", "Neutral"], - ) - - return { - "accuracy": accuracy, - "precision": precision, - "recall": recall, - "f1": f1, - } - - -if __name__ == "__main__": - # Example usage: - - # 1. Load a dataset from JSONL or any other source. - # Each line should have keys: 'instruction', 'input', 'output' - # where 'output' is one of "Match", "Mismatch", "Neutral". - dataset_path = "cleaned_filtered_test_data.jsonl" - with open(dataset_path, "r", encoding="utf-8") as f: - dataset = [json.loads(line) for line in f] - - # 2. Initialize the evaluator - evaluator = LlamaMatchMismatchEvaluator( - model_id="ContactDoctor/Bio-Medical-Llama-3-8B", - torch_dtype=torch.bfloat16, # or torch.float16 - device_map="auto", - ) - - # 3. Run evaluation - results = evaluator.evaluate(dataset) - - # 4. Print results - print("Evaluation Metrics:") - for metric, value in results.items(): - print(f"{metric.capitalize()}: {value:.4f}") diff --git a/utils/finetuning/finetune_instruct/finetune.sh b/utils/finetuning/finetune_instruct/finetune.sh deleted file mode 100644 index 4415ce8f..00000000 --- a/utils/finetuning/finetune_instruct/finetune.sh +++ /dev/null @@ -1,25 +0,0 @@ -nohup torchrun --nproc_per_node 1 ./run.py \ - --output_dir ./finetuned_phi_reasoning \ - --model_name_or_path microsoft/phi-4 \ - --train_data ./finetuning_data/medical_o1_reasoning_train.jsonl\ - --learning_rate 5e-5 \ - --num_train_epochs 2 \ - --per_device_train_batch_size 3 \ - --gradient_accumulation_steps 16 \ - --dataloader_drop_last True \ - --query_max_len 1024 \ - --passage_max_len 1024 \ - --logging_steps 10 \ - --save_steps 1000 \ - --save_total_limit 5 \ - --ddp_find_unused_parameters False \ - --warmup_ratio 0.1 \ - --use_lora True \ - --lora_rank 32 \ - --lora_alpha 64 \ - --lora_dropout 0.1 \ - --use_flash_attn True \ - --max_example_num_per_dataset 26000 \ - --cache_dir scratch/huggingface_cache/hub \ - --target_modules q_proj k_proj v_proj o_proj gate_proj up_proj down_proj \ - --bf16 > ./finetune_log.log 2>&1 & disown \ No newline at end of file diff --git a/utils/finetuning/finetune_instruct/load_model.py b/utils/finetuning/finetune_instruct/load_model.py deleted file mode 100644 index c3aeb3d8..00000000 --- a/utils/finetuning/finetune_instruct/load_model.py +++ /dev/null @@ -1,64 +0,0 @@ -import torch -from peft import LoraConfig, PeftModel, TaskType, get_peft_model -from transformers import AutoModelForCausalLM, BitsAndBytesConfig - -# from local_gemma import LocalGemma2ForCausalLM - - -def get_model(model_args, training_args): - # model = LocalGemma2ForCausalLM.from_pretrained(model_args.model_name_or_path, - # preset="auto", - # attn_implementation='eager', - # cache_dir=model_args.cache_dir, - # torch_dtype=torch.float16 if training_args.fp16 else torch.bfloat16, - # token=model_args.token, - # from_tf=bool(".ckpt" in model_args.model_name_or_path), - # trust_remote_code=True, - # use_flash_attention_2=True if model_args.use_flash_attn else False) - quantization_config = BitsAndBytesConfig( - load_in_4bit=True, - bnb_4bit_use_double_quant=True, - bnb_4bit_quant_type="nf4", - bnb_4bit_compute_dtype="float16", - ) - - model = AutoModelForCausalLM.from_pretrained( - model_args.model_name_or_path, - torch_dtype=torch.float16 if training_args.fp16 else torch.bfloat16, - token=model_args.token, - cache_dir=model_args.cache_dir, - from_tf=bool(".ckpt" in model_args.model_name_or_path), - trust_remote_code=True, - attn_implementation="flash_attention_2", - quantization_config=quantization_config, - ) - - model = model.to("cuda") - - if torch.cuda.device_count() > 1: # If more than 1 GPU - model.is_parallelizable = True - model.model_parallel = True - - model.config.use_cache = False - - if model_args.from_peft is not None: - model = PeftModel.from_pretrained( - model, model_args.from_peft, is_trainable=True - ) - model.print_trainable_parameters() - else: - if model_args.use_lora: - peft_config = LoraConfig( - task_type=TaskType.CAUSAL_LM, - inference_mode=False, - r=model_args.lora_rank, - target_modules=model_args.target_modules, - lora_alpha=model_args.lora_alpha, - lora_dropout=model_args.lora_dropout, - modules_to_save=model_args.lora_extra_parameters, - ) - model = get_peft_model(model, peft_config) - model.print_trainable_parameters() - - print(model) - return model diff --git a/utils/finetuning/finetune_instruct/modeling.py b/utils/finetuning/finetune_instruct/modeling.py deleted file mode 100644 index d8bc5bcf..00000000 --- a/utils/finetuning/finetune_instruct/modeling.py +++ /dev/null @@ -1,83 +0,0 @@ -import logging -from dataclasses import dataclass -from typing import Optional - -import torch -from torch import Tensor, nn -from transformers import AutoTokenizer -from transformers.modeling_outputs import ModelOutput - -logger = logging.getLogger(__name__) - - -@dataclass -class LMOutput(ModelOutput): - loss: Optional[Tensor] = None - logits: Optional[Tensor] = None - - -class LanguageModelFinetuner(nn.Module): - def __init__( - self, - model: nn.Module, - tokenizer: AutoTokenizer = None, - train_batch_size: int = 4, - enable_gradient_checkpointing: bool = False, - ): - super().__init__() - self.model = model - self.tokenizer = tokenizer - self.train_batch_size = train_batch_size - - if self.model.config.pad_token_id is None and self.tokenizer is not None: - self.model.config.pad_token_id = self.tokenizer.pad_token_id - self.config = self.model.config - - if enable_gradient_checkpointing and hasattr( - self.model, "gradient_checkpointing_enable" - ): - self.model.gradient_checkpointing_enable() - - def gradient_checkpointing_enable(self, **kwargs): - if hasattr(self.model, "gradient_checkpointing_enable"): - self.model.gradient_checkpointing_enable(**kwargs) - - def enable_input_require_grads(self, **kwargs): - if hasattr(self.model, "enable_input_require_grads"): - self.model.enable_input_require_grads(**kwargs) - - def forward( - self, - input_ids: torch.Tensor = None, - attention_mask: torch.Tensor = None, - labels: torch.Tensor = None, - ) -> LMOutput: - device = next( - self.model.parameters() - ).device # Move inputs to the model's device - input_ids = input_ids.to(device) - attention_mask = attention_mask.to(device) - if labels is not None: - labels = labels.to(device) - - outputs = self.model( - input_ids=input_ids, attention_mask=attention_mask, labels=labels - ) - - return LMOutput( - loss=outputs.loss if hasattr(outputs, "loss") else None, - logits=outputs.logits if hasattr(outputs, "logits") else None, - ) - - def save(self, output_dir: str): - # Save the model (with weights) to output_dir - state_dict = self.model.state_dict() - state_dict = type(state_dict)( - {k: v.clone().cpu() for k, v in state_dict.items()} - ) - self.model.save_pretrained(output_dir, state_dict=state_dict) - - def save_pretrained(self, **kwargs): - if self.tokenizer is not None: - self.tokenizer.save_pretrained(**kwargs) - return self.model.save_pretrained(**kwargs) diff --git a/utils/finetuning/finetune_instruct/run.py b/utils/finetuning/finetune_instruct/run.py deleted file mode 100644 index 9aa3045a..00000000 --- a/utils/finetuning/finetune_instruct/run.py +++ /dev/null @@ -1,161 +0,0 @@ -import logging -import os -from pathlib import Path - -import torch -import torch.distributed as dist - -from transformers import AutoConfig, AutoTokenizer, HfArgumentParser, set_seed - -from arguments import ( - ModelArguments, - DataArguments, - SFTTrainingArguments as TrainingArguments, -) -from data import TrainDataset, DataCollatorForFinetuning -from modeling import LanguageModelFinetuner -from trainer import SFTTrainer -from load_model import get_model - - -logger = logging.getLogger(__name__) - -# Initialize the distributed environment if needed -dist.init_process_group(backend="nccl") - -# Get the rank of the current process -rank = dist.get_rank() - -# Map the rank to a specific GPU -device_id = rank # This assumes rank maps to GPU ID -torch.cuda.set_device(device_id) - -print( - f"Rank {rank} using device {device_id} on {torch.cuda.get_device_name(device_id)}" -) - - -def main(): - parser = HfArgumentParser((ModelArguments, DataArguments, TrainingArguments)) - model_args, data_args, training_args = parser.parse_args_into_dataclasses() - model_args: ModelArguments - data_args: DataArguments - training_args: TrainingArguments - - if ( - os.path.exists(training_args.output_dir) - and os.listdir(training_args.output_dir) - and training_args.do_train - and not training_args.overwrite_output_dir - ): - raise ValueError( - f"Output directory ({training_args.output_dir}) already exists and is not empty. " - f"Use --overwrite_output_dir to overcome." - ) - - # Setup logging - logging.basicConfig( - format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", - datefmt="%m/%d/%Y %H:%M:%S", - level=logging.INFO if training_args.local_rank in [-1, 0] else logging.WARN, - ) - logger.warning( - "Process rank: %s, device: %s, n_gpu: %s, distributed training: %s, 16-bits training: %s", - training_args.local_rank, - training_args.device, - training_args.n_gpu, - bool(training_args.local_rank != -1), - training_args.fp16, - ) - logger.info("Training/evaluation parameters %s", training_args) - logger.info("Model parameters %s", model_args) - logger.info("Data parameters %s", data_args) - - # Set seed - set_seed(training_args.seed) - - base_model = get_model(model_args, training_args) - - # Load tokenizer - tokenizer = AutoTokenizer.from_pretrained( - model_args.tokenizer_name - if model_args.tokenizer_name - else model_args.model_name_or_path, - cache_dir=model_args.cache_dir, - use_fast=not model_args.use_slow_tokenizer, - trust_remote_code=True, - token=model_args.token, - ) - - # Ensure pad_token_id is defined - if tokenizer.pad_token_id is None: - if tokenizer.unk_token_id is not None: - tokenizer.pad_token_id = tokenizer.unk_token_id - else: - # As a fallback if the tokenizer doesn't have unk_token_id, set pad_token_id to a known token - # If using a special tokenizer, make sure to adapt accordingly. - tokenizer.pad_token_id = tokenizer.eos_token_id - - config = AutoConfig.from_pretrained( - model_args.config_name - if model_args.config_name - else model_args.model_name_or_path, - cache_dir=model_args.cache_dir, - trust_remote_code=True, - ) - logger.info("Config: %s", config) - - model = LanguageModelFinetuner( - model=base_model, - tokenizer=tokenizer, - train_batch_size=training_args.per_device_train_batch_size, - ) - - if training_args.gradient_checkpointing: - model.enable_input_require_grads() - - # Load the training dataset - train_dataset = TrainDataset(args=data_args, tokenizer=tokenizer) - - # Setup data collator - data_collator = DataCollatorForFinetuning( - tokenizer=tokenizer, - query_max_len=data_args.query_max_len, - passage_max_len=data_args.passage_max_len, - pad_to_multiple_of=8, - return_tensors="pt", - padding=True, - ) - - trainer = SFTTrainer( - model=model, - args=training_args, - train_dataset=train_dataset, - data_collator=data_collator, - tokenizer=tokenizer, - ) - trainer.use_lora = model_args.use_lora - - Path(training_args.output_dir).mkdir(parents=True, exist_ok=True) - - # Training - trainer.train(resume_from_checkpoint=training_args.resume_from_checkpoint) - trainer.save_model() - - # If not using LoRA, you can save a final checkpoint if desired - if not model_args.use_lora and trainer.deepspeed is not None: - checkpoint_dir = os.path.join(training_args.output_dir, "checkpoint-final") - trainer.deepspeed.save_checkpoint(checkpoint_dir) - - # If world process zero, save tokenizer - if trainer.is_world_process_zero(): - tokenizer.save_pretrained(training_args.output_dir) - - -if __name__ == "__main__": - try: - main() - finally: - # Ensure all processes finalize - dist.barrier() # Synchronize all processes - dist.destroy_process_group() # Clean up diff --git a/utils/finetuning/finetune_instruct/split_train_test.py b/utils/finetuning/finetune_instruct/split_train_test.py deleted file mode 100644 index b2f0bfec..00000000 --- a/utils/finetuning/finetune_instruct/split_train_test.py +++ /dev/null @@ -1,27 +0,0 @@ -import json - -from sklearn.model_selection import train_test_split - -# File paths -input_file = "medical_o1_reasoning.jsonl" -train_file = "medical_o1_reasoning_train.jsonl" -test_file = "medical_o1_reasoning_test.jsonl" - -# Load data -with open(input_file, "r") as file: - data = [json.loads(line) for line in file] - -# Split data -train_data, test_data = train_test_split(data, test_size=0.1, random_state=42) - -# Save to JSONL -with open(train_file, "w") as file: - for item in train_data: - file.write(json.dumps(item) + "\n") - -with open(test_file, "w") as file: - for item in test_data: - file.write(json.dumps(item) + "\n") - -print(f"Train set size: {len(train_data)}") -print(f"Test set size: {len(test_data)}") diff --git a/utils/finetuning/finetune_instruct/trainer.py b/utils/finetuning/finetune_instruct/trainer.py deleted file mode 100644 index c7da4ea7..00000000 --- a/utils/finetuning/finetune_instruct/trainer.py +++ /dev/null @@ -1,70 +0,0 @@ -import logging -import os -from typing import Optional - -import torch -from peft import get_peft_model_state_dict -from transformers.integrations import is_deepspeed_zero3_enabled -from transformers.trainer import Trainer - -logger = logging.getLogger(__name__) - - -class SFTTrainer(Trainer): - use_lora: bool - - def _save(self, output_dir: Optional[str] = None, state_dict=None): - # Custom saving logic depending on whether we're using LoRA or not - if not self.use_lora: - # If not using LoRA, just use the default save implementation - super()._save(output_dir, state_dict) - return - - # Using LoRA - output_dir = output_dir if output_dir is not None else self.args.output_dir - os.makedirs(output_dir, exist_ok=True) - logger.info("Saving model checkpoint to %s", output_dir) - - # Ensure model has the `save` method implemented - if not hasattr(self.model, "save"): - raise NotImplementedError( - f"MODEL {self.model.__class__.__name__} does not support save interface" - ) - else: - self.model.save(output_dir) - - # Save training arguments - torch.save(self.args, os.path.join(output_dir, "training_args.bin")) - - # If using DeepSpeed ZeRO-3, save LoRA adapters separately - if is_deepspeed_zero3_enabled(): - if state_dict is None: - state_dict = self.model.state_dict() - prefix = "model." - assert all(k.startswith(prefix) for k in state_dict.keys()), list( - state_dict.keys() - ) - state_dict = {k[len(prefix) :]: v for k, v in state_dict.items()} - lora_state_dict = get_peft_model_state_dict(self.model.model, state_dict) - if self.args.process_index <= 0: - torch.save( - lora_state_dict, os.path.join(output_dir, "adapter_model.bin") - ) - logger.info(f"Saved LoRA adapter model at {output_dir}") - - def compute_loss( - self, model, inputs, return_outputs=False, num_items_in_batch=None - ): - """ - How the loss is computed by Trainer. - For causal language modeling tasks, the model returns the loss directly if labels are provided. - """ - outputs = model(**inputs) - loss = outputs.loss - - # Optionally use num_items_in_batch if needed for custom logic - if num_items_in_batch is not None: - # Example: Adjust loss based on batch size if required - pass - - return (loss, outputs) if return_outputs else loss diff --git a/utils/gpt/gpt-generate-summaries.py b/utils/gpt/gpt-generate-summaries.py deleted file mode 100644 index dbf5c3ac..00000000 --- a/utils/gpt/gpt-generate-summaries.py +++ /dev/null @@ -1,218 +0,0 @@ -import json -import os -from typing import List, Dict, Optional -from langchain_community.chat_models import ChatOpenAI -from langchain.schema import HumanMessage -from pydantic import BaseModel, Field -import re - -# Set OpenAI API key -os.environ["OPENAI_API_KEY"] = "" - - -# Define the schema for structured output -class PatientStory(BaseModel): - condition: Optional[str] = Field( - default=None, description="The main condition of the patient." - ) - synonyms: Optional[List[str]] = Field( - default=None, description="Synonyms or related terms for the main condition." - ) - age: Optional[str] = Field(default=None, description="The age of the patient.") - gender: Optional[str] = Field( - default=None, description="The gender of the patient." - ) - meaningful_sentences: List[str] = Field( - description="A list of factual, meaningful sentences describing the patient's conditions and entities." - ) - - -# Initialize OpenAI LLM -llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.5, top_p=0.9) - - -# Function to extract age and gender from the raw description -def extract_age_and_gender(description: str) -> Dict[str, Optional[str]]: - """ - Extracts age and gender information from the patient description. - """ - age = None - gender = None - - # Regex patterns for extracting age and gender - age_pattern = r"(\b\d{1,3}\b)-?(year-old|yr-old|years old)" - gender_pattern = r"\b(male|female|man|woman|boy|girl|gentleman|lady)\b" - - age_match = re.search(age_pattern, description, re.IGNORECASE) - gender_match = re.search(gender_pattern, description, re.IGNORECASE) - - if age_match: - age = age_match.group(1) - if gender_match: - gender = gender_match.group(0).lower() - - # Normalize gender - if gender in {"man", "male", "boy", "gentleman"}: - gender = "male" - elif gender in {"woman", "female", "girl", "lady"}: - gender = "female" - - return {"age": age, "gender": gender} - - -# Function to create meaningful sentences for entities -def generate_sentences(description: str, entities: List[str]) -> List[str]: - """ - Generates meaningful sentences for each entity in the description. - """ - prompt = f""" - You are a highly skilled medical assistant tasked with rewriting patient descriptions into factual, descriptive narratives. Each entity provided must be described in its own meaningful sentence. The sentences should strictly describe the patient and avoid making inferences, assumptions, or suggestions. - - Patient Description: - {description} - - Entities: - {json.dumps(entities)} - - Guidelines for writing the sentences: - - Each sentence must describe one entity factually, based on the information provided in the description or the entities list. - - Avoid making inferences, or suggesting potential outcomes, or suggesting improvements (e.g., no phrases like 'critical for improving' or 'should focus on'). - - Maintain a formal, clinical tone suitable for medical documentation. - - Ensure statements look as they are written by a medical professional in an official medical record. - - Ensure that the narrative remains coherent and logical when all sentences are read together. As if they are part of a single patient summary. - - Ensure to adhere to the description when describing the patient without adding any new information not found in the description. - - Provide the output as a JSON object with the key 'meaningful_sentences' containing the list of sentences. - """ - response = llm.invoke( - [HumanMessage(content=prompt)] - ) # Use invoke for LangChain models - try: - # Clean Markdown formatting if present - structured_output = ( - response.content.strip().strip("```json").strip("```").strip() - ) - return PatientStory.parse_raw(structured_output).meaningful_sentences - except Exception as e: - print(f"Error parsing response: {e}") - return [f"Error generating sentences for description: {description}"] - - -# Function to prompt the model to extract the patient's age and gender -def prompt_extract_age_and_gender(description: str) -> Dict[str, Optional[str]]: - """ - Uses the model to extract age and gender information from the patient description. - """ - prompt = f""" - You are a highly skilled medical assistant tasked with identifying specific information from patient descriptions. - - Patient Description: - {description} - - Extract the following information: - - Age of the patient: Explicitly mention the age if it is present in the description. - - Gender of the patient: Extract gender if it is stated in the description. - - Normalize the Age to an integer number and Gender to either Male or Female - - If not mentioned at all in the description, provide 'None' for both age and gender. - - Provide the output as a JSON object with the keys 'age' and 'gender'. - """ - response = llm.invoke([HumanMessage(content=prompt)]) - try: - # Parse the JSON response from the model - structured_output = ( - response.content.strip().strip("```json").strip("```").strip() - ) - extracted_info = json.loads(structured_output) - return { - "age": extracted_info.get("age"), - "gender": extracted_info.get("gender"), - } - except Exception as e: - print(f"Error extracting age and gender: {e}") - return {"age": None, "gender": None} - - -def prompt_extract_main_condition(description: str) -> Dict[str, Optional[str]]: - """ - Uses the model to extract the main condition from the patient description. - """ - prompt = f""" - You are a highly skilled medical assistant tasked with identifying the main condition/disease from patient descriptions. - - Patient Description: - {description} - - Extract the main condition mentioned in the description. - - The main condition should be a specific medical condition or disease that the patient suffers from. - - If multiple conditions are mentioned, extract the most prominent or relevant one that describes the patient. - - Ensure the extracted condition is factual and directly related to the patient's health. - - If no condition is mentioned, provide 'None' as the output. - - Provide a list of 10 well known aliases or synonyms or related terms if the condition can be described in multiple ways. - - Provide the output as a JSON object with the keys 'condition' and 'synonyms'. - """ - response = llm.invoke([HumanMessage(content=prompt)]) - try: - # Parse the JSON response from the model - structured_output = ( - response.content.strip().strip("```json").strip("```").strip() - ) - extracted_info = json.loads(structured_output) - return { - "condition": extracted_info.get("condition"), - "synonyms": extracted_info.get("synonyms"), - } - except Exception as e: - print(f"Error extracting main condition: {e}") - return {"condition": None, "synonyms": None} - - -# Update the process_file function to use the new age and gender prompt -def process_file_with_prompt(input_file: str, output_file: str): - """ - Reads patient data from the input file, prompts the model to extract age and gender, - generates expanded sentences for each patient's entities, and writes the output to the output file. - """ - with open(input_file, "r") as file: - data = json.load(file) - - results = {} - for patient_id, patient_data in data.items(): - print(f"Processing patient {patient_id}...") - raw_description = patient_data.get("raw", "") - conditions = patient_data.get("gpt-4-turbo", {}).get("conditions", []) - - # Prompt the model to extract age and gender - age_gender_info = prompt_extract_age_and_gender(raw_description) - - # Generate meaningful sentences - expanded_sentences = generate_sentences(raw_description, conditions) - - # Get the main condition - main_condition_info = prompt_extract_main_condition(raw_description) - - # Save the processed result - results[patient_id] = { - "raw_description": raw_description, - "age": age_gender_info.get("age"), - "gender": age_gender_info.get("gender"), - "main_condition": main_condition_info.get("condition"), - "synonyms": main_condition_info.get("synonyms"), - "conditions": conditions, - "expanded_sentences": expanded_sentences, - } - - # Write the results to the output file - with open(output_file, "w") as file: - json.dump(results, file, indent=2) - print(f"Processing complete. Results saved to {output_file}") - - -# Main script -if __name__ == "__main__": - input_file = ( - "../../data/id2queries21.json" # Replace with the path to your input JSON file - ) - output_file = "processed_patients21.json" # Path to save the processed output - process_file_with_prompt(input_file, output_file) diff --git a/utils/gpt/gpt_generate_ideal_candidates.py b/utils/gpt/gpt_generate_ideal_candidates.py deleted file mode 100644 index 2e31f511..00000000 --- a/utils/gpt/gpt_generate_ideal_candidates.py +++ /dev/null @@ -1,407 +0,0 @@ -import os -import json -import random -import re -import ast -from typing import List, Dict, Tuple -from dateutil.parser import parse -from langchain_openai import ChatOpenAI -from langchain.schema import HumanMessage - -# Set your API key securely in production. -os.environ["OPENAI_API_KEY"] = "" - -# Initialize the LLM -llm = ChatOpenAI(model="gpt-4o-mini", max_retries=3) - -# Minimum word count for eligibility criteria to be considered "rich" -MIN_ELIGIBILITY_WORD_COUNT = 512 - - -def safe_parse_list(response_str: str) -> List: - """ - Attempts to parse a Python list from a string. - Extracts the content between the first "[" and the last "]". - First tries ast.literal_eval; if that fails, replaces single quotes with double quotes and tries json.loads. - Returns an empty list if parsing is unsuccessful. - """ - start = response_str.find("[") - end = response_str.rfind("]") - if start == -1 or end == -1: - print("No list brackets found in the response.") - return [] - list_str = response_str[start : end + 1] - - try: - result = ast.literal_eval(list_str) - if isinstance(result, list): - return result - except Exception as e: - print(f"literal_eval failed on extracted string: {e}") - - try: - json_str = list_str.replace("'", '"') - result = json.loads(json_str) - if isinstance(result, list): - return result - except Exception as e: - print(f"json.loads fallback failed: {e}") - - return [] - - -def safe_parse_dict(response_str: str) -> Dict: - """ - Attempts to parse a Python dict from a string. - Extracts the substring between the first "{" and the last "}". - First tries ast.literal_eval; if that fails, replaces single quotes with double quotes and tries json.loads. - Returns an empty dict if unsuccessful. - """ - start = response_str.find("{") - end = response_str.rfind("}") - if start == -1 or end == -1: - print("No dictionary found in the response.") - return {} - dict_str = response_str[start : end + 1] - - try: - result = ast.literal_eval(dict_str) - if isinstance(result, dict): - return result - except Exception as e: - print(f"literal_eval failed on extracted string: {e}") - - try: - json_str = dict_str.replace("'", '"') - result = json.loads(json_str) - if isinstance(result, dict): - return result - except Exception as e: - print(f"json.loads fallback failed: {e}") - - return {} - - -def generate_synonyms(condition: str) -> List[str]: - """ - Generates 10 well-known synonyms or alternative names for the given condition. - The model is instructed to provide the output as a Python list. - """ - prompt = f""" - You are a medical expert. Generate 10 well-known synonyms or alternative names for the following condition: - Condition: {condition} - Provide the output as a Python list of strings. - """ - response = llm.invoke([HumanMessage(content=prompt)]) - print("Synonyms response:", response.content) - synonyms = safe_parse_list(response.content) - if isinstance(synonyms, list): - synonyms = [str(s) for s in synonyms if isinstance(s, (str, int, float))] - else: - synonyms = [] - print(f"Error parsing synonyms for condition '{condition}'.") - return synonyms - - -def generate_summary( - details: List[str], conditions: List[str] = None, age_spec: str = None -) -> str: - """ - Generates a one-paragraph patient note based on the provided details and conditions. - The note should naturally incorporate the necessary patient information without explicitly referencing - eligibility criteria, trial requirements, or any commentary on meeting specific conditions. - If an age_spec is provided, include this information in the note. The note must end with a separate - line exactly in the format: - "Age: , Gender: " - """ - combined_details = " ".join(details) - - condition_info = "" - if conditions: - condition_info = "diagnosed with one of : " + ", ".join(conditions) + "." - - age_sentence = f" The patient should be {age_spec}." if age_spec else "" - - prompt = f""" -You are a seasoned medical expert. Based on the clinical trial information provided below, generate a detailed, professional one-paragraph patient note describing an ideal candidate {condition_info} for the trial. Ensure that the candidate's medical history and current condition strictly satisfy every single inclusion criterion without exception while clearly and explicitly not violating any exclusion criteria. - -Age and gender requirements for the trial: {age_sentence} - -Eligibility Details: {combined_details} - -Please integrate the above information naturally into the note as if describing the patient's history and presentation, without any explicit reference to suitability of the patient with the provided eligibility criteria, trial requirements, or statements like "meets the criterion" or "satisfies the requirements of the trial" etc... Your note should simply convey the patient's condition and background in a realistic manner similar to an EHR or admission note. -Go over the criteria one-by-one. They should all be covered in the patient's note without exception. - -At the end of the note, include a new line exactly in the following format: -"Age: , Gender: " -""" - response = llm.invoke([HumanMessage(content=prompt)]) - print("Summary response:", response.content) - return response.content.strip() - - -def extract_age_gender_from_summary(summary: str) -> Tuple[int, str]: - """ - Extracts the age and gender from the summary using a regular expression. - Expects the summary to end with a line in the format: - "Age: , Gender: " - """ - pattern = r"Age:\s*(\d+)\s*,\s*Gender:\s*([A-Za-z]+)" - match = re.search(pattern, summary) - if match: - age = int(match.group(1)) - gender = match.group(2).lower() - if gender not in ["male", "female"]: - gender = "male" - return age, gender - else: - print("Could not extract age and gender from summary. Using default values.") - return 50, "male" - - -def split_into_sentences(text: str) -> List[str]: - """ - Splits the provided text into sentences using punctuation as delimiters. - """ - sentences = re.split(r"(?<=[.!?]) +", text) - return [s.strip() for s in sentences if s.strip()] - - -def generate_conditions(raw_description: str) -> List[str]: - """ - Extracts all relevant medical conditions solely based on the patient’s raw description. - The model is instructed to provide the output as a Python list of strings. - """ - prompt = f""" - You are a medical expert. Based solely on the following patient note, extract all relevant medical conditions mentioned. - Provide the output as a Python list of strings. - Patient Note: {raw_description} - """ - response = llm.invoke([HumanMessage(content=prompt)]) - print("Conditions response:", response.content) - conditions = safe_parse_list(response.content) - if isinstance(conditions, list): - conditions = [str(c) for c in conditions if isinstance(c, (str, int, float))] - else: - conditions = [] - print("Error parsing conditions.") - return conditions - - -def extract_main_condition_from_summary(summary: str) -> str: - """ - Extracts the primary condition for which the patient is being treated from the patient note. - The model is instructed to return a concise, single phrase. - """ - prompt = f""" - You are a medical expert. Based solely on the following patient note, identify the primary condition for which the patient is being treated. Provide only a concise, single phrase. - Patient Note: {summary} - """ - response = llm.invoke([HumanMessage(content=prompt)]) - main_condition = response.content.strip() - print("Extracted main condition:", main_condition) - return main_condition - - -def extract_age_gender_from_trial(trial_data: Dict) -> str: - """ - Extracts the age and gender requirements from the trial's JSON data using the fields: - "minumum_age", "maximum_age", and "gender". - Constructs and returns an age specification string. - """ - try: - min_age_raw = trial_data.get("minumum_age") - max_age_raw = trial_data.get("maximum_age") - trial_gender = trial_data.get("gender", "male") - if min_age_raw is not None and max_age_raw is not None: - if isinstance(min_age_raw, str): - min_age = int("".join(filter(str.isdigit, min_age_raw))) - else: - min_age = int(min_age_raw) - if isinstance(max_age_raw, str): - max_age = int("".join(filter(str.isdigit, max_age_raw))) - else: - max_age = int(max_age_raw) - age_spec = f"aged between {min_age} and {max_age} years old; gender must be {trial_gender}" - else: - age_spec = f"gender must be {trial_gender}" - except Exception as e: - print(f"Error constructing age specification: {e}") - age_spec = f"gender must be {trial_gender}" - return age_spec - - -def generate_patient_profile( - eligibility_criteria: str, ground_nctid: str, trial_data: Dict -) -> Dict: - """ - Generates a patient profile for a trial. - - Steps: - 1. Construct an age specification string from the trial's JSON. - 2. Extract condition(s) from the trial data. - 3. Generate a comprehensive raw patient note (summary) based on the trial's eligibility criteria and conditions. - The note will be generated using the eligibility criteria, conditions, and will include a final line with age and gender. - 4. Extract the age and gender from the generated note. - 5. Extract the main condition from the note. - 6. Generate synonyms for the extracted main condition. - 7. Extract additional conditions solely from the raw note. - - Returns a JSON object with the following keys: - - raw_description (the patient note) - - age - - gender - - main_condition - - synonyms - - conditions - - split_raw_description (the note split into sentences) - - ground_nctid - """ - # 1. Build an age specification string from trial_data. - age_spec = extract_age_gender_from_trial(trial_data) - - # 2. Extract condition(s) from the trial data. - condition_field = trial_data.get("condition", "") - if isinstance(condition_field, list): - conditions_input = condition_field # use the list directly - elif isinstance(condition_field, str) and condition_field.strip(): - conditions_input = [condition_field] - else: - conditions_input = [] - - # 3. Generate the raw patient note using eligibility criteria, conditions, and age specifications. - raw_description = generate_summary( - [eligibility_criteria], conditions=conditions_input, age_spec=age_spec - ) - - # 4. Extract age and gender from the generated note. - age, gender = extract_age_gender_from_summary(raw_description) - - # 5. Extract the main condition from the raw description. - main_condition = extract_main_condition_from_summary(raw_description) - - # 6. Generate synonyms for the main condition. - synonyms = generate_synonyms(main_condition) - - # 7. Extract additional conditions solely from the raw note. - conditions_from_note = generate_conditions(raw_description) - if main_condition not in conditions_from_note: - conditions = [main_condition] + conditions_from_note - else: - conditions = conditions_from_note - - return { - "raw_description": raw_description, - "age": age, - "gender": gender, - "main_condition": main_condition, - "synonyms": synonyms, - "conditions": conditions, - "split_raw_description": split_into_sentences(raw_description), - "ground_nctid": ground_nctid, - } - - -def process_trials(input_folder: str, output_file: str): - """ - Processes trial JSON files in the given folder: - 1. Searches for files with names starting with "NCT" and ending with ".json". - 2. For each file, checks that the trial's "start_date" is after 2015, that the "condition" - (when lowercased) contains cancer-related terms (e.g., "cancer", "tumor", "malignancy", "neoplasm", "carcinoma"), - that the eligibility criteria are sufficiently long and rich, and that the trial's overall_status is "Recruiting". - 3. Randomly samples 100 trials that meet these conditions. - 4. For each trial, uses its "eligibility_criteria" to generate a patient profile that perfectly fits the trial. - The profile is built by generating a raw patient note (aware of age/gender specs and conditions) and then extracting the main condition, - synonyms, and additional conditions from that note. - 5. Saves the 100 patient profiles to a single JSON file. - """ - all_files = [ - f - for f in os.listdir(input_folder) - if f.startswith("NCT") and f.endswith(".json") - ] - matching_trials = [] - cancer_terms = ["cancer", "tumor", "malignancy", "neoplasm", "carcinoma"] - - for filename in all_files: - file_path = os.path.join(input_folder, filename) - try: - with open(file_path, "r") as f: - trial_data = json.load(f) - except Exception as e: - print(f"Failed to load {filename}: {e}") - continue - - # Check if the start_date is after 2015. - start_date_str = trial_data.get("start_date") - if not start_date_str or not isinstance(start_date_str, str): - print( - f"Skipping trial {filename} because start_date is missing or not a valid string." - ) - continue - - try: - parsed_date = parse(start_date_str) - year = parsed_date.year - except Exception as e: - print(f"Error parsing start_date in {filename}: {e}") - year = 0 - - # Check if the eligibility criteria exist and are long and rich. - eligibility_criteria = trial_data.get("eligibility_criteria", "") - if ( - not eligibility_criteria - or len(eligibility_criteria.split()) < MIN_ELIGIBILITY_WORD_COUNT - ): - print( - f"Skipping trial {filename} due to insufficient eligibility criteria (less than {MIN_ELIGIBILITY_WORD_COUNT} words)." - ) - continue - - # Handle the condition field, which can be a list or a string. - condition_field = trial_data.get("condition", "") - if isinstance(condition_field, list): - condition_str = " ".join(condition_field) - else: - condition_str = condition_field - condition_lower = condition_str.lower() - - # Additional condition: trial must have overall_status "Recruiting" - overall_status = trial_data.get("overall_status", "").strip().lower() - - if ( - year > 2015 - and any(term in condition_lower for term in cancer_terms) - and overall_status == "recruiting" - ): - matching_trials.append((filename, trial_data)) - - if len(matching_trials) < 100: - print( - f"Warning: Only {len(matching_trials)} matching trials found. Proceeding with available trials." - ) - sample_trials = matching_trials - else: - sample_trials = random.sample(matching_trials, 100) - - results = {} - for filename, trial_data in sample_trials: - ground_nctid = filename.replace(".json", "") - eligibility_criteria = trial_data.get("eligibility_criteria", "") - print(f"Processing trial {ground_nctid}...") - patient_profile = generate_patient_profile( - eligibility_criteria, ground_nctid, trial_data - ) - results[ground_nctid] = patient_profile - - with open(output_file, "w") as out_file: - json.dump(results, out_file, indent=2) - - print(f"Processing complete. Results saved to {output_file}") - - -# Set your input folder and output file paths accordingly. -input_folder = "../../data/trials_jsons" # Folder containing NCT*.json files -output_file = "perfect_patient_profiles.json" - -process_trials(input_folder, output_file) diff --git a/utils/gpt/gpt_generate_reranking_data.py b/utils/gpt/gpt_generate_reranking_data.py deleted file mode 100644 index af07882a..00000000 --- a/utils/gpt/gpt_generate_reranking_data.py +++ /dev/null @@ -1,166 +0,0 @@ -import json -import os -import random -from typing import Dict, List, Optional - -from langchain.schema import HumanMessage -from langchain_community.chat_models import ChatOpenAI -from pydantic import BaseModel - -os.environ["OPENAI_API_KEY"] = "" - -INPUT_MEDNLI_FILE = "mednli_train.jsonl" -OUTPUT_AUGMENTED_FILE = "mednli_yesno_aug.jsonl" - -N_VARIANTS_PER_SEED = 3 -MAX_SEED_EXAMPLES = 500 - -MODEL_NAME = "gpt-4o-mini" -TEMPERATURE = 0.7 - -INSTRUCTION_TEXT = ( - "You are a clinical assistant tasked with determining whether the patient " - "information (Statement A) provides enough details to evaluate whether the " - "patient satisfies or violates the clinical trial eligibility criterion " - "(Statement B). Respond with 'Yes' if Statement A contains sufficient " - "information to make this evaluation, or 'No' if it does not." -) - - -class MedNLISeed(BaseModel): - sentence1: str - sentence2: str - gold_label: str - - -class YesNoExample(BaseModel): - instruction: str - sentence1: str - sentence2: str - gold_label: str - - -llm = ChatOpenAI( - model=MODEL_NAME, - temperature=TEMPERATURE, - top_p=0.9, -) - - -def load_mednli_jsonl(path: str) -> List[MedNLISeed]: - examples: List[MedNLISeed] = [] - with open(path, "r") as f: - for line in f: - raw = json.loads(line.strip()) - examples.append( - MedNLISeed( - sentence1=raw["sentence1"], - sentence2=raw["sentence2"], - gold_label=raw["gold_label"], - ) - ) - return examples - - -def write_jsonl(path: str, data: List[Dict]): - with open(path, "a", encoding="utf-8") as f: - for obj in data: - f.write(json.dumps(obj, ensure_ascii=False) + "\n") - - -def generate_yesno_variants( - seed_example: MedNLISeed, n_variants: int -) -> List[YesNoExample]: - prompt = f""" -You are generating training data for a clinical trial matching system. - -We want examples following this pattern: - -- Statement A: patient information. -- Statement B: clinical trial eligibility criterion. -- A fixed instruction string. -- A label "Yes" or "No". - -Semantics: -- "Yes": Statement A contains enough information to determine if the patient satisfies or violates Statement B. -- "No": Statement A does not contain enough information. - -MedNLI mapping: -- entailment/contradiction → Yes -- neutral → No - -Seed example: -{{ - "sentence1": {json.dumps(seed_example.sentence1)}, - "sentence2": {json.dumps(seed_example.sentence2)}, - "gold_label": {json.dumps(seed_example.gold_label)} -}} - -Generate {n_variants} new examples. Each example must have: -- "instruction": {json.dumps(INSTRUCTION_TEXT)} -- "sentence1": Statement A -- "sentence2": Statement B -- "gold_label": "Yes" or "No" - -Return only valid JSON: a list of objects with exactly these keys. -""".strip() - - response = llm.invoke([HumanMessage(content=prompt)]) - raw = response.content.strip() - if raw.startswith("```"): - raw = raw.strip("`").replace("json", "", 1).strip() - - try: - parsed = json.loads(raw) - out = [] - for item in parsed: - try: - ex = YesNoExample(**item) - if ex.gold_label in {"Yes", "No"}: - ex.instruction = INSTRUCTION_TEXT - out.append(ex) - except Exception: - pass - return out - except Exception: - return [] - - -def augment_mednli_yesno( - input_path: str, - output_path: str, - n_variants_per_seed: int = 3, - max_seed_examples: Optional[int] = None, -): - all_seeds = load_mednli_jsonl(input_path) - - if max_seed_examples is not None and max_seed_examples < len(all_seeds): - seed_examples = random.sample(all_seeds, max_seed_examples) - else: - seed_examples = all_seeds - - open(output_path, "w").close() - - for seed in seed_examples: - generated = generate_yesno_variants(seed, n_variants_per_seed) - if not generated: - continue - to_write = [ - { - "instruction": ex.instruction, - "sentence1": ex.sentence1, - "sentence2": ex.sentence2, - "gold_label": ex.gold_label, - } - for ex in generated - ] - write_jsonl(output_path, to_write) - - -if __name__ == "__main__": - augment_mednli_yesno( - input_path=INPUT_MEDNLI_FILE, - output_path=OUTPUT_AUGMENTED_FILE, - n_variants_per_seed=N_VARIANTS_PER_SEED, - max_seed_examples=MAX_SEED_EXAMPLES, - ) diff --git a/uv.lock b/uv.lock index 21c6ebdf..5438dfb7 100644 --- a/uv.lock +++ b/uv.lock @@ -1,15 +1,13 @@ version = 1 revision = 3 -requires-python = ">=3.10, <3.12" +requires-python = "==3.11.*" resolution-markers = [ - "python_full_version >= '3.11' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version >= '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version < '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", + "sys_platform == 'darwin'", + "platform_machine == 'x86_64' and sys_platform == 'linux'", +] +supported-markers = [ + "sys_platform == 'darwin'", + "platform_machine == 'x86_64' and sys_platform == 'linux'", ] [[package]] @@ -17,13 +15,14 @@ name = "accelerate" version = "1.8.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "huggingface-hub" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "psutil" }, - { name = "pyyaml" }, - { name = "safetensors" }, - { name = "torch" }, + { name = "huggingface-hub", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "psutil", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "safetensors", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/bd/c2/b9e33ad13232606dded4c546e654fb06a15f1dbcbd95d81c9f9dd3ccc771/accelerate-1.8.1.tar.gz", hash = "sha256:f60df931671bc4e75077b852990469d4991ce8bd3a58e72375c3c95132034db9", size = 380872, upload-time = "2025-06-20T15:36:14.618Z" } wheels = [ @@ -44,54 +43,22 @@ name = "aiohttp" version = "3.14.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiohappyeyeballs" }, - { name = "aiosignal" }, - { name = "async-timeout", marker = "python_full_version < '3.11'" }, - { name = "attrs" }, - { name = "frozenlist" }, - { name = "multidict" }, - { name = "propcache" }, - { name = "typing-extensions" }, - { name = "yarl" }, + { name = "aiohappyeyeballs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "aiosignal", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "attrs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "frozenlist", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "multidict", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "propcache", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "yarl", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/82/78/8ea7308cac6934de8c74a14f3d5f65d1c89287426688be79538d0e5c013d/aiohttp-3.14.1.tar.gz", hash = "sha256:307f2cff90a764d329e77040603fa032db89c5c24fdad50c4c15334cba744035", size = 7955794, upload-time = "2026-06-07T21:09:35.529Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/67/58ded4b3f2e10f94972d8928050c85330e249a31dd45a0e5f3c0e9c3fa05/aiohttp-3.14.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8f6bb621e5863cfe8fe5ff5468002d200ec31f30f1280b259dc505b02595099e", size = 766140, upload-time = "2026-06-07T21:05:37.471Z" }, - { url = "https://files.pythonhosted.org/packages/18/68/4ae5b4e08943f316594bb68da89957d3baf5760588fa09509594bd777e4b/aiohttp-3.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4f7215cb3933784f79ed20e5f050e15984f390424339b22375d5a53c933a0491", size = 519430, upload-time = "2026-06-07T21:05:40.751Z" }, - { url = "https://files.pythonhosted.org/packages/cb/c1/316c8f3549dbe5245f92bfd523ec6f32dd4d98cafe21df3f6a19b1184c75/aiohttp-3.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d9d4e294455b23a68c9b8f042d0e8e377a265bcb15332753695f6e5b6819e0ce", size = 514406, upload-time = "2026-06-07T21:05:42.111Z" }, - { url = "https://files.pythonhosted.org/packages/5a/ee/fb0ac28684e8d753b83c8a4eebc19a5846912aa0a4daaabb6a9936363840/aiohttp-3.14.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b238af795833d5731d049d82bc84b768ae6f8f97f0495963b3ed9935c5901cc3", size = 1703649, upload-time = "2026-06-07T21:05:43.427Z" }, - { url = "https://files.pythonhosted.org/packages/3b/57/aa2beab673331f111885db8a7b69dfe3ab0e53e446a0ace18ca694b4dc58/aiohttp-3.14.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e4e5e0ae56914ecdbf446493addefc0159053dd53962cef37d7839f37f73d505", size = 1675126, upload-time = "2026-06-07T21:05:44.897Z" }, - { url = "https://files.pythonhosted.org/packages/47/ea/dad128abe365e79be03b16ed464198ac73e0d257e8260c6f7d6f31cbef26/aiohttp-3.14.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:092e4ce3619a7c6dee52a6bdabda973d9b34b66781f840ce93c7e0cec30cf521", size = 1771558, upload-time = "2026-06-07T21:05:46.405Z" }, - { url = "https://files.pythonhosted.org/packages/63/f3/b5b4e10327cb85d34d24232c6b71b64602f190b3ccb238a043ac6b187dac/aiohttp-3.14.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bb33777ea21e8b7ecde0e6fc84f598be0a1192eab1a63bc746d75aa75d38e7bd", size = 1856631, upload-time = "2026-06-07T21:05:47.844Z" }, - { url = "https://files.pythonhosted.org/packages/2b/9d/93294c3045775c708ac8310eb3d3622a11d2951345ad590d532d62a1faa4/aiohttp-3.14.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23119f8fd4f5d16902ed459b63b100bcd269628075162bddac56cc7b5273b3fb", size = 1714139, upload-time = "2026-06-07T21:05:49.982Z" }, - { url = "https://files.pythonhosted.org/packages/29/c4/93067c85a0373492ce8e577435203c5947c454af074ac48ed4f3a1b9dd4a/aiohttp-3.14.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:57fc6745a4b7d0f5a9eb4f40a69718be6c0bc1b8368cc9fe89e90118719f4f42", size = 1588321, upload-time = "2026-06-07T21:05:51.431Z" }, - { url = "https://files.pythonhosted.org/packages/c4/39/9ff91aaf02af8b7b8222a987466da539f154c3e01732c22b5f5a20a8ee66/aiohttp-3.14.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6fd35beba67c4183b09375c5fff9accb47524191a244a99f95fd4472f5402c2b", size = 1670375, upload-time = "2026-06-07T21:05:53.109Z" }, - { url = "https://files.pythonhosted.org/packages/aa/e4/77452a3676b8d99ac1375f77691d6bf65ea6e9f4b201b82ef77c916dc767/aiohttp-3.14.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:672b9d65f42eb877f5c3f234a4547e4e1a226ca8c2eed879bb34670a0ce51192", size = 1690933, upload-time = "2026-06-07T21:05:54.902Z" }, - { url = "https://files.pythonhosted.org/packages/7d/84/b0059a7c7fc05ea23f3bc1596ba91c12f79588b9450564a24cac37536d0a/aiohttp-3.14.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:24ba13339fed9251d9b1a1bec8c7ab84c0d1675d79d33501e11f94f8b9a84e05", size = 1740798, upload-time = "2026-06-07T21:05:56.458Z" }, - { url = "https://files.pythonhosted.org/packages/8f/3a/e2a513ecbfc362591caa51a7f7e011b3bfc8938b388ae44cd95560d36999/aiohttp-3.14.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:94da27378da0610e341c4d30de29a191672683cc82b8f9556e8f7c7212a020fe", size = 1576412, upload-time = "2026-06-07T21:05:57.953Z" }, - { url = "https://files.pythonhosted.org/packages/a1/10/08f1654f538f93d36dcac66310a06eefce4641cdafca83f9f0a5317be254/aiohttp-3.14.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:52cdac9432d8b4a719f35094a818d95adcae0f0b4fe9b9b921909e0c87de9e7d", size = 1750199, upload-time = "2026-06-07T21:05:59.488Z" }, - { url = "https://files.pythonhosted.org/packages/99/e4/d91b70c57d8b8e9611e4a2e52238ca3698d3dc1c2efe25b7a9bf594ac584/aiohttp-3.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:672ac254412a24d0d0cf00a9e6c238877e4be5e5fa2d188832c1244f45f31966", size = 1699356, upload-time = "2026-06-07T21:06:01.131Z" }, - { url = "https://files.pythonhosted.org/packages/3d/f1/15340176f35ff61b95dbe34020bcf43f9e624a2d7bbac934715ff97d2033/aiohttp-3.14.1-cp310-cp310-win32.whl", hash = "sha256:2fe3607e71acc6ebb0ec8e492a247bf7a291226192dc0084236dfc12478916f6", size = 458939, upload-time = "2026-06-07T21:06:02.86Z" }, - { url = "https://files.pythonhosted.org/packages/c3/c2/a2f1ec5b37f903109e43ae2862268cfe4a67a60c1b2cf43169fcdff5995f/aiohttp-3.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:30099eda75a53c32efb0920e9c33c195314d2cc1c680fbfd30894932ac5f27df", size = 482583, upload-time = "2026-06-07T21:06:04.666Z" }, - { url = "https://files.pythonhosted.org/packages/d0/7a/7b56f6732ef79530afaa72aa335d41b67c8d79b946995f0b11ad72985435/aiohttp-3.14.1-cp310-cp310-win_arm64.whl", hash = "sha256:5a837f49d901f9e368651b676912bff1104ed8c1a83b280bcd7b29adccef5c9c", size = 453470, upload-time = "2026-06-07T21:06:06.322Z" }, { url = "https://files.pythonhosted.org/packages/26/dd/bf526e6f0a1120dd6f2df2e97bacfe4d358f13d17a0ff5847301a1375a51/aiohttp-3.14.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:aa00140699487bd435fde4342d85c94cb256b7cd3a5b9c3396c67f19922afda2", size = 765225, upload-time = "2026-06-07T21:06:07.957Z" }, { url = "https://files.pythonhosted.org/packages/8f/e1/a2872aa55495a70f61310d411541c6ee23812d9a884e000c716e1bc3edbf/aiohttp-3.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c1af67559445498b502030c35c59db59966f47041ca9de5b4e707f86bd10b5f", size = 518743, upload-time = "2026-06-07T21:06:09.749Z" }, { url = "https://files.pythonhosted.org/packages/5b/e7/c60c7b209e509cc787de3cea0550a518538cfc08003e1c1e14c1c63fff71/aiohttp-3.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d44ec478e713ee7f29b439f7eb8dc2b9d4079e11ae114d2c2ac3d5daf30516c8", size = 514139, upload-time = "2026-06-07T21:06:11.26Z" }, - { url = "https://files.pythonhosted.org/packages/5b/8d/614ace2f579702c9840ab1e1447fd8509e35b0b904f7196418fa2f57b25d/aiohttp-3.14.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d3b1a184a9a8f548a6b73f1e26b96b052193e4b3175ed7342aaf1151a1f00a04", size = 1784088, upload-time = "2026-06-07T21:06:12.887Z" }, - { url = "https://files.pythonhosted.org/packages/49/e0/726e90f99542bf292f81a96a12cc4847deb86f3ccf62c6f4014a201f4d33/aiohttp-3.14.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5f2504bc0322437c9a1ff6d3333ca56c7477b727c995f036b976ae17b98372c8", size = 1737835, upload-time = "2026-06-07T21:06:14.564Z" }, - { url = "https://files.pythonhosted.org/packages/0b/4b/d176d5c4db9d33dacf0543102ea59503bc1d528af4cfd0b719949ca49389/aiohttp-3.14.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:73f05ea02013e02512c3bf42714f1208c57168c779cc6fe23516e4543089d0a6", size = 1842801, upload-time = "2026-06-07T21:06:16.228Z" }, - { url = "https://files.pythonhosted.org/packages/dc/d6/5a99b563690ea0cbed912ae94a2ce33993a5709a651a3a4fe761e7dd973a/aiohttp-3.14.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:797457503c2d426bee06eef808d07b31ede30b65e054444e7de64cad0061b7af", size = 1929992, upload-time = "2026-06-07T21:06:17.947Z" }, { url = "https://files.pythonhosted.org/packages/76/7f/a987b14a3859094b3cea3f4825219c3e5536242564af6e3f9c2f6c994eb2/aiohttp-3.14.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b821a1f7dedf7e37450654e620038ac3b2e81e8fa6ea269337e97101978ec730", size = 1786989, upload-time = "2026-06-07T21:06:19.677Z" }, - { url = "https://files.pythonhosted.org/packages/f1/1a/420e5c85a3e73349372ed22ce0b6af86bfa6ce16a4b20a64a2e94608c781/aiohttp-3.14.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4cd96b5ba05d67ed0cf00b5b405c8cd99586d8e3481e8ee0a831057591af7621", size = 1640129, upload-time = "2026-06-07T21:06:22.558Z" }, - { url = "https://files.pythonhosted.org/packages/a7/80/18a592ed3be0a402cc03670bd72ee1f8563ddbe1d8d5542dbf868f274136/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d459b98a932296c6f0e94f87511a0b1b90a8a02c30a50e60a297619cd5a58ee", size = 1756576, upload-time = "2026-06-07T21:06:24.8Z" }, - { url = "https://files.pythonhosted.org/packages/ec/0b/8b3d5713373858ff71a617daf6e3b0e81ad63e79d09a3cf2f6b6b983939c/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:764457a7be60825fb770a644852ff717bcbb5042f189f2bd16df61a81b3f6573", size = 1754668, upload-time = "2026-06-07T21:06:26.528Z" }, - { url = "https://files.pythonhosted.org/packages/9f/49/fd564575cf225821d7ba5a117cb8bc27213d8a7e1811162afb43ae077039/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f7a16ef45b081454ef844502d87a848876c490c4cb5c650c230f6ec79ed2c1e7", size = 1817019, upload-time = "2026-06-07T21:06:28.297Z" }, - { url = "https://files.pythonhosted.org/packages/ed/1b/e850c9ae6fc91356552ae668bb6c51e93fa29c8aef13398a10b56678557f/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2fbc3ed048b3475b9f0cbcb9978e9d2d3511acd91ead203af26ed9f0056004cf", size = 1631638, upload-time = "2026-06-07T21:06:30.242Z" }, - { url = "https://files.pythonhosted.org/packages/eb/94/3c337ba72451a89806ace6f75bddc92bafc5b8d53d90115a512858024b63/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bedb0cd073cc2dc035e30aeb99444389d3cd2113afe4ef9fcd23d439f5bade85", size = 1835660, upload-time = "2026-06-07T21:06:31.943Z" }, { url = "https://files.pythonhosted.org/packages/2b/9c/9c18cf367a0498212d9ba7daf990b504a5e8ae064cda4b504e2647c89c03/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b6feea921016eb3d4e04d65fc4e9ca402d1a3801f562aef94989f54694917af3", size = 1775698, upload-time = "2026-06-07T21:06:33.72Z" }, - { url = "https://files.pythonhosted.org/packages/b5/63/a251a9d2a6cb45065b2ddc0bde2b3dd10108740a9a42f632c66405a761a2/aiohttp-3.14.1-cp311-cp311-win32.whl", hash = "sha256:313701e488100074ce99850404ee36e741abf6330179fec908a1944ecf570126", size = 458386, upload-time = "2026-06-07T21:06:35.279Z" }, - { url = "https://files.pythonhosted.org/packages/17/ca/69274c51dcd6e8947d77b2806cf47a4a15f2c846e2cbeb1882547d3da283/aiohttp-3.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:03ab4530fdcb3a543a122ba4b65ac9919da9fe9f78a03d328a6e38ff962f7aa5", size = 483406, upload-time = "2026-06-07T21:06:36.824Z" }, - { url = "https://files.pythonhosted.org/packages/2c/8a/c25904f77690c3688ec140f87591ef11a0cfe36bf3d5c0f1f38056fb62b3/aiohttp-3.14.1-cp311-cp311-win_arm64.whl", hash = "sha256:486f7d16ed54c39c2cbd7ca71fd8ba2b8bb7860df65bd7b6ed640bab96a38a8b", size = 452987, upload-time = "2026-06-07T21:06:38.371Z" }, ] [[package]] @@ -99,8 +66,8 @@ name = "aiosignal" version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "frozenlist" }, - { name = "typing-extensions" }, + { name = "frozenlist", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } wheels = [ @@ -125,14 +92,32 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, ] +[[package]] +name = "anthropic" +version = "0.111.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "distro", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "docstring-parser", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "httpx", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "jiter", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "sniffio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/8a/9afc7305a2ce4b52b30e137f83cd2a6a90b918b3997073db11bb5a1de55a/anthropic-0.111.0.tar.gz", hash = "sha256:39cbda0ac17a6d423e5bf609811bd69b26eddf6299d7a468126e05bc711ce826", size = 934001, upload-time = "2026-06-18T17:31:44.733Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/bb/09e82a81885d787f350fb55ca9df865b63140dd28b3b5b3104c4ae261657/anthropic-0.111.0-py3-none-any.whl", hash = "sha256:c14edb36ed80da9099acbd26b5cec810d76606c31f32a0d56a4cf9d4fa9e25ae", size = 929774, upload-time = "2026-06-18T17:31:43.116Z" }, +] + [[package]] name = "anyio" version = "4.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "idna" }, - { name = "typing-extensions" }, + { name = "idna", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1c/b5/001890774a9552aff22502b8da382593109ce0c95314abaebbb116567545/anyio-4.14.0.tar.gz", hash = "sha256:b47c1f9ccf73e67021df785332508f99379c68fa7d0684e8e3492cb1d4b23f89", size = 253586, upload-time = "2026-06-15T22:00:49.021Z" } wheels = [ @@ -140,21 +125,27 @@ wheels = [ ] [[package]] -name = "astor" -version = "0.8.1" +name = "apache-tvm-ffi" +version = "0.1.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/21/75b771132fee241dfe601d39ade629548a9626d1d39f333fde31bc46febe/astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e", size = 35090, upload-time = "2019-12-10T01:50:35.51Z" } +dependencies = [ + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6f/60/1e787a0b5ebf318483235be2a689ee367173983067e441b8379564f667c0/apache_tvm_ffi-0.1.9.tar.gz", hash = "sha256:d2d402587e8906de0a07f4746aa78f3d452c7efe3625d4bb39ac2ad693bce530", size = 2513731, upload-time = "2026-02-27T19:28:06.602Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/88/97eef84f48fa04fbd6750e62dcceafba6c63c81b7ac1420856c8dcc0a3f9/astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5", size = 27488, upload-time = "2019-12-10T01:50:33.628Z" }, + { url = "https://files.pythonhosted.org/packages/55/43/63faedea83494e99122466a993bcdccd31cf93c7e8a0d56731120e82e2b9/apache_tvm_ffi-0.1.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6f16d73a82a9e68a439b7d233d48b1b929be17fe92df4bbf1ee2274e573144a3", size = 2323130, upload-time = "2026-02-27T19:27:17.259Z" }, + { url = "https://files.pythonhosted.org/packages/e4/3b/6cfc82a3ab5d9e501bbcee5df36eebe09da1c384461d7a55e2a17776d117/apache_tvm_ffi-0.1.9-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:21365abd2a2a1a6d3b4e6e4f048309651125becfa795440c3607f3cc27d30ac7", size = 2307140, upload-time = "2026-02-27T19:27:20.222Z" }, + { url = "https://files.pythonhosted.org/packages/c6/dd/2bab4c6cd86257dbf99e93452a1af833113f8dc3e25a25579f6e4e4c8a94/apache_tvm_ffi-0.1.9-cp312-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28241371934ea8af10d5067087ba1229ebddded7b2c02d33a258ec2a96df8c46", size = 2299704, upload-time = "2026-02-27T19:27:27.477Z" }, + { url = "https://files.pythonhosted.org/packages/70/ef/5402da5d37f5270fd88ea0348acca78dba9be8bdbf6c2bcae0935eb03ef1/apache_tvm_ffi-0.1.9-cp312-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f45eb43499acac45ff6c93564f0ff2d3ca27b69656d540fd56ce59d51c0b4c65", size = 2278991, upload-time = "2026-02-27T19:27:30.729Z" }, ] [[package]] -name = "async-timeout" -version = "4.0.3" +name = "astor" +version = "0.8.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/87/d6/21b30a550dafea84b1b8eee21b5e23fa16d010ae006011221f33dcd8d7f8/async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f", size = 8345, upload-time = "2023-08-10T16:35:56.907Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/21/75b771132fee241dfe601d39ade629548a9626d1d39f333fde31bc46febe/astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e", size = 35090, upload-time = "2019-12-10T01:50:35.51Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/fa/e01228c2938de91d47b307831c62ab9e4001e747789d0b05baf779a6488c/async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028", size = 5721, upload-time = "2023-08-10T16:35:55.203Z" }, + { url = "https://files.pythonhosted.org/packages/c3/88/97eef84f48fa04fbd6750e62dcceafba6c63c81b7ac1420856c8dcc0a3f9/astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5", size = 27488, upload-time = "2019-12-10T01:50:33.628Z" }, ] [[package]] @@ -166,18 +157,36 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, ] +[[package]] +name = "babel" +version = "2.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554, upload-time = "2026-02-01T12:30:56.078Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" }, +] + +[[package]] +name = "backrefs" +version = "7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/a7dd63622beef68cc0d3c3c36d472e143dd95443d5ebf14cd1a5b4dfbf11/backrefs-7.0.tar.gz", hash = "sha256:4989bb9e1e99eb23647c7160ed51fb21d0b41b5d200f2d3017da41e023097e82", size = 7012453, upload-time = "2026-04-28T16:28:04.215Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/39/39a31d7eae729ea14ed10c3ccef79371197177b9355a86cb3525709e8502/backrefs-7.0-py310-none-any.whl", hash = "sha256:b57cd227ea556b0aed3dc9b8da4628db4eabc0402c6d7fcfc69283a93955f7e9", size = 380824, upload-time = "2026-04-28T16:27:55.647Z" }, + { url = "https://files.pythonhosted.org/packages/c9/b5/9302644225ba7dfa934a2ff2b9c7bb85701313a90dddb3dfaf693fa5bae2/backrefs-7.0-py311-none-any.whl", hash = "sha256:a0fa7360c63509e9e077e174ef4e6d3c21c8db94189b9d957289ae6d794b9475", size = 392626, upload-time = "2026-04-28T16:27:57.42Z" }, +] + [[package]] name = "bitsandbytes" -version = "0.46.1" +version = "0.49.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, - { name = "torch" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "packaging", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/b2/9dadb4f8dca3948e35c1ebfee75ca82353e41468b41ff785430595f8e6f0/bitsandbytes-0.46.1-py3-none-manylinux_2_24_aarch64.whl", hash = "sha256:21b349f776d04c6c1380405961081de29c84f49640b79d3d199b6d719818da84", size = 30713241, upload-time = "2025-07-02T19:44:21.857Z" }, - { url = "https://files.pythonhosted.org/packages/6b/1e/c26dbcb46cebb49fa6b17ff888966e6d8f306078b095a5df801a583549d0/bitsandbytes-0.46.1-py3-none-manylinux_2_24_x86_64.whl", hash = "sha256:b0ee4a204fb926d4eae02bc2f5468ae3c11c011cfa849a4c771d4c6b201f57ae", size = 72865511, upload-time = "2025-07-02T19:44:25.192Z" }, - { url = "https://files.pythonhosted.org/packages/85/7d/06da01fac23a5032632dd7874b31c1d9b7b9af2314b2b07e5f99641950da/bitsandbytes-0.46.1-py3-none-win_amd64.whl", hash = "sha256:9f6f61376bd0e9780c5dc4ddee7d1f52cb10fe8034a1ea588611f4e8b87eb6a7", size = 72197544, upload-time = "2025-07-02T19:44:29.483Z" }, + { url = "https://files.pythonhosted.org/packages/19/57/3443d6f183436fbdaf5000aac332c4d5ddb056665d459244a5608e98ae92/bitsandbytes-0.49.2-py3-none-manylinux_2_24_x86_64.whl", hash = "sha256:54b771f06e1a3c73af5c7f16ccf0fc23a846052813d4b008d10cb6e017dd1c8c", size = 60651714, upload-time = "2026-02-16T21:26:11.579Z" }, ] [[package]] @@ -185,55 +194,39 @@ name = "blake3" version = "1.0.8" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/75/aa/abcd75e9600987a0bc6cfe9b6b2ff3f0e2cb08c170addc6e76035b5c4cb3/blake3-1.0.8.tar.gz", hash = "sha256:513cc7f0f5a7c035812604c2c852a0c1468311345573de647e310aca4ab165ba", size = 117308, upload-time = "2025-10-14T06:47:48.83Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/52/a0/fbe66cf17f72cab1600246b90db6cb39b52a88335b9bd2821688379d8dde/blake3-1.0.8-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:8956bb9aec47b6c37ccce935a943588f1f5e6e2e85d43bb7cb76a574238f8a9b", size = 350634, upload-time = "2025-10-14T06:45:09.621Z" }, - { url = "https://files.pythonhosted.org/packages/20/bc/f4b88873054aa87b8c36398775713bf674807e7449a9c7fefe35d3cf1dc5/blake3-1.0.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7adbbee5dd0c302218eb8acdfd82b7006930eb5798f56f79f9cca89f6f192662", size = 328382, upload-time = "2025-10-14T06:45:11.137Z" }, - { url = "https://files.pythonhosted.org/packages/b9/e5/4c37ced9358cece71f2f380a57f77a449f6e87cc6d9f450613237b7a3078/blake3-1.0.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:859cd57bac097a2cd63cb36d64c2f6f16c9edece5590f929e70157478e46dc9e", size = 371337, upload-time = "2025-10-14T06:45:12.296Z" }, - { url = "https://files.pythonhosted.org/packages/d1/df/0825da1cde7ca63a8bcdc785ca7f8647b025e9497eef18c75bb9754dbd26/blake3-1.0.8-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e1d70bf76c02846d0868a3d413eb6c430b76a315e12f1b2e59b5cf56c1f62a3", size = 374945, upload-time = "2025-10-14T06:45:13.99Z" }, - { url = "https://files.pythonhosted.org/packages/b7/a3/43f10c623179dce789ca9e3b8f4064fb6312e99f05c1aae360d07ad95bb0/blake3-1.0.8-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3fe26f145fcb82931d1820b55c0279f72f8f8e49450dd9d74efbfd409b28423", size = 448766, upload-time = "2025-10-14T06:45:15.471Z" }, - { url = "https://files.pythonhosted.org/packages/db/8f/9431bf5fe0eedeb2aadb4fe81fb18945cf8d49adad98e7988fb3cdac76c2/blake3-1.0.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97c076d58ee37eb5b2d8d91bb9db59c5a008fd59c71845dc57fe438aeeabaf10", size = 507107, upload-time = "2025-10-14T06:45:17.055Z" }, - { url = "https://files.pythonhosted.org/packages/ac/55/3712cdaebaefa8d5acec46f8df7861ba1832e1e188bc1333dd5acd31f760/blake3-1.0.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78731ce7fca46f776ae45fb5271a2a76c4a92c9687dd4337e84b2ae9a174b28f", size = 393955, upload-time = "2025-10-14T06:45:18.718Z" }, - { url = "https://files.pythonhosted.org/packages/1f/d0/add0441e7aaa6b358cac0ddc9246f0799b60d25f06bd542b554afe19fd85/blake3-1.0.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65e373c8b47174b969ee61a89ee56922f722972eb650192845c8546df8d9db9", size = 387577, upload-time = "2025-10-14T06:45:20.332Z" }, - { url = "https://files.pythonhosted.org/packages/b2/9a/e4a61f5c0cad4d51a886e8f4367e590caaead8a4809892292bf724c4421d/blake3-1.0.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db54946792d2b8c6fa4be73e6e334519f13c1b52e7ff346b3e2ec8ad3eb59401", size = 550515, upload-time = "2025-10-14T06:45:21.867Z" }, - { url = "https://files.pythonhosted.org/packages/28/c7/90c01091465628acff96534e82d4b3bc16ca22c515f69916d2715273c0e3/blake3-1.0.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:67d9c42c42eb1c7aedcf901591c743266009fcf48babf6d6f8450f567cb94a84", size = 554650, upload-time = "2025-10-14T06:45:23.047Z" }, - { url = "https://files.pythonhosted.org/packages/d5/11/812d7125c6e99e5e0e841a9af2c4161ac811c027e08886353df76eae7b96/blake3-1.0.8-cp310-cp310-win32.whl", hash = "sha256:444215a1e5201f8fa4e5c7352e938a7070cd33d66aeb1dd9b1103a64b6920f9e", size = 228695, upload-time = "2025-10-14T06:45:24.255Z" }, - { url = "https://files.pythonhosted.org/packages/3c/7e/ab9b5c4b650ff397d347451bfb1ad7e6e53dc06c945e2fd091f27a76422e/blake3-1.0.8-cp310-cp310-win_amd64.whl", hash = "sha256:725c52c4d393c7bd1a10682df322d480734002a1389b320366c660568708846b", size = 215660, upload-time = "2025-10-14T06:45:25.381Z" }, - { url = "https://files.pythonhosted.org/packages/7d/e1/1df74c915fde3c48940247ad64984f40f5968191d7b5230bcc7b31402e7c/blake3-1.0.8-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9a8946cb6b1d2b2096daaaa89856f39887bce2b78503fa31b78173e3a86fa281", size = 350481, upload-time = "2025-10-14T06:45:26.625Z" }, - { url = "https://files.pythonhosted.org/packages/bb/0d/7c47ae1f5f8d60783ce6234a8b31db351fc62be243006a6276284ca3d40d/blake3-1.0.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:adccc3a139207e02bb7d7bb0715fe0b87069685aad5f3afff820b2f829467904", size = 328039, upload-time = "2025-10-14T06:45:32.844Z" }, - { url = "https://files.pythonhosted.org/packages/f4/0a/515209b0c282c360e249b89cd85350d97cfd55fadbb4df736c67b77b27a1/blake3-1.0.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fcfe81b3ae3fb5d2e88be0d3259603ff95f0d5ed69f655c28fdaef31e49a470", size = 371092, upload-time = "2025-10-14T06:45:34.062Z" }, - { url = "https://files.pythonhosted.org/packages/a0/33/9d342a2bf5817f006bbe947335e5d387327541ea47590854947befd01251/blake3-1.0.8-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:58ce8d45a5bb5326482de72ea1969a378634236186a970fef63058a5b7b8b435", size = 374859, upload-time = "2025-10-14T06:45:35.262Z" }, - { url = "https://files.pythonhosted.org/packages/5b/fc/ea4bef850a7ec9fbb383503fd3c56056dd9fa44e10c3bc61050ab7b2bac0/blake3-1.0.8-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83605dbf43f581d8b7175b7f3bfe5388bad5a7c6ac175c9c11d669da31133f4b", size = 448585, upload-time = "2025-10-14T06:45:36.542Z" }, - { url = "https://files.pythonhosted.org/packages/a5/67/167a65a4c431715407d07b1b8b1367698a3ad88e7260edb85f0c5293f08a/blake3-1.0.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b5573b052777142b2cecc453d022c3f21aa4aba75011258410bb98f41c1a727", size = 507519, upload-time = "2025-10-14T06:45:37.814Z" }, - { url = "https://files.pythonhosted.org/packages/32/e2/0886e192d634b264c613b0fbf380745b39992b424a0effc00ef08783644e/blake3-1.0.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe1b02ab49bfd969ef50b9f17482a2011c77536654af21807ba5c2674e0bb2a0", size = 393645, upload-time = "2025-10-14T06:45:39.146Z" }, { url = "https://files.pythonhosted.org/packages/fc/3b/7fb2fe615448caaa5f6632b2c7551117b38ccac747a3a5769181e9751641/blake3-1.0.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7780666dc6be809b49442d6d5ce06fdbe33024a87560b58471103ec17644682", size = 387640, upload-time = "2025-10-14T06:45:40.546Z" }, - { url = "https://files.pythonhosted.org/packages/bc/8c/2bfc942c6c97cb3d20f341859343bb86ee20af723fedfc886373e606079b/blake3-1.0.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:af394b50c6aa0b1b957a99453d1ee440ef67cd2d1b5669c731647dc723de8a3a", size = 550316, upload-time = "2025-10-14T06:45:42.003Z" }, { url = "https://files.pythonhosted.org/packages/7e/75/0252be37620699b79dbaa799c9b402d63142a131d16731df4ef09d135dd7/blake3-1.0.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c63ece266a43014cf29e772a82857cd8e90315ae3ed53e3c5204851596edd5f2", size = 554463, upload-time = "2025-10-14T06:45:43.22Z" }, - { url = "https://files.pythonhosted.org/packages/8c/6d/d698ae2d5ddd25976fd2c11b079ca071334aecbba6414da8c9cc8e19d833/blake3-1.0.8-cp311-cp311-win32.whl", hash = "sha256:44c2815d4616fad7e2d757d121c0a11780f70ffc817547b3059b5c7e224031a7", size = 228375, upload-time = "2025-10-14T06:45:44.425Z" }, - { url = "https://files.pythonhosted.org/packages/34/d7/33b01e27dc3542dc9ec44132684506f880cd0257b04da0bf7f4b2afa41c8/blake3-1.0.8-cp311-cp311-win_amd64.whl", hash = "sha256:8f2ef8527a7a8afd99b16997d015851ccc0fe2a409082cebb980af2554e5c74c", size = 215733, upload-time = "2025-10-14T06:45:46.049Z" }, ] [[package]] -name = "blis" -version = "0.7.11" +name = "boolean-py" +version = "5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/cf/85379f13b76f3a69bca86b60237978af17d6aa0bc5998978c3b8cf05abb2/boolean_py-5.0.tar.gz", hash = "sha256:60cbc4bad079753721d32649545505362c754e121570ada4658b852a3a318d95", size = 37047, upload-time = "2025-04-03T10:39:49.734Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/ca/78d423b324b8d77900030fa59c4aa9054261ef0925631cd2501dd015b7b7/boolean_py-5.0-py3-none-any.whl", hash = "sha256:ef28a70bd43115208441b53a045d1549e2f0ec6e3d08a9d142cbc41c1938e8d9", size = 26577, upload-time = "2025-04-03T10:39:48.449Z" }, +] + +[[package]] +name = "cachecontrol" +version = "0.14.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "msgpack", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/51/8c/60c85350f2e1c9647df580083a0f6acc686ef32d1a91f4ab0c624b3ff867/blis-0.7.11.tar.gz", hash = "sha256:cec6d48f75f7ac328ae1b6fbb372dde8c8a57c89559172277f66e01ff08d4d42", size = 2897107, upload-time = "2023-09-22T06:28:25.103Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/f6/c972b32d80760fb79d6b9eeb0b3010a46b89c0b23cf6329417ff7886cd22/cachecontrol-0.14.4.tar.gz", hash = "sha256:e6220afafa4c22a47dd0badb319f84475d79108100d04e26e8542ef7d3ab05a1", size = 16150, upload-time = "2025-11-14T04:32:13.138Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/8b/b61978aa36de134d1056c55c2efe818042df68aff211b91fa5b1b9ae3f85/blis-0.7.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd5fba34c5775e4c440d80e4dea8acb40e2d3855b546e07c4e21fad8f972404c", size = 6127109, upload-time = "2023-09-22T06:27:17.716Z" }, - { url = "https://files.pythonhosted.org/packages/3d/95/f23fbbf3010bf057302ebbb8ad697fb9a0f8624e833025c4a58bfb8d3389/blis-0.7.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:31273d9086cab9c56986d478e3ed6da6752fa4cdd0f7b5e8e5db30827912d90d", size = 1110252, upload-time = "2023-09-22T06:27:20.187Z" }, - { url = "https://files.pythonhosted.org/packages/fd/82/8d9576904833a8575ae6758dd8c1a2152fdec1705dd3ae65a10e99d8896a/blis-0.7.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d06883f83d4c8de8264154f7c4a420b4af323050ed07398c1ff201c34c25c0d2", size = 1711161, upload-time = "2023-09-22T06:27:22.215Z" }, - { url = "https://files.pythonhosted.org/packages/9b/81/55092e1c016fe05ef7a57623920209012f05e8b897acbad355c9bf854181/blis-0.7.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee493683e3043650d4413d531e79e580d28a3c7bdd184f1b9cfa565497bda1e7", size = 10171589, upload-time = "2023-09-22T06:27:23.894Z" }, - { url = "https://files.pythonhosted.org/packages/ad/65/d9fd07e11499e0a3162c6d61ae430172125e5c340c89c40504189d5299b9/blis-0.7.11-cp310-cp310-win_amd64.whl", hash = "sha256:a73945a9d635eea528bccfdfcaa59dd35bd5f82a4a40d5ca31f08f507f3a6f81", size = 6620069, upload-time = "2023-09-22T06:27:26.707Z" }, - { url = "https://files.pythonhosted.org/packages/c7/59/c8010f380a16709e6d3ef5534845d1ca1e689079914ec67ab60f57edfc37/blis-0.7.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1b68df4d01d62f9adaef3dad6f96418787265a6878891fc4e0fabafd6d02afba", size = 6123547, upload-time = "2023-09-22T06:27:28.47Z" }, - { url = "https://files.pythonhosted.org/packages/a8/73/0a9d4e7f6e78ef270e3a4532b17e060a02087590cf615ba9943fd1a283e9/blis-0.7.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:162e60d941a8151418d558a94ee5547cb1bbeed9f26b3b6f89ec9243f111a201", size = 1106895, upload-time = "2023-09-22T06:27:30.964Z" }, - { url = "https://files.pythonhosted.org/packages/51/f7/a5d9a0be0729f4172248dbae74d7e02b139b3a32cc29650d3ade7ab91fea/blis-0.7.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:686a7d0111d5ba727cd62f374748952fd6eb74701b18177f525b16209a253c01", size = 1707389, upload-time = "2023-09-22T06:27:32.321Z" }, - { url = "https://files.pythonhosted.org/packages/dc/23/eb01450dc284a7ea8ebc0e5296f1f8fdbe5299169f4c318f836b4284a119/blis-0.7.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0421d6e44cda202b113a34761f9a062b53f8c2ae8e4ec8325a76e709fca93b6e", size = 10172888, upload-time = "2023-09-22T06:27:34.529Z" }, - { url = "https://files.pythonhosted.org/packages/2f/09/da0592c74560cc33396504698122f7a56747c82a5e072ca7d2c3397898e1/blis-0.7.11-cp311-cp311-win_amd64.whl", hash = "sha256:0dc9dcb3843045b6b8b00432409fd5ee96b8344a324e031bfec7303838c41a1a", size = 6602835, upload-time = "2023-09-22T06:27:37.46Z" }, + { url = "https://files.pythonhosted.org/packages/ef/79/c45f2d53efe6ada1110cf6f9fca095e4ff47a0454444aefdde6ac4789179/cachecontrol-0.14.4-py3-none-any.whl", hash = "sha256:b7ac014ff72ee199b5f8af1de29d60239954f223e948196fa3d84adaffc71d2b", size = 22247, upload-time = "2025-11-14T04:32:11.733Z" }, +] + +[package.optional-dependencies] +filecache = [ + { name = "filelock", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] [[package]] @@ -245,37 +238,14 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8c/7b/1fc1c09cc0756cf25861a3be10565915953876da48bb228fb9a672b20a42/cachetools-7.1.4-py3-none-any.whl", hash = "sha256:323dc4127934744db5b54eb4924482d7edafbf9554e820d1531c2e08c0e4ef54", size = 16761, upload-time = "2026-05-21T22:40:41.845Z" }, ] -[[package]] -name = "catalogue" -version = "2.0.10" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/38/b4/244d58127e1cdf04cf2dc7d9566f0d24ef01d5ce21811bab088ecc62b5ea/catalogue-2.0.10.tar.gz", hash = "sha256:4f56daa940913d3f09d589c191c74e5a6d51762b3a9e37dd53b7437afd6cda15", size = 19561, upload-time = "2023-09-25T06:29:24.962Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/96/d32b941a501ab566a16358d68b6eb4e4acc373fab3c3c4d7d9e649f7b4bb/catalogue-2.0.10-py3-none-any.whl", hash = "sha256:58c2de0020aa90f4a2da7dfad161bf7b3b054c86a5f09fcedc0b2b740c109a9f", size = 17325, upload-time = "2023-09-25T06:29:23.337Z" }, -] - [[package]] name = "cbor2" version = "6.1.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/75/af/473c241e41c142ea06ebef8d1f660fa6ff928fb97210e7bec8ee5974f8cd/cbor2-6.1.2.tar.gz", hash = "sha256:6b43037a66947dee5af0abb1a4c3a13b3abac5a4a3f32f9771efbbcd030fd909", size = 86760, upload-time = "2026-06-02T19:01:29.333Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/52/3f/37771defcae022510d640df8e420b7968c01804c084ff8cd2b9021c8873b/cbor2-6.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8ffda338fe434d8d37e92e0d2e8f66432f0aa983f769dd2417f1eb6dfce634d3", size = 412096, upload-time = "2026-06-02T19:00:21.183Z" }, - { url = "https://files.pythonhosted.org/packages/13/ab/a10563c43a937a5fc0c5c52ee14f8380c7ba66634294759cc3dd3697d521/cbor2-6.1.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:715112c1087bc65f26d50ed4ffaaa214cbd398fbfb0d1a45f7edf555e77c7ca6", size = 457955, upload-time = "2026-06-02T19:00:22.989Z" }, - { url = "https://files.pythonhosted.org/packages/c7/a9/443cb3f0b086cbb78e3df098bce6f8fb6cabc39b9ea5b46bca27b7adf4ad/cbor2-6.1.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:86b030a6accec1b4a58387e27edb656921c4b6d5d36d60f05d19915526233402", size = 468656, upload-time = "2026-06-02T19:00:24.549Z" }, - { url = "https://files.pythonhosted.org/packages/6b/ed/2b2446767225078c023fd32523f84dceecb2a94e7ac7259b27d1527a5eac/cbor2-6.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fe007e47f6edb828cc97af256ce3452f57431cb8841302c3c28543efc7c9e037", size = 523323, upload-time = "2026-06-02T19:00:25.851Z" }, - { url = "https://files.pythonhosted.org/packages/b2/71/cfe388abc06d59e8393a1a5fa260d5412b5a68963de0ef0e79f6395a3cb7/cbor2-6.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:95e3d99160f105b8b6bccb1033c9c14e8ca7c450d8999363882d87357313b78e", size = 534929, upload-time = "2026-06-02T19:00:27.61Z" }, - { url = "https://files.pythonhosted.org/packages/a0/e8/8b454b8d405d9a66935b47bf5d9b045147bcf86f7747161598a32e5169ad/cbor2-6.1.2-cp310-cp310-win32.whl", hash = "sha256:464abc44b6863f888c9e263078e52395bddc03f20a3bd59f58fff581788fea51", size = 284490, upload-time = "2026-06-02T19:00:29.347Z" }, - { url = "https://files.pythonhosted.org/packages/d2/3e/ecce89144cd820ba6f528debedff4948b6022996d3fcc4715e69f6acb483/cbor2-6.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:a3d1699de84d8aec4e9c6c3fdd450d86fac183a542733f0cac36a4317db2375a", size = 301090, upload-time = "2026-06-02T19:00:30.619Z" }, - { url = "https://files.pythonhosted.org/packages/cb/cd/92f77e8bdfef427c6617cd4b02898e9d88861db8dcc973cc8b2c29a51582/cbor2-6.1.2-cp310-cp310-win_arm64.whl", hash = "sha256:925ebc6d26a0d3aa81377bdcfd8d44d166f4f6a5ee77467a9d6f3ed1487fc499", size = 292330, upload-time = "2026-06-02T19:00:31.946Z" }, - { url = "https://files.pythonhosted.org/packages/c0/1e/687d7a712755c84a4b823ca79622dceef7ddfb0a3387b6ac1cad10835e07/cbor2-6.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6ce8f6d9e234bdf36b5300bf3da98fafc198b253f8dfe77747327806bdb37d97", size = 411738, upload-time = "2026-06-02T19:00:33.396Z" }, - { url = "https://files.pythonhosted.org/packages/3f/d3/a96162ac244e074f9c188ffd29c086c51466e71c7c360189f6204900db3d/cbor2-6.1.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9f81ab0e74671b0ff9b7e30386e2ab8d40ee1049d13c1680b57ab1b1cd95c81a", size = 457945, upload-time = "2026-06-02T19:00:34.729Z" }, { url = "https://files.pythonhosted.org/packages/3a/f3/7fed7cee8456932d38e7b11d5034470ee9e91378d16f762c552e78df34fa/cbor2-6.1.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:5a429fc61db768c3b4739eb8532556eed86913ad64fe6ebbc1f3a646fb9a4f22", size = 468758, upload-time = "2026-06-02T19:00:35.882Z" }, - { url = "https://files.pythonhosted.org/packages/a1/e9/bb31f04c5afa53eb55927da1399cc596d7e84e7053de7abf2c3aba0ea3a9/cbor2-6.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:511999bf3310c6641d3d15ee3853daa7ebd6ef3130bb0d63b9a7e2fd720a3714", size = 523169, upload-time = "2026-06-02T19:00:37.422Z" }, { url = "https://files.pythonhosted.org/packages/fe/7f/90faf18c280abb49428ed2e78f672ef0c7f6eb1b9b685bc4fe810f2e5e95/cbor2-6.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3099e678283efd2d3cabd6ddcb770da6e2102c0d265f98bca38aa4e720e247cf", size = 534885, upload-time = "2026-06-02T19:00:38.972Z" }, - { url = "https://files.pythonhosted.org/packages/b8/8a/447aea5da80847bb17ca4718cd4909a2dc8dfe6f68ede4fe29f94b4ca12c/cbor2-6.1.2-cp311-cp311-win32.whl", hash = "sha256:0ef832ac8152ca76a69c184fe401329629b7dfd5fdddd713121bf1ff6d21660f", size = 284601, upload-time = "2026-06-02T19:00:40.426Z" }, - { url = "https://files.pythonhosted.org/packages/55/95/6239187639a875eb83b924c16f4938d3d735c9c45474008c8b962bd55da2/cbor2-6.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:08cdc03d65e965aafd04c3bf9cb54b8cba55041756bd39d0ba6cd62bd060f959", size = 301284, upload-time = "2026-06-02T19:00:41.693Z" }, - { url = "https://files.pythonhosted.org/packages/76/cb/e5f92271747a0331ca9151fac4098f8e245f1b09623ddff1258967a35b01/cbor2-6.1.2-cp311-cp311-win_arm64.whl", hash = "sha256:0e2cfd25a395d454990d67148103107293c6506c3b0b15952a6e97f53d23deda", size = 292228, upload-time = "2026-06-02T19:00:43.27Z" }, ] [[package]] @@ -292,35 +262,21 @@ name = "cffi" version = "2.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pycparser", marker = "implementation_name != 'PyPy'" }, + { name = "pycparser", marker = "implementation_name != 'PyPy' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283, upload-time = "2025-09-08T23:22:08.01Z" }, - { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504, upload-time = "2025-09-08T23:22:10.637Z" }, - { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811, upload-time = "2025-09-08T23:22:12.267Z" }, - { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402, upload-time = "2025-09-08T23:22:13.455Z" }, - { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217, upload-time = "2025-09-08T23:22:14.596Z" }, - { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079, upload-time = "2025-09-08T23:22:15.769Z" }, - { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475, upload-time = "2025-09-08T23:22:17.427Z" }, - { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829, upload-time = "2025-09-08T23:22:19.069Z" }, - { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211, upload-time = "2025-09-08T23:22:20.588Z" }, - { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036, upload-time = "2025-09-08T23:22:22.143Z" }, - { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184, upload-time = "2025-09-08T23:22:23.328Z" }, - { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790, upload-time = "2025-09-08T23:22:24.752Z" }, - { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, - { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, - { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" }, - { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, - { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, - { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971, upload-time = "2025-09-08T23:22:36.805Z" }, - { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972, upload-time = "2025-09-08T23:22:38.436Z" }, { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, - { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076, upload-time = "2025-09-08T23:22:40.95Z" }, - { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820, upload-time = "2025-09-08T23:22:42.463Z" }, - { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635, upload-time = "2025-09-08T23:22:43.623Z" }, +] + +[[package]] +name = "cfgv" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, ] [[package]] @@ -329,38 +285,9 @@ version = "3.4.7" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d", size = 315182, upload-time = "2026-04-02T09:25:40.673Z" }, - { url = "https://files.pythonhosted.org/packages/24/47/b192933e94b546f1b1fe4df9cc1f84fcdbf2359f8d1081d46dd029b50207/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8", size = 209329, upload-time = "2026-04-02T09:25:42.354Z" }, - { url = "https://files.pythonhosted.org/packages/c2/b4/01fa81c5ca6141024d89a8fc15968002b71da7f825dd14113207113fabbd/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790", size = 231230, upload-time = "2026-04-02T09:25:44.281Z" }, - { url = "https://files.pythonhosted.org/packages/20/f7/7b991776844dfa058017e600e6e55ff01984a063290ca5622c0b63162f68/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc", size = 225890, upload-time = "2026-04-02T09:25:45.475Z" }, - { url = "https://files.pythonhosted.org/packages/20/e7/bed0024a0f4ab0c8a9c64d4445f39b30c99bd1acd228291959e3de664247/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393", size = 216930, upload-time = "2026-04-02T09:25:46.58Z" }, - { url = "https://files.pythonhosted.org/packages/e2/ab/b18f0ab31cdd7b3ddb8bb76c4a414aeb8160c9810fdf1bc62f269a539d87/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153", size = 202109, upload-time = "2026-04-02T09:25:48.031Z" }, - { url = "https://files.pythonhosted.org/packages/82/e5/7e9440768a06dfb3075936490cb82dbf0ee20a133bf0dd8551fa096914ec/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af", size = 214684, upload-time = "2026-04-02T09:25:49.245Z" }, - { url = "https://files.pythonhosted.org/packages/71/94/8c61d8da9f062fdf457c80acfa25060ec22bf1d34bbeaca4350f13bcfd07/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34", size = 212785, upload-time = "2026-04-02T09:25:50.671Z" }, - { url = "https://files.pythonhosted.org/packages/66/cd/6e9889c648e72c0ab2e5967528bb83508f354d706637bc7097190c874e13/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1", size = 203055, upload-time = "2026-04-02T09:25:51.802Z" }, - { url = "https://files.pythonhosted.org/packages/92/2e/7a951d6a08aefb7eb8e1b54cdfb580b1365afdd9dd484dc4bee9e5d8f258/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752", size = 232502, upload-time = "2026-04-02T09:25:53.388Z" }, - { url = "https://files.pythonhosted.org/packages/58/d5/abcf2d83bf8e0a1286df55cd0dc1d49af0da4282aa77e986df343e7de124/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53", size = 214295, upload-time = "2026-04-02T09:25:54.765Z" }, - { url = "https://files.pythonhosted.org/packages/47/3a/7d4cd7ed54be99973a0dc176032cba5cb1f258082c31fa6df35cff46acfc/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616", size = 227145, upload-time = "2026-04-02T09:25:55.904Z" }, - { url = "https://files.pythonhosted.org/packages/1d/98/3a45bf8247889cf28262ebd3d0872edff11565b2a1e3064ccb132db3fbb0/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a", size = 218884, upload-time = "2026-04-02T09:25:57.074Z" }, - { url = "https://files.pythonhosted.org/packages/ad/80/2e8b7f8915ed5c9ef13aa828d82738e33888c485b65ebf744d615040c7ea/charset_normalizer-3.4.7-cp310-cp310-win32.whl", hash = "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374", size = 148343, upload-time = "2026-04-02T09:25:58.199Z" }, - { url = "https://files.pythonhosted.org/packages/35/1b/3b8c8c77184af465ee9ad88b5aea46ea6b2e1f7b9dc9502891e37af21e30/charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943", size = 159174, upload-time = "2026-04-02T09:25:59.322Z" }, - { url = "https://files.pythonhosted.org/packages/be/c1/feb40dca40dbb21e0a908801782d9288c64fc8d8e562c2098e9994c8c21b/charset_normalizer-3.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008", size = 147805, upload-time = "2026-04-02T09:26:00.756Z" }, { url = "https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7", size = 309705, upload-time = "2026-04-02T09:26:02.191Z" }, - { url = "https://files.pythonhosted.org/packages/5a/53/58c29116c340e5456724ecd2fff4196d236b98f3da97b404bc5e51ac3493/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7", size = 206419, upload-time = "2026-04-02T09:26:03.583Z" }, - { url = "https://files.pythonhosted.org/packages/b2/02/e8146dc6591a37a00e5144c63f29fb7c97a734ea8a111190783c0e60ab63/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e", size = 227901, upload-time = "2026-04-02T09:26:04.738Z" }, - { url = "https://files.pythonhosted.org/packages/fb/73/77486c4cd58f1267bf17db420e930c9afa1b3be3fe8c8b8ebbebc9624359/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c", size = 222742, upload-time = "2026-04-02T09:26:06.36Z" }, { url = "https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df", size = 214061, upload-time = "2026-04-02T09:26:08.347Z" }, - { url = "https://files.pythonhosted.org/packages/dc/92/42bd3cefcf7687253fb86694b45f37b733c97f59af3724f356fa92b8c344/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265", size = 199239, upload-time = "2026-04-02T09:26:09.823Z" }, - { url = "https://files.pythonhosted.org/packages/4c/3d/069e7184e2aa3b3cddc700e3dd267413dc259854adc3380421c805c6a17d/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4", size = 210173, upload-time = "2026-04-02T09:26:10.953Z" }, - { url = "https://files.pythonhosted.org/packages/62/51/9d56feb5f2e7074c46f93e0ebdbe61f0848ee246e2f0d89f8e20b89ebb8f/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e", size = 209841, upload-time = "2026-04-02T09:26:12.142Z" }, - { url = "https://files.pythonhosted.org/packages/d2/59/893d8f99cc4c837dda1fe2f1139079703deb9f321aabcb032355de13b6c7/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38", size = 200304, upload-time = "2026-04-02T09:26:13.711Z" }, - { url = "https://files.pythonhosted.org/packages/7d/1d/ee6f3be3464247578d1ed5c46de545ccc3d3ff933695395c402c21fa6b77/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c", size = 229455, upload-time = "2026-04-02T09:26:14.941Z" }, - { url = "https://files.pythonhosted.org/packages/54/bb/8fb0a946296ea96a488928bdce8ef99023998c48e4713af533e9bb98ef07/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b", size = 210036, upload-time = "2026-04-02T09:26:16.478Z" }, - { url = "https://files.pythonhosted.org/packages/9a/bc/015b2387f913749f82afd4fcba07846d05b6d784dd16123cb66860e0237d/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c", size = 224739, upload-time = "2026-04-02T09:26:17.751Z" }, { url = "https://files.pythonhosted.org/packages/17/ab/63133691f56baae417493cba6b7c641571a2130eb7bceba6773367ab9ec5/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d", size = 216277, upload-time = "2026-04-02T09:26:18.981Z" }, - { url = "https://files.pythonhosted.org/packages/06/6d/3be70e827977f20db77c12a97e6a9f973631a45b8d186c084527e53e77a4/charset_normalizer-3.4.7-cp311-cp311-win32.whl", hash = "sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad", size = 147819, upload-time = "2026-04-02T09:26:20.295Z" }, - { url = "https://files.pythonhosted.org/packages/20/d9/5f67790f06b735d7c7637171bbfd89882ad67201891b7275e51116ed8207/charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00", size = 159281, upload-time = "2026-04-02T09:26:21.74Z" }, - { url = "https://files.pythonhosted.org/packages/ca/83/6413f36c5a34afead88ce6f66684d943d91f233d76dd083798f9602b75ae/charset_normalizer-3.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1", size = 147843, upload-time = "2026-04-02T09:26:22.901Z" }, { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" }, ] @@ -368,26 +295,11 @@ wheels = [ name = "click" version = "8.4.1" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007, upload-time = "2026-05-22T04:08:37.769Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639, upload-time = "2026-05-22T04:08:35.26Z" }, ] -[[package]] -name = "cloudpathlib" -version = "0.24.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/19/58bc6b5d7d0f81c7209b05445af477e147c486552f96665a5912211839b9/cloudpathlib-0.24.0.tar.gz", hash = "sha256:c521a984e77b47e656fe78e20a7e3e260e0ab45fc69e33ac01094227c979e34a", size = 53600, upload-time = "2026-04-30T00:54:43.265Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/5b/ba933f896d9b0b07608d575a8501e2b4e32166b60d84c430a4a7285ebe64/cloudpathlib-0.24.0-py3-none-any.whl", hash = "sha256:b1c51e2d2ec7dc4fed6538991f4aea849d6cf11a7e6b9069f86e461aa1f9b5b4", size = 63214, upload-time = "2026-04-30T00:54:42.06Z" }, -] - [[package]] name = "cloudpickle" version = "3.1.2" @@ -408,147 +320,219 @@ wheels = [ [[package]] name = "compressed-tensors" -version = "0.10.2" +version = "0.17.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pydantic" }, - { name = "torch" }, - { name = "transformers" }, + { name = "loguru", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "transformers", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c0/86/d43d369abc81ec63ec7b8f6f27fc8b113ea0fd18a4116ae12063387b8b34/compressed_tensors-0.10.2.tar.gz", hash = "sha256:6de13ac535d7ffdd8890fad3d229444c33076170acaa8fab6bab8ecfa96c1d8f", size = 173459, upload-time = "2025-06-23T13:19:06.135Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/9e/d7f18bd9a0354088abc11a0c1f2c7698f7c49e5a709faedf6a46e388f693/compressed_tensors-0.17.0.tar.gz", hash = "sha256:15c20d06bdbcf35b51fc99fd125e7b9be1e1855567c33b7a46dfac26ad6fb126", size = 257091, upload-time = "2026-06-03T16:49:17.208Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/43/ac/56bb4b6b3150783119479e2f05e32ebfc39ca6ff8e6fcd45eb178743b39e/compressed_tensors-0.10.2-py3-none-any.whl", hash = "sha256:e1b4d9bc2006e3fd3a938e59085f318fdb280c5af64688a4792bf1bc263e579d", size = 169030, upload-time = "2025-06-23T13:19:03.487Z" }, + { url = "https://files.pythonhosted.org/packages/35/63/6edf0415b072fff0bf8b546074dea3f0f9b148e49b601ac98bdc60a76c68/compressed_tensors-0.17.0-py3-none-any.whl", hash = "sha256:4a1b89b508f7efb8ffb4eee8a6e69e0452d9b080cae130146025c64fbe9fa9aa", size = 211714, upload-time = "2026-06-03T16:49:15.672Z" }, ] [[package]] -name = "confection" -version = "0.1.5" +name = "cryptography" +version = "49.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz", hash = "sha256:f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493", size = 854345, upload-time = "2026-06-12T20:02:30.512Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/8b/43011f7ebe515a8aa20d61f290a326cd890c2e738e16e59eaff8d9c3a412/cryptography-49.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0e959b578856a3924bc0cbb710fc12c387b9412a951389f3ca61704a9e25f325", size = 4716422, upload-time = "2026-06-12T20:01:48.566Z" }, + { url = "https://files.pythonhosted.org/packages/20/2c/0622f20ff02b2ef32558733443805dc82fd4c275be01b2d19d14676f3a1b/cryptography-49.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2afe9051da7ae7bd5905da5a949280c7d2bb75682e188f650a9d0f2756b834c6", size = 4749683, upload-time = "2026-06-12T20:02:03.335Z" }, + { url = "https://files.pythonhosted.org/packages/a9/3c/f3ad17eecc1a57b0ba236dc01f90e783c51f4a2f35f64777cc4f47a184b2/cryptography-49.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:cbc77da8c523d5abd028635ba850a6966fcee2c82e2bf65a41d1d8afe0f98be9", size = 4749290, upload-time = "2026-06-12T20:01:30.848Z" }, + { url = "https://files.pythonhosted.org/packages/71/fd/577302e213a1be9468f92d1afef66fcf1ef83d516819d9992ca547f592bd/cryptography-49.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:66ec79c3904820572d7e987abdf304281f141d37ad9a489b8e97066e7b9b6459", size = 4980804, upload-time = "2026-06-12T20:01:42.853Z" }, + { url = "https://files.pythonhosted.org/packages/2c/99/2d13299eb3dd27b02dcfaafcc91d6b5cb3329f7cbd6d8f51921acd566c1a/cryptography-49.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:35b151772baff2c74cba7fa290ceaff4c3b11c0c881eb93eb5dbc05a7cfbba18", size = 4700968, upload-time = "2026-06-12T20:02:45.383Z" }, + { url = "https://files.pythonhosted.org/packages/b8/7b/62cbbab75d0659865bf0273790031544a0b16c8072d258f9428dcd8190dc/cryptography-49.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6f2debedf9ca60cf1d5bd466475638af5130f89965605cd818484d19987d3a21", size = 4735983, upload-time = "2026-06-12T20:01:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/a0/84/84fe36f19caf857d61cb7fc9c63035a47ffabd84ea12d1d393148efa3615/cryptography-49.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2400ef9c9e2299a25614eb1dea3db54a69b1349efd043bfac9c67630d136df36", size = 4735650, upload-time = "2026-06-12T20:02:41.389Z" }, + { url = "https://files.pythonhosted.org/packages/93/77/8df9eb486495979bccecd1062e2eaf435250e84437040295b57d09048b0b/cryptography-49.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:42b0684e0e40cf26122427802486f6d93aea593612603a94fbf260c7eb1e9c1b", size = 4967968, upload-time = "2026-06-12T20:02:12.524Z" }, + { url = "https://files.pythonhosted.org/packages/d7/70/2ba3769dd0ae167e2f33dfa9592d45db6ff9a61d62ca1a5b3d1bdd09068f/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b39efa323140595abd3ecca8529d321ae50f55f3aa3ba9cc81ea56a6011953d5", size = 4715584, upload-time = "2026-06-12T20:01:27.495Z" }, + { url = "https://files.pythonhosted.org/packages/ab/f8/614dc7e051418cfe53d55173c1e24c6b0085e89996fe90508c2fdf769aef/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:084ef1af862eb07ec46d25f68689f2102a9fc0e05ce7b80f14f5fe51e4eef0f6", size = 4715449, upload-time = "2026-06-12T20:02:05.469Z" }, +] + +[[package]] +name = "cuda-bindings" +version = "13.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-pathfinder", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/7a/c5e3c34a409b148f5c0f5a4ea374158f95d488862c1dffedf9aa5c639df9/cuda_bindings-13.3.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04436a9364059c84b8f9636f359eccda1cf814341f5b670c71d80d2f79dbc708", size = 6674166, upload-time = "2026-05-29T23:11:45.478Z" }, +] + +[[package]] +name = "cuda-core" +version = "1.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pydantic" }, - { name = "srsly" }, + { name = "cuda-pathfinder", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/55/bb3e701f4af504e5e39e837135dc80022ec4c84858b2886ad577fe696a77/cuda_core-1.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1934517ff8a9dcd21b3f4a28e15e12643164b7d3ec187a4ee7560e22fd2dfc17", size = 5059041, upload-time = "2026-05-12T20:11:26.045Z" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/51/d3/57c6631159a1b48d273b40865c315cf51f89df7a9d1101094ef12e3a37c2/confection-0.1.5.tar.gz", hash = "sha256:8e72dd3ca6bd4f48913cd220f10b8275978e740411654b6e8ca6d7008c590f0e", size = 38924, upload-time = "2024-05-31T16:17:01.559Z" } + +[[package]] +name = "cuda-pathfinder" +version = "1.5.5" +source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/00/3106b1854b45bd0474ced037dfe6b73b90fe68a68968cef47c23de3d43d2/confection-0.1.5-py3-none-any.whl", hash = "sha256:e29d3c3f8eac06b3f77eb9dfb4bf2fc6bcc9622a98ca00a698e3d019c6430b14", size = 35451, upload-time = "2024-05-31T16:16:59.075Z" }, + { url = "https://files.pythonhosted.org/packages/11/c8/26f2e4aae92f11522a96043892ba39a90eac610d5242523aa863212bc1c7/cuda_pathfinder-1.5.5-py3-none-any.whl", hash = "sha256:0228c023f95d1480f143ef5c8922d27a2ab052087a942e81dc289c9eb8f91689", size = 51671, upload-time = "2026-05-27T01:21:25.413Z" }, ] [[package]] -name = "cupy-cuda12x" -version = "13.6.0" +name = "cuda-python" +version = "13.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "fastrlock", marker = "sys_platform != 'darwin'" }, - { name = "numpy", marker = "sys_platform != 'darwin'" }, + { name = "cuda-bindings", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "cuda-core", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "cuda-pathfinder", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/2e/db22c5148884e4e384f6ebbc7971fa3710f3ba67ca492798890a0fdebc45/cupy_cuda12x-13.6.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:9e37f60f27ff9625dfdccc4688a09852707ec613e32ea9404f425dd22a386d14", size = 126341714, upload-time = "2025-08-18T08:24:08.335Z" }, - { url = "https://files.pythonhosted.org/packages/53/2b/8064d94a6ab6b5c4e643d8535ab6af6cabe5455765540931f0ef60a0bc3b/cupy_cuda12x-13.6.0-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:e78409ea72f5ac7d6b6f3d33d99426a94005254fa57e10617f430f9fd7c3a0a1", size = 112238589, upload-time = "2025-08-18T08:24:15.541Z" }, - { url = "https://files.pythonhosted.org/packages/de/7b/bac3ca73e164d2b51c6298620261637c7286e06d373f597b036fc45f5563/cupy_cuda12x-13.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f33c9c975782ef7a42c79b6b4fb3d5b043498f9b947126d792592372b432d393", size = 89874119, upload-time = "2025-08-18T08:24:20.628Z" }, - { url = "https://files.pythonhosted.org/packages/54/64/71c6e08f76c06639e5112f69ee3bc1129be00054ad5f906d7fd3138af579/cupy_cuda12x-13.6.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:c790d012fd4d86872b9c89af9f5f15d91c30b8e3a4aa4dd04c2610f45f06ac44", size = 128016458, upload-time = "2025-08-18T08:24:26.394Z" }, - { url = "https://files.pythonhosted.org/packages/fc/d9/5c5077243cd92368c3eccecdbf91d76db15db338169042ffd1647533c6b1/cupy_cuda12x-13.6.0-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:77ba6745a130d880c962e687e4e146ebbb9014f290b0a80dbc4e4634eb5c3b48", size = 113039337, upload-time = "2025-08-18T08:24:31.814Z" }, - { url = "https://files.pythonhosted.org/packages/88/f5/02bea5cdf108e2a66f98e7d107b4c9a6709e5dbfedf663340e5c11719d83/cupy_cuda12x-13.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:a20b7acdc583643a623c8d8e3efbe0db616fbcf5916e9c99eedf73859b6133af", size = 89885526, upload-time = "2025-08-18T08:24:37.258Z" }, + { url = "https://files.pythonhosted.org/packages/38/31/7ff3f7768eded7535c621abc2fecb9d181a34ea4cae3afe682feb796f242/cuda_python-13.3.1-py3-none-any.whl", hash = "sha256:280b014139ab447b6dd70a377db1596f310d6e887d9d342e6651b919ec145fb3", size = 8295, upload-time = "2026-05-29T23:28:47.012Z" }, ] [[package]] -name = "cymem" -version = "2.0.13" +name = "cuda-tile" +version = "1.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/2f0fbb32535c3731b7c2974c569fb9325e0a38ed5565a08e1139a3b71e82/cymem-2.0.13.tar.gz", hash = "sha256:1c91a92ae8c7104275ac26bd4d29b08ccd3e7faff5893d3858cb6fadf1bc1588", size = 12320, upload-time = "2025-11-14T14:58:36.902Z" } +dependencies = [ + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/14/462018dd384ee1848ac9c1951534a813a325abbfc161a74e2cbcb38d2469/cymem-2.0.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8efc4f308169237aade0e82877a65a563833dec32eb7ab2326120253e0e9e918", size = 43747, upload-time = "2025-11-14T14:57:11.287Z" }, - { url = "https://files.pythonhosted.org/packages/4b/9b/c123ba65dddcd8a2bc0b3c9046766c15abe0e257c315b3040eed22cce1e2/cymem-2.0.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e03bb575a96c59bc210d7d59862747f0012696b0dac3427ce8af33c7afb3d4a2", size = 43328, upload-time = "2025-11-14T14:57:12.578Z" }, - { url = "https://files.pythonhosted.org/packages/bd/be/7b7a4cf9cd2d37e674612a86fc90b3d59bff12177f83430e62b25afaf7fc/cymem-2.0.13-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1775d3fd34cf099929b79c3e48469283642463f977af6801231f3c0e5d9c9369", size = 231539, upload-time = "2025-11-14T14:57:14.441Z" }, - { url = "https://files.pythonhosted.org/packages/79/6d/d165c38cd4caaaf60942e2cec9998b667008f2384047ccfe0b4b5f7a1ffe/cymem-2.0.13-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:84e2976e38cd663f758e40b5497fa5cd183d7c5fb0d04ce81a4b42a1ba124ff0", size = 229674, upload-time = "2025-11-14T14:57:15.685Z" }, - { url = "https://files.pythonhosted.org/packages/95/c1/af83c03a93f890ca81149561b18a4a67a9aa36a1109f15e291dd2703ab12/cymem-2.0.13-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed9de1b9b042f76fe5c312e4359eab58bf52ac7dfdf6887368a760410d809440", size = 229805, upload-time = "2025-11-14T14:57:17.289Z" }, - { url = "https://files.pythonhosted.org/packages/03/2d/12900758b80345d9aed5892a9d61e8a5f6abbbe5837e4def373a53cd0da2/cymem-2.0.13-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1366c7437a209230f4b797fae10227a8206d4021d37c9f9c0d31fd97ea4feb35", size = 234018, upload-time = "2025-11-14T14:57:18.512Z" }, - { url = "https://files.pythonhosted.org/packages/a6/8b/5fcf5430fc81098aef58cc20340e51f37b49b9d8c15766e0d5d63e7288a3/cymem-2.0.13-cp310-cp310-win_amd64.whl", hash = "sha256:7700b116524b087e0169f10f267539223b48240ef2734c3a727a9e6b4db9a671", size = 40102, upload-time = "2025-11-14T14:57:19.972Z" }, - { url = "https://files.pythonhosted.org/packages/0d/d3/cb6c83758fe399443b858faafb7096b72535621a7af7dd9a54ff0989fa14/cymem-2.0.13-cp310-cp310-win_arm64.whl", hash = "sha256:c8dbfddfe5c604974e17c6f373cedd4d25cd67f84812ede7dea12128fa0c2015", size = 36282, upload-time = "2025-11-14T14:57:21.398Z" }, - { url = "https://files.pythonhosted.org/packages/10/64/1db41f7576a6b69f70367e3c15e968fd775ba7419e12059c9966ceb826f8/cymem-2.0.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:673183466b0ff2e060d97ec5116711d44200b8f7be524323e080d215ee2d44a5", size = 43587, upload-time = "2025-11-14T14:57:22.39Z" }, - { url = "https://files.pythonhosted.org/packages/81/13/57f936fc08551323aab3f92ff6b7f4d4b89d5b4e495c870a67cb8d279757/cymem-2.0.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bee2791b3f6fc034ce41268851462bf662ff87e8947e35fb6dd0115b4644a61f", size = 43139, upload-time = "2025-11-14T14:57:23.363Z" }, - { url = "https://files.pythonhosted.org/packages/32/a6/9345754be51e0479aa387b7b6cffc289d0fd3201aaeb8dade4623abd1e02/cymem-2.0.13-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f3aee3adf16272bca81c5826eed55ba3c938add6d8c9e273f01c6b829ecfde22", size = 245063, upload-time = "2025-11-14T14:57:24.839Z" }, - { url = "https://files.pythonhosted.org/packages/d6/01/6bc654101526fa86e82bf6b05d99b2cd47c30a333cfe8622c26c0592beb2/cymem-2.0.13-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:30c4e75a3a1d809e89106b0b21803eb78e839881aa1f5b9bd27b454bc73afde3", size = 244496, upload-time = "2025-11-14T14:57:26.42Z" }, - { url = "https://files.pythonhosted.org/packages/c4/fb/853b7b021e701a1f41687f3704d5f469aeb2a4f898c3fbb8076806885955/cymem-2.0.13-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec99efa03cf8ec11c8906aa4d4cc0c47df393bc9095c9dd64b89b9b43e220b04", size = 243287, upload-time = "2025-11-14T14:57:27.542Z" }, - { url = "https://files.pythonhosted.org/packages/d4/2b/0e4664cafc581de2896d75000651fd2ce7094d33263f466185c28ffc96e4/cymem-2.0.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c90a6ecba994a15b17a3f45d7ec74d34081df2f73bd1b090e2adc0317e4e01b6", size = 248287, upload-time = "2025-11-14T14:57:29.055Z" }, - { url = "https://files.pythonhosted.org/packages/21/0f/f94c6950edbfc2aafb81194fc40b6cacc8e994e9359d3cb4328c5705b9b5/cymem-2.0.13-cp311-cp311-win_amd64.whl", hash = "sha256:ce821e6ba59148ed17c4567113b8683a6a0be9c9ac86f14e969919121efb61a5", size = 40116, upload-time = "2025-11-14T14:57:30.592Z" }, - { url = "https://files.pythonhosted.org/packages/00/df/2455eff6ac0381ff165db6883b311f7016e222e3dd62185517f8e8187ed0/cymem-2.0.13-cp311-cp311-win_arm64.whl", hash = "sha256:0dca715e708e545fd1d97693542378a00394b20a37779c1ae2c8bdbb43acef79", size = 36349, upload-time = "2025-11-14T14:57:31.573Z" }, + { url = "https://files.pythonhosted.org/packages/c5/2d/8b416239413bf11d17d42ccee43258f3787da13bcea7b2e42e8bbf04b3da/cuda_tile-1.3.0-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:2888d6b89fae053a53ca7bb703c508a5cf90671d266934573c5b6c25978022c4", size = 246706, upload-time = "2026-04-20T15:51:03.467Z" }, +] + +[package.optional-dependencies] +tileiras = [ + { name = "nvidia-cuda-nvcc", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-tileiras", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvvm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] -name = "cython" -version = "3.0.11" +name = "cuda-toolkit" +version = "13.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/84/4d/b720d6000f4ca77f030bd70f12550820f0766b568e43f11af7f7ad9061aa/cython-3.0.11.tar.gz", hash = "sha256:7146dd2af8682b4ca61331851e6aebce9fe5158e75300343f80c07ca80b1faff", size = 2755544, upload-time = "2024-08-05T15:03:02.254Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/7f/ab5796a0951328d7818b771c36fe7e1a2077cffa28c917d9fa4a642728c3/Cython-3.0.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:44292aae17524abb4b70a25111fe7dec1a0ad718711d47e3786a211d5408fdaa", size = 3100879, upload-time = "2024-08-05T15:03:18.806Z" }, - { url = "https://files.pythonhosted.org/packages/d8/3b/67480e609537e9fc899864847910ded481b82d033fea1b7fcf85893a2fc4/Cython-3.0.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75d45fbc20651c1b72e4111149fed3b33d270b0a4fb78328c54d965f28d55e1", size = 3461957, upload-time = "2024-08-05T15:03:22.856Z" }, - { url = "https://files.pythonhosted.org/packages/f0/89/b1ae45689abecca777f95462781a76e67ff46b55495a481ec5a73a739994/Cython-3.0.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d89a82937ce4037f092e9848a7bbcc65bc8e9fc9aef2bb74f5c15e7d21a73080", size = 3627062, upload-time = "2024-08-05T15:03:26.222Z" }, - { url = "https://files.pythonhosted.org/packages/44/77/a651da74d5d41c6045bbe0b6990b1515bf4850cd7a8d8580333c90dfce2e/Cython-3.0.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a8ea2e7e2d3bc0d8630dafe6c4a5a89485598ff8a61885b74f8ed882597efd5", size = 3680431, upload-time = "2024-08-05T15:03:29.408Z" }, - { url = "https://files.pythonhosted.org/packages/59/45/60e7e8db93c3eb8b2af8c64020c1fa502e355f4b762886a24d46e433f395/Cython-3.0.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cee29846471ce60226b18e931d8c1c66a158db94853e3e79bc2da9bd22345008", size = 3497314, upload-time = "2024-08-05T15:03:38.891Z" }, - { url = "https://files.pythonhosted.org/packages/f8/0b/6919025958926625319f83523ee7f45e7e7ae516b8054dcff6eb710daf32/Cython-3.0.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eeb6860b0f4bfa402de8929833fe5370fa34069c7ebacb2d543cb017f21fb891", size = 3709091, upload-time = "2024-08-05T15:03:42.761Z" }, - { url = "https://files.pythonhosted.org/packages/52/3c/c21b9b9271dfaa46fa2938de730f62fc94b9c2ec25ec400585e372f35dcd/Cython-3.0.11-cp310-cp310-win32.whl", hash = "sha256:3699391125ab344d8d25438074d1097d9ba0fb674d0320599316cfe7cf5f002a", size = 2576110, upload-time = "2024-08-05T15:03:45.584Z" }, - { url = "https://files.pythonhosted.org/packages/f9/de/19fdd1c7a52e0534bf5f544e0346c15d71d20338dbd013117f763b94613f/Cython-3.0.11-cp310-cp310-win_amd64.whl", hash = "sha256:d02f4ebe15aac7cdacce1a628e556c1983f26d140fd2e0ac5e0a090e605a2d38", size = 2776386, upload-time = "2024-08-05T15:03:48.982Z" }, - { url = "https://files.pythonhosted.org/packages/f8/73/e55be864199cd674cb3426a052726c205589b1ac66fb0090e7fe793b60b3/Cython-3.0.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75ba1c70b6deeaffbac123856b8d35f253da13552207aa969078611c197377e4", size = 3113599, upload-time = "2024-08-05T15:03:52.416Z" }, - { url = "https://files.pythonhosted.org/packages/09/c9/537108d0980beffff55336baaf8b34162ad0f3f33ededcb5db07069bc8ef/Cython-3.0.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af91497dc098718e634d6ec8f91b182aea6bb3690f333fc9a7777bc70abe8810", size = 3441131, upload-time = "2024-08-05T15:03:56.138Z" }, - { url = "https://files.pythonhosted.org/packages/93/03/e330b241ad8aa12bb9d98b58fb76d4eb7dcbe747479aab5c29fce937b9e7/Cython-3.0.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3999fb52d3328a6a5e8c63122b0a8bd110dfcdb98dda585a3def1426b991cba7", size = 3595065, upload-time = "2024-08-05T15:03:59.174Z" }, - { url = "https://files.pythonhosted.org/packages/4a/84/a3c40f2c0439d425daa5aa4e3a6fdbbb41341a14a6fd97f94906f528d9a4/Cython-3.0.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d566a4e09b8979be8ab9f843bac0dd216c81f5e5f45661a9b25cd162ed80508c", size = 3641667, upload-time = "2024-08-05T15:04:02.719Z" }, - { url = "https://files.pythonhosted.org/packages/6d/93/bdb61e0254ed8f1d21a14088a473584ecb1963d68dba5682158aa45c70ef/Cython-3.0.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:46aec30f217bdf096175a1a639203d44ac73a36fe7fa3dd06bd012e8f39eca0f", size = 3503650, upload-time = "2024-08-05T15:04:07.434Z" }, - { url = "https://files.pythonhosted.org/packages/f8/62/0da548144c71176155ff5355c4cc40fb28b9effe22e830b55cec8072bdf2/Cython-3.0.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ddd1fe25af330f4e003421636746a546474e4ccd8f239f55d2898d80983d20ed", size = 3709662, upload-time = "2024-08-05T15:04:10.99Z" }, - { url = "https://files.pythonhosted.org/packages/56/d3/d9c9eaf3611a9fe5256266d07b6a5f9069aa84d20d9f6aa5824289513315/Cython-3.0.11-cp311-cp311-win32.whl", hash = "sha256:221de0b48bf387f209003508e602ce839a80463522fc6f583ad3c8d5c890d2c1", size = 2577870, upload-time = "2024-08-05T15:04:14.693Z" }, - { url = "https://files.pythonhosted.org/packages/fd/10/236fcc0306f85a2db1b8bc147aea714b66a2f27bac4d9e09e5b2c5d5dcca/Cython-3.0.11-cp311-cp311-win_amd64.whl", hash = "sha256:3ff8ac1f0ecd4f505db4ab051e58e4531f5d098b6ac03b91c3b902e8d10c67b3", size = 2785053, upload-time = "2024-08-05T15:04:18.058Z" }, - { url = "https://files.pythonhosted.org/packages/43/39/bdbec9142bc46605b54d674bf158a78b191c2b75be527c6dcf3e6dfe90b8/Cython-3.0.11-py2.py3-none-any.whl", hash = "sha256:0e25f6425ad4a700d7f77cd468da9161e63658837d1bc34861a9861a4ef6346d", size = 1171267, upload-time = "2024-08-05T15:02:57.729Z" }, + { url = "https://files.pythonhosted.org/packages/57/b2/453099f5f3b698d7d0eab38916aac44c7f76229f451709e2eb9db6615dcd/cuda_toolkit-13.0.2-py2.py3-none-any.whl", hash = "sha256:b198824cf2f54003f50d64ada3a0f184b42ca0846c1c94192fa269ecd97a66eb", size = 2364, upload-time = "2025-12-19T23:24:07.328Z" }, +] + +[package.optional-dependencies] +cublas = [ + { name = "nvidia-cublas", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +cudart = [ + { name = "nvidia-cuda-runtime", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +cufft = [ + { name = "nvidia-cufft", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +cufile = [ + { name = "nvidia-cufile", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +cupti = [ + { name = "nvidia-cuda-cupti", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +curand = [ + { name = "nvidia-curand", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +cusolver = [ + { name = "nvidia-cusolver", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +cusparse = [ + { name = "nvidia-cusparse", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +nvjitlink = [ + { name = "nvidia-nvjitlink", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +nvrtc = [ + { name = "nvidia-cuda-nvrtc", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +nvtx = [ + { name = "nvidia-nvtx", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] -name = "dataclasses-json" -version = "0.6.7" +name = "cyclonedx-python-lib" +version = "11.11.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "marshmallow" }, - { name = "typing-inspect" }, + { name = "license-expression", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "packageurl-python", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "py-serializable", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "sortedcontainers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/64/a4/f71d9cf3a5ac257c993b5ca3f93df5f7fb395c725e7f1e6479d2514173c3/dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0", size = 32227, upload-time = "2024-06-09T16:20:19.103Z" } +sdist = { url = "https://files.pythonhosted.org/packages/75/c9/5d0ccdd19bc7d8ab803b90695c1706aa2ea8529685d18e682dc2524d2630/cyclonedx_python_lib-11.11.0.tar.gz", hash = "sha256:4b3194db72b613717f2912447e67ab618c75ff7dcac6c4af3c0e9e1ac617c102", size = 1442983, upload-time = "2026-06-17T11:57:49.055Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/be/d0d44e092656fe7a06b55e6103cbce807cdbdee17884a5367c68c9860853/dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a", size = 28686, upload-time = "2024-06-09T16:20:16.715Z" }, + { url = "https://files.pythonhosted.org/packages/22/f3/56ccb2884aaa3db5622368e5191a3384b15f35392aa93df8b2f508c660d2/cyclonedx_python_lib-11.11.0-py3-none-any.whl", hash = "sha256:3049fc83e06a059b5c5907a527625a8ed5073caab10607ed4c9e5503b590fd44", size = 528689, upload-time = "2026-06-17T11:57:47.358Z" }, ] [[package]] name = "datasets" -version = "2.19.0" +version = "4.8.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "filelock", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "fsspec", extra = ["http"], marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "httpx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "huggingface-hub", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "multiprocess", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pandas", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyarrow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "xxhash", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/34/14cd8e76f907f7d4dca2334cfeec9f81d30fd15c25a015f99aaea694eaed/datasets-4.8.5.tar.gz", hash = "sha256:0f0c1c3d56ffff2c93b2f4c63c95bac94f3d7e8621aea2a2a576275233bba772", size = 605649, upload-time = "2026-04-27T15:43:57.384Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/99/00f3196036501b53032c4b1ab8337a0b978dee832ed276dae3815df4e8b5/datasets-4.8.5-py3-none-any.whl", hash = "sha256:5079900781719c0e063a8efdd2cd95a31ad0c63209178669cd23cf1b926149ff", size = 528973, upload-time = "2026-04-27T15:43:53.702Z" }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload-time = "2021-03-08T10:59:26.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, +] + +[[package]] +name = "deprecation" +version = "2.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiohttp" }, - { name = "dill" }, - { name = "filelock" }, - { name = "fsspec", extra = ["http"] }, - { name = "huggingface-hub" }, - { name = "multiprocess" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pandas" }, - { name = "pyarrow" }, - { name = "pyarrow-hotfix" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "tqdm" }, - { name = "xxhash" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d3/ad/b177295f7bcf2c9d5e3fde29041c00378d50561e43de6fb7e4526e6861f3/datasets-2.19.0.tar.gz", hash = "sha256:0b47e08cc7af2c6800a42cadc4657b22a0afc7197786c8986d703c08d90886a6", size = 2215040, upload-time = "2024-04-19T08:44:29.992Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788, upload-time = "2020-04-20T14:23:38.738Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/89/a9/8e097f79d2941a2f96e33f57032957429a79f66c8252ac7fcce586a43406/datasets-2.19.0-py3-none-any.whl", hash = "sha256:f57c5316e123d4721b970c68c1cb856505f289cda58f5557ffe745b49c011a8e", size = 542018, upload-time = "2024-04-19T08:43:05.722Z" }, + { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178, upload-time = "2020-04-20T14:23:36.581Z" }, ] [[package]] name = "depyf" -version = "0.19.0" +version = "0.20.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "astor" }, - { name = "dill" }, + { name = "astor", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "dill", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/19/38/69157d711be575f1b9cf3177b64ef4ade44373fc02839f183fdd98ec2dd6/depyf-0.19.0.tar.gz", hash = "sha256:afed0916b32d141cc90fa6220df01885eda442ca43b297d5050eeb90b4a5cb44", size = 6171405, upload-time = "2025-04-20T08:07:41.224Z" } +sdist = { url = "https://files.pythonhosted.org/packages/88/35/83fb0178212279aa0af031031905804c6de5618435d229f41ed21bb9ad2c/depyf-0.20.0.tar.gz", hash = "sha256:fb7683bd72c44f67b56029df2c47721e9a02ffa4d7b19095f1c54c4ebf797a98", size = 6168761, upload-time = "2025-10-13T12:33:38.589Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/28/4d/1192acbcdc5e843f5e5d51f6e8788f2b60a9fe0b578ac385ded67a0b0b26/depyf-0.19.0-py3-none-any.whl", hash = "sha256:040b35fc0997d49df024b7d094f2a7836f91e9ed02f49982dd37e70aa3285ad5", size = 39034, upload-time = "2025-04-20T08:07:37.036Z" }, + { url = "https://files.pythonhosted.org/packages/cf/65/4df6936130b56e1429114e663e7c1576cf845f3aef1b2dd200c0a5d19dba/depyf-0.20.0-py3-none-any.whl", hash = "sha256:d31effad4261cebecb58955d832e448ace88f432328f95f82fd99c30fd9308d4", size = 39381, upload-time = "2025-10-13T12:33:33.647Z" }, ] [[package]] @@ -578,6 +562,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3f/27/4570e78fc0bf5ea0ca45eb1de3818a23787af9b390c0b0a0033a1b8236f9/diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19", size = 45550, upload-time = "2023-08-31T06:11:58.822Z" }, ] +[[package]] +name = "distlib" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/02/bd72be9134d25ed783ecbbc38a539ffaefbf90c78418c7fb7229600dbac7/distlib-0.4.3.tar.gz", hash = "sha256:f152097224a0ae24be5a0f6bae1b9359af82133bce63f98a95f86cae1aede9ed", size = 615141, upload-time = "2026-06-12T08:04:52.847Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl", hash = "sha256:4b0ce306c966eb73bc3a7b6abad017c556dadd92c44701562cd528ac7fde4d5b", size = 470628, upload-time = "2026-06-12T08:04:50.506Z" }, +] + [[package]] name = "distro" version = "1.9.0" @@ -597,37 +590,21 @@ wheels = [ ] [[package]] -name = "einops" -version = "0.8.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/ca/9f5dcb8bead39959454c3912266bedc4c315839cee0e0ca9f4328f4588c1/einops-0.8.0.tar.gz", hash = "sha256:63486517fed345712a8385c100cb279108d9d47e6ae59099b07657e983deae85", size = 58861, upload-time = "2024-04-28T04:07:48.041Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/44/5a/f0b9ad6c0a9017e62d4735daaeb11ba3b6c009d69a26141b258cd37b5588/einops-0.8.0-py3-none-any.whl", hash = "sha256:9572fb63046264a862693b0a87088af3bdc8c068fde03de63453cbbde245465f", size = 43223, upload-time = "2024-04-28T04:07:49.718Z" }, -] - -[[package]] -name = "elastic-transport" -version = "8.17.1" +name = "docstring-parser" +version = "0.18.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6a/54/d498a766ac8fa475f931da85a154666cc81a70f8eb4a780bc8e4e934e9ac/elastic_transport-8.17.1.tar.gz", hash = "sha256:5edef32ac864dca8e2f0a613ef63491ee8d6b8cfb52881fa7313ba9290cac6d2", size = 73425, upload-time = "2025-03-13T07:28:30.776Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/4d/f332313098c1de1b2d2ff91cf2674415cc7cddab2ca1b01ae29774bd5fdf/docstring_parser-0.18.0.tar.gz", hash = "sha256:292510982205c12b1248696f44959db3cdd1740237a968ea1e2e7a900eeb2015", size = 29341, upload-time = "2026-04-14T04:09:19.867Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/cd/b71d5bc74cde7fc6fd9b2ff9389890f45d9762cbbbf81dc5e51fd7588c4a/elastic_transport-8.17.1-py3-none-any.whl", hash = "sha256:192718f498f1d10c5e9aa8b9cf32aed405e469a7f0e9d6a8923431dbb2c59fb8", size = 64969, upload-time = "2025-03-13T07:28:29.031Z" }, + { url = "https://files.pythonhosted.org/packages/a7/5f/ed01f9a3cdffbd5a008556fc7b2a08ddb1cc6ace7effa7340604b1d16699/docstring_parser-0.18.0-py3-none-any.whl", hash = "sha256:b3fcbed555c47d8479be0796ef7e19c2670d428d72e96da63f3a40122860374b", size = 22484, upload-time = "2026-04-14T04:09:18.638Z" }, ] [[package]] -name = "elasticsearch" -version = "8.17.2" +name = "einops" +version = "0.8.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "elastic-transport" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5b/3d/f563e58f45d23565c0d0316a565638ce312f536b882a3281b8047fb4a58f/elasticsearch-8.17.2.tar.gz", hash = "sha256:ff7f1db8aeefd87ceba4edce3aa4070994582e6cf029d2e67b74e66d634509db", size = 602691, upload-time = "2025-03-04T12:14:27.382Z" } +sdist = { url = "https://files.pythonhosted.org/packages/79/ca/9f5dcb8bead39959454c3912266bedc4c315839cee0e0ca9f4328f4588c1/einops-0.8.0.tar.gz", hash = "sha256:63486517fed345712a8385c100cb279108d9d47e6ae59099b07657e983deae85", size = 58861, upload-time = "2024-04-28T04:07:48.041Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/50/16306f4722ca2fcb64a5875bc1fa9b4d0bcb08c05967f60c23acd4cbb019/elasticsearch-8.17.2-py3-none-any.whl", hash = "sha256:2d058dcddd8f2686cd431a916cdf983f9fb7d211d902834f564ab7df05ba6478", size = 717971, upload-time = "2025-03-04T12:14:23.843Z" }, + { url = "https://files.pythonhosted.org/packages/44/5a/f0b9ad6c0a9017e62d4735daaeb11ba3b6c009d69a26141b258cd37b5588/einops-0.8.0-py3-none-any.whl", hash = "sha256:9572fb63046264a862693b0a87088af3bdc8c068fde03de63453cbbde245465f", size = 43223, upload-time = "2024-04-28T04:07:49.718Z" }, ] [[package]] @@ -635,74 +612,41 @@ name = "email-validator" version = "2.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "dnspython" }, - { name = "idna" }, + { name = "dnspython", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "idna", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f5/22/900cb125c76b7aaa450ce02fd727f452243f2e91a61af068b40adba60ea9/email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426", size = 51238, upload-time = "2025-08-26T13:09:06.831Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" }, ] -[[package]] -name = "exceptiongroup" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, -] - -[[package]] -name = "faiss-cpu" -version = "1.9.0.post1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "packaging" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/62/85/ee4bafafa70bc99904a61f06e7f5e36d06ab6b37335e687085786f9a248d/faiss_cpu-1.9.0.post1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:e18602465f5a96c3c973ab440f9263a0881034fb54810be20bc8cdb8b069456d", size = 7672124, upload-time = "2024-11-20T02:20:02.33Z" }, - { url = "https://files.pythonhosted.org/packages/c3/99/50496057d52241a77f0d2a021a73b97f25f6500c6f02a584a7b3d43c3e3f/faiss_cpu-1.9.0.post1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5dddeecdb68fb95b4a3343a6ff89498fd7c222726706538f360132bfe3d8aebe", size = 3225595, upload-time = "2024-11-20T02:20:04.341Z" }, - { url = "https://files.pythonhosted.org/packages/67/40/df08ba3d25f4c0b1625d811cfc82fe33e64f8b918b45aedd5ca17eea23e7/faiss_cpu-1.9.0.post1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15d2d7e522e6d55dbf14e57fcac1d38d62c95479b847562004f9e7c97c139ee8", size = 3641904, upload-time = "2024-11-20T02:20:06.603Z" }, - { url = "https://files.pythonhosted.org/packages/32/1c/f5a7eba839063100df3187fc5c24467f7ab2bee3c21c91e67bab3cf123c5/faiss_cpu-1.9.0.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86ffbbb1ec9ae503df1fcdfd5c3a8594d8b76fb4b8ebf0a697c1492f1f9cec1a", size = 27475012, upload-time = "2024-11-20T02:20:08.657Z" }, - { url = "https://files.pythonhosted.org/packages/b5/02/0b9d131198b916a94d277689d60da0d20a414578ac83c0ddca336b6cf7c6/faiss_cpu-1.9.0.post1-cp310-cp310-win_amd64.whl", hash = "sha256:29cae0dfa6c286c043d45572a39288f5a56ffb694a20a90c6946018241002d90", size = 13843859, upload-time = "2024-11-20T02:20:11.299Z" }, - { url = "https://files.pythonhosted.org/packages/b8/4f/cf04c3e3d9af3a3a6c9537b3e878246516f85333e578118fc460acb205a3/faiss_cpu-1.9.0.post1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:7ef0c81a798a64fc932e15d560ddc01021df9ed70b678367aec6e01f39d075c1", size = 7672129, upload-time = "2024-11-20T02:20:14.872Z" }, - { url = "https://files.pythonhosted.org/packages/a6/9d/eaba10de74cd7fad91174a49481327eaf61fe80a2ad1e4ad16594256bf9d/faiss_cpu-1.9.0.post1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:783f545c3999909164a975b97d99749b244b62651ce976ee76b8a171c62e827d", size = 3225597, upload-time = "2024-11-20T02:20:16.54Z" }, - { url = "https://files.pythonhosted.org/packages/d1/9c/b74d115031b9ab664c47e58ac7853667d90f73c1987dea739669a49d95b9/faiss_cpu-1.9.0.post1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c0408261ed85d0bd8e30716a3fd441d0c51a5563cf3a795a488eab9c492ea33", size = 3641862, upload-time = "2024-11-20T02:20:18.121Z" }, - { url = "https://files.pythonhosted.org/packages/e4/9c/aed8b7c6c490c777c404131b3f6a68e4924fbc149620dc6d6a3563435371/faiss_cpu-1.9.0.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7068e14e8f557659c68bdf4d511571630721e1502efa87a70fe44023f3741645", size = 27474906, upload-time = "2024-11-20T02:20:21.174Z" }, - { url = "https://files.pythonhosted.org/packages/23/f6/b4d024a4afc006ff85a5fd19785e0da55e470a040692a83ea6a1fb51ac16/faiss_cpu-1.9.0.post1-cp311-cp311-win_amd64.whl", hash = "sha256:274a66868a498687641faf964f6eddbe70ccb5bee56239862ee0aa079415779e", size = 13843611, upload-time = "2024-11-20T02:20:24.593Z" }, -] - [[package]] name = "fastapi" -version = "0.137.2" +version = "0.136.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "annotated-doc" }, - { name = "pydantic" }, - { name = "starlette" }, - { name = "typing-extensions" }, - { name = "typing-inspection" }, + { name = "annotated-doc", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "starlette", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-inspection", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e2/29/cc5819dc24d3daa80cdaa1aec023bf8652a70dd7fd1c96b0b225c99a7690/fastapi-0.137.2.tar.gz", hash = "sha256:b9d893bebc97dcfbdcb1917e88a292d062844ea19445a5fa4f7eb28c4baea9e3", size = 410332, upload-time = "2026-06-18T06:58:24.434Z" } +sdist = { url = "https://files.pythonhosted.org/packages/81/2d/ff8d91d7b564d464629a0fd50a4489c97fcb836ac230bf3a7269232a9b1f/fastapi-0.136.3.tar.gz", hash = "sha256:e487fae93ad408e6f47641ee4dfe389864fd7bec92e547ea8498fc13f43e83ab", size = 396410, upload-time = "2026-05-23T18:53:15.192Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/ed/0c6b644e99fb5697d8bdcd36cdb47c52e77a63fc7a1514b1f03a6ecab955/fastapi-0.137.2-py3-none-any.whl", hash = "sha256:791d36261e916a98b25ac85ee591bc3db159394070f6d3d096d94fb378f60ce2", size = 122252, upload-time = "2026-06-18T06:58:26.074Z" }, + { url = "https://files.pythonhosted.org/packages/e0/82/45359b62a067409bd929ae8a56b8ed13e5a8c8a61194b3c236920999ab83/fastapi-0.136.3-py3-none-any.whl", hash = "sha256:3d2a69bdf04b7e9f3afa292c3bc7a98816bbfafa10bc9b45f3f3700d2f761620", size = 117481, upload-time = "2026-05-23T18:53:16.924Z" }, ] [package.optional-dependencies] standard = [ - { name = "email-validator" }, - { name = "fastapi-cli", extra = ["standard"] }, - { name = "fastar" }, - { name = "httpx" }, - { name = "jinja2" }, - { name = "pydantic-extra-types" }, - { name = "pydantic-settings" }, - { name = "python-multipart" }, - { name = "uvicorn", extra = ["standard"] }, + { name = "email-validator", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "fastapi-cli", extra = ["standard"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "fastar", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "httpx", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "jinja2", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic-extra-types", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic-settings", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "python-multipart", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "uvicorn", extra = ["standard"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] @@ -710,10 +654,9 @@ name = "fastapi-cli" version = "0.0.27" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "rich-toolkit" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, - { name = "typer" }, - { name = "uvicorn", extra = ["standard"] }, + { name = "rich-toolkit", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typer", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "uvicorn", extra = ["standard"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/37/d0/ee5678346811967b8d096d5d5604e71b50d6bf5a2abfbdb331157e2bbaa9/fastapi_cli-0.0.27.tar.gz", hash = "sha256:1dffb1e40c0c88f2e0171a8a252a2b615c1e63ff8c05626649e4badd6a84336a", size = 23630, upload-time = "2026-06-18T14:48:43.421Z" } wheels = [ @@ -722,8 +665,8 @@ wheels = [ [package.optional-dependencies] standard = [ - { name = "fastapi-cloud-cli" }, - { name = "uvicorn", extra = ["standard"] }, + { name = "fastapi-cloud-cli", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "uvicorn", extra = ["standard"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] @@ -731,15 +674,15 @@ name = "fastapi-cloud-cli" version = "0.20.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "detect-installer" }, - { name = "fastar" }, - { name = "httpx" }, - { name = "pydantic", extra = ["email"] }, - { name = "rich-toolkit" }, - { name = "rignore" }, - { name = "sentry-sdk" }, - { name = "typer" }, - { name = "uvicorn", extra = ["standard"] }, + { name = "detect-installer", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "fastar", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "httpx", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", extra = ["email"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "rich-toolkit", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "rignore", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "sentry-sdk", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typer", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "uvicorn", extra = ["standard"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ad/bf/97d19633c6ec6fb0ef59df474b9705ea992f7b4f879208d0007ac6d25ab6/fastapi_cloud_cli-0.20.0.tar.gz", hash = "sha256:9681c46adcd299024d0775658bd5d88992fd35c4ad42b1f045c6df913390ba37", size = 85904, upload-time = "2026-06-11T17:41:02.814Z" } wheels = [ @@ -752,72 +695,22 @@ version = "0.11.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/03/0f/0aeb3fc50046617702acc0078b277b58367fd62eb727b9ec733ae0e8bbcc/fastar-0.11.0.tar.gz", hash = "sha256:aa7f100f7313c03fdb20f1385927ba95671071ba308ad0c1763fef295e1895ce", size = 70238, upload-time = "2026-04-13T17:11:17.143Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/4a/0d79fe52243a4130aa41d0a3a9eea22e00427db761e1a6782ee817c50222/fastar-0.11.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:e7c906ad371ca365591ebcb7630009923f3eceb20956814494d15591a78e9e46", size = 709786, upload-time = "2026-04-13T17:09:53.974Z" }, - { url = "https://files.pythonhosted.org/packages/9f/e4/77c94eaafc035e39f5ce5176e32743da4e3fe890f28790e708e53d8f75cd/fastar-0.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6919497b35fa5bd978d2c26ee117cf1771b90ee5073f7518e44b9bc364b57715", size = 632127, upload-time = "2026-04-13T17:09:39.023Z" }, - { url = "https://files.pythonhosted.org/packages/3c/f6/97658dd992f4e45747d35adb24c0b100f6b6d451490685ae3fe8a3a2ee1b/fastar-0.11.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:56b50206aeedd99e22b83289e6fb3ff8f7d7da4407d2419902e4716b4f90585a", size = 869608, upload-time = "2026-04-13T17:09:08.268Z" }, - { url = "https://files.pythonhosted.org/packages/e9/fc/81c1ec4d8146a437399e7b95631b51be312f323a9ce64569f932db6c3914/fastar-0.11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a1811a69ae81d469720df0c8af3f84f834a93b5e4f8be0e0e8bde6a52fa11f2", size = 762925, upload-time = "2026-04-13T17:07:52.788Z" }, - { url = "https://files.pythonhosted.org/packages/b9/35/49baf480ecb197aea7ce2515c503a2f25061958dd3b4c98e98a3a11cdcc7/fastar-0.11.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:10486238c55589a3947c38f9cfb88a67d8a608eb8dddc722038237d0278a41d7", size = 759913, upload-time = "2026-04-13T17:08:07.324Z" }, - { url = "https://files.pythonhosted.org/packages/94/eb/946f1980267f2824efb7d7c518d47a49b89c0e9cd7c449301f5a7531558a/fastar-0.11.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1555ef9992d368a6ec39092276990cef8d329c39a1d86ebd847eaa3b10efd472", size = 926054, upload-time = "2026-04-13T17:08:22.196Z" }, - { url = "https://files.pythonhosted.org/packages/0c/19/d5eb611085ce054382570d8d4e24a5e2ff23cd6d2404528a6643841d6059/fastar-0.11.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1f4aca0a9620b76988bbf6225cdea6678a392902444ca18bb8a51495b165a89", size = 818594, upload-time = "2026-04-13T17:08:52.366Z" }, - { url = "https://files.pythonhosted.org/packages/4a/52/18e8d55c0d3d917713f381cb2d0cb793da00c209c802e011d8dc72018cd5/fastar-0.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75beeecac7d11a666a6c4a0b7f7e80842ae5cf523f2f890b99c78fc82b403545", size = 823005, upload-time = "2026-04-13T17:09:23.051Z" }, - { url = "https://files.pythonhosted.org/packages/2c/b4/0fecdcf33e5aaffe777b96a1c10a3204fe0b05bf18e971033a0bfedafc1c/fastar-0.11.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a08cdf5d16daa401c65c9c7493a18db7dc515c52155a17071ec7098bb07da9d3", size = 887115, upload-time = "2026-04-13T17:08:37.385Z" }, - { url = "https://files.pythonhosted.org/packages/08/f8/2a6ad1c2523eb72a4595a9331162fc67ce0f0aee3348728598026c516986/fastar-0.11.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6e210375e5a7ba53586cbd6017aa417d2d2ceacbe8671682470281bd0a15e8ef", size = 973595, upload-time = "2026-04-13T17:10:09.258Z" }, - { url = "https://files.pythonhosted.org/packages/5c/a6/2aa48843228673feacc2b80876b8924e63ea9c5f5f607bd7a72416b86bae/fastar-0.11.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a2988eb2604b8e15670f355425e8c800e4dcd4edfbcbfe194397f8f17b7eb19e", size = 1036988, upload-time = "2026-04-13T17:10:26.133Z" }, - { url = "https://files.pythonhosted.org/packages/92/ac/3dd14b21c323e8484f47c910110d1d93139ba44621ac2c4c597dbe9fcdb7/fastar-0.11.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:34abc857b46068fdf91d157bd0203bfd6791dc7a432d1ed180f5af6c2f5bcce9", size = 1078267, upload-time = "2026-04-13T17:10:43.645Z" }, - { url = "https://files.pythonhosted.org/packages/de/a1/3f89e58d6fa99160c9e7e17220c8ab5040b5cc017c4fac2356c6ed18453d/fastar-0.11.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0d884be84e37a01053776395441fc960031974e0265801ce574efc3d05e0cdaf", size = 1032551, upload-time = "2026-04-13T17:11:00.667Z" }, - { url = "https://files.pythonhosted.org/packages/f6/ea/24dd3cfc2096933d7d2a80c926e79602cff1fa481124ed2165b60c1dd9ef/fastar-0.11.0-cp310-cp310-win32.whl", hash = "sha256:c721c1ad758e3e4c2c1fd9e96911a0fa58c0a6be5668f1bcfd0b741e72c7cb63", size = 456022, upload-time = "2026-04-13T17:11:41.859Z" }, - { url = "https://files.pythonhosted.org/packages/82/ef/6eb39ee9cdd59822d1c7337c4d28fdc948885bdf455af9e70efa9879e06f/fastar-0.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:ba4180b7c3080f55f9035fdd7d8c39fe0e1485087a68ff615bb4784a10b8106b", size = 488392, upload-time = "2026-04-13T17:11:27.486Z" }, - { url = "https://files.pythonhosted.org/packages/11/7a/fb367bdaf4efa2c7952a45aeab2e87a564293ecffe150af673ec8edfda46/fastar-0.11.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b82fd6f996e65a86f67a6bd64dd22ef3e8ae2dcaed0ae3b550e71f7e1bbb1df5", size = 709869, upload-time = "2026-04-13T17:09:55.62Z" }, - { url = "https://files.pythonhosted.org/packages/80/ff/b87efb0dcfd081c62c7c7601d7681dabe63103cd51fc16f8d57a1ab45961/fastar-0.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27eed386fd0558e6daa29211111bbd7b740f7c7e881197f8a00ac7c0f3cdb1d7", size = 631668, upload-time = "2026-04-13T17:09:40.537Z" }, - { url = "https://files.pythonhosted.org/packages/24/7c/0ed6dd38b9adc04b3a8ec3b7045908e7c2170ba0ff6e6d2c51bc9fc770f3/fastar-0.11.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a6931bebc1d8e95ddeef55732c195449e6b44ef33aa31b325505097ed3b4d6aa", size = 869663, upload-time = "2026-04-13T17:09:09.78Z" }, - { url = "https://files.pythonhosted.org/packages/58/ce/8b7fb3f23855accebaaf2d2637eac7f261a7a5d936f861a172079f1ef511/fastar-0.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:891f72ce42a5e28a74fbd4d5fbf1a3ac1a1163d13cbc200cbd005fb0fabc54bd", size = 762938, upload-time = "2026-04-13T17:07:54.51Z" }, - { url = "https://files.pythonhosted.org/packages/07/cc/5491e2b677bb841f768e3aba052d0344338a5c78aa5d4c18b443831a8e8d/fastar-0.11.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5b83c1f61f7017d6e1498568038f8745440cfc16ca2f697ec81bac83050108f6", size = 759232, upload-time = "2026-04-13T17:08:08.864Z" }, - { url = "https://files.pythonhosted.org/packages/4e/b7/643630bdbd179e41e9fae31c03b4cf6061dbf4d6fbbae8425d16eb12545d/fastar-0.11.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db73a9b765a516e73983b25341e7b5e0189733878279e278b2295131b0e3a21e", size = 926271, upload-time = "2026-04-13T17:08:23.68Z" }, - { url = "https://files.pythonhosted.org/packages/09/5d/37ade50003b4540e0a53ef100f6692d7ab2ac1122d5acf39920cc09a3e8b/fastar-0.11.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:625827d52eb4e8fec942e0233f125ff8010fcf6a67c0a974a8e5f4666b771e3c", size = 818634, upload-time = "2026-04-13T17:08:54.268Z" }, { url = "https://files.pythonhosted.org/packages/c3/ff/135d177de32cc1e837c99019e4643e6e79352bde49544d4ece5b5eebf56b/fastar-0.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7f5fd8fa21ec0a88296a38dc5d7fc35efd3b26d46a17b8b7c73c5563925ca15", size = 822755, upload-time = "2026-04-13T17:09:25.01Z" }, - { url = "https://files.pythonhosted.org/packages/27/cb/b835dbe76ceac7fa6105851468c259ffd06830eb9c029402e499d0ec153b/fastar-0.11.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:8c15af91b8cd87ddf23ea55355ae513c1de3ab67178f26dad017c9e9c0af6096", size = 887101, upload-time = "2026-04-13T17:08:39.248Z" }, - { url = "https://files.pythonhosted.org/packages/9e/54/aa8289eb57fc550535470397cb051f5a58a7c89ca4de31d5502b916dd894/fastar-0.11.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:03a112395a8b0bff251423bd1564c012f0cc058ad8b6bd8fba96f3d7fc117e44", size = 973606, upload-time = "2026-04-13T17:10:10.98Z" }, - { url = "https://files.pythonhosted.org/packages/1f/fd/776d50a0897c01dc6bfd0926772ee913436fdae91b9affaf0a0cbd09f0a1/fastar-0.11.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f2994bb8f5f8c11eb12beae1e6e77a907173c9819236b8a4c8f0573652ceccce", size = 1036696, upload-time = "2026-04-13T17:10:28.502Z" }, - { url = "https://files.pythonhosted.org/packages/c8/f1/cf0f9b499fb37ac065c8a01ec642f96a3c5eb849c38ae983b59f3b3245e0/fastar-0.11.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:dcf99e4b5973d842c7f19c776c3a83cdc0977d505edce6206438505c0456b517", size = 1078182, upload-time = "2026-04-13T17:10:45.318Z" }, { url = "https://files.pythonhosted.org/packages/f8/9e/21e4701aec4a1123d4dc4d31578dc18875582b5710e4725f7ceb752a248b/fastar-0.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29c9c386dc0d5dda78845a8e6b1480d26ab861c1e0b68f42ae5735cb70ca07f1", size = 1032336, upload-time = "2026-04-13T17:11:02.364Z" }, - { url = "https://files.pythonhosted.org/packages/ce/e2/5872b28c72c27ec1a00760eace6ff35f714f41ebbd5208cf016b12e29250/fastar-0.11.0-cp311-cp311-win32.whl", hash = "sha256:030b2580fc394f2c9b7890b6735810404e9b9ed5e0344db150b945965b5482b7", size = 457368, upload-time = "2026-04-13T17:11:43.528Z" }, - { url = "https://files.pythonhosted.org/packages/fd/6e/ce6832a16193eb4466f4108be8809c249b51cb1f89dd7894545700d079d5/fastar-0.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:83ab57ae067969cd0b483ac3b6dccc4b595fc77f5c820760998648d4c42822b5", size = 488605, upload-time = "2026-04-13T17:11:29.161Z" }, - { url = "https://files.pythonhosted.org/packages/15/5a/9cfb80661cf38fd7b0889224beb7d2746784d4ade2a931ed9775a18d8602/fastar-0.11.0-cp311-cp311-win_arm64.whl", hash = "sha256:27b1a4cee2298b704de8151d310462ee7335ed036011ca9aa6e784b30b6c73a9", size = 464580, upload-time = "2026-04-13T17:11:18.583Z" }, - { url = "https://files.pythonhosted.org/packages/cc/5c/9bbeffbf1905391446dd98aa520422ce7affde5c9a7c22d757cc5d7c1397/fastar-0.11.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1266d6a004f427b0d61bd6c7b544d84cc964691b2232c2f4d635a1b75f2f6d5e", size = 711644, upload-time = "2026-04-13T17:10:07.663Z" }, - { url = "https://files.pythonhosted.org/packages/7e/af/ae5cf39d4fb82d0c592705f5ec6db1b065be5265c151b108f86126ee8773/fastar-0.11.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:298a827ec04ade43733f6ca960d0faec38706aa1494175869ea7ea17f5bad5d3", size = 634371, upload-time = "2026-04-13T17:09:52.083Z" }, - { url = "https://files.pythonhosted.org/packages/7e/36/8d4569e26473c72ccb02d1c5df3ed710073f1c06eca09c26d52ea79fd815/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8800e2387e463a0e5799416a1cbe72dd0fde7270a20e4bde684145e7878f6516", size = 870850, upload-time = "2026-04-13T17:09:21.439Z" }, - { url = "https://files.pythonhosted.org/packages/bf/46/724dc796e1756d3977970f820d30d59bb8cab8e3671b285f1d82ab513aec/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7496def0a2befd82d429cb004ef7ca831585cc887947bd6b9abb68a5ef852b0b", size = 764469, upload-time = "2026-04-13T17:08:05.638Z" }, - { url = "https://files.pythonhosted.org/packages/99/e3/74d6859e632e8fb9339a14f652fb9f800c2bd6aa53071e311c0be3fbab8b/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:878eaf15463eb572e3538af7ca3a8534e5e279cf8196db902d24e5725c4af86e", size = 761375, upload-time = "2026-04-13T17:08:20.669Z" }, - { url = "https://files.pythonhosted.org/packages/a3/e7/cc70e2be5ef8731a7525552b1c35c1448cf9eae6a62cb3a56f12c1bf27ea/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0324ed1d1ef0186e1bbd843b17807d6d837d0906899d4c99378b02c5d86bdd9c", size = 928189, upload-time = "2026-04-13T17:08:35.663Z" }, - { url = "https://files.pythonhosted.org/packages/3c/33/c9a969e78dca323547276a6fee5f4f9588f7cd5ab45acec3778c67399589/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bdf9bd863205590beaf8ef6e66f315310196632180dceaf674985d01a876cac3", size = 820864, upload-time = "2026-04-13T17:09:06.366Z" }, { url = "https://files.pythonhosted.org/packages/84/bd/6b9434b541fe55c125b5f2e017a565596a2d215aa09207e4555e4585064f/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59af8dbb683b24b90fb5b506de080faeab0a17a908e6c2a5d93a97260ed75d7b", size = 824060, upload-time = "2026-04-13T17:09:37.377Z" }, - { url = "https://files.pythonhosted.org/packages/24/8d/871d5f8cf4c6f13987119fb0a9ae8be131e34f2756c2524e9974adf33824/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:9f3df73a3c4292cfe15696cdf59cdb6c309ab59d30b34c733be13c6e32d9a264", size = 889217, upload-time = "2026-04-13T17:08:50.884Z" }, - { url = "https://files.pythonhosted.org/packages/d0/26/cca0fd2704f3ed20165e5613ed911549aef3aaf3b0b5b02fee0e8e23e6cc/fastar-0.11.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:aa3762cbb16e41a76b61f4a6914937a71aab3a7b6c2d82ca233bc686ebaf756b", size = 975418, upload-time = "2026-04-13T17:10:24.307Z" }, - { url = "https://files.pythonhosted.org/packages/99/94/8bbb0b13f5b6cbe2492f0b7cbba5103e6163976a3331466d010e781fa189/fastar-0.11.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:a8c7bc8ac74cb359bb546b199288c83236372d094b402e557c197e85527495cd", size = 1038492, upload-time = "2026-04-13T17:10:41.939Z" }, - { url = "https://files.pythonhosted.org/packages/ed/d3/5b7df222a30eac2822ffd00f82fd4c2ce84fba4b369d1e1a03732fd177fc/fastar-0.11.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:587cbd060a2699c5f66281081395bb4657b2b1e0eef5c206b1aabf740019d670", size = 1080210, upload-time = "2026-04-13T17:10:58.462Z" }, { url = "https://files.pythonhosted.org/packages/ec/6d/56ef943ea524784598c035ccbd42e564e937da0438ae3f55f0e76cb95571/fastar-0.11.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6a1c56957ac82408be37a3f63594bc83e0919e8760492a4475e542f9f1828778", size = 1034886, upload-time = "2026-04-13T17:11:15.617Z" }, ] [[package]] -name = "fastrlock" -version = "0.8.3" +name = "fastsafetensors" +version = "0.3.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/73/b1/1c3d635d955f2b4bf34d45abf8f35492e04dbd7804e94ce65d9f928ef3ec/fastrlock-0.8.3.tar.gz", hash = "sha256:4af6734d92eaa3ab4373e6c9a1dd0d5ad1304e172b1521733c6c3b3d73c8fa5d", size = 79327, upload-time = "2024-12-17T11:03:39.638Z" } +dependencies = [ + { name = "typer", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c8/33/c97b2bcbe06e0f011eedee0f41d4060f6344901a53c2703acc3dd7429713/fastsafetensors-0.3.2.tar.gz", hash = "sha256:9e358fce238684613a5c3ebb7800c52c5b3270c0bb5e4ed2191ee8f3d0431de1", size = 70409, upload-time = "2026-05-22T05:39:34.787Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/be/b4/aae7ed94b8122c325d89eb91336084596cebc505dc629b795fcc9629606d/fastrlock-0.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7a77ebb0a24535ef4f167da2c5ee35d9be1e96ae192137e9dc3ff75b8dfc08a5", size = 48220, upload-time = "2024-12-17T11:01:51.071Z" }, - { url = "https://files.pythonhosted.org/packages/96/87/9807af47617fdd65c68b0fcd1e714542c1d4d3a1f1381f591f1aa7383a53/fastrlock-0.8.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:d51f7fb0db8dab341b7f03a39a3031678cf4a98b18533b176c533c122bfce47d", size = 49551, upload-time = "2024-12-17T11:01:52.316Z" }, - { url = "https://files.pythonhosted.org/packages/9d/12/e201634810ac9aee59f93e3953cb39f98157d17c3fc9d44900f1209054e9/fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:767ec79b7f6ed9b9a00eb9ff62f2a51f56fdb221c5092ab2dadec34a9ccbfc6e", size = 49398, upload-time = "2024-12-17T11:01:53.514Z" }, - { url = "https://files.pythonhosted.org/packages/15/a1/439962ed439ff6f00b7dce14927e7830e02618f26f4653424220a646cd1c/fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d6a77b3f396f7d41094ef09606f65ae57feeb713f4285e8e417f4021617ca62", size = 53334, upload-time = "2024-12-17T11:01:55.518Z" }, - { url = "https://files.pythonhosted.org/packages/b5/9e/1ae90829dd40559ab104e97ebe74217d9da794c4bb43016da8367ca7a596/fastrlock-0.8.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:92577ff82ef4a94c5667d6d2841f017820932bc59f31ffd83e4a2c56c1738f90", size = 52495, upload-time = "2024-12-17T11:01:57.76Z" }, - { url = "https://files.pythonhosted.org/packages/e5/8c/5e746ee6f3d7afbfbb0d794c16c71bfd5259a4e3fb1dda48baf31e46956c/fastrlock-0.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3df8514086e16bb7c66169156a8066dc152f3be892c7817e85bf09a27fa2ada2", size = 51972, upload-time = "2024-12-17T11:02:01.384Z" }, - { url = "https://files.pythonhosted.org/packages/76/a7/8b91068f00400931da950f143fa0f9018bd447f8ed4e34bed3fe65ed55d2/fastrlock-0.8.3-cp310-cp310-win_amd64.whl", hash = "sha256:001fd86bcac78c79658bac496e8a17472d64d558cd2227fdc768aa77f877fe40", size = 30946, upload-time = "2024-12-17T11:02:03.491Z" }, - { url = "https://files.pythonhosted.org/packages/be/91/5f3afba7d14b8b7d60ac651375f50fff9220d6ccc3bef233d2bd74b73ec7/fastrlock-0.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:55d42f6286b9d867370af4c27bc70d04ce2d342fe450c4a4fcce14440514e695", size = 48911, upload-time = "2024-12-17T11:02:06.173Z" }, - { url = "https://files.pythonhosted.org/packages/d5/7a/e37bd72d7d70a8a551b3b4610d028bd73ff5d6253201d5d3cf6296468bee/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:bbc3bf96dcbd68392366c477f78c9d5c47e5d9290cb115feea19f20a43ef6d05", size = 50357, upload-time = "2024-12-17T11:02:07.418Z" }, - { url = "https://files.pythonhosted.org/packages/0d/ef/a13b8bab8266840bf38831d7bf5970518c02603d00a548a678763322d5bf/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:77ab8a98417a1f467dafcd2226718f7ca0cf18d4b64732f838b8c2b3e4b55cb5", size = 50222, upload-time = "2024-12-17T11:02:08.745Z" }, - { url = "https://files.pythonhosted.org/packages/01/e2/5e5515562b2e9a56d84659377176aef7345da2c3c22909a1897fe27e14dd/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04bb5eef8f460d13b8c0084ea5a9d3aab2c0573991c880c0a34a56bb14951d30", size = 54553, upload-time = "2024-12-17T11:02:10.925Z" }, - { url = "https://files.pythonhosted.org/packages/c0/8f/65907405a8cdb2fc8beaf7d09a9a07bb58deff478ff391ca95be4f130b70/fastrlock-0.8.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c9d459ce344c21ff03268212a1845aa37feab634d242131bc16c2a2355d5f65", size = 53362, upload-time = "2024-12-17T11:02:12.476Z" }, - { url = "https://files.pythonhosted.org/packages/ec/b9/ae6511e52738ba4e3a6adb7c6a20158573fbc98aab448992ece25abb0b07/fastrlock-0.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33e6fa4af4f3af3e9c747ec72d1eadc0b7ba2035456c2afb51c24d9e8a56f8fd", size = 52836, upload-time = "2024-12-17T11:02:13.74Z" }, - { url = "https://files.pythonhosted.org/packages/88/3e/c26f8192c93e8e43b426787cec04bb46ac36e72b1033b7fe5a9267155fdf/fastrlock-0.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:5e5f1665d8e70f4c5b4a67f2db202f354abc80a321ce5a26ac1493f055e3ae2c", size = 31046, upload-time = "2024-12-17T11:02:15.033Z" }, + { url = "https://files.pythonhosted.org/packages/23/8f/ade9adae5853eb7bb674bfd97f340ab7bfea7afaade508fd791ffb06c3b7/fastsafetensors-0.3.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b8780ff0291ff4c9a440c7b25cb8a8b963d8600ab86b89b2a8aebea26d58366", size = 1881819, upload-time = "2026-05-22T05:39:28.399Z" }, ] [[package]] @@ -829,6 +722,39 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/13/37/a065dc3bd6e49423a6532c642ca7378d3f467b1ef44c2800c937af7f9739/filelock-3.29.4-py3-none-any.whl", hash = "sha256:dac1648087d5115554850d113e7dd8c83ab2d38e3435dde2d4f163847e57b767", size = 42757, upload-time = "2026-06-13T16:11:59.582Z" }, ] +[[package]] +name = "flashinfer-cubin" +version = "0.6.12" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/c6/63b1bb7b1a7ae612ecf53c0e568312c3d004f9f7558b0ab5edcf7900c360/flashinfer_cubin-0.6.12-py3-none-any.whl", hash = "sha256:01de132c493bb21d5df42ebe6890966cf83b40aa970dae06b2a3c0bed85f13ec", size = 447533460, upload-time = "2026-05-29T23:45:27.579Z" }, +] + +[[package]] +name = "flashinfer-python" +version = "0.6.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "apache-tvm-ffi", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "click", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "cuda-tile", extra = ["tileiras"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "einops", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "ninja", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cudnn-frontend", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cutlass-dsl", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-ml-py", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "packaging", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "requests", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tabulate", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tqdm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/d0/114a64319f5a804def2f307d5ed8f95e6d94a2acdacac4ed5f57525cbf46/flashinfer_python-0.6.12.tar.gz", hash = "sha256:bed67f9c46d81dd22611dfef2787998fc412b2fe2648d9e7d336861dda912694", size = 9453326, upload-time = "2026-05-29T23:45:16.466Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/26/3ca33edbf64906603633cb91904798e427c0ac1c55a13707f8081708f3ae/flashinfer_python-0.6.12-py3-none-any.whl", hash = "sha256:0c7a01e586b4796810d974cbf13a9c0eb2ade6a94d12e3220cf7782a1c09b8d3", size = 13985243, upload-time = "2026-05-29T23:45:13.477Z" }, +] + [[package]] name = "flatbuffers" version = "25.12.19" @@ -843,38 +769,11 @@ version = "1.8.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/83/4a/557715d5047da48d54e659203b9335be7bfaafda2c3f627b7c47e0b3aaf3/frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011", size = 86230, upload-time = "2025-10-06T05:35:23.699Z" }, - { url = "https://files.pythonhosted.org/packages/a2/fb/c85f9fed3ea8fe8740e5b46a59cc141c23b842eca617da8876cfce5f760e/frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565", size = 49621, upload-time = "2025-10-06T05:35:25.341Z" }, - { url = "https://files.pythonhosted.org/packages/63/70/26ca3f06aace16f2352796b08704338d74b6d1a24ca38f2771afbb7ed915/frozenlist-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad", size = 49889, upload-time = "2025-10-06T05:35:26.797Z" }, - { url = "https://files.pythonhosted.org/packages/5d/ed/c7895fd2fde7f3ee70d248175f9b6cdf792fb741ab92dc59cd9ef3bd241b/frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2", size = 219464, upload-time = "2025-10-06T05:35:28.254Z" }, - { url = "https://files.pythonhosted.org/packages/6b/83/4d587dccbfca74cb8b810472392ad62bfa100bf8108c7223eb4c4fa2f7b3/frozenlist-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186", size = 221649, upload-time = "2025-10-06T05:35:29.454Z" }, - { url = "https://files.pythonhosted.org/packages/6a/c6/fd3b9cd046ec5fff9dab66831083bc2077006a874a2d3d9247dea93ddf7e/frozenlist-1.8.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e", size = 219188, upload-time = "2025-10-06T05:35:30.951Z" }, - { url = "https://files.pythonhosted.org/packages/ce/80/6693f55eb2e085fc8afb28cf611448fb5b90e98e068fa1d1b8d8e66e5c7d/frozenlist-1.8.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450", size = 231748, upload-time = "2025-10-06T05:35:32.101Z" }, - { url = "https://files.pythonhosted.org/packages/97/d6/e9459f7c5183854abd989ba384fe0cc1a0fb795a83c033f0571ec5933ca4/frozenlist-1.8.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef", size = 236351, upload-time = "2025-10-06T05:35:33.834Z" }, - { url = "https://files.pythonhosted.org/packages/97/92/24e97474b65c0262e9ecd076e826bfd1d3074adcc165a256e42e7b8a7249/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4", size = 218767, upload-time = "2025-10-06T05:35:35.205Z" }, - { url = "https://files.pythonhosted.org/packages/ee/bf/dc394a097508f15abff383c5108cb8ad880d1f64a725ed3b90d5c2fbf0bb/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff", size = 235887, upload-time = "2025-10-06T05:35:36.354Z" }, - { url = "https://files.pythonhosted.org/packages/40/90/25b201b9c015dbc999a5baf475a257010471a1fa8c200c843fd4abbee725/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c", size = 228785, upload-time = "2025-10-06T05:35:37.949Z" }, - { url = "https://files.pythonhosted.org/packages/84/f4/b5bc148df03082f05d2dd30c089e269acdbe251ac9a9cf4e727b2dbb8a3d/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f", size = 230312, upload-time = "2025-10-06T05:35:39.178Z" }, - { url = "https://files.pythonhosted.org/packages/db/4b/87e95b5d15097c302430e647136b7d7ab2398a702390cf4c8601975709e7/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7", size = 217650, upload-time = "2025-10-06T05:35:40.377Z" }, - { url = "https://files.pythonhosted.org/packages/e5/70/78a0315d1fea97120591a83e0acd644da638c872f142fd72a6cebee825f3/frozenlist-1.8.0-cp310-cp310-win32.whl", hash = "sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a", size = 39659, upload-time = "2025-10-06T05:35:41.863Z" }, - { url = "https://files.pythonhosted.org/packages/66/aa/3f04523fb189a00e147e60c5b2205126118f216b0aa908035c45336e27e4/frozenlist-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6", size = 43837, upload-time = "2025-10-06T05:35:43.205Z" }, - { url = "https://files.pythonhosted.org/packages/39/75/1135feecdd7c336938bd55b4dc3b0dfc46d85b9be12ef2628574b28de776/frozenlist-1.8.0-cp310-cp310-win_arm64.whl", hash = "sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e", size = 39989, upload-time = "2025-10-06T05:35:44.596Z" }, { url = "https://files.pythonhosted.org/packages/bc/03/077f869d540370db12165c0aa51640a873fb661d8b315d1d4d67b284d7ac/frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84", size = 86912, upload-time = "2025-10-06T05:35:45.98Z" }, { url = "https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9", size = 50046, upload-time = "2025-10-06T05:35:47.009Z" }, { url = "https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93", size = 50119, upload-time = "2025-10-06T05:35:48.38Z" }, { url = "https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f", size = 231067, upload-time = "2025-10-06T05:35:49.97Z" }, - { url = "https://files.pythonhosted.org/packages/45/7e/afe40eca3a2dc19b9904c0f5d7edfe82b5304cb831391edec0ac04af94c2/frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695", size = 233160, upload-time = "2025-10-06T05:35:51.729Z" }, - { url = "https://files.pythonhosted.org/packages/a6/aa/7416eac95603ce428679d273255ffc7c998d4132cfae200103f164b108aa/frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52", size = 228544, upload-time = "2025-10-06T05:35:53.246Z" }, - { url = "https://files.pythonhosted.org/packages/8b/3d/2a2d1f683d55ac7e3875e4263d28410063e738384d3adc294f5ff3d7105e/frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581", size = 243797, upload-time = "2025-10-06T05:35:54.497Z" }, - { url = "https://files.pythonhosted.org/packages/78/1e/2d5565b589e580c296d3bb54da08d206e797d941a83a6fdea42af23be79c/frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567", size = 247923, upload-time = "2025-10-06T05:35:55.861Z" }, - { url = "https://files.pythonhosted.org/packages/aa/c3/65872fcf1d326a7f101ad4d86285c403c87be7d832b7470b77f6d2ed5ddc/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b", size = 230886, upload-time = "2025-10-06T05:35:57.399Z" }, - { url = "https://files.pythonhosted.org/packages/a0/76/ac9ced601d62f6956f03cc794f9e04c81719509f85255abf96e2510f4265/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92", size = 245731, upload-time = "2025-10-06T05:35:58.563Z" }, - { url = "https://files.pythonhosted.org/packages/b9/49/ecccb5f2598daf0b4a1415497eba4c33c1e8ce07495eb07d2860c731b8d5/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d", size = 241544, upload-time = "2025-10-06T05:35:59.719Z" }, - { url = "https://files.pythonhosted.org/packages/53/4b/ddf24113323c0bbcc54cb38c8b8916f1da7165e07b8e24a717b4a12cbf10/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd", size = 241806, upload-time = "2025-10-06T05:36:00.959Z" }, { url = "https://files.pythonhosted.org/packages/a7/fb/9b9a084d73c67175484ba2789a59f8eebebd0827d186a8102005ce41e1ba/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967", size = 229382, upload-time = "2025-10-06T05:36:02.22Z" }, - { url = "https://files.pythonhosted.org/packages/95/a3/c8fb25aac55bf5e12dae5c5aa6a98f85d436c1dc658f21c3ac73f9fa95e5/frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25", size = 39647, upload-time = "2025-10-06T05:36:03.409Z" }, - { url = "https://files.pythonhosted.org/packages/0a/f5/603d0d6a02cfd4c8f2a095a54672b3cf967ad688a60fb9faf04fc4887f65/frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b", size = 44064, upload-time = "2025-10-06T05:36:04.368Z" }, - { url = "https://files.pythonhosted.org/packages/5d/16/c2c9ab44e181f043a86f9a8f84d5124b62dbcb3a02c0977ec72b9ac1d3e0/frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a", size = 39937, upload-time = "2025-10-06T05:36:05.669Z" }, { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, ] @@ -889,7 +788,7 @@ wheels = [ [package.optional-dependencies] http = [ - { name = "aiohttp" }, + { name = "aiohttp", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] [[package]] @@ -897,28 +796,39 @@ name = "gguf" version = "0.19.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "tqdm" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pyyaml", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "requests", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tqdm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/48/ae/17f1308ae45cd7b08ebb521747d5b23f4efc4d172038a4e228dd5106c3ff/gguf-0.19.0.tar.gz", hash = "sha256:dbadcd6cc7ccd44256f2229fe7c2dff5e8aa5cf0612ab987fd2b1a57e428923f", size = 111220, upload-time = "2026-05-06T13:04:03.667Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/b3/bb/d71d6da82763528c2c2ed6b59a9d6142c6595545a4c448e2085d155e88c2/gguf-0.19.0-py3-none-any.whl", hash = "sha256:70bcd10edfe697fb2dad6e40af2234b9d8ece9a41a99761405121ebda1c3c1cd", size = 118475, upload-time = "2026-05-06T13:04:02.588Z" }, ] +[[package]] +name = "ghp-import" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" }, +] + [[package]] name = "gliner" version = "0.2.27" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "huggingface-hub" }, - { name = "onnxruntime", version = "1.24.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "onnxruntime", version = "1.27.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "sentencepiece" }, - { name = "torch" }, - { name = "tqdm" }, - { name = "transformers" }, + { name = "huggingface-hub", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "onnxruntime", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "sentencepiece", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "transformers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/69/37/c456f6be21a95ed2c635d00bd6049d99a3b31490129a2b19965b0a60ec58/gliner-0.2.27.tar.gz", hash = "sha256:071de0819d83c34468ede02f75a38f618bc0c69262582127dccf3bb787db4c0c", size = 225241, upload-time = "2026-06-15T14:38:38.422Z" } wheels = [ @@ -926,26 +836,53 @@ wheels = [ ] [[package]] -name = "greenlet" -version = "3.5.2" +name = "gliner2" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gliner", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "peft", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "urllib3", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/1c/5e7e30213e8d917c14cefa3c060457bfa6a1e21304f852f02400dba91715/gliner2-1.3.1.tar.gz", hash = "sha256:c22f496afb2c87640005f5f49f83bb42610e85e544e3170cff7ea1ba69925ffa", size = 132379, upload-time = "2026-05-06T16:15:59.58Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/48/00e07c5f36e328017e072b2fc9106215eb3557ea8baabe12f095e2f24fad/gliner2-1.3.1-py3-none-any.whl", hash = "sha256:8af0e84a61e04f2bb491de10ef9509f7b45b4a72eb678b85e06b745e85087291", size = 95218, upload-time = "2026-05-06T16:15:57.702Z" }, +] + +[[package]] +name = "googleapis-common-protos" +version = "1.75.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/dd/8b/befc3cb36965f397d87e86fb3b00e3ec0dc67c1ecb0986d7f54ee528f018/greenlet-3.5.2.tar.gz", hash = "sha256:c1b906220d83c140361cdd12eef970fb5881a168b98ee58a43786426173da14c", size = 199243, upload-time = "2026-06-17T20:19:01.317Z" } +dependencies = [ + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b5/c8/f439cffde755cffa462bfbb156278fa6f9d09119719af9814b858fd4f81f/googleapis_common_protos-1.75.0.tar.gz", hash = "sha256:53a062ff3c32552fbd62c11fe23768b78e4ddf0494d5e5fd97d3f4689c75fbbd", size = 151035, upload-time = "2026-05-07T08:04:49.423Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/c8/e2645aa8ed02fd4c7a2f59d68783b65b1f3cbdfe39a6308e156509d1fee8/googleapis_common_protos-1.75.0-py3-none-any.whl", hash = "sha256:961ed60399c457ceb0ee8f285a84c870aabc9c6a832b9d37bb281b5bebde43ed", size = 300631, upload-time = "2026-05-07T08:03:30.345Z" }, +] + +[[package]] +name = "griffelib" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/33/e4/8d187ea29c2e30b3a09505c567513077d6117861bde1fbd997a167f262ec/griffelib-2.1.0.tar.gz", hash = "sha256:762a186d2c6fd6794d4ea20d428d597ffb857cb56b66421651cbba15bdd5e813", size = 216234, upload-time = "2026-06-19T12:05:42.278Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/d3/5268aeabf2ad82658c4e2ff3a060648d0f02f3926cb53247c0e4d0dab49e/griffelib-2.1.0-py3-none-any.whl", hash = "sha256:cc7b3d2d2865ad0b909fcc38086e3f554b5ea7acbaa7bbb7ecaa3f5dfb7d9f00", size = 142560, upload-time = "2026-06-19T12:05:38.742Z" }, +] + +[[package]] +name = "grpcio" +version = "1.81.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b0/b5/1ff353970a87eda4c98251e34d2dfd214abd4982dc89119c9252a2a482d2/grpcio-1.81.1.tar.gz", hash = "sha256:6fa10a767143a5e82e8eaab53918af0cd8909a57a27f8cb2288b80a613ac671b", size = 13026582, upload-time = "2026-06-11T12:46:51.673Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2b/3a/cd99db55dc908568f6b91845747b98b3b17a06052fa1803d091dc91da27d/greenlet-3.5.2-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9df9daae96848508450011d0d86ed7c95f8829a354ce438284a77b24896fd1f8", size = 285626, upload-time = "2026-06-17T17:33:33.231Z" }, - { url = "https://files.pythonhosted.org/packages/ce/09/fd997a19cbb97641233c7d5f8fc89314c132be2c8867c4f14beff979996f/greenlet-3.5.2-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:01e32e9d2b1714a2b06184cb3071ff2a2fd9bc7d065e39198ab21f7253dad421", size = 601821, upload-time = "2026-06-17T18:07:16.756Z" }, - { url = "https://files.pythonhosted.org/packages/7d/b0/62abd204addd913ad9856e091f5d8baaedc7c85df151f22f093b8a207c20/greenlet-3.5.2-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0488ca77c94da5e09d1d9958f98b58cebba1b8fd9664c24898499133de927574", size = 615044, upload-time = "2026-06-17T18:29:39.344Z" }, - { url = "https://files.pythonhosted.org/packages/34/67/ceaab731b51611a8238b0af2d4abb4fd727ec09b16cd499fca5295603f46/greenlet-3.5.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6d9e19257794e28821c9ebd5e23f86d7c267cd9d390089374f068d2049f949e3", size = 615176, upload-time = "2026-06-17T17:39:25.134Z" }, - { url = "https://files.pythonhosted.org/packages/1c/40/51a0ee73b72a7e4a65b54433316bbd7b3b7902a585310cd4e3051d411ee3/greenlet-3.5.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bf493b3c1c0a2324c49b0472e2280ba4665f3510d8115f6f807759a6163b15f7", size = 1574580, upload-time = "2026-06-17T18:22:09.082Z" }, - { url = "https://files.pythonhosted.org/packages/41/d3/a3a2163b1fe73042d3e72cfcb9920f2481d5188a1df2645587a9b83a903f/greenlet-3.5.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:561dd919c02236a613fbf226791cbd77ee5002cbd5cb7e838869aa3ac7a71e16", size = 1641192, upload-time = "2026-06-17T17:40:04.234Z" }, - { url = "https://files.pythonhosted.org/packages/95/a3/b4d83fb451e2f7266cb45ccef23857f8a800e0a5d9a73263fafdf7ba7904/greenlet-3.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:049827baab63dda8ab8ec5a6d07fc6eb0f418319cfc757fc8737a605e99ca1ad", size = 238247, upload-time = "2026-06-17T17:34:54.794Z" }, - { url = "https://files.pythonhosted.org/packages/21/68/371ee6dad168be3386c46030bedaa8e3e7e3cf3d203621d4529e78ff36ef/greenlet-3.5.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:d7792398872f89466c6671d5d193537eff163ecf7fac78d82e6ddc25017fb4f5", size = 286925, upload-time = "2026-06-17T17:33:17.928Z" }, - { url = "https://files.pythonhosted.org/packages/26/16/ed5706c26b4d26f3fabceb79abca992654eac8b0fa435def2ac6dbd92122/greenlet-3.5.2-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:711028c953cd6ce5dc01bbb5a1747e3ad6bd8b2f7ded73778bb936e8dab9e3b6", size = 606036, upload-time = "2026-06-17T18:07:18.538Z" }, - { url = "https://files.pythonhosted.org/packages/8e/32/f9c77093af9f5f96615922b7e3fe3690a9faff02adb89f1d74e21578b147/greenlet-3.5.2-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5eba55076d79e8a5176e6925295cfb901ebc95dae493342ede22230f75d8bee2", size = 617821, upload-time = "2026-06-17T18:29:41.317Z" }, - { url = "https://files.pythonhosted.org/packages/bd/d4/642833e778c17d32b5cabb793e14ce7364c55952462fc506fecdee55d485/greenlet-3.5.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1c1e5ad80f1f38ea479b83b39dccb20874cfe9ad5e52f87225fa294ba4d39a1", size = 616877, upload-time = "2026-06-17T17:39:26.564Z" }, - { url = "https://files.pythonhosted.org/packages/d3/cc/7120f83e78b8be3cf7acbe2306b3b7bd2cbf99f5ad12e85e2f05d7b31961/greenlet-3.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9e194b996aa1b89d933cfe136e5eb39b22a8b72ba59d376ef39a55bca4dbf47f", size = 1577274, upload-time = "2026-06-17T18:22:10.692Z" }, - { url = "https://files.pythonhosted.org/packages/fa/d8/05a0074ee485dd51c320fd706fd7ed48006b9cad3443092d7df1a655f0d2/greenlet-3.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4e554809538bd4867f24421b43abde170f9c9b8192149b30df5e164bcac6124f", size = 1643566, upload-time = "2026-06-17T17:40:05.452Z" }, - { url = "https://files.pythonhosted.org/packages/35/fe/9fe2060bdeece682e38d381184ae66045b48ed183c107ab3f88b9886a630/greenlet-3.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:e063263ce9047878480d7e536012fc8b7c8e1922989eb5f03b9ab998a2ee7b7e", size = 238643, upload-time = "2026-06-17T17:37:03.039Z" }, - { url = "https://files.pythonhosted.org/packages/41/13/a9db72f5b6b700977ebd371d6a1f2984a08838357de924fcd5571607b1bf/greenlet-3.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:a3f76a94e2d6e1fee8f302265679d8cc47d71a203936dd03c6e2ace0f9cfd46d", size = 237135, upload-time = "2026-06-17T17:34:34.14Z" }, + { url = "https://files.pythonhosted.org/packages/23/d6/abeda5c2b896a0b341584fe5ac411bbf72e197a9a374c355fb90965e08d2/grpcio-1.81.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a37165cc80b1a368384b383e63a4c38116a10467ae44c904d2d7468c4470ec2", size = 6842229, upload-time = "2026-06-11T12:45:04.76Z" }, + { url = "https://files.pythonhosted.org/packages/f7/b2/524847365122ee509ca17bcc4e092198b700e94af7bfd5bb5e6dd9f3ee66/grpcio-1.81.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1b22c80559854b789a01fd89e8929b3798a156c0829b5282a8939f33ad4115ad", size = 7873989, upload-time = "2026-06-11T12:45:13.102Z" }, ] [[package]] @@ -966,11 +903,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7a/d8/5e54cf37434759d1f4f2ba9b66077ff9d4c4e1f37b6bd7975da5c40d94ab/hf_xet-1.5.1-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6abd35c3221eff63836618ddfb954dcf84798603f71d8e33e3ed7b04acfdbe6e", size = 4077794, upload-time = "2026-06-08T23:02:40.656Z" }, { url = "https://files.pythonhosted.org/packages/35/94/4b2ecfbad8f8b04701a23aefb62f540b9137d058b7e1dbef16a32676f0e9/hf_xet-1.5.1-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:94e761bbd266bf4c03cee73753916062665ce8365aa40ed321f45afcb934b41e", size = 3845354, upload-time = "2026-06-08T23:02:42.702Z" }, { url = "https://files.pythonhosted.org/packages/de/cc/f99f4bc7295023d7bd9ebbfd51f75cc530ca262c1227666268b8208f4b77/hf_xet-1.5.1-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:892e3a3a3aecc12aded8b93cf4f9cd059282c7de0732f7d55026f3abdf474350", size = 4514864, upload-time = "2026-06-08T23:02:44.497Z" }, - { url = "https://files.pythonhosted.org/packages/cd/6e/21f7e5a2381278bd3b7b7a5a4d90038518bb6308a0c1daf5d9f8268bb178/hf_xet-1.5.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a93df2039190502835b1db8cd7e178b0b7b889fe9ab51299d5ced26e0dd879a4", size = 4303784, upload-time = "2026-06-08T23:02:46.203Z" }, - { url = "https://files.pythonhosted.org/packages/35/0e/f992bb6927ac1cb30ef74e62268f551f338bc32b2191f7c96a44c6f7283e/hf_xet-1.5.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0c97106032ef70467b4f6bc2d0ccc266d7613ee076afc56516c502f87ce1c4a6", size = 4500703, upload-time = "2026-06-08T23:02:47.628Z" }, { url = "https://files.pythonhosted.org/packages/fb/d1/90a498d05447980b977b1669246eeeeae4cfb0ea3e7a286eaba627f91bf9/hf_xet-1.5.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6208adb15d192b90e4c2ad2a27ed864359b2cb0f2494eb6d7c7f3699ac02e2bf", size = 4719498, upload-time = "2026-06-08T23:02:49.268Z" }, - { url = "https://files.pythonhosted.org/packages/6d/b6/20f99cfe97cc663a711f7b33cc21d4793e51968e9a26125b4afcd77315ba/hf_xet-1.5.1-cp37-abi3-win_amd64.whl", hash = "sha256:f7b3002f95d1c13e24bcb4537baa8f0eb3838957067c91bb4959bc004a6435f5", size = 4026419, upload-time = "2026-06-08T23:02:50.829Z" }, - { url = "https://files.pythonhosted.org/packages/f9/fa/77453694888f03e5a8c8852d1514a0894d8e81c622d39edbaf308ea0dcf4/hf_xet-1.5.1-cp37-abi3-win_arm64.whl", hash = "sha256:93d090b57b211133f6c0dab0205ef5cb6d89162979ba75a74845045cc3063b8e", size = 3855178, upload-time = "2026-06-08T23:02:52.452Z" }, ] [[package]] @@ -978,8 +911,8 @@ name = "httpcore" version = "1.0.9" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "certifi" }, - { name = "h11" }, + { name = "certifi", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "h11", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } wheels = [ @@ -992,20 +925,8 @@ version = "0.8.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/43/e5/d471fcb0e14523fe1c3f4ba58ca52480e7bd70ad7109a3846bc75892f7fb/httptools-0.8.0.tar.gz", hash = "sha256:6b2a32f18d97e16e90827d7a819ffa8dbd8cc245fc4e1fa9d1095b54ef4bd999", size = 271342, upload-time = "2026-05-25T22:17:48.841Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/40/b9/be66eb0decd730d89b9c94f930e4b8d87787b05724bb84af98bfd825f72c/httptools-0.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bf3b6f807c8541503cecfbb8a8dffb385640d0d96102f3d112aa8740f9b7c826", size = 208805, upload-time = "2026-05-25T22:16:50.434Z" }, - { url = "https://files.pythonhosted.org/packages/9d/f7/b4d41eaae2869d31356bc4bbf546f44fae83ff298af0a043ca0625b06773/httptools-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da684f2e1aa2ee9bdcb083f3f3a68c5956750b375bc5df864d3a5f0c42a40b77", size = 113527, upload-time = "2026-05-25T22:16:51.672Z" }, - { url = "https://files.pythonhosted.org/packages/e6/e4/77487e14fc7be47180fd0eb4267c7486d0cc59b74031839a3daf8650136b/httptools-0.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6f21e2a3b0067bbe7f67e34cfd16276af556e5e52f4c7503be0cb5f90e905e4", size = 450035, upload-time = "2026-05-25T22:16:53.313Z" }, - { url = "https://files.pythonhosted.org/packages/da/72/5a8f787e323f56fbd86c32a4be92a86776e4cfe8b4317db999f452028362/httptools-0.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea897f0c729581ebf72131a438a7932d9b14efef72d75ada966700cac3caaeb", size = 451101, upload-time = "2026-05-25T22:16:54.696Z" }, - { url = "https://files.pythonhosted.org/packages/ed/41/b44a25560955197674b6744cb903664300e239235a5eaa69df0890d87054/httptools-0.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c0d726cc107fceb7d45f978483b4b70dd8caa836f5914d3434bb18628eb73813", size = 436140, upload-time = "2026-05-25T22:16:56.239Z" }, - { url = "https://files.pythonhosted.org/packages/74/b0/054aac84c03d7e097bf4c605fb7e74eec3d65c0276adf64ee97f3a103ff5/httptools-0.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9878eb2785ba5eb70631ad269b37976f73d647955e26c91d490eb8a4edfda4ba", size = 437041, upload-time = "2026-05-25T22:16:57.716Z" }, - { url = "https://files.pythonhosted.org/packages/bb/e8/86b85bbc0ac7892232f1a99ab96a9aa71936984fa06adfc0afc83ca7789e/httptools-0.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:b205e5f5523fa039679da0dfe5a10132b2a4abeae6a86fdd1ddc035f7f836557", size = 90454, upload-time = "2026-05-25T22:16:58.871Z" }, - { url = "https://files.pythonhosted.org/packages/f8/d2/c3eedaef57de65c3cc5f8dc244cf12d09c84ad258a479055aad6db23206c/httptools-0.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ed377e64805bdba4943c82717333f8f8603a13b09aff9cead2717c6c817fb168", size = 208428, upload-time = "2026-05-25T22:16:59.717Z" }, - { url = "https://files.pythonhosted.org/packages/f1/94/dfe435d90d0ef61ec0f2cc3d480eef78c59727c6c2ce039f433882f6131a/httptools-0.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9518c406d7b310f05adb1a37f80acabac40504a575d7c0da6d3e365c695ac20d", size = 113366, upload-time = "2026-05-25T22:17:00.795Z" }, { url = "https://files.pythonhosted.org/packages/cc/d4/13025f1a56e615dcb331e0bbe2d9a1143212b58c263385fc5d2e558f5bac/httptools-0.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:57278e6fa0424c42a8a3e454828ab4f0aff27b40cddf9679579b98c6dce6a376", size = 464676, upload-time = "2026-05-25T22:17:02.014Z" }, - { url = "https://files.pythonhosted.org/packages/bf/95/4c1c26c0b985f8a3331682d802598f14e32dc41bf7509266eb2c04ad4801/httptools-0.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bbb8caadb2b742d293169d2b458b5c001ef70e3158704aa3d3ef9597624c5d1d", size = 464235, upload-time = "2026-05-25T22:17:03.109Z" }, - { url = "https://files.pythonhosted.org/packages/a2/82/6735be2b0ca527718c431cdb8e5f70c3862c0844a687df0f572c51e11497/httptools-0.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:52dd695b865fe96d9d2b16b64a895f3f57bf3cb064e8383cd3b5713a069e8085", size = 449809, upload-time = "2026-05-25T22:17:04.443Z" }, { url = "https://files.pythonhosted.org/packages/b5/f9/5811c74f37a758c8a4aa3dc430375119d335947e883efc4664d8f3559a41/httptools-0.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:20b4aac66ff65f7db06a375808b78f42a94970aa22e826b3cb2b43eb09174124", size = 452174, upload-time = "2026-05-25T22:17:05.476Z" }, - { url = "https://files.pythonhosted.org/packages/cc/94/97b75870dea07b71e3ec535cebe525b08d723152e4c7d13fa887e51f4de2/httptools-0.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:a1b4c8e7a489a0d750d91894e9a8cdc295838f1924c0ca903ae993456fddec07", size = 90991, upload-time = "2026-05-25T22:17:06.75Z" }, ] [[package]] @@ -1013,10 +934,10 @@ name = "httpx" version = "0.28.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "anyio" }, - { name = "certifi" }, - { name = "httpcore" }, - { name = "idna" }, + { name = "anyio", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "certifi", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "httpcore", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "idna", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } wheels = [ @@ -1034,21 +955,61 @@ wheels = [ [[package]] name = "huggingface-hub" -version = "0.34.4" +version = "1.20.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "filelock", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "fsspec", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "hf-xet", marker = "(platform_machine == 'AMD64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'darwin') or (platform_machine == 'amd64' and sys_platform == 'darwin') or (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'x86_64' and sys_platform == 'darwin') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "httpx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typer", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e6/7e/fad82ad491b226e832d2da90a1a59f36acd4526cda8c726f639834754aa4/huggingface_hub-1.20.1.tar.gz", hash = "sha256:9f6d63bfbeab2d2a8357200a9bc4f18cd2c8bfac9579f792f5922e77bf6471d0", size = 859910, upload-time = "2026-06-18T22:06:53.348Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/b5/ff8516e74b459da3dce9567540c39f2d305ee7a2655109f6802873ff1588/huggingface_hub-1.20.1-py3-none-any.whl", hash = "sha256:274448a45c1ba6f112fe2fb168ead05574c654faa156904157a84085cfae14bd", size = 719837, upload-time = "2026-06-18T22:06:51.486Z" }, +] + +[[package]] +name = "humming-kernels" +version = "0.1.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "filelock" }, - { name = "fsspec" }, - { name = "hf-xet", marker = "platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, - { name = "packaging" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "tqdm" }, - { name = "typing-extensions" }, + { name = "cuda-bindings", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "jinja2", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-ml-py", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pyelftools", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "safetensors", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tabulate", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tqdm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/f6/05e95b66cca48def9db0d6c40374fe285c7d9c913fe126030bcfb7cb3088/humming_kernels-0.1.4.tar.gz", hash = "sha256:fdaf4f23cc6b03bb1be3fd24aa11dc7798881e5448826e2404b4f12d8096f0d0", size = 117555, upload-time = "2026-06-04T03:24:03.504Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/16/d9318061a560305034e14cb7bf6483ffc8735eff6b30f260907dbbd4e85d/humming_kernels-0.1.4-py3-none-any.whl", hash = "sha256:c85094cd7cf8cdd959c5e2f7f239a7d72a7640ec1f948787434bc06e24e9ed00", size = 161312, upload-time = "2026-06-04T03:24:01.897Z" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/45/c9/bdbe19339f76d12985bc03572f330a01a93c04dffecaaea3061bdd7fb892/huggingface_hub-0.34.4.tar.gz", hash = "sha256:a4228daa6fb001be3f4f4bdaf9a0db00e1739235702848df00885c9b5742c85c", size = 459768, upload-time = "2025-08-08T09:14:52.365Z" } + +[package.optional-dependencies] +cu13 = [ + { name = "nvidia-cuda-cccl", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-nvcc", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-nvrtc", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-runtime", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] + +[[package]] +name = "identify" +version = "2.6.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/63/51723b5f116cc04b061cb6f5a561790abf249d25931d515cd375e063e0f4/identify-2.6.19.tar.gz", hash = "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842", size = 99567, upload-time = "2026-04-17T18:39:50.265Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/7b/bb06b061991107cd8783f300adff3e7b7f284e330fd82f507f2a1417b11d/huggingface_hub-0.34.4-py3-none-any.whl", hash = "sha256:9b365d781739c93ff90c359844221beef048403f1bc1f1c123c191257c3c890a", size = 561452, upload-time = "2025-08-08T09:14:50.159Z" }, + { url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397, upload-time = "2026-04-17T18:39:49.221Z" }, ] [[package]] @@ -1060,6 +1021,17 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, ] +[[package]] +name = "ijson" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f4/57/60d1a6a512f2f0508d0bc8b4f1cc5616fd3196619b66bd6a01f9155a1292/ijson-3.5.0.tar.gz", hash = "sha256:94688760720e3f5212731b3cb8d30267f9a045fb38fb3870254e7b9504246f31", size = 68658, upload-time = "2026-02-24T03:58:30.974Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/b5/955a83b031102c7a602e2c06d03aff0a0e584212f09edb94ccc754d203ac/ijson-3.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1e74aff8c681c24002b61b1822f9511d4c384f324f7dbc08c78538e01fdc9fcb", size = 135093, upload-time = "2026-02-24T03:56:59.267Z" }, + { url = "https://files.pythonhosted.org/packages/14/eb/80d6f8a748dead4034cea0939494a67d10ccf88d6413bf6e860393139676/ijson-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6ca0d1b6b5f8166a6248f4309497585fb8553b04bc8179a0260fad636cfdb798", size = 135588, upload-time = "2026-02-24T03:57:03.131Z" }, + { url = "https://files.pythonhosted.org/packages/3c/0a/e34c729a87ff67dc6540f6bcc896626158e691d433ab57db0086d73decd2/ijson-3.5.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04f0fc740311388ee745ba55a12292b722d6f52000b11acbb913982ba5fbdf87", size = 68618, upload-time = "2026-02-24T03:58:28.918Z" }, +] + [[package]] name = "iniconfig" version = "2.3.0" @@ -1083,7 +1055,7 @@ name = "jinja2" version = "3.1.6" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "markupsafe" }, + { name = "markupsafe", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } wheels = [ @@ -1096,67 +1068,18 @@ version = "0.15.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/66/b5/55f06bb281d92fb3cc86d14e1def2bd908bb77693183e7cb1f5a3c388b0c/jiter-0.15.0.tar.gz", hash = "sha256:4251acc80e2b7c9b7b8823456ea0fceeb0734dac2df7636d3c711b38476b5a76", size = 166640, upload-time = "2026-05-19T10:09:48.361Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/da/76a2c7e510ba15fe323d9509c223ab272da79ea59f54488f4a78da6426db/jiter-0.15.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:edebcf7d1f601199084bb6e844d7dc67e03e04f6ac786b0332d616635c4ff7a4", size = 310849, upload-time = "2026-05-19T10:06:51.944Z" }, - { url = "https://files.pythonhosted.org/packages/5d/8e/827be942883a4dc0862c48626ff41af3320b1902d136a0bf4b9041f2c567/jiter-0.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f924585cdacf631cd382b657966847bb537bf9ed0a6f9b991da5f05a631480f", size = 314991, upload-time = "2026-05-19T10:06:53.522Z" }, - { url = "https://files.pythonhosted.org/packages/6d/38/be2832be361ba1b9517c76f46d30b64e985be1dd43c974f4c3a4b1844436/jiter-0.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abbf258599526ad0326fe51e252e24f2bd6f24f1852681b4b78feda3808f1d18", size = 340843, upload-time = "2026-05-19T10:06:55.071Z" }, - { url = "https://files.pythonhosted.org/packages/6d/d8/90f01fb83c0c7ba509303ec93e32a308fbfa167d264860b01c0fd0dbbd06/jiter-0.15.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c468136b8bd6bb18c8786e4236a1fa27362f24cb23450ba0cb204ab379b8e6f", size = 365116, upload-time = "2026-05-19T10:06:56.893Z" }, - { url = "https://files.pythonhosted.org/packages/91/38/94593d34f8c67a0b6f6cbc027f016ffa9780b3a858a7a86f6fd7a15bcc1e/jiter-0.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05906b93d72f03339e6bb7cf8dc10ebda64a0266126eed6beba79e20abcf5fd4", size = 457970, upload-time = "2026-05-19T10:06:58.707Z" }, - { url = "https://files.pythonhosted.org/packages/df/04/d79962dd49d00c97e2a9b4cacea1947904d02135936960351f9a96d4c1a6/jiter-0.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:30ce785d2adb8e32c3f7741442370a74834ec4c01f3c48f0750227a0b4ef27d6", size = 375744, upload-time = "2026-05-19T10:07:00.471Z" }, - { url = "https://files.pythonhosted.org/packages/c3/2e/5d37abe2be0e819c21e2338bebd410e481763ce526a9138c8c3652fa0123/jiter-0.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fd73e3da91a0a722d67165e849ce2cdc10de0e0d48738c142be8c6c5f310f4c", size = 349609, upload-time = "2026-05-19T10:07:01.829Z" }, - { url = "https://files.pythonhosted.org/packages/7a/90/98768ad2ed90c1fda15d64157de2dfbf73c1c074d4b1bfaca915480bc7cf/jiter-0.15.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:ceb8fc27d38793f9c97149be8302720c5b22e5c195a37bf2c45dc36c4600a512", size = 354366, upload-time = "2026-05-19T10:07:03.587Z" }, - { url = "https://files.pythonhosted.org/packages/d6/c4/fbfb806209f1fe4b7dccdfb07bc62bb044300734a945b06fd64db446ef6a/jiter-0.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d726e3ceeb337191324b49de298142f27c3ad10886341555d1d5315b5f252c6a", size = 393519, upload-time = "2026-05-19T10:07:05.08Z" }, - { url = "https://files.pythonhosted.org/packages/37/1c/b9c257cd70cb453b6d10f3ebf0402cdb11669ab455389096f09839670290/jiter-0.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2c8aea7781d2a372227871de4e1a1332aa96f5a89fd76c5e835dafdbad102887", size = 519952, upload-time = "2026-05-19T10:07:06.589Z" }, - { url = "https://files.pythonhosted.org/packages/a9/1a/aa85027db7ab15829c12feebbc33b404f53fc399bd559d85fd0d6365ff0d/jiter-0.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cf4bd113a69c0a740e27cb962ce10630c36d2b8f59d759a651b955ee9d18a823", size = 550770, upload-time = "2026-05-19T10:07:08.228Z" }, - { url = "https://files.pythonhosted.org/packages/d4/54/8c3f65c8a5687925e84708f19d63f7f37d28e2b86a48d951702ad94424d8/jiter-0.15.0-cp310-cp310-win32.whl", hash = "sha256:d92a5cd21fdb083931d546c207aa29633787c5dc5b02daab2d32b843f88a2c53", size = 209303, upload-time = "2026-05-19T10:07:10.006Z" }, - { url = "https://files.pythonhosted.org/packages/d5/72/0528a1eb9f42dd2d8228a0711458628f35924d131f623eaebc35fd23d3d4/jiter-0.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:e58585a58209d72691ce2d62a9147445f5a87beb0bde97fde284c96ae392a3d1", size = 200404, upload-time = "2026-05-19T10:07:11.426Z" }, - { url = "https://files.pythonhosted.org/packages/e4/13/daa722f5765c393576f466378f9dfd29d77c9bed939e0688f96afa3601ea/jiter-0.15.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0f862193b8696249d22ec433e85fd2ab0ad9596bc3e45e6c0bc55e8aeba97be2", size = 310899, upload-time = "2026-05-19T10:07:12.89Z" }, - { url = "https://files.pythonhosted.org/packages/7f/82/2d2551829b082f4b6d82b9f939b031fb808a10aab1ec0664f82e150bb9a2/jiter-0.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1303d4d68a9b051ea90502402063ecf3807da00ad2affa19ca1ae3b90b3c5f67", size = 314963, upload-time = "2026-05-19T10:07:14.539Z" }, - { url = "https://files.pythonhosted.org/packages/2a/0a/8b1a51466f7fe9f31dbe4bc7e0ca848674f9825e0f737b929b97e8c60aa7/jiter-0.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:392b8ab019e5502d08aff85c6272209c24bc2cbe706ea82a56368f524236614a", size = 341730, upload-time = "2026-05-19T10:07:15.869Z" }, - { url = "https://files.pythonhosted.org/packages/f6/2a/e71dea19822e2e404e83992a08c1d6b9b617bb944f28c9c2fbd85d02c91e/jiter-0.15.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:773b6eb282ce11ee19f05f6b2d4404fa308e5bbd353b0b80a0262caad6db2cd7", size = 366214, upload-time = "2026-05-19T10:07:17.259Z" }, - { url = "https://files.pythonhosted.org/packages/c4/59/97e1fa539d124a509a00ab7f669289d1c1d236ecabf12948a18f16c91082/jiter-0.15.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d2c0c44d569ce0f2850f5c926f8caeb5f245fbc84475aeb36efccc2103e6dbd", size = 459527, upload-time = "2026-05-19T10:07:18.741Z" }, - { url = "https://files.pythonhosted.org/packages/d1/7a/4a68d331aef8cf2e2393c14a3aacb635c62aa86071b0229899fb5baaa907/jiter-0.15.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:032396229564bca02440396bd327710719f724f5e7b7e9f7a8eb3faa4a2c2281", size = 375451, upload-time = "2026-05-19T10:07:20.208Z" }, { url = "https://files.pythonhosted.org/packages/7b/7e/1c445c2b6f0e30a274dc8082e0c3c7825411cce80d726bccd697c98cc8d3/jiter-0.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3d37768fce7f88dd2a8c6091f2325dea27d30d30d5c6e7a1c0f0af77723b708", size = 349428, upload-time = "2026-05-19T10:07:22.372Z" }, - { url = "https://files.pythonhosted.org/packages/00/94/e20d38984fc17a636371bffd2ae0f698124fdc8e75ef969cd2da6ba7cea7/jiter-0.15.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:2c9cb907439d20bd0c7d7565ca01ee52234203208433749bae5b516907526928", size = 355405, upload-time = "2026-05-19T10:07:23.916Z" }, - { url = "https://files.pythonhosted.org/packages/94/fa/4d09f814779d0ea80a28ed8e4c6662ec9a4a8ecef0ac52190ebac6262d14/jiter-0.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9100ddbec09741cc66feb0fc6773f8bdbd0e3c345689368f260082ff85dcc0cd", size = 393688, upload-time = "2026-05-19T10:07:25.854Z" }, - { url = "https://files.pythonhosted.org/packages/54/9d/8eb5d4fb8bf7e93a75964a5da71a75c67c864baf7fa3f98598187b3c7e57/jiter-0.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ae1b0d82ac2d987f9ea512b1c9adfcc71a28de3dea3a6039b54d76cffda9901e", size = 520853, upload-time = "2026-05-19T10:07:27.303Z" }, { url = "https://files.pythonhosted.org/packages/e7/2c/5e07874e59e623a943a0acf1552a80d05b70f31b402287a8fc6d7ec634c7/jiter-0.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8020c99ec13a7db2b6f96cbe82ef4721c88b426a4892f27478044af0284615ef", size = 551016, upload-time = "2026-05-19T10:07:28.846Z" }, - { url = "https://files.pythonhosted.org/packages/22/ed/d2d34422143474cadc15b60d482b1c35683dbc5c63c24346ddd0df09bcaf/jiter-0.15.0-cp311-cp311-win32.whl", hash = "sha256:42bfb257930800cf43e7c62c832402c704ab60797c992faf88d20e903eac8f32", size = 209518, upload-time = "2026-05-19T10:07:30.431Z" }, - { url = "https://files.pythonhosted.org/packages/1d/7d/52778b930e5cc3e52a37d950b1c10494244308b4329b25a0ff0d88303a81/jiter-0.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:860a74063284a2ae9bfedd694f299cc2c68e2696c5f3d440cc9d18bb81b9dd04", size = 200565, upload-time = "2026-05-19T10:07:32.125Z" }, - { url = "https://files.pythonhosted.org/packages/3b/4f/d9b4067feb69b3fa6eb0488e1b59e2ad5b463fe39f59e527eab2aca00bb0/jiter-0.15.0-cp311-cp311-win_arm64.whl", hash = "sha256:37a10c377ce3a4a85f4a67f28b7afe093154cde77eaf248a72e856aa08b4d865", size = 195488, upload-time = "2026-05-19T10:07:33.846Z" }, - { url = "https://files.pythonhosted.org/packages/65/43/1fc62172aa98b50a7de9a25554060db510f85c89cfbed0dfe13e1907a139/jiter-0.15.0-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:411fa4dfa5a7ae3d11491027ffb9beadec3996010a986862db70d91abba1c750", size = 305585, upload-time = "2026-05-19T10:09:35.995Z" }, - { url = "https://files.pythonhosted.org/packages/e8/c4/dd58fcd9e2df83666e5c1c1347bef58ce919cd8efc3ffa38aeea62ce493b/jiter-0.15.0-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:2b0074e2f56eb2dacca1689760fd2852a068f85a0547a157b82cb4cafeb6768b", size = 306936, upload-time = "2026-05-19T10:09:37.435Z" }, - { url = "https://files.pythonhosted.org/packages/39/86/b695e16f1180c07f43ea98e73ecd21cf63fa2e1b0c1103739013784d11ae/jiter-0.15.0-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:913d02d29c9606643418d9ccfc3b72492ab25a6bf7889934e09a3490f8d3438b", size = 342453, upload-time = "2026-05-19T10:09:39.294Z" }, { url = "https://files.pythonhosted.org/packages/34/56/55d76614af37fe3f22a3347d1e410d2a15da581997cb2da499a625000bb5/jiter-0.15.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b15d3ec9b0449c40e85319bdb4caa8b77ab526e74f5532ed94bec15e2f66822c", size = 345606, upload-time = "2026-05-19T10:09:40.727Z" }, ] [[package]] -name = "joblib" -version = "1.5.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/41/f2/d34e8b3a08a9cc79a50b2208a93dce981fe615b64d5a4d4abee421d898df/joblib-1.5.3.tar.gz", hash = "sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3", size = 331603, upload-time = "2025-12-15T08:41:46.427Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl", hash = "sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713", size = 309071, upload-time = "2025-12-15T08:41:44.973Z" }, -] - -[[package]] -name = "jsonpatch" -version = "1.33" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jsonpointer" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/42/78/18813351fe5d63acad16aec57f94ec2b70a09e53ca98145589e185423873/jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c", size = 21699, upload-time = "2023-06-26T12:07:29.144Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade", size = 12898, upload-time = "2023-06-16T21:01:28.466Z" }, -] - -[[package]] -name = "jsonpointer" -version = "3.1.1" +name = "jmespath" +version = "1.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/c7/af399a2e7a67fd18d63c40c5e62d3af4e67b836a2107468b6a5ea24c4304/jsonpointer-3.1.1.tar.gz", hash = "sha256:0b801c7db33a904024f6004d526dcc53bbb8a4a0f4e32bfd10beadf60adf1900", size = 9068, upload-time = "2026-03-23T22:32:32.458Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/59/322338183ecda247fb5d1763a6cbe46eff7222eaeebafd9fa65d4bf5cb11/jmespath-1.1.0.tar.gz", hash = "sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d", size = 27377, upload-time = "2026-01-22T16:35:26.279Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl", hash = "sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca", size = 7659, upload-time = "2026-03-23T22:32:31.568Z" }, + { url = "https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl", hash = "sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64", size = 20419, upload-time = "2026-01-22T16:35:24.919Z" }, ] [[package]] @@ -1164,11 +1087,10 @@ name = "jsonschema" version = "4.26.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "attrs" }, - { name = "jsonschema-specifications" }, - { name = "referencing" }, - { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "attrs", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "jsonschema-specifications", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "referencing", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "rpds-py", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } wheels = [ @@ -1180,7 +1102,7 @@ name = "jsonschema-specifications" version = "2025.9.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "referencing" }, + { name = "referencing", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } wheels = [ @@ -1188,172 +1110,124 @@ wheels = [ ] [[package]] -name = "langchain" -version = "0.3.18" +name = "lance-namespace" +version = "0.8.6" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiohttp" }, - { name = "async-timeout", marker = "python_full_version < '3.11'" }, - { name = "langchain-core" }, - { name = "langchain-text-splitters" }, - { name = "langsmith" }, - { name = "numpy" }, - { name = "pydantic" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "sqlalchemy" }, - { name = "tenacity" }, + { name = "lance-namespace-urllib3-client", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/87/23/612d99c74889f672fe349f43a458a42e449650ebd57073b9e96e0b6b2253/langchain-0.3.18.tar.gz", hash = "sha256:311ac227a995545ff7c3f74c7767930c5349edef0b39f19d3105b86d39316b69", size = 10223807, upload-time = "2025-02-07T18:43:39.882Z" } +sdist = { url = "https://files.pythonhosted.org/packages/af/12/f7ab93b29be3edbf5fc3610714bf2d06088e7f4524bfb38dfd6852458b08/lance_namespace-0.8.6.tar.gz", hash = "sha256:18232e721c8188145f4ec9389cc2dfbeeabf54a619d94885ea1b3375bee9f4af", size = 11529, upload-time = "2026-06-12T17:36:41.651Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/93/83/a4b41a1cf8b22fd708104d50edf98b720aa28647d3083d83b8348927a786/langchain-0.3.18-py3-none-any.whl", hash = "sha256:1a6e629f02a25962aa5b16932e8f073248104a66804ed5af1f78618ad7c1d38d", size = 1010321, upload-time = "2025-02-07T18:43:37.341Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1b/5b1668ee2dc8910965f390640359112a31157092fcf8e000b89c79b58708/lance_namespace-0.8.6-py3-none-any.whl", hash = "sha256:571eae34f9aad70e5b05020416c2860889b9ec82993ccd0eb015e7b39c3ea309", size = 13383, upload-time = "2026-06-12T17:36:43.456Z" }, ] [[package]] -name = "langchain-community" -version = "0.3.17" +name = "lance-namespace-urllib3-client" +version = "0.8.6" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiohttp" }, - { name = "dataclasses-json" }, - { name = "httpx-sse" }, - { name = "langchain" }, - { name = "langchain-core" }, - { name = "langsmith" }, - { name = "numpy" }, - { name = "pydantic-settings" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "sqlalchemy" }, - { name = "tenacity" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "python-dateutil", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "urllib3", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0a/e6/03df441525516f351a56aa2f156c8636daa4849f479032706680d8121e86/langchain_community-0.3.17.tar.gz", hash = "sha256:d8547a3d4f8307950be88ca638cd6ab1abe2440d0012e401a172ba4a39aa8044", size = 33213782, upload-time = "2025-02-07T19:45:41.263Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/80/fb224b4a89c1c1638cde949cb6cce6c3aca7759effbfea46a3d9c3960b21/lance_namespace_urllib3_client-0.8.6.tar.gz", hash = "sha256:b6fb1d306e74a7576e5309919020be744527de484a63dbf5eed10f8b368548df", size = 228772, upload-time = "2026-06-12T17:36:42.609Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/31/39c30cab465774835e2c18d3746587e6fd0c9f7265b1c6b1fcd2e1684dd2/langchain_community-0.3.17-py3-none-any.whl", hash = "sha256:13bbd87d681b0df67bafa294321613b13ac524f173c92f11048d40c74e585f0b", size = 2516904, upload-time = "2025-02-07T19:45:36.848Z" }, + { url = "https://files.pythonhosted.org/packages/c5/90/1e27de15cd1b16785a1c7312beb0a59e75c8344a815f600f58173a565bd1/lance_namespace_urllib3_client-0.8.6-py3-none-any.whl", hash = "sha256:9d78249c3fb15aa3d15d668f78f04a275af3d08d800a7027492f37996ac4968b", size = 369950, upload-time = "2026-06-12T17:36:40.438Z" }, ] [[package]] -name = "langchain-core" -version = "0.3.35" +name = "lancedb" +version = "0.25.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jsonpatch" }, - { name = "langsmith" }, - { name = "packaging" }, - { name = "pydantic" }, - { name = "pyyaml" }, - { name = "tenacity" }, - { name = "typing-extensions" }, + { name = "deprecation", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "lance-namespace", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "overrides", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyarrow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/56/5c/5ed0aa88d0ffc52634b97dcd971d675cfc55072b28f7723bba2ef9432bad/langchain_core-0.3.35.tar.gz", hash = "sha256:328688228ece259da734417d477994a69cf8202dea9ed4271f2d792e3575c6fc", size = 525736, upload-time = "2025-02-12T18:16:19.116Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/63/be67b8ab4f4cf07b8da65a67ff72ea870ec8cf9f2e95e3a5b837a5604d1b/langchain_core-0.3.35-py3-none-any.whl", hash = "sha256:81a4097226e180fa6c64e2d2ab38dcacbbc23b64fc109fb15622910fe8951670", size = 413151, upload-time = "2025-02-12T18:16:16.729Z" }, + { url = "https://files.pythonhosted.org/packages/d7/62/a149b47dc4ccf3c569eba722b805cbba1b90566976ff1d459f20f7f00ebc/lancedb-0.25.3-cp39-abi3-macosx_10_15_x86_64.whl", hash = "sha256:1cfa4dd97b33ca8f73288aa4b1baaddc9545ce0d3c8e5d06fba8feb77f42363f", size = 38425074, upload-time = "2025-11-07T05:58:15.763Z" }, + { url = "https://files.pythonhosted.org/packages/b2/94/ae3e74bb27dcca321ccf1e7a32ccab09b1062ddf54f96376221ca8610e7c/lancedb-0.25.3-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:8a7bfe0cb2146f6e78e9f376673ed2f906b93dab84df97dad2ba9fa52f97e152", size = 34506539, upload-time = "2025-11-07T05:14:04.901Z" }, + { url = "https://files.pythonhosted.org/packages/c1/95/32ddb779a01cd0d349f391e7d5f4218d045f9848c1d757f5a8ace4c63b09/lancedb-0.25.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:500beac161f73e3e6826a711efb1d24397d892d07dfdce2c9fb1da73f8de506c", size = 39145675, upload-time = "2025-11-07T05:24:40.813Z" }, + { url = "https://files.pythonhosted.org/packages/ab/15/f0d69acc5e06892d19e09c127cd928cf20f5d2966a069e93693fc389b132/lancedb-0.25.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3035665fb8e4aaff8dff2602747cc77aeba6bc39f1a95345abc3275c97a044cb", size = 39191458, upload-time = "2025-11-07T05:24:38.047Z" }, ] [[package]] -name = "langchain-openai" -version = "0.3.5" +name = "lark" +version = "1.2.2" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "langchain-core" }, - { name = "openai" }, - { name = "tiktoken" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fe/18/c7829a2ce2977d22db582d19b311d7dc3d100a51c32f5766517ee3474c26/langchain_openai-0.3.5.tar.gz", hash = "sha256:40cd5649b93b1af20a20e1cbee5a47628a77e15114a11f9b3f2ab08c7d1302bf", size = 255643, upload-time = "2025-02-11T19:25:22.581Z" } +sdist = { url = "https://files.pythonhosted.org/packages/af/60/bc7622aefb2aee1c0b4ba23c1446d3e30225c8770b38d7aedbfb65ca9d5a/lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80", size = 252132, upload-time = "2024-08-13T19:49:00.652Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/4a/18e98bb61e00f0553383fd14997a8d778999f5cf80109a74eb746a1f5919/langchain_openai-0.3.5-py3-none-any.whl", hash = "sha256:137a7514f11afeab26e5fc1eda3c2b96fbbb18a96d963ba256faecceb189ea71", size = 54982, upload-time = "2025-02-11T19:25:20.619Z" }, + { url = "https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c", size = 111036, upload-time = "2024-08-13T19:48:58.603Z" }, ] [[package]] -name = "langchain-text-splitters" -version = "0.3.6" +name = "license-expression" +version = "30.4.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "langchain-core" }, + { name = "boolean-py", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0d/33/89912a07c63e4e818f9b0c8d52e4f9d600c97beca8a91db8c9dae6a1b28f/langchain_text_splitters-0.3.6.tar.gz", hash = "sha256:c537972f4b7c07451df431353a538019ad9dadff7a1073ea363946cea97e1bee", size = 40545, upload-time = "2025-02-06T21:19:16.21Z" } +sdist = { url = "https://files.pythonhosted.org/packages/40/71/d89bb0e71b1415453980fd32315f2a037aad9f7f70f695c7cec7035feb13/license_expression-30.4.4.tar.gz", hash = "sha256:73448f0aacd8d0808895bdc4b2c8e01a8d67646e4188f887375398c761f340fd", size = 186402, upload-time = "2025-07-22T11:13:32.17Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4c/f8/6b82af988e65af9697f6a2f25373fb173fd32d48b62772a8773c5184c870/langchain_text_splitters-0.3.6-py3-none-any.whl", hash = "sha256:e5d7b850f6c14259ea930be4a964a65fa95d9df7e1dbdd8bad8416db72292f4e", size = 31197, upload-time = "2025-02-06T21:19:15.046Z" }, + { url = "https://files.pythonhosted.org/packages/af/40/791891d4c0c4dab4c5e187c17261cedc26285fd41541577f900470a45a4d/license_expression-30.4.4-py3-none-any.whl", hash = "sha256:421788fdcadb41f049d2dc934ce666626265aeccefddd25e162a26f23bcbf8a4", size = 120615, upload-time = "2025-07-22T11:13:31.217Z" }, ] [[package]] -name = "langcodes" -version = "3.5.1" +name = "llguidance" +version = "1.7.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/75/f9edc5d72945019312f359e69ded9f82392a81d49c5051ed3209b100c0d2/langcodes-3.5.1.tar.gz", hash = "sha256:40bff315e01b01d11c2ae3928dd4f5cbd74dd38f9bd912c12b9a3606c143f731", size = 191084, upload-time = "2025-12-02T16:22:01.627Z" } +sdist = { url = "https://files.pythonhosted.org/packages/da/91/6bc8bb503dc259e46d253b5424385a54fe06c38a4c7a12befe69a3c2455a/llguidance-1.7.6.tar.gz", hash = "sha256:db7febbe412ed2015501904646750071d7e00e6df7f85c4b956ad4f206fd2df7", size = 1156574, upload-time = "2026-06-03T20:13:25.316Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dd/c1/d10b371bcba7abce05e2b33910e39c33cfa496a53f13640b7b8e10bb4d2b/langcodes-3.5.1-py3-none-any.whl", hash = "sha256:b6a9c25c603804e2d169165091d0cdb23934610524a21d226e4f463e8e958a72", size = 183050, upload-time = "2025-12-02T16:21:59.954Z" }, + { url = "https://files.pythonhosted.org/packages/1a/64/d74336f22242ef94356a456057d4ff1be7c1bc9c7dbc867171c6982a5512/llguidance-1.7.6-cp39-abi3-manylinux_2_31_x86_64.whl", hash = "sha256:ceec951d29a74309984e3be0fe7f5f56c1362434cd937abd517b259a60908b1e", size = 3074809, upload-time = "2026-06-03T20:13:15.498Z" }, ] [[package]] -name = "langsmith" -version = "0.2.11" +name = "llvmlite" +version = "0.47.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "httpx" }, - { name = "orjson", marker = "platform_python_implementation != 'PyPy'" }, - { name = "pydantic" }, - { name = "requests" }, - { name = "requests-toolbelt" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ae/03/dd26e203a6cc4df053b3f2a3d40bd17cce7b495f5fab2c05ff8005303b68/langsmith-0.2.11.tar.gz", hash = "sha256:edf070349dbfc63dc4fc30e22533a11d77768e99ef269399b221c48fee25c737", size = 314724, upload-time = "2025-01-17T00:25:37.495Z" } +sdist = { url = "https://files.pythonhosted.org/packages/01/88/a8952b6d5c21e74cbf158515b779666f692846502623e9e3c39d8e8ba25f/llvmlite-0.47.0.tar.gz", hash = "sha256:62031ce968ec74e95092184d4b0e857e444f8fdff0b8f9213707699570c33ccc", size = 193614, upload-time = "2026-03-31T18:29:53.497Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/5b/b17c0c3dea1a76d75a386fde192221de8fccf3110f200a08aefd6666cfd7/langsmith-0.2.11-py3-none-any.whl", hash = "sha256:084cf66a7f093c25e6b30fb4005008ec5fa9843110e2f0b265ce133c6a0225e6", size = 326892, upload-time = "2025-01-17T00:25:33.456Z" }, + { url = "https://files.pythonhosted.org/packages/46/27/5799b020e4cdfb25a7c951c06a96397c135efcdc21b78d853bbd9c814c7d/llvmlite-0.47.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ca14f02e29134e837982497959a8e2193d6035235de1cb41a9cb2bd6da4eedbb", size = 56275177, upload-time = "2026-03-31T18:28:31.01Z" }, ] [[package]] -name = "lark" -version = "1.2.2" +name = "lm-format-enforcer" +version = "0.11.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/60/bc7622aefb2aee1c0b4ba23c1446d3e30225c8770b38d7aedbfb65ca9d5a/lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80", size = 252132, upload-time = "2024-08-13T19:49:00.652Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c", size = 111036, upload-time = "2024-08-13T19:48:58.603Z" }, +dependencies = [ + { name = "interegular", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "packaging", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pyyaml", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] - -[[package]] -name = "llguidance" -version = "0.7.30" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bf/38/d1ef3ae08d8d857e5e0690c5b1e07bf7eb4a1cae5881d87215826dc6cadb/llguidance-0.7.30.tar.gz", hash = "sha256:e93bf75f2b6e48afb86a5cee23038746975e1654672bf5ba0ae75f7d4d4a2248", size = 1055528, upload-time = "2025-06-23T00:23:49.247Z" } +sdist = { url = "https://files.pythonhosted.org/packages/84/d5/41cd417ba7dfdbbcfe46cebf81fb3dfd7c591b89897560ad05bb410a465d/lm_format_enforcer-0.11.3.tar.gz", hash = "sha256:e68081c108719cce284a9bcc889709b26ffb085a1945b5eba3a12cfa96d528da", size = 40258, upload-time = "2025-08-24T19:37:47.527Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/e1/694c89986fcae7777184fc8b22baa0976eba15a6847221763f6ad211fc1f/llguidance-0.7.30-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c80af02c118d2b0526bcecaab389af2ed094537a069b0fc724cd2a2f2ba3990f", size = 3327974, upload-time = "2025-06-23T00:23:47.556Z" }, - { url = "https://files.pythonhosted.org/packages/fd/77/ab7a548ae189dc23900fdd37803c115c2339b1223af9e8eb1f4329b5935a/llguidance-0.7.30-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:00a256d532911d2cf5ba4ef63e182944e767dd2402f38d63002016bc37755958", size = 3210709, upload-time = "2025-06-23T00:23:45.872Z" }, - { url = "https://files.pythonhosted.org/packages/9c/5b/6a166564b14f9f805f0ea01ec233a84f55789cb7eeffe1d6224ccd0e6cdd/llguidance-0.7.30-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af8741c867e4bc7e42f7cdc68350c076b4edd0ca10ecefbde75f15a9f6bc25d0", size = 14867038, upload-time = "2025-06-23T00:23:39.571Z" }, - { url = "https://files.pythonhosted.org/packages/af/80/5a40b9689f17612434b820854cba9b8cabd5142072c491b5280fe5f7a35e/llguidance-0.7.30-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9edc409b9decd6cffba5f5bf3b4fbd7541f95daa8cbc9510cbf96c6ab1ffc153", size = 15004926, upload-time = "2025-06-23T00:23:43.965Z" }, - { url = "https://files.pythonhosted.org/packages/99/47/58e49a118b514855b245f8a962c6aaf9a5cc95a0f61eac7e230e691c7b7e/llguidance-0.7.30-cp39-abi3-win_amd64.whl", hash = "sha256:05234ecceea7c9c6ff13b9739112043173a3bcb88cae860249b20335a07b3075", size = 2796878, upload-time = "2025-06-23T00:23:51Z" }, + { url = "https://files.pythonhosted.org/packages/a0/ef/11292bb0b85cf4c93447cab5a29f64576ed14d3ab4280e35ddd23486594a/lm_format_enforcer-0.11.3-py3-none-any.whl", hash = "sha256:cf586350875def1ae7a8fba84fcbbfc8371424b6c9d05c1fcba70aa233fbf06f", size = 45418, upload-time = "2025-08-24T19:37:46.325Z" }, ] [[package]] -name = "llvmlite" -version = "0.44.0" +name = "loguru" +version = "0.7.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/89/6a/95a3d3610d5c75293d5dbbb2a76480d5d4eeba641557b69fe90af6c5b84e/llvmlite-0.44.0.tar.gz", hash = "sha256:07667d66a5d150abed9157ab6c0b9393c9356f229784a4385c02f99e94fc94d4", size = 171880, upload-time = "2025-01-20T11:14:41.342Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload-time = "2024-12-06T11:20:56.608Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/75/d4863ddfd8ab5f6e70f4504cf8cc37f4e986ec6910f4ef8502bb7d3c1c71/llvmlite-0.44.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:9fbadbfba8422123bab5535b293da1cf72f9f478a65645ecd73e781f962ca614", size = 28132306, upload-time = "2025-01-20T11:12:18.634Z" }, - { url = "https://files.pythonhosted.org/packages/37/d9/6e8943e1515d2f1003e8278819ec03e4e653e2eeb71e4d00de6cfe59424e/llvmlite-0.44.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cccf8eb28f24840f2689fb1a45f9c0f7e582dd24e088dcf96e424834af11f791", size = 26201096, upload-time = "2025-01-20T11:12:24.544Z" }, - { url = "https://files.pythonhosted.org/packages/aa/46/8ffbc114def88cc698906bf5acab54ca9fdf9214fe04aed0e71731fb3688/llvmlite-0.44.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7202b678cdf904823c764ee0fe2dfe38a76981f4c1e51715b4cb5abb6cf1d9e8", size = 42361859, upload-time = "2025-01-20T11:12:31.839Z" }, - { url = "https://files.pythonhosted.org/packages/30/1c/9366b29ab050a726af13ebaae8d0dff00c3c58562261c79c635ad4f5eb71/llvmlite-0.44.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40526fb5e313d7b96bda4cbb2c85cd5374e04d80732dd36a282d72a560bb6408", size = 41184199, upload-time = "2025-01-20T11:12:40.049Z" }, - { url = "https://files.pythonhosted.org/packages/69/07/35e7c594b021ecb1938540f5bce543ddd8713cff97f71d81f021221edc1b/llvmlite-0.44.0-cp310-cp310-win_amd64.whl", hash = "sha256:41e3839150db4330e1b2716c0be3b5c4672525b4c9005e17c7597f835f351ce2", size = 30332381, upload-time = "2025-01-20T11:12:47.054Z" }, - { url = "https://files.pythonhosted.org/packages/b5/e2/86b245397052386595ad726f9742e5223d7aea999b18c518a50e96c3aca4/llvmlite-0.44.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:eed7d5f29136bda63b6d7804c279e2b72e08c952b7c5df61f45db408e0ee52f3", size = 28132305, upload-time = "2025-01-20T11:12:53.936Z" }, - { url = "https://files.pythonhosted.org/packages/ff/ec/506902dc6870249fbe2466d9cf66d531265d0f3a1157213c8f986250c033/llvmlite-0.44.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ace564d9fa44bb91eb6e6d8e7754977783c68e90a471ea7ce913bff30bd62427", size = 26201090, upload-time = "2025-01-20T11:12:59.847Z" }, - { url = "https://files.pythonhosted.org/packages/99/fe/d030f1849ebb1f394bb3f7adad5e729b634fb100515594aca25c354ffc62/llvmlite-0.44.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5d22c3bfc842668168a786af4205ec8e3ad29fb1bc03fd11fd48460d0df64c1", size = 42361858, upload-time = "2025-01-20T11:13:07.623Z" }, - { url = "https://files.pythonhosted.org/packages/d7/7a/ce6174664b9077fc673d172e4c888cb0b128e707e306bc33fff8c2035f0d/llvmlite-0.44.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f01a394e9c9b7b1d4e63c327b096d10f6f0ed149ef53d38a09b3749dcf8c9610", size = 41184200, upload-time = "2025-01-20T11:13:20.058Z" }, - { url = "https://files.pythonhosted.org/packages/5f/c6/258801143975a6d09a373f2641237992496e15567b907a4d401839d671b8/llvmlite-0.44.0-cp311-cp311-win_amd64.whl", hash = "sha256:d8489634d43c20cd0ad71330dde1d5bc7b9966937a263ff1ec1cebb90dc50955", size = 30331193, upload-time = "2025-01-20T11:13:26.976Z" }, + { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload-time = "2024-12-06T11:20:54.538Z" }, ] [[package]] -name = "lm-format-enforcer" -version = "0.10.12" +name = "markdown" +version = "3.10.2" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "interegular" }, - { name = "packaging" }, - { name = "pydantic" }, - { name = "pyyaml" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/eb/e0/bdbfad8f5d319de5d05cc2b70d579b49eb8ce3a09989cd0999b8c138c068/lm_format_enforcer-0.10.12.tar.gz", hash = "sha256:130bd7ce8a6b224f25b6314ba9ae78ee4b48594db1767c74391c9182e2902a6c", size = 39481, upload-time = "2025-08-04T21:13:45.727Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/57/1c/7bb80fe2dff9a9c38b180571ca867f518eb9110f79d4b670ea124e153680/lm_format_enforcer-0.10.12-py3-none-any.whl", hash = "sha256:267c2b421c77f7cd51ac2e0e3af8db278a373704d834b49ff55f18a2c05e9800", size = 44327, upload-time = "2025-08-04T21:13:44.492Z" }, + { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" }, ] [[package]] @@ -1361,7 +1235,7 @@ name = "markdown-it-py" version = "4.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mdurl" }, + { name = "mdurl", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } wheels = [ @@ -1374,40 +1248,34 @@ version = "3.0.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631, upload-time = "2025-09-27T18:36:05.558Z" }, - { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057, upload-time = "2025-09-27T18:36:07.165Z" }, - { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050, upload-time = "2025-09-27T18:36:08.005Z" }, - { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681, upload-time = "2025-09-27T18:36:08.881Z" }, - { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705, upload-time = "2025-09-27T18:36:10.131Z" }, - { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524, upload-time = "2025-09-27T18:36:11.324Z" }, - { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282, upload-time = "2025-09-27T18:36:12.573Z" }, - { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745, upload-time = "2025-09-27T18:36:13.504Z" }, - { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571, upload-time = "2025-09-27T18:36:14.779Z" }, - { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056, upload-time = "2025-09-27T18:36:16.125Z" }, - { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932, upload-time = "2025-09-27T18:36:17.311Z" }, { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, - { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" }, - { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" }, - { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" }, - { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" }, { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" }, - { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" }, - { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" }, - { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" }, ] [[package]] -name = "marshmallow" -version = "3.26.2" +name = "mcp" +version = "1.28.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "packaging" }, + { name = "anyio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "httpx", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "httpx-sse", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "jsonschema", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic-settings", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pyjwt", extra = ["crypto"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "python-multipart", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "sse-starlette", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "starlette", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-inspection", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "uvicorn", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/79/de6c16cc902f4fc372236926b0ce2ab7845268dcc30fb2fbb7f71b418631/marshmallow-3.26.2.tar.gz", hash = "sha256:bbe2adb5a03e6e3571b573f42527c6fe926e17467833660bebd11593ab8dfd57", size = 222095, upload-time = "2025-12-22T06:53:53.309Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c1/ee/94c6c50ffc5b5cf4737052275d11b57367f32d1a8516e31dcd60591b3916/mcp-1.28.0.tar.gz", hash = "sha256:559d3f9943674cafbe5744c5d3794f3237e8b47f9bbc58e20c0fad680d8487c2", size = 636040, upload-time = "2026-06-16T21:37:17.996Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/be/2f/5108cb3ee4ba6501748c4908b908e55f42a5b66245b4cfe0c99326e1ef6e/marshmallow-3.26.2-py3-none-any.whl", hash = "sha256:013fa8a3c4c276c24d26d84ce934dc964e2aa794345a0f8c7e5a7191482c8a73", size = 50964, upload-time = "2025-12-22T06:53:51.801Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e1/4c1dc1fbb688641a712d34650c3d58bbbdcb314ddb75bc5817bbf33515a4/mcp-1.28.0-py3-none-any.whl", hash = "sha256:9c1e7cf3a9125557e418ecd4fed8e9adddce81b0dfdae4d6601d700f5beb71a4", size = 221959, upload-time = "2026-06-16T21:37:16.579Z" }, ] [[package]] @@ -1420,124 +1288,184 @@ wheels = [ ] [[package]] -name = "medspacy" -version = "1.3.1" +name = "mergedeep" +version = "1.3.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" }, +] + +[[package]] +name = "mistral-common" +version = "1.11.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jsonschema" }, - { name = "medspacy-quickumls" }, - { name = "pyrush" }, - { name = "pysbd" }, - { name = "spacy" }, + { name = "jsonschema", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pillow", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic-extra-types", extra = ["pycountry"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "requests", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tiktoken", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/03/3c5d4c9430da406f8444f9a7b058a6aa89c525fb068a57fe2ab8b04a6d08/mistral_common-1.11.3.tar.gz", hash = "sha256:6437e128fc8a307318440839ca14ddf2e8060056b062233ec0db10352651374c", size = 6360629, upload-time = "2026-06-04T09:01:11.131Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/76/dbfdf9c59e2a4b0116587626a3768c2a3b2ba1758b5756743918c2337fdc/mistral_common-1.11.3-py3-none-any.whl", hash = "sha256:dbfcef9d0c892727ee08a080f0c1039baed5430b291f5425ffd88892bf09e52c", size = 6533154, upload-time = "2026-06-04T09:01:14.186Z" }, +] + +[package.optional-dependencies] +image = [ + { name = "opencv-python-headless", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/91/82/822c73438eac61351361f3de7278e381c42df81740d2dca363adc736e74d/medspacy-1.3.1.tar.gz", hash = "sha256:976599d9446e98018b311951cfa926be5a59d0c140967b828fe98bc4bada40fe", size = 244637, upload-time = "2024-11-21T22:19:07.592Z" } [[package]] -name = "medspacy-quickumls" -version = "3.2" +name = "mkdocs" +version = "1.6.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "medspacy-unqlite" }, - { name = "nltk" }, - { name = "numpy" }, - { name = "pysimstring" }, - { name = "pytest" }, - { name = "six" }, - { name = "spacy" }, - { name = "unidecode" }, + { name = "click", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "ghp-import", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "jinja2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "markdown", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "markupsafe", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mergedeep", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocs-get-deps", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pathspec", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml-env-tag", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "watchdog", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/91/a6/2fbf9b7dd475a4797f636f6bec2af0077f1c6ae4c27ca667858cb6fd5ad5/medspacy_quickumls-3.2.tar.gz", hash = "sha256:eeea4c94f4e46529470b9de894bac3384fe883f843d321cd578a62f880439165", size = 69852, upload-time = "2024-05-14T15:17:43.182Z" } [[package]] -name = "medspacy-unqlite" -version = "0.9.8" +name = "mkdocs-autorefs" +version = "1.4.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9a/e2/a618321ed44add90c7777f7e894a0dce8fe1336b15032ba32f04d100a174/medspacy_unqlite-0.9.8.tar.gz", hash = "sha256:8bcd311b7038346d8803a1d9c50823ef3c99713ffb0a18f22d17ba6c9563a2eb", size = 636272, upload-time = "2025-05-16T08:07:18.957Z" } +dependencies = [ + { name = "markdown", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "markupsafe", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/c0/f641843de3f612a6b48253f39244165acff36657a91cc903633d456ae1ac/mkdocs_autorefs-1.4.4.tar.gz", hash = "sha256:d54a284f27a7346b9c38f1f852177940c222da508e66edc816a0fa55fc6da197", size = 56588, upload-time = "2026-02-10T15:23:55.105Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b0/20/aa225f105a6de9d5fbc1e4a5ead7ec8b85489cc17bdf5bb6cf2658d238dc/medspacy_unqlite-0.9.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39a5bda42ea1930e5153458739db545b61a0517487fc949f4855b0bff2f8168a", size = 349653, upload-time = "2025-05-16T09:17:18.852Z" }, - { url = "https://files.pythonhosted.org/packages/42/07/03024cf0ae1462121171c99a23a614749ddf7f58288a8907e4a31fedec88/medspacy_unqlite-0.9.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:96424f7accbe217b00ab484dd49f234ad45d835f2dea529004c8c9523a9ae511", size = 328738, upload-time = "2025-05-16T09:17:19.825Z" }, - { url = "https://files.pythonhosted.org/packages/c0/cc/8acbd4ad7a35b5db16769a5f597c51a0cc62571d21b1f95afa59c50ebc74/medspacy_unqlite-0.9.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:552799aebf8f29bbb7735214fc9990c9ab2d2bc08f189c6e2500abb3491c438c", size = 418121, upload-time = "2025-05-16T09:17:21.296Z" }, - { url = "https://files.pythonhosted.org/packages/05/6b/ec5dd155e8c92e5c84a44c327054c04488be1e398330ed7c933f1845b249/medspacy_unqlite-0.9.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:91bc3281c23ed31a1a691b4f26002ea7d42c1e9d8fa9dbeee19a57324be83205", size = 426041, upload-time = "2025-05-16T09:17:22.312Z" }, - { url = "https://files.pythonhosted.org/packages/d0/84/ae672840c4f88922867158d78bc1aa3ccfde75dd463ad517bb5dce3e19fc/medspacy_unqlite-0.9.8-cp310-cp310-win32.whl", hash = "sha256:13f8b55b4f5150dcd765779abd54b3c8a6f38ef57494cecf1eaf19ac546c902b", size = 248420, upload-time = "2025-05-16T09:17:23.696Z" }, - { url = "https://files.pythonhosted.org/packages/ed/c8/0b81ab6cb3b71ea17da5dbe5b0f2b0d5dfe5de66216374b89fc9c8aa4f5b/medspacy_unqlite-0.9.8-cp310-cp310-win_amd64.whl", hash = "sha256:41c69c542d15ec650e219e1cb6033deb5f466160b95b6ff6b66feefab77069f0", size = 314572, upload-time = "2025-05-16T09:17:24.951Z" }, - { url = "https://files.pythonhosted.org/packages/6e/96/0b40d77d0994e5f7ffda86911f19d769c65fad840804932226a8c624f08f/medspacy_unqlite-0.9.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3dbb26ca6219dcb57dfe518395009c1ce75d43202e3cbd725bfa9c5c071b8857", size = 349435, upload-time = "2025-05-16T09:17:26.331Z" }, - { url = "https://files.pythonhosted.org/packages/ed/c3/7f25aa5185a0c534ab1638184fb5defbe45edefce72d2de138121bfbcfa7/medspacy_unqlite-0.9.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db392053fcf3ce76beb89982eac078837dd486247770e350b2dd759b986ff45e", size = 327939, upload-time = "2025-05-16T09:17:27.308Z" }, - { url = "https://files.pythonhosted.org/packages/71/e2/c77a817c18ac1b2d584e46068ae481855b03307a93c88769833ab8b0877a/medspacy_unqlite-0.9.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f814537abd391fe5d057738c96192dd0dbe4cc61135db939112251ed92bdb8ed", size = 415399, upload-time = "2025-05-16T05:26:17.439Z" }, - { url = "https://files.pythonhosted.org/packages/cf/8b/16b95bc395d14edec734530be1992934df92636bfa659c84d8d6064c802e/medspacy_unqlite-0.9.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5d5564246ebe17ad16a4432b2e8bb8fa562fee481d8bed291e205d18e870ba7d", size = 423744, upload-time = "2025-05-16T09:17:28.302Z" }, - { url = "https://files.pythonhosted.org/packages/da/06/85dcf7479f5ebe0669e03ae402dce9a5c812e1244183727b4326b6811a3f/medspacy_unqlite-0.9.8-cp311-cp311-win32.whl", hash = "sha256:d79203c19c8ac92bd7c15d2aef56d112f590b88be2357ceb97f27a648828e712", size = 248637, upload-time = "2025-05-16T09:17:29.636Z" }, - { url = "https://files.pythonhosted.org/packages/84/85/a9a3c297adbcd561934c4782991116a24b0d0ebdb7fb463081f916a4cc56/medspacy_unqlite-0.9.8-cp311-cp311-win_amd64.whl", hash = "sha256:9223885a6dd32e5861a5c2be87639d58b2b94724c8d11b387e90ac51db093355", size = 316423, upload-time = "2025-05-16T09:17:30.868Z" }, + { url = "https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl", hash = "sha256:834ef5408d827071ad1bc69e0f39704fa34c7fc05bc8e1c72b227dfdc5c76089", size = 25530, upload-time = "2026-02-10T15:23:53.817Z" }, ] [[package]] -name = "mistral-common" -version = "1.11.3" +name = "mkdocs-get-deps" +version = "0.2.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jsonschema" }, - { name = "numpy" }, - { name = "pillow" }, - { name = "pydantic" }, - { name = "pydantic-extra-types", extra = ["pycountry"] }, - { name = "requests" }, - { name = "tiktoken" }, - { name = "typing-extensions" }, + { name = "mergedeep", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "platformdirs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2e/03/3c5d4c9430da406f8444f9a7b058a6aa89c525fb068a57fe2ab8b04a6d08/mistral_common-1.11.3.tar.gz", hash = "sha256:6437e128fc8a307318440839ca14ddf2e8060056b062233ec0db10352651374c", size = 6360629, upload-time = "2026-06-04T09:01:11.131Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/25/b3cccb187655b9393572bde9b09261d267c3bf2f2cdabe347673be5976a6/mkdocs_get_deps-0.2.2.tar.gz", hash = "sha256:8ee8d5f316cdbbb2834bc1df6e69c08fe769a83e040060de26d3c19fad3599a1", size = 11047, upload-time = "2026-03-10T02:46:33.632Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/76/dbfdf9c59e2a4b0116587626a3768c2a3b2ba1758b5756743918c2337fdc/mistral_common-1.11.3-py3-none-any.whl", hash = "sha256:dbfcef9d0c892727ee08a080f0c1039baed5430b291f5425ffd88892bf09e52c", size = 6533154, upload-time = "2026-06-04T09:01:14.186Z" }, + { url = "https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl", hash = "sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650", size = 9555, upload-time = "2026-03-10T02:46:32.256Z" }, ] -[package.optional-dependencies] -audio = [ - { name = "soundfile" }, - { name = "soxr" }, +[[package]] +name = "mkdocs-material" +version = "9.7.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "babel", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "backrefs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "colorama", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "jinja2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "markdown", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocs-material-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "paginate", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pygments", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pymdown-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -image = [ - { name = "opencv-python-headless" }, +sdist = { url = "https://files.pythonhosted.org/packages/45/29/6d2bcf41ae40802c4beda2432396fff97b8456fb496371d1bc7aad6512ec/mkdocs_material-9.7.6.tar.gz", hash = "sha256:00bdde50574f776d328b1862fe65daeaf581ec309bd150f7bff345a098c64a69", size = 4097959, upload-time = "2026-03-19T15:41:58.161Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl", hash = "sha256:71b84353921b8ea1ba84fe11c50912cc512da8fe0881038fcc9a0761c0e635ba", size = 9305470, upload-time = "2026-03-19T15:41:55.217Z" }, +] + +[[package]] +name = "mkdocs-material-extensions" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload-time = "2023-11-22T19:09:45.208Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload-time = "2023-11-22T19:09:43.465Z" }, +] + +[[package]] +name = "mkdocstrings" +version = "1.0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jinja2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "markdown", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "markupsafe", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocs-autorefs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pymdown-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1d/5d/f888d4d3eb31359b327bc9b17a212d6ef03fe0b0682fbb3fc2cb849fb12b/mkdocstrings-1.0.4.tar.gz", hash = "sha256:3969a6515b77db65fd097b53c1b7aa4ae840bd71a2ee62a6a3e89503446d7172", size = 100088, upload-time = "2026-04-15T09:16:53.376Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl", hash = "sha256:63464b4b29053514f32a1dbbf604e52876d5e638111b0c295ab7ed3cac73ca9b", size = 35560, upload-time = "2026-04-15T09:16:51.436Z" }, +] + +[package.optional-dependencies] +python = [ + { name = "mkdocstrings-python", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] [[package]] -name = "mlx" -version = "0.31.2" +name = "mkdocstrings-python" +version = "2.0.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mlx-metal", marker = "sys_platform == 'darwin'" }, + { name = "griffelib", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocs-autorefs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocstrings", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] +sdist = { url = "https://files.pythonhosted.org/packages/b1/b6/e858701499d57eee8b3fd8e78168083956c6683ddbe727b46758b19e1119/mkdocstrings_python-2.0.5.tar.gz", hash = "sha256:3a4d92556ad39637e88af94a5374213af9a8e3040c3824ceaed04b486c017594", size = 199578, upload-time = "2026-06-19T10:41:08.868Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/29/7c/c16d52494a1ba6d90443f31fa26bc810bf878d532dfa9a7a13f49ef9542d/mlx-0.31.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:b29cf940f34205f09bb552ac60465ae833c4ae640b52777c6d725ddbad8461ca", size = 586942, upload-time = "2026-04-22T03:14:21.97Z" }, - { url = "https://files.pythonhosted.org/packages/74/da/1c7f3dc39b7bda65b0cafbaf1e58a35eea118622c6f4506c9a4294c9806e/mlx-0.31.2-cp310-cp310-macosx_15_0_arm64.whl", hash = "sha256:ebdc47b87b4b0216ceab3b5961716804bba3107c16454b65ae51d0e0c059f298", size = 586942, upload-time = "2026-04-22T03:14:23.527Z" }, - { url = "https://files.pythonhosted.org/packages/4c/e9/a8559389706d39f613620a8b6b42ed03cf3155a516b0762d355c5116fdab/mlx-0.31.2-cp310-cp310-macosx_26_0_arm64.whl", hash = "sha256:2a64db61b2840f28bae08354e6f999698e30381af201cc12354290673c96213b", size = 586804, upload-time = "2026-04-22T03:14:24.882Z" }, - { url = "https://files.pythonhosted.org/packages/94/89/1e77ec3ff380e8fb9e7258047374d31452a0f9828a0e370f127b07dd8288/mlx-0.31.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4a3f181b367d404e44a6bd68ef5eb573930809ac60cacd51d0c851c629b1b651", size = 586911, upload-time = "2026-04-22T03:14:29.675Z" }, - { url = "https://files.pythonhosted.org/packages/6a/41/c1907f05f8a3fc54025fb78ad68d3c4a4b931664d03c0a24f7f431cc4087/mlx-0.31.2-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:70297cbef7479429f69c966bfed10da20a6f0c2aa997eec2b4f6ba1a07caf2ef", size = 586915, upload-time = "2026-04-22T03:14:31.403Z" }, - { url = "https://files.pythonhosted.org/packages/97/b0/61ac2c14773c786fecbda28067b0207a0c654cb4d10c548808c51284d700/mlx-0.31.2-cp311-cp311-macosx_26_0_arm64.whl", hash = "sha256:c0ff158b7ac93a4b5659adbc70053498b30a5964fc45f78596398e056a96c36a", size = 587030, upload-time = "2026-04-22T03:14:32.961Z" }, + { url = "https://files.pythonhosted.org/packages/d1/fc/10ab7e80650a9c9e8f4f1105f8c8e73567f88ed0c06ada589ab81d38687c/mkdocstrings_python-2.0.5-py3-none-any.whl", hash = "sha256:30c837bbff016549f659fcba6539ac351303f0fd7e713c89a040611072236e9d", size = 104951, upload-time = "2026-06-19T10:41:07.378Z" }, ] [[package]] -name = "mlx-lm" -version = "0.29.1" +name = "ml-dtypes" +version = "0.5.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jinja2", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "mlx", marker = "sys_platform == 'darwin'" }, - { name = "numpy", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "protobuf", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "pyyaml", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "sentencepiece", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "transformers", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e3/62/f46e1355256a114808517947f8e83ad6be310c7288c551db0fa678f47923/mlx_lm-0.29.1.tar.gz", hash = "sha256:b99180d8f33d33a077b814e550bfb2d8a59ae003d668fd1f4b3fff62a381d34b", size = 232302, upload-time = "2025-12-16T16:58:27.959Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0e/4a/c27b42ed9b1c7d13d9ba8b6905dece787d6259152f2309338aed29b2447b/ml_dtypes-0.5.4.tar.gz", hash = "sha256:8ab06a50fb9bf9666dd0fe5dfb4676fa2b0ac0f31ecff72a6c3af8e22c063453", size = 692314, upload-time = "2025-11-17T22:32:31.031Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/53/913099c91d384e115ea078325efd9a0bc1ea3eb3458c694b4596cbd267f2/mlx_lm-0.29.1-py3-none-any.whl", hash = "sha256:440941b3054c2a2216e97615de584cc90fa1ea874782e20699b9895721fad8dc", size = 324884, upload-time = "2025-12-16T16:58:26.36Z" }, + { url = "https://files.pythonhosted.org/packages/a9/80/19189ea605017473660e43762dc853d2797984b3c7bf30ce656099add30c/ml_dtypes-0.5.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:19b9a53598f21e453ea2fbda8aa783c20faff8e1eeb0d7ab899309a0053f1483", size = 5034975, upload-time = "2025-11-17T22:31:42.758Z" }, ] [[package]] -name = "mlx-metal" -version = "0.31.2" +name = "model-hosting-container-standards" +version = "0.1.16" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastapi", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "httpx", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "jmespath", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "setuptools", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "starlette", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "supervisor", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2d/5f/bc0d0fce1bd0a35378696aa13b21feffa18d9cda837f4e1be124e45ee090/model_hosting_container_standards-0.1.16.tar.gz", hash = "sha256:d34589633900e53c3ee5f7c78280a7cf7e4f6532c35e763341a262fc85cbe84a", size = 94130, upload-time = "2026-06-15T21:29:34.771Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/69/fe3b783ebe999f3118234e1e940feb622518bfb1dea6ac5d13b1d36a8449/mlx_metal-0.31.2-py3-none-macosx_14_0_arm64.whl", hash = "sha256:b25385bcee18fc194092255b8b53b9a3d8489eb650e59160f1b57aadd07aa2dc", size = 40055588, upload-time = "2026-04-22T03:14:14.43Z" }, - { url = "https://files.pythonhosted.org/packages/4f/5d/4c690d5b93c30ba002656c37363159d978705bf8eb801b8481840fb942c2/mlx_metal-0.31.2-py3-none-macosx_15_0_arm64.whl", hash = "sha256:e9d4e5fce6ca10a87a0e388597f99519ad594d09e674708b5312bd8bd4f5997d", size = 40053220, upload-time = "2026-04-22T03:14:18.048Z" }, - { url = "https://files.pythonhosted.org/packages/99/82/11fd62a8d7a3e96e5c43220b17de0151e3f10101f8bb3b865f5bd9cdd074/mlx_metal-0.31.2-py3-none-macosx_26_0_arm64.whl", hash = "sha256:84ffb60ee503f03eb684f5fb168d5cff31e2a16b7f27c1731eaf7662bd6e9b46", size = 55792151, upload-time = "2026-04-22T03:14:22.059Z" }, + { url = "https://files.pythonhosted.org/packages/07/ef/6eabeb251d2a0598cb5f9a274159e05ae07a1e3fe6a1473bf6035793252a/model_hosting_container_standards-0.1.16-py3-none-any.whl", hash = "sha256:47f4f65713120bc3a69feb022981a38db9e557aedf88dbd72077f20588caa12b", size = 125666, upload-time = "2026-06-15T21:29:33.415Z" }, ] [[package]] @@ -1555,27 +1483,10 @@ version = "1.2.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/31/f9/c0a1c127f9049db9155afc316952ea571720dd01833ff5e4d7e8e6352dbb/msgpack-1.2.1.tar.gz", hash = "sha256:04c721c2c7448767e9e3f2520a475663d8ee0f09c31890f6d2bd70fd636a9647", size = 183960, upload-time = "2026-06-18T16:13:52.594Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/16/f70100614b69feb3ade7285f08c9c52d6cda0a5c03f3f5e2facd63acb211/msgpack-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c7b398c56ff125feae96c2737abfec5595f1fa0aa186df60c56040b8accb95c", size = 82926, upload-time = "2026-06-18T16:12:31.531Z" }, - { url = "https://files.pythonhosted.org/packages/e4/3c/08ecd5cdfe4e2de43aec79062028ad0f7b2d9b1fea5430068c198ba570da/msgpack-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1548006a91aa93c5da81f3bdcebc1a0d10cea2d25969754fbe848da622b2b895", size = 82730, upload-time = "2026-06-18T16:12:32.894Z" }, - { url = "https://files.pythonhosted.org/packages/19/9f/a70c9cb1a04ecc134005149367dcfe35d167284e8f65035a1e4156ad17b5/msgpack-1.2.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1dabedcd0f23559f3596428c6589c1cd8c6eaed3a0d720795b07b0225d769203", size = 400729, upload-time = "2026-06-18T16:12:34.052Z" }, - { url = "https://files.pythonhosted.org/packages/fa/7f/5ce020168cf0439041526e95aa068c722c016aee21624e331aeabeee2e8e/msgpack-1.2.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:83efa1c898e0fc5380fc0cabbf75164c52e3b5cbb45973710d75821928380c73", size = 407625, upload-time = "2026-06-18T16:12:35.239Z" }, - { url = "https://files.pythonhosted.org/packages/79/70/fb7668ce0386819303047057aef6fc1da73b584291d9cff82b821744e2ef/msgpack-1.2.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:01e2dd6c9b19d333a00282330cc8a73d38d8dabc306dc5b42cd668c3ac82e833", size = 377891, upload-time = "2026-06-18T16:12:36.684Z" }, - { url = "https://files.pythonhosted.org/packages/3d/dc/9ebe654a73c3aed2e40aa6b52e3c2a02b5f53ef0085fa235a45d5b367f87/msgpack-1.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:350cb813d0af6e65d2f7ef0d729f7ff5be5a8bce03665892f43e5883d4ecc1b8", size = 391987, upload-time = "2026-06-18T16:12:37.839Z" }, - { url = "https://files.pythonhosted.org/packages/42/eb/b67cf64218a2fa25e1c671fe1d3dbb06cbeb973e71bc4b822da079862d0b/msgpack-1.2.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:ee1d9ed27d0497b848923746cf762ed2e7db24f4be7eec8e5cbe8c766aa707b7", size = 374603, upload-time = "2026-06-18T16:12:39.221Z" }, - { url = "https://files.pythonhosted.org/packages/a2/2e/9ee200cde32fd1a0101b4006202fde554c1860adfb9bf7bff31ea4c08df8/msgpack-1.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:633727297ed063441fd1cda2288865487f33ad14eeb8831afb5f0c396a62cfce", size = 405121, upload-time = "2026-06-18T16:12:40.524Z" }, - { url = "https://files.pythonhosted.org/packages/43/b6/f10117be7ca7a51e8feed699a907b8e663a8cd66e115ae6b4fb30cc7945c/msgpack-1.2.1-cp310-cp310-win32.whl", hash = "sha256:298872ecf9e61950f1c6af4ca969b859ee91783bb920ef6e6172697d0c8aad74", size = 64088, upload-time = "2026-06-18T16:12:41.762Z" }, - { url = "https://files.pythonhosted.org/packages/ba/93/89976c696fb0224662239d952c47b4d1661b34d79a332ef5584facaa8579/msgpack-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:2ff164c1b0bcb740b073b99e945234d0212852fa378e44a208c425379140dbeb", size = 70113, upload-time = "2026-06-18T16:12:42.78Z" }, { url = "https://files.pythonhosted.org/packages/f4/6b/e9b1cdc042c4458801d2545ed782a95f3d6ba8e270cce8745b8603c7f748/msgpack-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:29a3f6e9667868429d8240dfd063ea5ffdc1321c13d783aa23827a38de0dcb22", size = 82812, upload-time = "2026-06-18T16:12:45.022Z" }, { url = "https://files.pythonhosted.org/packages/0c/3a/dd518a1bf78ed1e9ad8afe57307c079a00eafe4b3068932a27ca1ea56b4f/msgpack-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aded5bdf32609dc7987a49bbbd15a8ef096193f96dd8bbeb791de729e650acf5", size = 82739, upload-time = "2026-06-18T16:12:46.025Z" }, - { url = "https://files.pythonhosted.org/packages/70/e0/7ba9e1542bf0771a27b8b37c1316e3f95ae9d748fd765284655c476ad4ef/msgpack-1.2.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:146ee4e9ce80b365c6d4c47073da9da7bcec473e58194ceee5dd7620ace77e06", size = 414233, upload-time = "2026-06-18T16:12:47.029Z" }, { url = "https://files.pythonhosted.org/packages/03/8d/671d81534ea0e2b0e8a121be100020da09eb78861fe3aa8f3ef7dcd3bed1/msgpack-1.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a28d076ca7c82b9c8728ad90b7147489449557038bed50e4241eb832395169b4", size = 423843, upload-time = "2026-06-18T16:12:48.19Z" }, - { url = "https://files.pythonhosted.org/packages/d2/b6/e5c737515ed1f166664b87601b532f58cbb73d8aa6a90b99f7c2c5037e8e/msgpack-1.2.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7d31c0ac0c640f877804c67cb2bc9f4e23dc2db97e96c2e67fa27d38283b41f8", size = 390772, upload-time = "2026-06-18T16:12:49.624Z" }, - { url = "https://files.pythonhosted.org/packages/a8/46/62ed8c2e87d7021eab19921594d961ef3aa3794eec76c716dc30f3bfd433/msgpack-1.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8ff92d7feeaf5bc26c51495b69e2f99ed97ab79346fb6555f44be7dd2ac6503b", size = 409559, upload-time = "2026-06-18T16:12:50.936Z" }, - { url = "https://files.pythonhosted.org/packages/70/ff/59aa3887b860bbf43532835e192b1c388a17590d6068ae4f8b2bc74c906e/msgpack-1.2.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:779197a6513bab3c3632265e3d0f7cb3227e62510841a6f34f1eaa37efbb345e", size = 387838, upload-time = "2026-06-18T16:12:52.161Z" }, { url = "https://files.pythonhosted.org/packages/09/11/f8563e471093420cf6478cb3271a0175d8402b82d879783d4035d2d03360/msgpack-1.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:67f6dd22fa72a93752643f07889796d62739a13415ee630169a8ce764f86cf9f", size = 421732, upload-time = "2026-06-18T16:12:53.556Z" }, - { url = "https://files.pythonhosted.org/packages/57/cf/e673683c4c6c90c1022b24c65af4b03eda72b182a1176ef6449069d66acc/msgpack-1.2.1-cp311-cp311-win32.whl", hash = "sha256:91054a783328e0ea7954b8771095705c8d2243b814743fbaadf14552c9c52c5d", size = 64091, upload-time = "2026-06-18T16:12:54.821Z" }, - { url = "https://files.pythonhosted.org/packages/3f/07/ca212739d179f9083bff2c7c08c24101c3555a334fadc2b876b18768a3ae/msgpack-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2eda0b7ebb1283a98d3e4492ac933c8af6aff59fd3df1c3ed024f536af4b1dc8", size = 70462, upload-time = "2026-06-18T16:12:55.898Z" }, - { url = "https://files.pythonhosted.org/packages/6d/be/6798347b425e26f35db82e69dd83c09716c856a3714e7bffc4c0860fd830/msgpack-1.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:6ee967f7c7e1df2890c671ff2ee51a28ded0efc95da3e507176dee881ce36c66", size = 65059, upload-time = "2026-06-18T16:12:57.053Z" }, ] [[package]] @@ -1584,69 +1495,21 @@ version = "0.21.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e3/60/f79b9b013a16fa3a58350c9295ddc6789f2e335f36ea61ed10a21b215364/msgspec-0.21.1.tar.gz", hash = "sha256:2313508e394b0d208f8f56892ca9b2799e2561329de9763b19619595a6c0f72c", size = 319193, upload-time = "2026-04-12T21:44:50.394Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/38/d591d9f66d43d897ecbd249f2833665823d19c8b043f16619bc8343e23df/msgspec-0.21.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72d9cd03241b8b2edb2e12dcc66c500fa480d8cbd71a8bac105809d468882064", size = 195172, upload-time = "2026-04-12T21:43:45.062Z" }, - { url = "https://files.pythonhosted.org/packages/69/1a/6899188b5982ec1324e0c629b7801eed2db987f6634fab58abd9fc82d317/msgspec-0.21.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed2ab278200e743a1d2610a4e0c8fc74f6cecb8548544cdec43f927bd9265238", size = 188316, upload-time = "2026-04-12T21:43:46.641Z" }, - { url = "https://files.pythonhosted.org/packages/9e/95/7e591b4fa11fdbbf9891164473c23420a8c781ef553295abe416bf335f42/msgspec-0.21.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd677e3001fdfed9186de72eab434da2976303cd5eb9550921d3d0c3e3e168ce", size = 216565, upload-time = "2026-04-12T21:43:48.081Z" }, - { url = "https://files.pythonhosted.org/packages/19/86/714feeaf3b84cf2027235681725593840153dedd2868578f9f2715e296bb/msgspec-0.21.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f667b90b37fad734a91671abd68e0d7f4d066862771b87e91c53996dcb7a9027", size = 222689, upload-time = "2026-04-12T21:43:49.385Z" }, - { url = "https://files.pythonhosted.org/packages/7d/b9/4384243e814f2579e5205e17d170b9c1a30121afd1393298d904817a7fa7/msgspec-0.21.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:49880fd20fdbcfe1b793f07dd83f12572bab679c9800352c8b2240289aa46a06", size = 222343, upload-time = "2026-04-12T21:43:50.612Z" }, - { url = "https://files.pythonhosted.org/packages/04/01/4b227d9c4057346271043632bad41979cf8c3dca372e41bb1f7d546395b2/msgspec-0.21.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae0162e22849a5e91eaad907766525107523b0daea3df267a9fcb5ba4e0936ae", size = 225607, upload-time = "2026-04-12T21:43:52.129Z" }, - { url = "https://files.pythonhosted.org/packages/c1/ce/27021d1c3e5da837743092a7b7a5e8818397e1f4c05ee8b068bd7d1fd78a/msgspec-0.21.1-cp310-cp310-win_amd64.whl", hash = "sha256:f041a2279f31e3a53319005e4d60ba77c085cfcbe394cdc7ce803c2d01fe9449", size = 188392, upload-time = "2026-04-12T21:43:53.384Z" }, - { url = "https://files.pythonhosted.org/packages/80/2b/daf7a8d6d7cf00e0dcd0439178b284ade701234abdcadf3385601da04fbd/msgspec-0.21.1-cp310-cp310-win_arm64.whl", hash = "sha256:1bf17cbd7b28a5dffc7e764c654eed8ccde5e0f1de7970628608304640d4ce4e", size = 174191, upload-time = "2026-04-12T21:43:54.6Z" }, - { url = "https://files.pythonhosted.org/packages/ba/7f/bbc4e74cd33d316b75541149e4d35b163b63bce066530ae185a2ec3b5bfc/msgspec-0.21.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b504b6e7f7a22a24b27232b73034421692147865162daaec9f3bf62439007c87", size = 193131, upload-time = "2026-04-12T21:43:56.094Z" }, - { url = "https://files.pythonhosted.org/packages/c1/60/504886af1aaf854112663b842d5eea9a15d9588f9bf7d0d2df736424b84d/msgspec-0.21.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4692b7c1609155708c4418f88e92f63c13fdf08aa095c84bae82bad75b53389b", size = 186597, upload-time = "2026-04-12T21:43:57.242Z" }, - { url = "https://files.pythonhosted.org/packages/fa/54/d24ddeaa65b5278c9e67f48ce3c17a9831e8f3722f3c8322ee120aca22ef/msgspec-0.21.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d3124010b3815451494c85ff345e693cb9fe5889cfcbbef39ed8622e0e72319c", size = 215158, upload-time = "2026-04-12T21:43:58.442Z" }, { url = "https://files.pythonhosted.org/packages/9f/75/bb79c8b89a93ae23cd33c0d802373f16feaf9633f05d8af77091350dda0a/msgspec-0.21.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6badc03b9725352219cca017bfe71c61f2fbd0fb5982b410ac17c97c213deb30", size = 219856, upload-time = "2026-04-12T21:44:00.015Z" }, - { url = "https://files.pythonhosted.org/packages/b4/9c/c5ca26b46f0ebbd3a6683695ef89396712cb9e4199fd1f0bc1dd968216b1/msgspec-0.21.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5d2d4116ebe3035a78d9ec76e99a9d64e5fa6d44fe61a9c5de7fd1acf54bcc69", size = 220314, upload-time = "2026-04-12T21:44:01.548Z" }, { url = "https://files.pythonhosted.org/packages/c8/31/645a351c4285dce40ed6755c3dcc0aa648e26dacb20a98018fe2cce5e87b/msgspec-0.21.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0d1009f6715f5bff3b54d4ff5c7428ad96197e0534e1645b8e9b955890c84664", size = 223215, upload-time = "2026-04-12T21:44:02.884Z" }, - { url = "https://files.pythonhosted.org/packages/09/af/8bf15736a6dd3cb4f90c5467f6dc39197d2daaf10754490cdc0aa17b7312/msgspec-0.21.1-cp311-cp311-win_amd64.whl", hash = "sha256:c6faffe5bb644ec884052679af4dfd776d4b5ca90e4a7ec7e7e319e4e6b93a6e", size = 188554, upload-time = "2026-04-12T21:44:04.151Z" }, - { url = "https://files.pythonhosted.org/packages/ef/29/cc7db3a165b62d16e64a83f82eccb79655055cb5bc1f60459a6f9d7c82f2/msgspec-0.21.1-cp311-cp311-win_arm64.whl", hash = "sha256:ee9e3f11fa94603f7d673bf795cfa31b549c4a2c723bc39b45beb1e7f5a3fb99", size = 174517, upload-time = "2026-04-12T21:44:05.66Z" }, ] [[package]] name = "multidict" version = "6.7.1" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/84/0b/19348d4c98980c4851d2f943f8ebafdece2ae7ef737adcfa5994ce8e5f10/multidict-6.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c93c3db7ea657dd4637d57e74ab73de31bccefe144d3d4ce370052035bc85fb5", size = 77176, upload-time = "2026-01-26T02:42:59.784Z" }, - { url = "https://files.pythonhosted.org/packages/ef/04/9de3f8077852e3d438215c81e9b691244532d2e05b4270e89ce67b7d103c/multidict-6.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:974e72a2474600827abaeda71af0c53d9ebbc3c2eb7da37b37d7829ae31232d8", size = 44996, upload-time = "2026-01-26T02:43:01.674Z" }, - { url = "https://files.pythonhosted.org/packages/31/5c/08c7f7fe311f32e83f7621cd3f99d805f45519cd06fafb247628b861da7d/multidict-6.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdea2e7b2456cfb6694fb113066fd0ec7ea4d67e3a35e1f4cbeea0b448bf5872", size = 44631, upload-time = "2026-01-26T02:43:03.169Z" }, - { url = "https://files.pythonhosted.org/packages/b7/7f/0e3b1390ae772f27501199996b94b52ceeb64fe6f9120a32c6c3f6b781be/multidict-6.7.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17207077e29342fdc2c9a82e4b306f1127bf1ea91f8b71e02d4798a70bb99991", size = 242561, upload-time = "2026-01-26T02:43:04.733Z" }, - { url = "https://files.pythonhosted.org/packages/dd/f4/8719f4f167586af317b69dd3e90f913416c91ca610cac79a45c53f590312/multidict-6.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4f49cb5661344764e4c7c7973e92a47a59b8fc19b6523649ec9dc4960e58a03", size = 242223, upload-time = "2026-01-26T02:43:06.695Z" }, - { url = "https://files.pythonhosted.org/packages/47/ab/7c36164cce64a6ad19c6d9a85377b7178ecf3b89f8fd589c73381a5eedfd/multidict-6.7.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a9fc4caa29e2e6ae408d1c450ac8bf19892c5fca83ee634ecd88a53332c59981", size = 222322, upload-time = "2026-01-26T02:43:08.472Z" }, - { url = "https://files.pythonhosted.org/packages/f5/79/a25add6fb38035b5337bc5734f296d9afc99163403bbcf56d4170f97eb62/multidict-6.7.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c5f0c21549ab432b57dcc82130f388d84ad8179824cc3f223d5e7cfbfd4143f6", size = 254005, upload-time = "2026-01-26T02:43:10.127Z" }, - { url = "https://files.pythonhosted.org/packages/4a/7b/64a87cf98e12f756fc8bd444b001232ffff2be37288f018ad0d3f0aae931/multidict-6.7.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7dfb78d966b2c906ae1d28ccf6e6712a3cd04407ee5088cd276fe8cb42186190", size = 251173, upload-time = "2026-01-26T02:43:11.731Z" }, - { url = "https://files.pythonhosted.org/packages/4b/ac/b605473de2bb404e742f2cc3583d12aedb2352a70e49ae8fce455b50c5aa/multidict-6.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b0d9b91d1aa44db9c1f1ecd0d9d2ae610b2f4f856448664e01a3b35899f3f92", size = 243273, upload-time = "2026-01-26T02:43:13.063Z" }, - { url = "https://files.pythonhosted.org/packages/03/65/11492d6a0e259783720f3bc1d9ea55579a76f1407e31ed44045c99542004/multidict-6.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dd96c01a9dcd4889dcfcf9eb5544ca0c77603f239e3ffab0524ec17aea9a93ee", size = 238956, upload-time = "2026-01-26T02:43:14.843Z" }, - { url = "https://files.pythonhosted.org/packages/5f/a7/7ee591302af64e7c196fb63fe856c788993c1372df765102bd0448e7e165/multidict-6.7.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:067343c68cd6612d375710f895337b3a98a033c94f14b9a99eff902f205424e2", size = 233477, upload-time = "2026-01-26T02:43:16.025Z" }, - { url = "https://files.pythonhosted.org/packages/9c/99/c109962d58756c35fd9992fed7f2355303846ea2ff054bb5f5e9d6b888de/multidict-6.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5884a04f4ff56c6120f6ccf703bdeb8b5079d808ba604d4d53aec0d55dc33568", size = 243615, upload-time = "2026-01-26T02:43:17.84Z" }, - { url = "https://files.pythonhosted.org/packages/d5/5f/1973e7c771c86e93dcfe1c9cc55a5481b610f6614acfc28c0d326fe6bfad/multidict-6.7.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8affcf1c98b82bc901702eb73b6947a1bfa170823c153fe8a47b5f5f02e48e40", size = 249930, upload-time = "2026-01-26T02:43:19.06Z" }, - { url = "https://files.pythonhosted.org/packages/5d/a5/f170fc2268c3243853580203378cd522446b2df632061e0a5409817854c7/multidict-6.7.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0d17522c37d03e85c8098ec8431636309b2682cf12e58f4dbc76121fb50e4962", size = 243807, upload-time = "2026-01-26T02:43:20.286Z" }, - { url = "https://files.pythonhosted.org/packages/de/01/73856fab6d125e5bc652c3986b90e8699a95e84b48d72f39ade6c0e74a8c/multidict-6.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24c0cf81544ca5e17cfcb6e482e7a82cd475925242b308b890c9452a074d4505", size = 239103, upload-time = "2026-01-26T02:43:21.508Z" }, - { url = "https://files.pythonhosted.org/packages/e7/46/f1220bd9944d8aa40d8ccff100eeeee19b505b857b6f603d6078cb5315b0/multidict-6.7.1-cp310-cp310-win32.whl", hash = "sha256:d82dd730a95e6643802f4454b8fdecdf08667881a9c5670db85bc5a56693f122", size = 41416, upload-time = "2026-01-26T02:43:22.703Z" }, - { url = "https://files.pythonhosted.org/packages/68/00/9b38e272a770303692fc406c36e1a4c740f401522d5787691eb38a8925a8/multidict-6.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:cf37cbe5ced48d417ba045aca1b21bafca67489452debcde94778a576666a1df", size = 46022, upload-time = "2026-01-26T02:43:23.77Z" }, - { url = "https://files.pythonhosted.org/packages/64/65/d8d42490c02ee07b6bbe00f7190d70bb4738b3cce7629aaf9f213ef730dd/multidict-6.7.1-cp310-cp310-win_arm64.whl", hash = "sha256:59bc83d3f66b41dac1e7460aac1d196edc70c9ba3094965c467715a70ecb46db", size = 43238, upload-time = "2026-01-26T02:43:24.882Z" }, { url = "https://files.pythonhosted.org/packages/ce/f1/a90635c4f88fb913fbf4ce660b83b7445b7a02615bda034b2f8eb38fd597/multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d", size = 76626, upload-time = "2026-01-26T02:43:26.485Z" }, { url = "https://files.pythonhosted.org/packages/a6/9b/267e64eaf6fc637a15b35f5de31a566634a2740f97d8d094a69d34f524a4/multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e", size = 44706, upload-time = "2026-01-26T02:43:27.607Z" }, { url = "https://files.pythonhosted.org/packages/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855", size = 44356, upload-time = "2026-01-26T02:43:28.661Z" }, - { url = "https://files.pythonhosted.org/packages/fd/d2/0a36c8473f0cbaeadd5db6c8b72d15bbceeec275807772bfcd059bef487d/multidict-6.7.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8be1802715a8e892c784c0197c2ace276ea52702a0ede98b6310c8f255a5afb3", size = 244355, upload-time = "2026-01-26T02:43:31.165Z" }, - { url = "https://files.pythonhosted.org/packages/5d/16/8c65be997fd7dd311b7d39c7b6e71a0cb449bad093761481eccbbe4b42a2/multidict-6.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e2d2ed645ea29f31c4c7ea1552fcfd7cb7ba656e1eafd4134a6620c9f5fdd9e", size = 246433, upload-time = "2026-01-26T02:43:32.581Z" }, - { url = "https://files.pythonhosted.org/packages/01/fb/4dbd7e848d2799c6a026ec88ad39cf2b8416aa167fcc903baa55ecaa045c/multidict-6.7.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a", size = 225376, upload-time = "2026-01-26T02:43:34.417Z" }, - { url = "https://files.pythonhosted.org/packages/b6/8a/4a3a6341eac3830f6053062f8fbc9a9e54407c80755b3f05bc427295c2d0/multidict-6.7.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8", size = 257365, upload-time = "2026-01-26T02:43:35.741Z" }, - { url = "https://files.pythonhosted.org/packages/f7/a2/dd575a69c1aa206e12d27d0770cdf9b92434b48a9ef0cd0d1afdecaa93c4/multidict-6.7.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0", size = 254747, upload-time = "2026-01-26T02:43:36.976Z" }, { url = "https://files.pythonhosted.org/packages/5a/56/21b27c560c13822ed93133f08aa6372c53a8e067f11fbed37b4adcdac922/multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144", size = 246293, upload-time = "2026-01-26T02:43:38.258Z" }, - { url = "https://files.pythonhosted.org/packages/5a/a4/23466059dc3854763423d0ad6c0f3683a379d97673b1b89ec33826e46728/multidict-6.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d3bc717b6fe763b8be3f2bee2701d3c8eb1b2a8ae9f60910f1b2860c82b6c49", size = 242962, upload-time = "2026-01-26T02:43:40.034Z" }, - { url = "https://files.pythonhosted.org/packages/1f/67/51dd754a3524d685958001e8fa20a0f5f90a6a856e0a9dcabff69be3dbb7/multidict-6.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71", size = 237360, upload-time = "2026-01-26T02:43:41.752Z" }, - { url = "https://files.pythonhosted.org/packages/64/3f/036dfc8c174934d4b55d86ff4f978e558b0e585cef70cfc1ad01adc6bf18/multidict-6.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0b38ebffd9be37c1170d33bc0f36f4f262e0a09bc1aac1c34c7aa51a7293f0b3", size = 245940, upload-time = "2026-01-26T02:43:43.042Z" }, - { url = "https://files.pythonhosted.org/packages/3d/20/6214d3c105928ebc353a1c644a6ef1408bc5794fcb4f170bb524a3c16311/multidict-6.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c", size = 253502, upload-time = "2026-01-26T02:43:44.371Z" }, - { url = "https://files.pythonhosted.org/packages/b1/e2/c653bc4ae1be70a0f836b82172d643fcf1dade042ba2676ab08ec08bff0f/multidict-6.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0", size = 247065, upload-time = "2026-01-26T02:43:45.745Z" }, { url = "https://files.pythonhosted.org/packages/c8/11/a854b4154cd3bd8b1fd375e8a8ca9d73be37610c361543d56f764109509b/multidict-6.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa", size = 241870, upload-time = "2026-01-26T02:43:47.054Z" }, - { url = "https://files.pythonhosted.org/packages/13/bf/9676c0392309b5fdae322333d22a829715b570edb9baa8016a517b55b558/multidict-6.7.1-cp311-cp311-win32.whl", hash = "sha256:d62b7f64ffde3b99d06b707a280db04fb3855b55f5a06df387236051d0668f4a", size = 41302, upload-time = "2026-01-26T02:43:48.753Z" }, - { url = "https://files.pythonhosted.org/packages/c9/68/f16a3a8ba6f7b6dc92a1f19669c0810bd2c43fc5a02da13b1cbf8e253845/multidict-6.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b", size = 45981, upload-time = "2026-01-26T02:43:49.921Z" }, - { url = "https://files.pythonhosted.org/packages/ac/ad/9dd5305253fa00cd3c7555dbef69d5bf4133debc53b87ab8d6a44d411665/multidict-6.7.1-cp311-cp311-win_arm64.whl", hash = "sha256:b8c990b037d2fff2f4e33d3f21b9b531c5745b33a49a7d6dbe7a177266af44f6", size = 43159, upload-time = "2026-01-26T02:43:51.635Z" }, { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, ] @@ -1655,12 +1518,10 @@ name = "multiprocess" version = "0.70.16" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "dill" }, + { name = "dill", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b5/ae/04f39c5d0d0def03247c2893d6f2b83c136bf3320a2154d7b8858f2ba72d/multiprocess-0.70.16.tar.gz", hash = "sha256:161af703d4652a0e1410be6abccecde4a7ddffd19341be0a7011b94aeb171ac1", size = 1772603, upload-time = "2024-01-28T18:52:34.85Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/76/6e712a2623d146d314f17598df5de7224c85c0060ef63fd95cc15a25b3fa/multiprocess-0.70.16-pp310-pypy310_pp73-macosx_10_13_x86_64.whl", hash = "sha256:476887be10e2f59ff183c006af746cb6f1fd0eadcfd4ef49e605cbe2659920ee", size = 134980, upload-time = "2024-01-28T18:52:15.731Z" }, - { url = "https://files.pythonhosted.org/packages/0f/ab/1e6e8009e380e22254ff539ebe117861e5bdb3bff1fc977920972237c6c7/multiprocess-0.70.16-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d951bed82c8f73929ac82c61f01a7b5ce8f3e5ef40f5b52553b4f547ce2b08ec", size = 134982, upload-time = "2024-01-28T18:52:17.783Z" }, { url = "https://files.pythonhosted.org/packages/bc/f7/7ec7fddc92e50714ea3745631f79bd9c96424cb2702632521028e57d3a36/multiprocess-0.70.16-py310-none-any.whl", hash = "sha256:c4a9944c67bd49f823687463660a2d6daae94c289adff97e0f9d696ba6371d02", size = 134824, upload-time = "2024-01-28T18:52:26.062Z" }, { url = "https://files.pythonhosted.org/packages/50/15/b56e50e8debaf439f44befec5b2af11db85f6e0f344c3113ae0be0593a91/multiprocess-0.70.16-py311-none-any.whl", hash = "sha256:af4cabb0dac72abfb1e794fa7855c325fd2b55a10a44628a3c1ad3311c04127a", size = 143519, upload-time = "2024-01-28T18:52:28.115Z" }, { url = "https://files.pythonhosted.org/packages/ea/89/38df130f2c799090c978b366cfdf5b96d08de5b29a4a293df7f7429fa50b/multiprocess-0.70.16-py38-none-any.whl", hash = "sha256:a71d82033454891091a226dfc319d0cfa8019a4e888ef9ca910372a446de4435", size = 132628, upload-time = "2024-01-28T18:52:30.853Z" }, @@ -1668,347 +1529,356 @@ wheels = [ ] [[package]] -name = "murmurhash" -version = "1.0.15" +name = "networkx" +version = "3.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, +] + +[[package]] +name = "ninja" +version = "1.13.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/23/2e/88c147931ea9725d634840d538622e94122bceaf346233349b7b5c62964b/murmurhash-1.0.15.tar.gz", hash = "sha256:58e2b27b7847f9e2a6edf10b47a8c8dd70a4705f45dccb7bf76aeadacf56ba01", size = 13291, upload-time = "2025-11-14T09:51:15.272Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/73/79a0b22fc731989c708068427579e840a6cf4e937fe7ae5c5d0b7356ac22/ninja-1.13.0.tar.gz", hash = "sha256:4a40ce995ded54d9dc24f8ea37ff3bf62ad192b547f6c7126e7e25045e76f978", size = 242558, upload-time = "2025-08-11T15:10:19.421Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/09/3c/5e59e29fe971365d27f191a5cbf8a5fb492746e458604fe5d39810da4668/murmurhash-1.0.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4989c16053a9a83b02c520dd00a31f0877d5fd2ab8a9b6b75ed9eba0e25c489", size = 27463, upload-time = "2025-11-14T09:49:53.158Z" }, - { url = "https://files.pythonhosted.org/packages/38/3d/ace00a9b82beaa99a8a7a52e98171cfbf13c0066d2f820e84a5d572e3bd0/murmurhash-1.0.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:899068ba3d7c371e7edd093852c634cce802fefd9aaddfcc0d2fda1d7433c7f9", size = 27714, upload-time = "2025-11-14T09:49:54.855Z" }, - { url = "https://files.pythonhosted.org/packages/10/0f/34f1c4f97424ea1bc72b1e3bdf61ac34f4c5555ec9163721f1e4cafe5b1d/murmurhash-1.0.15-cp310-cp310-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fe883982114de576c793fd1cf55945c8ee6453ad4c4785ac1a48f84e74fdc650", size = 122570, upload-time = "2025-11-14T09:49:55.977Z" }, - { url = "https://files.pythonhosted.org/packages/b9/75/0019717a16ce5a7b088fc50a3ecb513035e4196c5e569bf4a2e16bcc0414/murmurhash-1.0.15-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:342277d8d7f712d136507fb3ccdba26c076a34ca0f8d1b96f65f0daa556da2e9", size = 123194, upload-time = "2025-11-14T09:49:57.462Z" }, - { url = "https://files.pythonhosted.org/packages/7b/a4/c1c95ce60b816c2255098164e424752779269c93f5d6dceaa213346789a2/murmurhash-1.0.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bc54facccb32fe1e97d6231edd4f3e2937467c35658b26aa35bbd6a87ebb7cb0", size = 122461, upload-time = "2025-11-14T09:49:58.686Z" }, - { url = "https://files.pythonhosted.org/packages/63/28/e1f79369a6e8d1a5901346ed2fd3a5c56e647d0b849044870c071cb64e1c/murmurhash-1.0.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e525bbd8e26e6b9ab1b56758a59b16c2fffd73bad2f7b8bf361c16f70ff1d980", size = 121676, upload-time = "2025-11-14T09:49:59.888Z" }, - { url = "https://files.pythonhosted.org/packages/1d/7c/e2be1f5387e5898f6551cf81c4220975858b9dbda4d471b133750945599a/murmurhash-1.0.15-cp310-cp310-win_amd64.whl", hash = "sha256:2224f30f7729717644745a6f513ea7662517dfe7b1867cf1588177f64c61df3c", size = 25156, upload-time = "2025-11-14T09:50:01.016Z" }, - { url = "https://files.pythonhosted.org/packages/74/07/0df6e1a753de68368662cbbb8f88558e2c877d3886ac12b30953fb8ed335/murmurhash-1.0.15-cp310-cp310-win_arm64.whl", hash = "sha256:8a181494b5f03ba831f9a13f2de3aab9ef591e508e57239043d65c5c592f5837", size = 23270, upload-time = "2025-11-14T09:50:01.99Z" }, - { url = "https://files.pythonhosted.org/packages/6b/ca/77d3e69924a8eb4508bb4f0ad34e46adbeedeb93616a71080e61e53dad71/murmurhash-1.0.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f32307fb9347680bb4fe1cbef6362fb39bd994f1b59abd8c09ca174e44199081", size = 27397, upload-time = "2025-11-14T09:50:03.077Z" }, - { url = "https://files.pythonhosted.org/packages/e6/53/a936f577d35b245d47b310f29e5e9f09fcac776c8c992f1ab51a9fb0cee2/murmurhash-1.0.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:539d8405885d1d19c005f3a2313b47e8e54b0ee89915eb8dfbb430b194328e6c", size = 27692, upload-time = "2025-11-14T09:50:04.144Z" }, - { url = "https://files.pythonhosted.org/packages/4d/64/5f8cfd1fd9cbeb43fcff96672f5bd9e7e1598d1c970f808ecd915490dc20/murmurhash-1.0.15-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c4cd739a00f5a4602201b74568ddabae46ec304719d9be752fd8f534a9464b5e", size = 128396, upload-time = "2025-11-14T09:50:05.268Z" }, - { url = "https://files.pythonhosted.org/packages/ac/10/d9ce29d559a75db0d8a3f13ea12c7f541ec9de2afca38dc70418b890eedb/murmurhash-1.0.15-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:44d211bcc3ec203c47dac06f48ee871093fcbdffa6652a6cc5ea7180306680a8", size = 128687, upload-time = "2025-11-14T09:50:06.527Z" }, - { url = "https://files.pythonhosted.org/packages/48/cd/dc97ab7e68cdfa1537a56e36dbc846c5a66701cc39ecee2d4399fe61996c/murmurhash-1.0.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f9bf47101354fb1dc4b2e313192566f04ba295c28a37e2f71c692759acc1ba3c", size = 128198, upload-time = "2025-11-14T09:50:08.062Z" }, - { url = "https://files.pythonhosted.org/packages/53/73/32f2aaa22c1e4afae337106baf0c938abf36a6cc879cfee83a00461bbbf7/murmurhash-1.0.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3c69b4d3bcd6233782a78907fe10b9b7a796bdc5d28060cf097d067bec280a5d", size = 127214, upload-time = "2025-11-14T09:50:09.265Z" }, - { url = "https://files.pythonhosted.org/packages/82/ed/812103a7f353eba2d83655b08205e13a38c93b4db0692f94756e1eb44516/murmurhash-1.0.15-cp311-cp311-win_amd64.whl", hash = "sha256:e43a69496342ce530bdd670264cb7c8f45490b296e4764c837ce577e3c7ebd53", size = 25241, upload-time = "2025-11-14T09:50:10.373Z" }, - { url = "https://files.pythonhosted.org/packages/eb/5f/2c511bdd28f7c24da37a00116ffd0432b65669d098f0d0260c66ac0ffdc2/murmurhash-1.0.15-cp311-cp311-win_arm64.whl", hash = "sha256:f3e99a6ee36ef5372df5f138e3d9c801420776d3641a34a49e5c2555f44edba7", size = 23216, upload-time = "2025-11-14T09:50:11.651Z" }, + { url = "https://files.pythonhosted.org/packages/ed/de/0e6edf44d6a04dabd0318a519125ed0415ce437ad5a1ec9b9be03d9048cf/ninja-1.13.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fb46acf6b93b8dd0322adc3a4945452a4e774b75b91293bafcc7b7f8e6517dfa", size = 180716, upload-time = "2025-08-11T15:09:58.696Z" }, + { url = "https://files.pythonhosted.org/packages/34/6f/5f5a54a1041af945130abdb2b8529cbef0cdcbbf9bcf3f4195378319d29a/ninja-1.13.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b4f2a072db3c0f944c32793e91532d8948d20d9ab83da9c0c7c15b5768072200", size = 581758, upload-time = "2025-08-11T15:10:13.295Z" }, ] [[package]] -name = "mypy-extensions" -version = "1.1.0" +name = "nodeenv" +version = "1.10.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, + { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" }, ] [[package]] -name = "networkx" -version = "3.4.2" +name = "numba" +version = "0.65.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "llvmlite", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/49/61/7299643b9c18d669e04be7c5bcb64d985070d07553274817b45b049e7bfe/numba-0.65.0.tar.gz", hash = "sha256:edad0d9f6682e93624c00125a471ae4df186175d71fd604c983c377cdc03e68b", size = 2764131, upload-time = "2026-04-01T03:52:01.946Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/a7/11e2b24251d57cf41fc9ad83f378d890d61a890e3f8eb6338b39833f67a4/numba-0.65.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:032b0b8e879512cd424d79eed6d772a1399c6387ded184c2cf3cc22c08d750a6", size = 3744674, upload-time = "2026-04-01T03:51:27.311Z" }, +] + +[[package]] +name = "numpy" +version = "2.3.5" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version < '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", + "platform_machine == 'x86_64' and sys_platform == 'linux'", ] -sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368, upload-time = "2024-10-21T12:39:38.695Z" } +sdist = { url = "https://files.pythonhosted.org/packages/76/65/21b3bc86aac7b8f2862db1e808f1ea22b028e30a225a34a5ede9bf8678f2/numpy-2.3.5.tar.gz", hash = "sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0", size = 20584950, upload-time = "2025-11-16T22:52:42.067Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263, upload-time = "2024-10-21T12:39:36.247Z" }, + { url = "https://files.pythonhosted.org/packages/65/fb/2b23769462b34398d9326081fad5655198fcf18966fcb1f1e49db44fbf31/numpy-2.3.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4", size = 16897903, upload-time = "2025-11-16T22:49:34.191Z" }, + { url = "https://files.pythonhosted.org/packages/6f/3b/1f73994904142b2aa290449b3bb99772477b5fd94d787093e4f24f5af763/numpy-2.3.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748", size = 18838896, upload-time = "2025-11-16T22:49:39.727Z" }, + { url = "https://files.pythonhosted.org/packages/b8/50/94ccd8a2b141cb50651fddd4f6a48874acb3c91c8f0842b08a6afc4b0b21/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7", size = 16729263, upload-time = "2025-11-16T22:52:36.369Z" }, ] [[package]] -name = "networkx" -version = "3.6.1" +name = "numpy" +version = "2.4.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.11' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version >= '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", + "sys_platform == 'darwin'", ] -sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, ] [[package]] -name = "ninja" -version = "1.13.0" +name = "nvidia-cublas" +version = "13.1.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/73/79a0b22fc731989c708068427579e840a6cf4e937fe7ae5c5d0b7356ac22/ninja-1.13.0.tar.gz", hash = "sha256:4a40ce995ded54d9dc24f8ea37ff3bf62ad192b547f6c7126e7e25045e76f978", size = 242558, upload-time = "2025-08-11T15:10:19.421Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/74/d02409ed2aa865e051b7edda22ad416a39d81a84980f544f8de717cab133/ninja-1.13.0-py3-none-macosx_10_9_universal2.whl", hash = "sha256:fa2a8bfc62e31b08f83127d1613d10821775a0eb334197154c4d6067b7068ff1", size = 310125, upload-time = "2025-08-11T15:09:50.971Z" }, - { url = "https://files.pythonhosted.org/packages/8e/de/6e1cd6b84b412ac1ef327b76f0641aeb5dcc01e9d3f9eee0286d0c34fd93/ninja-1.13.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3d00c692fb717fd511abeb44b8c5d00340c36938c12d6538ba989fe764e79630", size = 177467, upload-time = "2025-08-11T15:09:52.767Z" }, - { url = "https://files.pythonhosted.org/packages/c8/83/49320fb6e58ae3c079381e333575fdbcf1cca3506ee160a2dcce775046fa/ninja-1.13.0-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:be7f478ff9f96a128b599a964fc60a6a87b9fa332ee1bd44fa243ac88d50291c", size = 187834, upload-time = "2025-08-11T15:09:54.115Z" }, - { url = "https://files.pythonhosted.org/packages/56/c7/ba22748fb59f7f896b609cd3e568d28a0a367a6d953c24c461fe04fc4433/ninja-1.13.0-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:60056592cf495e9a6a4bea3cd178903056ecb0943e4de45a2ea825edb6dc8d3e", size = 202736, upload-time = "2025-08-11T15:09:55.745Z" }, - { url = "https://files.pythonhosted.org/packages/79/22/d1de07632b78ac8e6b785f41fa9aad7a978ec8c0a1bf15772def36d77aac/ninja-1.13.0-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:1c97223cdda0417f414bf864cfb73b72d8777e57ebb279c5f6de368de0062988", size = 179034, upload-time = "2025-08-11T15:09:57.394Z" }, - { url = "https://files.pythonhosted.org/packages/ed/de/0e6edf44d6a04dabd0318a519125ed0415ce437ad5a1ec9b9be03d9048cf/ninja-1.13.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fb46acf6b93b8dd0322adc3a4945452a4e774b75b91293bafcc7b7f8e6517dfa", size = 180716, upload-time = "2025-08-11T15:09:58.696Z" }, - { url = "https://files.pythonhosted.org/packages/54/28/938b562f9057aaa4d6bfbeaa05e81899a47aebb3ba6751e36c027a7f5ff7/ninja-1.13.0-py3-none-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4be9c1b082d244b1ad7ef41eb8ab088aae8c109a9f3f0b3e56a252d3e00f42c1", size = 146843, upload-time = "2025-08-11T15:10:00.046Z" }, - { url = "https://files.pythonhosted.org/packages/2a/fb/d06a3838de4f8ab866e44ee52a797b5491df823901c54943b2adb0389fbb/ninja-1.13.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:6739d3352073341ad284246f81339a384eec091d9851a886dfa5b00a6d48b3e2", size = 154402, upload-time = "2025-08-11T15:10:01.657Z" }, - { url = "https://files.pythonhosted.org/packages/31/bf/0d7808af695ceddc763cf251b84a9892cd7f51622dc8b4c89d5012779f06/ninja-1.13.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:11be2d22027bde06f14c343f01d31446747dbb51e72d00decca2eb99be911e2f", size = 552388, upload-time = "2025-08-11T15:10:03.349Z" }, - { url = "https://files.pythonhosted.org/packages/9d/70/c99d0c2c809f992752453cce312848abb3b1607e56d4cd1b6cded317351a/ninja-1.13.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:aa45b4037b313c2f698bc13306239b8b93b4680eb47e287773156ac9e9304714", size = 472501, upload-time = "2025-08-11T15:10:04.735Z" }, - { url = "https://files.pythonhosted.org/packages/9f/43/c217b1153f0e499652f5e0766da8523ce3480f0a951039c7af115e224d55/ninja-1.13.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5f8e1e8a1a30835eeb51db05cf5a67151ad37542f5a4af2a438e9490915e5b72", size = 638280, upload-time = "2025-08-11T15:10:06.512Z" }, - { url = "https://files.pythonhosted.org/packages/8c/45/9151bba2c8d0ae2b6260f71696330590de5850e5574b7b5694dce6023e20/ninja-1.13.0-py3-none-musllinux_1_2_ppc64le.whl", hash = "sha256:3d7d7779d12cb20c6d054c61b702139fd23a7a964ec8f2c823f1ab1b084150db", size = 642420, upload-time = "2025-08-11T15:10:08.35Z" }, - { url = "https://files.pythonhosted.org/packages/3c/fb/95752eb635bb8ad27d101d71bef15bc63049de23f299e312878fc21cb2da/ninja-1.13.0-py3-none-musllinux_1_2_riscv64.whl", hash = "sha256:d741a5e6754e0bda767e3274a0f0deeef4807f1fec6c0d7921a0244018926ae5", size = 585106, upload-time = "2025-08-11T15:10:09.818Z" }, - { url = "https://files.pythonhosted.org/packages/c1/31/aa56a1a286703800c0cbe39fb4e82811c277772dc8cd084f442dd8e2938a/ninja-1.13.0-py3-none-musllinux_1_2_s390x.whl", hash = "sha256:e8bad11f8a00b64137e9b315b137d8bb6cbf3086fbdc43bf1f90fd33324d2e96", size = 707138, upload-time = "2025-08-11T15:10:11.366Z" }, - { url = "https://files.pythonhosted.org/packages/34/6f/5f5a54a1041af945130abdb2b8529cbef0cdcbbf9bcf3f4195378319d29a/ninja-1.13.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b4f2a072db3c0f944c32793e91532d8948d20d9ab83da9c0c7c15b5768072200", size = 581758, upload-time = "2025-08-11T15:10:13.295Z" }, - { url = "https://files.pythonhosted.org/packages/95/97/51359c77527d45943fe7a94d00a3843b81162e6c4244b3579fe8fc54cb9c/ninja-1.13.0-py3-none-win32.whl", hash = "sha256:8cfbb80b4a53456ae8a39f90ae3d7a2129f45ea164f43fadfa15dc38c4aef1c9", size = 267201, upload-time = "2025-08-11T15:10:15.158Z" }, - { url = "https://files.pythonhosted.org/packages/29/45/c0adfbfb0b5895aa18cec400c535b4f7ff3e52536e0403602fc1a23f7de9/ninja-1.13.0-py3-none-win_amd64.whl", hash = "sha256:fb8ee8719f8af47fed145cced4a85f0755dd55d45b2bddaf7431fa89803c5f3e", size = 309975, upload-time = "2025-08-11T15:10:16.697Z" }, - { url = "https://files.pythonhosted.org/packages/df/93/a7b983643d1253bb223234b5b226e69de6cda02b76cdca7770f684b795f5/ninja-1.13.0-py3-none-win_arm64.whl", hash = "sha256:3c0b40b1f0bba764644385319028650087b4c1b18cdfa6f45cb39a3669b81aa9", size = 290806, upload-time = "2025-08-11T15:10:18.018Z" }, + { url = "https://files.pythonhosted.org/packages/e7/44/423ac00af4dd95a5aeb27207e2c0d9b7118702149bf4704c3ddb55bb7429/nvidia_cublas-13.1.0.3-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:ee8722c1f0145ab246bccb9e452153b5e0515fd094c3678df50b2a0888b8b171", size = 423133236, upload-time = "2025-10-09T08:59:32.536Z" }, ] [[package]] -name = "nltk" -version = "3.9.4" +name = "nvidia-cuda-cccl" +version = "13.3.3.3.1" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "joblib" }, - { name = "regex" }, - { name = "tqdm" }, +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/fb/195d50d25ab68a76b817ffc68c45b1fb828598ce35a8e5c1736060628dab/nvidia_cuda_cccl-13.3.3.3.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:40ba1fa0b2c694ddc06cc791ed5c8bdad4638e2735b784960d68ac3086399c97", size = 3453013, upload-time = "2026-05-26T16:28:08.209Z" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/74/a1/b3b4adf15585a5bc4c357adde150c01ebeeb642173ded4d871e89468767c/nltk-3.9.4.tar.gz", hash = "sha256:ed03bc098a40481310320808b2db712d95d13ca65b27372f8a403949c8b523d0", size = 2946864, upload-time = "2026-03-24T06:13:40.641Z" } + +[[package]] +name = "nvidia-cuda-crt" +version = "13.3.33" +source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/91/04e965f8e717ba0ab4bdca5c112deeab11c9e750d94c4d4602f050295d39/nltk-3.9.4-py3-none-any.whl", hash = "sha256:f2fa301c3a12718ce4a0e9305c5675299da5ad9e26068218b69d692fda84828f", size = 1552087, upload-time = "2026-03-24T06:13:38.47Z" }, + { url = "https://files.pythonhosted.org/packages/8d/a7/998af901511d5efdc6e42fc597d32a69f34eecf86f1591a9d230ab3ab951/nvidia_cuda_crt-13.3.33-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ff37600c7b880a14cab4ade763b4c10c0ff92f25cc9dca30f0881ce52693c4", size = 157350, upload-time = "2026-05-26T16:29:22.315Z" }, ] [[package]] -name = "numba" -version = "0.61.2" +name = "nvidia-cuda-cupti" +version = "13.0.85" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/6d/737d164b4837a9bbd202f5ae3078975f0525a55730fe871d8ed4e3b952b0/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_x86_64.whl", hash = "sha256:4eb01c08e859bf924d222250d2e8f8b8ff6d3db4721288cf35d14252a4d933c8", size = 10715597, upload-time = "2025-09-04T08:26:51.312Z" }, +] + +[[package]] +name = "nvidia-cuda-nvcc" +version = "13.2.78" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "llvmlite" }, - { name = "numpy" }, + { name = "nvidia-cuda-crt", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-runtime", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvvm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1c/a0/e21f57604304aa03ebb8e098429222722ad99176a4f979d34af1d1ee80da/numba-0.61.2.tar.gz", hash = "sha256:8750ee147940a6637b80ecf7f95062185ad8726c8c28a2295b8ec1160a196f7d", size = 2820615, upload-time = "2025-04-09T02:58:07.659Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/ca/f470be59552ccbf9531d2d383b67ae0b9b524d435fb4a0d229fef135116e/numba-0.61.2-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:cf9f9fc00d6eca0c23fc840817ce9f439b9f03c8f03d6246c0e7f0cb15b7162a", size = 2775663, upload-time = "2025-04-09T02:57:34.143Z" }, - { url = "https://files.pythonhosted.org/packages/f5/13/3bdf52609c80d460a3b4acfb9fdb3817e392875c0d6270cf3fd9546f138b/numba-0.61.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ea0247617edcb5dd61f6106a56255baab031acc4257bddaeddb3a1003b4ca3fd", size = 2778344, upload-time = "2025-04-09T02:57:36.609Z" }, - { url = "https://files.pythonhosted.org/packages/e2/7d/bfb2805bcfbd479f04f835241ecf28519f6e3609912e3a985aed45e21370/numba-0.61.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ae8c7a522c26215d5f62ebec436e3d341f7f590079245a2f1008dfd498cc1642", size = 3824054, upload-time = "2025-04-09T02:57:38.162Z" }, - { url = "https://files.pythonhosted.org/packages/e3/27/797b2004745c92955470c73c82f0e300cf033c791f45bdecb4b33b12bdea/numba-0.61.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bd1e74609855aa43661edffca37346e4e8462f6903889917e9f41db40907daa2", size = 3518531, upload-time = "2025-04-09T02:57:39.709Z" }, - { url = "https://files.pythonhosted.org/packages/b1/c6/c2fb11e50482cb310afae87a997707f6c7d8a48967b9696271347441f650/numba-0.61.2-cp310-cp310-win_amd64.whl", hash = "sha256:ae45830b129c6137294093b269ef0a22998ccc27bf7cf096ab8dcf7bca8946f9", size = 2831612, upload-time = "2025-04-09T02:57:41.559Z" }, - { url = "https://files.pythonhosted.org/packages/3f/97/c99d1056aed767503c228f7099dc11c402906b42a4757fec2819329abb98/numba-0.61.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:efd3db391df53aaa5cfbee189b6c910a5b471488749fd6606c3f33fc984c2ae2", size = 2775825, upload-time = "2025-04-09T02:57:43.442Z" }, - { url = "https://files.pythonhosted.org/packages/95/9e/63c549f37136e892f006260c3e2613d09d5120672378191f2dc387ba65a2/numba-0.61.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:49c980e4171948ffebf6b9a2520ea81feed113c1f4890747ba7f59e74be84b1b", size = 2778695, upload-time = "2025-04-09T02:57:44.968Z" }, - { url = "https://files.pythonhosted.org/packages/97/c8/8740616c8436c86c1b9a62e72cb891177d2c34c2d24ddcde4c390371bf4c/numba-0.61.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3945615cd73c2c7eba2a85ccc9c1730c21cd3958bfcf5a44302abae0fb07bb60", size = 3829227, upload-time = "2025-04-09T02:57:46.63Z" }, - { url = "https://files.pythonhosted.org/packages/fc/06/66e99ae06507c31d15ff3ecd1f108f2f59e18b6e08662cd5f8a5853fbd18/numba-0.61.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbfdf4eca202cebade0b7d43896978e146f39398909a42941c9303f82f403a18", size = 3523422, upload-time = "2025-04-09T02:57:48.222Z" }, - { url = "https://files.pythonhosted.org/packages/0f/a4/2b309a6a9f6d4d8cfba583401c7c2f9ff887adb5d54d8e2e130274c0973f/numba-0.61.2-cp311-cp311-win_amd64.whl", hash = "sha256:76bcec9f46259cedf888041b9886e257ae101c6268261b19fda8cfbc52bec9d1", size = 2831505, upload-time = "2025-04-09T02:57:50.108Z" }, + { url = "https://files.pythonhosted.org/packages/65/0f/c7c7d538c61794130e759ad74710ab5aa8cab1f700ee1754381f8c665605/nvidia_cuda_nvcc-13.2.78-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c3bd144dd9b6b25e062589acb7bbd43d93d3120c72fad71da808f9817aba1239", size = 44040318, upload-time = "2026-04-13T09:42:50.457Z" }, ] [[package]] -name = "numpy" -version = "1.26.4" +name = "nvidia-cuda-nvrtc" +version = "13.0.88" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/65/6e/09db70a523a96d25e115e71cc56a6f9031e7b8cd166c1ac8438307c14058/numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", size = 15786129, upload-time = "2024-02-06T00:26:44.495Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/94/ace0fdea5241a27d13543ee117cbc65868e82213fb31a8eb7fe9ff23f313/numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0", size = 20631468, upload-time = "2024-02-05T23:48:01.194Z" }, - { url = "https://files.pythonhosted.org/packages/20/f7/b24208eba89f9d1b58c1668bc6c8c4fd472b20c45573cb767f59d49fb0f6/numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a", size = 13966411, upload-time = "2024-02-05T23:48:29.038Z" }, - { url = "https://files.pythonhosted.org/packages/fc/a5/4beee6488160798683eed5bdb7eead455892c3b4e1f78d79d8d3f3b084ac/numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4", size = 14219016, upload-time = "2024-02-05T23:48:54.098Z" }, - { url = "https://files.pythonhosted.org/packages/4b/d7/ecf66c1cd12dc28b4040b15ab4d17b773b87fa9d29ca16125de01adb36cd/numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f", size = 18240889, upload-time = "2024-02-05T23:49:25.361Z" }, - { url = "https://files.pythonhosted.org/packages/24/03/6f229fe3187546435c4f6f89f6d26c129d4f5bed40552899fcf1f0bf9e50/numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a", size = 13876746, upload-time = "2024-02-05T23:49:51.983Z" }, - { url = "https://files.pythonhosted.org/packages/39/fe/39ada9b094f01f5a35486577c848fe274e374bbf8d8f472e1423a0bbd26d/numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2", size = 18078620, upload-time = "2024-02-05T23:50:22.515Z" }, - { url = "https://files.pythonhosted.org/packages/d5/ef/6ad11d51197aad206a9ad2286dc1aac6a378059e06e8cf22cd08ed4f20dc/numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07", size = 5972659, upload-time = "2024-02-05T23:50:35.834Z" }, - { url = "https://files.pythonhosted.org/packages/19/77/538f202862b9183f54108557bfda67e17603fc560c384559e769321c9d92/numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5", size = 15808905, upload-time = "2024-02-05T23:51:03.701Z" }, - { url = "https://files.pythonhosted.org/packages/11/57/baae43d14fe163fa0e4c47f307b6b2511ab8d7d30177c491960504252053/numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71", size = 20630554, upload-time = "2024-02-05T23:51:50.149Z" }, - { url = "https://files.pythonhosted.org/packages/1a/2e/151484f49fd03944c4a3ad9c418ed193cfd02724e138ac8a9505d056c582/numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef", size = 13997127, upload-time = "2024-02-05T23:52:15.314Z" }, - { url = "https://files.pythonhosted.org/packages/79/ae/7e5b85136806f9dadf4878bf73cf223fe5c2636818ba3ab1c585d0403164/numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e", size = 14222994, upload-time = "2024-02-05T23:52:47.569Z" }, - { url = "https://files.pythonhosted.org/packages/3a/d0/edc009c27b406c4f9cbc79274d6e46d634d139075492ad055e3d68445925/numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5", size = 18252005, upload-time = "2024-02-05T23:53:15.637Z" }, - { url = "https://files.pythonhosted.org/packages/09/bf/2b1aaf8f525f2923ff6cfcf134ae5e750e279ac65ebf386c75a0cf6da06a/numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a", size = 13885297, upload-time = "2024-02-05T23:53:42.16Z" }, - { url = "https://files.pythonhosted.org/packages/df/a0/4e0f14d847cfc2a633a1c8621d00724f3206cfeddeb66d35698c4e2cf3d2/numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a", size = 18093567, upload-time = "2024-02-05T23:54:11.696Z" }, - { url = "https://files.pythonhosted.org/packages/d2/b7/a734c733286e10a7f1a8ad1ae8c90f2d33bf604a96548e0a4a3a6739b468/numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20", size = 5968812, upload-time = "2024-02-05T23:54:26.453Z" }, - { url = "https://files.pythonhosted.org/packages/3f/6b/5610004206cf7f8e7ad91c5a85a8c71b2f2f8051a0c0c4d5916b76d6cbb2/numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2", size = 15811913, upload-time = "2024-02-05T23:54:53.933Z" }, + { url = "https://files.pythonhosted.org/packages/c3/68/483a78f5e8f31b08fb1bb671559968c0ca3a065ac7acabfc7cee55214fd6/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:ad9b6d2ead2435f11cbb6868809d2adeeee302e9bb94bcf0539c7a40d80e8575", size = 90215200, upload-time = "2025-09-04T08:28:44.204Z" }, ] [[package]] -name = "nvidia-cublas-cu12" -version = "12.8.3.14" +name = "nvidia-cuda-runtime" +version = "13.0.96" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/82/df/4b01f10069e23c641f116c62fc31e31e8dc361a153175d81561d15c8143b/nvidia_cublas_cu12-12.8.3.14-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:3f0e05e7293598cf61933258b73e66a160c27d59c4422670bf0b79348c04be44", size = 609620630, upload-time = "2025-01-23T17:55:00.753Z" }, + { url = "https://files.pythonhosted.org/packages/2e/24/d1558f3b68b1d26e706813b1d10aa1d785e4698c425af8db8edc3dced472/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f82250d7782aa23b6cfe765ecc7db554bd3c2870c43f3d1821f1d18aebf0548", size = 2243632, upload-time = "2025-10-09T08:55:36.117Z" }, ] [[package]] -name = "nvidia-cuda-cupti-cu12" -version = "12.8.57" +name = "nvidia-cuda-tileiras" +version = "13.2.78" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cuda-nvcc", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvvm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] wheels = [ - { url = "https://files.pythonhosted.org/packages/39/6f/3683ecf4e38931971946777d231c2df00dd5c1c4c2c914c42ad8f9f4dca6/nvidia_cuda_cupti_cu12-12.8.57-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8e0b2eb847de260739bee4a3f66fac31378f4ff49538ff527a38a01a9a39f950", size = 10237547, upload-time = "2025-01-23T17:47:56.863Z" }, + { url = "https://files.pythonhosted.org/packages/7f/b8/c8a96862268943c7cf30a014fe2d8f70c651d30fbfa790d54c3e347b6fa1/nvidia_cuda_tileiras-13.2.78-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5ce7c140a518aa8dfe033e7176f593617ed2fece0e50331e2a14dafd236723fd", size = 36970479, upload-time = "2026-04-13T09:48:49.919Z" }, ] [[package]] -name = "nvidia-cuda-nvrtc-cu12" -version = "12.8.61" +name = "nvidia-cudnn-cu13" +version = "9.19.0.56" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/22/32029d4583f7b19cfe75c84399cbcfd23f2aaf41c66fc8db4da460104fff/nvidia_cuda_nvrtc_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:a0fa9c2a21583105550ebd871bd76e2037205d56f33f128e69f6d2a55e0af9ed", size = 88024585, upload-time = "2025-01-23T17:50:10.722Z" }, + { url = "https://files.pythonhosted.org/packages/a3/22/0b4b932655d17a6da1b92fa92ab12844b053bb2ac2475e179ba6f043da1e/nvidia_cudnn_cu13-9.19.0.56-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:d20e1734305e9d68889a96e3f35094d733ff1f83932ebe462753973e53a572bf", size = 366066321, upload-time = "2026-02-03T20:44:52.837Z" }, ] [[package]] -name = "nvidia-cuda-runtime-cu12" -version = "12.8.57" +name = "nvidia-cudnn-frontend" +version = "1.25.0" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/16/f6/0e1ef31f4753a44084310ba1a7f0abaf977ccd810a604035abb43421c057/nvidia_cuda_runtime_cu12-12.8.57-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:75342e28567340b7428ce79a5d6bb6ca5ff9d07b69e7ce00d2c7b4dc23eff0be", size = 954762, upload-time = "2025-01-23T17:47:22.21Z" }, + { url = "https://files.pythonhosted.org/packages/a8/50/224ff36c5d9e02624f8d3c582982bfac74bec481cd331e704fb9a5ecd128/nvidia_cudnn_frontend-1.25.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676d56062d3ade4ffb34315abe52ea766fa4488db1161b702d9ddd872fab4ddf", size = 3413687, upload-time = "2026-06-10T21:07:04.26Z" }, ] [[package]] -name = "nvidia-cudnn-cu12" -version = "9.7.1.26" +name = "nvidia-cufft" +version = "12.0.0.61" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12" }, + { name = "nvidia-nvjitlink", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/2f/7b57e29836ea8714f81e9898409196f47d772d5ddedddf1592eadb8ab743/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6c44f692dce8fd5ffd3e3df134b6cdb9c2f72d99cf40b62c32dde45eea9ddad3", size = 214085489, upload-time = "2025-09-04T08:31:56.044Z" }, +] + +[[package]] +name = "nvidia-cufile" +version = "1.15.1.6" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/70/4f193de89a48b71714e74602ee14d04e4019ad36a5a9f20c425776e72cd6/nvidia_cufile-1.15.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:08a3ecefae5a01c7f5117351c64f17c7c62efa5fffdbe24fc7d298da19cd0b44", size = 1223672, upload-time = "2025-09-04T08:32:22.779Z" }, ] + +[[package]] +name = "nvidia-curand" +version = "10.4.0.35" +source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/25/dc/dc825c4b1c83b538e207e34f48f86063c88deaa35d46c651c7c181364ba2/nvidia_cudnn_cu12-9.7.1.26-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:6d011159a158f3cfc47bf851aea79e31bcff60d530b70ef70474c84cac484d07", size = 726851421, upload-time = "2025-02-06T22:18:29.812Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9f/be0a41ca4a4917abf5cb9ae0daff1a6060cc5de950aec0396de9f3b52bc5/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:1aee33a5da6e1db083fe2b90082def8915f30f3248d5896bcec36a579d941bfc", size = 59544258, upload-time = "2025-08-04T10:22:03.992Z" }, ] [[package]] -name = "nvidia-cufft-cu12" -version = "11.3.3.41" +name = "nvidia-cusolver" +version = "12.0.4.66" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12" }, + { name = "nvidia-cublas", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusparse", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvjitlink", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/ac/26/b53c493c38dccb1f1a42e1a21dc12cba2a77fbe36c652f7726d9ec4aba28/nvidia_cufft_cu12-11.3.3.41-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:da650080ab79fcdf7a4b06aa1b460e99860646b176a43f6208099bdc17836b6a", size = 193118795, upload-time = "2025-01-23T17:56:30.536Z" }, + { url = "https://files.pythonhosted.org/packages/5f/67/cba3777620cdacb99102da4042883709c41c709f4b6323c10781a9c3aa34/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:0a759da5dea5c0ea10fd307de75cdeb59e7ea4fcb8add0924859b944babf1112", size = 200941980, upload-time = "2025-09-04T08:33:22.767Z" }, ] [[package]] -name = "nvidia-cufile-cu12" -version = "1.13.0.11" +name = "nvidia-cusparse" +version = "12.6.3.3" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/9c/1f3264d0a84c8a031487fb7f59780fc78fa6f1c97776233956780e3dc3ac/nvidia_cufile_cu12-1.13.0.11-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:483f434c541806936b98366f6d33caef5440572de8ddf38d453213729da3e7d4", size = 1197801, upload-time = "2025-01-23T17:57:07.247Z" }, + { url = "https://files.pythonhosted.org/packages/fa/18/623c77619c31d62efd55302939756966f3ecc8d724a14dab2b75f1508850/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2b3c89c88d01ee0e477cb7f82ef60a11a4bcd57b6b87c33f789350b59759360b", size = 145942937, upload-time = "2025-09-04T08:33:58.029Z" }, ] [[package]] -name = "nvidia-curand-cu12" -version = "10.3.9.55" +name = "nvidia-cusparselt-cu13" +version = "0.8.0" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/fc/7be5d0082507269bb04ac07cc614c84b78749efb96e8cf4100a8a1178e98/nvidia_curand_cu12-10.3.9.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8387d974240c91f6a60b761b83d4b2f9b938b7e0b9617bae0f0dafe4f5c36b86", size = 63618038, upload-time = "2025-01-23T17:57:41.838Z" }, + { url = "https://files.pythonhosted.org/packages/fd/53/43b0d71f4e702fa9733f8b4571fdca50a8813f1e450b656c239beff12315/nvidia_cusparselt_cu13-0.8.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:25e30a8a7323935d4ad0340b95a0b69926eee755767e8e0b1cf8dd85b197d3fd", size = 169884119, upload-time = "2025-08-13T19:23:41.967Z" }, ] [[package]] -name = "nvidia-cusolver-cu12" -version = "11.7.2.55" +name = "nvidia-cutlass-dsl" +version = "4.5.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12" }, - { name = "nvidia-cusparse-cu12" }, - { name = "nvidia-nvjitlink-cu12" }, + { name = "nvidia-cutlass-dsl-libs-base", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/08/953675873a136d96bb12f93b49ba045d1107bc94d2551c52b12fa6c7dec3/nvidia_cusolver_cu12-11.7.2.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4d1354102f1e922cee9db51920dba9e2559877cf6ff5ad03a00d853adafb191b", size = 260373342, upload-time = "2025-01-23T17:58:56.406Z" }, + { url = "https://files.pythonhosted.org/packages/f0/15/575d7df4fe2f3406f1cfc68be72aeff2834f8a696daf1cd5bee8017e4507/nvidia_cutlass_dsl-4.5.2-py3-none-any.whl", hash = "sha256:68ed1b63ca74aae87955012da9dfd7fdaae471329d0028b229b841c7192ccf52", size = 10179, upload-time = "2026-05-25T03:38:56.364Z" }, +] + +[package.optional-dependencies] +cu13 = [ + { name = "nvidia-cutlass-dsl-libs-cu13", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] -name = "nvidia-cusparse-cu12" -version = "12.5.7.53" +name = "nvidia-cutlass-dsl-libs-base" +version = "4.5.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12" }, + { name = "cuda-python", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/ab/31e8149c66213b846c082a3b41b1365b831f41191f9f40c6ddbc8a7d550e/nvidia_cusparse_cu12-12.5.7.53-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3c1b61eb8c85257ea07e9354606b26397612627fdcd327bfd91ccf6155e7c86d", size = 292064180, upload-time = "2025-01-23T18:00:23.233Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e0/78eded54b4478ec01a91c75f1b9bc6dc73a2ec205c4fa2fdc25a456f4089/nvidia_cutlass_dsl_libs_base-4.5.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:9117900cba53d3c21a8dacba6bbf3d6e5f269e427a526c320fb44707a0d57363", size = 74511501, upload-time = "2026-05-25T03:52:03.798Z" }, ] [[package]] -name = "nvidia-cusparselt-cu12" -version = "0.6.3" +name = "nvidia-cutlass-dsl-libs-cu13" +version = "4.5.2" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-python", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cutlass-dsl-libs-base", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/9a/72ef35b399b0e183bc2e8f6f558036922d453c4d8237dab26c666a04244b/nvidia_cusparselt_cu12-0.6.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e5c8a26c36445dd2e6812f1177978a24e2d37cacce7e090f297a688d1ec44f46", size = 156785796, upload-time = "2024-10-15T21:29:17.709Z" }, + { url = "https://files.pythonhosted.org/packages/3c/3d/2153608b1f8f594ccfc67daa45a1d0ff600b9e552b1e5662644e6e3ebec3/nvidia_cutlass_dsl_libs_cu13-4.5.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:df61430d6110eea872acb39257042814bf02dcbb1f8d55ea0c5681bb7ce5836a", size = 78759970, upload-time = "2026-05-25T03:43:46.762Z" }, ] [[package]] -name = "nvidia-nccl-cu12" -version = "2.26.2" +name = "nvidia-ml-py" +version = "13.610.43" source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f0/b5/a8fbc356f768fa5c9cfd646668fd7d34bf55bdd1c6e20754642a64d930d4/nvidia_ml_py-13.610.43.tar.gz", hash = "sha256:65437eb73d68d0c62c931ca4d45038472faff03bd0b8729abba4b899f70d60f2", size = 52109, upload-time = "2026-06-01T18:54:08.829Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/67/ca/f42388aed0fddd64ade7493dbba36e1f534d4e6fdbdd355c6a90030ae028/nvidia_nccl_cu12-2.26.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:694cf3879a206553cc9d7dbda76b13efaf610fdb70a50cba303de1b0d1530ac6", size = 201319755, upload-time = "2025-03-13T00:29:55.296Z" }, + { url = "https://files.pythonhosted.org/packages/23/45/caa600acfab94560807a20a64b5830d2cd3c3202b7f1328644d70b7d6bd8/nvidia_ml_py-13.610.43-py3-none-any.whl", hash = "sha256:f13c72698edef492f985cc225f14faafe68ae065a2e407f45bdf6f4b9b43fde8", size = 53163, upload-time = "2026-06-01T18:54:07.704Z" }, ] [[package]] -name = "nvidia-nvjitlink-cu12" -version = "12.8.61" +name = "nvidia-nccl-cu13" +version = "2.28.9" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/03/f8/9d85593582bd99b8d7c65634d2304780aefade049b2b94d96e44084be90b/nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:45fd79f2ae20bd67e8bc411055939049873bfd8fac70ff13bd4865e0b9bdab17", size = 39243473, upload-time = "2025-01-23T18:03:03.509Z" }, + { url = "https://files.pythonhosted.org/packages/b0/b4/878fefaad5b2bcc6fcf8d474a25e3e3774bc5133e4b58adff4d0bca238bc/nvidia_nccl_cu13-2.28.9-py3-none-manylinux_2_18_x86_64.whl", hash = "sha256:e4553a30f34195f3fa1da02a6da3d6337d28f2003943aa0a3d247bbc25fefc42", size = 196493177, upload-time = "2025-11-18T05:49:17.677Z" }, ] [[package]] -name = "nvidia-nvtx-cu12" -version = "12.8.55" +name = "nvidia-nvjitlink" +version = "13.0.88" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/cd/0e8c51b2ae3a58f054f2e7fe91b82d201abfb30167f2431e9bd92d532f42/nvidia_nvtx_cu12-12.8.55-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2dd0780f1a55c21d8e06a743de5bd95653de630decfff40621dbde78cc307102", size = 89896, upload-time = "2025-01-23T17:50:44.487Z" }, + { url = "https://files.pythonhosted.org/packages/56/7a/123e033aaff487c77107195fa5a2b8686795ca537935a24efae476c41f05/nvidia_nvjitlink-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:13a74f429e23b921c1109976abefacc69835f2f433ebd323d3946e11d804e47b", size = 40713933, upload-time = "2025-09-04T08:35:43.553Z" }, ] [[package]] -name = "onnxruntime" -version = "1.24.3" +name = "nvidia-nvshmem-cu13" +version = "3.4.5" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version < '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/35/a9bf80a609e74e3b000fef598933235c908fcefcef9026042b8e6dfde2a9/nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:290f0a2ee94c9f3687a02502f3b9299a9f9fe826e6d0287ee18482e78d495b80", size = 60412546, upload-time = "2025-09-06T00:32:41.564Z" }, ] -dependencies = [ - { name = "flatbuffers", marker = "python_full_version < '3.11'" }, - { name = "numpy", marker = "python_full_version < '3.11'" }, - { name = "packaging", marker = "python_full_version < '3.11'" }, - { name = "protobuf", marker = "python_full_version < '3.11'" }, - { name = "sympy", marker = "python_full_version < '3.11'" }, + +[[package]] +name = "nvidia-nvtx" +version = "13.0.85" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/f3/d86c845465a2723ad7e1e5c36dcd75ddb82898b3f53be47ebd429fb2fa5d/nvidia_nvtx-13.0.85-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4936d1d6780fbe68db454f5e72a42ff64d1fd6397df9f363ae786930fd5c1cd4", size = 148047, upload-time = "2025-09-04T08:29:01.761Z" }, ] + +[[package]] +name = "nvidia-nvvm" +version = "13.2.78" +source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/15/41/3253db975a90c3ce1d475e2a230773a21cd7998537f0657947df6fb79861/onnxruntime-1.24.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3e6456801c66b095c5cd68e690ca25db970ea5202bd0c5b84a2c3ef7731c5a3c", size = 17332766, upload-time = "2026-03-05T17:18:59.714Z" }, - { url = "https://files.pythonhosted.org/packages/7e/c5/3af6b325f1492d691b23844d88ed26844c1164620860c5efe95c0e22782d/onnxruntime-1.24.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b2ebc54c6d8281dccff78d4b06e47d4cf07535937584ab759448390a70f4978", size = 15130330, upload-time = "2026-03-05T16:34:53.831Z" }, - { url = "https://files.pythonhosted.org/packages/03/4b/f96b46c1866a293ed23ca2cf5e5a63d413ad3a951da60dd877e3c56cbbca/onnxruntime-1.24.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb56575d7794bf0781156955610c9e651c9504c64d42ec880784b6106244882d", size = 17213247, upload-time = "2026-03-05T17:17:59.812Z" }, - { url = "https://files.pythonhosted.org/packages/36/13/27cf4d8df2578747584e8758aeb0b673b60274048510257f1f084b15e80e/onnxruntime-1.24.3-cp311-cp311-win_amd64.whl", hash = "sha256:c958222ef9eff54018332beecd32d5d94a3ab079d8821937b333811bf4da0d39", size = 12595530, upload-time = "2026-03-05T17:18:49.356Z" }, - { url = "https://files.pythonhosted.org/packages/19/8c/6d9f31e6bae72a8079be12ed8ba36c4126a571fad38ded0a1b96f60f6896/onnxruntime-1.24.3-cp311-cp311-win_arm64.whl", hash = "sha256:a8f761857ebaf58a85b9e42422d03207f1d39e6bb8fecfdbf613bac5b9710723", size = 12261715, upload-time = "2026-03-05T17:18:39.699Z" }, + { url = "https://files.pythonhosted.org/packages/e8/1f/930d63ccc8adcdf27bfc051a24e3e4da2cf6ef987848d6d1d642e29d704b/nvidia_nvvm-13.2.78-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:f5aa433631109bbdec81802c5b5f319bf10bc891fe2f212e4e445845211d6f77", size = 64279462, upload-time = "2026-04-13T10:02:25.719Z" }, ] [[package]] name = "onnxruntime" version = "1.27.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.11' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version >= '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", -] dependencies = [ - { name = "flatbuffers", marker = "python_full_version >= '3.11'" }, - { name = "numpy", marker = "python_full_version >= '3.11'" }, - { name = "packaging", marker = "python_full_version >= '3.11'" }, - { name = "protobuf", marker = "python_full_version >= '3.11'" }, + { name = "flatbuffers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "protobuf", version = "7.35.1", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/d4/e4/5353d7e09ced4a8f473f843223fc75d726b2b5519dcefc12f22a6c92852d/onnxruntime-1.27.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:8ba14a38c570087f3cdb8cfba33f7a38a1e826c1e5b29e17c28ceda0cc910016", size = 18416484, upload-time = "2026-06-15T22:43:43.894Z" }, - { url = "https://files.pythonhosted.org/packages/ed/1f/a2117aa3f144fce88774efa37440d0ca72d0c9144854dfc0961f2b04c6fc/onnxruntime-1.27.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2eb083321af8a236a84c7c140a7f4cecbfa2a987a18c07c78db471c20cd390ef", size = 16419330, upload-time = "2026-06-15T22:42:37.58Z" }, { url = "https://files.pythonhosted.org/packages/e0/cd/74bb804170ceb622fda9111df31a07b3024f7491472256d3a90b5391a4d2/onnxruntime-1.27.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e4f7b0e90d2d212e2c2deaa6c8291616183ab815d3ec558ea12d3ac8b26d36f4", size = 18636930, upload-time = "2026-06-15T22:43:01.584Z" }, - { url = "https://files.pythonhosted.org/packages/fe/8f/5b8e2b85e81735696887175dbaf6409f215683f5ca9d4928fbb038211d32/onnxruntime-1.27.0-cp311-cp311-win_amd64.whl", hash = "sha256:ff050e4f6bf7f12918fa14dcb047c0b02e295f35e86d42532552be4b3d54e977", size = 13356110, upload-time = "2026-06-15T22:43:32.172Z" }, - { url = "https://files.pythonhosted.org/packages/b0/3a/4f568de678126b6a371a93862f015a82138359decd97fcac61fc84b5b774/onnxruntime-1.27.0-cp311-cp311-win_arm64.whl", hash = "sha256:75fbc1e1fb43a39a856c8209c544cca7817b5de7ac16b15b1bdf55d1cc67b9df", size = 13098635, upload-time = "2026-06-15T22:43:19.607Z" }, ] [[package]] name = "openai" -version = "1.99.1" +version = "2.43.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "anyio" }, - { name = "distro" }, - { name = "httpx" }, - { name = "jiter" }, - { name = "pydantic" }, - { name = "sniffio" }, - { name = "tqdm" }, - { name = "typing-extensions" }, + { name = "anyio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "distro", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "httpx", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "jiter", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "sniffio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tqdm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/03/30/f0fb7907a77e733bb801c7bdcde903500b31215141cdb261f04421e6fbec/openai-1.99.1.tar.gz", hash = "sha256:2c9d8e498c298f51bb94bcac724257a3a6cac6139ccdfc1186c6708f7a93120f", size = 497075, upload-time = "2025-08-05T19:42:36.131Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/fa/88d0c58a0c58df7e6758e66b99c5d028d5e0bb49f8812d7203940cd9dbf1/openai-2.43.0.tar.gz", hash = "sha256:e74d238200a26868977002190fb6631613480a93dfe0c9c982e77021ed60a017", size = 785369, upload-time = "2026-06-17T17:06:56.06Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/15/9c85154ffd283abfc43309ff3aaa63c3fd02f7767ee684e73670f6c5ade2/openai-1.99.1-py3-none-any.whl", hash = "sha256:8eeccc69e0ece1357b51ca0d9fb21324afee09b20c3e5b547d02445ca18a4e03", size = 767827, upload-time = "2025-08-05T19:42:34.192Z" }, + { url = "https://files.pythonhosted.org/packages/a3/d2/ba767f4bbb30776c03d40906a2d3afad716a165ffa1771fc23b8992f7920/openai-2.43.0-py3-none-any.whl", hash = "sha256:65a670b54fadf2268c9e1330133373c963eb779ee969e5cbad419ec2c21dce97", size = 1355077, upload-time = "2026-06-17T17:06:53.614Z" }, ] [[package]] @@ -2016,97 +1886,176 @@ name = "openai-harmony" version = "0.0.8" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pydantic" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3e/92/2d038d096f29179c7c9571b431f9e739f87a487121901725e23fe338dd9d/openai_harmony-0.0.8.tar.gz", hash = "sha256:6e43f98e6c242fa2de6f8ea12eab24af63fa2ed3e89c06341fb9d92632c5cbdf", size = 284777, upload-time = "2025-11-05T19:07:06.727Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/45/c6/2502f416d46be3ec08bb66d696cccffb57781a499e3ff2e4d7c174af4e8f/openai_harmony-0.0.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:029ec25ca74abe48fdb58eb9fdd2a8c1618581fc33ce8e5653f8a1ffbfbd9326", size = 2627806, upload-time = "2025-11-05T19:06:57.063Z" }, - { url = "https://files.pythonhosted.org/packages/d3/d2/ce6953ca87db9cae3e775024184da7d1c5cb88cead19a2d75b42f00a959c/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4f709815924ec325b9a890e6ab2bbb0ceec8e319a4e257328eb752cf36b2efc", size = 2948463, upload-time = "2025-11-05T19:06:48.17Z" }, - { url = "https://files.pythonhosted.org/packages/fa/4c/b553c9651662d6ce102ca7f3629d268b23df1abe5841e24bed81e8a8e949/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5cfcfd963b50a41fc656c84d3440ca6eecdccd6c552158ce790b8f2e33dfb5a9", size = 2704083, upload-time = "2025-11-05T19:06:50.205Z" }, - { url = "https://files.pythonhosted.org/packages/9b/af/4eec8f9ab9c27bcdb444460c72cf43011d176fc44c79d6e113094ca1e152/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a3a16972aa1cee38ea958470cd04ac9a2d5ac38fdcf77ab686611246220c158", size = 2959765, upload-time = "2025-11-05T19:06:53.62Z" }, - { url = "https://files.pythonhosted.org/packages/11/3c/33f3374e4624e0e776f6b13b73c45a7ead7f9c4529f8369ed5bfcaa30cac/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4d5cfa168e74d08f8ba6d58a7e49bc7daef4d58951ec69b66b0d56f4927a68d", size = 3427031, upload-time = "2025-11-05T19:06:51.829Z" }, { url = "https://files.pythonhosted.org/packages/25/3f/1a192b93bb47c6b44cd98ba8cc1d3d2a9308f1bb700c3017e6352da11bda/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c007d277218a50db8839e599ed78e0fffe5130f614c3f6d93ae257f282071a29", size = 2953260, upload-time = "2025-11-05T19:06:55.406Z" }, - { url = "https://files.pythonhosted.org/packages/5b/f8/93b582cad3531797c3db7c2db5400fd841538ccddfd9f5e3df61be99a630/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8565d4f5a0638da1bffde29832ed63c9e695c558611053add3b2dc0b56c92dbc", size = 3127044, upload-time = "2025-11-05T19:06:59.553Z" }, - { url = "https://files.pythonhosted.org/packages/1d/10/4327dbf87f75ae813405fd9a9b4a5cde63d506ffed0a096a440a4cabd89c/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:cbaa3bda75ef0d8836e1f8cc84af62f971b1d756d740efc95c38c3e04c0bfde2", size = 2932931, upload-time = "2025-11-05T19:07:01.437Z" }, - { url = "https://files.pythonhosted.org/packages/8a/c8/1774eec4f6f360ef57618fb8f52e3d3af245b2491bd0297513aa09eec04b/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:772922a9bd24e133950fad71eb1550836f415a88e8c77870e12d0c3bd688ddc2", size = 2996140, upload-time = "2025-11-05T19:07:03.438Z" }, { url = "https://files.pythonhosted.org/packages/60/c3/3d1e01e2dba517a91760e4a03e4f20ffc75039a6fe584d0e6f9b5c78fd15/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:007b0476a1f331f8130783f901f1da6f5a7057af1a4891f1b6a31dec364189b5", size = 3205080, upload-time = "2025-11-05T19:07:05.078Z" }, - { url = "https://files.pythonhosted.org/packages/14/63/119de431572d7c70a7bf1037034a9be6ed0a7502a7498ba7302bca5b3242/openai_harmony-0.0.8-cp38-abi3-win32.whl", hash = "sha256:a9b5f893326b28d9e935ade14b4f655f5a840942473bc89b201c25f7a15af9cf", size = 2082457, upload-time = "2025-11-05T19:07:09.631Z" }, - { url = "https://files.pythonhosted.org/packages/40/1f/c83cf5a206c263ee70448a5ae4264682555f4d0b5bed0d2cc6ca1108103d/openai_harmony-0.0.8-cp38-abi3-win_amd64.whl", hash = "sha256:39d44f0d8f466bd56698e7ead708bead3141e27b9b87e3ab7d5a6d0e4a869ee5", size = 2438369, upload-time = "2025-11-05T19:07:08.1Z" }, ] [[package]] name = "opencv-python-headless" -version = "4.11.0.86" +version = "4.13.0.92" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/36/2f/5b2b3ba52c864848885ba988f24b7f105052f68da9ab0e693cc7c25b0b30/opencv-python-headless-4.11.0.86.tar.gz", hash = "sha256:996eb282ca4b43ec6a3972414de0e2331f5d9cda2b41091a49739c19fb843798", size = 95177929, upload-time = "2025-01-16T13:53:40.22Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/53/2c50afa0b1e05ecdb4603818e85f7d174e683d874ef63a6abe3ac92220c8/opencv_python_headless-4.11.0.86-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:48128188ade4a7e517237c8e1e11a9cdf5c282761473383e77beb875bb1e61ca", size = 37326460, upload-time = "2025-01-16T13:52:57.015Z" }, - { url = "https://files.pythonhosted.org/packages/3b/43/68555327df94bb9b59a1fd645f63fafb0762515344d2046698762fc19d58/opencv_python_headless-4.11.0.86-cp37-abi3-macosx_13_0_x86_64.whl", hash = "sha256:a66c1b286a9de872c343ee7c3553b084244299714ebb50fbdcd76f07ebbe6c81", size = 56723330, upload-time = "2025-01-16T13:55:45.731Z" }, - { url = "https://files.pythonhosted.org/packages/45/be/1438ce43ebe65317344a87e4b150865c5585f4c0db880a34cdae5ac46881/opencv_python_headless-4.11.0.86-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6efabcaa9df731f29e5ea9051776715b1bdd1845d7c9530065c7951d2a2899eb", size = 29487060, upload-time = "2025-01-16T13:51:59.625Z" }, - { url = "https://files.pythonhosted.org/packages/dd/5c/c139a7876099916879609372bfa513b7f1257f7f1a908b0bdc1c2328241b/opencv_python_headless-4.11.0.86-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e0a27c19dd1f40ddff94976cfe43066fbbe9dfbb2ec1907d66c19caef42a57b", size = 49969856, upload-time = "2025-01-16T13:53:29.654Z" }, - { url = "https://files.pythonhosted.org/packages/95/dd/ed1191c9dc91abcc9f752b499b7928aacabf10567bb2c2535944d848af18/opencv_python_headless-4.11.0.86-cp37-abi3-win32.whl", hash = "sha256:f447d8acbb0b6f2808da71fddd29c1cdd448d2bc98f72d9bb78a7a898fc9621b", size = 29324425, upload-time = "2025-01-16T13:52:49.048Z" }, - { url = "https://files.pythonhosted.org/packages/86/8a/69176a64335aed183529207ba8bc3d329c2999d852b4f3818027203f50e6/opencv_python_headless-4.11.0.86-cp37-abi3-win_amd64.whl", hash = "sha256:6c304df9caa7a6a5710b91709dd4786bf20a74d57672b3c31f7033cc638174ca", size = 39402386, upload-time = "2025-01-16T13:52:56.418Z" }, -] - -[[package]] -name = "orjson" -version = "3.10.14" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/92/f7/3219b56f47b4f5e864fb11cdf4ac0aaa3de608730ad2dc4c6e16382f35ec/orjson-3.10.14.tar.gz", hash = "sha256:cf31f6f071a6b8e7aa1ead1fa27b935b48d00fbfa6a28ce856cfff2d5dd68eed", size = 5282116, upload-time = "2025-01-08T16:59:04.045Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/62/64348b8b29a14c7342f6aa45c8be0a87fdda2ce7716bc123717376537077/orjson-3.10.14-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:849ea7845a55f09965826e816cdc7689d6cf74fe9223d79d758c714af955bcb6", size = 249439, upload-time = "2025-01-08T16:56:21.158Z" }, - { url = "https://files.pythonhosted.org/packages/9f/51/48f4dfbca7b4db630316b170db4a150a33cd405650258bd62a2d619b43b4/orjson-3.10.14-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5947b139dfa33f72eecc63f17e45230a97e741942955a6c9e650069305eb73d", size = 135811, upload-time = "2025-01-08T16:56:25.468Z" }, - { url = "https://files.pythonhosted.org/packages/a1/1c/e18770843e6d045605c8e00a1be801da5668fa934b323b0492a49c9dee4f/orjson-3.10.14-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cde6d76910d3179dae70f164466692f4ea36da124d6fb1a61399ca589e81d69a", size = 150154, upload-time = "2025-01-08T16:56:28.35Z" }, - { url = "https://files.pythonhosted.org/packages/51/1e/3817dc79164f1fc17fc53102f74f62d31f5f4ec042abdd24d94c5e06e51c/orjson-3.10.14-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c6dfbaeb7afa77ca608a50e2770a0461177b63a99520d4928e27591b142c74b1", size = 139740, upload-time = "2025-01-08T16:56:29.92Z" }, - { url = "https://files.pythonhosted.org/packages/ff/fc/fbf9e25448f7a2d67c1a2b6dad78a9340666bf9fda3339ff59b1e93f0b6f/orjson-3.10.14-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa45e489ef80f28ff0e5ba0a72812b8cfc7c1ef8b46a694723807d1b07c89ebb", size = 154479, upload-time = "2025-01-08T16:56:31.292Z" }, - { url = "https://files.pythonhosted.org/packages/d4/df/c8b7ea21ff658f6a9a26d562055631c01d445bda5eb613c02c7d0934607d/orjson-3.10.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f5007abfdbb1d866e2aa8990bd1c465f0f6da71d19e695fc278282be12cffa5", size = 130414, upload-time = "2025-01-08T16:56:32.831Z" }, - { url = "https://files.pythonhosted.org/packages/df/f7/e29c2d42bef8fbf696a5e54e6339b0b9ea5179326950fee6ae80acf59d09/orjson-3.10.14-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1b49e2af011c84c3f2d541bb5cd1e3c7c2df672223e7e3ea608f09cf295e5f8a", size = 138545, upload-time = "2025-01-08T16:56:36.206Z" }, - { url = "https://files.pythonhosted.org/packages/8e/97/afdf2908fe8eaeecb29e97fa82dc934f275acf330e5271def0b8fbac5478/orjson-3.10.14-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:164ac155109226b3a2606ee6dda899ccfbe6e7e18b5bdc3fbc00f79cc074157d", size = 130952, upload-time = "2025-01-08T16:56:38.778Z" }, - { url = "https://files.pythonhosted.org/packages/4a/dd/04e01c1305694f47e9794c60ec7cece02e55fa9d57c5d72081eaaa62ad1d/orjson-3.10.14-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6b1225024cf0ef5d15934b5ffe9baf860fe8bc68a796513f5ea4f5056de30bca", size = 414673, upload-time = "2025-01-08T16:56:42.022Z" }, - { url = "https://files.pythonhosted.org/packages/fa/12/28c4d5f6a395ac9693b250f0662366968c47fc99c8f3cd803a65b1f5ba46/orjson-3.10.14-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d6546e8073dc382e60fcae4a001a5a1bc46da5eab4a4878acc2d12072d6166d5", size = 141002, upload-time = "2025-01-08T16:56:43.837Z" }, - { url = "https://files.pythonhosted.org/packages/21/f6/357cb167c2d2fd9542251cfd9f68681b67ed4dcdac82aa6ee2f4f3ab952e/orjson-3.10.14-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9f1d2942605c894162252d6259b0121bf1cb493071a1ea8cb35d79cb3e6ac5bc", size = 129626, upload-time = "2025-01-08T16:56:46.495Z" }, - { url = "https://files.pythonhosted.org/packages/df/07/d9062353500df9db8bfa7c6a5982687c97d0b69a5b158c4166d407ac94e2/orjson-3.10.14-cp310-cp310-win32.whl", hash = "sha256:397083806abd51cf2b3bbbf6c347575374d160331a2d33c5823e22249ad3118b", size = 142429, upload-time = "2025-01-08T16:56:47.931Z" }, - { url = "https://files.pythonhosted.org/packages/50/ba/6ba2bf69ac0526d143aebe78bc39e6e5fbb51d5336fbc5efb9aab6687cd9/orjson-3.10.14-cp310-cp310-win_amd64.whl", hash = "sha256:fa18f949d3183a8d468367056be989666ac2bef3a72eece0bade9cdb733b3c28", size = 133512, upload-time = "2025-01-08T16:56:49.439Z" }, - { url = "https://files.pythonhosted.org/packages/bf/18/26721760368e12b691fb6811692ed21ae5275ea918db409ba26866cacbe8/orjson-3.10.14-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f506fd666dd1ecd15a832bebc66c4df45c1902fd47526292836c339f7ba665a9", size = 249437, upload-time = "2025-01-08T16:56:51.077Z" }, - { url = "https://files.pythonhosted.org/packages/d5/5b/2adfe7cc301edeb3bffc1942956659c19ec00d51a21c53c17c0767bebf47/orjson-3.10.14-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efe5fd254cfb0eeee13b8ef7ecb20f5d5a56ddda8a587f3852ab2cedfefdb5f6", size = 135812, upload-time = "2025-01-08T16:56:53.529Z" }, - { url = "https://files.pythonhosted.org/packages/8a/68/07df7787fd9ff6dba815b2d793eec5e039d288fdf150431ed48a660bfcbb/orjson-3.10.14-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4ddc8c866d7467f5ee2991397d2ea94bcf60d0048bdd8ca555740b56f9042725", size = 150153, upload-time = "2025-01-08T16:56:55.198Z" }, - { url = "https://files.pythonhosted.org/packages/02/71/f68562734461b801b53bacd5365e079dcb3c78656a662f0639494880e522/orjson-3.10.14-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3af8e42ae4363773658b8d578d56dedffb4f05ceeb4d1d4dd3fb504950b45526", size = 139742, upload-time = "2025-01-08T16:56:58.426Z" }, - { url = "https://files.pythonhosted.org/packages/04/03/1355fb27652582f00d3c62e93a32b982fa42bc31d2e07f0a317867069096/orjson-3.10.14-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84dd83110503bc10e94322bf3ffab8bc49150176b49b4984dc1cce4c0a993bf9", size = 154479, upload-time = "2025-01-08T16:56:59.96Z" }, - { url = "https://files.pythonhosted.org/packages/7c/47/1c2a840f27715e8bc2bbafffc851512ede6e53483593eded190919bdcaf4/orjson-3.10.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36f5bfc0399cd4811bf10ec7a759c7ab0cd18080956af8ee138097d5b5296a95", size = 130413, upload-time = "2025-01-08T16:57:03.46Z" }, - { url = "https://files.pythonhosted.org/packages/dd/b2/5bb51006cbae85b052d1bbee7ff43ae26fa155bb3d31a71b0c07d384d5e3/orjson-3.10.14-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868943660fb2a1e6b6b965b74430c16a79320b665b28dd4511d15ad5038d37d5", size = 138545, upload-time = "2025-01-08T16:57:06.337Z" }, - { url = "https://files.pythonhosted.org/packages/79/30/7841a5dd46bb46b8e868791d5469c9d4788d3e26b7e69d40256647997baf/orjson-3.10.14-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33449c67195969b1a677533dee9d76e006001213a24501333624623e13c7cc8e", size = 130953, upload-time = "2025-01-08T16:57:07.803Z" }, - { url = "https://files.pythonhosted.org/packages/08/49/720e7c2040c0f1df630a36d83d449bd7e4d4471071d5ece47a4f7211d570/orjson-3.10.14-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e4c9f60f9fb0b5be66e416dcd8c9d94c3eabff3801d875bdb1f8ffc12cf86905", size = 414675, upload-time = "2025-01-08T16:57:09.436Z" }, - { url = "https://files.pythonhosted.org/packages/50/b0/ca7619f34280e7dcbd50dbc9c5fe5200c12cd7269b8858652beb3887483f/orjson-3.10.14-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0de4d6315cfdbd9ec803b945c23b3a68207fd47cbe43626036d97e8e9561a436", size = 141004, upload-time = "2025-01-08T16:57:12.298Z" }, - { url = "https://files.pythonhosted.org/packages/75/1b/7548e3a711543f438e87a4349e00439ab7f37807942e5659f29363f35765/orjson-3.10.14-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:83adda3db595cb1a7e2237029b3249c85afbe5c747d26b41b802e7482cb3933e", size = 129629, upload-time = "2025-01-08T16:57:14.778Z" }, - { url = "https://files.pythonhosted.org/packages/b0/1e/4930a6ff46debd6be1ff18e869b7bc43a7ad762c865610b7e745038d6f68/orjson-3.10.14-cp311-cp311-win32.whl", hash = "sha256:998019ef74a4997a9d741b1473533cdb8faa31373afc9849b35129b4b8ec048d", size = 142430, upload-time = "2025-01-08T16:57:16.324Z" }, - { url = "https://files.pythonhosted.org/packages/28/e0/6cc1cd1dfde36555e81ac869f7847e86bb11c27f97b72fde2f1509b12163/orjson-3.10.14-cp311-cp311-win_amd64.whl", hash = "sha256:9d034abdd36f0f0f2240f91492684e5043d46f290525d1117712d5b8137784eb", size = 133516, upload-time = "2025-01-08T16:57:17.813Z" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/ce/bd17ff5772938267fd49716e94ca24f616ff4cb1ff4c6be13085108037be/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0525a3d2c0b46c611e2130b5fdebc94cf404845d8fa64d2f3a3b679572a5bd22", size = 56016764, upload-time = "2026-02-05T10:26:48.904Z" }, + { url = "https://files.pythonhosted.org/packages/4b/33/b5db29a6c00eb8f50708110d8d453747ca125c8b805bc437b289dbdcc057/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0bd48544f77c68b2941392fcdf9bcd2b9cdf00e98cb8c29b2455d194763cf99e", size = 60391106, upload-time = "2026-02-05T10:30:14.236Z" }, +] + +[[package]] +name = "opentelemetry-api" +version = "1.42.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b4/1c/125e1c936c0873796771b7f04f6c93b9f1bf5d424cea90fda94a99f61da8/opentelemetry_api-1.42.1.tar.gz", hash = "sha256:56c63bea9f77b62856be8c47600474acad853b2924b99b1687c4cb6297166716", size = 72296, upload-time = "2026-05-21T16:32:49.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/ca/9520cc1f3dfbbd03ac5903bbf55833e257bc64b1cf30fa8b0d6df374d821/opentelemetry_api-1.42.1-py3-none-any.whl", hash = "sha256:51a69edacadbc03a8950ace1c4c21099cacc538820ac2c9e36277e78cebba714", size = 61311, upload-time = "2026-05-21T16:32:28.822Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp" +version = "1.42.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-exporter-otlp-proto-grpc", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-exporter-otlp-proto-http", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/08/94/8637919a5d01f81dacf510234bc0110b944f4687a6e96b0a02adf2f6bdce/opentelemetry_exporter_otlp-1.42.1.tar.gz", hash = "sha256:2d9ebaed714377a67d224d46795ddcc11d2c877fa5de35fda70b6f3b010729a9", size = 6086, upload-time = "2026-05-21T16:32:51.963Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/4d/c26080295a36fd22e201fefd7cb9c22cd203189b1af8cd73b158382b7ad8/opentelemetry_exporter_otlp-1.42.1-py3-none-any.whl", hash = "sha256:aedd54545bb0587cd45210abdc8be545af9c01413f3307786e276df1e3c83bee", size = 6733, upload-time = "2026-05-21T16:32:31.261Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-common" +version = "1.42.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-proto", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/9c/216acfeaedadf2e1937f4373929b20f73197c5c4a2546d4f584b7fa63813/opentelemetry_exporter_otlp_proto_common-1.42.1.tar.gz", hash = "sha256:04f1f01fb597c4249dfcd7f8b861c902c2102369d376d9d346ff38de4469a2ee", size = 21433, upload-time = "2026-05-21T16:32:55.526Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d6/43/2375e7612e1121a4518c17603b6e0b03ad94f565aafad53f464dc5be2bf6/opentelemetry_exporter_otlp_proto_common-1.42.1-py3-none-any.whl", hash = "sha256:f48d395ab815b444da118868977e9798ea354c25737d5cf39578ae894011c140", size = 17327, upload-time = "2026-05-21T16:32:33.387Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-grpc" +version = "1.42.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "googleapis-common-protos", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "grpcio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-api", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-exporter-otlp-proto-common", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-proto", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-sdk", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/87/ca7fc790dfdbcf4f9e9aab14a39ef1b7508ead13707e283de0b3131478d2/opentelemetry_exporter_otlp_proto_grpc-1.42.1.tar.gz", hash = "sha256:975c4461f167dd8ed8857d68d3b6b25f3d272eab896f6a9470d0f5b90e2faf15", size = 27140, upload-time = "2026-05-21T16:32:56.162Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/2b/28ba5b128f47fe8c3bab541000d6feb4b5a9bd26623ca013406f01c0fb60/opentelemetry_exporter_otlp_proto_grpc-1.42.1-py3-none-any.whl", hash = "sha256:0ae1177e2038b18a929b3098215243631ef91136cba26b7e2b12790ceb7e87cc", size = 19617, upload-time = "2026-05-21T16:32:34.278Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-http" +version = "1.42.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "googleapis-common-protos", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-api", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-exporter-otlp-proto-common", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-proto", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-sdk", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "requests", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/77/32/826bfa1d80ecea24f47808de03cd4a0d13c17ecc07712f45123f0f61e4ac/opentelemetry_exporter_otlp_proto_http-1.42.1.tar.gz", hash = "sha256:bf142a21035d7571ac3a09cb2e5639f49886f243972883cfe777ed3bf02b734d", size = 25406, upload-time = "2026-05-21T16:32:56.807Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/96/82cb223a1502f0787d4bbff12907f5f8d870a50731febcd5818d93ef9555/opentelemetry_exporter_otlp_proto_http-1.42.1-py3-none-any.whl", hash = "sha256:00a16da1b312a1d6c7233d600d557c91df71125af73020f3b9a7765bd699d59d", size = 21793, upload-time = "2026-05-21T16:32:35.277Z" }, +] + +[[package]] +name = "opentelemetry-proto" +version = "1.42.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b4/55/63eac3e1089b768ba014091fdd2ae8a9a440c821ef5e2b786909c94c8836/opentelemetry_proto-1.42.1.tar.gz", hash = "sha256:c6a51e6b4f05ae63565f3a113217f3d2bfaec68f78c02d7a6c85f9010d1cfca6", size = 45839, upload-time = "2026-05-21T16:33:03.937Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/9d/171c02c84a76940b7e601805b3bb536985aded9168fbcc9ba52f0a730fa2/opentelemetry_proto-1.42.1-py3-none-any.whl", hash = "sha256:dedb74cba2886c59c7789b227a7a670613025a07489040050aedff6e5c0fb43c", size = 71782, upload-time = "2026-05-21T16:32:44.867Z" }, +] + +[[package]] +name = "opentelemetry-sdk" +version = "1.42.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-semantic-conventions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/40/f7/b390bd9bfd703bf98a68fea1f27786c6872331fd617164a54b8a59bdc008/opentelemetry_sdk-1.42.1.tar.gz", hash = "sha256:8c834e8f8c9ba4171d4ec843d0cb8a67e4c7394d3f9e9297e582cbd9456ddbf7", size = 239262, upload-time = "2026-05-21T16:33:04.641Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/6b/4287766cfbde577ae2272e8884abac325aeaac0d64f41c61d5b8cc595105/opentelemetry_sdk-1.42.1-py3-none-any.whl", hash = "sha256:083cd4bbfaa5aa7b5a9e552430d9951219967cfb27aa61feb13a77aba1fc839d", size = 170907, upload-time = "2026-05-21T16:32:45.894Z" }, +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.63b1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/93/99/4d7dd6df64795951413ce6e815f8cf1eb191daf7196ae86574589643d5f3/opentelemetry_semantic_conventions-0.63b1.tar.gz", hash = "sha256:3daf963611334b365e98a57438183eb012d3bfb40b2d931a9af613476b8701a9", size = 148340, upload-time = "2026-05-21T16:33:05.455Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/7a/7fe66f5f3682b1dd47d88cc4e11f1c6c0966b737de2d16671146e23c39a5/opentelemetry_semantic_conventions-0.63b1-py3-none-any.whl", hash = "sha256:dfe5ef4dee82586b746f522b818ceb298d00b3d59f660042bd79404bff8d0682", size = 203713, upload-time = "2026-05-21T16:32:47.016Z" }, +] + +[[package]] +name = "opentelemetry-semantic-conventions-ai" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-sdk", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-semantic-conventions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/24/02/10aeacc37a38a3a8fa16ff67bec1ae3bf882539f6f9efb0f70acf802ca2d/opentelemetry_semantic_conventions_ai-0.5.1.tar.gz", hash = "sha256:153906200d8c1d2f8e09bd78dbef526916023de85ac3dab35912bfafb69ff04c", size = 26533, upload-time = "2026-03-26T14:20:38.73Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/22/41fb05f1dc5fda2c468e05a41814c20859016c85117b66c8a257cae814f6/opentelemetry_semantic_conventions_ai-0.5.1-py3-none-any.whl", hash = "sha256:25aeb22bd261543b4898a73824026d96770e5351209c7d07a0b1314762b1f6e4", size = 11250, upload-time = "2026-03-26T14:20:37.108Z" }, ] [[package]] name = "outlines-core" -version = "0.2.10" +version = "0.2.14" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/13/e2/de74a5fd00299215270a750f356ba7cb427ba5d3e495cab07cfc3110ca86/outlines_core-0.2.10.tar.gz", hash = "sha256:c9ee7be195ac18dda5acce41d8805c2fb550a4affd525414511662cfa7097dfe", size = 197140, upload-time = "2025-05-12T18:20:27.301Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/04/4a0812eb27c086cfd2e66e7ec9150f33e105912a9b7f8b335e3479f03a06/outlines_core-0.2.14.tar.gz", hash = "sha256:64808deed1591ca3029ff64346ceb974cd5d780c916ea82504951fe83523039e", size = 191539, upload-time = "2026-01-09T15:59:10.016Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/cb/c5e8dfd1de4b3933d3b49a06bbded8c12c8eaf1e7869cc84530799aafa70/outlines_core-0.2.10-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:b984c932bdf2843e3d5a8e57e09830d52c4237ac394f39542c4e543378b94ffb", size = 1950128, upload-time = "2025-05-12T18:19:07.174Z" }, - { url = "https://files.pythonhosted.org/packages/c1/de/338a2c89434034e861de75a530234af269300fb8d3e751569da09bdf25b9/outlines_core-0.2.10-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:65b2dba48d0f98b0145eb50494985f026e3c10df3fde94ced40e9c2aa6ea32ca", size = 2124575, upload-time = "2025-05-12T18:19:09.727Z" }, - { url = "https://files.pythonhosted.org/packages/0a/d9/f6dabd7ef45ee0c53afa193db59b1cc857b96cad52eba71185ece31e619f/outlines_core-0.2.10-cp310-cp310-macosx_15_0_arm64.whl", hash = "sha256:ac23b028da10e6914b762f36a7096e793a0e37b6c03f19963ef7875c05b67890", size = 1948695, upload-time = "2025-05-12T18:19:11.927Z" }, - { url = "https://files.pythonhosted.org/packages/06/99/1f058276cfedc731dc25e9dafa0f5664597c3546fd1dc68d7925513db6a1/outlines_core-0.2.10-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:9c5b9a3f7e658949a3dd07b8a28134277a047ed7d73f6e3b4ca8209346bbff54", size = 2120479, upload-time = "2025-05-12T18:19:13.711Z" }, - { url = "https://files.pythonhosted.org/packages/7a/94/5c40f424039f969c9766000b39cfee0e11c3b00a42fc3d6cf43a83568ca0/outlines_core-0.2.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70d99dd37a826b4d85a5dcb39ae3b557e986c9bb1c4566bbb26f589531369a53", size = 2274970, upload-time = "2025-05-12T18:19:15.533Z" }, - { url = "https://files.pythonhosted.org/packages/59/54/e5001070c1f67c0284caf1371ed5d6e1fff4bdb8aa06cd50f6c440ff4726/outlines_core-0.2.10-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:207309a1d4fcf3100e3bbdc31b4d65f2b4f5d809d600c1509e28b6dca028a892", size = 2103127, upload-time = "2025-05-12T18:19:17.251Z" }, - { url = "https://files.pythonhosted.org/packages/70/59/0388ccb03bc82d7696fbf21bd1f608e56d339f43157791a93c3870fb5802/outlines_core-0.2.10-cp310-cp310-win32.whl", hash = "sha256:534fafab18e2962b9973cae852f47476307dc217dd0708d53cbf54809d8b304e", size = 1764213, upload-time = "2025-05-12T18:19:19.334Z" }, - { url = "https://files.pythonhosted.org/packages/fb/d2/43bbef4fff12c6414d6daadfa841e39605347e0331cc68dfe3d6d29f1c98/outlines_core-0.2.10-cp310-cp310-win_amd64.whl", hash = "sha256:a29e261ab57fd992b236854fd19b46b17ad8c8b7fdc6d95a97ae83480e634cff", size = 2054688, upload-time = "2025-05-12T18:19:23.769Z" }, - { url = "https://files.pythonhosted.org/packages/20/d4/3ee07a453e952bd5e4448e2eb8fad123af288a1a8f898cc18b074024e438/outlines_core-0.2.10-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:c0de2c683f5ca37211a3fe1c8d8530c3d92fa0ae3297b237369517dcea4b5a77", size = 1950037, upload-time = "2025-05-12T18:19:25.567Z" }, - { url = "https://files.pythonhosted.org/packages/e2/ee/7eab255e16759b0c1457899de7a4d346181edf32afdcc469b4110c27e4a5/outlines_core-0.2.10-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:434aba95e0e08ef8cb6af2008562df1ad67ab02b68e64f4e725eff00bfcceb29", size = 2124545, upload-time = "2025-05-12T18:19:28.408Z" }, - { url = "https://files.pythonhosted.org/packages/80/8b/033f3d1908cd0a9679be98dec9e0d868511f92a9d9b294bc7e7a6d59f4d9/outlines_core-0.2.10-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:750e2d5e0b083161208599c9c2b99c8c2b944ac82d22de91546f4b2c14c57895", size = 1948711, upload-time = "2025-05-12T18:19:30.541Z" }, - { url = "https://files.pythonhosted.org/packages/41/53/967a853b678afd806c67eee739a24be58ad75a50f17b22d5396a9bb3a84f/outlines_core-0.2.10-cp311-cp311-macosx_15_0_x86_64.whl", hash = "sha256:4231fb008d6282f8c49543d6ae57b173e3ca1d77bbc4ff75472706a4a38cecbf", size = 2120494, upload-time = "2025-05-12T18:19:32.308Z" }, - { url = "https://files.pythonhosted.org/packages/b5/5f/e3c4589f1814a5d50c3b1b95ef2ff151c9e6e6d5c5ab62e07078410b1c6a/outlines_core-0.2.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63b9f0ef1fb61a5e18697e885b2eaa1f244d2ea021d68fdb2c9a607a769aeaa8", size = 2274712, upload-time = "2025-05-12T18:19:34.004Z" }, - { url = "https://files.pythonhosted.org/packages/86/c5/81917cdc984b375488d7a1bd0f4dd3e7330dc9d9979289504d32e195ba29/outlines_core-0.2.10-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:7b48e4bd776d4b3083d07baa3d722654e0425780772c4217f1df49d4984041b6", size = 2102981, upload-time = "2025-05-12T18:19:36.296Z" }, - { url = "https://files.pythonhosted.org/packages/e5/2e/baebc1b4dba5c92508282471ed655eb91fc13c70bd2b55c1fd7c6f16b8b7/outlines_core-0.2.10-cp311-cp311-win32.whl", hash = "sha256:795b19362798c408113da913a03e31a562a5faf4e2ea45ec0f44435843cc185e", size = 1764124, upload-time = "2025-05-12T18:19:37.979Z" }, - { url = "https://files.pythonhosted.org/packages/03/db/70de7ed1e39efee8de6356ebd13e2e7b931b0b251bc02817238e8d288029/outlines_core-0.2.10-cp311-cp311-win_amd64.whl", hash = "sha256:b5df420c57fc257a30cf3a6e088b174aeb84a19d516f6818f00b29b626540629", size = 2054551, upload-time = "2025-05-12T18:19:39.742Z" }, + { url = "https://files.pythonhosted.org/packages/f7/69/e0be45d4c8ad7d301cdc9917d22ff39211da1e830f92fb07b29c9221b5c4/outlines_core-0.2.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:615566bf8257d2bba8ac192cdfc29d1c4357f57b53672fbd622e821215e4f1bd", size = 2338968, upload-time = "2026-01-09T15:58:23.317Z" }, +] + +[[package]] +name = "overrides" +version = "7.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812, upload-time = "2024-01-27T21:01:33.423Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832, upload-time = "2024-01-27T21:01:31.393Z" }, +] + +[[package]] +name = "packageurl-python" +version = "0.17.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/d6/3b5a4e3cfaef7a53869a26ceb034d1ff5e5c27c814ce77260a96d50ab7bb/packageurl_python-0.17.6.tar.gz", hash = "sha256:1252ce3a102372ca6f86eb968e16f9014c4ba511c5c37d95a7f023e2ca6e5c25", size = 50618, upload-time = "2025-11-24T15:20:17.998Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/2f/c7277b7615a93f51b5fbc1eacfc1b75e8103370e786fd8ce2abf6e5c04ab/packageurl_python-0.17.6-py3-none-any.whl", hash = "sha256:31a85c2717bc41dd818f3c62908685ff9eebcb68588213745b14a6ee9e7df7c9", size = 36776, upload-time = "2025-11-24T15:20:16.962Z" }, ] [[package]] @@ -2118,99 +2067,149 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451, upload-time = "2024-11-08T09:47:44.722Z" }, ] +[[package]] +name = "paginate" +version = "0.5.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload-time = "2024-08-25T14:17:24.139Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload-time = "2024-08-25T14:17:22.55Z" }, +] + [[package]] name = "pandas" version = "2.2.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, - { name = "python-dateutil" }, - { name = "pytz" }, - { name = "tzdata" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "python-dateutil", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pytz", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tzdata", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213, upload-time = "2024-09-20T13:10:04.827Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/aa/70/c853aec59839bceed032d52010ff5f1b8d87dc3114b762e4ba2727661a3b/pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5", size = 12580827, upload-time = "2024-09-20T13:08:42.347Z" }, - { url = "https://files.pythonhosted.org/packages/99/f2/c4527768739ffa4469b2b4fff05aa3768a478aed89a2f271a79a40eee984/pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348", size = 11303897, upload-time = "2024-09-20T13:08:45.807Z" }, - { url = "https://files.pythonhosted.org/packages/ed/12/86c1747ea27989d7a4064f806ce2bae2c6d575b950be087837bdfcabacc9/pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed", size = 66480908, upload-time = "2024-09-20T18:37:13.513Z" }, - { url = "https://files.pythonhosted.org/packages/44/50/7db2cd5e6373ae796f0ddad3675268c8d59fb6076e66f0c339d61cea886b/pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57", size = 13064210, upload-time = "2024-09-20T13:08:48.325Z" }, - { url = "https://files.pythonhosted.org/packages/61/61/a89015a6d5536cb0d6c3ba02cebed51a95538cf83472975275e28ebf7d0c/pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42", size = 16754292, upload-time = "2024-09-20T19:01:54.443Z" }, - { url = "https://files.pythonhosted.org/packages/ce/0d/4cc7b69ce37fac07645a94e1d4b0880b15999494372c1523508511b09e40/pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f", size = 14416379, upload-time = "2024-09-20T13:08:50.882Z" }, - { url = "https://files.pythonhosted.org/packages/31/9e/6ebb433de864a6cd45716af52a4d7a8c3c9aaf3a98368e61db9e69e69a9c/pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645", size = 11598471, upload-time = "2024-09-20T13:08:53.332Z" }, { url = "https://files.pythonhosted.org/packages/a8/44/d9502bf0ed197ba9bf1103c9867d5904ddcaf869e52329787fc54ed70cc8/pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039", size = 12602222, upload-time = "2024-09-20T13:08:56.254Z" }, { url = "https://files.pythonhosted.org/packages/52/11/9eac327a38834f162b8250aab32a6781339c69afe7574368fffe46387edf/pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd", size = 11321274, upload-time = "2024-09-20T13:08:58.645Z" }, - { url = "https://files.pythonhosted.org/packages/45/fb/c4beeb084718598ba19aa9f5abbc8aed8b42f90930da861fcb1acdb54c3a/pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698", size = 15579836, upload-time = "2024-09-20T19:01:57.571Z" }, { url = "https://files.pythonhosted.org/packages/cd/5f/4dba1d39bb9c38d574a9a22548c540177f78ea47b32f99c0ff2ec499fac5/pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc", size = 13058505, upload-time = "2024-09-20T13:09:01.501Z" }, - { url = "https://files.pythonhosted.org/packages/b9/57/708135b90391995361636634df1f1130d03ba456e95bcf576fada459115a/pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3", size = 16744420, upload-time = "2024-09-20T19:02:00.678Z" }, { url = "https://files.pythonhosted.org/packages/86/4a/03ed6b7ee323cf30404265c284cee9c65c56a212e0a08d9ee06984ba2240/pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32", size = 14440457, upload-time = "2024-09-20T13:09:04.105Z" }, - { url = "https://files.pythonhosted.org/packages/ed/8c/87ddf1fcb55d11f9f847e3c69bb1c6f8e46e2f40ab1a2d2abadb2401b007/pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5", size = 11617166, upload-time = "2024-09-20T13:09:06.917Z" }, ] [[package]] -name = "partial-json-parser" -version = "0.2.1.1.post7" +name = "partial-json-parser" +version = "0.2.1.1.post7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/6d/eed37d7ebc1e0bcd27b831c0cf1fe94881934316187c4b30d23f29ea0bd4/partial_json_parser-0.2.1.1.post7.tar.gz", hash = "sha256:86590e1ba6bcb6739a2dfc17d2323f028cb5884f4c6ce23db376999132c9a922", size = 10296, upload-time = "2025-11-17T07:27:41.202Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/32/658973117bf0fd82a24abbfb94fe73a5e86216e49342985e10acce54775a/partial_json_parser-0.2.1.1.post7-py3-none-any.whl", hash = "sha256:145119e5eabcf80cbb13844a6b50a85c68bf99d376f8ed771e2a3c3b03e653ae", size = 10877, upload-time = "2025-11-17T07:27:40.457Z" }, +] + +[[package]] +name = "pathspec" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, +] + +[[package]] +name = "peft" +version = "0.15.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "accelerate", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "huggingface-hub", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "psutil", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "safetensors", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "transformers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/65/faa18cd8ffbe0f742c3f2559770646cce2574b9cd28a2a05e8d36f64e968/peft-0.15.2.tar.gz", hash = "sha256:7059029f4d42a092ded1aa117dd366a46084aef638bdd593f6ab0195d5427fcd", size = 472952, upload-time = "2025-04-15T15:27:53.09Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/85/8e6ea3d1089f2b6de3c1cd34bbbd7560912af9d34b057be3b8b8fefe1da3/peft-0.15.2-py3-none-any.whl", hash = "sha256:0dfc942b03b7af4b7267cd4e30b15e3a4a1d277adc581ce6245fc13f1f93d0a0", size = 411051, upload-time = "2025-04-15T15:27:50.799Z" }, +] + +[[package]] +name = "pillow" +version = "12.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/21/c2bcdd5906101a30244eaffc1b6e6ce71a31bd0742a01eb89e660ebfac2d/pillow-12.2.0.tar.gz", hash = "sha256:a830b1a40919539d07806aa58e1b114df53ddd43213d9c8b75847eee6c0182b5", size = 46987819, upload-time = "2026-04-01T14:46:17.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/f1/00b7278c7dd52b17ad4329153748f87b6756ec195ff786c2bdf12518337d/pillow-12.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8bd7903a5f2a4545f6fd5935c90058b89d30045568985a71c79f5fd6edf9b91e", size = 8088188, upload-time = "2026-04-01T14:42:51.735Z" }, + { url = "https://files.pythonhosted.org/packages/e9/bd/e51a61b1054f09437acfbc2ff9106c30d1eb76bc1453d428399946781253/pillow-12.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e74473c875d78b8e9d5da2a70f7099549f9eb37ded4e2f6a463e60125bccd176", size = 7079655, upload-time = "2026-04-01T14:42:56.954Z" }, + { url = "https://files.pythonhosted.org/packages/7d/2e/9df2fc1e82097b1df3dce58dc43286aa01068e918c07574711fcc53e6fb4/pillow-12.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:90e6f81de50ad6b534cab6e5aef77ff6e37722b2f5d908686f4a5c9eba17a909", size = 7203402, upload-time = "2026-04-01T14:43:02.664Z" }, + { url = "https://files.pythonhosted.org/packages/49/62/5b0ed78fce87346be7a5cfcfaaad91f6a1f98c26f86bdbafa2066c647ef6/pillow-12.2.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0c838a5125cee37e68edec915651521191cef1e6aa336b855f495766e77a366e", size = 7032230, upload-time = "2026-04-01T14:46:03.874Z" }, + { url = "https://files.pythonhosted.org/packages/5e/8b/51b0eddcfa2180d60e41f06bd6d0a62202b20b59c68f5a132e615b75aecf/pillow-12.2.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25373b66e0dd5905ed63fa3cae13c82fbddf3079f2c8bf15c6fb6a35586324c1", size = 6002215, upload-time = "2026-04-01T14:46:08.83Z" }, +] + +[[package]] +name = "pip" +version = "26.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/91/47e7d486260f618783899587af63ccf7980fb60245c3e63dd4571c6b57ad/pip-26.1.2.tar.gz", hash = "sha256:f49cd134c61cf2fd75e0ce2676db03e4054504a5a4986d00f8299ae632dc4605", size = 1840799, upload-time = "2026-05-31T17:33:58.56Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/95/6b5cb3461ea5673ba0995989746db58eb18b91b54dbf331e72f569540946/pip-26.1.2-py3-none-any.whl", hash = "sha256:382ff9f685ee3bc25864f820aa50505825f10f5458ffff07e30a6d96e5715cab", size = 1813144, upload-time = "2026-05-31T17:33:56.772Z" }, +] + +[[package]] +name = "pip-api" +version = "0.0.34" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pip", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/f1/ee85f8c7e82bccf90a3c7aad22863cc6e20057860a1361083cd2adacb92e/pip_api-0.0.34.tar.gz", hash = "sha256:9b75e958f14c5a2614bae415f2adf7eeb54d50a2cfbe7e24fd4826471bac3625", size = 123017, upload-time = "2024-07-09T20:32:30.641Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/f7/ebf5003e1065fd00b4cbef53bf0a65c3d3e1b599b676d5383ccb7a8b88ba/pip_api-0.0.34-py3-none-any.whl", hash = "sha256:8b2d7d7c37f2447373aa2cf8b1f60a2f2b27a84e1e9e0294a3f6ef10eb3ba6bb", size = 120369, upload-time = "2024-07-09T20:32:29.099Z" }, +] + +[[package]] +name = "pip-audit" +version = "2.10.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6a/6d/eed37d7ebc1e0bcd27b831c0cf1fe94881934316187c4b30d23f29ea0bd4/partial_json_parser-0.2.1.1.post7.tar.gz", hash = "sha256:86590e1ba6bcb6739a2dfc17d2323f028cb5884f4c6ce23db376999132c9a922", size = 10296, upload-time = "2025-11-17T07:27:41.202Z" } +dependencies = [ + { name = "cachecontrol", extra = ["filecache"], marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "cyclonedx-python-lib", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pip-api", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pip-requirements-parser", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "platformdirs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "rich", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tomli", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tomli-w", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/a4/f21d5f0a0edabcbce31560b73c7c5a6f72ae87af4236fd1069c8f59a353d/pip_audit-2.10.1.tar.gz", hash = "sha256:1eb4565d19ebe5d48996f4b770b4d2b32887e12cb12cfa637f1a064011b55ffc", size = 54275, upload-time = "2026-06-10T22:17:01.744Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/32/658973117bf0fd82a24abbfb94fe73a5e86216e49342985e10acce54775a/partial_json_parser-0.2.1.1.post7-py3-none-any.whl", hash = "sha256:145119e5eabcf80cbb13844a6b50a85c68bf99d376f8ed771e2a3c3b03e653ae", size = 10877, upload-time = "2025-11-17T07:27:40.457Z" }, + { url = "https://files.pythonhosted.org/packages/a3/a7/b0c504148114047bd1bc9d97447453c6850ca176bb2f3c0038835994e8b7/pip_audit-2.10.1-py3-none-any.whl", hash = "sha256:99ef3f600a317c1945f1e89e227ef26e1c2d618429b8bd3fa6f4f7c440c4611a", size = 62023, upload-time = "2026-06-10T22:17:00.309Z" }, ] [[package]] -name = "peft" -version = "0.15.2" +name = "pip-requirements-parser" +version = "32.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "accelerate" }, - { name = "huggingface-hub" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "psutil" }, - { name = "pyyaml" }, - { name = "safetensors" }, - { name = "torch" }, - { name = "tqdm" }, - { name = "transformers" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyparsing", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/33/65/faa18cd8ffbe0f742c3f2559770646cce2574b9cd28a2a05e8d36f64e968/peft-0.15.2.tar.gz", hash = "sha256:7059029f4d42a092ded1aa117dd366a46084aef638bdd593f6ab0195d5427fcd", size = 472952, upload-time = "2025-04-15T15:27:53.09Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/2a/63b574101850e7f7b306ddbdb02cb294380d37948140eecd468fae392b54/pip-requirements-parser-32.0.1.tar.gz", hash = "sha256:b4fa3a7a0be38243123cf9d1f3518da10c51bdb165a2b2985566247f9155a7d3", size = 209359, upload-time = "2022-12-21T15:25:22.732Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/68/85/8e6ea3d1089f2b6de3c1cd34bbbd7560912af9d34b057be3b8b8fefe1da3/peft-0.15.2-py3-none-any.whl", hash = "sha256:0dfc942b03b7af4b7267cd4e30b15e3a4a1d277adc581ce6245fc13f1f93d0a0", size = 411051, upload-time = "2025-04-15T15:27:50.799Z" }, + { url = "https://files.pythonhosted.org/packages/54/d0/d04f1d1e064ac901439699ee097f58688caadea42498ec9c4b4ad2ef84ab/pip_requirements_parser-32.0.1-py3-none-any.whl", hash = "sha256:4659bc2a667783e7a15d190f6fccf8b2486685b6dba4c19c3876314769c57526", size = 35648, upload-time = "2022-12-21T15:25:21.046Z" }, ] [[package]] -name = "pillow" -version = "12.2.0" +name = "platformdirs" +version = "4.10.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8c/21/c2bcdd5906101a30244eaffc1b6e6ce71a31bd0742a01eb89e660ebfac2d/pillow-12.2.0.tar.gz", hash = "sha256:a830b1a40919539d07806aa58e1b114df53ddd43213d9c8b75847eee6c0182b5", size = 46987819, upload-time = "2026-04-01T14:46:17.687Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224, upload-time = "2026-05-28T03:32:53.587Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/aa/d0b28e1c811cd4d5f5c2bfe2e022292bd255ae5744a3b9ac7d6c8f72dd75/pillow-12.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a4e8f36e677d3336f35089648c8955c51c6d386a13cf6ee9c189c5f5bd713a9f", size = 5354355, upload-time = "2026-04-01T14:42:15.402Z" }, - { url = "https://files.pythonhosted.org/packages/27/8e/1d5b39b8ae2bd7650d0c7b6abb9602d16043ead9ebbfef4bc4047454da2a/pillow-12.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e589959f10d9824d39b350472b92f0ce3b443c0a3442ebf41c40cb8361c5b97", size = 4695871, upload-time = "2026-04-01T14:42:18.234Z" }, - { url = "https://files.pythonhosted.org/packages/f0/c5/dcb7a6ca6b7d3be41a76958e90018d56c8462166b3ef223150360850c8da/pillow-12.2.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a52edc8bfff4429aaabdf4d9ee0daadbbf8562364f940937b941f87a4290f5ff", size = 6269734, upload-time = "2026-04-01T14:42:20.608Z" }, - { url = "https://files.pythonhosted.org/packages/ea/f1/aa1bb13b2f4eba914e9637893c73f2af8e48d7d4023b9d3750d4c5eb2d0c/pillow-12.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:975385f4776fafde056abb318f612ef6285b10a1f12b8570f3647ad0d74b48ec", size = 8076080, upload-time = "2026-04-01T14:42:23.095Z" }, - { url = "https://files.pythonhosted.org/packages/a1/2a/8c79d6a53169937784604a8ae8d77e45888c41537f7f6f65ed1f407fe66d/pillow-12.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd9c0c7a0c681a347b3194c500cb1e6ca9cab053ea4d82a5cf45b6b754560136", size = 6382236, upload-time = "2026-04-01T14:42:25.82Z" }, - { url = "https://files.pythonhosted.org/packages/b5/42/bbcb6051030e1e421d103ce7a8ecadf837aa2f39b8f82ef1a8d37c3d4ebc/pillow-12.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:88d387ff40b3ff7c274947ed3125dedf5262ec6919d83946753b5f3d7c67ea4c", size = 7070220, upload-time = "2026-04-01T14:42:28.68Z" }, - { url = "https://files.pythonhosted.org/packages/3f/e1/c2a7d6dd8cfa6b231227da096fd2d58754bab3603b9d73bf609d3c18b64f/pillow-12.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:51c4167c34b0d8ba05b547a3bb23578d0ba17b80a5593f93bd8ecb123dd336a3", size = 6493124, upload-time = "2026-04-01T14:42:31.579Z" }, - { url = "https://files.pythonhosted.org/packages/5f/41/7c8617da5d32e1d2f026e509484fdb6f3ad7efaef1749a0c1928adbb099e/pillow-12.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:34c0d99ecccea270c04882cb3b86e7b57296079c9a4aff88cb3b33563d95afaa", size = 7194324, upload-time = "2026-04-01T14:42:34.615Z" }, - { url = "https://files.pythonhosted.org/packages/2d/de/a777627e19fd6d62f84070ee1521adde5eeda4855b5cf60fe0b149118bca/pillow-12.2.0-cp310-cp310-win32.whl", hash = "sha256:b85f66ae9eb53e860a873b858b789217ba505e5e405a24b85c0464822fe88032", size = 6376363, upload-time = "2026-04-01T14:42:37.19Z" }, - { url = "https://files.pythonhosted.org/packages/e7/34/fc4cb5204896465842767b96d250c08410f01f2f28afc43b257de842eed5/pillow-12.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:673aa32138f3e7531ccdbca7b3901dba9b70940a19ccecc6a37c77d5fdeb05b5", size = 7083523, upload-time = "2026-04-01T14:42:39.62Z" }, - { url = "https://files.pythonhosted.org/packages/2d/a0/32852d36bc7709f14dc3f64f929a275e958ad8c19a6deba9610d458e28b3/pillow-12.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:3e080565d8d7c671db5802eedfb438e5565ffa40115216eabb8cd52d0ecce024", size = 2463318, upload-time = "2026-04-01T14:42:42.063Z" }, - { url = "https://files.pythonhosted.org/packages/68/e1/748f5663efe6edcfc4e74b2b93edfb9b8b99b67f21a854c3ae416500a2d9/pillow-12.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:8be29e59487a79f173507c30ddf57e733a357f67881430449bb32614075a40ab", size = 5354347, upload-time = "2026-04-01T14:42:44.255Z" }, - { url = "https://files.pythonhosted.org/packages/47/a1/d5ff69e747374c33a3b53b9f98cca7889fce1fd03d79cdc4e1bccc6c5a87/pillow-12.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:71cde9a1e1551df7d34a25462fc60325e8a11a82cc2e2f54578e5e9a1e153d65", size = 4695873, upload-time = "2026-04-01T14:42:46.452Z" }, - { url = "https://files.pythonhosted.org/packages/df/21/e3fbdf54408a973c7f7f89a23b2cb97a7ef30c61ab4142af31eee6aebc88/pillow-12.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f490f9368b6fc026f021db16d7ec2fbf7d89e2edb42e8ec09d2c60505f5729c7", size = 6280168, upload-time = "2026-04-01T14:42:49.228Z" }, - { url = "https://files.pythonhosted.org/packages/d3/f1/00b7278c7dd52b17ad4329153748f87b6756ec195ff786c2bdf12518337d/pillow-12.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8bd7903a5f2a4545f6fd5935c90058b89d30045568985a71c79f5fd6edf9b91e", size = 8088188, upload-time = "2026-04-01T14:42:51.735Z" }, - { url = "https://files.pythonhosted.org/packages/ad/cf/220a5994ef1b10e70e85748b75649d77d506499352be135a4989c957b701/pillow-12.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3997232e10d2920a68d25191392e3a4487d8183039e1c74c2297f00ed1c50705", size = 6394401, upload-time = "2026-04-01T14:42:54.343Z" }, - { url = "https://files.pythonhosted.org/packages/e9/bd/e51a61b1054f09437acfbc2ff9106c30d1eb76bc1453d428399946781253/pillow-12.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e74473c875d78b8e9d5da2a70f7099549f9eb37ded4e2f6a463e60125bccd176", size = 7079655, upload-time = "2026-04-01T14:42:56.954Z" }, - { url = "https://files.pythonhosted.org/packages/6b/3d/45132c57d5fb4b5744567c3817026480ac7fc3ce5d4c47902bc0e7f6f853/pillow-12.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:56a3f9c60a13133a98ecff6197af34d7824de9b7b38c3654861a725c970c197b", size = 6503105, upload-time = "2026-04-01T14:42:59.847Z" }, - { url = "https://files.pythonhosted.org/packages/7d/2e/9df2fc1e82097b1df3dce58dc43286aa01068e918c07574711fcc53e6fb4/pillow-12.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:90e6f81de50ad6b534cab6e5aef77ff6e37722b2f5d908686f4a5c9eba17a909", size = 7203402, upload-time = "2026-04-01T14:43:02.664Z" }, - { url = "https://files.pythonhosted.org/packages/bd/2e/2941e42858ebb67e50ae741473de81c2984e6eff7b397017623c676e2e8d/pillow-12.2.0-cp311-cp311-win32.whl", hash = "sha256:8c984051042858021a54926eb597d6ee3012393ce9c181814115df4c60b9a808", size = 6378149, upload-time = "2026-04-01T14:43:05.274Z" }, - { url = "https://files.pythonhosted.org/packages/69/42/836b6f3cd7f3e5fa10a1f1a5420447c17966044c8fbf589cc0452d5502db/pillow-12.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6e6b2a0c538fc200b38ff9eb6628228b77908c319a005815f2dde585a0664b60", size = 7082626, upload-time = "2026-04-01T14:43:08.557Z" }, - { url = "https://files.pythonhosted.org/packages/c2/88/549194b5d6f1f494b485e493edc6693c0a16f4ada488e5bd974ed1f42fad/pillow-12.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:9a8a34cc89c67a65ea7437ce257cea81a9dad65b29805f3ecee8c8fe8ff25ffe", size = 2463531, upload-time = "2026-04-01T14:43:10.743Z" }, - { url = "https://files.pythonhosted.org/packages/4e/b7/2437044fb910f499610356d1352e3423753c98e34f915252aafecc64889f/pillow-12.2.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0538bd5e05efec03ae613fd89c4ce0368ecd2ba239cc25b9f9be7ed426b0af1f", size = 5273969, upload-time = "2026-04-01T14:45:55.538Z" }, - { url = "https://files.pythonhosted.org/packages/f6/f4/8316e31de11b780f4ac08ef3654a75555e624a98db1056ecb2122d008d5a/pillow-12.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:394167b21da716608eac917c60aa9b969421b5dcbbe02ae7f013e7b85811c69d", size = 4659674, upload-time = "2026-04-01T14:45:58.093Z" }, - { url = "https://files.pythonhosted.org/packages/d4/37/664fca7201f8bb2aa1d20e2c3d5564a62e6ae5111741966c8319ca802361/pillow-12.2.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5d04bfa02cc2d23b497d1e90a0f927070043f6cbf303e738300532379a4b4e0f", size = 5288479, upload-time = "2026-04-01T14:46:01.141Z" }, - { url = "https://files.pythonhosted.org/packages/49/62/5b0ed78fce87346be7a5cfcfaaad91f6a1f98c26f86bdbafa2066c647ef6/pillow-12.2.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0c838a5125cee37e68edec915651521191cef1e6aa336b855f495766e77a366e", size = 7032230, upload-time = "2026-04-01T14:46:03.874Z" }, - { url = "https://files.pythonhosted.org/packages/c3/28/ec0fc38107fc32536908034e990c47914c57cd7c5a3ece4d8d8f7ffd7e27/pillow-12.2.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a6c9fa44005fa37a91ebfc95d081e8079757d2e904b27103f4f5fa6f0bf78c0", size = 5355404, upload-time = "2026-04-01T14:46:06.33Z" }, - { url = "https://files.pythonhosted.org/packages/5e/8b/51b0eddcfa2180d60e41f06bd6d0a62202b20b59c68f5a132e615b75aecf/pillow-12.2.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25373b66e0dd5905ed63fa3cae13c82fbddf3079f2c8bf15c6fb6a35586324c1", size = 6002215, upload-time = "2026-04-01T14:46:08.83Z" }, - { url = "https://files.pythonhosted.org/packages/bc/60/5382c03e1970de634027cee8e1b7d39776b778b81812aaf45b694dfe9e28/pillow-12.2.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:bfa9c230d2fe991bed5318a5f119bd6780cda2915cca595393649fc118ab895e", size = 7080946, upload-time = "2026-04-01T14:46:11.734Z" }, + { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743, upload-time = "2026-05-28T03:32:52.175Z" }, ] [[package]] @@ -2223,31 +2222,19 @@ wheels = [ ] [[package]] -name = "preshed" -version = "3.0.13" +name = "pre-commit" +version = "4.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cymem" }, - { name = "murmurhash" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/43/75/fe6b7bbd0dea530a001b0e24c331b21a0be2786e402abf3c57f5dce43d4b/preshed-3.0.13.tar.gz", hash = "sha256:d75f718bbfd97e992f7827e0fa7faf6a91bdd9c922d5baa4b50d62731396cb89", size = 18338, upload-time = "2026-03-23T08:57:31.378Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/45/7e/d55d8cdeefa78995eec15a11ae16cbd0581a0be2342527a64251fd948cef/preshed-3.0.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:42c58b07e8b431e33d0ad9922e896632453821cad8b09171b619b8c61101916f", size = 136920, upload-time = "2026-03-23T08:56:10.829Z" }, - { url = "https://files.pythonhosted.org/packages/10/bc/ee1f388a97c613e656d774b522b4ddc1cd32e984ca4eb1157c5d822e9011/preshed-3.0.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a06e27f4e5b9d7943840087828c6a0dae4a3475576d12c2e95b71abbb325a80b", size = 137576, upload-time = "2026-03-23T08:56:12.441Z" }, - { url = "https://files.pythonhosted.org/packages/a6/dd/24c5a576035df4043998e1069718dd7369e107ce9d169df2333d00461dbf/preshed-3.0.13-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8b82d7a7bb63d248a6cbbfcabb4a570c993d54d964e39dc5d85c14018ba2079e", size = 780270, upload-time = "2026-03-23T08:56:14.108Z" }, - { url = "https://files.pythonhosted.org/packages/e5/ab/fb0f6808fffad96c962ce254587cae2bb7df0fda3e6d6b481ce4f60f6c2d/preshed-3.0.13-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bef84b225d226af43adfee78ce5ddede72a6155ce5292c1a41dcd1f0b9c87c30", size = 779722, upload-time = "2026-03-23T08:56:15.721Z" }, - { url = "https://files.pythonhosted.org/packages/bf/7f/c9948dde95bf965c6af2c31f0dbbc6c7e5433b5de1c85f20644edf38c78c/preshed-3.0.13-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:70d502e081348df207d90f347f21770ed596822bb04eb3c3b32b7281579e90c6", size = 1775435, upload-time = "2026-03-23T08:56:17.655Z" }, - { url = "https://files.pythonhosted.org/packages/d2/57/8db29ac57b981ef19d1078001aa6c2055a3eed46998c1c93f3d1fdb86106/preshed-3.0.13-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:985cb9b097beda76cd13c01a0499707103e8915f888fa30f8aa8324ef2cc6b08", size = 1842612, upload-time = "2026-03-23T08:56:19.755Z" }, - { url = "https://files.pythonhosted.org/packages/38/e5/ead05efc423be237fba76a3bf0eeb492e5d3801504c096c3552c517f2f72/preshed-3.0.13-cp310-cp310-win_amd64.whl", hash = "sha256:867aa73abbf4ee3b4d7662148091c33a8c039271269e3a7f1e0ca995f91995c8", size = 121951, upload-time = "2026-03-23T08:56:21.138Z" }, - { url = "https://files.pythonhosted.org/packages/aa/80/9cf7f7c208046c97d4b2765f89545a6ea8cfefbd87f0141dde61e6f098ac/preshed-3.0.13-cp310-cp310-win_arm64.whl", hash = "sha256:2b704e46cb7b88f656ef16a3e5347b36525a1c53721d327a4ba1457404101f85", size = 109604, upload-time = "2026-03-23T08:56:22.537Z" }, - { url = "https://files.pythonhosted.org/packages/7c/d1/7bc39738388b38ff48cecbb326a9b2bb3f422bb32097be92e010f3162395/preshed-3.0.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5268c0e6fa96f50cdf87f516c2d4b32563c12706ee768e75c00e8d0098acd545", size = 136718, upload-time = "2026-03-23T08:56:23.889Z" }, - { url = "https://files.pythonhosted.org/packages/f6/65/de465b6801740140c2b5d2db6c312ca7937dcfd0442f1ae7d50dee529544/preshed-3.0.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:df642547a1a94079978a0ea8f4593ab4b8d3bd43f767bef0ef64d9a214f8c4c9", size = 137261, upload-time = "2026-03-23T08:56:25.303Z" }, - { url = "https://files.pythonhosted.org/packages/89/83/478ee078746a4a413c841542caebd2ea74b659475b8bf5f2e3724b6fe655/preshed-3.0.13-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09397592d333a77f88454e72b7f1f941b2afaf040b392b9e74898dbc4648cdf5", size = 821010, upload-time = "2026-03-23T08:56:26.455Z" }, - { url = "https://files.pythonhosted.org/packages/ee/2e/1ac761e973966893cd3a0ad3256360365276e2d1e779e351448981a1156a/preshed-3.0.13-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f8e6fe0620ed0f96a246d46447055c447e071cd8222731a045c235e8a758c918", size = 823096, upload-time = "2026-03-23T08:56:28.126Z" }, - { url = "https://files.pythonhosted.org/packages/3c/51/7824cfd85dd7fe547888de20228ebd87d9acd3708206d30b82211e382d23/preshed-3.0.13-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:502f93f49a22788203f02d3067d4ea077a0cca3864de6a792eae12e7ce589e14", size = 1812148, upload-time = "2026-03-23T08:56:29.755Z" }, - { url = "https://files.pythonhosted.org/packages/34/48/32160a24705d56179de6af838c10a0c735c955dae5f9e4bb344750b79bc2/preshed-3.0.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:acd4d89abeca3678c5d8c89b3cd351314465bc67c7fa053d2644f8513e543386", size = 1881154, upload-time = "2026-03-23T08:56:31.49Z" }, - { url = "https://files.pythonhosted.org/packages/ed/22/0344b50f8b1ad9e3aac08099c47e1aba91c81602fd117d2673f6606ecae6/preshed-3.0.13-cp311-cp311-win_amd64.whl", hash = "sha256:de87fbabb0f37c3c92d4dd9b94fc82ab73cdab4247cdfbd57ab3926caa983919", size = 122219, upload-time = "2026-03-23T08:56:32.74Z" }, - { url = "https://files.pythonhosted.org/packages/33/c4/812eeaa568510f396e27edab01100ca71418f032fd7098b107f12e572361/preshed-3.0.13-cp311-cp311-win_arm64.whl", hash = "sha256:5e2753779832e411e93eb727f3d409c0a6b7408e5ce4dd868076d8ece48c7693", size = 109308, upload-time = "2026-03-23T08:56:33.839Z" }, + { name = "cfgv", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "identify", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "nodeenv", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "virtualenv", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8e/22/2de9408ac81acbb8a7d05d4cc064a152ccf33b3d480ebe0cd292153db239/pre_commit-4.6.0.tar.gz", hash = "sha256:718d2208cef53fdc38206e40524a6d4d9576d103eb16f0fec11c875e7716e9d9", size = 198525, upload-time = "2026-04-21T20:31:41.613Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl", hash = "sha256:e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b", size = 226472, upload-time = "2026-04-21T20:31:40.092Z" }, ] [[package]] @@ -2264,8 +2251,8 @@ name = "prometheus-fastapi-instrumentator" version = "8.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "prometheus-client" }, - { name = "starlette" }, + { name = "prometheus-client", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "starlette", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/98/7a/fe49b7060e585e2cfa28cc1d13ebfe9c2904dcd80cf11071d5de0f622ff2/prometheus_fastapi_instrumentator-8.0.0.tar.gz", hash = "sha256:c31ed192db077e75467b28b2fe5055362517f53369b798cb8dac9ff85f3f1c38", size = 20357, upload-time = "2026-05-29T13:04:43.327Z" } wheels = [ @@ -2278,55 +2265,37 @@ version = "0.5.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ec/44/c87281c333769159c50594f22610f77398a47ccbfbbf23074e744e86f87c/propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427", size = 50208, upload-time = "2026-05-08T21:02:12.199Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/56/030b7b4719d53085722893e0009dffb9236aa10bca1b12121bdc5626ef16/propcache-0.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5a81be28596d6559f6131ef33e10200de6e17643b3c74ce03f9eb103be6ae8b", size = 93417, upload-time = "2026-05-08T20:59:15.597Z" }, - { url = "https://files.pythonhosted.org/packages/1a/55/1140a8e067b8ec093a18a4ae7bb0045d9db65da38a08618ddc5e2f1994aa/propcache-0.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29cbaac5ea0212663e6845e04b5e188d5a6ae6dd919810ac835bf1d3b42c3f4c", size = 53847, upload-time = "2026-05-08T20:59:17.096Z" }, - { url = "https://files.pythonhosted.org/packages/20/42/0e7443c90310498561addf346e7d57fe3c6ba1914e1ba938b5464c7bbfd2/propcache-0.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6bf3be92233808fcd338eba0fb4d0b59ec5772af4f4ecfcec450d1bfc0f8b5eb", size = 53512, upload-time = "2026-05-08T20:59:18.64Z" }, - { url = "https://files.pythonhosted.org/packages/b7/db/cf51a71bab2009517d1a7f0ee07657e3bd446c4d69f67e6966cf17bcf956/propcache-0.5.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f8ea531c794b9d6274acd4e8d2c2ebcac590a4361d27482edd3010b79f1325e", size = 58068, upload-time = "2026-05-08T20:59:20.683Z" }, - { url = "https://files.pythonhosted.org/packages/b7/43/39b6bdee9699fa1e1641c519feeb64a67e2a9f93bb465c70776b37a7333f/propcache-0.5.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:decfca4c79dd53ebab484b00cc4b6717d8c369f86e74aa4ca395a64ac651495e", size = 61020, upload-time = "2026-05-08T20:59:22.112Z" }, - { url = "https://files.pythonhosted.org/packages/26/0b/843726fbb0a29a8c5684fdb25971823638399f31e52e9d1f06a02dc9aa6b/propcache-0.5.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4621064bbf28fa77ff64dd5d94367c04684c67d3a5bf1dff25f0cd0d98a38f3b", size = 62732, upload-time = "2026-05-08T20:59:23.805Z" }, - { url = "https://files.pythonhosted.org/packages/39/6e/899fed76dc1942b8a64193a4f059d7f1a2c7ef65085e8a9366ed8ec0d199/propcache-0.5.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b96db7141a592cbc968daf1feea83a118e6ab378af4abbc72b248c895414c22d", size = 60140, upload-time = "2026-05-08T20:59:25.389Z" }, - { url = "https://files.pythonhosted.org/packages/ab/09/3da4be9b5b879219ad234aa535b3dd4a080ed1ad48d3a73ca07a9e798f22/propcache-0.5.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1ca071adabaab6e9219924bbe00af821f1ee7de113a9eca1cdc292de3d120f4d", size = 60400, upload-time = "2026-05-08T20:59:27.238Z" }, - { url = "https://files.pythonhosted.org/packages/60/2f/09b72b874a9aa0044faf52a69807a6ed618e267ceaa9ec4a63195fa5b504/propcache-0.5.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e4294d04a94dcab1b3bccd8b66d962dcad411a1d19414b2a41d1445f1de32ad0", size = 58155, upload-time = "2026-05-08T20:59:28.48Z" }, - { url = "https://files.pythonhosted.org/packages/8a/37/97489848c54c95578045473954f10956d619ce6a09e7ac137b71cdcb698b/propcache-0.5.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a0e399a2eccb91ed18721f86aa85757727400b6865c89e88934781deb9c8498b", size = 57037, upload-time = "2026-05-08T20:59:30.146Z" }, - { url = "https://files.pythonhosted.org/packages/22/db/6c695285ccfc49012743ee9c98212b8c5dd0aed7b63cfd816d4a0f7a1601/propcache-0.5.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:823581fd5cb08b12a48bfa11fe962a7916766b6170c17b028fbdf762b85eb9bf", size = 61103, upload-time = "2026-05-08T20:59:31.626Z" }, - { url = "https://files.pythonhosted.org/packages/98/a9/1e500401ca593b0bdb6bf75a70bc2d723835fd53360edff6af70692c7546/propcache-0.5.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:949c91d1a990cf3b2e8188dfcfb25005e0b834a06c63fa4ef9f360878ce21ecf", size = 60394, upload-time = "2026-05-08T20:59:32.829Z" }, - { url = "https://files.pythonhosted.org/packages/1f/87/f638b6e375eae0f30a1a2325d8b34fd85fdc785bb9960cf805f3bf1ec69a/propcache-0.5.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:cc1177027eda740fdb152706bd215a3f124e3eea15afc39f2cb9fe351b50619e", size = 63084, upload-time = "2026-05-08T20:59:35.964Z" }, - { url = "https://files.pythonhosted.org/packages/f6/18/884573f5d97b6d9eba68de759a82c901b7e39d7904d30f7b8d58d42d2a12/propcache-0.5.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b05d643f944a8c3c4bd86d65ffd87bf3264b617f87791940302bc474d2ff5274", size = 60999, upload-time = "2026-05-08T20:59:38.481Z" }, - { url = "https://files.pythonhosted.org/packages/8f/1a/c3915eb059ceec9e758a56e4cfd955292bc0f201be2176a46b76d94b303a/propcache-0.5.2-cp310-cp310-win32.whl", hash = "sha256:8114f28879e0904748e831c3a7774261bd9e75f49be089f389a76f959dcd13fe", size = 39036, upload-time = "2026-05-08T20:59:40.323Z" }, - { url = "https://files.pythonhosted.org/packages/5b/02/1dfd5607501a602d19c1c449d2d193b7d1c611f9246b4059026a1189a80e/propcache-0.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:5fcb98e7598b1ee0addab320d90f65b530297a867dbfe9de52ea838077e16e3d", size = 42190, upload-time = "2026-05-08T20:59:42.232Z" }, - { url = "https://files.pythonhosted.org/packages/57/93/f71588ad08b3e6f4b555b5ef215808a3c02b042d0151ad82fa6f15be677a/propcache-0.5.2-cp310-cp310-win_arm64.whl", hash = "sha256:04dc2390d9edbbaef7461f33322555976ffddf0b650a038649d026358714e6c5", size = 38545, upload-time = "2026-05-08T20:59:44.087Z" }, { url = "https://files.pythonhosted.org/packages/e7/f1/8a8cc1c2c7e7934ab77e0163414f736fadbc0f5e8dd9673b952355ac175b/propcache-0.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74b70780220e2dd89175ca24b81b68b67c83db499ae611e7f2313cb329801c78", size = 90744, upload-time = "2026-05-08T20:59:45.799Z" }, { url = "https://files.pythonhosted.org/packages/c2/f4/651b1225e976bd1a2ba5cfba0c29d096581c2636b437e3a9a7ab6276270a/propcache-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4840ab0ae0216d952f4b53dc6d0b992bfc2bedbfe360bdd9b548bc184c08959", size = 52033, upload-time = "2026-05-08T20:59:47.408Z" }, { url = "https://files.pythonhosted.org/packages/15/a8/8ede85d6aa1f79fc7dc2f8fd2c8d65920b8272c3892903c8a1affde48cfb/propcache-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7", size = 52754, upload-time = "2026-05-08T20:59:49.202Z" }, - { url = "https://files.pythonhosted.org/packages/7d/fe/b3551b41bbc2f5b5bb088fc6920567cd43101253e68fbaa261339eb96fe1/propcache-0.5.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2293949b855ce597f2826452d17c2d545fb5622379c4ea6fdf525e9b8e8a2511", size = 57573, upload-time = "2026-05-08T20:59:50.778Z" }, - { url = "https://files.pythonhosted.org/packages/83/27/ab851ebd1b7172e3e161f5f8d39e315d54a91bea246f01f4d872d3376aef/propcache-0.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0fd59b5af35f74da48d905dcbad55449ba13be91823cb05a9bd590bbf5b61660", size = 60645, upload-time = "2026-05-08T20:59:52.227Z" }, - { url = "https://files.pythonhosted.org/packages/95/7d/466b3d18022e9897cbda9c735c493c5bd747d7a4c6f5ea1480b4cec434b6/propcache-0.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29f9309a2e42b0d273be006fdb4be2d6c39a47f6f57d8fb1cf9f81481df81b66", size = 61563, upload-time = "2026-05-08T20:59:53.866Z" }, { url = "https://files.pythonhosted.org/packages/27/1b/16ab7f2cf2041da2f60d156ba64c2484eadf9168075b4ff43c3ef60045af/propcache-0.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5aaa2b923c1944ac8febd6609cb373540a5563e7cbcb0fd770f75dace2eb817b", size = 58888, upload-time = "2026-05-08T20:59:55.457Z" }, - { url = "https://files.pythonhosted.org/packages/0a/67/bb777ffd907633563bf35fd859c4ce97b0512c32f4633cf5d1eb7c33512b/propcache-0.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66ea454f095ddf5b6b14f56c064c0941c4788be11e18d2464cf643bf7203ff67", size = 59253, upload-time = "2026-05-08T20:59:57.075Z" }, - { url = "https://files.pythonhosted.org/packages/b9/42/64f8d90b73fd9cdc1499b48057ff6d9cd2a98a25734c9bb62ecf07e87061/propcache-0.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:95f1e3f4760d404b13c9976c0229b2b49a3c8e2c62a9ce92efdd2b11ada75e3f", size = 57558, upload-time = "2026-05-08T20:59:58.602Z" }, - { url = "https://files.pythonhosted.org/packages/eb/02/dba5bc03c9041f2092ea55a449caf5dfe68352c6654511b29ba0654ddb69/propcache-0.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:85341b12b9d55bad0bded24cac341bb34289469e03a11f3f583ea1cc1db0326c", size = 55007, upload-time = "2026-05-08T20:59:59.837Z" }, - { url = "https://files.pythonhosted.org/packages/14/c0/43f649c7aa2a77a3b100d84e9dea3a483120ecb608bfe36ce49eaff517fe/propcache-0.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:26a4dca084132874e639895c3135dfad5eb20bae209f62d1aeb31b03e601c3c0", size = 60355, upload-time = "2026-05-08T21:00:01.144Z" }, - { url = "https://files.pythonhosted.org/packages/83/c0/435dafd27f1cb4a495381dae60e25883ccfe4020bb72818e8184c1678092/propcache-0.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3b199b9b2b3d6a7edf3183ba8a9a137a22b97f7df525feb5ae1eccf026d2a9c6", size = 59057, upload-time = "2026-05-08T21:00:02.401Z" }, - { url = "https://files.pythonhosted.org/packages/53/ae/6e292df9135d659944e96cb3389258e4a663e5b2b5f6c217ef0ddc8d2f73/propcache-0.5.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e59bc9e66329185b93dab73f210f1a37f81cb40f321501db8017c9aea15dba27", size = 61938, upload-time = "2026-05-08T21:00:03.638Z" }, { url = "https://files.pythonhosted.org/packages/0b/42/314ebc50d8159055411fd6b0bda322ff510e4b1f7d2e4927940ad0f6af20/propcache-0.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:552ffadf6ad409844bc5919c42a0a83d88314cedddaea0e41e80a8b8fffe881f", size = 59731, upload-time = "2026-05-08T21:00:04.881Z" }, - { url = "https://files.pythonhosted.org/packages/b8/9b/2da6dee38871c3c8772fabc2758325a5c9077d6d18c597737dc04dd884cd/propcache-0.5.2-cp311-cp311-win32.whl", hash = "sha256:cd416c1de191973c52ff1a12a57446bfc7642797b282d7caf2162d7d1b8aa9a0", size = 38966, upload-time = "2026-05-08T21:00:06.511Z" }, - { url = "https://files.pythonhosted.org/packages/42/4e/f17363fb58c0afe05b067361cb6d86ed2d29de6506779a27547c4d183075/propcache-0.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:44e488ef40dbb452700b2b1f8188934121f6648f52c295055662d2191959ff82", size = 42135, upload-time = "2026-05-08T21:00:08.088Z" }, - { url = "https://files.pythonhosted.org/packages/c6/eb/6af6685077d22e8b33358d3c548e3282706a0b3cd85044ffba4e5dd08e3b/propcache-0.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:54adaa85a22078d1e306304a40984dc5be99d599bf3dc0a24dc98f7daeab89ab", size = 38381, upload-time = "2026-05-08T21:00:09.692Z" }, { url = "https://files.pythonhosted.org/packages/3a/ed/1cdcab6ba3d6ab7feca11fc14f0eeea80755bb53ef4e892079f31b10a25f/propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe", size = 14036, upload-time = "2026-05-08T21:02:10.673Z" }, ] +[[package]] +name = "protobuf" +version = "6.33.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "platform_machine == 'x86_64' and sys_platform == 'linux'", +] +sdist = { url = "https://files.pythonhosted.org/packages/66/70/e908e9c5e52ef7c3a6c7902c9dfbb34c7e29c25d2f81ade3856445fd5c94/protobuf-6.33.6.tar.gz", hash = "sha256:a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135", size = 444531, upload-time = "2026-03-18T19:05:00.988Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/92/d1e32e3e0d894fe00b15ce28ad4944ab692713f2e7f0a99787405e43533a/protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593", size = 323436, upload-time = "2026-03-18T19:04:55.768Z" }, + { url = "https://files.pythonhosted.org/packages/c4/72/02445137af02769918a93807b2b7890047c32bfb9f90371cbc12688819eb/protobuf-6.33.6-py3-none-any.whl", hash = "sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901", size = 170656, upload-time = "2026-03-18T19:04:59.826Z" }, +] + [[package]] name = "protobuf" version = "7.35.1" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "sys_platform == 'darwin'", +] sdist = { url = "https://files.pythonhosted.org/packages/da/01/9ef0afd7999eb9badb3a768b4aedd78c86d4c65cfaf1958ab276199e76b4/protobuf-7.35.1.tar.gz", hash = "sha256:ce115a26fe0c39a2c29973d914d327e516a6455464489fe3cd1e51a1b354f81a", size = 458717, upload-time = "2026-06-11T21:55:40.257Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/10/03/8aeeb7458d22546bf64b5250ca1daeb5ff757d900e8e4a7476c6f0db843e/protobuf-7.35.1-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:24f857477359a85c0c235261b8ba905fd51b2562f4a64ca1df5473f29850cbf6", size = 433226, upload-time = "2026-06-11T21:55:31.719Z" }, - { url = "https://files.pythonhosted.org/packages/37/4b/dfb89eb0e652a1ff073c39a59fb5e3a83cfe9b57a2c83fa6d78270101767/protobuf-7.35.1-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:11d6b0ec246892d85215b0a13ca6e0233cf5284b68f0ac02646427f4ff88a799", size = 328847, upload-time = "2026-06-11T21:55:34.035Z" }, - { url = "https://files.pythonhosted.org/packages/0f/58/dc12f2cd484951524af6e3382c785869b9b3fb5e52ee95ae23add53ee8f9/protobuf-7.35.1-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:b73f9489a4b8b1c9cb1f8ed951c736392592edb24b9d6819f36d2e10b171d5b4", size = 344030, upload-time = "2026-06-11T21:55:34.941Z" }, - { url = "https://files.pythonhosted.org/packages/e4/be/5b3cfe508bfab6761414ff944e3366eb13be4fd71efcd69450f89ba39f43/protobuf-7.35.1-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:74758715c53d7158fb76caf4f0cfdacc5329a4b1bb994f865d6cf302d413a1c4", size = 327130, upload-time = "2026-06-11T21:55:35.921Z" }, - { url = "https://files.pythonhosted.org/packages/d8/bc/6d6c7ba8709c85f8f2c390b2b118d6fb08a783676a572271851bf45a7d22/protobuf-7.35.1-cp310-abi3-win32.whl", hash = "sha256:353652e4efd0bca5b5fc2656abf8307ef351f0cf938c9eba09f0e09c20a25c30", size = 428945, upload-time = "2026-06-11T21:55:37.034Z" }, - { url = "https://files.pythonhosted.org/packages/0a/19/8d0cb6f20a1ef7b18f1c8986ad5783f22f84cce39c6ce9a6e645ea55192e/protobuf-7.35.1-cp310-abi3-win_amd64.whl", hash = "sha256:230a75ddfc2de4806e56696ce9640c1cdfdb6543b7cfce98d42a4c0a0e7bdb87", size = 439996, upload-time = "2026-06-11T21:55:38.123Z" }, { url = "https://files.pythonhosted.org/packages/19/c7/5f7c636ec43e0c545e28d1f1db71990108306f7bdcb89f069ba97e428e7f/protobuf-7.35.1-py3-none-any.whl", hash = "sha256:4bc97768d8fe4ad6743c8a19403e314511ed9f6d13205b687e52421c023ac1b9", size = 171659, upload-time = "2026-06-11T21:55:39.155Z" }, ] @@ -2339,11 +2308,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, - { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, - { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, - { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, - { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, ] [[package]] @@ -2355,35 +2320,28 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5", size = 22335, upload-time = "2022-10-25T20:38:27.636Z" }, ] +[[package]] +name = "py-serializable" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "defusedxml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/73/21/d250cfca8ff30c2e5a7447bc13861541126ce9bd4426cd5d0c9f08b5547d/py_serializable-2.1.0.tar.gz", hash = "sha256:9d5db56154a867a9b897c0163b33a793c804c80cee984116d02d49e4578fc103", size = 52368, upload-time = "2025-07-21T09:56:48.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/bf/7595e817906a29453ba4d99394e781b6fabe55d21f3c15d240f85dd06bb1/py_serializable-2.1.0-py3-none-any.whl", hash = "sha256:b56d5d686b5a03ba4f4db5e769dc32336e142fc3bd4d68a8c25579ebb0a67304", size = 23045, upload-time = "2025-07-21T09:56:46.848Z" }, +] + [[package]] name = "pyarrow" version = "24.0.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/91/13/13e1069b351bdc3881266e11147ffccf687505dbb0ea74036237f5d454a5/pyarrow-24.0.0.tar.gz", hash = "sha256:85fe721a14dd823aca09127acbb06c3ca723efbd436c004f16bca601b04dcc83", size = 1180261, upload-time = "2026-04-21T10:51:25.837Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/bf/a34fee1d624152124fa8355c42f34195ad5fe5233ce5bb87946432047d52/pyarrow-24.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:7c2b98645d576a0b9616892ead22b64a83a5f043c5e2ca15ebcefcb5b70c80cb", size = 35076681, upload-time = "2026-04-21T08:51:46.845Z" }, - { url = "https://files.pythonhosted.org/packages/1d/41/64180033d7027afce12dc96d0fe1f504c6fa112190582b458acea2399530/pyarrow-24.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:644a246325b8c69c595ad1dd4b463eba4b0cdb731370e4a86137d433208d6147", size = 36684260, upload-time = "2026-04-21T08:51:53.642Z" }, - { url = "https://files.pythonhosted.org/packages/57/02/9b9320e673dd8a99411fac78690f3df92f6dd6f59754c750110bca66d64e/pyarrow-24.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:3a577bd840ca83f646f0a625dbc571dba7044c43c2d1503afc378b570954345c", size = 45698566, upload-time = "2026-04-21T10:46:02.133Z" }, - { url = "https://files.pythonhosted.org/packages/67/33/f75e91b9a64c3f33c787e263c93b871ad91b8a4a68c1d5cebddd9840e835/pyarrow-24.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:e3268e43984d0b1a185c89b4cfff282a7ead12fc93f56cfd7088bdbcbe727041", size = 48835562, upload-time = "2026-04-21T10:46:10.278Z" }, - { url = "https://files.pythonhosted.org/packages/a5/63/097510448e47e4091faa41c43ba92f97cecaab8f4535b56a3d149578f634/pyarrow-24.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2392d954fcb920f42d230284b677605e4e2fbb11f2821e823e642abd67fbb491", size = 49394997, upload-time = "2026-04-21T10:46:18.08Z" }, - { url = "https://files.pythonhosted.org/packages/60/6b/c047d6222ab279024a062742d1807e2fbaf27bba88a98637299ff47b9236/pyarrow-24.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bec9373df11544592b0ba7ec2af0e35059e5f0e7647c6183a854dedd193298f1", size = 51911424, upload-time = "2026-04-21T10:46:25.347Z" }, - { url = "https://files.pythonhosted.org/packages/3a/ba/464cc70761c2a525d97ebd84e21c31ebd47f3ef4bdcee117009f51c46f24/pyarrow-24.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:c42ab9439498270139cc63e18847a02afe5c8b3ed9c931266533cfe378bd3591", size = 27251730, upload-time = "2026-04-21T10:46:30.913Z" }, { url = "https://files.pythonhosted.org/packages/62/c9/a47ab7ece0d86cbe6678418a0fbd1ac4bb493b9184a3891dfa0e7f287ae0/pyarrow-24.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b0e131f880cda8d04e076cee175a46fc0e8bc8b65c99c6c09dff6669335fde74", size = 35068898, upload-time = "2026-04-21T10:46:36.599Z" }, { url = "https://files.pythonhosted.org/packages/d1/bc/8db86617a9a58008acf8913d6fed68ea2a46acb6de928db28d724c891a68/pyarrow-24.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:1b2fe7f9a5566401a0ef2571f197eb92358925c1f0c8dba305d6e43ea0871bb3", size = 36679915, upload-time = "2026-04-21T10:46:42.602Z" }, - { url = "https://files.pythonhosted.org/packages/eb/8e/fb178720400ef69db251eb4a9c3ccf4af269bc1feb5055529b8fc87170d1/pyarrow-24.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:0b3537c00fb8d384f15ac1e79b6eb6db04a16514c8c1d22e59a9b95c8ba42868", size = 45697931, upload-time = "2026-04-21T10:46:48.403Z" }, { url = "https://files.pythonhosted.org/packages/f3/27/99c42abe8e21b44f4917f62631f3aa31404882a2c41d8a4cd5c110e13d52/pyarrow-24.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:14e31a3c9e35f1ab6356c6378f6f72830e6d2d5f1791df3774a7b097d18a6a1e", size = 48837449, upload-time = "2026-04-21T10:46:55.329Z" }, - { url = "https://files.pythonhosted.org/packages/36/b6/333749e2666e9032891125bf9c691146e92901bece62030ac1430e2e7c88/pyarrow-24.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b7d9a514e73bc42711e6a35aaccf3587c520024fe0a25d830a1a8a27c15f4f57", size = 49395949, upload-time = "2026-04-21T10:47:01.869Z" }, { url = "https://files.pythonhosted.org/packages/17/25/c5201706a2dd374e8ba6ee3fd7a8c89fb7ffc16eed5217a91fd2bd7f7626/pyarrow-24.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b196eb3f931862af3fa84c2a253514d859c08e0d8fe020e07be12e75a5a9780c", size = 51912986, upload-time = "2026-04-21T10:47:09.872Z" }, - { url = "https://files.pythonhosted.org/packages/f8/d2/4d1bbba65320b21a49678d6fbdc6ff7c649251359fdcfc03568c4136231d/pyarrow-24.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:35405aecb474e683fb36af650618fd5340ee5471fc65a21b36076a18bbc6c981", size = 27255371, upload-time = "2026-04-21T10:47:15.943Z" }, -] - -[[package]] -name = "pyarrow-hotfix" -version = "0.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d2/ed/c3e8677f7abf3981838c2af7b5ac03e3589b3ef94fcb31d575426abae904/pyarrow_hotfix-0.7.tar.gz", hash = "sha256:59399cd58bdd978b2e42816a4183a55c6472d4e33d183351b6069f11ed42661d", size = 9910, upload-time = "2025-04-25T10:17:06.247Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2e/c3/94ade4906a2f88bc935772f59c934013b4205e773bcb4239db114a6da136/pyarrow_hotfix-0.7-py3-none-any.whl", hash = "sha256:3236f3b5f1260f0e2ac070a55c1a7b339c4bb7267839bd2015e283234e758100", size = 7923, upload-time = "2025-04-25T10:17:05.224Z" }, ] [[package]] @@ -2392,61 +2350,10 @@ version = "1.4.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/aa/b8/4ed5c7ad5ec15b08d35cc79ace6145d5c1ae426e46435f4987379439dfea/pybase64-1.4.3.tar.gz", hash = "sha256:c2ed274c9e0ba9c8f9c4083cfe265e66dd679126cd9c2027965d807352f3f053", size = 137272, upload-time = "2025-12-06T13:27:04.013Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/47/16d7af6fae7803f4c691856bc0d8d433ccf30e106432e2ef7707ee19a38a/pybase64-1.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f63aa7f29139b8a05ce5f97cdb7fad63d29071e5bdc8a638a343311fe996112a", size = 38241, upload-time = "2025-12-06T13:22:27.396Z" }, - { url = "https://files.pythonhosted.org/packages/4d/3e/268beb8d2240ab55396af4d1b45d2494935982212549b92a5f5b57079bd3/pybase64-1.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f5943ec1ae87a8b4fe310905bb57205ea4330c75e2c628433a7d9dd52295b588", size = 31672, upload-time = "2025-12-06T13:22:28.854Z" }, - { url = "https://files.pythonhosted.org/packages/80/14/4365fa33222edcc46b6db4973f9e22bda82adfb6ab2a01afff591f1e41c8/pybase64-1.4.3-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5f2b8aef86f35cd5894c13681faf433a1fffc5b2e76544dcb5416a514a1a8347", size = 65978, upload-time = "2025-12-06T13:22:30.191Z" }, - { url = "https://files.pythonhosted.org/packages/1c/22/e89739d8bc9b96c68ead44b4eec42fe555683d9997e4ba65216d384920fc/pybase64-1.4.3-cp310-cp310-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6ec7e53dd09b0a8116ccf5c3265c7c7fce13c980747525be76902aef36a514a", size = 68903, upload-time = "2025-12-06T13:22:31.29Z" }, - { url = "https://files.pythonhosted.org/packages/77/e1/7e59a19f8999cdefe9eb0d56bfd701dd38263b0f6fb4a4d29fce165a1b36/pybase64-1.4.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7528604cd69c538e1dbaafded46e9e4915a2adcd6f2a60fcef6390d87ca922ea", size = 57516, upload-time = "2025-12-06T13:22:32.395Z" }, - { url = "https://files.pythonhosted.org/packages/42/ad/f47dc7e6fe32022b176868b88b671a32dab389718c8ca905cab79280aaaf/pybase64-1.4.3-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:4ec645f32b50593879031e09158f8681a1db9f5df0f72af86b3969a1c5d1fa2b", size = 54533, upload-time = "2025-12-06T13:22:33.457Z" }, - { url = "https://files.pythonhosted.org/packages/7c/9a/7ab312b5a324833953b00e47b23eb4f83d45bd5c5c854b4b4e51b2a0cf5b/pybase64-1.4.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:634a000c5b3485ccc18bb9b244e0124f74b6fbc7f43eade815170237a7b34c64", size = 57187, upload-time = "2025-12-06T13:22:34.566Z" }, - { url = "https://files.pythonhosted.org/packages/2c/84/80acab1fcbaaae103e6b862ef5019192c8f2cd8758433595a202179a0d1d/pybase64-1.4.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:309ea32ad07639a485580af1be0ad447a434deb1924e76adced63ac2319cfe15", size = 57730, upload-time = "2025-12-06T13:22:35.581Z" }, - { url = "https://files.pythonhosted.org/packages/1f/24/84256d472400ea3163d7d69c44bb7e2e1027f0f1d4d20c47629a7dc4578e/pybase64-1.4.3-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:d10d517566b748d3f25f6ac7162af779360c1c6426ad5f962927ee205990d27c", size = 53036, upload-time = "2025-12-06T13:22:36.621Z" }, - { url = "https://files.pythonhosted.org/packages/a3/0f/33aecbed312ee0431798a73fa25e00dedbffdd91389ee23121fed397c550/pybase64-1.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a74cc0f4d835400857cc5c6d27ec854f7949491e07a04e6d66e2137812831f4c", size = 56321, upload-time = "2025-12-06T13:22:37.7Z" }, - { url = "https://files.pythonhosted.org/packages/dc/1c/a341b050746658cbec8cab3c733aeb3ef52ce8f11e60d0d47adbdf729ebf/pybase64-1.4.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:1b591d774ac09d5eb73c156a03277cb271438fbd8042bae4109ff3a827cd218c", size = 50114, upload-time = "2025-12-06T13:22:38.752Z" }, - { url = "https://files.pythonhosted.org/packages/ba/d3/f7e6680ae6dc4ddff39112ad66e0fa6b2ec346e73881bafc08498c560bc0/pybase64-1.4.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5eb588d35a04302ef6157d17db62354a787ac6f8b1585dd0b90c33d63a97a550", size = 66570, upload-time = "2025-12-06T13:22:40.221Z" }, - { url = "https://files.pythonhosted.org/packages/4c/71/774748eecc7fe23869b7e5df028e3c4c2efa16b506b83ea3fa035ea95dc2/pybase64-1.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:df8b122d5be2c96962231cc4831d9c2e1eae6736fb12850cec4356d8b06fe6f8", size = 55700, upload-time = "2025-12-06T13:22:41.289Z" }, - { url = "https://files.pythonhosted.org/packages/b3/91/dd15075bb2fe0086193e1cd4bad80a43652c38d8a572f9218d46ba721802/pybase64-1.4.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:31b7a85c661fc591bbcce82fb8adaebe2941e6a83b08444b0957b77380452a4b", size = 52491, upload-time = "2025-12-06T13:22:42.628Z" }, - { url = "https://files.pythonhosted.org/packages/7b/27/f357d63ea3774c937fc47160e040419ed528827aa3d4306d5ec9826259c0/pybase64-1.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e6d7beaae65979fef250e25e66cf81c68a8f81910bcda1a2f43297ab486a7e4e", size = 53957, upload-time = "2025-12-06T13:22:44.615Z" }, - { url = "https://files.pythonhosted.org/packages/b3/c3/243693771701a54e67ff5ccbf4c038344f429613f5643169a7befc51f007/pybase64-1.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4a6276bc3a3962d172a2b5aba544d89881c4037ea954517b86b00892c703d007", size = 68422, upload-time = "2025-12-06T13:22:45.641Z" }, - { url = "https://files.pythonhosted.org/packages/75/95/f987081bf6bc1d1eda3012dae1b06ad427732ef9933a632cb8b58f9917f8/pybase64-1.4.3-cp310-cp310-win32.whl", hash = "sha256:4bdd07ef017515204ee6eaab17e1ad05f83c0ccb5af8ae24a0fe6d9cb5bb0b7a", size = 33622, upload-time = "2025-12-06T13:22:47.348Z" }, - { url = "https://files.pythonhosted.org/packages/79/28/c169a769fe90128f16d394aad87b2096dd4bf2f035ae0927108a46b617df/pybase64-1.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:5db0b6bbda15110db2740c61970a8fda3bf9c93c3166a3f57f87c7865ed1125c", size = 35799, upload-time = "2025-12-06T13:22:48.731Z" }, - { url = "https://files.pythonhosted.org/packages/ab/f2/bdbe6af0bd4f3fe5bc70e77ead7f7d523bb9d3ca3ad50ac42b9adbb9ca14/pybase64-1.4.3-cp310-cp310-win_arm64.whl", hash = "sha256:f96367dfc82598569aa02b1103ebd419298293e59e1151abda2b41728703284b", size = 31158, upload-time = "2025-12-06T13:22:50.021Z" }, - { url = "https://files.pythonhosted.org/packages/2b/63/21e981e9d3f1f123e0b0ee2130112b1956cad9752309f574862c7ae77c08/pybase64-1.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:70b0d4a4d54e216ce42c2655315378b8903933ecfa32fced453989a92b4317b2", size = 38237, upload-time = "2025-12-06T13:22:52.159Z" }, - { url = "https://files.pythonhosted.org/packages/92/fb/3f448e139516404d2a3963915cc10dc9dde7d3a67de4edba2f827adfef17/pybase64-1.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8127f110cdee7a70e576c5c9c1d4e17e92e76c191869085efbc50419f4ae3c72", size = 31673, upload-time = "2025-12-06T13:22:53.241Z" }, - { url = "https://files.pythonhosted.org/packages/3c/fb/bb06a5b9885e7d853ac1e801c4d8abfdb4c8506deee33e53d55aa6690e67/pybase64-1.4.3-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:f9ef0388878bc15a084bd9bf73ec1b2b4ee513d11009b1506375e10a7aae5032", size = 68331, upload-time = "2025-12-06T13:22:54.197Z" }, { url = "https://files.pythonhosted.org/packages/64/15/8d60b9ec5e658185fc2ee3333e01a6e30d717cf677b24f47cbb3a859d13c/pybase64-1.4.3-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:95a57cccf106352a72ed8bc8198f6820b16cc7d55aa3867a16dea7011ae7c218", size = 71370, upload-time = "2025-12-06T13:22:55.517Z" }, - { url = "https://files.pythonhosted.org/packages/ac/29/a3e5c1667cc8c38d025a4636855de0fc117fc62e2afeb033a3c6f12c6a22/pybase64-1.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cd1c47dfceb9c7bd3de210fb4e65904053ed2d7c9dce6d107f041ff6fbd7e21", size = 59834, upload-time = "2025-12-06T13:22:56.682Z" }, - { url = "https://files.pythonhosted.org/packages/a9/00/8ffcf9810bd23f3984698be161cf7edba656fd639b818039a7be1d6405d4/pybase64-1.4.3-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:9fe9922698f3e2f72874b26890d53a051c431d942701bb3a37aae94da0b12107", size = 56652, upload-time = "2025-12-06T13:22:57.724Z" }, - { url = "https://files.pythonhosted.org/packages/81/62/379e347797cdea4ab686375945bc77ad8d039c688c0d4d0cfb09d247beb9/pybase64-1.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:af5f4bd29c86b59bb4375e0491d16ec8a67548fa99c54763aaedaf0b4b5a6632", size = 59382, upload-time = "2025-12-06T13:22:58.758Z" }, - { url = "https://files.pythonhosted.org/packages/c6/f2/9338ffe2f487086f26a2c8ca175acb3baa86fce0a756ff5670a0822bb877/pybase64-1.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:c302f6ca7465262908131411226e02100f488f531bb5e64cb901aa3f439bccd9", size = 59990, upload-time = "2025-12-06T13:23:01.007Z" }, - { url = "https://files.pythonhosted.org/packages/f9/a4/85a6142b65b4df8625b337727aa81dc199642de3d09677804141df6ee312/pybase64-1.4.3-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:2f3f439fa4d7fde164ebbbb41968db7d66b064450ab6017c6c95cef0afa2b349", size = 54923, upload-time = "2025-12-06T13:23:02.369Z" }, - { url = "https://files.pythonhosted.org/packages/ac/00/e40215d25624012bf5b7416ca37f168cb75f6dd15acdb91ea1f2ea4dc4e7/pybase64-1.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7a23c6866551043f8b681a5e1e0d59469148b2920a3b4fc42b1275f25ea4217a", size = 58664, upload-time = "2025-12-06T13:23:03.378Z" }, - { url = "https://files.pythonhosted.org/packages/b0/73/d7e19a63e795c13837f2356268d95dc79d1180e756f57ced742a1e52fdeb/pybase64-1.4.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:56e6526f8565642abc5f84338cc131ce298a8ccab696b19bdf76fa6d7dc592ef", size = 52338, upload-time = "2025-12-06T13:23:04.458Z" }, - { url = "https://files.pythonhosted.org/packages/f2/32/3c746d7a310b69bdd9df77ffc85c41b80bce00a774717596f869b0d4a20e/pybase64-1.4.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6a792a8b9d866ffa413c9687d9b611553203753987a3a582d68cbc51cf23da45", size = 68993, upload-time = "2025-12-06T13:23:05.526Z" }, - { url = "https://files.pythonhosted.org/packages/5d/b3/63cec68f9d6f6e4c0b438d14e5f1ef536a5fe63ce14b70733ac5e31d7ab8/pybase64-1.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:62ad29a5026bb22cfcd1ca484ec34b0a5ced56ddba38ceecd9359b2818c9c4f9", size = 58055, upload-time = "2025-12-06T13:23:06.931Z" }, - { url = "https://files.pythonhosted.org/packages/d5/cb/7acf7c3c06f9692093c07f109668725dc37fb9a3df0fa912b50add645195/pybase64-1.4.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:11b9d1d2d32ec358c02214363b8fc3651f6be7dd84d880ecd597a6206a80e121", size = 54430, upload-time = "2025-12-06T13:23:07.936Z" }, - { url = "https://files.pythonhosted.org/packages/33/39/4eb33ff35d173bfff4002e184ce8907f5d0a42d958d61cd9058ef3570179/pybase64-1.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0aebaa7f238caa0a0d373616016e2040c6c879ebce3ba7ab3c59029920f13640", size = 56272, upload-time = "2025-12-06T13:23:09.253Z" }, { url = "https://files.pythonhosted.org/packages/19/97/a76d65c375a254e65b730c6f56bf528feca91305da32eceab8bcc08591e6/pybase64-1.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e504682b20c63c2b0c000e5f98a80ea867f8d97642e042a5a39818e44ba4d599", size = 70904, upload-time = "2025-12-06T13:23:10.336Z" }, - { url = "https://files.pythonhosted.org/packages/5e/2c/8338b6d3da3c265002839e92af0a80d6db88385c313c73f103dfb800c857/pybase64-1.4.3-cp311-cp311-win32.whl", hash = "sha256:e9a8b81984e3c6fb1db9e1614341b0a2d98c0033d693d90c726677db1ffa3a4c", size = 33639, upload-time = "2025-12-06T13:23:11.9Z" }, - { url = "https://files.pythonhosted.org/packages/39/dc/32efdf2f5927e5449cc341c266a1bbc5fecd5319a8807d9c5405f76e6d02/pybase64-1.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:a90a8fa16a901fabf20de824d7acce07586e6127dc2333f1de05f73b1f848319", size = 35797, upload-time = "2025-12-06T13:23:13.174Z" }, - { url = "https://files.pythonhosted.org/packages/da/59/eda4f9cb0cbce5a45f0cd06131e710674f8123a4d570772c5b9694f88559/pybase64-1.4.3-cp311-cp311-win_arm64.whl", hash = "sha256:61d87de5bc94d143622e94390ec3e11b9c1d4644fe9be3a81068ab0f91056f59", size = 31160, upload-time = "2025-12-06T13:23:15.696Z" }, - { url = "https://files.pythonhosted.org/packages/b2/7c/545fd4935a0e1ddd7147f557bf8157c73eecec9cffd523382fa7af2557de/pybase64-1.4.3-graalpy311-graalpy242_311_native-macosx_10_9_x86_64.whl", hash = "sha256:d27c1dfdb0c59a5e758e7a98bd78eaca5983c22f4a811a36f4f980d245df4611", size = 38393, upload-time = "2025-12-06T13:26:19.535Z" }, - { url = "https://files.pythonhosted.org/packages/c3/ca/ae7a96be9ddc96030d4e9dffc43635d4e136b12058b387fd47eb8301b60f/pybase64-1.4.3-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0f1a0c51d6f159511e3431b73c25db31095ee36c394e26a4349e067c62f434e5", size = 32109, upload-time = "2025-12-06T13:26:20.72Z" }, { url = "https://files.pythonhosted.org/packages/bf/44/d4b7adc7bf4fd5b52d8d099121760c450a52c390223806b873f0b6a2d551/pybase64-1.4.3-graalpy311-graalpy242_311_native-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a492518f3078a4e3faaef310697d21df9c6bc71908cebc8c2f6fbfa16d7d6b1f", size = 43227, upload-time = "2025-12-06T13:26:21.845Z" }, - { url = "https://files.pythonhosted.org/packages/08/86/2ba2d8734ef7939debeb52cf9952e457ba7aa226cae5c0e6dd631f9b851f/pybase64-1.4.3-graalpy311-graalpy242_311_native-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cae1a0f47784fd16df90d8acc32011c8d5fcdd9ab392c9ec49543e5f6a9c43a4", size = 35804, upload-time = "2025-12-06T13:26:23.149Z" }, - { url = "https://files.pythonhosted.org/packages/4f/5b/19c725dc3aaa6281f2ce3ea4c1628d154a40dd99657d1381995f8096768b/pybase64-1.4.3-graalpy311-graalpy242_311_native-win_amd64.whl", hash = "sha256:03cea70676ffbd39a1ab7930a2d24c625b416cacc9d401599b1d29415a43ab6a", size = 35880, upload-time = "2025-12-06T13:26:24.663Z" }, - { url = "https://files.pythonhosted.org/packages/2a/cf/6e712491bd665ea8633efb0b484121893ea838d8e830e06f39f2aae37e58/pybase64-1.4.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94cf50c36bb2f8618982ee5a978c4beed9db97d35944fa96e8586dd953c7994a", size = 38007, upload-time = "2025-12-06T13:26:32.804Z" }, - { url = "https://files.pythonhosted.org/packages/38/c0/9272cae1c49176337dcdbd97511e2843faae1aaf5a5fb48569093c6cd4ce/pybase64-1.4.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:01bc3ff5ca1341685c6d2d945b035f442f7b9c3b068a5c6ee8408a41fda5754e", size = 31538, upload-time = "2025-12-06T13:26:34.001Z" }, - { url = "https://files.pythonhosted.org/packages/20/f2/17546f97befe429c73f622bbd869ceebb518c40fdb0dec4c4f98312e80a5/pybase64-1.4.3-pp310-pypy310_pp73-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:03d0aa3761a99034960496280c02aa063f856a3cc9b33771bc4eab0e4e72b5c2", size = 40682, upload-time = "2025-12-06T13:26:35.168Z" }, - { url = "https://files.pythonhosted.org/packages/92/a0/464b36d5dfb61f3da17858afaeaa876a9342d58e9f17803ce7f28b5de9e8/pybase64-1.4.3-pp310-pypy310_pp73-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7ca5b1ce768520acd6440280cdab35235b27ad2faacfcec064bc9c3377066ef1", size = 41306, upload-time = "2025-12-06T13:26:36.351Z" }, - { url = "https://files.pythonhosted.org/packages/07/c9/a748dfc0969a8d960ecf1e82c8a2a16046ffec22f8e7ece582aa3b1c6cf9/pybase64-1.4.3-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3caa1e2ddad1c50553ffaaa1c86b74b3f9fbd505bea9970326ab88fc68c4c184", size = 35452, upload-time = "2025-12-06T13:26:37.772Z" }, - { url = "https://files.pythonhosted.org/packages/95/b7/4d37bd3577d1aa6c732dc099087fe027c48873e223de3784b095e5653f8b/pybase64-1.4.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bd47076f736b27a8b0f9b30d93b6bb4f5af01b0dc8971f883ed3b75934f39a99", size = 36125, upload-time = "2025-12-06T13:26:39.78Z" }, - { url = "https://files.pythonhosted.org/packages/b2/76/160dded493c00d3376d4ad0f38a2119c5345de4a6693419ad39c3565959b/pybase64-1.4.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:277de6e03cc9090fb359365c686a2a3036d23aee6cd20d45d22b8c89d1247f17", size = 37939, upload-time = "2025-12-06T13:26:41.014Z" }, - { url = "https://files.pythonhosted.org/packages/b7/b8/a0f10be8d648d6f8f26e560d6e6955efa7df0ff1e009155717454d76f601/pybase64-1.4.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ab1dd8b1ed2d1d750260ed58ab40defaa5ba83f76a30e18b9ebd5646f6247ae5", size = 31466, upload-time = "2025-12-06T13:26:42.539Z" }, - { url = "https://files.pythonhosted.org/packages/d3/22/832a2f9e76cdf39b52e01e40d8feeb6a04cf105494f2c3e3126d0149717f/pybase64-1.4.3-pp311-pypy311_pp73-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:bd4d2293de9fd212e294c136cec85892460b17d24e8c18a6ba18750928037750", size = 40681, upload-time = "2025-12-06T13:26:43.782Z" }, { url = "https://files.pythonhosted.org/packages/12/d7/6610f34a8972415fab3bb4704c174a1cc477bffbc3c36e526428d0f3957d/pybase64-1.4.3-pp311-pypy311_pp73-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af6d0d3a691911cc4c9a625f3ddcd3af720738c21be3d5c72de05629139d393", size = 41294, upload-time = "2025-12-06T13:26:44.936Z" }, - { url = "https://files.pythonhosted.org/packages/64/25/ed24400948a6c974ab1374a233cb7e8af0a5373cea0dd8a944627d17c34a/pybase64-1.4.3-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5cfc8c49a28322d82242088378f8542ce97459866ba73150b062a7073e82629d", size = 35447, upload-time = "2025-12-06T13:26:46.098Z" }, - { url = "https://files.pythonhosted.org/packages/ee/2b/e18ee7c5ee508a82897f021c1981533eca2940b5f072fc6ed0906c03a7a7/pybase64-1.4.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:debf737e09b8bf832ba86f5ecc3d3dbd0e3021d6cd86ba4abe962d6a5a77adb3", size = 36134, upload-time = "2025-12-06T13:26:47.35Z" }, ] [[package]] @@ -2469,78 +2376,44 @@ wheels = [ [[package]] name = "pydantic" -version = "2.11.7" +version = "2.13.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "annotated-types" }, - { name = "pydantic-core" }, - { name = "typing-extensions" }, - { name = "typing-inspection" }, + { name = "annotated-types", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-inspection", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload-time = "2025-06-14T08:33:17.137Z" } +sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload-time = "2025-06-14T08:33:14.905Z" }, + { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" }, ] [package.optional-dependencies] email = [ - { name = "email-validator" }, + { name = "email-validator", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] name = "pydantic-core" -version = "2.33.2" +version = "2.46.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/92/b31726561b5dae176c2d2c2dc43a9c5bfba5d32f96f8b4c0a600dd492447/pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8", size = 2028817, upload-time = "2025-04-23T18:30:43.919Z" }, - { url = "https://files.pythonhosted.org/packages/a3/44/3f0b95fafdaca04a483c4e685fe437c6891001bf3ce8b2fded82b9ea3aa1/pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d", size = 1861357, upload-time = "2025-04-23T18:30:46.372Z" }, - { url = "https://files.pythonhosted.org/packages/30/97/e8f13b55766234caae05372826e8e4b3b96e7b248be3157f53237682e43c/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d", size = 1898011, upload-time = "2025-04-23T18:30:47.591Z" }, - { url = "https://files.pythonhosted.org/packages/9b/a3/99c48cf7bafc991cc3ee66fd544c0aae8dc907b752f1dad2d79b1b5a471f/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572", size = 1982730, upload-time = "2025-04-23T18:30:49.328Z" }, - { url = "https://files.pythonhosted.org/packages/de/8e/a5b882ec4307010a840fb8b58bd9bf65d1840c92eae7534c7441709bf54b/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02", size = 2136178, upload-time = "2025-04-23T18:30:50.907Z" }, - { url = "https://files.pythonhosted.org/packages/e4/bb/71e35fc3ed05af6834e890edb75968e2802fe98778971ab5cba20a162315/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b", size = 2736462, upload-time = "2025-04-23T18:30:52.083Z" }, - { url = "https://files.pythonhosted.org/packages/31/0d/c8f7593e6bc7066289bbc366f2235701dcbebcd1ff0ef8e64f6f239fb47d/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2", size = 2005652, upload-time = "2025-04-23T18:30:53.389Z" }, - { url = "https://files.pythonhosted.org/packages/d2/7a/996d8bd75f3eda405e3dd219ff5ff0a283cd8e34add39d8ef9157e722867/pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a", size = 2113306, upload-time = "2025-04-23T18:30:54.661Z" }, - { url = "https://files.pythonhosted.org/packages/ff/84/daf2a6fb2db40ffda6578a7e8c5a6e9c8affb251a05c233ae37098118788/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac", size = 2073720, upload-time = "2025-04-23T18:30:56.11Z" }, - { url = "https://files.pythonhosted.org/packages/77/fb/2258da019f4825128445ae79456a5499c032b55849dbd5bed78c95ccf163/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a", size = 2244915, upload-time = "2025-04-23T18:30:57.501Z" }, - { url = "https://files.pythonhosted.org/packages/d8/7a/925ff73756031289468326e355b6fa8316960d0d65f8b5d6b3a3e7866de7/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b", size = 2241884, upload-time = "2025-04-23T18:30:58.867Z" }, - { url = "https://files.pythonhosted.org/packages/0b/b0/249ee6d2646f1cdadcb813805fe76265745c4010cf20a8eba7b0e639d9b2/pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22", size = 1910496, upload-time = "2025-04-23T18:31:00.078Z" }, - { url = "https://files.pythonhosted.org/packages/66/ff/172ba8f12a42d4b552917aa65d1f2328990d3ccfc01d5b7c943ec084299f/pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640", size = 1955019, upload-time = "2025-04-23T18:31:01.335Z" }, - { url = "https://files.pythonhosted.org/packages/3f/8d/71db63483d518cbbf290261a1fc2839d17ff89fce7089e08cad07ccfce67/pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7", size = 2028584, upload-time = "2025-04-23T18:31:03.106Z" }, - { url = "https://files.pythonhosted.org/packages/24/2f/3cfa7244ae292dd850989f328722d2aef313f74ffc471184dc509e1e4e5a/pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246", size = 1855071, upload-time = "2025-04-23T18:31:04.621Z" }, - { url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823, upload-time = "2025-04-23T18:31:06.377Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792, upload-time = "2025-04-23T18:31:07.93Z" }, - { url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338, upload-time = "2025-04-23T18:31:09.283Z" }, - { url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998, upload-time = "2025-04-23T18:31:11.7Z" }, - { url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200, upload-time = "2025-04-23T18:31:13.536Z" }, - { url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890, upload-time = "2025-04-23T18:31:15.011Z" }, - { url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359, upload-time = "2025-04-23T18:31:16.393Z" }, - { url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883, upload-time = "2025-04-23T18:31:17.892Z" }, - { url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074, upload-time = "2025-04-23T18:31:19.205Z" }, - { url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538, upload-time = "2025-04-23T18:31:20.541Z" }, - { url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909, upload-time = "2025-04-23T18:31:22.371Z" }, - { url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786, upload-time = "2025-04-23T18:31:24.161Z" }, - { url = "https://files.pythonhosted.org/packages/30/68/373d55e58b7e83ce371691f6eaa7175e3a24b956c44628eb25d7da007917/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa", size = 2023982, upload-time = "2025-04-23T18:32:53.14Z" }, - { url = "https://files.pythonhosted.org/packages/a4/16/145f54ac08c96a63d8ed6442f9dec17b2773d19920b627b18d4f10a061ea/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29", size = 1858412, upload-time = "2025-04-23T18:32:55.52Z" }, - { url = "https://files.pythonhosted.org/packages/41/b1/c6dc6c3e2de4516c0bb2c46f6a373b91b5660312342a0cf5826e38ad82fa/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d", size = 1892749, upload-time = "2025-04-23T18:32:57.546Z" }, - { url = "https://files.pythonhosted.org/packages/12/73/8cd57e20afba760b21b742106f9dbdfa6697f1570b189c7457a1af4cd8a0/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e", size = 2067527, upload-time = "2025-04-23T18:32:59.771Z" }, - { url = "https://files.pythonhosted.org/packages/e3/d5/0bb5d988cc019b3cba4a78f2d4b3854427fc47ee8ec8e9eaabf787da239c/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c", size = 2108225, upload-time = "2025-04-23T18:33:04.51Z" }, - { url = "https://files.pythonhosted.org/packages/f1/c5/00c02d1571913d496aabf146106ad8239dc132485ee22efe08085084ff7c/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec", size = 2069490, upload-time = "2025-04-23T18:33:06.391Z" }, - { url = "https://files.pythonhosted.org/packages/22/a8/dccc38768274d3ed3a59b5d06f59ccb845778687652daa71df0cab4040d7/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052", size = 2237525, upload-time = "2025-04-23T18:33:08.44Z" }, - { url = "https://files.pythonhosted.org/packages/d4/e7/4f98c0b125dda7cf7ccd14ba936218397b44f50a56dd8c16a3091df116c3/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c", size = 2238446, upload-time = "2025-04-23T18:33:10.313Z" }, - { url = "https://files.pythonhosted.org/packages/ce/91/2ec36480fdb0b783cd9ef6795753c1dea13882f2e68e73bce76ae8c21e6a/pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808", size = 2066678, upload-time = "2025-04-23T18:33:12.224Z" }, - { url = "https://files.pythonhosted.org/packages/7b/27/d4ae6487d73948d6f20dddcd94be4ea43e74349b56eba82e9bdee2d7494c/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8", size = 2025200, upload-time = "2025-04-23T18:33:14.199Z" }, - { url = "https://files.pythonhosted.org/packages/f1/b8/b3cb95375f05d33801024079b9392a5ab45267a63400bf1866e7ce0f0de4/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593", size = 1859123, upload-time = "2025-04-23T18:33:16.555Z" }, - { url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852, upload-time = "2025-04-23T18:33:18.513Z" }, - { url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484, upload-time = "2025-04-23T18:33:20.475Z" }, - { url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896, upload-time = "2025-04-23T18:33:22.501Z" }, - { url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475, upload-time = "2025-04-23T18:33:24.528Z" }, - { url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013, upload-time = "2025-04-23T18:33:26.621Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715, upload-time = "2025-04-23T18:33:28.656Z" }, - { url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" }, + { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685, upload-time = "2026-05-06T13:38:17.762Z" }, + { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433, upload-time = "2026-05-06T13:37:30.099Z" }, + { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589, upload-time = "2026-05-06T13:37:10.817Z" }, + { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552, upload-time = "2026-05-06T13:36:56.717Z" }, + { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417, upload-time = "2026-05-06T13:39:45.476Z" }, + { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782, upload-time = "2026-05-06T13:37:04.016Z" }, + { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146, upload-time = "2026-05-06T13:39:43.092Z" }, + { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492, upload-time = "2026-05-06T13:36:58.124Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286, upload-time = "2026-05-06T13:40:05.667Z" }, ] [[package]] @@ -2548,8 +2421,8 @@ name = "pydantic-extra-types" version = "2.11.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pydantic" }, - { name = "typing-extensions" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/71/dba38ee2651f84f7842206adbd2233d8bbdb59fb85e9fa14232486a8c471/pydantic_extra_types-2.11.1.tar.gz", hash = "sha256:46792d2307383859e923d8fcefa82108b1a141f8a9c0198982b3832ab5ef1049", size = 172002, upload-time = "2026-03-16T08:08:03.92Z" } wheels = [ @@ -2558,33 +2431,30 @@ wheels = [ [package.optional-dependencies] pycountry = [ - { name = "pycountry" }, + { name = "pycountry", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] name = "pydantic-settings" -version = "2.7.1" +version = "2.14.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pydantic" }, - { name = "python-dotenv" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "python-dotenv", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-inspection", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/73/7b/c58a586cd7d9ac66d2ee4ba60ca2d241fa837c02bca9bea80a9a8c3d22a9/pydantic_settings-2.7.1.tar.gz", hash = "sha256:10c9caad35e64bfb3c2fbf70a078c0e25cc92499782e5200747f942a065dec93", size = 79920, upload-time = "2024-12-31T11:27:44.632Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5c/b5/8f48e906c3e0205276e8bd8cb7512217a87b2685304d64be27cad5b3019f/pydantic_settings-2.14.2.tar.gz", hash = "sha256:c19dd64b19097f1de80184f0cc7b0272a13ae6e170cbf240a3e27e381ed14a5f", size = 237700, upload-time = "2026-06-19T13:44:56.324Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b4/46/93416fdae86d40879714f72956ac14df9c7b76f7d41a4d68aa9f71a0028b/pydantic_settings-2.7.1-py3-none-any.whl", hash = "sha256:590be9e6e24d06db33a4262829edef682500ef008565a969c73d39d5f8bfb3fd", size = 29718, upload-time = "2024-12-31T11:27:43.201Z" }, + { url = "https://files.pythonhosted.org/packages/77/c1/6e422f34e569cf8e18df68d1939c81c099d2b61e4f7d9621c8a77560799c/pydantic_settings-2.14.2-py3-none-any.whl", hash = "sha256:a20c97b37910b6550d5ea50fbcc2d4187defe58cd57070b73863d069419c9440", size = 61715, upload-time = "2026-06-19T13:44:55.02Z" }, ] [[package]] -name = "pyfastner" -version = "1.0.10" +name = "pyelftools" +version = "0.33" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cython" }, - { name = "quicksectx" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b3/59/005d6eae903c7d9a1861e8fd813ea7a03d65ab8807e6877a3dc12e5902da/PyFastNER-1.0.10.tar.gz", hash = "sha256:d477fc4f7acbb68f0c828b0bed478206092bb8190997dfda006993db5813b262", size = 13591, upload-time = "2023-12-13T05:15:48.285Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/11/767522582afab1b884d277de0e6e011640cb9d7292a38694b4b1a1df1ae8/pyelftools-0.33.tar.gz", hash = "sha256:660d82dcbeb8e83d1702bd97f223f761625da06111c0cc988eac6b8ab0c1b61f", size = 15068655, upload-time = "2026-05-29T12:56:22.553Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/90/d9e2d9439ee6c22562a0b175e0fdd503304b60cec22b8a484955aeac7659/PyFastNER-1.0.10-py3-none-any.whl", hash = "sha256:259665dd8a84c907559645d2ce33ec807be0fb03664cfdb14a50aa6436cedb72", size = 22522, upload-time = "2023-12-13T05:15:46.401Z" }, + { url = "https://files.pythonhosted.org/packages/46/2a/f9697576603dae937727827505a6126a066affb227034e77e6f9068910da/pyelftools-0.33-py3-none-any.whl", hash = "sha256:f215ad5f47d3f1373a21496a6c9e0707c622840d0622f23ff7ce08678b020036", size = 201178, upload-time = "2026-05-29T12:56:20.587Z" }, ] [[package]] @@ -2597,50 +2467,39 @@ wheels = [ ] [[package]] -name = "pyrush" -version = "1.0.9" +name = "pyjwt" +version = "2.13.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cython" }, - { name = "pyfastner" }, - { name = "quicksectx" }, - { name = "setuptools" }, - { name = "spacy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/92/33/5c1b4ea9746b9ca2707f4f374f8ae90643c14fa5bda94edb329a3676fb57/PyRuSH-1.0.9.tar.gz", hash = "sha256:263296d121924972891e2dcff51ec29971c5c15256c061cc4e746c9ef6080e84", size = 67077, upload-time = "2024-10-27T14:46:29.711Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3b/81/58d0ac84e1ef3a3843791d6954d94c0b33d526c75eeb1efbce9d0a4c4077/pyjwt-2.13.0.tar.gz", hash = "sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423", size = 107515, upload-time = "2026-05-21T19:54:36.618Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/aa/2970526054fb946fead047b269eb8ab49524bff08abaccf760dcdee66531/PyRuSH-1.0.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85d12241bdf1f92e5a1be922287db2d47ca62f57fd3ca9628f37a618f5537eee", size = 90218, upload-time = "2024-10-27T14:46:09.35Z" }, - { url = "https://files.pythonhosted.org/packages/48/e5/17ebdce3d4b04d83e026b364444d250040ccaba08ea2746f5b9cb8b2b863/PyRuSH-1.0.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b670646c666c8dc4c678b8c539bebc56e89634cc61b41430ebce3e5ed4c6b361", size = 198718, upload-time = "2024-10-27T14:46:10.835Z" }, - { url = "https://files.pythonhosted.org/packages/44/04/ca4c23b285612ebf7f83811aa56c7dacd9e62ab5e93c7b2e4006e238704d/PyRuSH-1.0.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:49382da67806e48d1d236c91d5a0d761824a58d51da06e94e8a938dc05602723", size = 198955, upload-time = "2024-10-27T14:46:12.254Z" }, - { url = "https://files.pythonhosted.org/packages/d8/92/5cef025fad45423a4ad4fb094b7e2592a5f7fd386acac7318c8c056801ff/PyRuSH-1.0.9-cp310-cp310-win_amd64.whl", hash = "sha256:5d0ed6be72e745ee3162224c2bca1b2ca0e50ca332b07d072c65045dd9529c25", size = 89893, upload-time = "2024-10-27T14:46:13.775Z" }, - { url = "https://files.pythonhosted.org/packages/e8/d3/c59681583fcb1051ad228d0470a9705992aa0a5cc90db9f01e448b29369a/PyRuSH-1.0.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:33ff9526976c9260ab1aa7717f124f6b107d9c90bd13ed4394267a0d8a28c722", size = 90208, upload-time = "2024-10-27T14:46:15.31Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f2/5d1bff452c3deb7247273cdb40d6df0bcb4e01bb4350085062ee2a1eccfc/PyRuSH-1.0.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9065c9cbc69006195ca0774346d29c729a79db25b4128aa02a5e861f74fd8c69", size = 211812, upload-time = "2024-10-27T14:46:16.167Z" }, - { url = "https://files.pythonhosted.org/packages/70/1e/d1cf28fe5c4773778e618ba0c3efea94476114ef290b2c19ba8fc01b7bd7/PyRuSH-1.0.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d50724ffabfae998a1526a1159c8d2fc4c9e0c2a6990dcf042c7d014c52d489a", size = 211409, upload-time = "2024-10-27T14:46:17.247Z" }, - { url = "https://files.pythonhosted.org/packages/2e/5a/65217cce498edf392b2f9ed2a8e99521020ba6198c1a1c80849deacb5856/PyRuSH-1.0.9-cp311-cp311-win_amd64.whl", hash = "sha256:f0762bcc791b05a8fba9aa7e695b28997a12c0a831764b0d7c10b61043c6e5d6", size = 89938, upload-time = "2024-10-27T14:46:18.427Z" }, + { url = "https://files.pythonhosted.org/packages/a3/5e/ecf12fdb62546d64385c158514e9b2b671f7832108ef2ecd2020ce0af2d1/pyjwt-2.13.0-py3-none-any.whl", hash = "sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728", size = 31274, upload-time = "2026-05-21T19:54:35.362Z" }, +] + +[package.optional-dependencies] +crypto = [ + { name = "cryptography", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] -name = "pysbd" -version = "0.3.4" +name = "pymdown-extensions" +version = "11.0" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/47/67/f1e79672a5f91985577c7984c9709ca110e4fd37fe7fd167b60422e6ccc2/pymdown_extensions-11.0.tar.gz", hash = "sha256:8269cef0247f9e2d0a62fcea10860aba05c1cbab5470fd4b63230b96434dc589", size = 857049, upload-time = "2026-06-23T02:27:45.146Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/48/0a/c99fb7d7e176f8b176ef19704a32e6a9c6aafdf19ef75a187f701fc15801/pysbd-0.3.4-py3-none-any.whl", hash = "sha256:cd838939b7b0b185fcf86b0baf6636667dfb6e474743beeff878e9f42e022953", size = 71082, upload-time = "2021-02-11T16:36:33.351Z" }, + { url = "https://files.pythonhosted.org/packages/af/b6/1ae53367e28b9cffa3be7574e13fbe4589694272fd47710fbdbafd3d63c6/pymdown_extensions-11.0-py3-none-any.whl", hash = "sha256:fbc4acb641814fa9d17521bbd21a5240ef739a662f11c06330c4b78c93e954d6", size = 269415, upload-time = "2026-06-23T02:27:43.826Z" }, ] [[package]] -name = "pysimstring" -version = "1.3.0" +name = "pyparsing" +version = "3.3.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/73/fa/6f72572dee43eb501447a87895620b07e25d7a91b290f088c4bb360bc82b/pysimstring-1.3.0.tar.gz", hash = "sha256:ff5215f0b27f6c07041c1e8a1a0e795df3dc9e149a7ef0a1418ace65361d2322", size = 70080, upload-time = "2025-04-06T22:40:04.662Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ea/9b/d0c85b1998e6aa0bd0b689c1845267ae0f1127e6b0cba27cf15d25de0cb7/pysimstring-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb3b6428090f698664c3ad82a2707aa9fec4f71a906f38ba68e1f977d77fec26", size = 128008, upload-time = "2025-04-06T22:39:34.301Z" }, - { url = "https://files.pythonhosted.org/packages/97/ff/6d6a4211e03d1bbd0717be91bc6bd4dd533b84451b37392c44eeb1936c16/pysimstring-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:499d3502f4c3640bcacee947b9947ed5ddefea709405749abe5716737b9af04d", size = 117050, upload-time = "2025-04-06T22:39:35.289Z" }, - { url = "https://files.pythonhosted.org/packages/6d/3a/b7e1eb243e8a183f96c3d5b2c905522a9605d961c35c754188d752c1ff03/pysimstring-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4104d7a3081e4334747b912da161645dd004b4173c64d3cfe64f07f3cf96f1ac", size = 1515496, upload-time = "2025-04-06T22:39:36.612Z" }, - { url = "https://files.pythonhosted.org/packages/2b/cc/b919c35ee40ae994047826dbed44a6465c635a153c213756ad3dd947547a/pysimstring-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:6a3c0d9ef940dfdf74e45e2f5c8b3f7b76d01c43ca584bdb4012ed5e1e6b6108", size = 102647, upload-time = "2025-04-06T22:39:38.135Z" }, - { url = "https://files.pythonhosted.org/packages/53/12/f269b24f4b23d66db1817bba6c3dc35ff8c12f2a7e12624007b4ca8a787c/pysimstring-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ae1ff135c0ac51c2300a4983b012b63729b1451f2c49cb4b9e9ebf8dea35d63", size = 128006, upload-time = "2025-04-06T22:39:39.067Z" }, - { url = "https://files.pythonhosted.org/packages/f4/ad/1a9fce7775a713d872a3f091a9a392e7dc335adb6c19e9a099a720880363/pysimstring-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37c68e8e095fc64811d343b7141665de570fb9d3b87d875370db473f528eea32", size = 117050, upload-time = "2025-04-06T22:39:39.943Z" }, - { url = "https://files.pythonhosted.org/packages/ab/3c/d00d547c1a84089b39feada04edd84e8d46ace4377ed6c9d8a7082b1f1c7/pysimstring-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:332920eda9c09a6622234829516988439e12b4b0b7903832d53ace6e611dc286", size = 1521843, upload-time = "2025-04-06T22:39:41.254Z" }, - { url = "https://files.pythonhosted.org/packages/22/30/262e29f873a356e581974e001b155a03f0c5e50bd2f3cb17632ade9d790c/pysimstring-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:1b4b48a869a0d78f42e5a4ca401a46080c9e34f1a18aee3ac4970885a4352850", size = 102645, upload-time = "2025-04-06T22:39:42.311Z" }, + { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, ] [[package]] @@ -2648,13 +2507,10 @@ name = "pytest" version = "9.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "iniconfig" }, - { name = "packaging" }, - { name = "pluggy" }, - { name = "pygments" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "iniconfig", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pluggy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pygments", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/84/0e/b5858858d74958632c49b72cb25a3976ff9f632397626715be71c89d3971/pytest-9.1.0.tar.gz", hash = "sha256:41dd9148c08072446394cefd3d79701701335a9f4cae69ba92e39f6c7f5c061c", size = 1634181, upload-time = "2026-06-13T18:52:45.983Z" } wheels = [ @@ -2666,20 +2522,33 @@ name = "python-dateutil" version = "2.9.0.post0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "six" }, + { name = "six", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, ] +[[package]] +name = "python-discovery" +version = "1.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "platformdirs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0b/1a/cbbaf13b730abb0a16b964d984e19f2fe520c21a4dc664051359a3f5a9e7/python_discovery-1.4.2.tar.gz", hash = "sha256:8f3746c4b4968d22afbb97d36e1a0e5b66e6c0f297290f2e95f05b9b8bf18690", size = 70277, upload-time = "2026-06-11T16:10:42.383Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/82/a70006589557f267f15bd384c0642ad49f0d97b690c3a05b166b9dcbad3b/python_discovery-1.4.2-py3-none-any.whl", hash = "sha256:475803f53b7b2ed6e490e27373f9d8340f7d2eebf9acdaf645d7d714c97bb500", size = 33886, upload-time = "2026-06-11T16:10:41.192Z" }, +] + [[package]] name = "python-dotenv" -version = "1.0.1" +version = "1.2.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bc/57/e84d88dfe0aec03b7a2d4327012c1627ab5f03652216c63d49846d7a6c58/python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", size = 39115, upload-time = "2024-01-23T06:33:00.505Z" } +sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/3e/b68c118422ec867fa7ab88444e1274aa40681c606d59ac27de5a5588f082/python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a", size = 19863, upload-time = "2024-01-23T06:32:58.246Z" }, + { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, ] [[package]] @@ -2715,24 +2584,22 @@ version = "6.0.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199, upload-time = "2024-08-06T20:31:40.178Z" }, - { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758, upload-time = "2024-08-06T20:31:42.173Z" }, - { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463, upload-time = "2024-08-06T20:31:44.263Z" }, - { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280, upload-time = "2024-08-06T20:31:50.199Z" }, - { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239, upload-time = "2024-08-06T20:31:52.292Z" }, - { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802, upload-time = "2024-08-06T20:31:53.836Z" }, - { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527, upload-time = "2024-08-06T20:31:55.565Z" }, - { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052, upload-time = "2024-08-06T20:31:56.914Z" }, - { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774, upload-time = "2024-08-06T20:31:58.304Z" }, { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" }, { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" }, - { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" }, - { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" }, { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" }, - { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" }, { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" }, - { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850, upload-time = "2024-08-06T20:32:19.889Z" }, - { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980, upload-time = "2024-08-06T20:32:21.273Z" }, +] + +[[package]] +name = "pyyaml-env-tag" +version = "1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" }, ] [[package]] @@ -2740,97 +2607,31 @@ name = "pyzmq" version = "27.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cffi", marker = "implementation_name == 'pypy'" }, + { name = "cffi", marker = "implementation_name == 'pypy' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750, upload-time = "2025-09-08T23:10:18.157Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/67/b9/52aa9ec2867528b54f1e60846728d8b4d84726630874fee3a91e66c7df81/pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4", size = 1329850, upload-time = "2025-09-08T23:07:26.274Z" }, - { url = "https://files.pythonhosted.org/packages/99/64/5653e7b7425b169f994835a2b2abf9486264401fdef18df91ddae47ce2cc/pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556", size = 906380, upload-time = "2025-09-08T23:07:29.78Z" }, - { url = "https://files.pythonhosted.org/packages/73/78/7d713284dbe022f6440e391bd1f3c48d9185673878034cfb3939cdf333b2/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b", size = 666421, upload-time = "2025-09-08T23:07:31.263Z" }, - { url = "https://files.pythonhosted.org/packages/30/76/8f099f9d6482450428b17c4d6b241281af7ce6a9de8149ca8c1c649f6792/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e", size = 854149, upload-time = "2025-09-08T23:07:33.17Z" }, - { url = "https://files.pythonhosted.org/packages/59/f0/37fbfff06c68016019043897e4c969ceab18bde46cd2aca89821fcf4fb2e/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526", size = 1655070, upload-time = "2025-09-08T23:07:35.205Z" }, - { url = "https://files.pythonhosted.org/packages/47/14/7254be73f7a8edc3587609554fcaa7bfd30649bf89cd260e4487ca70fdaa/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1", size = 2033441, upload-time = "2025-09-08T23:07:37.432Z" }, - { url = "https://files.pythonhosted.org/packages/22/dc/49f2be26c6f86f347e796a4d99b19167fc94503f0af3fd010ad262158822/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386", size = 1891529, upload-time = "2025-09-08T23:07:39.047Z" }, - { url = "https://files.pythonhosted.org/packages/a3/3e/154fb963ae25be70c0064ce97776c937ecc7d8b0259f22858154a9999769/pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda", size = 567276, upload-time = "2025-09-08T23:07:40.695Z" }, - { url = "https://files.pythonhosted.org/packages/62/b2/f4ab56c8c595abcb26b2be5fd9fa9e6899c1e5ad54964e93ae8bb35482be/pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f", size = 632208, upload-time = "2025-09-08T23:07:42.298Z" }, - { url = "https://files.pythonhosted.org/packages/3b/e3/be2cc7ab8332bdac0522fdb64c17b1b6241a795bee02e0196636ec5beb79/pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32", size = 559766, upload-time = "2025-09-08T23:07:43.869Z" }, - { url = "https://files.pythonhosted.org/packages/06/5d/305323ba86b284e6fcb0d842d6adaa2999035f70f8c38a9b6d21ad28c3d4/pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86", size = 1333328, upload-time = "2025-09-08T23:07:45.946Z" }, - { url = "https://files.pythonhosted.org/packages/bd/a0/fc7e78a23748ad5443ac3275943457e8452da67fda347e05260261108cbc/pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581", size = 908803, upload-time = "2025-09-08T23:07:47.551Z" }, - { url = "https://files.pythonhosted.org/packages/7e/22/37d15eb05f3bdfa4abea6f6d96eb3bb58585fbd3e4e0ded4e743bc650c97/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f", size = 668836, upload-time = "2025-09-08T23:07:49.436Z" }, { url = "https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e", size = 857038, upload-time = "2025-09-08T23:07:51.234Z" }, - { url = "https://files.pythonhosted.org/packages/cb/eb/bfdcb41d0db9cd233d6fb22dc131583774135505ada800ebf14dfb0a7c40/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15c8bd0fe0dabf808e2d7a681398c4e5ded70a551ab47482067a572c054c8e2e", size = 1657531, upload-time = "2025-09-08T23:07:52.795Z" }, - { url = "https://files.pythonhosted.org/packages/ab/21/e3180ca269ed4a0de5c34417dfe71a8ae80421198be83ee619a8a485b0c7/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bafcb3dd171b4ae9f19ee6380dfc71ce0390fefaf26b504c0e5f628d7c8c54f2", size = 2034786, upload-time = "2025-09-08T23:07:55.047Z" }, { url = "https://files.pythonhosted.org/packages/3b/b1/5e21d0b517434b7f33588ff76c177c5a167858cc38ef740608898cd329f2/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e829529fcaa09937189178115c49c504e69289abd39967cd8a4c215761373394", size = 1894220, upload-time = "2025-09-08T23:07:57.172Z" }, - { url = "https://files.pythonhosted.org/packages/03/f2/44913a6ff6941905efc24a1acf3d3cb6146b636c546c7406c38c49c403d4/pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f", size = 567155, upload-time = "2025-09-08T23:07:59.05Z" }, - { url = "https://files.pythonhosted.org/packages/23/6d/d8d92a0eb270a925c9b4dd039c0b4dc10abc2fcbc48331788824ef113935/pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97", size = 633428, upload-time = "2025-09-08T23:08:00.663Z" }, - { url = "https://files.pythonhosted.org/packages/ae/14/01afebc96c5abbbd713ecfc7469cfb1bc801c819a74ed5c9fad9a48801cb/pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07", size = 559497, upload-time = "2025-09-08T23:08:02.15Z" }, - { url = "https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc", size = 1306279, upload-time = "2025-09-08T23:08:03.807Z" }, - { url = "https://files.pythonhosted.org/packages/e8/5e/c3c49fdd0f535ef45eefcc16934648e9e59dace4a37ee88fc53f6cd8e641/pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113", size = 895645, upload-time = "2025-09-08T23:08:05.301Z" }, - { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574, upload-time = "2025-09-08T23:08:06.828Z" }, { url = "https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31", size = 840995, upload-time = "2025-09-08T23:08:08.396Z" }, - { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070, upload-time = "2025-09-08T23:08:09.989Z" }, - { url = "https://files.pythonhosted.org/packages/9c/80/2df2e7977c4ede24c79ae39dcef3899bfc5f34d1ca7a5b24f182c9b7a9ca/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856", size = 2021121, upload-time = "2025-09-08T23:08:11.907Z" }, { url = "https://files.pythonhosted.org/packages/46/bd/2d45ad24f5f5ae7e8d01525eb76786fa7557136555cac7d929880519e33a/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496", size = 1878550, upload-time = "2025-09-08T23:08:13.513Z" }, - { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184, upload-time = "2025-09-08T23:08:15.163Z" }, - { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480, upload-time = "2025-09-08T23:08:17.192Z" }, - { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993, upload-time = "2025-09-08T23:08:18.926Z" }, - { url = "https://files.pythonhosted.org/packages/f3/81/a65e71c1552f74dec9dff91d95bafb6e0d33338a8dfefbc88aa562a20c92/pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6", size = 836266, upload-time = "2025-09-08T23:09:40.048Z" }, - { url = "https://files.pythonhosted.org/packages/58/ed/0202ca350f4f2b69faa95c6d931e3c05c3a397c184cacb84cb4f8f42f287/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90", size = 800206, upload-time = "2025-09-08T23:09:41.902Z" }, - { url = "https://files.pythonhosted.org/packages/47/42/1ff831fa87fe8f0a840ddb399054ca0009605d820e2b44ea43114f5459f4/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62", size = 567747, upload-time = "2025-09-08T23:09:43.741Z" }, - { url = "https://files.pythonhosted.org/packages/d1/db/5c4d6807434751e3f21231bee98109aa57b9b9b55e058e450d0aef59b70f/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74", size = 747371, upload-time = "2025-09-08T23:09:45.575Z" }, - { url = "https://files.pythonhosted.org/packages/26/af/78ce193dbf03567eb8c0dc30e3df2b9e56f12a670bf7eb20f9fb532c7e8a/pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba", size = 544862, upload-time = "2025-09-08T23:09:47.448Z" }, - { url = "https://files.pythonhosted.org/packages/4c/c6/c4dcdecdbaa70969ee1fdced6d7b8f60cfabe64d25361f27ac4665a70620/pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066", size = 836265, upload-time = "2025-09-08T23:09:49.376Z" }, - { url = "https://files.pythonhosted.org/packages/3e/79/f38c92eeaeb03a2ccc2ba9866f0439593bb08c5e3b714ac1d553e5c96e25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604", size = 800208, upload-time = "2025-09-08T23:09:51.073Z" }, - { url = "https://files.pythonhosted.org/packages/49/0e/3f0d0d335c6b3abb9b7b723776d0b21fa7f3a6c819a0db6097059aada160/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c", size = 567747, upload-time = "2025-09-08T23:09:52.698Z" }, { url = "https://files.pythonhosted.org/packages/a1/cf/f2b3784d536250ffd4be70e049f3b60981235d70c6e8ce7e3ef21e1adb25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271", size = 747371, upload-time = "2025-09-08T23:09:54.563Z" }, - { url = "https://files.pythonhosted.org/packages/01/1b/5dbe84eefc86f48473947e2f41711aded97eecef1231f4558f1f02713c12/pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355", size = 544862, upload-time = "2025-09-08T23:09:56.509Z" }, ] [[package]] -name = "quicksectx" -version = "0.4.0" +name = "quack-kernels" +version = "0.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cython" }, + { name = "apache-tvm-ffi", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "einops", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cutlass-dsl", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch-c-dlpack-ext", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/40/af/f890ee37cb2801e548aaa7479073427cf0586a414564eaba13c76647c9fe/quicksectx-0.4.0.tar.gz", hash = "sha256:25bc4ce3638c0713c8b57274454adac071e36ee76265707771eb3dab75245c55", size = 238176, upload-time = "2024-10-12T06:17:36.257Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/94/ee76e3a3dc74d986b7b24c5928f1d14b01bd5152375688c2ede369f6d19b/quack_kernels-0.5.0.tar.gz", hash = "sha256:c7c7338b67243397b6ca166e648bba161076e99f3858b532e1c877dcc6eaa03d", size = 366426, upload-time = "2026-05-29T05:00:25.985Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/67/d6/0d03bf14032a3c162cdc1044df313086e1d8048914506d5f7156588d07f1/quicksectx-0.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2800f23a6d89bea42f9bd0f3ee589818cd6769333e2dd139bb73e9eba2dac295", size = 504884, upload-time = "2024-10-12T06:17:12.924Z" }, - { url = "https://files.pythonhosted.org/packages/e9/05/60089ad762b82d67d7bf05e39e10d5da05ccb1f3e0ba3df1a9ef2c91f81f/quicksectx-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a9b1d936bc90199c0591974a1282d913a937cfe2f50e0ca235746c96f34e23c", size = 1035989, upload-time = "2024-10-12T06:17:14.725Z" }, - { url = "https://files.pythonhosted.org/packages/a4/c9/e01386e44eb06aa65707a1fc47020e65a1666c03363ac738778afba83b84/quicksectx-0.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:dd73fd822e50d7a938a9296098e73e6bd8c61d4ade14c18c5ca0457d30130dcf", size = 356083, upload-time = "2024-10-12T06:17:16.93Z" }, - { url = "https://files.pythonhosted.org/packages/a2/f8/2c07b96f891091defc28fdfab794942a8966e9ee83113173fdb4a0b742d0/quicksectx-0.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d40aaec345f47192b2c9e2e1235835560a85a3aed5b61b661e8e74c5cecaca33", size = 505774, upload-time = "2024-10-12T06:17:18.021Z" }, - { url = "https://files.pythonhosted.org/packages/89/a9/a20978b3128220eb9ba07999667a9201bbf1a7196f18f23770309cac4c48/quicksectx-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68fc1af2027ffdf72ff6b77a446d28f01161b523a94879748cf6e589c30d8ada", size = 1079350, upload-time = "2024-10-12T06:17:19.599Z" }, - { url = "https://files.pythonhosted.org/packages/ca/b7/3dd75210323c0729b810f9a4f6cefad207512ae2f2b0d36c07da9d5d684d/quicksectx-0.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cec691ca82e914ce79fc790bac4d715677c6015c38b52d2e10d0afef5533e028", size = 356396, upload-time = "2024-10-12T06:17:21.24Z" }, -] - -[[package]] -name = "ray" -version = "2.55.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "filelock" }, - { name = "jsonschema" }, - { name = "msgpack" }, - { name = "packaging" }, - { name = "protobuf" }, - { name = "pyyaml" }, - { name = "requests" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/d0/a85097dd53aaca1a44acc4dd0b3d2c0e9233179433e2ee326e4018ab3cf7/ray-2.55.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:2d5786661e192148719accc959def6cdcabd7a24cd9008005bf3d0e3c8cfd529", size = 65829601, upload-time = "2026-04-22T20:09:10.013Z" }, - { url = "https://files.pythonhosted.org/packages/6a/d0/413baab5f0bdd1f913bd46538d96df3547a495b1a0de42f776b5c80d821c/ray-2.55.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:baf2ec89df7838cabdef493ff9bdbec1e6a6452f8bc696ad0c1b8a6198721745", size = 72776751, upload-time = "2026-04-22T20:09:17.802Z" }, - { url = "https://files.pythonhosted.org/packages/b4/64/640f5525bac171282c6f76f3ecc9c4cfef60149ac0d00231afb22018ebe5/ray-2.55.1-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:bb49fbbe53a1d931e1f92d17f9271338f0b738885f8f70b7f531aa33f019d8af", size = 73606971, upload-time = "2026-04-22T20:09:23.912Z" }, - { url = "https://files.pythonhosted.org/packages/31/9a/917f25438d802e23cee2bd1426f1e36ae19e0d0e41908d50937e0a4b7fd4/ray-2.55.1-cp310-cp310-win_amd64.whl", hash = "sha256:86e618e9ad8c6a24331c788eb599cee9838a62d2e10dfca0227743be06cf551c", size = 27886803, upload-time = "2026-04-22T20:09:28.747Z" }, - { url = "https://files.pythonhosted.org/packages/88/7d/48ba2f49b40a34b0071ee27c0144a2573d8836094eaca213d59cef12c271/ray-2.55.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:0053fd5b400f7ac56263aa1bbd3d68fb79341b08b8dc697c88782d5aca7b3ed4", size = 65835271, upload-time = "2026-04-22T20:09:34.984Z" }, - { url = "https://files.pythonhosted.org/packages/8f/a3/d6db3a428e4ea17cc72e79f747cfe11e90e63e36e1705bb8324e45f334b7/ray-2.55.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:0ea2f670a7725833ad2333a8c46ab69865ad06c8e5de9f65695e0f8f35331cec", size = 72879783, upload-time = "2026-04-22T20:09:40.986Z" }, - { url = "https://files.pythonhosted.org/packages/46/59/41da0e72a59cd3e8978480ccfeb86ef4235ae5ceb9b8928168a764fa930a/ray-2.55.1-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:d5382da181c03ee2f502ef46cf0ae4bbc30157b5bd9a67d7651f6a272528a85a", size = 73706515, upload-time = "2026-04-22T20:09:47.079Z" }, - { url = "https://files.pythonhosted.org/packages/65/52/c16bbdc3e31a5178f97be88966ab56db6f7e04882640c5cf2fee5b87757b/ray-2.55.1-cp311-cp311-win_amd64.whl", hash = "sha256:5e56d2e8f304cafe990c198a2b894f5b813de018998cd7212869201f6dc17cff", size = 27882093, upload-time = "2026-04-22T20:09:52.943Z" }, -] - -[package.optional-dependencies] -cgraph = [ - { name = "cupy-cuda12x", marker = "sys_platform != 'darwin'" }, + { url = "https://files.pythonhosted.org/packages/2d/2b/a8f171d5e172880885571bf89e93204aaf231a0e92c4c84714eaf18c271a/quack_kernels-0.5.0-py3-none-any.whl", hash = "sha256:08821ebfb8e638cc20308d5c59410c6dbb3b637ccc7b07bd57c7a9261a06af74", size = 327709, upload-time = "2026-05-29T05:00:24.679Z" }, ] [[package]] @@ -2838,10 +2639,9 @@ name = "referencing" version = "0.37.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "attrs" }, - { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "typing-extensions" }, + { name = "attrs", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "rpds-py", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } wheels = [ @@ -2850,41 +2650,15 @@ wheels = [ [[package]] name = "regex" -version = "2024.11.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494, upload-time = "2024-11-06T20:12:31.635Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/95/3c/4651f6b130c6842a8f3df82461a8950f923925db8b6961063e82744bddcc/regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91", size = 482674, upload-time = "2024-11-06T20:08:57.575Z" }, - { url = "https://files.pythonhosted.org/packages/15/51/9f35d12da8434b489c7b7bffc205c474a0a9432a889457026e9bc06a297a/regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0", size = 287684, upload-time = "2024-11-06T20:08:59.787Z" }, - { url = "https://files.pythonhosted.org/packages/bd/18/b731f5510d1b8fb63c6b6d3484bfa9a59b84cc578ac8b5172970e05ae07c/regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e", size = 284589, upload-time = "2024-11-06T20:09:01.896Z" }, - { url = "https://files.pythonhosted.org/packages/78/a2/6dd36e16341ab95e4c6073426561b9bfdeb1a9c9b63ab1b579c2e96cb105/regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde", size = 782511, upload-time = "2024-11-06T20:09:04.062Z" }, - { url = "https://files.pythonhosted.org/packages/1b/2b/323e72d5d2fd8de0d9baa443e1ed70363ed7e7b2fb526f5950c5cb99c364/regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e", size = 821149, upload-time = "2024-11-06T20:09:06.237Z" }, - { url = "https://files.pythonhosted.org/packages/90/30/63373b9ea468fbef8a907fd273e5c329b8c9535fee36fc8dba5fecac475d/regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2", size = 809707, upload-time = "2024-11-06T20:09:07.715Z" }, - { url = "https://files.pythonhosted.org/packages/f2/98/26d3830875b53071f1f0ae6d547f1d98e964dd29ad35cbf94439120bb67a/regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf", size = 781702, upload-time = "2024-11-06T20:09:10.101Z" }, - { url = "https://files.pythonhosted.org/packages/87/55/eb2a068334274db86208ab9d5599ffa63631b9f0f67ed70ea7c82a69bbc8/regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c", size = 771976, upload-time = "2024-11-06T20:09:11.566Z" }, - { url = "https://files.pythonhosted.org/packages/74/c0/be707bcfe98254d8f9d2cff55d216e946f4ea48ad2fd8cf1428f8c5332ba/regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86", size = 697397, upload-time = "2024-11-06T20:09:13.119Z" }, - { url = "https://files.pythonhosted.org/packages/49/dc/bb45572ceb49e0f6509f7596e4ba7031f6819ecb26bc7610979af5a77f45/regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67", size = 768726, upload-time = "2024-11-06T20:09:14.85Z" }, - { url = "https://files.pythonhosted.org/packages/5a/db/f43fd75dc4c0c2d96d0881967897926942e935d700863666f3c844a72ce6/regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d", size = 775098, upload-time = "2024-11-06T20:09:16.504Z" }, - { url = "https://files.pythonhosted.org/packages/99/d7/f94154db29ab5a89d69ff893159b19ada89e76b915c1293e98603d39838c/regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2", size = 839325, upload-time = "2024-11-06T20:09:18.698Z" }, - { url = "https://files.pythonhosted.org/packages/f7/17/3cbfab1f23356fbbf07708220ab438a7efa1e0f34195bf857433f79f1788/regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008", size = 843277, upload-time = "2024-11-06T20:09:21.725Z" }, - { url = "https://files.pythonhosted.org/packages/7e/f2/48b393b51900456155de3ad001900f94298965e1cad1c772b87f9cfea011/regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62", size = 773197, upload-time = "2024-11-06T20:09:24.092Z" }, - { url = "https://files.pythonhosted.org/packages/45/3f/ef9589aba93e084cd3f8471fded352826dcae8489b650d0b9b27bc5bba8a/regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e", size = 261714, upload-time = "2024-11-06T20:09:26.36Z" }, - { url = "https://files.pythonhosted.org/packages/42/7e/5f1b92c8468290c465fd50c5318da64319133231415a8aa6ea5ab995a815/regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519", size = 274042, upload-time = "2024-11-06T20:09:28.762Z" }, - { url = "https://files.pythonhosted.org/packages/58/58/7e4d9493a66c88a7da6d205768119f51af0f684fe7be7bac8328e217a52c/regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638", size = 482669, upload-time = "2024-11-06T20:09:31.064Z" }, - { url = "https://files.pythonhosted.org/packages/34/4c/8f8e631fcdc2ff978609eaeef1d6994bf2f028b59d9ac67640ed051f1218/regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7", size = 287684, upload-time = "2024-11-06T20:09:32.915Z" }, - { url = "https://files.pythonhosted.org/packages/c5/1b/f0e4d13e6adf866ce9b069e191f303a30ab1277e037037a365c3aad5cc9c/regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20", size = 284589, upload-time = "2024-11-06T20:09:35.504Z" }, - { url = "https://files.pythonhosted.org/packages/25/4d/ab21047f446693887f25510887e6820b93f791992994f6498b0318904d4a/regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114", size = 792121, upload-time = "2024-11-06T20:09:37.701Z" }, - { url = "https://files.pythonhosted.org/packages/45/ee/c867e15cd894985cb32b731d89576c41a4642a57850c162490ea34b78c3b/regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3", size = 831275, upload-time = "2024-11-06T20:09:40.371Z" }, - { url = "https://files.pythonhosted.org/packages/b3/12/b0f480726cf1c60f6536fa5e1c95275a77624f3ac8fdccf79e6727499e28/regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f", size = 818257, upload-time = "2024-11-06T20:09:43.059Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ce/0d0e61429f603bac433910d99ef1a02ce45a8967ffbe3cbee48599e62d88/regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0", size = 792727, upload-time = "2024-11-06T20:09:48.19Z" }, - { url = "https://files.pythonhosted.org/packages/e4/c1/243c83c53d4a419c1556f43777ccb552bccdf79d08fda3980e4e77dd9137/regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55", size = 780667, upload-time = "2024-11-06T20:09:49.828Z" }, - { url = "https://files.pythonhosted.org/packages/c5/f4/75eb0dd4ce4b37f04928987f1d22547ddaf6c4bae697623c1b05da67a8aa/regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89", size = 776963, upload-time = "2024-11-06T20:09:51.819Z" }, - { url = "https://files.pythonhosted.org/packages/16/5d/95c568574e630e141a69ff8a254c2f188b4398e813c40d49228c9bbd9875/regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d", size = 784700, upload-time = "2024-11-06T20:09:53.982Z" }, - { url = "https://files.pythonhosted.org/packages/8e/b5/f8495c7917f15cc6fee1e7f395e324ec3e00ab3c665a7dc9d27562fd5290/regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34", size = 848592, upload-time = "2024-11-06T20:09:56.222Z" }, - { url = "https://files.pythonhosted.org/packages/1c/80/6dd7118e8cb212c3c60b191b932dc57db93fb2e36fb9e0e92f72a5909af9/regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d", size = 852929, upload-time = "2024-11-06T20:09:58.642Z" }, - { url = "https://files.pythonhosted.org/packages/11/9b/5a05d2040297d2d254baf95eeeb6df83554e5e1df03bc1a6687fc4ba1f66/regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45", size = 781213, upload-time = "2024-11-06T20:10:00.867Z" }, - { url = "https://files.pythonhosted.org/packages/26/b7/b14e2440156ab39e0177506c08c18accaf2b8932e39fb092074de733d868/regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9", size = 261734, upload-time = "2024-11-06T20:10:03.361Z" }, - { url = "https://files.pythonhosted.org/packages/80/32/763a6cc01d21fb3819227a1cc3f60fd251c13c37c27a73b8ff4315433a8e/regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60", size = 274052, upload-time = "2024-11-06T20:10:05.179Z" }, +version = "2026.5.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/0e/49aee608ad09480e7fd276898c99ec6192985fa331abe4eb3a986094490b/regex-2026.5.9.tar.gz", hash = "sha256:a8234aa23ec39894bfe4a3f1b85616a7032481964a13ac6fc9f10de4f6fca270", size = 416074, upload-time = "2026-05-09T23:15:19.37Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/dc/c1f2df4027e82fc54b5a473e4b250f5139faca49a0fbe29a48668d228f34/regex-2026.5.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ccf5249114cc3e772ecdd88a98a86eca0fd74c61ce32a94743758c083fc05d48", size = 489445, upload-time = "2026-05-09T23:12:06.111Z" }, + { url = "https://files.pythonhosted.org/packages/03/d2/59f01110660081cce9c0bc30ebd0b5ee250dacf658e3248ed92f01e0e8ee/regex-2026.5.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46f1326ca6e65b0879d23ca302c0f2415aad42ff0309b9c818e7949fe19a41d8", size = 291271, upload-time = "2026-05-09T23:12:07.731Z" }, + { url = "https://files.pythonhosted.org/packages/58/b6/14b2c84ff90ddb370c81d27503f4a0fcf071496416f4855f6cc8c5d81c35/regex-2026.5.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef31cbfe458e21c6122ba8150ff060e0c7789ed0d26eb423f25472584920b555", size = 289212, upload-time = "2026-05-09T23:12:09.266Z" }, + { url = "https://files.pythonhosted.org/packages/33/6f/1481597e859ef19508b345eec4afd1416ed6e6b459c75a64026ef193aecf/regex-2026.5.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a661a7d270a61f7cf460caee8b9fa2d5ef9e5c681234bcb9e0fe14f488e7dfc", size = 799843, upload-time = "2026-05-09T23:12:16.892Z" }, + { url = "https://files.pythonhosted.org/packages/a5/27/0daffb1a535bb39f422c3d200f4ab023c71110ad66a32b366bee708baba0/regex-2026.5.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1268eddd8486dc561d08eee1156e40aa3a8fe10f4bdec8fa653b455fcbffd12c", size = 789167, upload-time = "2026-05-09T23:12:27.975Z" }, ] [[package]] @@ -2892,36 +2666,23 @@ name = "requests" version = "2.34.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "certifi" }, - { name = "charset-normalizer" }, - { name = "idna" }, - { name = "urllib3" }, + { name = "certifi", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "charset-normalizer", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "idna", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "urllib3", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, ] -[[package]] -name = "requests-toolbelt" -version = "1.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888, upload-time = "2023-05-01T04:11:33.229Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481, upload-time = "2023-05-01T04:11:28.427Z" }, -] - [[package]] name = "rich" version = "13.9.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "markdown-it-py" }, - { name = "pygments" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "markdown-it-py", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pygments", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149, upload-time = "2024-11-01T16:43:57.873Z" } wheels = [ @@ -2933,9 +2694,9 @@ name = "rich-toolkit" version = "0.20.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click" }, - { name = "rich" }, - { name = "typing-extensions" }, + { name = "click", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "rich", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/29/63/3e427c62f1992945c997d4ec31e2fcb37d26aadbe5aa44ae5b29f7f64d26/rich_toolkit-0.20.1.tar.gz", hash = "sha256:c7336ae281f435c785acecaedc4b71d4b663dc73d9c8079fea96372527e822a4", size = 203473, upload-time = "2026-06-05T08:56:57.679Z" } wheels = [ @@ -2948,154 +2709,21 @@ version = "0.7.6" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e5/f5/8bed2310abe4ae04b67a38374a4d311dd85220f5d8da56f47ae9361be0b0/rignore-0.7.6.tar.gz", hash = "sha256:00d3546cd793c30cb17921ce674d2c8f3a4b00501cb0e3dd0e82217dbeba2671", size = 57140, upload-time = "2025-11-05T21:41:21.968Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/86/7a/b970cd0138b0ece72eb28f086e933f9ed75b795716ad3de5ab22994b3b54/rignore-0.7.6-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f3c74a7e5ee77aea669c95fdb3933f2a6c7549893700082e759128a29cf67e45", size = 884999, upload-time = "2025-11-05T20:42:38.373Z" }, - { url = "https://files.pythonhosted.org/packages/ca/05/23faca29616d8966ada63fb0e13c214107811fa9a0aba2275e4c7ca63bd5/rignore-0.7.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7202404958f5fe3474bac91f65350f0b1dde1a5e05089f2946549b7e91e79ec", size = 824824, upload-time = "2025-11-05T20:42:22.1Z" }, - { url = "https://files.pythonhosted.org/packages/fa/2e/05a1e61f04cf2548524224f0b5f21ca19ea58f7273a863bac10846b8ff69/rignore-0.7.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bde7c5835fa3905bfb7e329a4f1d7eccb676de63da7a3f934ddd5c06df20597", size = 899121, upload-time = "2025-11-05T20:40:48.94Z" }, - { url = "https://files.pythonhosted.org/packages/ff/35/71518847e10bdbf359badad8800e4681757a01f4777b3c5e03dbde8a42d8/rignore-0.7.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:626c3d4ba03af266694d25101bc1d8d16eda49c5feb86cedfec31c614fceca7d", size = 873813, upload-time = "2025-11-05T20:41:04.71Z" }, - { url = "https://files.pythonhosted.org/packages/f6/c8/32ae405d3e7fd4d9f9b7838f2fcca0a5005bb87fa514b83f83fd81c0df22/rignore-0.7.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a43841e651e7a05a4274b9026cc408d1912e64016ede8cd4c145dae5d0635be", size = 1168019, upload-time = "2025-11-05T20:41:20.723Z" }, - { url = "https://files.pythonhosted.org/packages/25/98/013c955982bc5b4719bf9a5bea58be317eea28aa12bfd004025e3cd7c000/rignore-0.7.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7978c498dbf7f74d30cdb8859fe612167d8247f0acd377ae85180e34490725da", size = 942822, upload-time = "2025-11-05T20:41:36.99Z" }, - { url = "https://files.pythonhosted.org/packages/90/fb/9a3f3156c6ed30bcd597e63690353edac1fcffe9d382ad517722b56ac195/rignore-0.7.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d22f72ab695c07d2d96d2a645208daff17084441b5d58c07378c9dd6f9c4c87", size = 959820, upload-time = "2025-11-05T20:42:06.364Z" }, - { url = "https://files.pythonhosted.org/packages/5e/b2/93bf609633021e9658acaff24cfb055d8cdaf7f5855d10ebb35307900dda/rignore-0.7.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5bd8e1a91ed1a789b2cbe39eeea9204a6719d4f2cf443a9544b521a285a295f", size = 985050, upload-time = "2025-11-05T20:41:51.124Z" }, - { url = "https://files.pythonhosted.org/packages/69/bc/ec2d040469bdfd7b743df10f2201c5d285009a4263d506edbf7a06a090bb/rignore-0.7.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bc1fc03efad5789365018e94ac4079f851a999bc154d1551c45179f7fcf45322", size = 1079164, upload-time = "2025-11-05T21:40:10.368Z" }, - { url = "https://files.pythonhosted.org/packages/df/26/4b635f4ea5baf4baa8ba8eee06163f6af6e76dfbe72deb57da34bb24b19d/rignore-0.7.6-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:ce2617fe28c51367fd8abfd4eeea9e61664af63c17d4ea00353d8ef56dfb95fa", size = 1139028, upload-time = "2025-11-05T21:40:27.977Z" }, - { url = "https://files.pythonhosted.org/packages/6a/54/a3147ebd1e477b06eb24e2c2c56d951ae5faa9045b7b36d7892fec5080d9/rignore-0.7.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:7c4ad2cee85068408e7819a38243043214e2c3047e9bd4c506f8de01c302709e", size = 1119024, upload-time = "2025-11-05T21:40:45.148Z" }, - { url = "https://files.pythonhosted.org/packages/fb/f4/27475db769a57cff18fe7e7267b36e6cdb5b1281caa185ba544171106cba/rignore-0.7.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:02cd240bfd59ecc3907766f4839cbba20530a2e470abca09eaa82225e4d946fb", size = 1128531, upload-time = "2025-11-05T21:41:02.734Z" }, - { url = "https://files.pythonhosted.org/packages/97/32/6e782d3b352e4349fa0e90bf75b13cb7f11d8908b36d9e2b262224b65d9a/rignore-0.7.6-cp310-cp310-win32.whl", hash = "sha256:fe2bd8fa1ff555259df54c376abc73855cb02628a474a40d51b358c3a1ddc55b", size = 646817, upload-time = "2025-11-05T21:41:47.51Z" }, - { url = "https://files.pythonhosted.org/packages/c0/8a/53185c69abb3bb362e8a46b8089999f820bf15655629ff8395107633c8ab/rignore-0.7.6-cp310-cp310-win_amd64.whl", hash = "sha256:d80afd6071c78baf3765ec698841071b19e41c326f994cfa69b5a1df676f5d39", size = 727001, upload-time = "2025-11-05T21:41:32.778Z" }, - { url = "https://files.pythonhosted.org/packages/25/41/b6e2be3069ef3b7f24e35d2911bd6deb83d20ed5642ad81d5a6d1c015473/rignore-0.7.6-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:40be8226e12d6653abbebaffaea2885f80374c1c8f76fe5ca9e0cadd120a272c", size = 885285, upload-time = "2025-11-05T20:42:39.763Z" }, - { url = "https://files.pythonhosted.org/packages/52/66/ba7f561b6062402022887706a7f2b2c2e2e2a28f1e3839202b0a2f77e36d/rignore-0.7.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:182f4e5e4064d947c756819446a7d4cdede8e756b8c81cf9e509683fe38778d7", size = 823882, upload-time = "2025-11-05T20:42:23.488Z" }, - { url = "https://files.pythonhosted.org/packages/f5/81/4087453df35a90b07370647b19017029324950c1b9137d54bf1f33843f17/rignore-0.7.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16b63047648a916a87be1e51bb5c009063f1b8b6f5afe4f04f875525507e63dc", size = 899362, upload-time = "2025-11-05T20:40:51.111Z" }, - { url = "https://files.pythonhosted.org/packages/fb/c9/390a8fdfabb76d71416be773bd9f162977bd483084f68daf19da1dec88a6/rignore-0.7.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ba5524f5178deca4d7695e936604ebc742acb8958f9395776e1fcb8133f8257a", size = 873633, upload-time = "2025-11-05T20:41:06.193Z" }, - { url = "https://files.pythonhosted.org/packages/df/c9/79404fcb0faa76edfbc9df0901f8ef18568d1104919ebbbad6d608c888d1/rignore-0.7.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:62020dbb89a1dd4b84ab3d60547b3b2eb2723641d5fb198463643f71eaaed57d", size = 1167633, upload-time = "2025-11-05T20:41:22.491Z" }, - { url = "https://files.pythonhosted.org/packages/6e/8d/b3466d32d445d158a0aceb80919085baaae495b1f540fb942f91d93b5e5b/rignore-0.7.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b34acd532769d5a6f153a52a98dcb81615c949ab11697ce26b2eb776af2e174d", size = 941434, upload-time = "2025-11-05T20:41:38.151Z" }, { url = "https://files.pythonhosted.org/packages/e8/40/9cd949761a7af5bc27022a939c91ff622d29c7a0b66d0c13a863097dde2d/rignore-0.7.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c5e53b752f9de44dff7b3be3c98455ce3bf88e69d6dc0cf4f213346c5e3416c", size = 959461, upload-time = "2025-11-05T20:42:08.476Z" }, - { url = "https://files.pythonhosted.org/packages/b5/87/1e1a145731f73bdb7835e11f80da06f79a00d68b370d9a847de979575e6d/rignore-0.7.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:25b3536d13a5d6409ce85f23936f044576eeebf7b6db1d078051b288410fc049", size = 985323, upload-time = "2025-11-05T20:41:52.735Z" }, - { url = "https://files.pythonhosted.org/packages/6c/31/1ecff992fc3f59c4fcdcb6c07d5f6c1e6dfb55ccda19c083aca9d86fa1c6/rignore-0.7.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6e01cad2b0b92f6b1993f29fc01f23f2d78caf4bf93b11096d28e9d578eb08ce", size = 1079173, upload-time = "2025-11-05T21:40:12.007Z" }, - { url = "https://files.pythonhosted.org/packages/17/18/162eedadb4c2282fa4c521700dbf93c9b14b8842e8354f7d72b445b8d593/rignore-0.7.6-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5991e46ab9b4868334c9e372ab0892b0150f3f586ff2b1e314272caeb38aaedb", size = 1139012, upload-time = "2025-11-05T21:40:29.399Z" }, - { url = "https://files.pythonhosted.org/packages/78/96/a9ca398a8af74bb143ad66c2a31303c894111977e28b0d0eab03867f1b43/rignore-0.7.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6c8ae562e5d1246cba5eaeb92a47b2a279e7637102828dde41dcbe291f529a3e", size = 1118827, upload-time = "2025-11-05T21:40:46.6Z" }, { url = "https://files.pythonhosted.org/packages/9f/22/1c1a65047df864def9a047dbb40bc0b580b8289a4280e62779cd61ae21f2/rignore-0.7.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aaf938530dcc0b47c4cfa52807aa2e5bfd5ca6d57a621125fe293098692f6345", size = 1128182, upload-time = "2025-11-05T21:41:04.239Z" }, - { url = "https://files.pythonhosted.org/packages/bd/f4/1526eb01fdc2235aca1fd9d0189bee4021d009a8dcb0161540238c24166e/rignore-0.7.6-cp311-cp311-win32.whl", hash = "sha256:166ebce373105dd485ec213a6a2695986346e60c94ff3d84eb532a237b24a4d5", size = 646547, upload-time = "2025-11-05T21:41:49.439Z" }, - { url = "https://files.pythonhosted.org/packages/7c/c8/dda0983e1845706beb5826459781549a840fe5a7eb934abc523e8cd17814/rignore-0.7.6-cp311-cp311-win_amd64.whl", hash = "sha256:44f35ee844b1a8cea50d056e6a595190ce9d42d3cccf9f19d280ae5f3058973a", size = 727139, upload-time = "2025-11-05T21:41:34.367Z" }, - { url = "https://files.pythonhosted.org/packages/e3/47/eb1206b7bf65970d41190b879e1723fc6bbdb2d45e53565f28991a8d9d96/rignore-0.7.6-cp311-cp311-win_arm64.whl", hash = "sha256:14b58f3da4fa3d5c3fa865cab49821675371f5e979281c683e131ae29159a581", size = 657598, upload-time = "2025-11-05T21:41:23.758Z" }, - { url = "https://files.pythonhosted.org/packages/85/12/62d690b4644c330d7ac0f739b7f078190ab4308faa909a60842d0e4af5b2/rignore-0.7.6-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c3d3a523af1cd4ed2c0cba8d277a32d329b0c96ef9901fb7ca45c8cfaccf31a5", size = 887462, upload-time = "2025-11-05T20:42:50.804Z" }, - { url = "https://files.pythonhosted.org/packages/05/bc/6528a0e97ed2bd7a7c329183367d1ffbc5b9762ae8348d88dae72cc9d1f5/rignore-0.7.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:990853566e65184a506e1e2af2d15045afad3ebaebb8859cb85b882081915110", size = 826918, upload-time = "2025-11-05T20:42:33.689Z" }, - { url = "https://files.pythonhosted.org/packages/3e/2c/7d7bad116e09a04e9e1688c6f891fa2d4fd33f11b69ac0bd92419ddebeae/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cab9ff2e436ce7240d7ee301c8ef806ed77c1fd6b8a8239ff65f9bbbcb5b8a3", size = 900922, upload-time = "2025-11-05T20:41:00.361Z" }, - { url = "https://files.pythonhosted.org/packages/09/ba/e5ea89fbde8e37a90ce456e31c5e9d85512cef5ae38e0f4d2426eb776a19/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d1a6671b2082c13bfd9a5cf4ce64670f832a6d41470556112c4ab0b6519b2fc4", size = 876987, upload-time = "2025-11-05T20:41:16.219Z" }, - { url = "https://files.pythonhosted.org/packages/d0/fb/93d14193f0ec0c3d35b763f0a000e9780f63b2031f3d3756442c2152622d/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2468729b4c5295c199d084ab88a40afcb7c8b974276805105239c07855bbacee", size = 1171110, upload-time = "2025-11-05T20:41:32.631Z" }, - { url = "https://files.pythonhosted.org/packages/9e/46/08436312ff96ffa29cfa4e1a987efc37e094531db46ba5e9fda9bb792afd/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:775710777fd71e5fdf54df69cdc249996a1d6f447a2b5bfb86dbf033fddd9cf9", size = 943339, upload-time = "2025-11-05T20:41:47.128Z" }, - { url = "https://files.pythonhosted.org/packages/34/28/3b3c51328f505cfaf7e53f408f78a1e955d561135d02f9cb0341ea99f69a/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4565407f4a77f72cf9d91469e75d15d375f755f0a01236bb8aaa176278cc7085", size = 961680, upload-time = "2025-11-05T20:42:18.061Z" }, - { url = "https://files.pythonhosted.org/packages/5c/9e/cbff75c8676d4f4a90bd58a1581249d255c7305141b0868f0abc0324836b/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dc44c33f8fb2d5c9da748de7a6e6653a78aa740655e7409895e94a247ffa97c8", size = 987045, upload-time = "2025-11-05T20:42:02.315Z" }, - { url = "https://files.pythonhosted.org/packages/8c/25/d802d1d369502a7ddb8816059e7c79d2d913e17df975b863418e0aca4d8a/rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8f32478f05540513c11923e8838afab9efef0131d66dca7f67f0e1bbd118af6a", size = 1080310, upload-time = "2025-11-05T21:40:23.184Z" }, - { url = "https://files.pythonhosted.org/packages/43/f0/250b785c2e473b1ab763eaf2be820934c2a5409a722e94b279dddac21c7d/rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:1b63a3dd76225ea35b01dd6596aa90b275b5d0f71d6dc28fce6dd295d98614aa", size = 1140998, upload-time = "2025-11-05T21:40:40.603Z" }, - { url = "https://files.pythonhosted.org/packages/f5/d6/bb42fd2a8bba6aea327962656e20621fd495523259db40cfb4c5f760f05c/rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:fe6c41175c36554a4ef0994cd1b4dbd6d73156fca779066456b781707402048e", size = 1121178, upload-time = "2025-11-05T21:40:57.585Z" }, - { url = "https://files.pythonhosted.org/packages/97/f4/aeb548374129dce3dc191a4bb598c944d9ed663f467b9af830315d86059c/rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9a0c6792406ae36f4e7664dc772da909451d46432ff8485774526232d4885063", size = 1130190, upload-time = "2025-11-05T21:41:16.403Z" }, - { url = "https://files.pythonhosted.org/packages/82/78/a6250ff0c49a3cdb943910ada4116e708118e9b901c878cfae616c80a904/rignore-0.7.6-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a20b6fb61bcced9a83dfcca6599ad45182b06ba720cff7c8d891e5b78db5b65f", size = 886470, upload-time = "2025-11-05T20:42:52.314Z" }, - { url = "https://files.pythonhosted.org/packages/35/af/c69c0c51b8f9f7914d95c4ea91c29a2ac067572048cae95dd6d2efdbe05d/rignore-0.7.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:392dcabfecbe176c9ebbcb40d85a5e86a5989559c4f988c2741da7daf1b5be25", size = 825976, upload-time = "2025-11-05T20:42:35.118Z" }, - { url = "https://files.pythonhosted.org/packages/f1/d2/1b264f56132264ea609d3213ab603d6a27016b19559a1a1ede1a66a03dcd/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22baa462abdc36fdd5a5e2dae423107723351b85ff093762f9261148b9d0a04a", size = 899739, upload-time = "2025-11-05T20:41:01.518Z" }, - { url = "https://files.pythonhosted.org/packages/55/e4/b3c5dfdd8d8a10741dfe7199ef45d19a0e42d0c13aa377c83bd6caf65d90/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53fb28882d2538cb2d231972146c4927a9d9455e62b209f85d634408c4103538", size = 874843, upload-time = "2025-11-05T20:41:17.687Z" }, - { url = "https://files.pythonhosted.org/packages/cc/10/d6f3750233881a2a154cefc9a6a0a9b19da526b19f7f08221b552c6f827d/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87409f7eeb1103d6b77f3472a3a0d9a5953e3ae804a55080bdcb0120ee43995b", size = 1170348, upload-time = "2025-11-05T20:41:34.21Z" }, - { url = "https://files.pythonhosted.org/packages/6e/10/ad98ca05c9771c15af734cee18114a3c280914b6e34fde9ffea2e61e88aa/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:684014e42e4341ab3ea23a203551857fcc03a7f8ae96ca3aefb824663f55db32", size = 942315, upload-time = "2025-11-05T20:41:48.508Z" }, { url = "https://files.pythonhosted.org/packages/de/00/ab5c0f872acb60d534e687e629c17e0896c62da9b389c66d3aa16b817aa8/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77356ebb01ba13f8a425c3d30fcad40e57719c0e37670d022d560884a30e4767", size = 961047, upload-time = "2025-11-05T20:42:19.403Z" }, - { url = "https://files.pythonhosted.org/packages/b8/86/3030fdc363a8f0d1cd155b4c453d6db9bab47a24fcc64d03f61d9d78fe6a/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6cbd8a48abbd3747a6c830393cd578782fab5d43f4deea48c5f5e344b8fed2b0", size = 986090, upload-time = "2025-11-05T20:42:03.581Z" }, - { url = "https://files.pythonhosted.org/packages/33/b8/133aa4002cee0ebbb39362f94e4898eec7fbd09cec9fcbce1cd65b355b7f/rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2673225dcec7f90497e79438c35e34638d0d0391ccea3cbb79bfb9adc0dc5bd7", size = 1079656, upload-time = "2025-11-05T21:40:24.89Z" }, - { url = "https://files.pythonhosted.org/packages/67/56/36d5d34210e5e7dfcd134eed8335b19e80ae940ee758f493e4f2b344dd70/rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:c081f17290d8a2b96052b79207622aa635686ea39d502b976836384ede3d303c", size = 1139789, upload-time = "2025-11-05T21:40:42.119Z" }, - { url = "https://files.pythonhosted.org/packages/6b/5b/bb4f9420802bf73678033a4a55ab1bede36ce2e9b41fec5f966d83d932b3/rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:57e8327aacc27f921968cb2a174f9e47b084ce9a7dd0122c8132d22358f6bd79", size = 1120308, upload-time = "2025-11-05T21:40:59.402Z" }, { url = "https://files.pythonhosted.org/packages/ce/8b/a1299085b28a2f6135e30370b126e3c5055b61908622f2488ade67641479/rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:d8955b57e42f2a5434670d5aa7b75eaf6e74602ccd8955dddf7045379cd762fb", size = 1129444, upload-time = "2025-11-05T21:41:17.906Z" }, ] -[[package]] -name = "rpds-py" -version = "0.30.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version < '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", -] -sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490, upload-time = "2025-11-30T20:21:33.256Z" }, - { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751, upload-time = "2025-11-30T20:21:34.591Z" }, - { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696, upload-time = "2025-11-30T20:21:36.122Z" }, - { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136, upload-time = "2025-11-30T20:21:37.728Z" }, - { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699, upload-time = "2025-11-30T20:21:38.92Z" }, - { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022, upload-time = "2025-11-30T20:21:40.407Z" }, - { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522, upload-time = "2025-11-30T20:21:42.17Z" }, - { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579, upload-time = "2025-11-30T20:21:43.769Z" }, - { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305, upload-time = "2025-11-30T20:21:44.994Z" }, - { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503, upload-time = "2025-11-30T20:21:46.91Z" }, - { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322, upload-time = "2025-11-30T20:21:48.709Z" }, - { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792, upload-time = "2025-11-30T20:21:50.024Z" }, - { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901, upload-time = "2025-11-30T20:21:51.32Z" }, - { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823, upload-time = "2025-11-30T20:21:52.505Z" }, - { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157, upload-time = "2025-11-30T20:21:53.789Z" }, - { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676, upload-time = "2025-11-30T20:21:55.475Z" }, - { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938, upload-time = "2025-11-30T20:21:57.079Z" }, - { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932, upload-time = "2025-11-30T20:21:58.47Z" }, - { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830, upload-time = "2025-11-30T20:21:59.699Z" }, - { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033, upload-time = "2025-11-30T20:22:00.991Z" }, - { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828, upload-time = "2025-11-30T20:22:02.723Z" }, - { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683, upload-time = "2025-11-30T20:22:04.367Z" }, - { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583, upload-time = "2025-11-30T20:22:05.814Z" }, - { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496, upload-time = "2025-11-30T20:22:07.713Z" }, - { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669, upload-time = "2025-11-30T20:22:09.312Z" }, - { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011, upload-time = "2025-11-30T20:22:11.309Z" }, - { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406, upload-time = "2025-11-30T20:22:13.101Z" }, - { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024, upload-time = "2025-11-30T20:22:14.853Z" }, - { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069, upload-time = "2025-11-30T20:22:16.577Z" }, - { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292, upload-time = "2025-11-30T20:24:16.537Z" }, - { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128, upload-time = "2025-11-30T20:24:18.086Z" }, - { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542, upload-time = "2025-11-30T20:24:20.092Z" }, - { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004, upload-time = "2025-11-30T20:24:22.231Z" }, - { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063, upload-time = "2025-11-30T20:24:24.302Z" }, - { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099, upload-time = "2025-11-30T20:24:25.916Z" }, - { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177, upload-time = "2025-11-30T20:24:27.834Z" }, - { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015, upload-time = "2025-11-30T20:24:29.457Z" }, - { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736, upload-time = "2025-11-30T20:24:31.22Z" }, - { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981, upload-time = "2025-11-30T20:24:32.934Z" }, - { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782, upload-time = "2025-11-30T20:24:35.169Z" }, - { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191, upload-time = "2025-11-30T20:24:36.853Z" }, -] - [[package]] name = "rpds-py" version = "2026.5.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.11' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version >= '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", -] sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459, upload-time = "2026-05-28T12:02:13.232Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609, upload-time = "2026-05-28T11:58:50.78Z" }, - { url = "https://files.pythonhosted.org/packages/b6/95/f8203fd997484b1690a6869cd0e503b6c3c6be55b0ecc36d1a491fe742f0/rpds_py-2026.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:99ab6ba7bfa2cb0f96a04e3652355bf04e3f51aceb1e943b8541dab7ba4828cc", size = 348460, upload-time = "2026-05-28T11:58:52.374Z" }, - { url = "https://files.pythonhosted.org/packages/33/8c/b47326ad2f0be545a5e5c1a55937a12afaea7d392ba2837bb9680f57e6c9/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0efbe45632665e53e3db8fe1e5692db58fc5cb9bab4459d570b83efefe11164", size = 381031, upload-time = "2026-05-28T11:58:53.775Z" }, - { url = "https://files.pythonhosted.org/packages/22/0b/e83bbd97ffac6f6389b605cd4e1c8ac5761dc7e977769c9255d8c5adb7bd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01d17b29c0c23d82b1f4751147ec49cf451f1fc2554eb9ef5f957e55d2656ead", size = 387121, upload-time = "2026-05-28T11:58:55.243Z" }, - { url = "https://files.pythonhosted.org/packages/fd/0e/d285d1bc8864245919c61e1ca82263e4a66d337759c3a4cef72766ff9afc/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7559f72b94ae52659086c595dfa017cde03155f7832071d30959049052cb3ece", size = 501026, upload-time = "2026-05-28T11:58:56.788Z" }, - { url = "https://files.pythonhosted.org/packages/86/06/ccb2109a1e543437b5e43816f2b43b9554cc6783145528a4e3711e05c011/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e25b7088f9ccbfc0dfcaa52bf969300ca229e10ecf758974ebcbb080a4b37bb", size = 391865, upload-time = "2026-05-28T11:58:58.298Z" }, { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012, upload-time = "2026-05-28T11:58:59.589Z" }, - { url = "https://files.pythonhosted.org/packages/97/64/1eae54e34d5161f9969295e80bd6b62a55f2b6ac5f2a5b60d02c2140e758/rpds_py-2026.5.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:85264a90ff4c05c1568dd65f5921c837614b67c60358fb4c17df3b7f2e90690a", size = 391111, upload-time = "2026-05-28T11:59:01.104Z" }, - { url = "https://files.pythonhosted.org/packages/d8/34/5bb334a5a0f65d77869217c4654f34c78a7d11b93938a3c076a2edeafc52/rpds_py-2026.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe71bca7d547acb17027c7fd1624ff8aae623499c498d3e7011182c4de5c25e0", size = 409225, upload-time = "2026-05-28T11:59:02.433Z" }, - { url = "https://files.pythonhosted.org/packages/16/0f/007ec21283b5b040b4ec3bd95e0402591e22bfa7d5c93dfe01c465c2d2d7/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05fa4f41f37ec97c9c260441a940450a192f78d774d2b097eee1379f1e1246a", size = 556487, upload-time = "2026-05-28T11:59:04.012Z" }, - { url = "https://files.pythonhosted.org/packages/ff/10/5437c94508169b6b22d8418fef7a66e9ffb5f3b9e9c94460f2eedafe06ff/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df1d2a1996755b24b9ecee92cb4d36c28f86f464a6a173349c26bab41e94b8c2", size = 620798, upload-time = "2026-05-28T11:59:05.485Z" }, { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053, upload-time = "2026-05-28T11:59:06.837Z" }, - { url = "https://files.pythonhosted.org/packages/6c/31/750617dd0ae1752471bf43f9e41d263398fae7cde7849d23b8574a70e617/rpds_py-2026.5.1-cp311-cp311-win32.whl", hash = "sha256:3684a59b158a7683aaeb8e25352e9a9dd2122cec78f2d8530266e4f91b4c7b3f", size = 214390, upload-time = "2026-05-28T11:59:08.402Z" }, - { url = "https://files.pythonhosted.org/packages/3c/bb/3dcab0e1d9516303f2eb672a5d6f62eca5a69e2886301e9c8c54b520c39b/rpds_py-2026.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:7bd530e6a530bb3ea892f194fafa455f3516ac25ecf7143fd33c09be62b0470a", size = 231097, upload-time = "2026-05-28T11:59:09.786Z" }, - { url = "https://files.pythonhosted.org/packages/49/d6/c6bbf5cb1cf12b9732df8074b57f6ef8341ba884c95d40632ae8bddb44e4/rpds_py-2026.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:0a5ae4dbe43c1076983b72616496919872ae7bbe7a1e21cc48336bc3154d130b", size = 226361, upload-time = "2026-05-28T11:59:11.079Z" }, - { url = "https://files.pythonhosted.org/packages/42/56/3fe0fb34820ff667be791b3a3c22b85e8bcba54e9c832f47438c191fa7be/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:edf2765d84e42447f112ad877af8fe1db0089aaec5b28e88d6eab45e7fe99cea", size = 357151, upload-time = "2026-05-28T12:01:53.43Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f2/3eb9ccdb9f143b8c9b003978898cb497f942a324c077401e6b8834238e63/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad3773236e95f7f33991eb125224b7da66f206504d032a253a02da7e134519fb", size = 350195, upload-time = "2026-05-28T12:01:54.901Z" }, - { url = "https://files.pythonhosted.org/packages/a7/24/dbda232bc4f3ed732120692ab0d2c8402cb020516556d8bee622dcef2413/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a04df86b3f0fade39ec8fd0e0aab089b1da9fbd2b48df778a57ef96f5e7d38df", size = 381850, upload-time = "2026-05-28T12:01:56.601Z" }, - { url = "https://files.pythonhosted.org/packages/40/30/32e769839a358f78810c234f160f2cc21d1e4e47e1c0e0e0d535be5a0219/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6142dbd80c4df62a5d899f0d616d417f84e0bc8d32526c8e5589019d75d028a7", size = 387899, upload-time = "2026-05-28T12:01:58.212Z" }, - { url = "https://files.pythonhosted.org/packages/ab/86/ec84d243aadb3b34b71dd26a010d0930b2d284ff5fc9a69fec53810ee6fd/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b35217adefe87f2fe4db7e9766cabe84744bfe9616d9667be18988928c7f2dc", size = 501618, upload-time = "2026-05-28T12:01:59.888Z" }, - { url = "https://files.pythonhosted.org/packages/74/25/b60e52686bbff777a64f9e4f4d3dd57980dc846913777177a2c92e4937aa/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b95d5e11fc712b752081183a55a244c03cd00570489edd7014d8899f8ceb8162", size = 394003, upload-time = "2026-05-28T12:02:01.482Z" }, { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778, upload-time = "2026-05-28T12:02:03.197Z" }, - { url = "https://files.pythonhosted.org/packages/31/00/c7dba3fc8a3da8cb3f6db1eb3386be4d79c2e97c6890d20eb9ac66ae8c43/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:6f249f8b860a200ad35193af961183ebe9132710484e6f6ce0cf89fd83c63a9a", size = 392359, upload-time = "2026-05-28T12:02:04.817Z" }, - { url = "https://files.pythonhosted.org/packages/93/dd/472ba494c70753f93745992c99855bee0636daf74e6984e5e003f150316f/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4abbf391a70be864920858bf360f4fb380577c9a0f732438a1996726e2c195b", size = 412820, upload-time = "2026-05-28T12:02:06.401Z" }, - { url = "https://files.pythonhosted.org/packages/1d/6f/93831a3bfe789542ed0c1d0d74b78b440f055d6dc3ea4640eba2d95e6e23/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c74005a7bb87752acf351c93897ec63ad77a07a0da7ecad9c050e32e7286ba34", size = 557243, upload-time = "2026-05-28T12:02:08.013Z" }, - { url = "https://files.pythonhosted.org/packages/1f/ff/0b3d604614ffc77522c6b288fdbce68957eb583da1002aa65ba38ac0ee40/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:8213afbe8a3a906fb9acb2014423fe3359ee783d0bf90995f70623a3217bfa6c", size = 623541, upload-time = "2026-05-28T12:02:09.661Z" }, { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326, upload-time = "2026-05-28T12:02:11.47Z" }, ] @@ -3105,139 +2733,34 @@ version = "0.15.18" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/74/98/1295ad5a5aa9bc85bdcdfa5d82fe7b49c61af5657df4f227637ff9de0da6/ruff-0.15.18.tar.gz", hash = "sha256:2698a964c70e8bf402dcb99c8810472d270d141e7aa8c4e13599fd52033a2f33", size = 4761437, upload-time = "2026-06-18T18:25:39.224Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/d0/686e984941269621e2be72612d5c1e461f8f7b38415a2a7d7a81c8ae6715/ruff-0.15.18-py3-none-linux_armv6l.whl", hash = "sha256:8b6850172348c8381b8b3084c5915a4393c2373b9b54cd5b5e1ea15812bc10df", size = 10887308, upload-time = "2026-06-18T18:25:03.062Z" }, { url = "https://files.pythonhosted.org/packages/ed/21/bc4123e3f5515ee99f8ce1eb93a14a0628fe4d1678663cd08f933ac16931/ruff-0.15.18-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3fccc153a85417dcd976883160cacce486997b0a0058dd18f54b8aaaac7d1ce2", size = 11281305, upload-time = "2026-06-18T18:25:30.026Z" }, { url = "https://files.pythonhosted.org/packages/51/93/4769464c25cf7ab2acb3c7dda9cad3d867eb41c59565b3e2a9d17249c90c/ruff-0.15.18-py3-none-macosx_11_0_arm64.whl", hash = "sha256:08d4c86a68f2c3ec2c9d56380a71fb4a4f65373055cbb8caabd645e9102f38d4", size = 10641215, upload-time = "2026-06-18T18:25:15.802Z" }, - { url = "https://files.pythonhosted.org/packages/6c/42/56926d17120db2c208d76bf60a1a019644dd9e91dc27f0f95c9caddb1366/ruff-0.15.18-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37e5108745c2c0705da916d7d4de533ddf547051ef45f62888c31bae73f66318", size = 10957224, upload-time = "2026-06-18T18:25:36.955Z" }, - { url = "https://files.pythonhosted.org/packages/22/4f/d43fab8d8189afde803103022d000a8ef9f230616d436d52a8b2b8d63b50/ruff-0.15.18-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:56949a6ce8b3abde54c0bcb22cebfe57e8771cadc84b407ae8b8eaf67ebdcd43", size = 10699024, upload-time = "2026-06-18T18:25:05.707Z" }, - { url = "https://files.pythonhosted.org/packages/63/42/1e3e4c68bd408b9768cf3e439acbe2c78245225faef253f7028a0cdb63e0/ruff-0.15.18-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01a754cd6a1b630d3f97e33eb452cf7a98040482318e870f8bc52a5a30e62657", size = 11491458, upload-time = "2026-06-18T18:25:20.275Z" }, - { url = "https://files.pythonhosted.org/packages/20/77/47a3484bea8521e14a203d98c389c5c97846675e4f02734672da4a69b52a/ruff-0.15.18-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ba7a07e03a44dbf10bb086ee06705b173625014ec99f73a7e6836a5e5590a0c", size = 12383752, upload-time = "2026-06-18T18:25:22.535Z" }, - { url = "https://files.pythonhosted.org/packages/0a/ca/054159590787023d83b658a1a1819c4c8910114e7015069340b71c0961cb/ruff-0.15.18-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a2c40a41a4cadbcf5897b548ab29dfe248b20c540961c0247d98a3973c70403", size = 11577923, upload-time = "2026-06-18T18:25:10.702Z" }, { url = "https://files.pythonhosted.org/packages/6d/ff/d353d6b7bbd73cc0ec37f4463d7540e45e894338abdd9964eee0de332708/ruff-0.15.18-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f0480ce690cbb6c4db6e5d08f19fce98e10ba131a8b60c1bcdac42771e3ae2d", size = 11583925, upload-time = "2026-06-18T18:25:32.391Z" }, - { url = "https://files.pythonhosted.org/packages/c1/4a/891f89b9c296ed3e5f3ece1a5629badc989d9a8fdaa30431aaf4774bc1c2/ruff-0.15.18-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2330215f1f393fa8733f55edce04fcf94c36a2c460fcde31f78cc84e4951e9b1", size = 11582834, upload-time = "2026-06-18T18:25:27.309Z" }, - { url = "https://files.pythonhosted.org/packages/32/a3/ed9e370154bf85de360b93c03026157f02d4943b2d01ff4945f4429f8e8a/ruff-0.15.18-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a6aa6a3d979e48ae617578183674bf264fbe7d0114a796a26bd678d67963c7ff", size = 10927328, upload-time = "2026-06-18T18:25:34.676Z" }, - { url = "https://files.pythonhosted.org/packages/f5/d1/5cf5909329fedb5d39d555ee818ba5cf4638e1a301b89785d34f2905bfcb/ruff-0.15.18-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a81beadbbff2c9c245561ae3f77b16709d87f35eec650d0501679239d3449b22", size = 10693187, upload-time = "2026-06-18T18:25:08.245Z" }, - { url = "https://files.pythonhosted.org/packages/fd/44/ff6c635cf2c4f4e7b618b6640da057376baa36014695487d88aed4794268/ruff-0.15.18-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2186d9e940ae332ab293623a75b5f4fe49565f449954d50a72a046683aa6b809", size = 11208721, upload-time = "2026-06-18T18:25:41.327Z" }, { url = "https://files.pythonhosted.org/packages/88/d9/5baa2a30861adfb7022cf33c1e35b2fc18085b08c16f83eff4c7b99a5f48/ruff-0.15.18-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5c2abf140438032bc77b2284a6c9944ecd8a19e5f1c7b52b1b8e4a0a80d19a7a", size = 11678599, upload-time = "2026-06-18T18:25:13.607Z" }, - { url = "https://files.pythonhosted.org/packages/c3/1a/0725a7cfdc32ff769efb96ee782bec882e16448c5d9e3be947ec4c04ce27/ruff-0.15.18-py3-none-win32.whl", hash = "sha256:02299e6e9fa5b297a3f6d5d10d7bcd655c925b028bb8b9d4588214549c6b9ec4", size = 10901903, upload-time = "2026-06-18T18:25:24.755Z" }, - { url = "https://files.pythonhosted.org/packages/f3/51/805d9f6fb7970505c3504794a5ec350f605361b807fef4dcf214ebd35e72/ruff-0.15.18-py3-none-win_amd64.whl", hash = "sha256:dac80dc8d26b2257dbefabed62f5d255c3937b4ccb122da1fc634794fa3578b3", size = 12041189, upload-time = "2026-06-18T18:25:17.915Z" }, - { url = "https://files.pythonhosted.org/packages/29/4c/67bb45e41609eb4726f1bfeb59e083cf91d14c696d4bd14c234a980be93d/ruff-0.15.18-py3-none-win_arm64.whl", hash = "sha256:b2c9257fcbd4a3e5b977a1904e6facca016bafe2edc17df24db67cfaee03b4e4", size = 11329958, upload-time = "2026-06-18T18:25:43.686Z" }, ] [[package]] name = "safetensors" -version = "0.5.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/71/7e/2d5d6ee7b40c0682315367ec7475693d110f512922d582fef1bd4a63adc3/safetensors-0.5.3.tar.gz", hash = "sha256:b6b0d6ecacec39a4fdd99cc19f4576f5219ce858e6fd8dbe7609df0b8dc56965", size = 67210, upload-time = "2025-02-26T09:15:13.155Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/ae/88f6c49dbd0cc4da0e08610019a3c78a7d390879a919411a410a1876d03a/safetensors-0.5.3-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:bd20eb133db8ed15b40110b7c00c6df51655a2998132193de2f75f72d99c7073", size = 436917, upload-time = "2025-02-26T09:15:03.702Z" }, - { url = "https://files.pythonhosted.org/packages/b8/3b/11f1b4a2f5d2ab7da34ecc062b0bc301f2be024d110a6466726bec8c055c/safetensors-0.5.3-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:21d01c14ff6c415c485616b8b0bf961c46b3b343ca59110d38d744e577f9cce7", size = 418419, upload-time = "2025-02-26T09:15:01.765Z" }, - { url = "https://files.pythonhosted.org/packages/5d/9a/add3e6fef267658075c5a41573c26d42d80c935cdc992384dfae435feaef/safetensors-0.5.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11bce6164887cd491ca75c2326a113ba934be596e22b28b1742ce27b1d076467", size = 459493, upload-time = "2025-02-26T09:14:51.812Z" }, - { url = "https://files.pythonhosted.org/packages/df/5c/bf2cae92222513cc23b3ff85c4a1bb2811a2c3583ac0f8e8d502751de934/safetensors-0.5.3-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4a243be3590bc3301c821da7a18d87224ef35cbd3e5f5727e4e0728b8172411e", size = 472400, upload-time = "2025-02-26T09:14:53.549Z" }, - { url = "https://files.pythonhosted.org/packages/58/11/7456afb740bd45782d0f4c8e8e1bb9e572f1bf82899fb6ace58af47b4282/safetensors-0.5.3-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8bd84b12b1670a6f8e50f01e28156422a2bc07fb16fc4e98bded13039d688a0d", size = 522891, upload-time = "2025-02-26T09:14:55.717Z" }, - { url = "https://files.pythonhosted.org/packages/57/3d/fe73a9d2ace487e7285f6e157afee2383bd1ddb911b7cb44a55cf812eae3/safetensors-0.5.3-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:391ac8cab7c829452175f871fcaf414aa1e292b5448bd02620f675a7f3e7abb9", size = 537694, upload-time = "2025-02-26T09:14:57.036Z" }, - { url = "https://files.pythonhosted.org/packages/a6/f8/dae3421624fcc87a89d42e1898a798bc7ff72c61f38973a65d60df8f124c/safetensors-0.5.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cead1fa41fc54b1e61089fa57452e8834f798cb1dc7a09ba3524f1eb08e0317a", size = 471642, upload-time = "2025-02-26T09:15:00.544Z" }, - { url = "https://files.pythonhosted.org/packages/ce/20/1fbe16f9b815f6c5a672f5b760951e20e17e43f67f231428f871909a37f6/safetensors-0.5.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1077f3e94182d72618357b04b5ced540ceb71c8a813d3319f1aba448e68a770d", size = 502241, upload-time = "2025-02-26T09:14:58.303Z" }, - { url = "https://files.pythonhosted.org/packages/5f/18/8e108846b506487aa4629fe4116b27db65c3dde922de2c8e0cc1133f3f29/safetensors-0.5.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:799021e78287bac619c7b3f3606730a22da4cda27759ddf55d37c8db7511c74b", size = 638001, upload-time = "2025-02-26T09:15:05.79Z" }, - { url = "https://files.pythonhosted.org/packages/82/5a/c116111d8291af6c8c8a8b40628fe833b9db97d8141c2a82359d14d9e078/safetensors-0.5.3-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:df26da01aaac504334644e1b7642fa000bfec820e7cef83aeac4e355e03195ff", size = 734013, upload-time = "2025-02-26T09:15:07.892Z" }, - { url = "https://files.pythonhosted.org/packages/7d/ff/41fcc4d3b7de837963622e8610d998710705bbde9a8a17221d85e5d0baad/safetensors-0.5.3-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:32c3ef2d7af8b9f52ff685ed0bc43913cdcde135089ae322ee576de93eae5135", size = 670687, upload-time = "2025-02-26T09:15:09.979Z" }, - { url = "https://files.pythonhosted.org/packages/40/ad/2b113098e69c985a3d8fbda4b902778eae4a35b7d5188859b4a63d30c161/safetensors-0.5.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:37f1521be045e56fc2b54c606d4455573e717b2d887c579ee1dbba5f868ece04", size = 643147, upload-time = "2025-02-26T09:15:11.185Z" }, - { url = "https://files.pythonhosted.org/packages/0a/0c/95aeb51d4246bd9a3242d3d8349c1112b4ee7611a4b40f0c5c93b05f001d/safetensors-0.5.3-cp38-abi3-win32.whl", hash = "sha256:cfc0ec0846dcf6763b0ed3d1846ff36008c6e7290683b61616c4b040f6a54ace", size = 296677, upload-time = "2025-02-26T09:15:16.554Z" }, - { url = "https://files.pythonhosted.org/packages/69/e2/b011c38e5394c4c18fb5500778a55ec43ad6106126e74723ffaee246f56e/safetensors-0.5.3-cp38-abi3-win_amd64.whl", hash = "sha256:836cbbc320b47e80acd40e44c8682db0e8ad7123209f69b093def21ec7cafd11", size = 308878, upload-time = "2025-02-26T09:15:14.99Z" }, -] - -[[package]] -name = "scikit-learn" -version = "1.6.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "joblib" }, - { name = "numpy" }, - { name = "scipy" }, - { name = "threadpoolctl" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9e/a5/4ae3b3a0755f7b35a280ac90b28817d1f380318973cff14075ab41ef50d9/scikit_learn-1.6.1.tar.gz", hash = "sha256:b4fc2525eca2c69a59260f583c56a7557c6ccdf8deafdba6e060f94c1c59738e", size = 7068312, upload-time = "2025-01-10T08:07:55.348Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2e/3a/f4597eb41049110b21ebcbb0bcb43e4035017545daa5eedcfeb45c08b9c5/scikit_learn-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d056391530ccd1e501056160e3c9673b4da4805eb67eb2bdf4e983e1f9c9204e", size = 12067702, upload-time = "2025-01-10T08:05:56.515Z" }, - { url = "https://files.pythonhosted.org/packages/37/19/0423e5e1fd1c6ec5be2352ba05a537a473c1677f8188b9306097d684b327/scikit_learn-1.6.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:0c8d036eb937dbb568c6242fa598d551d88fb4399c0344d95c001980ec1c7d36", size = 11112765, upload-time = "2025-01-10T08:06:00.272Z" }, - { url = "https://files.pythonhosted.org/packages/70/95/d5cb2297a835b0f5fc9a77042b0a2d029866379091ab8b3f52cc62277808/scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8634c4bd21a2a813e0a7e3900464e6d593162a29dd35d25bdf0103b3fce60ed5", size = 12643991, upload-time = "2025-01-10T08:06:04.813Z" }, - { url = "https://files.pythonhosted.org/packages/b7/91/ab3c697188f224d658969f678be86b0968ccc52774c8ab4a86a07be13c25/scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:775da975a471c4f6f467725dff0ced5c7ac7bda5e9316b260225b48475279a1b", size = 13497182, upload-time = "2025-01-10T08:06:08.42Z" }, - { url = "https://files.pythonhosted.org/packages/17/04/d5d556b6c88886c092cc989433b2bab62488e0f0dafe616a1d5c9cb0efb1/scikit_learn-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:8a600c31592bd7dab31e1c61b9bbd6dea1b3433e67d264d17ce1017dbdce8002", size = 11125517, upload-time = "2025-01-10T08:06:12.783Z" }, - { url = "https://files.pythonhosted.org/packages/6c/2a/e291c29670795406a824567d1dfc91db7b699799a002fdaa452bceea8f6e/scikit_learn-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:72abc587c75234935e97d09aa4913a82f7b03ee0b74111dcc2881cba3c5a7b33", size = 12102620, upload-time = "2025-01-10T08:06:16.675Z" }, - { url = "https://files.pythonhosted.org/packages/25/92/ee1d7a00bb6b8c55755d4984fd82608603a3cc59959245068ce32e7fb808/scikit_learn-1.6.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b3b00cdc8f1317b5f33191df1386c0befd16625f49d979fe77a8d44cae82410d", size = 11116234, upload-time = "2025-01-10T08:06:21.83Z" }, - { url = "https://files.pythonhosted.org/packages/30/cd/ed4399485ef364bb25f388ab438e3724e60dc218c547a407b6e90ccccaef/scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc4765af3386811c3ca21638f63b9cf5ecf66261cc4815c1db3f1e7dc7b79db2", size = 12592155, upload-time = "2025-01-10T08:06:27.309Z" }, - { url = "https://files.pythonhosted.org/packages/a8/f3/62fc9a5a659bb58a03cdd7e258956a5824bdc9b4bb3c5d932f55880be569/scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25fc636bdaf1cc2f4a124a116312d837148b5e10872147bdaf4887926b8c03d8", size = 13497069, upload-time = "2025-01-10T08:06:32.515Z" }, - { url = "https://files.pythonhosted.org/packages/a1/a6/c5b78606743a1f28eae8f11973de6613a5ee87366796583fb74c67d54939/scikit_learn-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:fa909b1a36e000a03c382aade0bd2063fd5680ff8b8e501660c0f59f021a6415", size = 11139809, upload-time = "2025-01-10T08:06:35.514Z" }, -] - -[[package]] -name = "scipy" -version = "1.15.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/76/c6/8eb0654ba0c7d0bb1bf67bf8fbace101a8e4f250f7722371105e8b6f68fc/scipy-1.15.1.tar.gz", hash = "sha256:033a75ddad1463970c96a88063a1df87ccfddd526437136b6ee81ff0312ebdf6", size = 59407493, upload-time = "2025-01-11T00:06:16.883Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/86/53/b204ce5a4433f1864001b9d16f103b9c25f5002a602ae83585d0ea5f9c4a/scipy-1.15.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:c64ded12dcab08afff9e805a67ff4480f5e69993310e093434b10e85dc9d43e1", size = 41414518, upload-time = "2025-01-10T23:59:19.173Z" }, - { url = "https://files.pythonhosted.org/packages/c7/fc/54ffa7a8847f7f303197a6ba65a66104724beba2e38f328135a78f0dc480/scipy-1.15.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:5b190b935e7db569960b48840e5bef71dc513314cc4e79a1b7d14664f57fd4ff", size = 32519265, upload-time = "2025-01-10T23:59:27.6Z" }, - { url = "https://files.pythonhosted.org/packages/f1/77/a98b8ba03d6f371dc31a38719affd53426d4665729dcffbed4afe296784a/scipy-1.15.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:4b17d4220df99bacb63065c76b0d1126d82bbf00167d1730019d2a30d6ae01ea", size = 24792859, upload-time = "2025-01-10T23:59:33.906Z" }, - { url = "https://files.pythonhosted.org/packages/a7/78/70bb9f0df7444b18b108580934bfef774822e28fd34a68e5c263c7d2828a/scipy-1.15.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:63b9b6cd0333d0eb1a49de6f834e8aeaefe438df8f6372352084535ad095219e", size = 27886506, upload-time = "2025-01-10T23:59:39.288Z" }, - { url = "https://files.pythonhosted.org/packages/14/a7/f40f6033e06de4176ddd6cc8c3ae9f10a226c3bca5d6b4ab883bc9914a14/scipy-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f151e9fb60fbf8e52426132f473221a49362091ce7a5e72f8aa41f8e0da4f25", size = 38375041, upload-time = "2025-01-10T23:59:47.066Z" }, - { url = "https://files.pythonhosted.org/packages/17/03/390a1c5c61fd76b0fa4b3c5aa3bdd7e60f6c46f712924f1a9df5705ec046/scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21e10b1dd56ce92fba3e786007322542361984f8463c6d37f6f25935a5a6ef52", size = 40597556, upload-time = "2025-01-10T23:59:55.199Z" }, - { url = "https://files.pythonhosted.org/packages/4e/70/fa95b3ae026b97eeca58204a90868802e5155ac71b9d7bdee92b68115dd3/scipy-1.15.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5dff14e75cdbcf07cdaa1c7707db6017d130f0af9ac41f6ce443a93318d6c6e0", size = 42938505, upload-time = "2025-01-11T00:00:04.734Z" }, - { url = "https://files.pythonhosted.org/packages/d6/07/427859116bdd71847c898180f01802691f203c3e2455a1eb496130ff07c5/scipy-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:f82fcf4e5b377f819542fbc8541f7b5fbcf1c0017d0df0bc22c781bf60abc4d8", size = 43909663, upload-time = "2025-01-11T00:00:15.339Z" }, - { url = "https://files.pythonhosted.org/packages/8e/2e/7b71312da9c2dabff53e7c9a9d08231bc34d9d8fdabe88a6f1155b44591c/scipy-1.15.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:5bd8d27d44e2c13d0c1124e6a556454f52cd3f704742985f6b09e75e163d20d2", size = 41424362, upload-time = "2025-01-11T00:00:22.985Z" }, - { url = "https://files.pythonhosted.org/packages/81/8c/ab85f1aa1cc200c796532a385b6ebf6a81089747adc1da7482a062acc46c/scipy-1.15.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:be3deeb32844c27599347faa077b359584ba96664c5c79d71a354b80a0ad0ce0", size = 32535910, upload-time = "2025-01-11T00:00:29.569Z" }, - { url = "https://files.pythonhosted.org/packages/3b/9c/6f4b787058daa8d8da21ddff881b4320e28de4704a65ec147adb50cb2230/scipy-1.15.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:5eb0ca35d4b08e95da99a9f9c400dc9f6c21c424298a0ba876fdc69c7afacedf", size = 24809398, upload-time = "2025-01-11T00:00:36.218Z" }, - { url = "https://files.pythonhosted.org/packages/16/2b/949460a796df75fc7a1ee1becea202cf072edbe325ebe29f6d2029947aa7/scipy-1.15.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:74bb864ff7640dea310a1377d8567dc2cb7599c26a79ca852fc184cc851954ac", size = 27918045, upload-time = "2025-01-11T00:00:42.627Z" }, - { url = "https://files.pythonhosted.org/packages/5f/36/67fe249dd7ccfcd2a38b25a640e3af7e59d9169c802478b6035ba91dfd6d/scipy-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:667f950bf8b7c3a23b4199db24cb9bf7512e27e86d0e3813f015b74ec2c6e3df", size = 38332074, upload-time = "2025-01-11T00:00:52.633Z" }, - { url = "https://files.pythonhosted.org/packages/fc/da/452e1119e6f720df3feb588cce3c42c5e3d628d4bfd4aec097bd30b7de0c/scipy-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395be70220d1189756068b3173853029a013d8c8dd5fd3d1361d505b2aa58fa7", size = 40588469, upload-time = "2025-01-11T00:01:00.149Z" }, - { url = "https://files.pythonhosted.org/packages/7f/71/5f94aceeac99a4941478af94fe9f459c6752d497035b6b0761a700f5f9ff/scipy-1.15.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ce3a000cd28b4430426db2ca44d96636f701ed12e2b3ca1f2b1dd7abdd84b39a", size = 42965214, upload-time = "2025-01-11T00:01:10.131Z" }, - { url = "https://files.pythonhosted.org/packages/af/25/caa430865749d504271757cafd24066d596217e83326155993980bc22f97/scipy-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:3fe1d95944f9cf6ba77aa28b82dd6bb2a5b52f2026beb39ecf05304b8392864b", size = 43896034, upload-time = "2025-01-11T00:01:40.933Z" }, -] - -[[package]] -name = "sentence-transformers" -version = "2.7.0" +version = "0.6.2" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "huggingface-hub" }, - { name = "numpy" }, - { name = "pillow" }, - { name = "scikit-learn" }, - { name = "scipy" }, - { name = "torch" }, - { name = "tqdm" }, - { name = "transformers" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/65/8d/8d6147fdef0ed7aeff3dab487bd17619b512afab845eb295faa08b20a5d0/sentence_transformers-2.7.0.tar.gz", hash = "sha256:2f7df99d1c021dded471ed2d079e9d1e4fc8e30ecb06f957be060511b36f24ea", size = 128393, upload-time = "2024-04-17T13:15:44.223Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ac/cc/738f3011628920e027a11754d9cae9abec1aed00f7ae860abbf843755233/safetensors-0.6.2.tar.gz", hash = "sha256:43ff2aa0e6fa2dc3ea5524ac7ad93a9839256b8703761e76e2d0b2a3fa4f15d9", size = 197968, upload-time = "2025-08-08T13:13:58.654Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/2c/bd95032aeb087b0706596af0a4518c4bfe0439a1bb149048ece18b617766/sentence_transformers-2.7.0-py3-none-any.whl", hash = "sha256:6a7276b05a95931581bbfa4ba49d780b2cf6904fa4a171ec7fd66c343f761c98", size = 171480, upload-time = "2024-04-17T13:15:42.048Z" }, + { url = "https://files.pythonhosted.org/packages/4d/b1/3f5fd73c039fc87dba3ff8b5d528bfc5a32b597fea8e7a6a4800343a17c7/safetensors-0.6.2-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:9c85ede8ec58f120bad982ec47746981e210492a6db876882aa021446af8ffba", size = 454797, upload-time = "2025-08-08T13:13:52.066Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c9/bb114c158540ee17907ec470d01980957fdaf87b4aa07914c24eba87b9c6/safetensors-0.6.2-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d6675cf4b39c98dbd7d940598028f3742e0375a6b4d4277e76beb0c35f4b843b", size = 432206, upload-time = "2025-08-08T13:13:50.931Z" }, + { url = "https://files.pythonhosted.org/packages/fe/5d/5a514d7b88e310c8b146e2404e0dc161282e78634d9358975fd56dfd14be/safetensors-0.6.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8045db2c872db8f4cbe3faa0495932d89c38c899c603f21e9b6486951a5ecb8f", size = 485835, upload-time = "2025-08-08T13:13:49.373Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/cad1d9762868c7c5dc70c8620074df28ebb1a8e4c17d4c0cb031889c457e/safetensors-0.6.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d944cea65fad0ead848b6ec2c37cc0b197194bec228f8020054742190e9312ac", size = 655957, upload-time = "2025-08-08T13:13:57.029Z" }, ] [[package]] name = "sentencepiece" -version = "0.2.0" +version = "0.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c9/d2/b9c7ca067c26d8ff085d252c89b5f69609ca93fb85a00ede95f4857865d4/sentencepiece-0.2.0.tar.gz", hash = "sha256:a52c19171daaf2e697dc6cbe67684e0fa341b1248966f6aebb541de654d15843", size = 2632106, upload-time = "2024-02-19T17:06:47.428Z" } +sdist = { url = "https://files.pythonhosted.org/packages/15/15/2e7a025fc62d764b151ae6d0f2a92f8081755ebe8d4a64099accc6f77ba6/sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad", size = 3228515, upload-time = "2025-08-12T07:00:51.718Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f6/71/98648c3b64b23edb5403f74bcc906ad21766872a6e1ada26ea3f1eb941ab/sentencepiece-0.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:188779e1298a1c8b8253c7d3ad729cb0a9891e5cef5e5d07ce4592c54869e227", size = 2408979, upload-time = "2024-02-19T17:05:34.651Z" }, - { url = "https://files.pythonhosted.org/packages/77/9f/7efbaa6d4c0c718a9affbecc536b03ca62f99f421bdffb531c16030e2d2b/sentencepiece-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bed9cf85b296fa2b76fc2547b9cbb691a523864cebaee86304c43a7b4cb1b452", size = 1238845, upload-time = "2024-02-19T17:05:37.371Z" }, - { url = "https://files.pythonhosted.org/packages/1c/e4/c2541027a43ec6962ba9b601805d17ba3f86b38bdeae0e8ac65a2981e248/sentencepiece-0.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d7b67e724bead13f18db6e1d10b6bbdc454af574d70efbb36f27d90387be1ca3", size = 1181472, upload-time = "2024-02-19T17:05:39.775Z" }, - { url = "https://files.pythonhosted.org/packages/fd/46/316c1ba6c52b97de76aff7b9da678f7afbb52136afb2987c474d95630e65/sentencepiece-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fde4b08cfe237be4484c6c7c2e2c75fb862cfeab6bd5449ce4caeafd97b767a", size = 1259151, upload-time = "2024-02-19T17:05:42.594Z" }, - { url = "https://files.pythonhosted.org/packages/aa/5a/3c48738a0835d76dd06c62b6ac48d39c923cde78dd0f587353bdcbb99851/sentencepiece-0.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c378492056202d1c48a4979650981635fd97875a00eabb1f00c6a236b013b5e", size = 1355931, upload-time = "2024-02-19T17:05:44.695Z" }, - { url = "https://files.pythonhosted.org/packages/a6/27/33019685023221ca8ed98e8ceb7ae5e166032686fa3662c68f1f1edf334e/sentencepiece-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1380ce6540a368de2ef6d7e6ba14ba8f3258df650d39ba7d833b79ee68a52040", size = 1301537, upload-time = "2024-02-19T17:05:46.713Z" }, - { url = "https://files.pythonhosted.org/packages/ca/e4/55f97cef14293171fef5f96e96999919ab5b4d1ce95b53547ad653d7e3bf/sentencepiece-0.2.0-cp310-cp310-win32.whl", hash = "sha256:a1151d6a6dd4b43e552394aed0edfe9292820272f0194bd56c7c1660a0c06c3d", size = 936747, upload-time = "2024-02-19T17:05:48.705Z" }, - { url = "https://files.pythonhosted.org/packages/85/f4/4ef1a6e0e9dbd8a60780a91df8b7452ada14cfaa0e17b3b8dfa42cecae18/sentencepiece-0.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:d490142b0521ef22bc1085f061d922a2a6666175bb6b42e588ff95c0db6819b2", size = 991525, upload-time = "2024-02-19T17:05:55.145Z" }, - { url = "https://files.pythonhosted.org/packages/32/43/8f8885168a47a02eba1455bd3f4f169f50ad5b8cebd2402d0f5e20854d04/sentencepiece-0.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:17982700c4f6dbb55fa3594f3d7e5dd1c8659a274af3738e33c987d2a27c9d5c", size = 2409036, upload-time = "2024-02-19T17:05:58.021Z" }, - { url = "https://files.pythonhosted.org/packages/0f/35/e63ba28062af0a3d688a9f128e407a1a2608544b2f480cb49bf7f4b1cbb9/sentencepiece-0.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7c867012c0e8bcd5bdad0f791609101cb5c66acb303ab3270218d6debc68a65e", size = 1238921, upload-time = "2024-02-19T17:06:06.434Z" }, - { url = "https://files.pythonhosted.org/packages/de/42/ae30952c4a0bd773e90c9bf2579f5533037c886dfc8ec68133d5694f4dd2/sentencepiece-0.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7fd6071249c74f779c5b27183295b9202f8dedb68034e716784364443879eaa6", size = 1181477, upload-time = "2024-02-19T17:06:09.292Z" }, - { url = "https://files.pythonhosted.org/packages/e3/ac/2f2ab1d60bb2d795d054eebe5e3f24b164bc21b5a9b75fba7968b3b91b5a/sentencepiece-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27f90c55a65013cbb8f4d7aab0599bf925cde4adc67ae43a0d323677b5a1c6cb", size = 1259182, upload-time = "2024-02-19T17:06:16.459Z" }, - { url = "https://files.pythonhosted.org/packages/45/fb/14633c6ecf262c468759ffcdb55c3a7ee38fe4eda6a70d75ee7c7d63c58b/sentencepiece-0.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b293734059ef656dcd65be62ff771507bea8fed0a711b6733976e1ed3add4553", size = 1355537, upload-time = "2024-02-19T17:06:19.274Z" }, - { url = "https://files.pythonhosted.org/packages/fb/12/2f5c8d4764b00033cf1c935b702d3bb878d10be9f0b87f0253495832d85f/sentencepiece-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e58b47f933aca74c6a60a79dcb21d5b9e47416256c795c2d58d55cec27f9551d", size = 1301464, upload-time = "2024-02-19T17:06:21.796Z" }, - { url = "https://files.pythonhosted.org/packages/4e/b1/67afc0bde24f6dcb3acdea0dd8dcdf4b8b0db240f6bacd39378bd32d09f8/sentencepiece-0.2.0-cp311-cp311-win32.whl", hash = "sha256:c581258cf346b327c62c4f1cebd32691826306f6a41d8c4bec43b010dee08e75", size = 936749, upload-time = "2024-02-19T17:06:24.167Z" }, - { url = "https://files.pythonhosted.org/packages/a2/f6/587c62fd21fc988555b85351f50bbde43a51524caafd63bc69240ded14fd/sentencepiece-0.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:0993dbc665f4113017892f1b87c3904a44d0640eda510abcacdfb07f74286d36", size = 991520, upload-time = "2024-02-19T17:06:26.936Z" }, + { url = "https://files.pythonhosted.org/packages/d8/15/46afbab00733d81788b64be430ca1b93011bb9388527958e26cc31832de5/sentencepiece-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6356d0986b8b8dc351b943150fcd81a1c6e6e4d439772e8584c64230e58ca987", size = 1942560, upload-time = "2025-08-12T06:59:25.82Z" }, + { url = "https://files.pythonhosted.org/packages/fa/79/7c01b8ef98a0567e9d84a4e7a910f8e7074fcbf398a5cd76f93f4b9316f9/sentencepiece-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f8ba89a3acb3dc1ae90f65ec1894b0b9596fdb98ab003ff38e058f898b39bc7", size = 1325385, upload-time = "2025-08-12T06:59:27.722Z" }, + { url = "https://files.pythonhosted.org/packages/bb/88/2b41e07bd24f33dcf2f18ec3b74247aa4af3526bad8907b8727ea3caba03/sentencepiece-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02593eca45440ef39247cee8c47322a34bdcc1d8ae83ad28ba5a899a2cf8d79a", size = 1253319, upload-time = "2025-08-12T06:59:29.306Z" }, + { url = "https://files.pythonhosted.org/packages/ef/66/fb191403ade791ad2c3c1e72fe8413e63781b08cfa3aa4c9dfc536d6e795/sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f5a3e0d9f445ed9d66c0fec47d4b23d12cfc858b407a03c194c1b26c2ac2a63", size = 1387785, upload-time = "2025-08-12T06:59:32.491Z" }, ] [[package]] @@ -3245,8 +2768,8 @@ name = "sentry-sdk" version = "2.63.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "certifi" }, - { name = "urllib3" }, + { name = "certifi", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "urllib3", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ba/c8/b3c970a5b186722d276cd40a05b3254e03bccc0208560aff20f612e018e8/sentry_sdk-2.63.0.tar.gz", hash = "sha256:2a1502bf864769275dbc8c2c9fc7a0f7f5e18358180b615d262d13a31ffba216", size = 912449, upload-time = "2026-06-16T12:45:57.553Z" } wheels = [ @@ -3259,41 +2782,18 @@ version = "1.3.7" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/8d/48/49393a96a2eef1ab418b17475fb92b8fcfad83d099e678751b05472e69de/setproctitle-1.3.7.tar.gz", hash = "sha256:bc2bc917691c1537d5b9bca1468437176809c7e11e5694ca79a9ca12345dcb9e", size = 27002, upload-time = "2025-09-05T12:51:25.278Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f2/48/fb401ec8c4953d519d05c87feca816ad668b8258448ff60579ac7a1c1386/setproctitle-1.3.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cf555b6299f10a6eb44e4f96d2f5a3884c70ce25dc5c8796aaa2f7b40e72cb1b", size = 18079, upload-time = "2025-09-05T12:49:07.732Z" }, - { url = "https://files.pythonhosted.org/packages/cc/a3/c2b0333c2716fb3b4c9a973dd113366ac51b4f8d56b500f4f8f704b4817a/setproctitle-1.3.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:690b4776f9c15aaf1023bb07d7c5b797681a17af98a4a69e76a1d504e41108b7", size = 13099, upload-time = "2025-09-05T12:49:09.222Z" }, - { url = "https://files.pythonhosted.org/packages/0e/f8/17bda581c517678260e6541b600eeb67745f53596dc077174141ba2f6702/setproctitle-1.3.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:00afa6fc507967d8c9d592a887cdc6c1f5742ceac6a4354d111ca0214847732c", size = 31793, upload-time = "2025-09-05T12:49:10.297Z" }, - { url = "https://files.pythonhosted.org/packages/27/d1/76a33ae80d4e788ecab9eb9b53db03e81cfc95367ec7e3fbf4989962fedd/setproctitle-1.3.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9e02667f6b9fc1238ba753c0f4b0a37ae184ce8f3bbbc38e115d99646b3f4cd3", size = 32779, upload-time = "2025-09-05T12:49:12.157Z" }, - { url = "https://files.pythonhosted.org/packages/59/27/1a07c38121967061564f5e0884414a5ab11a783260450172d4fc68c15621/setproctitle-1.3.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:83fcd271567d133eb9532d3b067c8a75be175b2b3b271e2812921a05303a693f", size = 34578, upload-time = "2025-09-05T12:49:13.393Z" }, - { url = "https://files.pythonhosted.org/packages/d8/d4/725e6353935962d8bb12cbf7e7abba1d0d738c7f6935f90239d8e1ccf913/setproctitle-1.3.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13fe37951dda1a45c35d77d06e3da5d90e4f875c4918a7312b3b4556cfa7ff64", size = 32030, upload-time = "2025-09-05T12:49:15.362Z" }, - { url = "https://files.pythonhosted.org/packages/67/24/e4677ae8e1cb0d549ab558b12db10c175a889be0974c589c428fece5433e/setproctitle-1.3.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a05509cfb2059e5d2ddff701d38e474169e9ce2a298cf1b6fd5f3a213a553fe5", size = 33363, upload-time = "2025-09-05T12:49:16.829Z" }, - { url = "https://files.pythonhosted.org/packages/55/d4/69ce66e4373a48fdbb37489f3ded476bb393e27f514968c3a69a67343ae0/setproctitle-1.3.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6da835e76ae18574859224a75db6e15c4c2aaa66d300a57efeaa4c97ca4c7381", size = 31508, upload-time = "2025-09-05T12:49:18.032Z" }, - { url = "https://files.pythonhosted.org/packages/4b/5a/42c1ed0e9665d068146a68326529b5686a1881c8b9197c2664db4baf6aeb/setproctitle-1.3.7-cp310-cp310-win32.whl", hash = "sha256:9e803d1b1e20240a93bac0bc1025363f7f80cb7eab67dfe21efc0686cc59ad7c", size = 12558, upload-time = "2025-09-05T12:49:19.742Z" }, - { url = "https://files.pythonhosted.org/packages/dc/fe/dd206cc19a25561921456f6cb12b405635319299b6f366e0bebe872abc18/setproctitle-1.3.7-cp310-cp310-win_amd64.whl", hash = "sha256:a97200acc6b64ec4cada52c2ecaf1fba1ef9429ce9c542f8a7db5bcaa9dcbd95", size = 13245, upload-time = "2025-09-05T12:49:21.023Z" }, - { url = "https://files.pythonhosted.org/packages/04/cd/1b7ba5cad635510720ce19d7122154df96a2387d2a74217be552887c93e5/setproctitle-1.3.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a600eeb4145fb0ee6c287cb82a2884bd4ec5bbb076921e287039dcc7b7cc6dd0", size = 18085, upload-time = "2025-09-05T12:49:22.183Z" }, - { url = "https://files.pythonhosted.org/packages/8f/1a/b2da0a620490aae355f9d72072ac13e901a9fec809a6a24fc6493a8f3c35/setproctitle-1.3.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97a090fed480471bb175689859532709e28c085087e344bca45cf318034f70c4", size = 13097, upload-time = "2025-09-05T12:49:23.322Z" }, { url = "https://files.pythonhosted.org/packages/18/2e/bd03ff02432a181c1787f6fc2a678f53b7dacdd5ded69c318fe1619556e8/setproctitle-1.3.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1607b963e7b53e24ec8a2cb4e0ab3ae591d7c6bf0a160feef0551da63452b37f", size = 32191, upload-time = "2025-09-05T12:49:24.567Z" }, - { url = "https://files.pythonhosted.org/packages/28/78/1e62fc0937a8549f2220445ed2175daacee9b6764c7963b16148119b016d/setproctitle-1.3.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a20fb1a3974e2dab857870cf874b325b8705605cb7e7e8bcbb915bca896f52a9", size = 33203, upload-time = "2025-09-05T12:49:25.871Z" }, - { url = "https://files.pythonhosted.org/packages/a0/3c/65edc65db3fa3df400cf13b05e9d41a3c77517b4839ce873aa6b4043184f/setproctitle-1.3.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f8d961bba676e07d77665204f36cffaa260f526e7b32d07ab3df6a2c1dfb44ba", size = 34963, upload-time = "2025-09-05T12:49:27.044Z" }, - { url = "https://files.pythonhosted.org/packages/a1/32/89157e3de997973e306e44152522385f428e16f92f3cf113461489e1e2ee/setproctitle-1.3.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:db0fd964fbd3a9f8999b502f65bd2e20883fdb5b1fae3a424e66db9a793ed307", size = 32398, upload-time = "2025-09-05T12:49:28.909Z" }, - { url = "https://files.pythonhosted.org/packages/4a/18/77a765a339ddf046844cb4513353d8e9dcd8183da9cdba6e078713e6b0b2/setproctitle-1.3.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:db116850fcf7cca19492030f8d3b4b6e231278e8fe097a043957d22ce1bdf3ee", size = 33657, upload-time = "2025-09-05T12:49:30.323Z" }, { url = "https://files.pythonhosted.org/packages/6b/63/f0b6205c64d74d2a24a58644a38ec77bdbaa6afc13747e75973bf8904932/setproctitle-1.3.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:316664d8b24a5c91ee244460bdaf7a74a707adaa9e14fbe0dc0a53168bb9aba1", size = 31836, upload-time = "2025-09-05T12:49:32.309Z" }, - { url = "https://files.pythonhosted.org/packages/ba/51/e1277f9ba302f1a250bbd3eedbbee747a244b3cc682eb58fb9733968f6d8/setproctitle-1.3.7-cp311-cp311-win32.whl", hash = "sha256:b74774ca471c86c09b9d5037c8451fff06bb82cd320d26ae5a01c758088c0d5d", size = 12556, upload-time = "2025-09-05T12:49:33.529Z" }, - { url = "https://files.pythonhosted.org/packages/b6/7b/822a23f17e9003dfdee92cd72758441ca2a3680388da813a371b716fb07f/setproctitle-1.3.7-cp311-cp311-win_amd64.whl", hash = "sha256:acb9097213a8dd3410ed9f0dc147840e45ca9797785272928d4be3f0e69e3be4", size = 13243, upload-time = "2025-09-05T12:49:34.553Z" }, - { url = "https://files.pythonhosted.org/packages/34/8a/aff5506ce89bc3168cb492b18ba45573158d528184e8a9759a05a09088a9/setproctitle-1.3.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:eb440c5644a448e6203935ed60466ec8d0df7278cd22dc6cf782d07911bcbea6", size = 12654, upload-time = "2025-09-05T12:51:17.141Z" }, - { url = "https://files.pythonhosted.org/packages/41/89/5b6f2faedd6ced3d3c085a5efbd91380fb1f61f4c12bc42acad37932f4e9/setproctitle-1.3.7-pp310-pypy310_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:502b902a0e4c69031b87870ff4986c290ebbb12d6038a70639f09c331b18efb2", size = 14284, upload-time = "2025-09-05T12:51:18.393Z" }, - { url = "https://files.pythonhosted.org/packages/0a/c0/4312fed3ca393a29589603fd48f17937b4ed0638b923bac75a728382e730/setproctitle-1.3.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f6f268caeabb37ccd824d749e7ce0ec6337c4ed954adba33ec0d90cc46b0ab78", size = 13282, upload-time = "2025-09-05T12:51:19.703Z" }, - { url = "https://files.pythonhosted.org/packages/c3/5b/5e1c117ac84e3cefcf8d7a7f6b2461795a87e20869da065a5c087149060b/setproctitle-1.3.7-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b1cac6a4b0252b8811d60b6d8d0f157c0fdfed379ac89c25a914e6346cf355a1", size = 12587, upload-time = "2025-09-05T12:51:21.195Z" }, { url = "https://files.pythonhosted.org/packages/73/02/b9eadc226195dcfa90eed37afe56b5dd6fa2f0e5220ab8b7867b8862b926/setproctitle-1.3.7-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f1704c9e041f2b1dc38f5be4552e141e1432fba3dd52c72eeffd5bc2db04dc65", size = 14286, upload-time = "2025-09-05T12:51:22.61Z" }, - { url = "https://files.pythonhosted.org/packages/28/26/1be1d2a53c2a91ec48fa2ff4a409b395f836798adf194d99de9c059419ea/setproctitle-1.3.7-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:b08b61976ffa548bd5349ce54404bf6b2d51bd74d4f1b241ed1b0f25bce09c3a", size = 13282, upload-time = "2025-09-05T12:51:24.094Z" }, ] [[package]] name = "setuptools" -version = "82.0.1" +version = "81.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4f/db/cfac1baf10650ab4d1c111714410d2fbb77ac5a616db26775db562c8fab2/setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", size = 1152316, upload-time = "2026-03-09T12:47:17.221Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/1c/73e719955c59b8e424d015ab450f51c0af856ae46ea2da83eba51cc88de1/setuptools-81.0.0.tar.gz", hash = "sha256:487b53915f52501f0a79ccfd0c02c165ffe06631443a886740b91af4b7a5845a", size = 1198299, upload-time = "2026-02-06T21:10:39.601Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", size = 1006223, upload-time = "2026-03-09T12:47:15.026Z" }, + { url = "https://files.pythonhosted.org/packages/e1/e3/c164c88b2e5ce7b24d667b9bd83589cf4f3520d97cad01534cd3c4f55fdb/setuptools-81.0.0-py3-none-any.whl", hash = "sha256:fdd925d5c5d9f62e4b74b30d6dd7828ce236fd6ed998a08d81de62ce5a6310d6", size = 1062021, upload-time = "2026-02-06T21:10:37.175Z" }, ] [[package]] @@ -3314,18 +2814,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, ] -[[package]] -name = "smart-open" -version = "7.6.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "wrapt" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c5/65/3ada667d32675399001bf022ad3d9f3989b57101351ebc71d6fbe2384634/smart_open-7.6.1.tar.gz", hash = "sha256:4347996e7ba21db7cd1e059632e0b30395407e4f6c660d2ddffc8f2a9ae5f990", size = 54754, upload-time = "2026-05-09T06:23:37.06Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/14/78/0f68b93564b8c6b6987a0696c582ba2591a381ab2f733a501909e949f241/smart_open-7.6.1-py3-none-any.whl", hash = "sha256:b4de6aebef023aca91cc9fb372052e1343ba3f152de215bd22391a663e3ddd21", size = 64845, upload-time = "2026-05-09T06:23:35.386Z" }, -] - [[package]] name = "sniffio" version = "1.3.1" @@ -3336,287 +2824,150 @@ wheels = [ ] [[package]] -name = "soundfile" -version = "0.14.0" +name = "sortedcontainers" +version = "2.4.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi" }, - { name = "numpy" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d2/db/949331952a6fb1c5b12e9de80fd08747966c2039d1a61db4764fbd3981c2/soundfile-0.14.0.tar.gz", hash = "sha256:ba1c1a2d618bca5c406647c83b89f07cc8810fa506a50622a6993ba130c1de11", size = 47842, upload-time = "2026-06-06T08:58:47.869Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594, upload-time = "2021-05-16T22:03:42.897Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/d1/5e338af9ca6ed0786cd5bb03f6d60de1c325728c1189014f3b59aae7403c/soundfile-0.14.0-py2.py3-none-any.whl", hash = "sha256:8ba81ae3a89fd5ab3bef8a8eb481fbbe794e806309675a89b4df48b8d31908a8", size = 26799, upload-time = "2026-06-06T08:58:33.269Z" }, - { url = "https://files.pythonhosted.org/packages/7e/72/c6b21e58d3113596e7e8de0a08d6f1d95173492cfbca0a4db14148cbba2a/soundfile-0.14.0-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:19be05428da76ed61a4cad29b8e4bcf43a3e5c100089d2ec81dc961eed1b0dd4", size = 1144568, upload-time = "2026-06-06T08:58:35.231Z" }, - { url = "https://files.pythonhosted.org/packages/63/7a/dfdd6f8c748988427119f75eb860a3cedd858d1aea1fe28f39ad8559ef22/soundfile-0.14.0-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:d828d35a059626da52f1415b5faee610aeab393319cb3fc4a9aef47b619fc14c", size = 1103726, upload-time = "2026-06-06T08:58:37.948Z" }, - { url = "https://files.pythonhosted.org/packages/4a/f8/fc39fad6f879633461d27394cd1ddaf1f769ffa0597dca35872f51b16461/soundfile-0.14.0-py2.py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:e85724a90bc99a6e8062c0b4ddf725f53b2a3b70afd4da875e9d2cfc4e92f377", size = 1238050, upload-time = "2026-06-06T08:58:39.932Z" }, - { url = "https://files.pythonhosted.org/packages/7b/a2/70fd4432b924684c372df8b0a45708c36c057ef3596c9eb53e0a806b980b/soundfile-0.14.0-py2.py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:1e38bac1853412871318e82a1ba69a8be677619b56025bbfcccdb41b6cafe82d", size = 1315963, upload-time = "2026-06-06T08:58:41.716Z" }, - { url = "https://files.pythonhosted.org/packages/d9/34/c9e80783d83eab739a9531fdee03675d53e0bf1b2ccb4bb3af5844675046/soundfile-0.14.0-py2.py3-none-win32.whl", hash = "sha256:0a6ae43c50c71b4e020cc55382925cb89451c1ed1a0c3d0f5d802da269226849", size = 902199, upload-time = "2026-06-06T08:58:43.289Z" }, - { url = "https://files.pythonhosted.org/packages/ed/97/b39c18ac1df45e755ca22b8b00e872929da5d107998a207a5e4ac831bfda/soundfile-0.14.0-py2.py3-none-win_amd64.whl", hash = "sha256:299491d3499460fb1b74bb4bd78b57ffc2d243a5fafa7b6ec1b264875c78453e", size = 1021480, upload-time = "2026-06-06T08:58:45.016Z" }, - { url = "https://files.pythonhosted.org/packages/f4/83/55c65e61cf457805ce2ec157c1c6ae17715d0851aa2374422de0538838ca/soundfile-0.14.0-py2.py3-none-win_arm64.whl", hash = "sha256:e090704718e124e7c844695236f1fce8d18a5e761eaf7c82dfcd124620805f98", size = 888858, upload-time = "2026-06-06T08:58:46.593Z" }, + { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575, upload-time = "2021-05-16T22:03:41.177Z" }, ] [[package]] -name = "soxr" -version = "1.1.0" +name = "sse-starlette" +version = "3.4.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "anyio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "starlette", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ed/11/27cebce4a108f77afea7c80545115536b45e3f11ebfb914f638fdd9ba847/soxr-1.1.0.tar.gz", hash = "sha256:9f228ae21c78fa9359ca98d8a5e8e91f30639e438e574133dace62c5b5309e44", size = 173067, upload-time = "2026-05-03T00:15:18.214Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/2b/58abc2d1fd397e7dde08e947e05c884d8ef2f78d5e2588c17a12d42d6994/sse_starlette-3.4.4.tar.gz", hash = "sha256:07e0fa0460138baf25cdd5fb28683472c3995dc1642225191b3832d62526bcb0", size = 31819, upload-time = "2026-05-12T17:37:17.019Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/75/96/6b335638dd3ef4e5d50b9a0a7497e8433ab10fb45457497010074dd3c734/soxr-1.1.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:9564d82f7fa6bf548e5f18bb86235dff20eea8bd30727b64d49783c95c34fb8d", size = 205270, upload-time = "2026-05-03T00:14:38.391Z" }, - { url = "https://files.pythonhosted.org/packages/d5/0e/79e479b38f014757af877755c6eeea10c8750f66ef1e2231709f1d5dc7ab/soxr-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9443e5eb82152d8952422b7285692192cc7dcffa5218bb511b096203018bc273", size = 167049, upload-time = "2026-05-03T00:14:40.226Z" }, - { url = "https://files.pythonhosted.org/packages/b3/aa/52759e223bd5b4923e518d6312161887c96d42b81df5425198cf9f3371e2/soxr-1.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:588c7de1abafe59e66face9a074514658ac0398c85a774cdbb8efac131192692", size = 210589, upload-time = "2026-05-03T00:14:41.863Z" }, - { url = "https://files.pythonhosted.org/packages/38/89/a6550d26ebeb17f83e03cf6cde2d084b8d292900a027d43a6696cbce5c5a/soxr-1.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:26925618945f1a44dfbd783cc572874f0685e9ecdf46b96f4000f6b8c9c8b825", size = 245032, upload-time = "2026-05-03T00:14:43.341Z" }, - { url = "https://files.pythonhosted.org/packages/79/c6/2e47f17fa4461ba047f5f38a592f39120c21e6af8786268b0be2ef870318/soxr-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:b2e94c713b7d96fb92841947b785bcee6606124bc852273fab70454b51bfe270", size = 176571, upload-time = "2026-05-03T00:14:45.035Z" }, - { url = "https://files.pythonhosted.org/packages/8e/49/3e6bc84f87439f222f40b616e9a29a170f41fb564710ea510df19dc26907/soxr-1.1.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:34cc92208c3c412c046813e69da639c04a792c6a41fbfd7d909d359cd3e97a2d", size = 205699, upload-time = "2026-05-03T00:14:46.67Z" }, - { url = "https://files.pythonhosted.org/packages/2f/94/216f46096a85b07d1e6ba7fd44491402e912a3d688cd4f36f0a600ca155f/soxr-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd30f7201eac896ebf5db7b09156e6f1a1b82601900d29d9c8449bdad8365b11", size = 167381, upload-time = "2026-05-03T00:14:48.012Z" }, - { url = "https://files.pythonhosted.org/packages/94/cb/06caa463b8181ec1981bd6376d4a873748b7008193188b8cfb60391eb131/soxr-1.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1577865e993f98ffb261257c3060fa76ec3db44ed3f181b16464268000424464", size = 210938, upload-time = "2026-05-03T00:14:49.768Z" }, - { url = "https://files.pythonhosted.org/packages/86/47/d5964551ca818b7f0c7ef7f3899056263b60ef098a801066350a9672ca8f/soxr-1.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3da87e3ffa3e41823d873b051c7ecb2acebd8d1b6b46b752f5facf10a0d84ab9", size = 245268, upload-time = "2026-05-03T00:14:51.422Z" }, - { url = "https://files.pythonhosted.org/packages/8f/29/371467eb86c7ba6810df0bfe9409bcd9c52ec5615b111190fafe23e4d2e1/soxr-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:ae30c48ac795378cf23ba3c7c640b8ff794af714ac388b9fd6b31a40b39e6e86", size = 176779, upload-time = "2026-05-03T00:14:53.09Z" }, - { url = "https://files.pythonhosted.org/packages/06/8a/f3da7973b5f1b05d2d7e94d5376b881dcbc05297900cae6c3d33d95b209b/soxr-1.1.0-cp312-abi3-macosx_10_14_x86_64.whl", hash = "sha256:e0e09fa633ce2e67df08b298afced4d184f6e753fc330f241022250f1d0d61da", size = 204124, upload-time = "2026-05-03T00:14:54.505Z" }, - { url = "https://files.pythonhosted.org/packages/03/dc/200013a74641f8774664bbcd2346c695c05c2e300ea792adcb40a293eed0/soxr-1.1.0-cp312-abi3-macosx_11_0_arm64.whl", hash = "sha256:d6a7ad82b8d5f3fcc04b1d2ca055562b96af571e1d4fa7c6c61d0fb509ac43b4", size = 165457, upload-time = "2026-05-03T00:14:56.007Z" }, - { url = "https://files.pythonhosted.org/packages/88/2b/2e5eba817a762a2ec589ff165b8bc5955b25a0ad140045f7cd8e45410543/soxr-1.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf98c0d7b7d5ef5bf072fee8d3020e8b664f2d195933ea7bc5089267c2e22a06", size = 206529, upload-time = "2026-05-03T00:14:57.646Z" }, - { url = "https://files.pythonhosted.org/packages/5c/f1/0e55195893228609c9a08c3b13b7a83a46c3a992cd00d3304f0f320cfb07/soxr-1.1.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b033078e86f3c4a658e5697fac8995764fad9e799563616b630136b613167f1", size = 240413, upload-time = "2026-05-03T00:14:59.363Z" }, - { url = "https://files.pythonhosted.org/packages/b0/4d/621e4150e4815246ad552d215a8a294a90143fedd19ee442cf82d3b3abc8/soxr-1.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:6ae2a174bffea94e8ead857dad85999d3f49f091774dbad5b046c0417d7092f4", size = 174357, upload-time = "2026-05-03T00:15:00.724Z" }, + { url = "https://files.pythonhosted.org/packages/dc/67/805710444ea8cc75fbf70b920ed431a560c4bf9c57f7d5a3117213189399/sse_starlette-3.4.4-py3-none-any.whl", hash = "sha256:3f4dd50d8aed2771a091f3a83000323fc3844541c16b4fe585ae2420cc6df973", size = 16514, upload-time = "2026-05-12T17:37:15.601Z" }, ] [[package]] -name = "spacy" -version = "3.7.5" +name = "starlette" +version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "catalogue" }, - { name = "cymem" }, - { name = "jinja2" }, - { name = "langcodes" }, - { name = "murmurhash" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "preshed" }, - { name = "pydantic" }, - { name = "requests" }, - { name = "setuptools" }, - { name = "spacy-legacy" }, - { name = "spacy-loggers" }, - { name = "srsly" }, - { name = "thinc" }, - { name = "tqdm" }, - { name = "typer" }, - { name = "wasabi" }, - { name = "weasel" }, + { name = "anyio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/21/1e/94e3981516db6fcd6685f058c43c3fa81805c120b04829596367dad1aa4e/spacy-3.7.5.tar.gz", hash = "sha256:a648c6cbf2acc7a55a69ee9e7fa4f22bdf69aa828a587a1bc5cfff08cf3c2dd3", size = 1274806, upload-time = "2024-06-05T07:21:56Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/e3/7c1dc7381d9f8ab7d854328ebfa884e62cb3f3d8549ddfd37c7814f42afa/starlette-1.3.1.tar.gz", hash = "sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0", size = 2703240, upload-time = "2026-06-12T09:23:11.602Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/5e/f3a851f4c90e61c64956c952387db9b6557863a15050616929886cdcab45/spacy-3.7.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8002897701429ee2ab5ff6921ae43560f4cd17184cb1e10dad761901c12dcb85", size = 6847778, upload-time = "2024-06-05T07:20:28.443Z" }, - { url = "https://files.pythonhosted.org/packages/c6/3a/8c5446c40306f876f12c2f9c814c731913f775c9342348333342312bf202/spacy-3.7.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:43acd19efc845e9126b61a05ed7508a0aff509e96e15563f30f810c19e636b7c", size = 6609906, upload-time = "2024-06-05T07:20:33.505Z" }, - { url = "https://files.pythonhosted.org/packages/18/91/2fbd1c23467cbad666dbcdb9cf7d3c04d620a2f470281a9d341acccad9b2/spacy-3.7.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f044522b1271ea54718dc43b6f593b5dad349cd31b3827764c501529b599e09a", size = 6250741, upload-time = "2024-06-05T07:20:36.107Z" }, - { url = "https://files.pythonhosted.org/packages/07/52/117eae6b96e79207234bf546271bc4d8bb1ec5bf5dd1d8ddf15f12cdbf2e/spacy-3.7.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a7dbfbca42c1c128fefa6832631fe49e11c850e963af99229f14e2d0ae94f34", size = 6606864, upload-time = "2024-06-05T07:20:40.075Z" }, - { url = "https://files.pythonhosted.org/packages/df/9d/b46b6f0a4ad66498c388a94e7efbff51044be92ecc1d0f5ea02dc45ef2d1/spacy-3.7.5-cp310-cp310-win_amd64.whl", hash = "sha256:2a21b2a1e1e5d10d15c6f75990b7341d0fc9b454083dfd4222fdd75b9164831c", size = 12081318, upload-time = "2024-06-05T07:20:43.089Z" }, - { url = "https://files.pythonhosted.org/packages/80/36/53a831d2e82a432d785823cdff56f84737aed26e8f7667d423ee32c3983d/spacy-3.7.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd93c34bf2a02bbed7df73d42aed8df5e3eb9688c4ea84ec576f740ba939cce5", size = 6750524, upload-time = "2024-06-05T07:20:46.41Z" }, - { url = "https://files.pythonhosted.org/packages/72/49/bd65abe76607c86dc1f104ad545eeb3e771f474b7e259e64e5a16614615b/spacy-3.7.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:190ba0032a5efdb138487c587c0ebb7a98f86adb917f464b252ee8766b8eec4a", size = 6517941, upload-time = "2024-06-05T07:20:49.203Z" }, - { url = "https://files.pythonhosted.org/packages/51/83/ec38e9bddb17b8f07539a49a19f2b30ce8e7d7a3d4f94dda31ea9bd043f7/spacy-3.7.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38de1c9bbb73b8cdfea2dd6e57450f093c1a1af47515870c1c8640b85b35ab16", size = 6236788, upload-time = "2024-06-05T07:20:52.227Z" }, - { url = "https://files.pythonhosted.org/packages/e0/ce/b5e6b02165881547ad251b0b172ebf496b9181a95833f94012af82d044df/spacy-3.7.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3dad4853950a2fe6c7a0bdfd791a762d1f8cedd2915c4ae41b2e0ca3a850eefc", size = 6585757, upload-time = "2024-06-05T07:20:54.87Z" }, - { url = "https://files.pythonhosted.org/packages/39/e1/08681583569f435347ced0535b27c073fcc9a927d9b4293c963092f2d01c/spacy-3.7.5-cp311-cp311-win_amd64.whl", hash = "sha256:4e00d076871af784c2e43185a71ee676b58893853a05c5b81717b8af2b666c07", size = 12078792, upload-time = "2024-06-05T07:20:58.055Z" }, + { url = "https://files.pythonhosted.org/packages/ec/bb/2799cc2ede3ed41131f8975621e7213dfc7ef4acbbaadfa440f32500c370/starlette-1.3.1-py3-none-any.whl", hash = "sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6", size = 73632, upload-time = "2026-06-12T09:23:10.017Z" }, ] [[package]] -name = "spacy-legacy" -version = "3.0.12" +name = "supervisor" +version = "4.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d9/79/91f9d7cc8db5642acad830dcc4b49ba65a7790152832c4eceb305e46d681/spacy-legacy-3.0.12.tar.gz", hash = "sha256:b37d6e0c9b6e1d7ca1cf5bc7152ab64a4c4671f59c85adaf7a3fcb870357a774", size = 23806, upload-time = "2023-01-23T09:04:15.104Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/b5/37e7a3706de436a8a2d75334711dad1afb4ddffab09f25e31d89e467542f/supervisor-4.3.0.tar.gz", hash = "sha256:4a2bf149adf42997e1bb44b70c43b613275ec9852c3edacca86a9166b27e945e", size = 468912, upload-time = "2025-08-23T18:25:02.418Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/55/12e842c70ff8828e34e543a2c7176dac4da006ca6901c9e8b43efab8bc6b/spacy_legacy-3.0.12-py2.py3-none-any.whl", hash = "sha256:476e3bd0d05f8c339ed60f40986c07387c0a71479245d6d0f4298dbd52cda55f", size = 29971, upload-time = "2023-01-23T09:04:13.45Z" }, + { url = "https://files.pythonhosted.org/packages/0e/65/5e726c372da8a5e35022a94388b12252710aad0c2351699c3d76ae8dba78/supervisor-4.3.0-py2.py3-none-any.whl", hash = "sha256:0bcb763fddafba410f35cbde226aa7f8514b9fb82eb05a0c85f6588d1c13f8db", size = 320736, upload-time = "2025-08-23T18:25:00.767Z" }, ] [[package]] -name = "spacy-loggers" -version = "1.0.5" +name = "sympy" +version = "1.14.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/67/3d/926db774c9c98acf66cb4ed7faf6c377746f3e00b84b700d0868b95d0712/spacy-loggers-1.0.5.tar.gz", hash = "sha256:d60b0bdbf915a60e516cc2e653baeff946f0cfc461b452d11a4d5458c6fe5f24", size = 20811, upload-time = "2023-09-11T12:26:52.323Z" } +dependencies = [ + { name = "mpmath", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/33/78/d1a1a026ef3af911159398c939b1509d5c36fe524c7b644f34a5146c4e16/spacy_loggers-1.0.5-py3-none-any.whl", hash = "sha256:196284c9c446cc0cdb944005384270d775fdeaf4f494d8e269466cfa497ef645", size = 22343, upload-time = "2023-09-11T12:26:50.586Z" }, + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, ] [[package]] -name = "sqlalchemy" -version = "2.0.37" +name = "tabulate" +version = "0.10.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64'" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3b/20/93ea2518df4d7a14ebe9ace9ab8bb92aaf7df0072b9007644de74172b06c/sqlalchemy-2.0.37.tar.gz", hash = "sha256:12b28d99a9c14eaf4055810df1001557176716de0167b91026e648e65229bffb", size = 9626249, upload-time = "2025-01-09T22:43:25.981Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/80/21/aaf0cd2e7ee56e464af7cba38a54f9c1203570181ec5d847711f33c9f520/SQLAlchemy-2.0.37-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da36c3b0e891808a7542c5c89f224520b9a16c7f5e4d6a1156955605e54aef0e", size = 2102915, upload-time = "2025-01-10T00:32:23.205Z" }, - { url = "https://files.pythonhosted.org/packages/fd/01/6615256759515f13bb7d7b49981326f1f4e80ff1bd92dccd53f99dab79ea/SQLAlchemy-2.0.37-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e7402ff96e2b073a98ef6d6142796426d705addd27b9d26c3b32dbaa06d7d069", size = 2094095, upload-time = "2025-01-10T00:32:27.283Z" }, - { url = "https://files.pythonhosted.org/packages/6a/f2/400252bda1bd67da7a35bb2ab84d10a8ad43975d42f15b207a9efb765446/SQLAlchemy-2.0.37-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6f5d254a22394847245f411a2956976401e84da4288aa70cbcd5190744062c1", size = 3076482, upload-time = "2025-01-10T02:42:49.513Z" }, - { url = "https://files.pythonhosted.org/packages/40/c6/e7e8e894c8f065f96ca202cdb00454d60d4962279b3eb5a81b8766dfa836/SQLAlchemy-2.0.37-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41296bbcaa55ef5fdd32389a35c710133b097f7b2609d8218c0eabded43a1d84", size = 3084750, upload-time = "2025-01-10T00:58:04.316Z" }, - { url = "https://files.pythonhosted.org/packages/d6/ee/1cdab04b7760e48273f2592037df156afae044e2e6589157673bd2a830c0/SQLAlchemy-2.0.37-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bedee60385c1c0411378cbd4dc486362f5ee88deceea50002772912d798bb00f", size = 3040575, upload-time = "2025-01-10T02:42:52.811Z" }, - { url = "https://files.pythonhosted.org/packages/4d/af/2dd456bfd8d4b9750792ceedd828bddf83860f2420545e5effbaf722dae5/SQLAlchemy-2.0.37-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6c67415258f9f3c69867ec02fea1bf6508153709ecbd731a982442a590f2b7e4", size = 3066113, upload-time = "2025-01-10T00:58:07.514Z" }, - { url = "https://files.pythonhosted.org/packages/dd/d7/ad997559574f94d7bd895a8a63996afef518d07e9eaf5a2a9cbbcb877c16/SQLAlchemy-2.0.37-cp310-cp310-win32.whl", hash = "sha256:650dcb70739957a492ad8acff65d099a9586b9b8920e3507ca61ec3ce650bb72", size = 2075239, upload-time = "2025-01-09T22:59:09.664Z" }, - { url = "https://files.pythonhosted.org/packages/d0/82/141fbed705a21af2d825068831da1d80d720945df60c2b97ddc5133b3714/SQLAlchemy-2.0.37-cp310-cp310-win_amd64.whl", hash = "sha256:93d1543cd8359040c02b6614421c8e10cd7a788c40047dbc507ed46c29ae5636", size = 2099307, upload-time = "2025-01-09T22:59:11.208Z" }, - { url = "https://files.pythonhosted.org/packages/7c/37/4915290c1849337be6d24012227fb3c30c575151eec2b182ee5f45e96ce7/SQLAlchemy-2.0.37-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:78361be6dc9073ed17ab380985d1e45e48a642313ab68ab6afa2457354ff692c", size = 2104098, upload-time = "2025-01-10T00:32:29.975Z" }, - { url = "https://files.pythonhosted.org/packages/4c/f5/8cce9196434014a24cc65f6c68faa9a887080932361ee285986c0a35892d/SQLAlchemy-2.0.37-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b661b49d0cb0ab311a189b31e25576b7ac3e20783beb1e1817d72d9d02508bf5", size = 2094492, upload-time = "2025-01-10T00:32:32.697Z" }, - { url = "https://files.pythonhosted.org/packages/9c/54/2df4b3d0d11b384b6e9a8788d0f1123243f2d2356e2ccf626f93dcc1a09f/SQLAlchemy-2.0.37-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d57bafbab289e147d064ffbd5cca2d7b1394b63417c0636cea1f2e93d16eb9e8", size = 3212789, upload-time = "2025-01-10T02:42:56.584Z" }, - { url = "https://files.pythonhosted.org/packages/57/4f/e1db9475f940f1c54c365ed02d4f6390f884fc95a6a4022ece7725956664/SQLAlchemy-2.0.37-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fa2c0913f02341d25fb858e4fb2031e6b0813494cca1ba07d417674128ce11b", size = 3212784, upload-time = "2025-01-10T00:58:09.639Z" }, - { url = "https://files.pythonhosted.org/packages/89/57/d93212e827d1f03a6cd4d0ea13775957c2a95161330fa47449b91153bd09/SQLAlchemy-2.0.37-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9df21b8d9e5c136ea6cde1c50d2b1c29a2b5ff2b1d610165c23ff250e0704087", size = 3149616, upload-time = "2025-01-10T02:42:58.816Z" }, - { url = "https://files.pythonhosted.org/packages/5f/c2/759347419f69cf0bbb76d330fbdbd24cefb15842095fe86bca623759b9e8/SQLAlchemy-2.0.37-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db18ff6b8c0f1917f8b20f8eca35c28bbccb9f83afa94743e03d40203ed83de9", size = 3169944, upload-time = "2025-01-10T00:58:12.998Z" }, - { url = "https://files.pythonhosted.org/packages/22/04/a19ecb53aa19bb8cf491ecdb6bf8c1ac74959cd4962e119e91d4e2b8ecaa/SQLAlchemy-2.0.37-cp311-cp311-win32.whl", hash = "sha256:46954173612617a99a64aee103bcd3f078901b9a8dcfc6ae80cbf34ba23df989", size = 2074686, upload-time = "2025-01-09T22:59:12.557Z" }, - { url = "https://files.pythonhosted.org/packages/7b/9d/6e030cc2c675539dbc5ef73aa97a3cbe09341e27ad38caed2b70c4273aff/SQLAlchemy-2.0.37-cp311-cp311-win_amd64.whl", hash = "sha256:7b7e772dc4bc507fdec4ee20182f15bd60d2a84f1e087a8accf5b5b7a0dcf2ba", size = 2099891, upload-time = "2025-01-09T22:59:15.253Z" }, - { url = "https://files.pythonhosted.org/packages/3b/36/59cc97c365f2f79ac9f3f51446cae56dfd82c4f2dd98497e6be6de20fb91/SQLAlchemy-2.0.37-py3-none-any.whl", hash = "sha256:a8998bf9f8658bd3839cbc44ddbe982955641863da0c1efe5b00c1ab4f5c16b1", size = 1894113, upload-time = "2025-01-10T00:44:58.368Z" }, -] - -[[package]] -name = "srsly" -version = "2.5.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "catalogue" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2b/db/f794f219a6c788b881252d2536a8c4a97d2bdaadc690391e1cb53d123d71/srsly-2.5.3.tar.gz", hash = "sha256:08f98dbecbff3a31466c4ae7c833131f59d3655a0ad8ac749e6e2c149e2b0680", size = 490881, upload-time = "2026-03-23T11:56:59.865Z" } +sdist = { url = "https://files.pythonhosted.org/packages/46/58/8c37dea7bbf769b20d58e7ace7e5edfe65b849442b00ffcdd56be88697c6/tabulate-0.10.0.tar.gz", hash = "sha256:e2cfde8f79420f6deeffdeda9aaec3b6bc5abce947655d17ac662b126e48a60d", size = 91754, upload-time = "2026-03-04T18:55:34.402Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/67/e6d4decfb0cdc95b54c60854a1a6d1702983c39206c2b9f70f4ab18b17c8/srsly-2.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c812302a9acfe171e82f680b7ad642014cd017380b2c678441b3da4fb513c498", size = 657202, upload-time = "2026-03-23T11:55:34.938Z" }, - { url = "https://files.pythonhosted.org/packages/cc/5d/cb8b093d0836e59c152de6dfdb5db80c6408b00def0123f26d24bffde480/srsly-2.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91688edb1f49110870d2c215db2cf445f1763c14173698ead0818908c51fb2a1", size = 657951, upload-time = "2026-03-23T11:55:36.571Z" }, - { url = "https://files.pythonhosted.org/packages/71/a1/5d2fb4c6a8e0e39dd1fb23bdd8feb1f2525ce90b28946f9f58ac5d3a039c/srsly-2.5.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1fd6c35c65c4d2435ae5bfb57b59682cf9b61606318a2a761856be9d7cc2d9e3", size = 1119766, upload-time = "2026-03-23T11:55:38.351Z" }, - { url = "https://files.pythonhosted.org/packages/ff/83/0862ffac8c06ed595dd1e28f261c37956585b9cf6b9bd049f8430a4c2daf/srsly-2.5.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b9df76d5a6bbf50967589bd42df3c522dd88babea2be745a507f56b41ab40626", size = 1120674, upload-time = "2026-03-23T11:55:39.644Z" }, - { url = "https://files.pythonhosted.org/packages/f1/06/42f72bab50876a708a10e6fc026ae8c7f185507d9f27544fa4ee8567c5fd/srsly-2.5.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a595958d0b1ff6d59c2570a3f0d1c8e36ab9f89d6e1b9c96fa7eb5e1a8698510", size = 1078505, upload-time = "2026-03-23T11:55:41.299Z" }, - { url = "https://files.pythonhosted.org/packages/e5/f4/dfb86bc5c3abee267fb2f34895ea80d0159a084987a93d56ed1bf5ebefe4/srsly-2.5.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bc0ad5be2aeb9ff29c8512848d39d7c63fdd4bfbb5516bc523f5de5a77e55e6d", size = 1090635, upload-time = "2026-03-23T11:55:42.7Z" }, - { url = "https://files.pythonhosted.org/packages/2a/a6/561b46eff4477191dd649e09dd9b88afc44aad7ce204c45f4e45ad04861d/srsly-2.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:d2b8cfd8aee4d06ab335d359e4095d206102300a5e105a4b4bc69acca42427a6", size = 651653, upload-time = "2026-03-23T11:55:44.429Z" }, - { url = "https://files.pythonhosted.org/packages/dc/05/b122a1afaf8e8644d10f0203ad5174993910e6f727843089f0d48b444340/srsly-2.5.3-cp310-cp310-win_arm64.whl", hash = "sha256:c378afcb7dd7c42f426a66112496c949fc39e5883de6817d86e60afa51720ccc", size = 639118, upload-time = "2026-03-23T11:55:45.796Z" }, - { url = "https://files.pythonhosted.org/packages/9a/36/5d7bb412d52e9cca787f9bfe838b596367189b254e50bf90f234a97184bf/srsly-2.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:785a09216ac31570fb301ddb9f61ee73d1f18f8b9561f712dce0b8ac8628bc88", size = 656760, upload-time = "2026-03-23T11:55:47.155Z" }, - { url = "https://files.pythonhosted.org/packages/d6/dc/124f008cd2be3e887e972cbdeb17c5aee0f42093eca02c7cfd63bb5daf19/srsly-2.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0017c7d2a0cd9a4f1bdc00d946b45edcf90bb0e271e8f084c1ce542bf6708c32", size = 657503, upload-time = "2026-03-23T11:55:48.681Z" }, - { url = "https://files.pythonhosted.org/packages/35/8a/2c97244ebab125d55f1bfb7bb94e9572b3e819410dffd6a040eca1112350/srsly-2.5.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:66ebae2c70305987341519ec1a720072a3cb3e4b1d52ac0e9e841f4d02658d3d", size = 1139161, upload-time = "2026-03-23T11:55:50.179Z" }, - { url = "https://files.pythonhosted.org/packages/fc/ea/ecd396188f7591d80b89665f7af9e3ae02e42683daef57033ad7993ad3f9/srsly-2.5.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4ca4a068f6e14d84113a02fcb875c6b50a6285a12938c0e7a157eb3a63c50a86", size = 1142438, upload-time = "2026-03-23T11:55:52.607Z" }, - { url = "https://files.pythonhosted.org/packages/9c/65/143e2e143c53d498ad0956f69d0e09189aa7a6e0ee6017758c285ba1ab2d/srsly-2.5.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e283fa2a8f7350fb9fb70ecdee28d59d39c92f4c7f1cc90a44d6b86db3b3a8b3", size = 1101783, upload-time = "2026-03-23T11:55:53.906Z" }, - { url = "https://files.pythonhosted.org/packages/6b/86/1392a5593de0cd3d08c2d6c071b877c84358a37f63172c4e9cb71706842d/srsly-2.5.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9ffc97e22730ea97b00f7c303ccc60b1305e786afadb2a4a46578dafa4d29da0", size = 1115876, upload-time = "2026-03-23T11:55:55.624Z" }, - { url = "https://files.pythonhosted.org/packages/d4/a5/6193aa4c08e488821538fcbce2282449e228fd2183ed67d118bb5ccd8b54/srsly-2.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:f09b551f6c3e334652831ac68c770ee4284741ce0a3895bf1ccf2a1178d66cdd", size = 651733, upload-time = "2026-03-23T11:55:56.964Z" }, - { url = "https://files.pythonhosted.org/packages/66/a8/a73181743b6d237026615ca75c3fb3e4780736f1390550a7350d0c7f1149/srsly-2.5.3-cp311-cp311-win_arm64.whl", hash = "sha256:21cf09e417d3e4f3fbf7dd337fd6d948c97abd01896b9b4cb80e81cd9778a73a", size = 639124, upload-time = "2026-03-23T11:55:58.532Z" }, + { url = "https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl", hash = "sha256:f0b0622e567335c8fabaaa659f1b33bcb6ddfe2e496071b743aa113f8774f2d3", size = 39814, upload-time = "2026-03-04T18:55:31.284Z" }, ] [[package]] -name = "starlette" -version = "1.3.1" +name = "tenacity" +version = "9.0.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/eb/e3/7c1dc7381d9f8ab7d854328ebfa884e62cb3f3d8549ddfd37c7814f42afa/starlette-1.3.1.tar.gz", hash = "sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0", size = 2703240, upload-time = "2026-06-12T09:23:11.602Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/94/91fccdb4b8110642462e653d5dcb27e7b674742ad68efd146367da7bdb10/tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b", size = 47421, upload-time = "2024-07-29T12:12:27.547Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/bb/2799cc2ede3ed41131f8975621e7213dfc7ef4acbbaadfa440f32500c370/starlette-1.3.1-py3-none-any.whl", hash = "sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6", size = 73632, upload-time = "2026-06-12T09:23:10.017Z" }, + { url = "https://files.pythonhosted.org/packages/b6/cb/b86984bed139586d01532a587464b5805f12e397594f19f931c4c2fbfa61/tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539", size = 28169, upload-time = "2024-07-29T12:12:25.825Z" }, ] [[package]] -name = "sympy" -version = "1.14.0" +name = "tiktoken" +version = "0.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mpmath" }, + { name = "regex", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "requests", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } +sdist = { url = "https://files.pythonhosted.org/packages/37/02/576ff3a6639e755c4f70997b2d315f56d6d71e0d046f4fb64cb81a3fb099/tiktoken-0.8.0.tar.gz", hash = "sha256:9ccbb2740f24542534369c5635cfd9b2b3c2490754a78ac8831d99f89f94eeb2", size = 35107, upload-time = "2024-10-03T22:44:04.196Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, + { url = "https://files.pythonhosted.org/packages/01/c4/c4a4360de845217b6aa9709c15773484b50479f36bb50419c443204e5de9/tiktoken-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fb0e352d1dbe15aba082883058b3cce9e48d33101bdaac1eccf66424feb5b47", size = 1176588, upload-time = "2024-10-03T22:43:31.136Z" }, + { url = "https://files.pythonhosted.org/packages/f8/a3/ef984e976822cd6c2227c854f74d2e60cf4cd6fbfca46251199914746f78/tiktoken-0.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:56edfefe896c8f10aba372ab5706b9e3558e78db39dd497c940b47bf228bc419", size = 1237261, upload-time = "2024-10-03T22:43:32.75Z" }, ] [[package]] -name = "tenacity" -version = "9.1.4" +name = "tilelang" +version = "0.1.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/47/c6/ee486fd809e357697ee8a44d3d69222b344920433d3b6666ccd9b374630c/tenacity-9.1.4.tar.gz", hash = "sha256:adb31d4c263f2bd041081ab33b498309a57c77f9acf2db65aadf0898179cf93a", size = 49413, upload-time = "2026-02-07T10:45:33.841Z" } +dependencies = [ + { name = "apache-tvm-ffi", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "cloudpickle", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "ml-dtypes", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "psutil", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch-c-dlpack-ext", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tqdm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "z3-solver", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/56/70/5051f65821baa30a3d61fc48f8ba10c776490315e8c90f82559b92089756/tilelang-0.1.9.tar.gz", hash = "sha256:287f727c913bb648fcf6c1968809ba3390e55eeed257a5c6bb9a80bc05966af4", size = 93395292, upload-time = "2026-04-22T09:19:11.988Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl", hash = "sha256:6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55", size = 28926, upload-time = "2026-02-07T10:45:32.24Z" }, + { url = "https://files.pythonhosted.org/packages/f7/8a/1cbeee79d62abaa02441c2d00621554e41aa62dbf3b94a4feb3867184b01/tilelang-0.1.9-cp38-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4bbccfe9035aed775ffafb6dc25a5994504b24e2c5d95d0f39643edfafa7bf12", size = 45419374, upload-time = "2026-04-22T09:15:56.014Z" }, ] [[package]] -name = "thinc" -version = "8.2.5" +name = "tokenizers" +version = "0.22.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "blis" }, - { name = "catalogue" }, - { name = "confection" }, - { name = "cymem" }, - { name = "murmurhash" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "preshed" }, - { name = "pydantic" }, - { name = "setuptools" }, - { name = "srsly" }, - { name = "wasabi" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3b/2a/0e2e961e6152bedecca70e6833f6e827ee621efcee7496643242b506d54f/thinc-8.2.5.tar.gz", hash = "sha256:c2963791c934cc7fbd8f9b942d571cac79892ad11630bfca690a868c32752b75", size = 193031, upload-time = "2024-06-19T16:42:44.563Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/76/1994abe2bf5cbe5f68231fd2c177e384b19bed86268d56c1b6b2dc19e203/thinc-8.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dc267f6aad80a681a85f50383afe91da9e2bec56fefdda86bfa2e4f529bef191", size = 843631, upload-time = "2024-06-19T16:40:48.216Z" }, - { url = "https://files.pythonhosted.org/packages/e5/76/47e94af32943bd92d7cda4e92d185331a89116a0bf87123cc71796f21a00/thinc-8.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d80f1e497971c9fa0938f5cc8fe607bbe87356b405fb7bbc3ff9f32fb4eed3bb", size = 779045, upload-time = "2024-06-19T16:40:55.81Z" }, - { url = "https://files.pythonhosted.org/packages/c0/76/7dcce5cd2b5a9fe92b76767d688f17fe459543c13893e588545db3c0dc85/thinc-8.2.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0933adbd3e65e30d3bef903e77a368bc8a41bed34b0d18df6d4fc0536908e21f", size = 868726, upload-time = "2024-06-19T16:41:01.288Z" }, - { url = "https://files.pythonhosted.org/packages/d7/b5/ad029dc7346381922b7fd655b3fc39009cf675766345d8e13f9f8282bde8/thinc-8.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54bac2ba23b208fdaf267cd6113d26a5ecbb3b0e0c6015dff784ae6a9c5e78ca", size = 922374, upload-time = "2024-06-19T16:41:05.54Z" }, - { url = "https://files.pythonhosted.org/packages/f6/3e/fb96407db92a15b5c0feb0deb930c4c223bdb772e04b51b9798a86059a26/thinc-8.2.5-cp310-cp310-win_amd64.whl", hash = "sha256:399260197ef3f8d9600315fc5b5a1d5940400fceb0361de642e9fe3506d82385", size = 1482115, upload-time = "2024-06-19T16:41:11.734Z" }, - { url = "https://files.pythonhosted.org/packages/76/37/8acfeba6bb25b08c2a33bfae5301a5df4dc164d2d17040bebbcf66d783a1/thinc-8.2.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a75c0de3340afed594beda293661de145f3842873df56d9989bc338148f13fab", size = 839072, upload-time = "2024-06-19T16:41:18.429Z" }, - { url = "https://files.pythonhosted.org/packages/e9/eb/753a85875fb0261c83ca87a1a36d41346bde662c3a029ace9d68fe32bc5b/thinc-8.2.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6b166d1a22003ee03bc236370fff2884744c1fb758a6209a2512d305773d07d7", size = 773885, upload-time = "2024-06-19T16:41:24.693Z" }, - { url = "https://files.pythonhosted.org/packages/34/47/06810a1bd9d3287076ba17299abec82c8c643563661b1af9b1d5d9aeab38/thinc-8.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34db8a023b9f70645fdf06c510584ba6d8b97ec53c1e094f42d95652bf8c875f", size = 868332, upload-time = "2024-06-19T16:41:31.038Z" }, - { url = "https://files.pythonhosted.org/packages/1a/19/cd73e3b5f22d5d9399f6f2931ab0fb985415f34030dcfead070181866761/thinc-8.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8901b30db1071ea8d5e4437429c8632535bf5ed87938ce3bb5057bed9f15aed8", size = 920152, upload-time = "2024-06-19T16:41:36.939Z" }, - { url = "https://files.pythonhosted.org/packages/5e/0e/5e7b24e046e0725eafc37ded0cd9bfaf789efb894101a7aca8a73dba81de/thinc-8.2.5-cp311-cp311-win_amd64.whl", hash = "sha256:8ef5d46d62e31f2450224ab22391a606cf427b13e20cfc570f70422e2f333872", size = 1480120, upload-time = "2024-06-19T16:41:40.877Z" }, -] - -[[package]] -name = "threadpoolctl" -version = "3.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" } + { name = "huggingface-hub", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/46/fb6854cec3278fbfa4a75b50232c77622bc517ac886156e6afbfa4d8fc6e/tokenizers-0.22.1.tar.gz", hash = "sha256:61de6522785310a309b3407bac22d99c4db5dba349935e99e4d15ea2226af2d9", size = 363123, upload-time = "2025-09-19T09:49:23.424Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, + { url = "https://files.pythonhosted.org/packages/bf/33/f4b2d94ada7ab297328fc671fed209368ddb82f965ec2224eb1892674c3a/tokenizers-0.22.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:59fdb013df17455e5f950b4b834a7b3ee2e0271e6378ccb33aa74d178b513c73", size = 3069318, upload-time = "2025-09-19T09:49:11.848Z" }, + { url = "https://files.pythonhosted.org/packages/1c/58/2aa8c874d02b974990e89ff95826a4852a8b2a273c7d1b4411cdd45a4565/tokenizers-0.22.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:8d4e484f7b0827021ac5f9f71d4794aaef62b979ab7608593da22b1d2e3c4edc", size = 2926478, upload-time = "2025-09-19T09:49:09.759Z" }, + { url = "https://files.pythonhosted.org/packages/d0/c6/dc3a0db5a6766416c32c034286d7c2d406da1f498e4de04ab1b8959edd00/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2ef6063d7a84994129732b47e7915e8710f27f99f3a3260b8a38fc7ccd083f4", size = 3250221, upload-time = "2025-09-19T09:49:07.664Z" }, + { url = "https://files.pythonhosted.org/packages/36/65/7e75caea90bc73c1dd8d40438adf1a7bc26af3b8d0a6705ea190462506e1/tokenizers-0.22.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a0f307d490295717726598ef6fa4f24af9d484809223bbc253b201c740a06390", size = 9681250, upload-time = "2025-09-19T09:49:21.501Z" }, ] [[package]] -name = "tiktoken" -version = "0.8.0" +name = "tokenspeed-mla" +version = "0.1.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "regex" }, - { name = "requests" }, + { name = "apache-tvm-ffi", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cutlass-dsl", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tokenspeed-triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/37/02/576ff3a6639e755c4f70997b2d315f56d6d71e0d046f4fb64cb81a3fb099/tiktoken-0.8.0.tar.gz", hash = "sha256:9ccbb2740f24542534369c5635cfd9b2b3c2490754a78ac8831d99f89f94eeb2", size = 35107, upload-time = "2024-10-03T22:44:04.196Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c9/ba/a35fad753bbca8ba0cc1b0f3402a70256a110ced7ac332cf84ba89fc87ab/tiktoken-0.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b07e33283463089c81ef1467180e3e00ab00d46c2c4bbcef0acab5f771d6695e", size = 1039905, upload-time = "2024-10-03T22:43:17.292Z" }, - { url = "https://files.pythonhosted.org/packages/91/05/13dab8fd7460391c387b3e69e14bf1e51ff71fe0a202cd2933cc3ea93fb6/tiktoken-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9269348cb650726f44dd3bbb3f9110ac19a8dcc8f54949ad3ef652ca22a38e21", size = 982417, upload-time = "2024-10-03T22:43:19.437Z" }, - { url = "https://files.pythonhosted.org/packages/e9/98/18ec4a8351a6cf4537e40cd6e19a422c10cce1ef00a2fcb716e0a96af58b/tiktoken-0.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e13f37bc4ef2d012731e93e0fef21dc3b7aea5bb9009618de9a4026844e560", size = 1144915, upload-time = "2024-10-03T22:43:21.385Z" }, - { url = "https://files.pythonhosted.org/packages/2e/28/cf3633018cbcc6deb7805b700ccd6085c9a5a7f72b38974ee0bffd56d311/tiktoken-0.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f13d13c981511331eac0d01a59b5df7c0d4060a8be1e378672822213da51e0a2", size = 1177221, upload-time = "2024-10-03T22:43:23.325Z" }, - { url = "https://files.pythonhosted.org/packages/57/81/8a5be305cbd39d4e83a794f9e80c7f2c84b524587b7feb27c797b2046d51/tiktoken-0.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6b2ddbc79a22621ce8b1166afa9f9a888a664a579350dc7c09346a3b5de837d9", size = 1237398, upload-time = "2024-10-03T22:43:24.71Z" }, - { url = "https://files.pythonhosted.org/packages/dc/da/8d1cc3089a83f5cf11c2e489332752981435280285231924557350523a59/tiktoken-0.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d8c2d0e5ba6453a290b86cd65fc51fedf247e1ba170191715b049dac1f628005", size = 884215, upload-time = "2024-10-03T22:43:26.793Z" }, - { url = "https://files.pythonhosted.org/packages/f6/1e/ca48e7bfeeccaf76f3a501bd84db1fa28b3c22c9d1a1f41af9fb7579c5f6/tiktoken-0.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d622d8011e6d6f239297efa42a2657043aaed06c4f68833550cac9e9bc723ef1", size = 1039700, upload-time = "2024-10-03T22:43:28.315Z" }, - { url = "https://files.pythonhosted.org/packages/8c/f8/f0101d98d661b34534769c3818f5af631e59c36ac6d07268fbfc89e539ce/tiktoken-0.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2efaf6199717b4485031b4d6edb94075e4d79177a172f38dd934d911b588d54a", size = 982413, upload-time = "2024-10-03T22:43:29.807Z" }, - { url = "https://files.pythonhosted.org/packages/ac/3c/2b95391d9bd520a73830469f80a96e3790e6c0a5ac2444f80f20b4b31051/tiktoken-0.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5637e425ce1fc49cf716d88df3092048359a4b3bbb7da762840426e937ada06d", size = 1144242, upload-time = "2024-10-04T04:42:53.66Z" }, - { url = "https://files.pythonhosted.org/packages/01/c4/c4a4360de845217b6aa9709c15773484b50479f36bb50419c443204e5de9/tiktoken-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fb0e352d1dbe15aba082883058b3cce9e48d33101bdaac1eccf66424feb5b47", size = 1176588, upload-time = "2024-10-03T22:43:31.136Z" }, - { url = "https://files.pythonhosted.org/packages/f8/a3/ef984e976822cd6c2227c854f74d2e60cf4cd6fbfca46251199914746f78/tiktoken-0.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:56edfefe896c8f10aba372ab5706b9e3558e78db39dd497c940b47bf228bc419", size = 1237261, upload-time = "2024-10-03T22:43:32.75Z" }, - { url = "https://files.pythonhosted.org/packages/1e/86/eea2309dc258fb86c7d9b10db536434fc16420feaa3b6113df18b23db7c2/tiktoken-0.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:326624128590def898775b722ccc327e90b073714227175ea8febbc920ac0a99", size = 884537, upload-time = "2024-10-03T22:43:34.592Z" }, + { url = "https://files.pythonhosted.org/packages/84/01/4bf8b74ead3e8e7c1c809435396254c067a33fde48acc20f602aae622d97/tokenspeed_mla-0.1.2-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:c9466a351fe039792e56cf49f3e79744c1dc28c7af10306a02e62b8e92fa5985", size = 748681, upload-time = "2026-05-13T03:30:56.718Z" }, ] [[package]] -name = "tokenizers" -version = "0.21.1" +name = "tokenspeed-triton" +version = "3.7.10.post20260531" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "huggingface-hub" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/92/76/5ac0c97f1117b91b7eb7323dcd61af80d72f790b4df71249a7850c195f30/tokenizers-0.21.1.tar.gz", hash = "sha256:a1bb04dc5b448985f86ecd4b05407f5a8d97cb2c0532199b2a302a604a0165ab", size = 343256, upload-time = "2025-03-13T10:51:18.189Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/1f/328aee25f9115bf04262e8b4e5a2050b7b7cf44b59c74e982db7270c7f30/tokenizers-0.21.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e78e413e9e668ad790a29456e677d9d3aa50a9ad311a40905d6861ba7692cf41", size = 2780767, upload-time = "2025-03-13T10:51:09.459Z" }, - { url = "https://files.pythonhosted.org/packages/ae/1a/4526797f3719b0287853f12c5ad563a9be09d446c44ac784cdd7c50f76ab/tokenizers-0.21.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:cd51cd0a91ecc801633829fcd1fda9cf8682ed3477c6243b9a095539de4aecf3", size = 2650555, upload-time = "2025-03-13T10:51:07.692Z" }, - { url = "https://files.pythonhosted.org/packages/4d/7a/a209b29f971a9fdc1da86f917fe4524564924db50d13f0724feed37b2a4d/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28da6b72d4fb14ee200a1bd386ff74ade8992d7f725f2bde2c495a9a98cf4d9f", size = 2937541, upload-time = "2025-03-13T10:50:56.679Z" }, - { url = "https://files.pythonhosted.org/packages/3c/1e/b788b50ffc6191e0b1fc2b0d49df8cff16fe415302e5ceb89f619d12c5bc/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:34d8cfde551c9916cb92014e040806122295a6800914bab5865deb85623931cf", size = 2819058, upload-time = "2025-03-13T10:50:59.525Z" }, - { url = "https://files.pythonhosted.org/packages/36/aa/3626dfa09a0ecc5b57a8c58eeaeb7dd7ca9a37ad9dd681edab5acd55764c/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaa852d23e125b73d283c98f007e06d4595732104b65402f46e8ef24b588d9f8", size = 3133278, upload-time = "2025-03-13T10:51:04.678Z" }, - { url = "https://files.pythonhosted.org/packages/a4/4d/8fbc203838b3d26269f944a89459d94c858f5b3f9a9b6ee9728cdcf69161/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a21a15d5c8e603331b8a59548bbe113564136dc0f5ad8306dd5033459a226da0", size = 3144253, upload-time = "2025-03-13T10:51:01.261Z" }, - { url = "https://files.pythonhosted.org/packages/d8/1b/2bd062adeb7c7511b847b32e356024980c0ffcf35f28947792c2d8ad2288/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2fdbd4c067c60a0ac7eca14b6bd18a5bebace54eb757c706b47ea93204f7a37c", size = 3398225, upload-time = "2025-03-13T10:51:03.243Z" }, - { url = "https://files.pythonhosted.org/packages/8a/63/38be071b0c8e06840bc6046991636bcb30c27f6bb1e670f4f4bc87cf49cc/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dd9a0061e403546f7377df940e866c3e678d7d4e9643d0461ea442b4f89e61a", size = 3038874, upload-time = "2025-03-13T10:51:06.235Z" }, - { url = "https://files.pythonhosted.org/packages/ec/83/afa94193c09246417c23a3c75a8a0a96bf44ab5630a3015538d0c316dd4b/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:db9484aeb2e200c43b915a1a0150ea885e35f357a5a8fabf7373af333dcc8dbf", size = 9014448, upload-time = "2025-03-13T10:51:10.927Z" }, - { url = "https://files.pythonhosted.org/packages/ae/b3/0e1a37d4f84c0f014d43701c11eb8072704f6efe8d8fc2dcdb79c47d76de/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:ed248ab5279e601a30a4d67bdb897ecbe955a50f1e7bb62bd99f07dd11c2f5b6", size = 8937877, upload-time = "2025-03-13T10:51:12.688Z" }, - { url = "https://files.pythonhosted.org/packages/ac/33/ff08f50e6d615eb180a4a328c65907feb6ded0b8f990ec923969759dc379/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:9ac78b12e541d4ce67b4dfd970e44c060a2147b9b2a21f509566d556a509c67d", size = 9186645, upload-time = "2025-03-13T10:51:14.723Z" }, - { url = "https://files.pythonhosted.org/packages/5f/aa/8ae85f69a9f6012c6f8011c6f4aa1c96154c816e9eea2e1b758601157833/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e5a69c1a4496b81a5ee5d2c1f3f7fbdf95e90a0196101b0ee89ed9956b8a168f", size = 9384380, upload-time = "2025-03-13T10:51:16.526Z" }, - { url = "https://files.pythonhosted.org/packages/e8/5b/a5d98c89f747455e8b7a9504910c865d5e51da55e825a7ae641fb5ff0a58/tokenizers-0.21.1-cp39-abi3-win32.whl", hash = "sha256:1039a3a5734944e09de1d48761ade94e00d0fa760c0e0551151d4dd851ba63e3", size = 2239506, upload-time = "2025-03-13T10:51:20.643Z" }, - { url = "https://files.pythonhosted.org/packages/e6/b6/072a8e053ae600dcc2ac0da81a23548e3b523301a442a6ca900e92ac35be/tokenizers-0.21.1-cp39-abi3-win_amd64.whl", hash = "sha256:0f0dcbcc9f6e13e675a66d7a5f2f225a736745ce484c1a4e07476a89ccdad382", size = 2435481, upload-time = "2025-03-13T10:51:19.243Z" }, + { url = "https://files.pythonhosted.org/packages/5b/ce/2069485cd8b4a8d8468ab65322416de1ecd0b1d7676441b4c3a69fc8d53e/tokenspeed_triton-3.7.10.post20260531-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:52be096ddc5225c6f2345e0d090ad2b56466a85bbeb866cc11a20e0fe3dde1bf", size = 85883121, upload-time = "2026-05-31T01:29:10.452Z" }, + { url = "https://files.pythonhosted.org/packages/d7/49/7bae94729bfd7a3f331795251302f0b0c8e54a7ec25b3af5d5bfe133367c/tokenspeed_triton-3.7.10.post20260531-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b90ac41e7f15933797545ff1a9e803a9d8beb4ca9ba70f6d41a9e0fc26484f5c", size = 85888791, upload-time = "2026-05-31T01:29:25.584Z" }, ] [[package]] @@ -3627,140 +2978,82 @@ sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841 wheels = [ { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, - { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, - { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, - { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, - { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, - { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, ] [[package]] -name = "torch" -version = "2.7.1+cu128" -source = { registry = "https://download.pytorch.org/whl/cu128" } -dependencies = [ - { name = "filelock" }, - { name = "fsspec" }, - { name = "jinja2" }, - { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cufile-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cusparselt-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "sympy" }, - { name = "triton", marker = "sys_platform == 'linux'" }, - { name = "typing-extensions" }, -] -wheels = [ - { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:aca3472608e3c92df5166537595687b53a6c997082478b372427b043dbed98d0", upload-time = "2025-06-03T18:30:30Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:d6c3cba198dc93f93422a8545f48a6697890366e4b9701f54351fc27e2304bd3", upload-time = "2025-06-03T18:30:47Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp310-cp310-win_amd64.whl", hash = "sha256:5174f02de8ca14df87c8e333c4c39cf3ce93a323c9d470d690301d110a053b3c", upload-time = "2025-06-03T18:30:50Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:3a0954c54fd7cb9f45beab1272dece2a05b0e77023c1da33ba32a7919661260f", upload-time = "2025-06-03T18:31:04Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:c301dc280458afd95450af794924c98fe07522dd148ff384739b810e3e3179f2", upload-time = "2025-06-03T18:31:06Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp311-cp311-win_amd64.whl", hash = "sha256:138c66dcd0ed2f07aafba3ed8b7958e2bed893694990e0b4b55b6b2b4a336aa6", upload-time = "2025-06-03T18:31:13Z" }, +name = "tomli-w" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/75/241269d1da26b624c0d5e110e8149093c759b7a286138f4efd61a60e75fe/tomli_w-1.2.0.tar.gz", hash = "sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021", size = 7184, upload-time = "2025-01-15T12:07:24.262Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl", hash = "sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90", size = 6675, upload-time = "2025-01-15T12:07:22.074Z" }, ] [[package]] -name = "torchaudio" -version = "2.7.1" -source = { registry = "https://download.pytorch.org/whl/cu128" } -resolution-markers = [ - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", -] -dependencies = [ - { name = "torch", marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, +name = "torch" +version = "2.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-bindings", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "cuda-toolkit", extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "filelock", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "fsspec", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "jinja2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "networkx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "nvidia-cudnn-cu13", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusparselt-cu13", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nccl-cu13", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvshmem-cu13", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "setuptools", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "sympy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] wheels = [ - { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:80f199f643d7f8e5435c1c88e7fa8c6b08eab6ebc1ec915c9b69e83a1503dc91", upload-time = "2025-06-03T18:37:40Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:aa130165f67ef873c53c8580559e5baca08ea189835419279efbf35a58587bf8", upload-time = "2025-06-03T18:37:40Z" }, + { url = "https://files.pythonhosted.org/packages/ae/0d/98b410492609e34a155fa8b121b55c7dca229f39636851c3a9ec20edea21/torch-2.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7b6a60d48062809f58595509c524b88e6ddec3ebe25833d6462eeab81e5f2ce4", size = 80529712, upload-time = "2026-03-23T18:12:02.608Z" }, + { url = "https://files.pythonhosted.org/packages/8c/8b/d7be22fbec9ffee6cff31a39f8750d4b3a65d349a286cf4aec74c2375662/torch-2.11.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:7aa2f9bbc6d4595ba72138026b2074be1233186150e9292865e04b7a63b8c67a", size = 530604548, upload-time = "2026-03-23T18:10:03.569Z" }, ] [[package]] -name = "torchaudio" -version = "2.7.1+cu128" -source = { registry = "https://download.pytorch.org/whl/cu128" } -resolution-markers = [ - "python_full_version >= '3.11' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version >= '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version < '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", -] +name = "torch-c-dlpack-ext" +version = "0.1.5" +source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "torch", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] +sdist = { url = "https://files.pythonhosted.org/packages/37/de/921b6491efce5c389a5ef9bbed3d2d6660005840dae488124173180859ab/torch_c_dlpack_ext-0.1.5.tar.gz", hash = "sha256:d06f0357d575d22a168cc77acb9020fc4bae30968ceb6718a055dcbe92bacabe", size = 12913, upload-time = "2026-01-12T11:25:08.484Z" } wheels = [ - { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.1%2Bcu128-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:2ba0816eee659e343851a9c5dc60c8e1eb819a3969b29268fab27d3143273d78", upload-time = "2025-06-03T18:37:40Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.1%2Bcu128-cp310-cp310-win_amd64.whl", hash = "sha256:b1e56a999a06a5deaebfb991dc676aaa60d98139907d99badbc6dca6456637ee", upload-time = "2025-06-03T18:37:40Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.1%2Bcu128-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:84ec727f1fdafdf85dd1c018a6d3bfabeb5665b10e0b5f273a675eb730f59ce5", upload-time = "2025-06-03T18:37:40Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.1%2Bcu128-cp311-cp311-win_amd64.whl", hash = "sha256:37a42de8c0f601dc0bc7dcccc4049644ef5adcf45920dd5813c339121e5b5a8c", upload-time = "2025-06-03T18:37:40Z" }, + { url = "https://files.pythonhosted.org/packages/64/5c/3e1382a620824f92920ab3fae132d8fb4e85898284c99e0c6a7764e452ce/torch_c_dlpack_ext-0.1.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3448c4f0d64104d0b2e58080a7efa72304a04960c18f338024b80b13cd3eca26", size = 897768, upload-time = "2026-01-12T11:24:41.209Z" }, ] [[package]] -name = "torchvision" -version = "0.22.1" -source = { registry = "https://download.pytorch.org/whl/cu128" } -resolution-markers = [ - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", -] -dependencies = [ - { name = "numpy", marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, - { name = "pillow", marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, - { name = "torch", marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, -] +name = "torchaudio" +version = "2.11.0" +source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:3a41b87628c0d6095839c43a1dd706670e7e5a56edc5860e700e1ba22c3ef8af", upload-time = "2025-06-03T18:37:29Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:299fbd935f02b424e9166b7689de57067e24a228edc00abd5faf84f86c0643a0", upload-time = "2025-06-03T18:37:29Z" }, + { url = "https://files.pythonhosted.org/packages/ac/70/17408e0d154d0c894537a88dcbadc48e8ad3b6e1ef4a1dabda5d40245ee0/torchaudio-2.11.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1a07ec72fd6f26a588c39b5f029e0130d16bb40bc4221635580bf8fb18fcbc80", size = 1771930, upload-time = "2026-03-23T18:13:37.963Z" }, ] [[package]] name = "torchvision" -version = "0.22.1+cu128" -source = { registry = "https://download.pytorch.org/whl/cu128" } -resolution-markers = [ - "python_full_version >= '3.11' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version >= '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version < '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", -] +version = "0.26.0" +source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "pillow", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "torch", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pillow", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] wheels = [ - { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.1%2Bcu128-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:538f4db667286d939b4eee0a66d31ed21b51186668006b0e0ffe20338ecc7e00", upload-time = "2025-06-03T18:37:28Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.1%2Bcu128-cp310-cp310-win_amd64.whl", hash = "sha256:ad48ba3c3ffd48027e3a8de42fcea131a53a524ee9416ca4efb22f9ac6b7328d", upload-time = "2025-06-03T18:37:28Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.1%2Bcu128-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:92568ac46b13a8c88b61589800b1b9c4629be091ea7ce080fc6fc622e11e0915", upload-time = "2025-06-03T18:37:28Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.1%2Bcu128-cp311-cp311-win_amd64.whl", hash = "sha256:85ecd729c947151eccea502853be6efc2c0029dc26e6e5148e04684aed008390", upload-time = "2025-06-03T18:37:28Z" }, + { url = "https://files.pythonhosted.org/packages/9a/45/57bbf9e216850d065e66dd31a50f57424b607f1d878ab8956e56a1f4e36b/torchvision-0.26.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:fd10b5f994c210f4f6d6761cf686f82d748554adf486cb0979770c3252868c8f", size = 7519925, upload-time = "2026-03-23T18:12:53.283Z" }, ] [[package]] name = "tqdm" version = "4.67.1" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload-time = "2024-11-24T20:12:22.481Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload-time = "2024-11-24T20:12:19.698Z" }, @@ -3768,179 +3061,153 @@ wheels = [ [[package]] name = "transformers" -version = "4.55.0" +version = "5.6.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "filelock" }, - { name = "huggingface-hub" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pyyaml" }, - { name = "regex" }, - { name = "requests" }, - { name = "safetensors" }, - { name = "tokenizers" }, - { name = "tqdm" }, + { name = "huggingface-hub", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "regex", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "safetensors", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tokenizers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typer", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/27/5d/f7dc746eef83336a6b34197311fe0c1da0d1192f637c726c6a5cf0d83502/transformers-4.55.0.tar.gz", hash = "sha256:15aa138a05d07a15b30d191ea2c45e23061ebf9fcc928a1318e03fe2234f3ae1", size = 9569089, upload-time = "2025-08-05T16:13:48.997Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a4/e9/c6c80a07690142a7d05444271f47b9f3c8aac7dea01d52e1137ee480ad78/transformers-5.6.2.tar.gz", hash = "sha256:e657134c3e5a6bc00a3c35f4e2674bb51adfcd89898495b788a18552bac2b91a", size = 8311867, upload-time = "2026-04-23T18:33:29.332Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1c/93/bcb22fb52ed65084c0199270832aa4cdd4b41296d896f3e7ade188bccb68/transformers-4.55.0-py3-none-any.whl", hash = "sha256:29d9b8800e32a4a831bb16efb5f762f6a9742fef9fce5d693ed018d19b106490", size = 11267905, upload-time = "2025-08-05T16:13:34.814Z" }, + { url = "https://files.pythonhosted.org/packages/5d/95/0b0218149b0d6f14df35f5b8f676fa83df4f19ed253c3cc447107ef86eca/transformers-5.6.2-py3-none-any.whl", hash = "sha256:f8d3a1bb96778fed9b8aabfd0dd6e19843e4b0f2bb6b59f32b8a92051b0f348f", size = 10364898, upload-time = "2026-04-23T18:33:26.081Z" }, ] [[package]] name = "trialmatchai" -version = "0.1.0" +version = "0.2.0" source = { editable = "." } dependencies = [ - { name = "accelerate" }, - { name = "bitsandbytes" }, - { name = "datasets" }, - { name = "einops" }, - { name = "elasticsearch" }, - { name = "faiss-cpu" }, - { name = "gliner" }, - { name = "httpx" }, - { name = "huggingface-hub" }, - { name = "langchain" }, - { name = "langchain-community" }, - { name = "langchain-core" }, - { name = "langchain-openai" }, - { name = "langsmith" }, - { name = "medspacy" }, - { name = "medspacy-quickumls" }, - { name = "numpy" }, - { name = "openai" }, - { name = "orjson" }, - { name = "pandas" }, - { name = "peft" }, - { name = "pydantic" }, - { name = "pydantic-settings" }, - { name = "pyfastner" }, - { name = "pyrush" }, - { name = "pysbd" }, - { name = "python-dotenv" }, - { name = "pyyaml" }, - { name = "quicksectx" }, - { name = "regex" }, - { name = "rich" }, - { name = "safetensors" }, - { name = "scikit-learn" }, - { name = "scipy" }, - { name = "sentence-transformers" }, - { name = "sentencepiece" }, - { name = "spacy" }, - { name = "sqlalchemy" }, - { name = "tiktoken" }, - { name = "tokenizers" }, - { name = "torch" }, - { name = "torchaudio", version = "2.7.1", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, - { name = "torchaudio", version = "2.7.1+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "torchvision", version = "0.22.1", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, - { name = "torchvision", version = "0.22.1+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "tqdm" }, - { name = "transformers" }, - { name = "vllm" }, + { name = "lancedb", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "pandas", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyarrow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "python-dateutil", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tenacity", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] + +[package.optional-dependencies] +entity = [ + { name = "gliner2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "transformers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +finetune = [ + { name = "accelerate", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "bitsandbytes", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "datasets", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "gliner2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "peft", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "transformers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +gpu = [ + { name = "bitsandbytes", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "vllm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +llm = [ + { name = "accelerate", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "einops", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "peft", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "safetensors", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "sentencepiece", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tokenizers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "transformers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] [package.dev-dependencies] dev = [ - { name = "pytest" }, - { name = "ruff" }, + { name = "pip-audit", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pre-commit", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pytest", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "ruff", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +docs = [ + { name = "mkdocs-material", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocstrings", extra = ["python"], marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] [package.metadata] requires-dist = [ - { name = "accelerate", specifier = "==1.8.1" }, - { name = "bitsandbytes", specifier = "==0.46.1" }, - { name = "datasets", specifier = "==2.19.0" }, - { name = "einops", specifier = "==0.8.0" }, - { name = "elasticsearch", specifier = "==8.17.2" }, - { name = "faiss-cpu", specifier = "==1.9.0.post1" }, - { name = "gliner", specifier = ">=0.2.17" }, - { name = "httpx", specifier = "==0.28.1" }, - { name = "huggingface-hub", specifier = "==0.34.4" }, - { name = "langchain", specifier = "==0.3.18" }, - { name = "langchain-community", specifier = "==0.3.17" }, - { name = "langchain-core", specifier = "==0.3.35" }, - { name = "langchain-openai", specifier = "==0.3.5" }, - { name = "langsmith", specifier = "==0.2.11" }, - { name = "medspacy", specifier = "==1.3.1" }, - { name = "medspacy-quickumls", specifier = "==3.2" }, - { name = "numpy", specifier = "==1.26.4" }, - { name = "openai", specifier = "==1.99.1" }, - { name = "orjson", specifier = "==3.10.14" }, + { name = "accelerate", marker = "extra == 'finetune'", specifier = "==1.8.1" }, + { name = "accelerate", marker = "extra == 'llm'", specifier = "==1.8.1" }, + { name = "bitsandbytes", marker = "(sys_platform == 'linux' and extra == 'finetune') or (sys_platform == 'win32' and extra == 'finetune')", specifier = "==0.49.2" }, + { name = "bitsandbytes", marker = "(sys_platform == 'linux' and extra == 'gpu') or (sys_platform == 'win32' and extra == 'gpu')", specifier = "==0.49.2" }, + { name = "datasets", marker = "extra == 'finetune'", specifier = ">=3.0,<5" }, + { name = "einops", marker = "extra == 'llm'", specifier = "==0.8.0" }, + { name = "gliner2", marker = "extra == 'entity'", specifier = ">=1.3.1,<2" }, + { name = "gliner2", marker = "extra == 'finetune'", specifier = ">=1.3.1,<2" }, + { name = "lancedb", specifier = ">=0.25.0,<0.26" }, + { name = "numpy", specifier = ">=2.0,<3" }, { name = "pandas", specifier = "==2.2.3" }, - { name = "peft", specifier = "==0.15.2" }, - { name = "pydantic", specifier = "==2.11.7" }, - { name = "pydantic-settings", specifier = "==2.7.1" }, - { name = "pyfastner", specifier = "==1.0.10" }, - { name = "pyrush", specifier = "==1.0.9" }, - { name = "pysbd", specifier = "==0.3.4" }, - { name = "python-dotenv", specifier = "==1.0.1" }, + { name = "peft", marker = "extra == 'finetune'", specifier = "==0.15.2" }, + { name = "peft", marker = "extra == 'llm'", specifier = "==0.15.2" }, + { name = "pyarrow", specifier = ">=24.0.0,<25" }, + { name = "pydantic", specifier = ">=2.12.0,<3" }, + { name = "python-dateutil", specifier = "==2.9.0.post0" }, { name = "pyyaml", specifier = "==6.0.2" }, - { name = "quicksectx", specifier = "==0.4.0" }, - { name = "regex", specifier = "==2024.11.6" }, - { name = "rich", specifier = "==13.9.4" }, - { name = "safetensors", specifier = "==0.5.3" }, - { name = "scikit-learn", specifier = "==1.6.1" }, - { name = "scipy", specifier = "==1.15.1" }, - { name = "sentence-transformers", specifier = "==2.7.0" }, - { name = "sentencepiece", specifier = "==0.2.0" }, - { name = "spacy", specifier = "==3.7.5" }, - { name = "sqlalchemy", specifier = "==2.0.37" }, - { name = "tiktoken", specifier = "==0.8.0" }, - { name = "tokenizers", specifier = "==0.21.1" }, - { name = "torch", specifier = "==2.7.1", index = "https://download.pytorch.org/whl/cu128" }, - { name = "torchaudio", specifier = "==2.7.1", index = "https://download.pytorch.org/whl/cu128" }, - { name = "torchvision", specifier = "==0.22.1", index = "https://download.pytorch.org/whl/cu128" }, + { name = "requests", specifier = "==2.34.2" }, + { name = "safetensors", marker = "extra == 'llm'", specifier = ">=0.6.2,<0.7" }, + { name = "sentencepiece", marker = "extra == 'llm'", specifier = "==0.2.1" }, + { name = "tenacity", specifier = "==9.0.0" }, + { name = "tokenizers", marker = "extra == 'llm'", specifier = "==0.22.1" }, + { name = "torch", marker = "extra == 'entity'", specifier = "==2.11.0" }, + { name = "torch", marker = "extra == 'finetune'", specifier = "==2.11.0" }, + { name = "torch", marker = "extra == 'llm'", specifier = "==2.11.0" }, { name = "tqdm", specifier = "==4.67.1" }, - { name = "transformers", specifier = "==4.55.0" }, - { name = "vllm", specifier = "==0.10.1.1" }, + { name = "transformers", marker = "extra == 'entity'", specifier = "==5.6.2" }, + { name = "transformers", marker = "extra == 'finetune'", specifier = "==5.6.2" }, + { name = "transformers", marker = "extra == 'llm'", specifier = "==5.6.2" }, + { name = "vllm", marker = "sys_platform == 'linux' and extra == 'gpu'", specifier = "==0.23.0" }, ] +provides-extras = ["gpu", "llm", "entity", "finetune"] [package.metadata.requires-dev] dev = [ - { name = "pytest", specifier = ">=7.4" }, - { name = "ruff", specifier = ">=0.6.0" }, + { name = "pip-audit", specifier = ">=2.7.3" }, + { name = "pre-commit", specifier = ">=4.0" }, + { name = "pytest", specifier = ">=8.3" }, + { name = "ruff", specifier = ">=0.9.0" }, +] +docs = [ + { name = "mkdocs-material", specifier = ">=9.5" }, + { name = "mkdocstrings", extras = ["python"], specifier = ">=0.26" }, ] [[package]] name = "triton" -version = "3.3.1" +version = "3.6.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "setuptools" }, -] wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/a9/549e51e9b1b2c9b854fd761a1d23df0ba2fbc60bd0c13b489ffa518cfcb7/triton-3.3.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b74db445b1c562844d3cfad6e9679c72e93fdfb1a90a24052b03bb5c49d1242e", size = 155600257, upload-time = "2025-05-29T23:39:36.085Z" }, - { url = "https://files.pythonhosted.org/packages/21/2f/3e56ea7b58f80ff68899b1dbe810ff257c9d177d288c6b0f55bf2fe4eb50/triton-3.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b31e3aa26f8cb3cc5bf4e187bf737cbacf17311e1112b781d4a059353dfd731b", size = 155689937, upload-time = "2025-05-29T23:39:44.182Z" }, + { url = "https://files.pythonhosted.org/packages/e0/12/b05ba554d2c623bffa59922b94b0775673de251f468a9609bc9e45de95e9/triton-3.6.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8e323d608e3a9bfcc2d9efcc90ceefb764a82b99dea12a86d643c72539ad5d3", size = 188214640, upload-time = "2026-01-20T16:00:35.869Z" }, ] [[package]] name = "typer" -version = "0.26.7" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "annotated-doc" }, - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "rich" }, - { name = "shellingham" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5e/ed/ef06584ccdd5c410df0837951ecd7e15d9a6144ea1bd4c73cecab1a89891/typer-0.26.7.tar.gz", hash = "sha256:e314a34c617e419c091b2830dda3ea1f257134ff593061a8f5b9717ab8dddb3a", size = 201709, upload-time = "2026-06-03T07:18:06.843Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/24/25/2201973529af2c954de0bb725323c3aaed6d7f0ceee8f550dec9185df013/typer-0.26.7-py3-none-any.whl", hash = "sha256:5c87cfbc5d34491c5346ebf49c23e18d56ccb863268d3a8d592b26087c2f5e58", size = 122456, upload-time = "2026-06-03T07:18:05.732Z" }, -] - -[[package]] -name = "typer-slim" -version = "0.24.0" +version = "0.25.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typer" }, + { name = "annotated-doc", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "click", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "rich", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "shellingham", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a7/a7/e6aecc4b4eb59598829a3b5076a93aff291b4fdaa2ded25efc4e1f4d219c/typer_slim-0.24.0.tar.gz", hash = "sha256:f0ed36127183f52ae6ced2ecb2521789995992c521a46083bfcdbb652d22ad34", size = 4776, upload-time = "2026-02-16T22:08:51.2Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/51/9aed62104cea109b820bbd6c14245af756112017d309da813ef107d42e7e/typer-0.25.1.tar.gz", hash = "sha256:9616eb8853a09ffeabab1698952f33c6f29ffdbceb4eaeecf571880e8d7664cc", size = 122276, upload-time = "2026-04-30T19:32:16.964Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/24/5480c20380dfd18cf33d14784096dca45a24eae6102e91d49a718d3b6855/typer_slim-0.24.0-py3-none-any.whl", hash = "sha256:d5d7ee1ee2834d5020c7c616ed5e0d0f29b9a4b1dd283bdebae198ec09778d0e", size = 3394, upload-time = "2026-02-16T22:08:49.92Z" }, + { url = "https://files.pythonhosted.org/packages/3f/f9/2b3ff4e56e5fa7debfaf9eb135d0da96f3e9a1d5b27222223c7296336e5f/typer-0.25.1-py3-none-any.whl", hash = "sha256:75caa44ed46a03fb2dab8808753ffacdbfea88495e74c85a28c5eefcf5f39c89", size = 58409, upload-time = "2026-04-30T19:32:18.271Z" }, ] [[package]] @@ -3952,25 +3219,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, ] -[[package]] -name = "typing-inspect" -version = "0.9.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mypy-extensions" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/dc/74/1789779d91f1961fa9438e9a8710cdae6bd138c80d7303996933d117264a/typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78", size = 13825, upload-time = "2023-05-24T20:25:47.612Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/65/f3/107a22063bf27bdccf2024833d3445f4eea42b2e598abfbd46f6a63b6cb0/typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", size = 8827, upload-time = "2023-05-24T20:25:45.287Z" }, -] - [[package]] name = "typing-inspection" version = "0.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } wheels = [ @@ -3986,15 +3240,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ce/e4/dccd7f47c4b64213ac01ef921a1337ee6e30e8c6466046018326977efd95/tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7", size = 349321, upload-time = "2026-04-24T15:22:05.876Z" }, ] -[[package]] -name = "unidecode" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/7d/a8a765761bbc0c836e397a2e48d498305a865b70a8600fd7a942e85dcf63/Unidecode-1.4.0.tar.gz", hash = "sha256:ce35985008338b676573023acc382d62c264f307c8f7963733405add37ea2b23", size = 200149, upload-time = "2025-04-24T08:45:03.798Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/b7/559f59d57d18b44c6d1250d2eeaa676e028b9c527431f5d0736478a73ba1/Unidecode-1.4.0-py3-none-any.whl", hash = "sha256:c3c7606c27503ad8d501270406e345ddb480a7b5f38827eafe4fa82a137f0021", size = 235837, upload-time = "2025-04-24T08:45:01.609Z" }, -] - [[package]] name = "urllib3" version = "2.7.0" @@ -4009,9 +3254,8 @@ name = "uvicorn" version = "0.49.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click" }, - { name = "h11" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "click", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "h11", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c4/1f/fa18009dea8469069cca78a4e877a008ab78f08b064bfc9ab891579077ff/uvicorn-0.49.0.tar.gz", hash = "sha256:ebf4271aa580d9de97f93192d4595176df6e91f9aae919ca73e4fc07df1e66a3", size = 91284, upload-time = "2026-06-03T22:01:30.448Z" } wheels = [ @@ -4020,13 +3264,12 @@ wheels = [ [package.optional-dependencies] standard = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "httptools" }, - { name = "python-dotenv" }, - { name = "pyyaml" }, - { name = "uvloop", marker = "platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'" }, - { name = "watchfiles" }, - { name = "websockets" }, + { name = "httptools", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "python-dotenv", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pyyaml", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "uvloop", marker = "platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux'" }, + { name = "watchfiles", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "websockets", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] @@ -4035,96 +3278,116 @@ version = "0.22.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/06/f0/18d39dbd1971d6d62c4629cc7fa67f74821b0dc1f5a77af43719de7936a7/uvloop-0.22.1.tar.gz", hash = "sha256:6c84bae345b9147082b17371e3dd5d42775bddce91f885499017f4607fdaf39f", size = 2443250, upload-time = "2025-10-16T22:17:19.342Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/14/ecceb239b65adaaf7fde510aa8bd534075695d1e5f8dadfa32b5723d9cfb/uvloop-0.22.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ef6f0d4cc8a9fa1f6a910230cd53545d9a14479311e87e3cb225495952eb672c", size = 1343335, upload-time = "2025-10-16T22:16:11.43Z" }, - { url = "https://files.pythonhosted.org/packages/ba/ae/6f6f9af7f590b319c94532b9567409ba11f4fa71af1148cab1bf48a07048/uvloop-0.22.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7cd375a12b71d33d46af85a3343b35d98e8116134ba404bd657b3b1d15988792", size = 742903, upload-time = "2025-10-16T22:16:12.979Z" }, - { url = "https://files.pythonhosted.org/packages/09/bd/3667151ad0702282a1f4d5d29288fce8a13c8b6858bf0978c219cd52b231/uvloop-0.22.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac33ed96229b7790eb729702751c0e93ac5bc3bcf52ae9eccbff30da09194b86", size = 3648499, upload-time = "2025-10-16T22:16:14.451Z" }, - { url = "https://files.pythonhosted.org/packages/b3/f6/21657bb3beb5f8c57ce8be3b83f653dd7933c2fd00545ed1b092d464799a/uvloop-0.22.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:481c990a7abe2c6f4fc3d98781cc9426ebd7f03a9aaa7eb03d3bfc68ac2a46bd", size = 3700133, upload-time = "2025-10-16T22:16:16.272Z" }, - { url = "https://files.pythonhosted.org/packages/09/e0/604f61d004ded805f24974c87ddd8374ef675644f476f01f1df90e4cdf72/uvloop-0.22.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a592b043a47ad17911add5fbd087c76716d7c9ccc1d64ec9249ceafd735f03c2", size = 3512681, upload-time = "2025-10-16T22:16:18.07Z" }, - { url = "https://files.pythonhosted.org/packages/bb/ce/8491fd370b0230deb5eac69c7aae35b3be527e25a911c0acdffb922dc1cd/uvloop-0.22.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1489cf791aa7b6e8c8be1c5a080bae3a672791fcb4e9e12249b05862a2ca9cec", size = 3615261, upload-time = "2025-10-16T22:16:19.596Z" }, - { url = "https://files.pythonhosted.org/packages/c7/d5/69900f7883235562f1f50d8184bb7dd84a2fb61e9ec63f3782546fdbd057/uvloop-0.22.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c60ebcd36f7b240b30788554b6f0782454826a0ed765d8430652621b5de674b9", size = 1352420, upload-time = "2025-10-16T22:16:21.187Z" }, - { url = "https://files.pythonhosted.org/packages/a8/73/c4e271b3bce59724e291465cc936c37758886a4868787da0278b3b56b905/uvloop-0.22.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b7f102bf3cb1995cfeaee9321105e8f5da76fdb104cdad8986f85461a1b7b77", size = 748677, upload-time = "2025-10-16T22:16:22.558Z" }, - { url = "https://files.pythonhosted.org/packages/86/94/9fb7fad2f824d25f8ecac0d70b94d0d48107ad5ece03769a9c543444f78a/uvloop-0.22.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53c85520781d84a4b8b230e24a5af5b0778efdb39142b424990ff1ef7c48ba21", size = 3753819, upload-time = "2025-10-16T22:16:23.903Z" }, { url = "https://files.pythonhosted.org/packages/74/4f/256aca690709e9b008b7108bc85fba619a2bc37c6d80743d18abad16ee09/uvloop-0.22.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:56a2d1fae65fd82197cb8c53c367310b3eabe1bbb9fb5a04d28e3e3520e4f702", size = 3804529, upload-time = "2025-10-16T22:16:25.246Z" }, - { url = "https://files.pythonhosted.org/packages/7f/74/03c05ae4737e871923d21a76fe28b6aad57f5c03b6e6bfcfa5ad616013e4/uvloop-0.22.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40631b049d5972c6755b06d0bfe8233b1bd9a8a6392d9d1c45c10b6f9e9b2733", size = 3621267, upload-time = "2025-10-16T22:16:26.819Z" }, { url = "https://files.pythonhosted.org/packages/75/be/f8e590fe61d18b4a92070905497aec4c0e64ae1761498cad09023f3f4b3e/uvloop-0.22.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:535cc37b3a04f6cd2c1ef65fa1d370c9a35b6695df735fcff5427323f2cd5473", size = 3723105, upload-time = "2025-10-16T22:16:28.252Z" }, ] [[package]] -name = "vllm" -version = "0.10.1.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiohttp" }, - { name = "blake3" }, - { name = "cachetools" }, - { name = "cbor2" }, - { name = "cloudpickle" }, - { name = "compressed-tensors" }, - { name = "depyf" }, - { name = "diskcache" }, - { name = "einops" }, - { name = "fastapi", extra = ["standard"] }, - { name = "filelock" }, - { name = "gguf" }, - { name = "lark" }, - { name = "llguidance", marker = "platform_machine == 'aarch64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, - { name = "lm-format-enforcer" }, - { name = "mistral-common", extra = ["audio", "image"] }, - { name = "msgspec" }, - { name = "ninja" }, - { name = "numba" }, - { name = "numpy" }, - { name = "openai" }, - { name = "openai-harmony" }, - { name = "opencv-python-headless" }, - { name = "outlines-core" }, - { name = "partial-json-parser" }, - { name = "pillow" }, - { name = "prometheus-client" }, - { name = "prometheus-fastapi-instrumentator" }, - { name = "protobuf" }, - { name = "psutil" }, - { name = "py-cpuinfo" }, - { name = "pybase64" }, - { name = "pydantic" }, - { name = "python-json-logger" }, - { name = "pyyaml" }, - { name = "pyzmq" }, - { name = "ray", extra = ["cgraph"] }, - { name = "regex" }, - { name = "requests" }, - { name = "scipy" }, - { name = "sentencepiece" }, - { name = "setproctitle" }, - { name = "tiktoken" }, - { name = "tokenizers" }, - { name = "torch" }, - { name = "torchaudio", version = "2.7.1", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, - { name = "torchaudio", version = "2.7.1+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "torchvision", version = "0.22.1", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, - { name = "torchvision", version = "0.22.1+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "tqdm" }, - { name = "transformers" }, - { name = "typing-extensions" }, - { name = "watchfiles" }, - { name = "xformers", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "xgrammar", marker = "platform_machine == 'aarch64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ae/a8/b53e7950c05bf8e6ef4438603a70c8992e7bc90fcad5a7a4f360c7d748a6/vllm-0.10.1.1.tar.gz", hash = "sha256:3099824ee4bdaa14c4c4f7178a092101a0ec206d4c9371edf295849b2b730a39", size = 10510801, upload-time = "2025-08-20T23:17:16.776Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/14/6fac6c3f6be5657a70911c8c48062c4749925dc5e24d254b1ec493add7a0/vllm-0.10.1.1-cp38-abi3-manylinux1_x86_64.whl", hash = "sha256:8ca0dd985e1ceac8540e7719c654f1553b3ba8a43c685ac8d3fa1366ffb6443a", size = 414400912, upload-time = "2025-08-20T23:17:09.179Z" }, -] - -[[package]] -name = "wasabi" -version = "1.1.3" +name = "virtualenv" +version = "21.5.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "distlib", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "filelock", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "platformdirs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "python-discovery", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ac/f9/054e6e2f1071e963b5e746b48d1e3727470b2a490834d18ad92364929db3/wasabi-1.1.3.tar.gz", hash = "sha256:4bb3008f003809db0c3e28b4daf20906ea871a2bb43f9914197d540f4f2e0878", size = 30391, upload-time = "2024-05-31T16:56:18.99Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/a5/81f987504738e6defeed61ec1c47e2aefab3c35d8eeb87e1b3f38cf28254/virtualenv-21.5.1.tar.gz", hash = "sha256:dca3bf98275a59c652b69d68e73433e597d977c2da9198882479d1a7188009c8", size = 4578798, upload-time = "2026-06-16T16:23:58.603Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/06/7c/34330a89da55610daa5f245ddce5aab81244321101614751e7537f125133/wasabi-1.1.3-py3-none-any.whl", hash = "sha256:f76e16e8f7e79f8c4c8be49b4024ac725713ab10cd7f19350ad18a8e3f71728c", size = 27880, upload-time = "2024-05-31T16:56:16.699Z" }, + { url = "https://files.pythonhosted.org/packages/2c/02/3623e6169bed617ed1e2d372f7c69f92ec28d54c4dfc997055c8578ec148/virtualenv-21.5.1-py3-none-any.whl", hash = "sha256:55aa670b67bbfb991b03fda39bd3276d92c419d702376e98c5df1c9989a26783", size = 4558820, upload-time = "2026-06-16T16:23:56.963Z" }, +] + +[[package]] +name = "vllm" +version = "0.23.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "anthropic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "apache-tvm-ffi", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "blake3", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "cachetools", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "cbor2", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "cloudpickle", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "compressed-tensors", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "depyf", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "diskcache", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "einops", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "fastapi", extra = ["standard"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "fastsafetensors", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "filelock", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "flashinfer-cubin", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "flashinfer-python", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "gguf", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "humming-kernels", extra = ["cu13"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "ijson", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "lark", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "llguidance", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "lm-format-enforcer", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "mcp", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "mistral-common", extra = ["image"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "model-hosting-container-standards", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "msgspec", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "ninja", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numba", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cudnn-frontend", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cutlass-dsl", extra = ["cu13"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "openai", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "openai-harmony", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opencv-python-headless", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-api", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-exporter-otlp", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-sdk", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-semantic-conventions-ai", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "outlines-core", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "partial-json-parser", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pillow", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "prometheus-client", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "prometheus-fastapi-instrumentator", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "psutil", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "py-cpuinfo", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pybase64", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "python-json-logger", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pyyaml", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pyzmq", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "quack-kernels", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "regex", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "requests", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "safetensors", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "sentencepiece", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "setproctitle", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tiktoken", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tilelang", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tokenizers", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tokenspeed-mla", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torchaudio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torchvision", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tqdm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "transformers", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "watchfiles", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "xgrammar", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/68/c6/c4dc766b09e93de278693502612de0beba822983d4f609830406ead65cc9/vllm-0.23.0.tar.gz", hash = "sha256:760269db3d9611e12e524681df1bca0977d5d2f5fcb4481cc34d33efc4ae7ff5", size = 36624042, upload-time = "2026-06-13T09:27:24.297Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/26/c66d588cc14f91d020294ecddaefe4ce698abdcb140612feec36a4c0aecd/vllm-0.23.0-2-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:872aeb7c36a1ea942216af067ce870ffdf960804e829367e1b4eb36d4831c03c", size = 274070565, upload-time = "2026-06-15T05:12:54.416Z" }, + { url = "https://files.pythonhosted.org/packages/72/bc/652f889cde1a20585a0ee0b1b6d36109cd8177bb60020dcb8ff477448440/vllm-0.23.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:71eae985c79ddaa999328cc56d206a1e9b785e079fc6da9e2359ec56ef1c842a", size = 274070208, upload-time = "2026-06-13T09:28:16.037Z" }, +] + +[[package]] +name = "watchdog" +version = "6.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/24/d9be5cd6642a6aa68352ded4b4b10fb0d7889cb7f45814fb92cecd35f101/watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c", size = 96393, upload-time = "2024-11-01T14:06:31.756Z" }, + { url = "https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2", size = 88392, upload-time = "2024-11-01T14:06:32.99Z" }, + { url = "https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c", size = 89019, upload-time = "2024-11-01T14:06:34.963Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" }, ] [[package]] @@ -4132,163 +3395,42 @@ name = "watchfiles" version = "1.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "anyio" }, + { name = "anyio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cd/41/5e1a4bb12aac5f1493fa1bdc11154eca3b258ca4eba65d39c473fe19d8e9/watchfiles-1.2.0.tar.gz", hash = "sha256:c995fba777f1ea992f090f9236e9284cf7a5d1a0130dd5a3d82c598cacd76838", size = 108252, upload-time = "2026-05-18T04:32:04.251Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/5a/2bf22ecb24916983bf1cc0095e7dea2741d14d6553b0d6a2ac8bc96eca93/watchfiles-1.2.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:bb68bf4df85abebe5efddc53cf2075520f243a59868d9b3973278b23e76962a9", size = 400471, upload-time = "2026-05-18T04:31:08.908Z" }, - { url = "https://files.pythonhosted.org/packages/55/70/dea1f6a0e76607841a60fb51af150e70124864673f61704abb62b90cdcc7/watchfiles-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c16cb06dd17d43b9d185094268459eac92c9538356f050e55b54e82cf700e1d4", size = 394599, upload-time = "2026-05-18T04:30:19.845Z" }, - { url = "https://files.pythonhosted.org/packages/18/52/752dcc7dc817baef5e89518732925795ce52e36a683a9a3c9fb68b21504e/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77a0feab9af4c021c581f695258c642b3d10c5fd4c676e33a0d8606425d82631", size = 455458, upload-time = "2026-05-18T04:30:29.126Z" }, - { url = "https://files.pythonhosted.org/packages/12/48/366ebbb22fcc504c2f72b45f0b7e72f40a18795cc01752c16066d597b67a/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a16ffe19bf5cf9f5edaa1ad1dd830c5a816e8feec430c522302ab55483a4b994", size = 460513, upload-time = "2026-05-18T04:31:40.85Z" }, - { url = "https://files.pythonhosted.org/packages/ad/44/1f9e1b15e7a729062e0d0c3d0d7225ea4ab98b2267ef87287153be2495fc/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204f299afcbd65918ab78dbc52626b0ae45e9d8cef403fdbf33ecf9e40eac66e", size = 493616, upload-time = "2026-05-18T04:30:58.47Z" }, - { url = "https://files.pythonhosted.org/packages/7e/55/8b1086dcc8a1d6a697a62767bd7ea368e74c61c6fd171683cfe24a3fe5d2/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11743adfa510bfffebe97659fb280182b5c9b238708f667e866f308c3430dc19", size = 573154, upload-time = "2026-05-18T04:30:37.903Z" }, - { url = "https://files.pythonhosted.org/packages/14/7a/242f400cc77fafa7b18d53d19d9cb64fc6a6f61f28c55913bae7c674d92a/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb72919d93e3a16fc451d3aa3d4b1698423daca1b382d3d959c9ac51297c12a8", size = 467046, upload-time = "2026-05-18T04:30:41.869Z" }, - { url = "https://files.pythonhosted.org/packages/02/c8/79eee650c62d2c186598489814468e389b5def0ebe755399ff645b35b1b2/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62f042afde2dde21ec1d2c1a74361e804673df86f51e418a999c9acfe671b07", size = 457100, upload-time = "2026-05-18T04:31:13.064Z" }, - { url = "https://files.pythonhosted.org/packages/81/36/519f6dbb7a95e4fe7c1513ed25b1520295ef9905a27f1f2226a73892bfb7/watchfiles-1.2.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:027ae72bfdfd254862065d8b3e2a815c6ab9b1853ce41e6648ece84afd34a551", size = 467038, upload-time = "2026-05-18T04:30:32.915Z" }, - { url = "https://files.pythonhosted.org/packages/2f/12/951af6b9f89097e02511122258402cb3578443021930b70cf968d6310dc0/watchfiles-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1cfd51e97e13ff3bd047c140764d277fc9b95b7cb5da59e46a47d167adab310", size = 632563, upload-time = "2026-05-18T04:30:11.539Z" }, - { url = "https://files.pythonhosted.org/packages/28/cc/0cba1f0a6117b7ec117271bdc3cb3a5a252005959755a2c09a745e0942cc/watchfiles-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:24b2405c0a46738dd9e1cf7135aa5dbdb9d42d024628651b3b13d5117e99f8df", size = 660851, upload-time = "2026-05-18T04:31:53.186Z" }, - { url = "https://files.pythonhosted.org/packages/d0/f2/26347558cc8bf6877845e66b315f644d03c173906aa09e233a3f4fd23928/watchfiles-1.2.0-cp310-cp310-win32.whl", hash = "sha256:8c520725602756229f045b032a1ff33d7ef0f7404189d62f6c2438cb6d8ef6a1", size = 277023, upload-time = "2026-05-18T04:30:18.825Z" }, - { url = "https://files.pythonhosted.org/packages/6d/68/a5e67b6b68e94f4c1511d61c46c55eba0737583620b6febf194c7b9cc23f/watchfiles-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:03b14855c6f35539e2d95c442ae9530a75762f1e26567152b9ed05f96534a74d", size = 290107, upload-time = "2026-05-18T04:32:09.677Z" }, - { url = "https://files.pythonhosted.org/packages/fc/3d/8024c801df84d1587740d0359e7fdd80afeae3d159011f3d5376dd82f18e/watchfiles-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:704fd259e332e01f9b9c178f4bce9e49027e5587cc2600eeeaf8e76e1c846201", size = 400242, upload-time = "2026-05-18T04:31:19.014Z" }, - { url = "https://files.pythonhosted.org/packages/87/5b/f4dfd45323e949984a3a7f9dc31d1cbb049921e7d98253488dda72ccdaa9/watchfiles-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6543cf55d170003296d185c0af981f3e1311564907e1f4e08671fc7693a890a5", size = 394562, upload-time = "2026-05-18T04:30:08.46Z" }, - { url = "https://files.pythonhosted.org/packages/98/d8/19483ef075d601c409bce8bcbb5c0f81a10876fff870400568f08ce484a1/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89d8c2394a065ca86f5d2910ff263ae67c127e1376ccc4f9fc35c71db879f80a", size = 456611, upload-time = "2026-05-18T04:30:45.723Z" }, - { url = "https://files.pythonhosted.org/packages/b1/6a/cc81fbe7ee42f2f22e661a6e12def7807e01b14b2f39e0ff83fd373fd307/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:772b80df316480d894a0e3165fdd19cf77f5d17f9a787f94029465ad0e3529d1", size = 461379, upload-time = "2026-05-18T04:31:29.292Z" }, - { url = "https://files.pythonhosted.org/packages/b1/57/7e669002082c0a0f4fb5113bb70125f7110124b846b0a11bc5ae8e90eac1/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d158cd89df6053823533e06fb1d73c549133bff5f0396170c0e53d9559340717", size = 493556, upload-time = "2026-05-18T04:30:05.44Z" }, - { url = "https://files.pythonhosted.org/packages/45/7d/f60a2b19807b21fe8281f3a8da4f59eef0d5f96825ac4680ba2d4f2ebf91/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d516b3283a758e087841aedb8031549fb41ced08f3db10aa6d2bf32dc042525b", size = 575255, upload-time = "2026-05-18T04:30:40.568Z" }, - { url = "https://files.pythonhosted.org/packages/bd/49/77f5b5e6efbcd57482f74948ebb1b97e5c0046d6b61475042d830c84b3ff/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53b2290c92e0506d102cd448fbc610d87079553f86caa39d67440856a8b8bba5", size = 467052, upload-time = "2026-05-18T04:31:17.942Z" }, { url = "https://files.pythonhosted.org/packages/ee/5a/73e2959af1b97fd5d556f9a8bdba017be23ceeef731869d5eaa0a753d5a3/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a711b51aec4370d0dcda5b6c09463206f133a5759341d7744b953a7b62e1100e", size = 456858, upload-time = "2026-05-18T04:30:30.182Z" }, - { url = "https://files.pythonhosted.org/packages/50/57/1bc8c27fad7e6c19bddee15d276dbb6ab72480ec01c127afff1673aee417/watchfiles-1.2.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:e2ca07fa7d89195ec0865d3d285666286740bfa83d83e5cee204043a31ecc165", size = 467579, upload-time = "2026-05-18T04:32:15.897Z" }, - { url = "https://files.pythonhosted.org/packages/09/6c/3c2e44edba3553c5e3c3b8c8a2a6dee6b9e12ae2cf4bd2378bebf9dc3038/watchfiles-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e0618518f282c4ebff60f5e5b1247b6d91bb8b9f4476947563a1e74acc66f3c6", size = 633253, upload-time = "2026-05-18T04:31:37.123Z" }, { url = "https://files.pythonhosted.org/packages/30/c2/d8c84a882ab39bbefcc4915ab3e91830b7a7e990c5570b0b69075aba3faf/watchfiles-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d191c054d0715c3c95c99df9b8dbf6fd096d8c1e021e8f212e1bd8bc444ccb5", size = 660713, upload-time = "2026-05-18T04:31:24.62Z" }, - { url = "https://files.pythonhosted.org/packages/a9/07/f97736a5fc605364fe67b25e9fa4a6965dfd4840d50c406ada507e9d735f/watchfiles-1.2.0-cp311-cp311-win32.whl", hash = "sha256:9342472aff9b093c5acd4f6d8f70ae0937964ab56542502bcf5579782da69ae8", size = 277222, upload-time = "2026-05-18T04:31:21.131Z" }, - { url = "https://files.pythonhosted.org/packages/cf/99/2b04981977fc2608afd60360d928c6aecf6b950292ca221d98f4005f6694/watchfiles-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:dbd6c97045dad81227c8d040173da044c1de08de64a5ea8b555da4aee1d5fa22", size = 290274, upload-time = "2026-05-18T04:31:45.966Z" }, - { url = "https://files.pythonhosted.org/packages/3c/74/f7f58a7075ee9cf612b0cfcddb78b8cd8234f0742d6f0075cf0da2dde1c6/watchfiles-1.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:57a2d9fa4fb4c2ecae57b13dfff2c7ab53e21a2ba674fe9f05506680fcdcc0d7", size = 283460, upload-time = "2026-05-18T04:31:39.126Z" }, - { url = "https://files.pythonhosted.org/packages/23/f4/7513ef1e85fc4c6331b59479d6d72661fc391fbe543678052ac72c8b6c19/watchfiles-1.2.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4674d49eb94706dfe666c069fc0a1b646ffcf920473492e209f6d5f60d3f0cc2", size = 403050, upload-time = "2026-05-18T04:30:36.753Z" }, - { url = "https://files.pythonhosted.org/packages/27/0b/a54103cfd732bb703c7a749222011a0483ef3705948dae3b203158601119/watchfiles-1.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:094b9b70103d4e963499bdea001ee3c2697b144cd9ae6218a62c0f89ec9e31db", size = 396629, upload-time = "2026-05-18T04:32:03.268Z" }, - { url = "https://files.pythonhosted.org/packages/5e/2c/73f31a3b893886206c3f54d73e8ad8dee58cdb2f69ad2622e0a8a9e07f4e/watchfiles-1.2.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0ef001f8c25ad0fa9529f914c1600647ecd0f542d11c19b7894768c67b6acb7", size = 457318, upload-time = "2026-05-18T04:31:01.932Z" }, { url = "https://files.pythonhosted.org/packages/e9/f9/45d021e4a5cc7b9dd567f7cbb06d3b75f751a690063fb6cc7ec60f4e46b7/watchfiles-1.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a88fc94e647bc4eec523f1caa540258eb71d14278b9daf72fa1e2658a98df0f0", size = 457771, upload-time = "2026-05-18T04:30:56.331Z" }, ] -[[package]] -name = "weasel" -version = "0.4.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cloudpathlib" }, - { name = "confection" }, - { name = "packaging" }, - { name = "pydantic" }, - { name = "requests" }, - { name = "smart-open" }, - { name = "srsly" }, - { name = "typer-slim" }, - { name = "wasabi" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/09/d7/edd9c24e60cf8e5de130aa2e8af3b01521f4d0216c371d01212f580d0d8e/weasel-0.4.3.tar.gz", hash = "sha256:f293d6174398e8f478c78481e00c503ee4b82ea7a3e6d0d6a01e46a6b1396845", size = 38733, upload-time = "2025-11-13T23:52:28.193Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/74/a148b41572656904a39dfcfed3f84dd1066014eed94e209223ae8e9d088d/weasel-0.4.3-py3-none-any.whl", hash = "sha256:08f65b5d0dbded4879e08a64882de9b9514753d9eaa4c4e2a576e33666ac12cf", size = 50757, upload-time = "2025-11-13T23:52:26.982Z" }, -] - [[package]] name = "websockets" -version = "16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/04/24/4b2031d72e840ce4c1ccb255f693b15c334757fc50023e4db9537080b8c4/websockets-16.0.tar.gz", hash = "sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5", size = 179346, upload-time = "2026-01-10T09:23:47.181Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/20/74/221f58decd852f4b59cc3354cccaf87e8ef695fede361d03dc9a7396573b/websockets-16.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a", size = 177343, upload-time = "2026-01-10T09:22:21.28Z" }, - { url = "https://files.pythonhosted.org/packages/19/0f/22ef6107ee52ab7f0b710d55d36f5a5d3ef19e8a205541a6d7ffa7994e5a/websockets-16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0", size = 175021, upload-time = "2026-01-10T09:22:22.696Z" }, - { url = "https://files.pythonhosted.org/packages/10/40/904a4cb30d9b61c0e278899bf36342e9b0208eb3c470324a9ecbaac2a30f/websockets-16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957", size = 175320, upload-time = "2026-01-10T09:22:23.94Z" }, - { url = "https://files.pythonhosted.org/packages/9d/2f/4b3ca7e106bc608744b1cdae041e005e446124bebb037b18799c2d356864/websockets-16.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72", size = 183815, upload-time = "2026-01-10T09:22:25.469Z" }, - { url = "https://files.pythonhosted.org/packages/86/26/d40eaa2a46d4302becec8d15b0fc5e45bdde05191e7628405a19cf491ccd/websockets-16.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde", size = 185054, upload-time = "2026-01-10T09:22:27.101Z" }, - { url = "https://files.pythonhosted.org/packages/b0/ba/6500a0efc94f7373ee8fefa8c271acdfd4dca8bd49a90d4be7ccabfc397e/websockets-16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3", size = 184565, upload-time = "2026-01-10T09:22:28.293Z" }, - { url = "https://files.pythonhosted.org/packages/04/b4/96bf2cee7c8d8102389374a2616200574f5f01128d1082f44102140344cc/websockets-16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3", size = 183848, upload-time = "2026-01-10T09:22:30.394Z" }, - { url = "https://files.pythonhosted.org/packages/02/8e/81f40fb00fd125357814e8c3025738fc4ffc3da4b6b4a4472a82ba304b41/websockets-16.0-cp310-cp310-win32.whl", hash = "sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9", size = 178249, upload-time = "2026-01-10T09:22:32.083Z" }, - { url = "https://files.pythonhosted.org/packages/b4/5f/7e40efe8df57db9b91c88a43690ac66f7b7aa73a11aa6a66b927e44f26fa/websockets-16.0-cp310-cp310-win_amd64.whl", hash = "sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35", size = 178685, upload-time = "2026-01-10T09:22:33.345Z" }, - { url = "https://files.pythonhosted.org/packages/f2/db/de907251b4ff46ae804ad0409809504153b3f30984daf82a1d84a9875830/websockets-16.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8", size = 177340, upload-time = "2026-01-10T09:22:34.539Z" }, - { url = "https://files.pythonhosted.org/packages/f3/fa/abe89019d8d8815c8781e90d697dec52523fb8ebe308bf11664e8de1877e/websockets-16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad", size = 175022, upload-time = "2026-01-10T09:22:36.332Z" }, - { url = "https://files.pythonhosted.org/packages/58/5d/88ea17ed1ded2079358b40d31d48abe90a73c9e5819dbcde1606e991e2ad/websockets-16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d", size = 175319, upload-time = "2026-01-10T09:22:37.602Z" }, - { url = "https://files.pythonhosted.org/packages/d2/ae/0ee92b33087a33632f37a635e11e1d99d429d3d323329675a6022312aac2/websockets-16.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe", size = 184631, upload-time = "2026-01-10T09:22:38.789Z" }, - { url = "https://files.pythonhosted.org/packages/c8/c5/27178df583b6c5b31b29f526ba2da5e2f864ecc79c99dae630a85d68c304/websockets-16.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b", size = 185870, upload-time = "2026-01-10T09:22:39.893Z" }, - { url = "https://files.pythonhosted.org/packages/87/05/536652aa84ddc1c018dbb7e2c4cbcd0db884580bf8e95aece7593fde526f/websockets-16.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5", size = 185361, upload-time = "2026-01-10T09:22:41.016Z" }, - { url = "https://files.pythonhosted.org/packages/6d/e2/d5332c90da12b1e01f06fb1b85c50cfc489783076547415bf9f0a659ec19/websockets-16.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64", size = 184615, upload-time = "2026-01-10T09:22:42.442Z" }, - { url = "https://files.pythonhosted.org/packages/77/fb/d3f9576691cae9253b51555f841bc6600bf0a983a461c79500ace5a5b364/websockets-16.0-cp311-cp311-win32.whl", hash = "sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6", size = 178246, upload-time = "2026-01-10T09:22:43.654Z" }, - { url = "https://files.pythonhosted.org/packages/54/67/eaff76b3dbaf18dcddabc3b8c1dba50b483761cccff67793897945b37408/websockets-16.0-cp311-cp311-win_amd64.whl", hash = "sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac", size = 178684, upload-time = "2026-01-10T09:22:44.941Z" }, - { url = "https://files.pythonhosted.org/packages/72/07/c98a68571dcf256e74f1f816b8cc5eae6eb2d3d5cfa44d37f801619d9166/websockets-16.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d", size = 174947, upload-time = "2026-01-10T09:23:36.166Z" }, - { url = "https://files.pythonhosted.org/packages/7e/52/93e166a81e0305b33fe416338be92ae863563fe7bce446b0f687b9df5aea/websockets-16.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03", size = 175260, upload-time = "2026-01-10T09:23:37.409Z" }, - { url = "https://files.pythonhosted.org/packages/56/0c/2dbf513bafd24889d33de2ff0368190a0e69f37bcfa19009ef819fe4d507/websockets-16.0-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da", size = 176071, upload-time = "2026-01-10T09:23:39.158Z" }, - { url = "https://files.pythonhosted.org/packages/a5/8f/aea9c71cc92bf9b6cc0f7f70df8f0b420636b6c96ef4feee1e16f80f75dd/websockets-16.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c", size = 176968, upload-time = "2026-01-10T09:23:41.031Z" }, - { url = "https://files.pythonhosted.org/packages/9a/3f/f70e03f40ffc9a30d817eef7da1be72ee4956ba8d7255c399a01b135902a/websockets-16.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767", size = 178735, upload-time = "2026-01-10T09:23:42.259Z" }, - { url = "https://files.pythonhosted.org/packages/6f/28/258ebab549c2bf3e64d2b0217b973467394a9cea8c42f70418ca2c5d0d2e/websockets-16.0-py3-none-any.whl", hash = "sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec", size = 171598, upload-time = "2026-01-10T09:23:45.395Z" }, -] - -[[package]] -name = "wrapt" -version = "2.2.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2d/9f/06263fcd8ad6c405f05a3905fd7a84dd3176eb5ad46e44bccc0cd16348bb/wrapt-2.2.1.tar.gz", hash = "sha256:6744f504375775d7609c82c8d3d94af1c9a6f05586984536905908ba905277b9", size = 127620, upload-time = "2026-05-22T14:49:43.056Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b4/8b/84bc1ea68b620fe0e2696a8cff07e82f4b962d952ab14efee8955997bb70/wrapt-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0f68f478004475d97906686e702ddbddeaf717c0b68ad2794384308f2dc713ae", size = 80093, upload-time = "2026-05-22T14:47:27.074Z" }, - { url = "https://files.pythonhosted.org/packages/f3/8f/64ec81194a0bc708d9720174c998c8a32116e82b5b32c04e20a7fe01176c/wrapt-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e422b2d647a65d6b080cad5accd09055d3809bdff00c76fba8dca00ca935572a", size = 81183, upload-time = "2026-05-22T14:47:29.062Z" }, - { url = "https://files.pythonhosted.org/packages/94/c2/3d186944aae923631d1def58f4c4ff8f0b6309906afc0b6978de3e69b3e0/wrapt-2.2.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:036dfb40128819a751c6f451c6b9c10172c49e4c401aebcdb8ecf2aec1683598", size = 152494, upload-time = "2026-05-22T14:47:30.583Z" }, - { url = "https://files.pythonhosted.org/packages/01/d1/6b3d0ea995b867d2862aad5619bd5e17de09a9d64a821f46832dcd272d40/wrapt-2.2.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09ac16c081bebfd15d8e4dfa5bdc805990bbd52249ecff22530da7a129d6120b", size = 154310, upload-time = "2026-05-22T14:47:32.175Z" }, - { url = "https://files.pythonhosted.org/packages/f9/4b/37ecb90a8c3753e580327fb40731a984b754e3df65d2ef932bf359fe4adc/wrapt-2.2.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:07be671fa8875971222b0ba9059ed8b4dc738631122feba17c93aa36b4213e9a", size = 149002, upload-time = "2026-05-22T14:47:34.021Z" }, - { url = "https://files.pythonhosted.org/packages/e7/d0/918884d9dfa84d0d135b42a51c00910f5c5447fe7a5e211a8e16ac324dd4/wrapt-2.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:93fc2bf40cd7f4a0256010dce073d44eeb4a351b9bca94d0477ce2b6e62532b3", size = 153185, upload-time = "2026-05-22T14:47:35.722Z" }, - { url = "https://files.pythonhosted.org/packages/4c/00/382299d8ced610b29b59b099a89eda821e8c489aa152b7183748ac83f32a/wrapt-2.2.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:ba519b2d765df9871a25879e6f7fa78948ea59a2a31f9c1a257e34b651994afc", size = 148040, upload-time = "2026-05-22T14:47:37.052Z" }, - { url = "https://files.pythonhosted.org/packages/6c/46/62a79b79e35bbebb1207ca5d15b81192f37f20cc5659cf4e3ce955b7fcc8/wrapt-2.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9011395be8db1827d106c6449b4bb6dd17e331ff6ec521f227e4588f1c78e46f", size = 151773, upload-time = "2026-05-22T14:47:38.713Z" }, - { url = "https://files.pythonhosted.org/packages/a1/db/95c152151d206d4b430516c89725306e92484072f38e65492afde63f6d19/wrapt-2.2.1-cp310-cp310-win32.whl", hash = "sha256:a8f7176b83664af44567e9cc06e0d3827823fcc1a5e52307ebb8ac3aa95860b9", size = 77393, upload-time = "2026-05-22T14:47:40.061Z" }, - { url = "https://files.pythonhosted.org/packages/13/d3/882d50452c6fbd13f24fe5d2644b97cdad2565a7e1522cbb6312de8a52cf/wrapt-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:d7f513d3185e6fec82d0c3518f2e6365d8b4e49f5f45f29640d5162d56a23b54", size = 80350, upload-time = "2026-05-22T14:47:41.194Z" }, - { url = "https://files.pythonhosted.org/packages/58/0f/148376523b4e370692286a9ba14d5715cf3c5b86da3bd3630926367b6b73/wrapt-2.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:44255c84bc57554fed822e83e70036b51afa9edb56fc7ca56c54410ece7898c9", size = 79149, upload-time = "2026-05-22T14:47:42.835Z" }, - { url = "https://files.pythonhosted.org/packages/5f/ac/4370bde262c0e633e6c4f0e56d55095710024cf9a5cecc20c59a10de483c/wrapt-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd57607acc85678925940bd5df0385ff8332083a32fa8d7a43f8767f4997263c", size = 80321, upload-time = "2026-05-22T14:47:43.996Z" }, - { url = "https://files.pythonhosted.org/packages/eb/79/b8ff3a61e71babf58a8cf4c0d63358e8bad383e15bf7f35e62d2f6b6e4a4/wrapt-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1ae574d65c9fa8e86f64f6a7c2668f9fcd507b183e0e577619f504b883cb0a6c", size = 81216, upload-time = "2026-05-22T14:47:45.243Z" }, - { url = "https://files.pythonhosted.org/packages/6e/fd/c0cac1f77c9c4f6fe58a920ca632ce379bb8be928720e11e8d73de28a5e9/wrapt-2.2.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9a04c28c10ba7fd12842b109d2edb0678872a2fe65277ca4ff06a0d61edee245", size = 159208, upload-time = "2026-05-22T14:47:47.176Z" }, - { url = "https://files.pythonhosted.org/packages/d9/4f/744132a7b2fbefa6b81118ec5942eca5fc2e9a129f9055a0c5e46885a549/wrapt-2.2.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3e2f02472a1cbbf3884b365714a810b5947134a95ad6952b554cb8cce9d492b0", size = 160322, upload-time = "2026-05-22T14:47:49.04Z" }, - { url = "https://files.pythonhosted.org/packages/d6/95/b7cd9a22a06cf93e6482904ee6afc956248983553593fd1009296d1b3b31/wrapt-2.2.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac2745950b2bff80219c15ebf2fa9d8427eba7e249739f97e55c9d169e47e9e1", size = 153243, upload-time = "2026-05-22T14:47:50.386Z" }, - { url = "https://files.pythonhosted.org/packages/4c/4a/eb79423192015f46f0db2872e7e04a3dde8d359b83411e8959e7c9287eaa/wrapt-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:67a97e5b6c457f0cd3cfc19ebb2d84463e60c3ece754cc831e4281a3ca29bb18", size = 159231, upload-time = "2026-05-22T14:47:51.753Z" }, - { url = "https://files.pythonhosted.org/packages/ec/dc/435015b58ce33c6fc4104158fa91ddb0e809ab03a5751fb7465d1d461456/wrapt-2.2.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:c803a3d331796255af51ba2c79ed0ac8275865b516c09e61f248d1e7aff31ce9", size = 152351, upload-time = "2026-05-22T14:47:53.214Z" }, - { url = "https://files.pythonhosted.org/packages/77/ac/5d203f98df8fd136b95c5227139aea02d34505e18baf812d0c005df61963/wrapt-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9b984d1eb252145d6302c1dbd5e87fc6d404d45531447c84eadec04bf1fcb027", size = 158347, upload-time = "2026-05-22T14:47:54.982Z" }, - { url = "https://files.pythonhosted.org/packages/52/2f/a92427dbdc74e54c1674abbed27e61b2cb5e7a94441b8c1270c70671d928/wrapt-2.2.1-cp311-cp311-win32.whl", hash = "sha256:8a983a603a18c8708f024f7f6991b2e66159219abbf894634c5056243c55f3cd", size = 77562, upload-time = "2026-05-22T14:47:56.275Z" }, - { url = "https://files.pythonhosted.org/packages/c8/56/987b9c13b3e1c1a3c6de71284076f996b79caec90e75a87c044a40c23db9/wrapt-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:9c210a6994b21aa9b29e81c8d11560e8fdab54c117e9cff37870d0a27bde1343", size = 80616, upload-time = "2026-05-22T14:47:57.854Z" }, - { url = "https://files.pythonhosted.org/packages/7e/25/d01f560888d99d94a959c85533de349ce68d71ace3f2591d6ea8f632cfed/wrapt-2.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:401229e9d63ca09f9b8891ecf83798d26c11bbb445d11ed9f1836b6d4585b38a", size = 79025, upload-time = "2026-05-22T14:47:59.089Z" }, - { url = "https://files.pythonhosted.org/packages/53/46/29ac9daf11a86c22a8c38cd9236c62928ccae83f7ceb06bd3b0467cf9d05/wrapt-2.2.1-py3-none-any.whl", hash = "sha256:3aafea2975caef8ca49400640dde02cc7426e798f24870ed01f490bc3cffd32f", size = 61000, upload-time = "2026-05-22T14:49:41.593Z" }, -] - -[[package]] -name = "xformers" -version = "0.0.31" +version = "15.0.1" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "torch", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/33/35/91c172a57681e1c03de5ad1ca654dc87c282279b941052ed04e616ae5bcd/xformers-0.0.31.tar.gz", hash = "sha256:3fccb159c6327c13fc1b08f8b963c2779ca526e2e50755dee9bcc1bac67d20c6", size = 12102740, upload-time = "2025-06-25T15:12:10.241Z" } +sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/e3/ee90c62a3235152d4ea8e983a5eb7ac00b10582fee86aaadb11571c1ecba/xformers-0.0.31-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:50aedaea82a38d7d28631f77617d1ed1f6f37c60bdc4bf167a69cbc0e39cee76", size = 117057673, upload-time = "2025-06-25T15:11:59.775Z" }, + { url = "https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", size = 182252, upload-time = "2025-03-05T20:02:05.29Z" }, + { url = "https://files.pythonhosted.org/packages/08/ff/e9eed2ee5fed6f76fdd6032ca5cd38c57ca9661430bb3d5fb2872dc8703c/websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", size = 181918, upload-time = "2025-03-05T20:02:11.968Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, ] [[package]] name = "xgrammar" -version = "0.1.21" +version = "0.2.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mlx-lm", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, - { name = "ninja" }, - { name = "pydantic" }, - { name = "torch" }, - { name = "transformers" }, + { name = "apache-tvm-ffi", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "transformers", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e3/52/ea664a56674f21c401b45f124c207a16ca4b2318364687172edbcf255375/xgrammar-0.1.21.tar.gz", hash = "sha256:2ce1e81417ff46aa7ef26d8c0627275cb20dd1f2e8ead5bb261aecde1cc8ba57", size = 2242013, upload-time = "2025-07-10T19:34:14.336Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/b7/86178b241be0b29ce9ee991a44d4b7eddb0f0c98310c0067fe83afc897d1/xgrammar-0.2.2.tar.gz", hash = "sha256:42bcc5c4187ff9cb6edc44ff5f56030d8b69d62c7576f674a5a074f71b68b1fa", size = 2430492, upload-time = "2026-06-11T19:02:49.624Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/53/df/a077f0c1210ee5cdbb06c8a04f3e94d4053c18704f837120badd374591d9/xgrammar-0.1.21-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:77af5e5487992489131047e38e7136733a24f9c1aa73ef80665a85effd835f77", size = 4398913, upload-time = "2025-07-10T19:33:32.332Z" }, - { url = "https://files.pythonhosted.org/packages/ef/42/209977e5c868f269bb587a41b21c80a07c989b40c981482498c53bd15b37/xgrammar-0.1.21-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ae38de964a1d56437bc84c0aedf1b0a5a48ff2e805a0ec454b0caaa25b3c7f84", size = 4534144, upload-time = "2025-07-10T19:33:34.419Z" }, - { url = "https://files.pythonhosted.org/packages/e8/63/25e04927a3f947b31f577744774aa6e67c2ba63a0675795ed85397f597ac/xgrammar-0.1.21-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce25b17690d6abebf79d287330578203a361819058f6e893aefa69049f173ad8", size = 11636098, upload-time = "2025-07-10T19:33:36.22Z" }, - { url = "https://files.pythonhosted.org/packages/d0/d7/2d15637d1bdded7dbde4742eb8be856370e6b9cf73c7bbdb1ce87f77db79/xgrammar-0.1.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b181f45bbba8563fcaf20a6338ebcbb663d804ab22d160b446c810c6fc397477", size = 11808795, upload-time = "2025-07-10T19:33:38.581Z" }, - { url = "https://files.pythonhosted.org/packages/ac/fb/fd45754a490307084f6d090b6834cedf7b4a81023bf758d162e0b7c69efb/xgrammar-0.1.21-cp310-cp310-win_amd64.whl", hash = "sha256:55625383b506f1dd64a510605df5d852cfcadbfc5fcd962f400656b67542ad8e", size = 4251280, upload-time = "2025-07-10T19:33:40.723Z" }, - { url = "https://files.pythonhosted.org/packages/a4/17/2017bdca0c99f5eaed32408fab8bc1277cc7a35f8057d09ba966cd28c211/xgrammar-0.1.21-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:50d9519211bb76c80a34b25278fcfb0253057b4f2db8fca81da19a53ea61f071", size = 4398725, upload-time = "2025-07-10T19:33:42.244Z" }, - { url = "https://files.pythonhosted.org/packages/2c/6c/365d1564de1bf9f01c95ab54c67895052aef3501fe063582a762ece820c9/xgrammar-0.1.21-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b43c1c8b2e7b0f78067b30a0661ae3b2dfa260a45b0341749d829a27df94faf4", size = 4533878, upload-time = "2025-07-10T19:33:43.738Z" }, - { url = "https://files.pythonhosted.org/packages/83/28/628240866aa2987e79a803324b318e81006c1fff0aa86af6580efe17afe2/xgrammar-0.1.21-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6e5a171ed0b79712e82f1e2726f4deb0bc1db4476b70187fa7aea04afea3350", size = 11636319, upload-time = "2025-07-10T19:33:45.579Z" }, - { url = "https://files.pythonhosted.org/packages/07/67/e60c49fa74f5a5d86601a26d9938341d5903595fd98cd470d24ac86db2f0/xgrammar-0.1.21-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f43ee3b944da5114f564a1ca734c2e0c5baf849ae824646d3e689c5c78bc6aae", size = 11809789, upload-time = "2025-07-10T19:33:47.924Z" }, - { url = "https://files.pythonhosted.org/packages/ec/e8/7923733d826453c58d35538b54cd158ebb89d8a86e830578fc2162b4850c/xgrammar-0.1.21-cp311-cp311-win_amd64.whl", hash = "sha256:328c35bd62541df41f8e71b544ea73c35dd990e275cf45bad4210e4c94f4a451", size = 4250850, upload-time = "2025-07-10T19:33:50.003Z" }, + { url = "https://files.pythonhosted.org/packages/9e/db/8cffed5a65db530e02756499ba0f4039adb1cb12850b0dcfadc384fa6440/xgrammar-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d81c13e97b7eec424da7f2b2ec61c88114301ec6037761995800a1ceb092656", size = 44588389, upload-time = "2026-06-11T19:01:35.577Z" }, ] [[package]] @@ -4297,50 +3439,13 @@ version = "3.7.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/24/2f/e183a1b407002f5af81822bee18b61cdb94b8670208ef34734d8d2b8ebe9/xxhash-3.7.0.tar.gz", hash = "sha256:6cc4eefbb542a5d6ffd6d70ea9c502957c925e800f998c5630ecc809d6702bae", size = 82022, upload-time = "2026-04-25T11:10:32.553Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/92/49/e4b575b4ed170a7f640c8bd69cfadfa81c7b700191fde5e72228762b9f73/xxhash-3.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd8ab85c916a58d5c8656ea15e3ce9df836fe2f120a74c296e01d69fab2614b4", size = 33426, upload-time = "2026-04-25T11:05:15.702Z" }, - { url = "https://files.pythonhosted.org/packages/07/61/40f0155b0b09988eb6cdbfc52652f2f371810b0c58163208cb05667757bd/xxhash-3.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:85f5c0e26d945b5bb475e0a3d95193117498130baa7619357bdc7869c2391b5a", size = 30859, upload-time = "2026-04-25T11:05:17.708Z" }, - { url = "https://files.pythonhosted.org/packages/12/bd/2902b7aad574e43cd85fd84849cfbce48c52cb02c7d6902b8a2b3f6e668e/xxhash-3.7.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:b7ffeaada9f8699be63d639536b0b60dff73b7d3325b7475c5bc8fdbf4eed47f", size = 193839, upload-time = "2026-04-25T11:05:19.364Z" }, - { url = "https://files.pythonhosted.org/packages/48/df/343ce8fd09e47ba8fba43b3bad3283ddf0deca799d5a27b084c3aa2ce502/xxhash-3.7.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cee88dfaa6b1b2bfadd3c031fa5f05584870e62fb05dc500942e9900c44fcfda", size = 212896, upload-time = "2026-04-25T11:05:21.131Z" }, - { url = "https://files.pythonhosted.org/packages/79/cf/703e8422a8b52407864281fb4eb52c605e9f33180413b4458f05de110eba/xxhash-3.7.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7426ff0dfa76eb47efc2cc59d4a717bfa9dc9938bff5e49e748bca749f6aa616", size = 235896, upload-time = "2026-04-25T11:05:22.988Z" }, - { url = "https://files.pythonhosted.org/packages/ed/bc/d4b039edbd426575add5f217abeeb2bf870e2c510d35445df81b4f457901/xxhash-3.7.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e8ff6ec73110f610425caef3ea875afbfc34caa542f01df3a80f45aadeb9f906", size = 211665, upload-time = "2026-04-25T11:05:24.799Z" }, - { url = "https://files.pythonhosted.org/packages/42/24/c6f81361796814b92399a88bf079d3b65e617f531819128fcf1bd6ef0571/xxhash-3.7.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0d23fd49fdc5c8af61fb7104f1ad247954499140f6cb6045b3aa5c99dadbbf28", size = 444929, upload-time = "2026-04-25T11:05:26.245Z" }, - { url = "https://files.pythonhosted.org/packages/a4/db/268012153eb7f6bf2c8a0491fdcde11e093f166990821a2ab754fe95537d/xxhash-3.7.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:12c249621af6d50a05d9f10af894b404157b15819878e18f75fcbb0213a77d07", size = 193271, upload-time = "2026-04-25T11:05:28.282Z" }, - { url = "https://files.pythonhosted.org/packages/0a/86/1d0d905d659850dad7f59c807c130249fdb204dc6f71f1fb36268f3f3e61/xxhash-3.7.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6741564a923f082f3c2941c8bb920462ed5b25eaebdd1e161f162233c9a10bc5", size = 284580, upload-time = "2026-04-25T11:05:30.116Z" }, - { url = "https://files.pythonhosted.org/packages/1f/52/fc01ca7ff425a9bdb38d9e3a17f2630447ce3b45d45a929a6cd94d469334/xxhash-3.7.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c4fd8acc6e32596350619896feb372033c0920975992d29837c32853bb1feacd", size = 210193, upload-time = "2026-04-25T11:05:31.969Z" }, - { url = "https://files.pythonhosted.org/packages/ec/96/122e0c6a3537a54b30752031dca557182576bae1a4171c0be8c532c84496/xxhash-3.7.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:646a69b56d8145d85f7fd2289d14fba07880c8a5bda406aa256b407481a61f35", size = 241094, upload-time = "2026-04-25T11:05:33.651Z" }, - { url = "https://files.pythonhosted.org/packages/d8/17/92e33338db8c18add33a46b56c2b7d5dcc6cc2ac076c45389f6017b1bf37/xxhash-3.7.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:11dd69b1a34b7b9af29012f390825b0cdb0617c0966560e227ca74daa7478ba9", size = 197721, upload-time = "2026-04-25T11:05:35.387Z" }, - { url = "https://files.pythonhosted.org/packages/c7/04/fd4114a0820913f336bef5c82ef851bde8d06270982ebd7b2a859961bbf2/xxhash-3.7.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:01cf5c5333aed26cc8d5eea33b8d6398e085e365a704b7372fabdf7ab06441a9", size = 210073, upload-time = "2026-04-25T11:05:37.405Z" }, - { url = "https://files.pythonhosted.org/packages/dd/eb/a2472b8b81cd576a9af3a4889ad8ba5784e8c5a04592587056cdaededd6c/xxhash-3.7.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:f1e65d52c2d526734abecb98372c256b7eacce8fdc42e0df8570417fb39e2772", size = 274960, upload-time = "2026-04-25T11:05:39.224Z" }, - { url = "https://files.pythonhosted.org/packages/3d/d3/493afc544aae50b5fb2844ceaeb3697283bb59695db1a7cb40448636de05/xxhash-3.7.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8ff00fcc3eb436617ed8556cf15daf76c2b501248361a065625a588af78a0a02", size = 413113, upload-time = "2026-04-25T11:05:40.669Z" }, - { url = "https://files.pythonhosted.org/packages/50/6a/002800845a22bff32bcf5fd09caceb4d3f5c3da6b754c46edb9743ce908b/xxhash-3.7.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b5cd29840505631c6f7dbb8a5d34b742b5e6bbda38fe0b9f54e825f3ea6b61dc", size = 190677, upload-time = "2026-04-25T11:05:42.403Z" }, - { url = "https://files.pythonhosted.org/packages/f4/0f/86ee514622a381c0dc49167c8d431a22aa93518a4063559c3e36e4b82bc8/xxhash-3.7.0-cp310-cp310-win32.whl", hash = "sha256:5bf2f1940499839b39fef1561b5ecb6ede9ac34ef4457474e1337fc7ef07c2f3", size = 30627, upload-time = "2026-04-25T11:05:44.022Z" }, - { url = "https://files.pythonhosted.org/packages/86/45/2ef2310803efb4a2d07844e8098d797e25702024793aa2e85858623a43b5/xxhash-3.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:d41fcda2fa8ca682ebca134a2f2dc02575ba549267585597e73061565795f475", size = 31463, upload-time = "2026-04-25T11:05:45.218Z" }, - { url = "https://files.pythonhosted.org/packages/9e/75/40dbf8f142baf8993c38cd988c8d8f51fe0c51e6c84c5769a3c0280a651d/xxhash-3.7.0-cp310-cp310-win_arm64.whl", hash = "sha256:a845a59664d5c531525a467470220f8edc37959e0a6f8e734ffb6654da5c4bee", size = 27747, upload-time = "2026-04-25T11:05:46.422Z" }, { url = "https://files.pythonhosted.org/packages/3b/f4/7bd35089ff1f8e2c96baa2dce05775a122aacd2e3830a73165e27a4d0848/xxhash-3.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fdc7d06929ae28dda98297a18eef7b0fd38991a3b405d8d7b55c9ef24c296958", size = 33423, upload-time = "2026-04-25T11:05:47.628Z" }, { url = "https://files.pythonhosted.org/packages/a3/26/4e00c88a6a2c8a759cfb77d2a9a405f901e8aa66e60ef1fd0aeb35edda48/xxhash-3.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea6daa712f4e094a30830cf01e9b47d03b24d05cc9dab8609f0d9a9db8454712", size = 30857, upload-time = "2026-04-25T11:05:49.189Z" }, - { url = "https://files.pythonhosted.org/packages/82/2f/eeb942c17a5a761a8f01cb9180a0b76bfb62a2c39e6f46b1f9001899027a/xxhash-3.7.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9e6c0d843f1daf85ea23aeb053579135552bde575b7b98af20bfc667b6e4548d", size = 194702, upload-time = "2026-04-25T11:05:50.457Z" }, - { url = "https://files.pythonhosted.org/packages/0e/fd/96f132c08b1e5951c68691d3b9ec351ec2edc028f6a01fcd294f46b9d9f0/xxhash-3.7.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:363c139bf15e1ac5f136b981d3c077eb551299b1effede7f12faa010b8590a60", size = 213613, upload-time = "2026-04-25T11:05:52.571Z" }, - { url = "https://files.pythonhosted.org/packages/82/89/d4e92b796c5ed052d29ed324dbfc1dc1188e0c4bf64bebbf0f8fc20698df/xxhash-3.7.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a778b25874cb0f862eaab5986bff4ca49ffb0def7c0a34c237b948b3c6c775b2", size = 236726, upload-time = "2026-04-25T11:05:54.395Z" }, - { url = "https://files.pythonhosted.org/packages/40/f1/81fc4361921dc6e557a9c60cb3712f36d244d06eeeb71cd2f4252ac42678/xxhash-3.7.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3e1860f1e43d40e9d904cf22d93e587ea42e010ebce4160877e46bcab4bc232a", size = 212443, upload-time = "2026-04-25T11:05:56.334Z" }, - { url = "https://files.pythonhosted.org/packages/6a/d0/afeddd4cff50a332f50d4b8a2e8857673153ab0564ef472fcdeb0b5430df/xxhash-3.7.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9122ad6f867c4a0f5e655f5c3bdf89103852009dbb442a3d23e688b9e699e800", size = 445793, upload-time = "2026-04-25T11:05:58.953Z" }, { url = "https://files.pythonhosted.org/packages/f7/d0/3c91e4e6a05ca4d7df8e39ec3a75b713609258ec84705ab34be6430826a1/xxhash-3.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7d9110d0c3fb02679972837a033251fd186c529aa62f19c132fc909c74052b8", size = 193937, upload-time = "2026-04-25T11:06:00.546Z" }, - { url = "https://files.pythonhosted.org/packages/4e/3a/a6b0772d9801dd4bea4ca4fd34734d6e9b51a711c8a611a24a79de26a878/xxhash-3.7.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:347a93f2b4ce67ce61959665e32a7447c380f8347e55e100daa23766baacf0e5", size = 285188, upload-time = "2026-04-25T11:06:01.96Z" }, - { url = "https://files.pythonhosted.org/packages/6c/f8/cf8e31fd7282230fe7367cd501a2e75b4b67b222bfc7eacccfc20d2652cb/xxhash-3.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:acbb48679ddf3852c45280c10ff10d52ca2cd1da2e552fb81db1ff786c75d0e4", size = 210966, upload-time = "2026-04-25T11:06:03.453Z" }, - { url = "https://files.pythonhosted.org/packages/cc/f0/fd36cc4a81bf52ee5633275daae2b93dd958aace67fd4f5d466ec83b5f35/xxhash-3.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:fe14c356f8b23ad811dc026077a6d4abccdaa7bce5ca98579605550657b6fcfb", size = 241994, upload-time = "2026-04-25T11:06:05.264Z" }, - { url = "https://files.pythonhosted.org/packages/08/e1/67f5d9c9369be42eaf99ba02c01bf14c5ecd67087b02567960bfcee43b63/xxhash-3.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f420ad3d41e38194353a498bbc9561fd5a9973a27b536ce46d8583479cf44335", size = 198707, upload-time = "2026-04-25T11:06:07.044Z" }, - { url = "https://files.pythonhosted.org/packages/50/17/a4c865ca22d2da6b1bc7d739bf88cab209533cf52ba06ca9da27c3039bee/xxhash-3.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:693d02c6dc7d1aa0a45921d54cd8c1ff629e09dfdc2238471507af1f7a1c6f04", size = 210917, upload-time = "2026-04-25T11:06:08.853Z" }, - { url = "https://files.pythonhosted.org/packages/49/8b/453b35810d697abac3c96bde3528bece685869227da274eb80a4a4d4a119/xxhash-3.7.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:14bf7a54e43825ec131ee7fe3c60e142e7c2c1e676ad0f93fc893432d15414af", size = 275772, upload-time = "2026-04-25T11:06:10.645Z" }, - { url = "https://files.pythonhosted.org/packages/b5/ad/4eed7eab07fd3ee6678f416190f0413d097ab5d7c1278906bf1e9549d789/xxhash-3.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ae3a39a4d96bdb6f8d154fd7f490c4ad06f0532fcd2bb656052a9a7762cf5d31", size = 414068, upload-time = "2026-04-25T11:06:12.511Z" }, { url = "https://files.pythonhosted.org/packages/d3/4e/fd6f8a680ba248fdb83054fa71a8bfa3891225200de1708b888ef2c49829/xxhash-3.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1cc07c639e3a77ef1d32987464d3e408565b8a3be57b545d3542b191054d9923", size = 191459, upload-time = "2026-04-25T11:06:14.07Z" }, - { url = "https://files.pythonhosted.org/packages/50/7c/8cb34b3bed4f44ca6827a534d50833f9bc6c006e83b0eb410ac9fa0793bd/xxhash-3.7.0-cp311-cp311-win32.whl", hash = "sha256:3281ba1d1e60ee7a382a7b958513ba03c2c0d5fcbd9a6f7517c0a81251a23422", size = 30628, upload-time = "2026-04-25T11:06:15.802Z" }, - { url = "https://files.pythonhosted.org/packages/0b/47/a49767bd7b40782bedae9ff0721bfe1d7e4dd9dc1585dea684e57ba67c20/xxhash-3.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:a7f25baec4c5d851d40718d6fae52285b31683093d4ff5207e63ab306ccf14a5", size = 31461, upload-time = "2026-04-25T11:06:17.104Z" }, - { url = "https://files.pythonhosted.org/packages/7c/c6/3957bfacfb706bd687be246dfa8dd60f8df97c44186d229f7fd6e26c4b7e/xxhash-3.7.0-cp311-cp311-win_arm64.whl", hash = "sha256:4c2454448ce847c72635827bb75c15c5a3434b03ee1afd28cb6dc6fb2597d830", size = 27746, upload-time = "2026-04-25T11:06:18.716Z" }, { url = "https://files.pythonhosted.org/packages/54/c1/e57ac7317b1f58a92bab692da6d497e2a7ce44735b224e296347a7ecc754/xxhash-3.7.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ad3aa71e12ee634f22b39a0ff439357583706e50765f17f05550f92dbf128a23", size = 31232, upload-time = "2026-04-25T11:10:21.51Z" }, { url = "https://files.pythonhosted.org/packages/4f/4e/075559bd712bc62e84915ea46bbee859f935d285659082c129bdbff679dd/xxhash-3.7.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5de686e73690cdaf72b96d4fa083c230ec9020bcc2627ce6316138e2cf2fe2d1", size = 28553, upload-time = "2026-04-25T11:10:23.1Z" }, - { url = "https://files.pythonhosted.org/packages/92/ca/a9c78cb384d4b033b0c58196bd5c8509873cabe76389e195127b0302a741/xxhash-3.7.0-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7fbec49f5341bbdea0c471f7d1e2fb41ae8925af9b6f28025c28defd8eb94274", size = 41109, upload-time = "2026-04-25T11:10:25.022Z" }, - { url = "https://files.pythonhosted.org/packages/bd/b1/dfe2629f7c77eb2fa234c72ff537cdd64939763df704e256446ed364a16d/xxhash-3.7.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48b542c347c2089f43dc5a6db31d2a6f3cdb04ee33505ec6e9f653834dbb0bde", size = 36307, upload-time = "2026-04-25T11:10:26.949Z" }, { url = "https://files.pythonhosted.org/packages/e7/f7/5a484afce0f48dd8083208b42e4911f290a82c7b52458ef2927e4d421a45/xxhash-3.7.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a169a036bed0995e090d1493b283cc2cc8a6f5046821086b843abefff80643bc", size = 32534, upload-time = "2026-04-25T11:10:29.01Z" }, - { url = "https://files.pythonhosted.org/packages/0f/5f/4acfcd490db9780cf36c58534d828003c564cde5350220a1c783c4d10776/xxhash-3.7.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:ec101643395d7f21405b640f728f6f627e6986557027d740f2f9b220955edafe", size = 31552, upload-time = "2026-04-25T11:10:30.727Z" }, ] [[package]] @@ -4348,45 +3453,25 @@ name = "yarl" version = "1.24.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "idna" }, - { name = "multidict" }, - { name = "propcache" }, + { name = "idna", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "multidict", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "propcache", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/79/12/1e8f37460ea0f7eb59c221fdaf0ed75e7ac43e97f8093b9c6f411df50a78/yarl-1.24.2.tar.gz", hash = "sha256:9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8", size = 210798, upload-time = "2026-05-19T21:31:05.599Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/df/f1c7a3de0831cd83194f1a85c5bb431b13f81e6b45079314c86d1c4ef3f2/yarl-1.24.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5249a113065c2b7a958bc699759e359cd61cfc81e3069662208f48f191b7ed12", size = 129057, upload-time = "2026-05-19T21:27:47.564Z" }, - { url = "https://files.pythonhosted.org/packages/48/41/7daafb32dd7562bf45b1ce56562e7e1a9146f6479b6456873eb8a3413c40/yarl-1.24.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7f4425fa244fbf530b006d0c5f79ce920114cfff5b4f5f6056e669f8e160fdc0", size = 91545, upload-time = "2026-05-19T21:27:50.089Z" }, - { url = "https://files.pythonhosted.org/packages/a8/8f/7b3ec212f1ea0683f55f978e3246bc313c38818664edfc97a9f349a4901e/yarl-1.24.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15c0b5e49d3c44e2a0b93e6a49476c5edad0a7686b92c395765a7ea775572a75", size = 91380, upload-time = "2026-05-19T21:27:51.953Z" }, - { url = "https://files.pythonhosted.org/packages/8a/1b/8bafab7db23b0567ae9db749099b329d91e3b82bc6028b2050ba583e116c/yarl-1.24.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:246d32a53a947c8f0189f5d699cbd4c7036de45d9359e13ba238d1239678c727", size = 105957, upload-time = "2026-05-19T21:27:53.98Z" }, - { url = "https://files.pythonhosted.org/packages/7f/77/21030c2f8d21d21559719beafc772ada2014be933418ed1eaed9cc800e42/yarl-1.24.2-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:64480fb3e4d4ed9ed71c48a91a477384fc342a50ca30071d2f8a88d51d9c9413", size = 97242, upload-time = "2026-05-19T21:27:55.981Z" }, - { url = "https://files.pythonhosted.org/packages/50/d8/f9ea63d1b6aa910a866e089d871fff6cbd49caab29b86b35221a62dfa0d5/yarl-1.24.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:349de4701dc3760b6e876628423a8f147ef4f5599d10aba1e10702075d424ed9", size = 114719, upload-time = "2026-05-19T21:27:58.037Z" }, - { url = "https://files.pythonhosted.org/packages/e9/a3/04e0ee98ac58a249ea7ed75223f5f901ba81a834f0b4921b58e5cec11757/yarl-1.24.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d162677af8d5d3d6ebab8394b021f4d041ac107a4b705873148a77a49dc9e1b2", size = 112140, upload-time = "2026-05-19T21:27:59.618Z" }, - { url = "https://files.pythonhosted.org/packages/02/ad/0b9cc9f38a7324a7eb1d80f834eaa5283d17e9271bbda3186e598dddaeac/yarl-1.24.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f5f5c6ec23a9043f2d139cc072f53dd23168d202a334b9b2fda8de4c3e890d90", size = 106721, upload-time = "2026-05-19T21:28:02.586Z" }, - { url = "https://files.pythonhosted.org/packages/65/e7/a52478ebfc66ec989e085c6ae038b9f1bfa4190baa193b133b669c709e2f/yarl-1.24.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:60de6742447fbbf697f16f070b8a443f1b5fe6ca3826fbef9fe70ecd5328e643", size = 106478, upload-time = "2026-05-19T21:28:04.523Z" }, - { url = "https://files.pythonhosted.org/packages/04/d8/5508530fea8472542de00013ae280765fc938ee196fc4030c43a498afb36/yarl-1.24.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:acf93187c3710e422368eb768aee98db551ec7c85adc250207a95c16548ab7ac", size = 105423, upload-time = "2026-05-19T21:28:06.515Z" }, - { url = "https://files.pythonhosted.org/packages/84/f1/ece28505e9628e8b756e11bb4f28864a17cc33b6b44db4d2aaf0622bf630/yarl-1.24.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f4b0352fd41fd34b6651934606268816afd6914d09626f9bcbbf018edb0afb3f", size = 99878, upload-time = "2026-05-19T21:28:08.637Z" }, - { url = "https://files.pythonhosted.org/packages/3f/52/fb5d34529b46dd84013afcfb30b8d2bc2832ed03d412736f577d604fa393/yarl-1.24.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:6b208bb939099b4b297438da4e9b25357f0b1c791888669b963e45b203ea9f36", size = 114025, upload-time = "2026-05-19T21:28:10.64Z" }, - { url = "https://files.pythonhosted.org/packages/43/f0/ff9d31aaab024f7a251c0ed308a98ae29bf9f7dc344e78f28b1322431ca2/yarl-1.24.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4b85b8825e631295ff4bc8943f7471d54c533a9360bbe15ebb38e018b555bb8a", size = 105613, upload-time = "2026-05-19T21:28:12.784Z" }, - { url = "https://files.pythonhosted.org/packages/31/7d/3296fb3f3ecd52bf9ae6c16b0895c1cda7e9170a2083861552b683f70264/yarl-1.24.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e26acf20c26cb4fefc631fdb75aca2a6b8fa8b7b5d7f204fb6a8f1e63c706f53", size = 111665, upload-time = "2026-05-19T21:28:14.393Z" }, - { url = "https://files.pythonhosted.org/packages/1a/74/77aa6ddaca4fbf42e45e675a465c43956dd40702281049975a2aa04eae59/yarl-1.24.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:819ca24f8eafcfb683c1bd5f44f2f488cea1274eb8944731ffd2e1f10f619342", size = 106914, upload-time = "2026-05-19T21:28:15.893Z" }, - { url = "https://files.pythonhosted.org/packages/d8/02/7611f22cd1d4ed7373eb7f9ee21fde1046edba2e7c0e514880d760352f48/yarl-1.24.2-cp310-cp310-win_amd64.whl", hash = "sha256:5cb0f995a901c36be096ccbf4c673591c2faabbe96279598ffaec8c030f85bf4", size = 92658, upload-time = "2026-05-19T21:28:17.471Z" }, - { url = "https://files.pythonhosted.org/packages/91/00/671d0add79938127292839ae44506ce2f7fe8909c72d5a931864f128fd0b/yarl-1.24.2-cp310-cp310-win_arm64.whl", hash = "sha256:f408eace7e22a68b467a0562e0d27d322f91fe3eaaa6f466b962c6cfaea9fa39", size = 87887, upload-time = "2026-05-19T21:28:19.021Z" }, { url = "https://files.pythonhosted.org/packages/c5/c5/1ce244152ff2839645e7cae92f90e7bafcb2c52bea7ff586ac714f14f5df/yarl-1.24.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:36348bebb147b83818b9d7e673ea4debc75970afc6ffdc7e3975ad05ce5a58c1", size = 128971, upload-time = "2026-05-19T21:28:20.543Z" }, { url = "https://files.pythonhosted.org/packages/87/5a/00f36967203ed89cb3acd2c8ed526cc3fed9418eb70ce128160a911c8499/yarl-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a97e42c8a2233f2f279ecadd9e4a037bcb5d813b78435e8eedd4db5a9e9708c", size = 91507, upload-time = "2026-05-19T21:28:22.556Z" }, { url = "https://files.pythonhosted.org/packages/31/d0/1fb0c1cd27288f39f6974da4318c32768d72c9890984541fdf1e2e32a51d/yarl-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8d027d56f1035e339d1001ac33eceab5b2ec8e42e449787bb75e289fb9a5cd1d", size = 91343, upload-time = "2026-05-19T21:28:24.092Z" }, - { url = "https://files.pythonhosted.org/packages/03/ce/d4a646508bed2f8dec6435b40166fe9308dd191262033d3f307b2bbcaecd/yarl-1.24.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a6377060e7927187a42b7eb202090cbe2b34933a4eeaf90e3bd9e33432e5cae", size = 105704, upload-time = "2026-05-19T21:28:25.872Z" }, - { url = "https://files.pythonhosted.org/packages/4b/07/b3278e82d8bc41485bcf6d856cd0433262593de615b1d3dc43bd3f5bead4/yarl-1.24.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:17076578bce0049a5ce57d14ad1bded391b68a3b213e9b81b0097b090244999a", size = 97281, upload-time = "2026-05-19T21:28:27.352Z" }, - { url = "https://files.pythonhosted.org/packages/17/5b/4cee6e7c92e487bebe7afc797da0aa54a248ab4e776a68fe369ec29665a5/yarl-1.24.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:50713f1d4d6be6375bb178bb43d140ee1acb8abe589cd723320b7925a275be1e", size = 114020, upload-time = "2026-05-19T21:28:29.458Z" }, - { url = "https://files.pythonhosted.org/packages/5c/82/111076571545a7d4f9cca3fbd5c6f40615af58642be09f12328f48022468/yarl-1.24.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:34263e2fa8fb5bb63a0d97706cda38edbad62fddb58c7f12d6acbc092812aa50", size = 111450, upload-time = "2026-05-19T21:28:31.262Z" }, { url = "https://files.pythonhosted.org/packages/b6/ec/08f671f69a444d704aeecebf92af659b67b97a869942411d0a578b08c334/yarl-1.24.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49016d82f032b1bd1e10b01078a7d29ae71bf468eeae0ea22df8bab691e60003", size = 106384, upload-time = "2026-05-19T21:28:32.856Z" }, - { url = "https://files.pythonhosted.org/packages/e5/86/ce41e7a7a199340b2330d52b60f25c4074b6636dd0e60b1a80d31a9db042/yarl-1.24.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3f6d2c216318f8f32038ca3f72501ba08536f0fd18a36e858836b121b2deed9f", size = 106153, upload-time = "2026-05-19T21:28:35.222Z" }, - { url = "https://files.pythonhosted.org/packages/c4/5d/31be8a729531ab3e55ac3e7e5c800be8c89ea98947f418b2f6ea259fb6ee/yarl-1.24.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:08d3a33218e0c64393e7610284e770409a9c31c429b078bcb24096ed0a783b8f", size = 105322, upload-time = "2026-05-19T21:28:36.642Z" }, - { url = "https://files.pythonhosted.org/packages/47/9b/b57afb22b386ae87ac9940f09878b98d8c333f89113e6fc96fcf4ca9eb64/yarl-1.24.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5d699376c4ca3cba49bbfae3a05b5b70ded572937171ce1e0b8d87118e2ba294", size = 99057, upload-time = "2026-05-19T21:28:38.386Z" }, - { url = "https://files.pythonhosted.org/packages/a3/4f/06348c27c8389256c313e8a57d796808fc0264c915dd5e7cfd3c0e314dc7/yarl-1.24.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a1cab588b4fa14bea2e55ebea27478adfb05372f47573738e1acc4a36c0b05d2", size = 113502, upload-time = "2026-05-19T21:28:40.091Z" }, - { url = "https://files.pythonhosted.org/packages/5f/1c/284f307b298e4a17b7943b07d9d7ecc4151537f8d137ba51f3bb6c31ca20/yarl-1.24.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:ec87ccc31bd21db7ad009d8572c127c1000f268517618a4cc09adba3c2a7f21c", size = 105253, upload-time = "2026-05-19T21:28:41.987Z" }, - { url = "https://files.pythonhosted.org/packages/c8/bf/0de123bec8619e45c80cbded9085f61b5b4a9eddb8abe6d25d28ee1ec866/yarl-1.24.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d1dd47a22843b212baa8d74f37796815d43bd046b42a0f41e9da433386c3136b", size = 111345, upload-time = "2026-05-19T21:28:43.93Z" }, { url = "https://files.pythonhosted.org/packages/90/af/0248eb065e51129d2a9b2436cd1b5c772c19a6b04e5b6a186955671e3319/yarl-1.24.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7b54b9c67c2b06bd7b9a77253d242124b9c95d2c02def5a1144001ee547dd9d5", size = 106558, upload-time = "2026-05-19T21:28:45.806Z" }, - { url = "https://files.pythonhosted.org/packages/21/3c/f960d7a65ef97d8ba9b424fb5128796a4bc710fc6df2ddbbd7dfdc3bbd20/yarl-1.24.2-cp311-cp311-win_amd64.whl", hash = "sha256:f8fdbcff8b2c7c9284e60c196f693588598ddcee31e11c18e14949ce44519d45", size = 92808, upload-time = "2026-05-19T21:28:48.465Z" }, - { url = "https://files.pythonhosted.org/packages/03/1a/49fb03750e4de4d2284cd5b885a383133c34eef45bd59631b2bb8b7e81e8/yarl-1.24.2-cp311-cp311-win_arm64.whl", hash = "sha256:b32c37a7a337e90822c45797bf3d79d60875cfcccd3ecc80e9f453d87026c122", size = 87610, upload-time = "2026-05-19T21:28:50.07Z" }, { url = "https://files.pythonhosted.org/packages/fd/4d/4b880086bd0d3e034d25647be1d830afc3e3f610e98c4ab3490af6b1b6d5/yarl-1.24.2-py3-none-any.whl", hash = "sha256:2783d9226db8797636cd6896e4de81feed252d1db72265686c9558d97a4d94b9", size = 53576, upload-time = "2026-05-19T21:31:03.909Z" }, ] + +[[package]] +name = "z3-solver" +version = "4.15.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/8e/0c8f17309549d2e5cde9a3ccefa6365437f1e7bafe71878eaf9478e47b18/z3_solver-4.15.4.0.tar.gz", hash = "sha256:928c29b58c4eb62106da51c1914f6a4a55d0441f8f48a81b9da07950434a8946", size = 5018600, upload-time = "2025-10-29T18:12:03.062Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/c9/bb51a96af0091324c81b803f16c49f719f9f6ea0b0bb52200f5c97ec4892/z3_solver-4.15.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e103a6f203f505b8b8b8e5c931cc407c95b61556512d4921c1ddc0b3f41b08e", size = 29268352, upload-time = "2025-10-29T18:11:53.032Z" }, +]