From 730372027dd3b3e8cce15533671f4c9758b6d15e Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Thu, 10 Apr 2025 11:35:18 +0200
Subject: [PATCH 01/28] basic requirements

---
 Dockerfile                  |   39 +
 api_writer/demo_api.json    |    8 +
 api_writer/demo_return.json | 2754 +++++++++++++++++++++++++++++++++++
 api_writer/test_ui.py       |  145 ++
 jupyterhub_test.ipynb       |  305 ++++
 requirements.txt            |    4 +
 vllm.ipynb                  |  834 +++++++++++
 7 files changed, 4089 insertions(+)
 create mode 100644 Dockerfile
 create mode 100644 api_writer/demo_api.json
 create mode 100644 api_writer/demo_return.json
 create mode 100644 api_writer/test_ui.py
 create mode 100644 jupyterhub_test.ipynb
 create mode 100644 requirements.txt
 create mode 100644 vllm.ipynb

diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..56c1207
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,39 @@
+FROM quay.io/jupyter/minimal-notebook:lab-4.2.5
+
+# Fix: https://github.com/hadolint/hadolint/wiki/DL4006
+# Fix: https://github.com/koalaman/shellcheck/wiki/SC3014
+SHELL ["/bin/bash", "-o", "pipefail", "-c"]
+
+USER root
+
+RUN apt-get update --yes \
+ && apt-get install --yes --no-install-recommends \
+    git-lfs \
+    build-essential \
+    gcc \
+ && apt-get clean \
+ && rm -rf /var/lib/apt/lists/*
+
+USER ${NB_UID}
+COPY --from=ghcr.io/astral-sh/uv:0.6.9 /uv /uvx /bin/
+RUN uv pip install --system -r requirements.txt \
+ && fix-permissions "${CONDA_DIR}" \
+ && fix-permissions "/home/${NB_USER}"
+
+# https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/docker-specialized.html#dockerfiles
+ENV NVIDIA_VISIBLE_DEVICES="all" \
+    NVIDIA_DRIVER_CAPABILITIES="compute,utility"
+
+# Puts the nvidia-smi binary (system management interface) on path
+# with associated library files to execute it
+ENV PATH="${PATH}:/usr/local/nvidia/bin" \
+    LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/nvidia/lib64"
+
+USER ${NB_UID}
+WORKDIR ${HOME}
+
+COPY --chown=${NB_UID}:${NB_GID} api_writer/ api_writer/
+COPY --chown=${NB_UID}:${NB_GID} jupterhub_test.ipynb .
+COPY --chown=${NB_UID}:${NB_GID} vllm.ipynb .
+
+    
\ No newline at end of file
diff --git a/api_writer/demo_api.json b/api_writer/demo_api.json
new file mode 100644
index 0000000..3a81e7c
--- /dev/null
+++ b/api_writer/demo_api.json
@@ -0,0 +1,8 @@
+{
+    "results.material.elements:all": [
+      "Ca",
+      "Mo",
+      "Ir",
+      "V"
+    ]
+}
\ No newline at end of file
diff --git a/api_writer/demo_return.json b/api_writer/demo_return.json
new file mode 100644
index 0000000..27edf92
--- /dev/null
+++ b/api_writer/demo_return.json
@@ -0,0 +1,2754 @@
+{
+    "owner": "visible",
+    "query": {
+      "name": "results.material.elements",
+      "value": {
+        "all": [
+          "Ca",
+          "V",
+          "Mo",
+          "Ir"
+        ]
+      }
+    },
+    "pagination": {
+      "page_size": 20,
+      "order_by": "upload_create_time",
+      "order": "desc",
+      "total": 6
+    },
+    "required": {
+      "exclude": [
+        "quantities",
+        "sections",
+        "files"
+      ]
+    },
+    "aggregations": {
+      "results.material.elements:default": {
+        "terms": {
+          "quantity": "results.material.elements",
+          "exclude_from_search": false,
+          "metrics": [],
+          "size": 119,
+          "data": [
+            {
+              "count": 6,
+              "nested_count": 6,
+              "value": "Ca"
+            },
+            {
+              "count": 6,
+              "nested_count": 6,
+              "value": "Ir"
+            },
+            {
+              "count": 6,
+              "nested_count": 6,
+              "value": "Mo"
+            },
+            {
+              "count": 6,
+              "nested_count": 6,
+              "value": "V"
+            }
+          ],
+          "exhausted": true,
+          "total": 24
+        }
+      },
+      "results.material.n_elements:default_histogram": {
+        "histogram": {
+          "quantity": "results.material.n_elements",
+          "exclude_from_search": true,
+          "metrics": [],
+          "interval": 1,
+          "data": [
+            {
+              "count": 6,
+              "nested_count": 6,
+              "value": 4
+            }
+          ]
+        }
+      }
+    },
+    "data": [
+      {
+        "upload_id": "TKooJaRDShmEsKg9PSRybw",
+        "references": [
+          "http://www.sciencedirect.com/science/article/pii/S0927025614003322",
+          "http://aflowlib.org",
+          "http://www.sciencedirect.com/science/article/pii/S0927025612000687"
+        ],
+        "origin": "AFLOW",
+        "datasets": [],
+        "n_quantities": 1344,
+        "nomad_version": "1.0.0",
+        "upload_create_time": "2020-02-06T15:09:08.397000",
+        "nomad_commit": "37587aa6",
+        "publish_time": "2020-02-06T16:42:13.653000",
+        "processing_errors": [],
+        "results": {
+          "material": {
+            "symmetry": {
+              "bravais_lattice": "cF",
+              "space_group_symbol": "F-43m",
+              "prototype_aflow_id": "ABCD_cF16_216_c_d_b_a",
+              "prototype_formula": "AuLiMgSn",
+              "space_group_number": 216,
+              "point_group": "-43m",
+              "crystal_system": "cubic",
+              "hall_number": 512,
+              "hall_symbol": "F -4 2 3"
+            },
+            "elements": [
+              "Ca",
+              "Ir",
+              "Mo",
+              "V"
+            ],
+            "elements_exclusive": "Ca Ir Mo V",
+            "chemical_formula_anonymous": "ABCD",
+            "material_id": "pw-Src0usR1UuEQsJ6JiUaVdHvH6",
+            "structural_type": "bulk",
+            "chemical_formula_reduced": "CaIrMoV",
+            "n_elements": 4,
+            "chemical_formula_descriptive": "CaIrMoV",
+            "chemical_formula_reduced_fragments": [
+              "Ca",
+              "Ir",
+              "Mo",
+              "V"
+            ],
+            "chemical_formula_hill": "CaIrMoV"
+          },
+          "method": {
+            "method_name": "DFT",
+            "simulation": {
+              "program_version": "5.4.1 05Feb16 (build Jan 29 2019 17:37:47) complex parallel HPE-SGI-Intel",
+              "dft": {
+                "basis_set_type": "plane waves",
+                "core_electron_treatment": "pseudopotential",
+                "xc_functional_type": "GGA",
+                "xc_functional_names": [
+                  "GGA_C_PBE",
+                  "GGA_X_PBE"
+                ],
+                "scf_threshold_energy_change": 1.602176634e-25
+              },
+              "program_name": "VASP"
+            }
+          },
+          "properties": {
+            "available_properties": [
+              "dos_electronic",
+              "geometry_optimization"
+            ],
+            "n_calculations": 5,
+            "structures": {
+              "structure_primitive": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.531674626252806e-29,
+                "lattice_parameters": {
+                  "a": 4.520431022647377e-10,
+                  "b": 4.520431022647377e-10,
+                  "c": 4.520431022647377e-10,
+                  "alpha": 1.0471975511965976,
+                  "beta": 1.0471975511965976,
+                  "gamma": 1.0471975511965976
+                }
+              },
+              "structure_conventional": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 16,
+                "cell_volume": 2.6126698505011136e-28,
+                "lattice_parameters": {
+                  "a": 6.392854860000001e-10,
+                  "b": 6.392854860000001e-10,
+                  "c": 6.392854860000001e-10,
+                  "alpha": 1.5707963267948966,
+                  "beta": 1.5707963267948966,
+                  "gamma": 1.5707963267948966
+                }
+              },
+              "structure_original": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.531674626252806e-29,
+                "lattice_parameters": {
+                  "a": 4.520431022647377e-10,
+                  "b": 4.520431022647377e-10,
+                  "c": 4.520431022647377e-10,
+                  "alpha": 1.0471975511965976,
+                  "beta": 1.0471975511965976,
+                  "gamma": 1.0471975511965976
+                }
+              }
+            },
+            "electronic": {
+              "dos_electronic": {
+                "spin_polarized": true,
+                "band_gap": [
+                  {
+                    "index": 0
+                  },
+                  {
+                    "index": 1
+                  }
+                ]
+              }
+            },
+            "geometry_optimization": {
+              "structure_optimized": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.531674626252806e-29,
+                "lattice_parameters": {
+                  "a": 4.520431022647377e-10,
+                  "b": 4.520431022647377e-10,
+                  "c": 4.520431022647377e-10,
+                  "alpha": 1.0471975511965976,
+                  "beta": 1.0471975511965976,
+                  "gamma": 1.0471975511965976
+                }
+              },
+              "final_force_maximum": 0,
+              "final_energy_difference": 4.6487155035298135e-23
+            }
+          }
+        },
+        "last_processing_time": "2022-01-03T09:15:31.333000",
+        "optimade": {
+          "nperiodic_dimensions": 3,
+          "species_at_sites": [
+            "Ca",
+            "Ir",
+            "Mo",
+            "V"
+          ],
+          "nsites": 4,
+          "elements": [
+            "Ca",
+            "Ir",
+            "Mo",
+            "V"
+          ],
+          "chemical_formula_anonymous": "ABCD",
+          "chemical_formula_reduced": "CaIrMoV",
+          "structure_features": [],
+          "nelements": 4,
+          "chemical_formula_descriptive": "CaIrMoV",
+          "chemical_formula_hill": "CaIrMoV",
+          "elements_ratios": [
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ]
+          ]
+        },
+        "parser_name": "parsers/vasp",
+        "calc_id": "vExnObNnnxs3reqwZHMPCSTSE_0T",
+        "published": true,
+        "writers": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "processed": true,
+        "mainfile": "nomad/fairdi/external/aflowlib/LIB4_LIB/AFLOWDATA_LIB4_LIB_Ca_svIrMo_pvV_sv_PAW_PBE_ABCD_cF16_216_c_d_b_a.ABCD/vasprun.xml.relax1.xz",
+        "main_author": {
+          "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+          "name": "Stefano Curtarolo"
+        },
+        "viewers": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "entry_create_time": "2020-02-07T08:28:37",
+        "with_embargo": false,
+        "external_db": "AFLOW",
+        "domain": "dft",
+        "comment": "",
+        "entry_id": "vExnObNnnxs3reqwZHMPCSTSE_0T",
+        "upload_name": "AFLOWLIB__200206154147395846",
+        "authors": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "license": "CC BY 4.0"
+      },
+      {
+        "upload_id": "TKooJaRDShmEsKg9PSRybw",
+        "references": [
+          "http://www.sciencedirect.com/science/article/pii/S0927025614003322",
+          "http://aflowlib.org",
+          "http://www.sciencedirect.com/science/article/pii/S0927025612000687"
+        ],
+        "origin": "AFLOW",
+        "datasets": [],
+        "n_quantities": 1431,
+        "nomad_version": "1.0.0",
+        "upload_create_time": "2020-02-06T15:09:08.397000",
+        "nomad_commit": "37587aa6",
+        "publish_time": "2020-02-06T16:42:13.653000",
+        "processing_errors": [],
+        "results": {
+          "material": {
+            "symmetry": {
+              "bravais_lattice": "cF",
+              "space_group_symbol": "F-43m",
+              "prototype_aflow_id": "ABCD_cF16_216_c_d_b_a",
+              "prototype_formula": "AuLiMgSn",
+              "space_group_number": 216,
+              "point_group": "-43m",
+              "crystal_system": "cubic",
+              "hall_number": 512,
+              "hall_symbol": "F -4 2 3"
+            },
+            "elements": [
+              "Ca",
+              "Ir",
+              "Mo",
+              "V"
+            ],
+            "elements_exclusive": "Ca Ir Mo V",
+            "chemical_formula_anonymous": "ABCD",
+            "material_id": "q8Nrqq7nk9BEYAayNtxO2LwAq2E9",
+            "structural_type": "bulk",
+            "chemical_formula_reduced": "CaIrMoV",
+            "n_elements": 4,
+            "chemical_formula_descriptive": "CaIrMoV",
+            "chemical_formula_reduced_fragments": [
+              "Ca",
+              "Ir",
+              "Mo",
+              "V"
+            ],
+            "chemical_formula_hill": "CaIrMoV"
+          },
+          "method": {
+            "method_name": "DFT",
+            "simulation": {
+              "program_version": "5.4.1 05Feb16 (build Jan 29 2019 17:37:47) complex parallel HPE-SGI-Intel",
+              "dft": {
+                "basis_set_type": "plane waves",
+                "core_electron_treatment": "pseudopotential",
+                "xc_functional_type": "GGA",
+                "xc_functional_names": [
+                  "GGA_C_PBE",
+                  "GGA_X_PBE"
+                ],
+                "scf_threshold_energy_change": 1.602176634e-25
+              },
+              "program_name": "VASP"
+            }
+          },
+          "properties": {
+            "available_properties": [
+              "dos_electronic",
+              "geometry_optimization"
+            ],
+            "n_calculations": 6,
+            "structures": {
+              "structure_primitive": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.71069116895825e-29,
+                "lattice_parameters": {
+                  "a": 4.5613572034873335e-10,
+                  "b": 4.5613572034873335e-10,
+                  "c": 4.5613572034873335e-10,
+                  "alpha": 1.0471975511965979,
+                  "beta": 1.0471975511965979,
+                  "gamma": 1.0471975511965979
+                }
+              },
+              "structure_conventional": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 16,
+                "cell_volume": 2.684276467583272e-28,
+                "lattice_parameters": {
+                  "a": 6.45073322e-10,
+                  "b": 6.45073322e-10,
+                  "c": 6.45073322e-10,
+                  "alpha": 1.5707963267948966,
+                  "beta": 1.5707963267948966,
+                  "gamma": 1.5707963267948966
+                }
+              },
+              "structure_original": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.71069116895825e-29,
+                "lattice_parameters": {
+                  "a": 4.5613572034873335e-10,
+                  "b": 4.5613572034873335e-10,
+                  "c": 4.5613572034873335e-10,
+                  "alpha": 1.0471975511965979,
+                  "beta": 1.0471975511965979,
+                  "gamma": 1.0471975511965979
+                }
+              }
+            },
+            "electronic": {
+              "dos_electronic": {
+                "spin_polarized": true,
+                "band_gap": [
+                  {
+                    "index": 0
+                  },
+                  {
+                    "index": 1
+                  }
+                ]
+              }
+            },
+            "geometry_optimization": {
+              "structure_optimized": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.71069116895825e-29,
+                "lattice_parameters": {
+                  "a": 4.5613572034873335e-10,
+                  "b": 4.5613572034873335e-10,
+                  "c": 4.5613572034873335e-10,
+                  "alpha": 1.0471975511965979,
+                  "beta": 1.0471975511965979,
+                  "gamma": 1.0471975511965979
+                }
+              },
+              "final_force_maximum": 0,
+              "final_energy_difference": 1.4675937966594379e-24
+            }
+          }
+        },
+        "last_processing_time": "2022-01-03T09:15:22.960000",
+        "optimade": {
+          "nperiodic_dimensions": 3,
+          "species_at_sites": [
+            "Ca",
+            "Ir",
+            "Mo",
+            "V"
+          ],
+          "nsites": 4,
+          "elements": [
+            "Ca",
+            "Ir",
+            "Mo",
+            "V"
+          ],
+          "chemical_formula_anonymous": "ABCD",
+          "chemical_formula_reduced": "CaIrMoV",
+          "structure_features": [],
+          "nelements": 4,
+          "chemical_formula_descriptive": "CaIrMoV",
+          "chemical_formula_hill": "CaIrMoV",
+          "elements_ratios": [
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ]
+          ]
+        },
+        "parser_name": "parsers/vasp",
+        "calc_id": "upihdOfU0YEeW1JTnYDuhG024Uh-",
+        "published": true,
+        "writers": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "processed": true,
+        "mainfile": "nomad/fairdi/external/aflowlib/LIB4_LIB/AFLOWDATA_LIB4_LIB_Ca_svIrMo_pvV_sv_PAW_PBE_ABCD_cF16_216_c_d_b_a.CABD/vasprun.xml.relax1.xz",
+        "main_author": {
+          "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+          "name": "Stefano Curtarolo"
+        },
+        "viewers": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "entry_create_time": "2020-02-07T08:28:37",
+        "with_embargo": false,
+        "external_db": "AFLOW",
+        "domain": "dft",
+        "comment": "",
+        "entry_id": "upihdOfU0YEeW1JTnYDuhG024Uh-",
+        "upload_name": "AFLOWLIB__200206154147395846",
+        "authors": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "license": "CC BY 4.0"
+      },
+      {
+        "upload_id": "TKooJaRDShmEsKg9PSRybw",
+        "references": [
+          "http://www.sciencedirect.com/science/article/pii/S0927025614003322",
+          "http://aflowlib.org",
+          "http://www.sciencedirect.com/science/article/pii/S0927025612000687"
+        ],
+        "origin": "AFLOW",
+        "datasets": [],
+        "n_quantities": 922,
+        "nomad_version": "1.0.0",
+        "upload_create_time": "2020-02-06T15:09:08.397000",
+        "nomad_commit": "37587aa6",
+        "publish_time": "2020-02-06T16:42:13.653000",
+        "processing_errors": [],
+        "results": {
+          "material": {
+            "symmetry": {
+              "bravais_lattice": "cF",
+              "space_group_symbol": "F-43m",
+              "prototype_aflow_id": "ABCD_cF16_216_c_d_b_a",
+              "prototype_formula": "AuLiMgSn",
+              "space_group_number": 216,
+              "point_group": "-43m",
+              "crystal_system": "cubic",
+              "hall_number": 512,
+              "hall_symbol": "F -4 2 3"
+            },
+            "elements": [
+              "Ca",
+              "Ir",
+              "Mo",
+              "V"
+            ],
+            "elements_exclusive": "Ca Ir Mo V",
+            "chemical_formula_anonymous": "ABCD",
+            "material_id": "q8Nrqq7nk9BEYAayNtxO2LwAq2E9",
+            "structural_type": "bulk",
+            "chemical_formula_reduced": "CaIrMoV",
+            "n_elements": 4,
+            "chemical_formula_descriptive": "CaIrMoV",
+            "chemical_formula_reduced_fragments": [
+              "Ca",
+              "Ir",
+              "Mo",
+              "V"
+            ],
+            "chemical_formula_hill": "CaIrMoV"
+          },
+          "method": {
+            "method_name": "DFT",
+            "simulation": {
+              "program_version": "5.4.1 05Feb16 (build Jan 29 2019 17:37:47) complex parallel HPE-SGI-Intel",
+              "dft": {
+                "basis_set_type": "plane waves",
+                "core_electron_treatment": "pseudopotential",
+                "xc_functional_type": "GGA",
+                "xc_functional_names": [
+                  "GGA_C_PBE",
+                  "GGA_X_PBE"
+                ],
+                "scf_threshold_energy_change": 1.602176634e-25
+              },
+              "program_name": "VASP"
+            }
+          },
+          "properties": {
+            "available_properties": [
+              "dos_electronic",
+              "geometry_optimization"
+            ],
+            "n_calculations": 3,
+            "structures": {
+              "structure_primitive": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.702270518857077e-29,
+                "lattice_parameters": {
+                  "a": 4.559448524295013e-10,
+                  "b": 4.559448524295013e-10,
+                  "c": 4.559448524295013e-10,
+                  "alpha": 1.0471975511965979,
+                  "beta": 1.0471975511965979,
+                  "gamma": 1.0471975511965979
+                }
+              },
+              "structure_conventional": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 16,
+                "cell_volume": 2.6809082075428405e-28,
+                "lattice_parameters": {
+                  "a": 6.448033940000002e-10,
+                  "b": 6.448033940000002e-10,
+                  "c": 6.448033940000002e-10,
+                  "alpha": 1.5707963267948966,
+                  "beta": 1.5707963267948966,
+                  "gamma": 1.5707963267948966
+                }
+              },
+              "structure_original": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.702270518857077e-29,
+                "lattice_parameters": {
+                  "a": 4.559448524295013e-10,
+                  "b": 4.559448524295013e-10,
+                  "c": 4.559448524295013e-10,
+                  "alpha": 1.0471975511965979,
+                  "beta": 1.0471975511965979,
+                  "gamma": 1.0471975511965979
+                }
+              }
+            },
+            "electronic": {
+              "dos_electronic": {
+                "spin_polarized": true,
+                "band_gap": [
+                  {
+                    "index": 0
+                  },
+                  {
+                    "index": 1
+                  }
+                ]
+              }
+            },
+            "geometry_optimization": {
+              "structure_optimized": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.702270518857077e-29,
+                "lattice_parameters": {
+                  "a": 4.5594485242950124e-10,
+                  "b": 4.5594485242950124e-10,
+                  "c": 4.5594485242950124e-10,
+                  "alpha": 1.0471975511965979,
+                  "beta": 1.0471975511965979,
+                  "gamma": 1.0471975511965979
+                }
+              },
+              "final_force_maximum": 0,
+              "final_energy_difference": 1.2311125256046689e-23
+            }
+          }
+        },
+        "last_processing_time": "2022-01-03T09:03:35.885000",
+        "optimade": {
+          "nperiodic_dimensions": 3,
+          "species_at_sites": [
+            "Ca",
+            "Ir",
+            "Mo",
+            "V"
+          ],
+          "nsites": 4,
+          "elements": [
+            "Ca",
+            "Ir",
+            "Mo",
+            "V"
+          ],
+          "chemical_formula_anonymous": "ABCD",
+          "chemical_formula_reduced": "CaIrMoV",
+          "structure_features": [],
+          "nelements": 4,
+          "chemical_formula_descriptive": "CaIrMoV",
+          "chemical_formula_hill": "CaIrMoV",
+          "elements_ratios": [
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ]
+          ]
+        },
+        "parser_name": "parsers/vasp",
+        "calc_id": "JhJzGgFP1yO0mvfbVqa3uFL76u9D",
+        "published": true,
+        "writers": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "processed": true,
+        "mainfile": "nomad/fairdi/external/aflowlib/LIB4_LIB/AFLOWDATA_LIB4_LIB_Ca_svIrMo_pvV_sv_PAW_PBE_ABCD_cF16_216_c_d_b_a.CABD/vasprun.xml.relax2.xz",
+        "main_author": {
+          "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+          "name": "Stefano Curtarolo"
+        },
+        "viewers": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "entry_create_time": "2020-02-07T08:28:37",
+        "with_embargo": false,
+        "external_db": "AFLOW",
+        "domain": "dft",
+        "comment": "",
+        "entry_id": "JhJzGgFP1yO0mvfbVqa3uFL76u9D",
+        "upload_name": "AFLOWLIB__200206154147395846",
+        "authors": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "license": "CC BY 4.0"
+      },
+      {
+        "upload_id": "TKooJaRDShmEsKg9PSRybw",
+        "references": [
+          "http://www.sciencedirect.com/science/article/pii/S0927025614003322",
+          "http://aflowlib.org",
+          "http://www.sciencedirect.com/science/article/pii/S0927025612000687"
+        ],
+        "origin": "AFLOW",
+        "datasets": [],
+        "n_quantities": 898,
+        "nomad_version": "1.0.0",
+        "upload_create_time": "2020-02-06T15:09:08.397000",
+        "nomad_commit": "37587aa6",
+        "publish_time": "2020-02-06T16:42:13.653000",
+        "processing_errors": [],
+        "results": {
+          "material": {
+            "symmetry": {
+              "bravais_lattice": "cF",
+              "space_group_symbol": "F-43m",
+              "prototype_aflow_id": "ABCD_cF16_216_c_d_b_a",
+              "prototype_formula": "AuLiMgSn",
+              "space_group_number": 216,
+              "point_group": "-43m",
+              "crystal_system": "cubic",
+              "hall_number": 512,
+              "hall_symbol": "F -4 2 3"
+            },
+            "elements": [
+              "Ca",
+              "Ir",
+              "Mo",
+              "V"
+            ],
+            "elements_exclusive": "Ca Ir Mo V",
+            "chemical_formula_anonymous": "ABCD",
+            "material_id": "pw-Src0usR1UuEQsJ6JiUaVdHvH6",
+            "structural_type": "bulk",
+            "chemical_formula_reduced": "CaIrMoV",
+            "n_elements": 4,
+            "chemical_formula_descriptive": "CaIrMoV",
+            "chemical_formula_reduced_fragments": [
+              "Ca",
+              "Ir",
+              "Mo",
+              "V"
+            ],
+            "chemical_formula_hill": "CaIrMoV"
+          },
+          "method": {
+            "method_name": "DFT",
+            "simulation": {
+              "program_version": "5.4.1 05Feb16 (build Jan 29 2019 17:37:47) complex parallel HPE-SGI-Intel",
+              "dft": {
+                "basis_set_type": "plane waves",
+                "core_electron_treatment": "pseudopotential",
+                "xc_functional_type": "GGA",
+                "xc_functional_names": [
+                  "GGA_C_PBE",
+                  "GGA_X_PBE"
+                ],
+                "scf_threshold_energy_change": 1.602176634e-25
+              },
+              "program_name": "VASP"
+            }
+          },
+          "properties": {
+            "available_properties": [
+              "dos_electronic",
+              "geometry_optimization"
+            ],
+            "n_calculations": 3,
+            "structures": {
+              "structure_primitive": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.521345083370319e-29,
+                "lattice_parameters": {
+                  "a": 4.5180468141447083e-10,
+                  "b": 4.5180468141447083e-10,
+                  "c": 4.5180468141447083e-10,
+                  "alpha": 1.0471975511965976,
+                  "beta": 1.0471975511965976,
+                  "gamma": 1.0471975511965976
+                }
+              },
+              "structure_conventional": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 16,
+                "cell_volume": 2.6085380333481e-28,
+                "lattice_parameters": {
+                  "a": 6.389483080000001e-10,
+                  "b": 6.389483080000001e-10,
+                  "c": 6.389483080000001e-10,
+                  "alpha": 1.5707963267948966,
+                  "beta": 1.5707963267948966,
+                  "gamma": 1.5707963267948966
+                }
+              },
+              "structure_original": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.521345083370319e-29,
+                "lattice_parameters": {
+                  "a": 4.518046814144708e-10,
+                  "b": 4.518046814144708e-10,
+                  "c": 4.518046814144708e-10,
+                  "alpha": 1.0471975511965979,
+                  "beta": 1.0471975511965979,
+                  "gamma": 1.0471975511965979
+                }
+              }
+            },
+            "electronic": {
+              "dos_electronic": {
+                "spin_polarized": true,
+                "band_gap": [
+                  {
+                    "index": 0
+                  },
+                  {
+                    "index": 1
+                  }
+                ]
+              }
+            },
+            "geometry_optimization": {
+              "structure_optimized": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.521345083370319e-29,
+                "lattice_parameters": {
+                  "a": 4.518046814144708e-10,
+                  "b": 4.518046814144708e-10,
+                  "c": 4.518046814144708e-10,
+                  "alpha": 1.0471975511965979,
+                  "beta": 1.0471975511965979,
+                  "gamma": 1.0471975511965979
+                }
+              },
+              "final_force_maximum": 0,
+              "final_energy_difference": 6.769196279335623e-24
+            }
+          }
+        },
+        "last_processing_time": "2022-01-03T08:58:01.070000",
+        "optimade": {
+          "nperiodic_dimensions": 3,
+          "species_at_sites": [
+            "Ca",
+            "Ir",
+            "Mo",
+            "V"
+          ],
+          "nsites": 4,
+          "elements": [
+            "Ca",
+            "Ir",
+            "Mo",
+            "V"
+          ],
+          "chemical_formula_anonymous": "ABCD",
+          "chemical_formula_reduced": "CaIrMoV",
+          "structure_features": [],
+          "nelements": 4,
+          "chemical_formula_descriptive": "CaIrMoV",
+          "chemical_formula_hill": "CaIrMoV",
+          "elements_ratios": [
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ]
+          ]
+        },
+        "parser_name": "parsers/vasp",
+        "calc_id": "1iMQzzQfeR8BdK3fA7TQw4y_6hIZ",
+        "published": true,
+        "writers": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "processed": true,
+        "mainfile": "nomad/fairdi/external/aflowlib/LIB4_LIB/AFLOWDATA_LIB4_LIB_Ca_svIrMo_pvV_sv_PAW_PBE_ABCD_cF16_216_c_d_b_a.ABCD/vasprun.xml.relax2.xz",
+        "main_author": {
+          "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+          "name": "Stefano Curtarolo"
+        },
+        "viewers": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "entry_create_time": "2020-02-07T08:28:37",
+        "with_embargo": false,
+        "external_db": "AFLOW",
+        "domain": "dft",
+        "comment": "",
+        "entry_id": "1iMQzzQfeR8BdK3fA7TQw4y_6hIZ",
+        "upload_name": "AFLOWLIB__200206154147395846",
+        "authors": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "license": "CC BY 4.0"
+      },
+      {
+        "upload_id": "ImjhfoPcRey-eoovFCQ9Og",
+        "references": [
+          "http://www.sciencedirect.com/science/article/pii/S0927025614003322",
+          "http://aflowlib.org",
+          "http://www.sciencedirect.com/science/article/pii/S0927025612000687"
+        ],
+        "origin": "AFLOW",
+        "datasets": [],
+        "n_quantities": 938,
+        "nomad_version": "1.0.0",
+        "upload_create_time": "2020-02-06T15:08:13.602000",
+        "nomad_commit": "37587aa6",
+        "publish_time": "2020-02-06T16:55:06.765000",
+        "processing_errors": [],
+        "results": {
+          "material": {
+            "symmetry": {
+              "bravais_lattice": "cF",
+              "space_group_symbol": "F-43m",
+              "prototype_aflow_id": "ABCD_cF16_216_c_d_b_a",
+              "prototype_formula": "AuLiMgSn",
+              "space_group_number": 216,
+              "point_group": "-43m",
+              "crystal_system": "cubic",
+              "hall_number": 512,
+              "hall_symbol": "F -4 2 3"
+            },
+            "elements": [
+              "Ca",
+              "Ir",
+              "Mo",
+              "V"
+            ],
+            "elements_exclusive": "Ca Ir Mo V",
+            "chemical_formula_anonymous": "ABCD",
+            "material_id": "NW_k8RSa8bbUspH4c_4SWi5oEDvk",
+            "structural_type": "bulk",
+            "chemical_formula_reduced": "CaIrMoV",
+            "n_elements": 4,
+            "chemical_formula_descriptive": "CaIrMoV",
+            "chemical_formula_reduced_fragments": [
+              "Ca",
+              "Ir",
+              "Mo",
+              "V"
+            ],
+            "chemical_formula_hill": "CaIrMoV"
+          },
+          "method": {
+            "method_name": "DFT",
+            "simulation": {
+              "program_version": "5.4.1 05Feb16 (build Jan 29 2019 17:37:47) complex parallel HPE-SGI-Intel",
+              "dft": {
+                "basis_set_type": "plane waves",
+                "core_electron_treatment": "pseudopotential",
+                "xc_functional_type": "GGA",
+                "xc_functional_names": [
+                  "GGA_C_PBE",
+                  "GGA_X_PBE"
+                ],
+                "scf_threshold_energy_change": 1.602176634e-25
+              },
+              "program_name": "VASP"
+            }
+          },
+          "properties": {
+            "available_properties": [
+              "dos_electronic",
+              "geometry_optimization"
+            ],
+            "n_calculations": 3,
+            "structures": {
+              "structure_primitive": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.594521219352661e-29,
+                "lattice_parameters": {
+                  "a": 4.53488302660476e-10,
+                  "b": 4.53488302660476e-10,
+                  "c": 4.53488302660476e-10,
+                  "alpha": 1.0471975511965979,
+                  "beta": 1.0471975511965979,
+                  "gamma": 1.0471975511965979
+                }
+              },
+              "structure_conventional": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 16,
+                "cell_volume": 2.637808487741037e-28,
+                "lattice_parameters": {
+                  "a": 6.41329308e-10,
+                  "b": 6.41329308e-10,
+                  "c": 6.41329308e-10,
+                  "alpha": 1.5707963267948966,
+                  "beta": 1.5707963267948966,
+                  "gamma": 1.5707963267948966
+                }
+              },
+              "structure_original": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.594521219352661e-29,
+                "lattice_parameters": {
+                  "a": 4.534883026604761e-10,
+                  "b": 4.534883026604761e-10,
+                  "c": 4.534883026604761e-10,
+                  "alpha": 1.0471975511965979,
+                  "beta": 1.0471975511965979,
+                  "gamma": 1.0471975511965979
+                }
+              }
+            },
+            "electronic": {
+              "dos_electronic": {
+                "spin_polarized": true,
+                "band_gap": [
+                  {
+                    "index": 0
+                  },
+                  {
+                    "index": 1
+                  }
+                ]
+              }
+            },
+            "geometry_optimization": {
+              "structure_optimized": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.594521219352661e-29,
+                "lattice_parameters": {
+                  "a": 4.53488302660476e-10,
+                  "b": 4.53488302660476e-10,
+                  "c": 4.53488302660476e-10,
+                  "alpha": 1.0471975511965979,
+                  "beta": 1.0471975511965979,
+                  "gamma": 1.0471975511965979
+                }
+              },
+              "final_force_maximum": 0,
+              "final_energy_difference": 1.0172219449506601e-23
+            }
+          }
+        },
+        "last_processing_time": "2021-12-27T01:36:19.157000",
+        "optimade": {
+          "nperiodic_dimensions": 3,
+          "species_at_sites": [
+            "Ca",
+            "Ir",
+            "Mo",
+            "V"
+          ],
+          "nsites": 4,
+          "elements": [
+            "Ca",
+            "Ir",
+            "Mo",
+            "V"
+          ],
+          "chemical_formula_anonymous": "ABCD",
+          "chemical_formula_reduced": "CaIrMoV",
+          "structure_features": [],
+          "nelements": 4,
+          "chemical_formula_descriptive": "CaIrMoV",
+          "chemical_formula_hill": "CaIrMoV",
+          "elements_ratios": [
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ]
+          ]
+        },
+        "parser_name": "parsers/vasp",
+        "calc_id": "fsRU-FefedFLcKKKwgisioqMpA8y",
+        "published": true,
+        "writers": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "processed": true,
+        "mainfile": "nomad/fairdi/external/aflowlib/LIB4_LIB/AFLOWDATA_LIB4_LIB_Ca_svIrMo_pvV_sv_PAW_PBE_ABCD_cF16_216_c_d_b_a.BCAD/vasprun.xml.relax2.xz",
+        "main_author": {
+          "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+          "name": "Stefano Curtarolo"
+        },
+        "viewers": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "entry_create_time": "2020-02-07T08:28:37",
+        "with_embargo": false,
+        "external_db": "AFLOW",
+        "domain": "dft",
+        "comment": "",
+        "entry_id": "fsRU-FefedFLcKKKwgisioqMpA8y",
+        "upload_name": "AFLOWLIB__200206153929935392",
+        "authors": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "license": "CC BY 4.0"
+      },
+      {
+        "upload_id": "ImjhfoPcRey-eoovFCQ9Og",
+        "references": [
+          "http://www.sciencedirect.com/science/article/pii/S0927025614003322",
+          "http://aflowlib.org",
+          "http://www.sciencedirect.com/science/article/pii/S0927025612000687"
+        ],
+        "origin": "AFLOW",
+        "datasets": [],
+        "n_quantities": 1400,
+        "nomad_version": "1.0.0",
+        "upload_create_time": "2020-02-06T15:08:13.602000",
+        "nomad_commit": "37587aa6",
+        "publish_time": "2020-02-06T16:55:06.765000",
+        "processing_errors": [],
+        "results": {
+          "material": {
+            "symmetry": {
+              "bravais_lattice": "cF",
+              "space_group_symbol": "F-43m",
+              "prototype_aflow_id": "ABCD_cF16_216_c_d_b_a",
+              "prototype_formula": "AuLiMgSn",
+              "space_group_number": 216,
+              "point_group": "-43m",
+              "crystal_system": "cubic",
+              "hall_number": 512,
+              "hall_symbol": "F -4 2 3"
+            },
+            "elements": [
+              "Ca",
+              "Ir",
+              "Mo",
+              "V"
+            ],
+            "elements_exclusive": "Ca Ir Mo V",
+            "chemical_formula_anonymous": "ABCD",
+            "material_id": "NW_k8RSa8bbUspH4c_4SWi5oEDvk",
+            "structural_type": "bulk",
+            "chemical_formula_reduced": "CaIrMoV",
+            "n_elements": 4,
+            "chemical_formula_descriptive": "CaIrMoV",
+            "chemical_formula_reduced_fragments": [
+              "Ca",
+              "Ir",
+              "Mo",
+              "V"
+            ],
+            "chemical_formula_hill": "CaIrMoV"
+          },
+          "method": {
+            "method_name": "DFT",
+            "simulation": {
+              "program_version": "5.4.1 05Feb16 (build Jan 29 2019 17:37:47) complex parallel HPE-SGI-Intel",
+              "dft": {
+                "basis_set_type": "plane waves",
+                "core_electron_treatment": "pseudopotential",
+                "xc_functional_type": "GGA",
+                "xc_functional_names": [
+                  "GGA_C_PBE",
+                  "GGA_X_PBE"
+                ],
+                "scf_threshold_energy_change": 1.602176634e-25
+              },
+              "program_name": "VASP"
+            }
+          },
+          "properties": {
+            "available_properties": [
+              "dos_electronic",
+              "geometry_optimization"
+            ],
+            "n_calculations": 5,
+            "structures": {
+              "structure_primitive": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.604076601521608e-29,
+                "lattice_parameters": {
+                  "a": 4.5370722999099913e-10,
+                  "b": 4.5370722999099913e-10,
+                  "c": 4.5370722999099913e-10,
+                  "alpha": 1.0471975511965979,
+                  "beta": 1.0471975511965979,
+                  "gamma": 1.0471975511965979
+                }
+              },
+              "structure_conventional": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 16,
+                "cell_volume": 2.641630640608653e-28,
+                "lattice_parameters": {
+                  "a": 6.41638918e-10,
+                  "b": 6.41638918e-10,
+                  "c": 6.41638918e-10,
+                  "alpha": 1.5707963267948966,
+                  "beta": 1.5707963267948966,
+                  "gamma": 1.5707963267948966
+                }
+              },
+              "structure_original": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.604076601521608e-29,
+                "lattice_parameters": {
+                  "a": 4.5370722999099913e-10,
+                  "b": 4.5370722999099913e-10,
+                  "c": 4.5370722999099913e-10,
+                  "alpha": 1.0471975511965979,
+                  "beta": 1.0471975511965979,
+                  "gamma": 1.0471975511965979
+                }
+              }
+            },
+            "electronic": {
+              "dos_electronic": {
+                "spin_polarized": true,
+                "band_gap": [
+                  {
+                    "index": 0
+                  },
+                  {
+                    "index": 1
+                  }
+                ]
+              }
+            },
+            "geometry_optimization": {
+              "structure_optimized": {
+                "nperiodic_dimensions": 3,
+                "n_sites": 4,
+                "cell_volume": 6.604076601521608e-29,
+                "lattice_parameters": {
+                  "a": 4.5370722999099913e-10,
+                  "b": 4.5370722999099913e-10,
+                  "c": 4.5370722999099913e-10,
+                  "alpha": 1.0471975511965979,
+                  "beta": 1.0471975511965979,
+                  "gamma": 1.0471975511965979
+                }
+              },
+              "final_force_maximum": 0,
+              "final_energy_difference": 1.9658707299105274e-23
+            }
+          }
+        },
+        "last_processing_time": "2021-12-27T01:36:02.272000",
+        "optimade": {
+          "nperiodic_dimensions": 3,
+          "species_at_sites": [
+            "Ca",
+            "Ir",
+            "Mo",
+            "V"
+          ],
+          "nsites": 4,
+          "elements": [
+            "Ca",
+            "Ir",
+            "Mo",
+            "V"
+          ],
+          "chemical_formula_anonymous": "ABCD",
+          "chemical_formula_reduced": "CaIrMoV",
+          "structure_features": [],
+          "nelements": 4,
+          "chemical_formula_descriptive": "CaIrMoV",
+          "chemical_formula_hill": "CaIrMoV",
+          "elements_ratios": [
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ],
+            [
+              {
+                "elements": "Ca",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Ir",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "Mo",
+                "elements_ratios": 0.25
+              },
+              {
+                "elements": "V",
+                "elements_ratios": 0.25
+              }
+            ]
+          ]
+        },
+        "parser_name": "parsers/vasp",
+        "calc_id": "f4blyDBwL7VqwZiqLRjoCIwaLTSZ",
+        "published": true,
+        "writers": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "processed": true,
+        "mainfile": "nomad/fairdi/external/aflowlib/LIB4_LIB/AFLOWDATA_LIB4_LIB_Ca_svIrMo_pvV_sv_PAW_PBE_ABCD_cF16_216_c_d_b_a.BCAD/vasprun.xml.relax1.xz",
+        "main_author": {
+          "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+          "name": "Stefano Curtarolo"
+        },
+        "viewers": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "entry_create_time": "2020-02-07T08:28:37",
+        "with_embargo": false,
+        "external_db": "AFLOW",
+        "domain": "dft",
+        "comment": "",
+        "entry_id": "f4blyDBwL7VqwZiqLRjoCIwaLTSZ",
+        "upload_name": "AFLOWLIB__200206153929935392",
+        "authors": [
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          },
+          {
+            "user_id": "f409d859-2639-4f82-b198-85e1c7c62f8b",
+            "name": "Kesong Yang"
+          },
+          {
+            "user_id": "580f7036-97b8-42b1-a9e6-815058bcac72",
+            "name": "Lance Nelson"
+          },
+          {
+            "user_id": "4c8d767d-335f-4ccd-9459-d0152b2026bc",
+            "name": "Gus Hart"
+          },
+          {
+            "user_id": "7effd16a-a65c-4d95-b692-652488d94146",
+            "name": "Stefano Sanvito"
+          },
+          {
+            "user_id": "d59b3610-6335-4ad8-aca0-24a905de3a25",
+            "name": "Natalio Mingo"
+          },
+          {
+            "user_id": "3df68fed-6ca0-4bf9-b2b1-d6be71e18f72",
+            "name": "Shidong Wang"
+          },
+          {
+            "user_id": "f7b540eb-a266-4379-9611-911ed8e3630e",
+            "name": "Wahyu Setyawan"
+          },
+          {
+            "user_id": "7b3fe468-0011-4ba8-bd53-1ee65acda114",
+            "name": "Marco Buongiorno Nardelli"
+          },
+          {
+            "user_id": "48e7a028-1a41-440d-9986-38540f5079c9",
+            "name": "Cormac Toher"
+          },
+          {
+            "user_id": "d63d07e6-ccc8-4eac-82af-d841627b6c53",
+            "name": "Ohad Levy"
+          },
+          {
+            "user_id": "9c308f66-eed1-4996-b33e-af78fb4944c7",
+            "name": "Richard Taylor"
+          },
+          {
+            "user_id": "d2621bc7-c45a-4d35-9dc1-5c05fa8326cb",
+            "name": "Frisco Rose"
+          },
+          {
+            "user_id": "ecba0e68-65ee-4b40-8fbf-a42714b1072b",
+            "name": "Junkai Xue"
+          },
+          {
+            "user_id": "81b96683-7170-49d7-8c4e-e9f34906b3ea",
+            "name": "Stefano Curtarolo"
+          }
+        ],
+        "license": "CC BY 4.0"
+      }
+    ]
+  }
\ No newline at end of file
diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
new file mode 100644
index 0000000..8dc5d9e
--- /dev/null
+++ b/api_writer/test_ui.py
@@ -0,0 +1,145 @@
+import gradio as gr
+import pandas as pd
+import os
+import json
+from opik import track, opik_context
+os.environ["OPIK_API_KEY"] = "DEwfV8SdhCNbnULybo5dLfcuk" 
+os.environ["OPIK_WORKSPACE"] = "pilar12"
+
+n=3
+def process_api_output(api_output: dict) -> pd.DataFrame:
+    """
+    Takes LLM output and returns a pandas DataFrame.
+    Replace with your actual processing function.
+    """
+    # Create a sample DataFrame
+    data=[]
+    for i in api_output['data']:
+        try:
+            data.append({
+            "Name": i["upload_name"],
+            # "Formula": i["results"]["material"]["chemical_formula_descriptive"],
+            # "Entry Type": i["entry_type"],
+            "Author": i["origin"]
+        })
+        except:
+            pass
+    # data = [
+    #     {
+    #         "Name": i["upload_name"],
+    #         # "Formula": i["results"]["material"]["chemical_formula_descriptive"],
+    #         # "Entry Type": i["entry_type"],
+    #         "Author": i["origin"]
+    #     }
+    #     for i in api_output['data']
+    # ]
+    return pd.DataFrame(data)
+
+track(capture_input=False, capture_output=False)
+def process_query(query):
+    llm_query = json.load(open("demo_api.json"))
+    api_response = json.load(open("demo_return.json"))
+    df = process_api_output(api_response)
+    r_llm_query = [llm_query for i in range(n)]
+    r_df = [df for i in range(n)]
+    return *r_llm_query, *r_llm_query, *r_df
+
+def user_fix_query(query):
+    api_response = json.load(open("demo_return.json"))
+    df = process_api_output(api_response)
+    return query + " Fixed", df
+
+def update_selection(selected_values):
+    # Take only the last selected value if multiple are selected
+    if len(selected_values) > 1:
+        return [selected_values[-1]]
+    return selected_values
+
+
+
+csvlogger = gr.CSVLogger()
+@track(project_name="NOMAD_Demo_test_ui",capture_input=False, capture_output=False)
+def log_data(*args):
+    output = {}
+    for i in range(n):
+        output[f'LLM Query {i+1}'] = args[i+1]
+        output[f'Fixed LLM Query {i+1}'] = args[i+n+1]
+    feedback_scores = [{'name':f"Rating {i}",'value': float(args[i+2*n+1][0]) if args[i+2*n+1]!= [] else 0} for i in range(n)]
+    preferred_query = int(args[-1][0]) if args[-1]!= [] else 0
+    feedback_scores.append({'name':'Preferred LLM Query', 'value': preferred_query})
+    input = {'query': args[0]}
+    if preferred_query != 0:
+        output[f'Preferred LLM Query ({preferred_query})'] = args[preferred_query+n+1]
+    opik_context.update_current_trace(input=input,
+                                      output=output,
+                                      feedback_scores=feedback_scores)
+    csvlogger.flag(args)
+
+@track(project_name="NOMAD_Demo_test_ui", capture_output=False)
+def log_data2(*args):
+    csvlogger.flag(args)
+with gr.Blocks() as demo:
+    gr.Markdown("# LLM Query Processor")
+    with gr.Accordion("Details"):
+        gr.Markdown("lorem ipsum")
+    with gr.Row():
+        query_input = gr.Textbox(label="Enter your query", placeholder="Type your question here...",interactive=True,submit_btn=True)
+
+    n=3    
+    output_text = []
+    hidden_text = []
+    output_dataframe = []
+    rating = []
+    with gr.Row():
+        for i in range(n):
+            with gr.Column():
+                output_text.append(gr.Textbox(label=f"LLM Generated query {i+1}", interactive=True, submit_btn=True))
+                hidden_text.append(gr.Textbox(label=f"Original LLM Generated query {i+1}", interactive=False, visible=False))
+                rating.append(gr.CheckboxGroup(["1", "2", "3", "4", "5"], label="Rating", info="Rate the query from 1 to 5"))
+        # with gr.Column():
+        #     # output_text = gr.Markdown(label="LLM Response",max_height=1000)
+        #     output_text_1 = gr.Textbox(label="LLM Generated query 1", interactive=True, submit_btn=True)
+
+        # with gr.Column():
+        #     output_text_2 = gr.Textbox(label="LLM Generated query 2", interactive=True, submit_btn=True)
+        # with gr.Column():
+        #     output_text_3 = gr.Textbox(label="LLM Generated query 3", interactive=True, submit_btn=True)
+    with gr.Row():
+        pft_checkbox = gr.CheckboxGroup([f'{i+1}' for i in range(n)], label="Best LLM query", info="Select the query that matches the NLU query the best.")
+    with gr.Row():
+        for i in range(n):
+            with gr.Column():
+                output_dataframe.append(gr.Dataframe(interactive=False, max_height=500))
+        # with gr.Column():
+        #     dataframe_output_1 = gr.Dataframe(interactive=False, max_height=500)
+        # with gr.Column():
+        #     dataframe_output_2 = gr.Dataframe(interactive=False, max_height=500)
+        #with gr.Column():
+        #    dataframe_output_3 = gr.Dataframe(interactive=False, max_height=500)
+    with gr.Row():
+        end_button = gr.Button("Submit")
+    with gr.Row():
+        clear_button = gr.ClearButton(components=[query_input, *hidden_text, *output_text, *rating, *output_dataframe, pft_checkbox],value="Clear")
+    csvlogger.setup([query_input, *hidden_text, *output_text, *rating, pft_checkbox], "out_dir")
+    query_input.submit(
+        fn=process_query,
+        inputs=query_input,
+        outputs=[*output_text, *hidden_text, *output_dataframe],
+    )
+
+    for i in range(n):
+        output_text[i].submit(
+            fn=user_fix_query,
+            inputs=output_text[i],
+            outputs=[output_text[i], output_dataframe[i]]
+        )
+    
+    for i in range(n):
+        rating[i].select(update_selection,rating[i],rating[i])
+    pft_checkbox.select(update_selection,pft_checkbox,pft_checkbox)
+    # end_button.click(lambda *args: csvlogger.flag(list(args)), [query_input, *output_text, *rating, pft_checkbox], None, preprocess=False)
+    end_button.click(log_data, [query_input, *hidden_text, *output_text, *rating, pft_checkbox], None, preprocess=False)
+    # clear_button.click(log_data, [query_input, *hidden_text, *output_text, *rating, pft_checkbox], None, preprocess=False)
+
+if __name__ == "__main__":
+    demo.launch(debug=True)
\ No newline at end of file
diff --git a/jupyterhub_test.ipynb b/jupyterhub_test.ipynb
new file mode 100644
index 0000000..6508fd8
--- /dev/null
+++ b/jupyterhub_test.ipynb
@@ -0,0 +1,305 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "80440c29-cf44-4b98-b5c3-3d93e9cd3854",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from test_ui import demo"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "53357a59-8198-40f9-862c-b14c863fcb40",
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Collecting gradio\n",
+      "  Downloading gradio-5.24.0-py3-none-any.whl.metadata (16 kB)\n",
+      "Collecting aiofiles<25.0,>=22.0 (from gradio)\n",
+      "  Downloading aiofiles-24.1.0-py3-none-any.whl.metadata (10 kB)\n",
+      "Requirement already satisfied: anyio<5.0,>=3.0 in /opt/conda/lib/python3.12/site-packages (from gradio) (4.6.2.post1)\n",
+      "Collecting fastapi<1.0,>=0.115.2 (from gradio)\n",
+      "  Downloading fastapi-0.115.12-py3-none-any.whl.metadata (27 kB)\n",
+      "Collecting ffmpy (from gradio)\n",
+      "  Downloading ffmpy-0.5.0-py3-none-any.whl.metadata (3.0 kB)\n",
+      "Collecting gradio-client==1.8.0 (from gradio)\n",
+      "  Downloading gradio_client-1.8.0-py3-none-any.whl.metadata (7.1 kB)\n",
+      "Collecting groovy~=0.1 (from gradio)\n",
+      "  Downloading groovy-0.1.2-py3-none-any.whl.metadata (6.1 kB)\n",
+      "Requirement already satisfied: httpx>=0.24.1 in /opt/conda/lib/python3.12/site-packages (from gradio) (0.27.2)\n",
+      "Requirement already satisfied: huggingface-hub>=0.28.1 in /opt/conda/lib/python3.12/site-packages (from gradio) (0.29.3)\n",
+      "Requirement already satisfied: jinja2<4.0 in /opt/conda/lib/python3.12/site-packages (from gradio) (3.1.4)\n",
+      "Requirement already satisfied: markupsafe<4.0,>=2.0 in /opt/conda/lib/python3.12/site-packages (from gradio) (3.0.2)\n",
+      "Requirement already satisfied: numpy<3.0,>=1.0 in /opt/conda/lib/python3.12/site-packages (from gradio) (1.26.4)\n",
+      "Requirement already satisfied: orjson~=3.0 in /opt/conda/lib/python3.12/site-packages (from gradio) (3.10.16)\n",
+      "Requirement already satisfied: packaging in /opt/conda/lib/python3.12/site-packages (from gradio) (24.1)\n",
+      "Requirement already satisfied: pandas<3.0,>=1.0 in /opt/conda/lib/python3.12/site-packages (from gradio) (2.2.3)\n",
+      "Requirement already satisfied: pillow<12.0,>=8.0 in /opt/conda/lib/python3.12/site-packages (from gradio) (11.1.0)\n",
+      "Requirement already satisfied: pydantic<2.12,>=2.0 in /opt/conda/lib/python3.12/site-packages (from gradio) (2.9.2)\n",
+      "Collecting pydub (from gradio)\n",
+      "  Downloading pydub-0.25.1-py2.py3-none-any.whl.metadata (1.4 kB)\n",
+      "Collecting python-multipart>=0.0.18 (from gradio)\n",
+      "  Downloading python_multipart-0.0.20-py3-none-any.whl.metadata (1.8 kB)\n",
+      "Requirement already satisfied: pyyaml<7.0,>=5.0 in /opt/conda/lib/python3.12/site-packages (from gradio) (6.0.2)\n",
+      "Collecting ruff>=0.9.3 (from gradio)\n",
+      "  Downloading ruff-0.11.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (25 kB)\n",
+      "Collecting safehttpx<0.2.0,>=0.1.6 (from gradio)\n",
+      "  Downloading safehttpx-0.1.6-py3-none-any.whl.metadata (4.2 kB)\n",
+      "Collecting semantic-version~=2.0 (from gradio)\n",
+      "  Downloading semantic_version-2.10.0-py2.py3-none-any.whl.metadata (9.7 kB)\n",
+      "Collecting starlette<1.0,>=0.40.0 (from gradio)\n",
+      "  Downloading starlette-0.46.1-py3-none-any.whl.metadata (6.2 kB)\n",
+      "Requirement already satisfied: tomlkit<0.14.0,>=0.12.0 in /opt/conda/lib/python3.12/site-packages (from gradio) (0.13.2)\n",
+      "Collecting typer<1.0,>=0.12 (from gradio)\n",
+      "  Downloading typer-0.15.2-py3-none-any.whl.metadata (15 kB)\n",
+      "Requirement already satisfied: typing-extensions~=4.0 in /opt/conda/lib/python3.12/site-packages (from gradio) (4.12.2)\n",
+      "Collecting uvicorn>=0.14.0 (from gradio)\n",
+      "  Downloading uvicorn-0.34.0-py3-none-any.whl.metadata (6.5 kB)\n",
+      "Requirement already satisfied: fsspec in /opt/conda/lib/python3.12/site-packages (from gradio-client==1.8.0->gradio) (2025.3.0)\n",
+      "Collecting websockets<16.0,>=10.0 (from gradio-client==1.8.0->gradio)\n",
+      "  Downloading websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.8 kB)\n",
+      "Requirement already satisfied: idna>=2.8 in /opt/conda/lib/python3.12/site-packages (from anyio<5.0,>=3.0->gradio) (3.10)\n",
+      "Requirement already satisfied: sniffio>=1.1 in /opt/conda/lib/python3.12/site-packages (from anyio<5.0,>=3.0->gradio) (1.3.1)\n",
+      "Requirement already satisfied: certifi in /opt/conda/lib/python3.12/site-packages (from httpx>=0.24.1->gradio) (2024.8.30)\n",
+      "Requirement already satisfied: httpcore==1.* in /opt/conda/lib/python3.12/site-packages (from httpx>=0.24.1->gradio) (1.0.6)\n",
+      "Requirement already satisfied: h11<0.15,>=0.13 in /opt/conda/lib/python3.12/site-packages (from httpcore==1.*->httpx>=0.24.1->gradio) (0.14.0)\n",
+      "Requirement already satisfied: filelock in /opt/conda/lib/python3.12/site-packages (from huggingface-hub>=0.28.1->gradio) (3.18.0)\n",
+      "Requirement already satisfied: requests in /opt/conda/lib/python3.12/site-packages (from huggingface-hub>=0.28.1->gradio) (2.32.3)\n",
+      "Requirement already satisfied: tqdm>=4.42.1 in /opt/conda/lib/python3.12/site-packages (from huggingface-hub>=0.28.1->gradio) (4.67.0)\n",
+      "Requirement already satisfied: python-dateutil>=2.8.2 in /opt/conda/lib/python3.12/site-packages (from pandas<3.0,>=1.0->gradio) (2.9.0)\n",
+      "Requirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.12/site-packages (from pandas<3.0,>=1.0->gradio) (2024.2)\n",
+      "Requirement already satisfied: tzdata>=2022.7 in /opt/conda/lib/python3.12/site-packages (from pandas<3.0,>=1.0->gradio) (2025.2)\n",
+      "Requirement already satisfied: annotated-types>=0.6.0 in /opt/conda/lib/python3.12/site-packages (from pydantic<2.12,>=2.0->gradio) (0.7.0)\n",
+      "Requirement already satisfied: pydantic-core==2.23.4 in /opt/conda/lib/python3.12/site-packages (from pydantic<2.12,>=2.0->gradio) (2.23.4)\n",
+      "Requirement already satisfied: click>=8.0.0 in /opt/conda/lib/python3.12/site-packages (from typer<1.0,>=0.12->gradio) (8.1.8)\n",
+      "Collecting shellingham>=1.3.0 (from typer<1.0,>=0.12->gradio)\n",
+      "  Downloading shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)\n",
+      "Collecting rich>=10.11.0 (from typer<1.0,>=0.12->gradio)\n",
+      "  Downloading rich-14.0.0-py3-none-any.whl.metadata (18 kB)\n",
+      "Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.12/site-packages (from python-dateutil>=2.8.2->pandas<3.0,>=1.0->gradio) (1.16.0)\n",
+      "Collecting markdown-it-py>=2.2.0 (from rich>=10.11.0->typer<1.0,>=0.12->gradio)\n",
+      "  Downloading markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)\n",
+      "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /opt/conda/lib/python3.12/site-packages (from rich>=10.11.0->typer<1.0,>=0.12->gradio) (2.18.0)\n",
+      "Requirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.12/site-packages (from requests->huggingface-hub>=0.28.1->gradio) (3.4.0)\n",
+      "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.12/site-packages (from requests->huggingface-hub>=0.28.1->gradio) (2.2.3)\n",
+      "Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer<1.0,>=0.12->gradio)\n",
+      "  Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n",
+      "Downloading gradio-5.24.0-py3-none-any.whl (46.9 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m46.9/46.9 MB\u001b[0m \u001b[31m103.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+      "\u001b[?25hDownloading gradio_client-1.8.0-py3-none-any.whl (322 kB)\n",
+      "Downloading aiofiles-24.1.0-py3-none-any.whl (15 kB)\n",
+      "Downloading fastapi-0.115.12-py3-none-any.whl (95 kB)\n",
+      "Downloading groovy-0.1.2-py3-none-any.whl (14 kB)\n",
+      "Downloading python_multipart-0.0.20-py3-none-any.whl (24 kB)\n",
+      "Downloading ruff-0.11.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.3 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m11.3/11.3 MB\u001b[0m \u001b[31m97.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "\u001b[?25hDownloading safehttpx-0.1.6-py3-none-any.whl (8.7 kB)\n",
+      "Downloading semantic_version-2.10.0-py2.py3-none-any.whl (15 kB)\n",
+      "Downloading starlette-0.46.1-py3-none-any.whl (71 kB)\n",
+      "Downloading typer-0.15.2-py3-none-any.whl (45 kB)\n",
+      "Downloading uvicorn-0.34.0-py3-none-any.whl (62 kB)\n",
+      "Downloading ffmpy-0.5.0-py3-none-any.whl (6.0 kB)\n",
+      "Downloading pydub-0.25.1-py2.py3-none-any.whl (32 kB)\n",
+      "Downloading rich-14.0.0-py3-none-any.whl (243 kB)\n",
+      "Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)\n",
+      "Downloading websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (182 kB)\n",
+      "Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n",
+      "Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n",
+      "Installing collected packages: pydub, websockets, uvicorn, shellingham, semantic-version, ruff, python-multipart, mdurl, groovy, ffmpy, aiofiles, starlette, markdown-it-py, safehttpx, rich, gradio-client, fastapi, typer, gradio\n",
+      "Successfully installed aiofiles-24.1.0 fastapi-0.115.12 ffmpy-0.5.0 gradio-5.24.0 gradio-client-1.8.0 groovy-0.1.2 markdown-it-py-3.0.0 mdurl-0.1.2 pydub-0.25.1 python-multipart-0.0.20 rich-14.0.0 ruff-0.11.4 safehttpx-0.1.6 semantic-version-2.10.0 shellingham-1.5.4 starlette-0.46.1 typer-0.15.2 uvicorn-0.34.0 websockets-15.0.1\n"
+     ]
+    }
+   ],
+   "source": [
+    "!pip install gradio\n",
+    "!pip install opik"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "8c081ed0-03b7-4a91-b487-4e5e3332db9b",
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Collecting opik\n",
+      "  Downloading opik-1.7.0-py3-none-any.whl.metadata (24 kB)\n",
+      "Collecting boto3-stubs>=1.34.110 (from boto3-stubs[bedrock-runtime]>=1.34.110->opik)\n",
+      "  Downloading boto3_stubs-1.37.30-py3-none-any.whl.metadata (149 kB)\n",
+      "Requirement already satisfied: click in /opt/conda/lib/python3.12/site-packages (from opik) (8.1.8)\n",
+      "Requirement already satisfied: httpx in /opt/conda/lib/python3.12/site-packages (from opik) (0.27.2)\n",
+      "Collecting levenshtein<1.0.0 (from opik)\n",
+      "  Downloading levenshtein-0.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.6 kB)\n",
+      "Collecting litellm (from opik)\n",
+      "  Downloading litellm-1.65.4.post1.tar.gz (6.7 MB)\n",
+      "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.7/6.7 MB\u001b[0m \u001b[31m69.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "\u001b[?25h  Installing build dependencies ... \u001b[?25ldone\n",
+      "\u001b[?25h  Getting requirements to build wheel ... \u001b[?25ldone\n",
+      "\u001b[?25h  Preparing metadata (pyproject.toml) ... \u001b[?25ldone\n",
+      "\u001b[?25hCollecting openai<2.0.0 (from opik)\n",
+      "  Downloading openai-1.72.0-py3-none-any.whl.metadata (25 kB)\n",
+      "Requirement already satisfied: pydantic-settings<3.0.0,>=2.0.0 in /opt/conda/lib/python3.12/site-packages (from opik) (2.8.1)\n",
+      "Requirement already satisfied: pydantic<3.0.0,>=2.0.0 in /opt/conda/lib/python3.12/site-packages (from opik) (2.9.2)\n",
+      "Requirement already satisfied: pytest in /opt/conda/lib/python3.12/site-packages (from opik) (8.3.5)\n",
+      "Requirement already satisfied: rich in /opt/conda/lib/python3.12/site-packages (from opik) (14.0.0)\n",
+      "Requirement already satisfied: sentry_sdk>=2.0.0 in /opt/conda/lib/python3.12/site-packages (from opik) (2.24.1)\n",
+      "Collecting tenacity (from opik)\n",
+      "  Downloading tenacity-9.1.2-py3-none-any.whl.metadata (1.2 kB)\n",
+      "Requirement already satisfied: tqdm in /opt/conda/lib/python3.12/site-packages (from opik) (4.67.0)\n",
+      "Collecting uuid6 (from opik)\n",
+      "  Downloading uuid6-2024.7.10-py3-none-any.whl.metadata (8.6 kB)\n",
+      "Requirement already satisfied: jinja2 in /opt/conda/lib/python3.12/site-packages (from opik) (3.1.4)\n",
+      "Collecting botocore-stubs (from boto3-stubs>=1.34.110->boto3-stubs[bedrock-runtime]>=1.34.110->opik)\n",
+      "  Downloading botocore_stubs-1.37.29-py3-none-any.whl.metadata (4.7 kB)\n",
+      "Collecting types-s3transfer (from boto3-stubs>=1.34.110->boto3-stubs[bedrock-runtime]>=1.34.110->opik)\n",
+      "  Downloading types_s3transfer-0.11.4-py3-none-any.whl.metadata (5.0 kB)\n",
+      "Collecting mypy-boto3-bedrock-runtime<1.38.0,>=1.37.0 (from boto3-stubs[bedrock-runtime]>=1.34.110->opik)\n",
+      "  Downloading mypy_boto3_bedrock_runtime-1.37.30-py3-none-any.whl.metadata (15 kB)\n",
+      "Collecting rapidfuzz<4.0.0,>=3.9.0 (from levenshtein<1.0.0->opik)\n",
+      "  Downloading rapidfuzz-3.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (12 kB)\n",
+      "Requirement already satisfied: anyio<5,>=3.5.0 in /opt/conda/lib/python3.12/site-packages (from openai<2.0.0->opik) (4.6.2.post1)\n",
+      "Requirement already satisfied: distro<2,>=1.7.0 in /opt/conda/lib/python3.12/site-packages (from openai<2.0.0->opik) (1.9.0)\n",
+      "Collecting jiter<1,>=0.4.0 (from openai<2.0.0->opik)\n",
+      "  Downloading jiter-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.2 kB)\n",
+      "Requirement already satisfied: sniffio in /opt/conda/lib/python3.12/site-packages (from openai<2.0.0->opik) (1.3.1)\n",
+      "Requirement already satisfied: typing-extensions<5,>=4.11 in /opt/conda/lib/python3.12/site-packages (from openai<2.0.0->opik) (4.12.2)\n",
+      "Requirement already satisfied: certifi in /opt/conda/lib/python3.12/site-packages (from httpx->opik) (2024.8.30)\n",
+      "Requirement already satisfied: httpcore==1.* in /opt/conda/lib/python3.12/site-packages (from httpx->opik) (1.0.6)\n",
+      "Requirement already satisfied: idna in /opt/conda/lib/python3.12/site-packages (from httpx->opik) (3.10)\n",
+      "Requirement already satisfied: h11<0.15,>=0.13 in /opt/conda/lib/python3.12/site-packages (from httpcore==1.*->httpx->opik) (0.14.0)\n",
+      "Requirement already satisfied: annotated-types>=0.6.0 in /opt/conda/lib/python3.12/site-packages (from pydantic<3.0.0,>=2.0.0->opik) (0.7.0)\n",
+      "Requirement already satisfied: pydantic-core==2.23.4 in /opt/conda/lib/python3.12/site-packages (from pydantic<3.0.0,>=2.0.0->opik) (2.23.4)\n",
+      "Requirement already satisfied: python-dotenv>=0.21.0 in /opt/conda/lib/python3.12/site-packages (from pydantic-settings<3.0.0,>=2.0.0->opik) (1.1.0)\n",
+      "Requirement already satisfied: urllib3>=1.26.11 in /opt/conda/lib/python3.12/site-packages (from sentry_sdk>=2.0.0->opik) (2.2.3)\n",
+      "Requirement already satisfied: MarkupSafe>=2.0 in /opt/conda/lib/python3.12/site-packages (from jinja2->opik) (3.0.2)\n",
+      "Requirement already satisfied: aiohttp in /opt/conda/lib/python3.12/site-packages (from litellm->opik) (3.11.14)\n",
+      "Requirement already satisfied: importlib-metadata>=6.8.0 in /opt/conda/lib/python3.12/site-packages (from litellm->opik) (8.5.0)\n",
+      "Requirement already satisfied: jsonschema<5.0.0,>=4.22.0 in /opt/conda/lib/python3.12/site-packages (from litellm->opik) (4.23.0)\n",
+      "Collecting tiktoken>=0.7.0 (from litellm->opik)\n",
+      "  Downloading tiktoken-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.7 kB)\n",
+      "Collecting tokenizers (from litellm->opik)\n",
+      "  Downloading tokenizers-0.21.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.8 kB)\n",
+      "Requirement already satisfied: iniconfig in /opt/conda/lib/python3.12/site-packages (from pytest->opik) (2.1.0)\n",
+      "Requirement already satisfied: packaging in /opt/conda/lib/python3.12/site-packages (from pytest->opik) (24.1)\n",
+      "Requirement already satisfied: pluggy<2,>=1.5 in /opt/conda/lib/python3.12/site-packages (from pytest->opik) (1.5.0)\n",
+      "Requirement already satisfied: markdown-it-py>=2.2.0 in /opt/conda/lib/python3.12/site-packages (from rich->opik) (3.0.0)\n",
+      "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /opt/conda/lib/python3.12/site-packages (from rich->opik) (2.18.0)\n",
+      "Requirement already satisfied: zipp>=3.20 in /opt/conda/lib/python3.12/site-packages (from importlib-metadata>=6.8.0->litellm->opik) (3.21.0)\n",
+      "Requirement already satisfied: attrs>=22.2.0 in /opt/conda/lib/python3.12/site-packages (from jsonschema<5.0.0,>=4.22.0->litellm->opik) (24.2.0)\n",
+      "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /opt/conda/lib/python3.12/site-packages (from jsonschema<5.0.0,>=4.22.0->litellm->opik) (2024.10.1)\n",
+      "Requirement already satisfied: referencing>=0.28.4 in /opt/conda/lib/python3.12/site-packages (from jsonschema<5.0.0,>=4.22.0->litellm->opik) (0.35.1)\n",
+      "Requirement already satisfied: rpds-py>=0.7.1 in /opt/conda/lib/python3.12/site-packages (from jsonschema<5.0.0,>=4.22.0->litellm->opik) (0.21.0)\n",
+      "Requirement already satisfied: mdurl~=0.1 in /opt/conda/lib/python3.12/site-packages (from markdown-it-py>=2.2.0->rich->opik) (0.1.2)\n",
+      "Collecting regex>=2022.1.18 (from tiktoken>=0.7.0->litellm->opik)\n",
+      "  Downloading regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (40 kB)\n",
+      "Requirement already satisfied: requests>=2.26.0 in /opt/conda/lib/python3.12/site-packages (from tiktoken>=0.7.0->litellm->opik) (2.32.3)\n",
+      "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /opt/conda/lib/python3.12/site-packages (from aiohttp->litellm->opik) (2.6.1)\n",
+      "Requirement already satisfied: aiosignal>=1.1.2 in /opt/conda/lib/python3.12/site-packages (from aiohttp->litellm->opik) (1.3.2)\n",
+      "Requirement already satisfied: frozenlist>=1.1.1 in /opt/conda/lib/python3.12/site-packages (from aiohttp->litellm->opik) (1.5.0)\n",
+      "Requirement already satisfied: multidict<7.0,>=4.5 in /opt/conda/lib/python3.12/site-packages (from aiohttp->litellm->opik) (6.2.0)\n",
+      "Requirement already satisfied: propcache>=0.2.0 in /opt/conda/lib/python3.12/site-packages (from aiohttp->litellm->opik) (0.3.1)\n",
+      "Requirement already satisfied: yarl<2.0,>=1.17.0 in /opt/conda/lib/python3.12/site-packages (from aiohttp->litellm->opik) (1.18.3)\n",
+      "Collecting types-awscrt (from botocore-stubs->boto3-stubs>=1.34.110->boto3-stubs[bedrock-runtime]>=1.34.110->opik)\n",
+      "  Downloading types_awscrt-0.25.7-py3-none-any.whl.metadata (4.9 kB)\n",
+      "Requirement already satisfied: huggingface-hub<1.0,>=0.16.4 in /opt/conda/lib/python3.12/site-packages (from tokenizers->litellm->opik) (0.29.3)\n",
+      "Requirement already satisfied: filelock in /opt/conda/lib/python3.12/site-packages (from huggingface-hub<1.0,>=0.16.4->tokenizers->litellm->opik) (3.18.0)\n",
+      "Requirement already satisfied: fsspec>=2023.5.0 in /opt/conda/lib/python3.12/site-packages (from huggingface-hub<1.0,>=0.16.4->tokenizers->litellm->opik) (2025.3.0)\n",
+      "Requirement already satisfied: pyyaml>=5.1 in /opt/conda/lib/python3.12/site-packages (from huggingface-hub<1.0,>=0.16.4->tokenizers->litellm->opik) (6.0.2)\n",
+      "Requirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.12/site-packages (from requests>=2.26.0->tiktoken>=0.7.0->litellm->opik) (3.4.0)\n",
+      "Downloading opik-1.7.0-py3-none-any.whl (455 kB)\n",
+      "Downloading boto3_stubs-1.37.30-py3-none-any.whl (68 kB)\n",
+      "Downloading levenshtein-0.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (159 kB)\n",
+      "Downloading openai-1.72.0-py3-none-any.whl (643 kB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m643.9/643.9 kB\u001b[0m \u001b[31m3.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "\u001b[?25hDownloading tenacity-9.1.2-py3-none-any.whl (28 kB)\n",
+      "Downloading uuid6-2024.7.10-py3-none-any.whl (6.4 kB)\n",
+      "Downloading jiter-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (351 kB)\n",
+      "Downloading mypy_boto3_bedrock_runtime-1.37.30-py3-none-any.whl (31 kB)\n",
+      "Downloading rapidfuzz-3.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.1/3.1 MB\u001b[0m \u001b[31m65.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "\u001b[?25hDownloading tiktoken-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.2/1.2 MB\u001b[0m \u001b[31m24.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "\u001b[?25hDownloading botocore_stubs-1.37.29-py3-none-any.whl (65 kB)\n",
+      "Downloading tokenizers-0.21.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.0/3.0 MB\u001b[0m \u001b[31m88.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "\u001b[?25hDownloading types_s3transfer-0.11.4-py3-none-any.whl (19 kB)\n",
+      "Downloading regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (796 kB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m796.9/796.9 kB\u001b[0m \u001b[31m16.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "\u001b[?25hDownloading types_awscrt-0.25.7-py3-none-any.whl (19 kB)\n",
+      "Building wheels for collected packages: litellm\n",
+      "  Building wheel for litellm (pyproject.toml) ... \u001b[?25ldone\n",
+      "\u001b[?25h  Created wheel for litellm: filename=litellm-1.65.4.post1-py3-none-any.whl size=7076116 sha256=e7119b661a42760df647ffc8364ff1d8d57236bfa59b59526e88f6a472e90b8f\n",
+      "  Stored in directory: /home/jovyan/.cache/pip/wheels/cc/8b/33/b810bb0a1b4f5db5563396062e0b45e426619a6f294c3534f6\n",
+      "Successfully built litellm\n",
+      "Installing collected packages: uuid6, types-s3transfer, types-awscrt, tenacity, regex, rapidfuzz, mypy-boto3-bedrock-runtime, jiter, tiktoken, levenshtein, botocore-stubs, tokenizers, openai, boto3-stubs, litellm, opik\n",
+      "Successfully installed boto3-stubs-1.37.30 botocore-stubs-1.37.29 jiter-0.9.0 levenshtein-0.27.1 litellm-1.65.4.post1 mypy-boto3-bedrock-runtime-1.37.30 openai-1.72.0 opik-1.7.0 rapidfuzz-3.13.0 regex-2024.11.6 tenacity-9.1.2 tiktoken-0.9.0 tokenizers-0.21.1 types-awscrt-0.25.7 types-s3transfer-0.11.4 uuid6-2024.7.10\n"
+     ]
+    }
+   ],
+   "source": [
+    "!pip install opik"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "12d620e0-0466-4fc6-b030-6fe7769446ca",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "* Running on local URL:  http://127.0.0.1:7860\n"
+     ]
+    }
+   ],
+   "source": [
+    "demo.launch(debug=True,share=True)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "54ff0145-6e2c-4edc-9e7e-6e7845b2124a",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.12.7"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..85fe82e
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,4 @@
+vllm==0.8.3
+bitsandbytes>=0.45.3
+gradio==5.24.0
+opik==1.7.0
diff --git a/vllm.ipynb b/vllm.ipynb
new file mode 100644
index 0000000..95c250a
--- /dev/null
+++ b/vllm.ipynb
@@ -0,0 +1,834 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "0ad22fdf-4092-4097-b478-3c993213c152",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "INFO 04-07 13:24:32 __init__.py:190] Automatically detected platform cuda.\n"
+     ]
+    }
+   ],
+   "source": [
+    "import vllm\n",
+    "import pickle\n",
+    "import torch\n",
+    "import time"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "d69e341c-d700-47dc-a5c1-b6f11a58de0b",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def load_templates(model_path):\n",
+    "    with open(model_path+\"/system_prompt.txt\", \"r\") as f:\n",
+    "        system_prompt = f.read()\n",
+    "    with open(model_path+\"/chat_template.txt\", \"r\") as f:\n",
+    "        chat_template = f.read()\n",
+    "    with open(model_path+\"/eval_chat_template.txt\", \"r\") as f:\n",
+    "        eval_chat_template = f.read()\n",
+    "    with open(model_path+\"/full_context.pkl\", \"rb\") as f:\n",
+    "        full_context = pickle.load(f)\n",
+    "    system_context=system_prompt.format(context=full_context)\n",
+    "\n",
+    "    return system_prompt, chat_template, eval_chat_template, full_context, system_context"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "4a7689d5-7f30-41ba-8746-665056900df7",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "lora_path=\"huggingface/hub/models--pilar12--nomad-api-writer-lora/snapshots/4cf37226134cf2256c89a20cfb782bdb7d42d9d0\"\n",
+    "system_prompt, chat_template, eval_chat_template, full_context, system_context = load_templates(lora_path)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "id": "07f38d9a-bbd2-4c76-997c-1858d82fce88",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "GPU = NVIDIA L40S. Max memory = 44.422 GB.\n",
+      "0.0 GB of memory reserved.\n"
+     ]
+    }
+   ],
+   "source": [
+    "gpu_stats = torch.cuda.get_device_properties(0)\n",
+    "start_gpu_memory = round(torch.cuda.max_memory_reserved() / 1024 / 1024 / 1024, 3)\n",
+    "max_memory = round(gpu_stats.total_memory / 1024 / 1024 / 1024, 3)\n",
+    "print(f\"GPU = {gpu_stats.name}. Max memory = {max_memory} GB.\")\n",
+    "print(f\"{start_gpu_memory} GB of memory reserved.\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "id": "e157cdd4-1320-497a-b48e-426d1582a281",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "INFO 04-07 13:24:48 config.py:542] This model supports multiple tasks: {'embed', 'reward', 'generate', 'score', 'classify'}. Defaulting to 'generate'.\n",
+      "WARNING 04-07 13:24:50 config.py:621] bitsandbytes quantization is not fully optimized yet. The speed can be slower than non-quantized models.\n",
+      "WARNING 04-07 13:24:50 arg_utils.py:1145] The model has a long context length (131072). This may cause OOM errors during the initial memory profiling phase, or result in low performance due to small KV cache space. Consider setting --max-model-len to a smaller value.\n",
+      "WARNING 04-07 13:24:50 config.py:2155] bitsandbytes quantization is not tested with LoRA yet.\n",
+      "INFO 04-07 13:24:50 llm_engine.py:234] Initializing a V0 LLM engine (v0.7.2) with config: model='unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit', speculative_config=None, tokenizer='unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, override_neuron_config=None, tokenizer_revision=None, trust_remote_code=True, dtype=torch.bfloat16, max_seq_len=131072, download_dir=None, load_format=LoadFormat.BITSANDBYTES, tensor_parallel_size=1, pipeline_parallel_size=1, disable_custom_all_reduce=False, quantization=bitsandbytes, enforce_eager=False, kv_cache_dtype=auto,  device_config=cuda, decoding_config=DecodingConfig(guided_decoding_backend='xgrammar'), observability_config=ObservabilityConfig(otlp_traces_endpoint=None, collect_model_forward_time=False, collect_model_execute_time=False), seed=0, served_model_name=unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit, num_scheduler_steps=1, multi_step_stream_outputs=True, enable_prefix_caching=True, chunked_prefill_enabled=False, use_async_output_proc=True, disable_mm_preprocessor_cache=False, mm_processor_kwargs=None, pooler_config=None, compilation_config={\"splitting_ops\":[],\"compile_sizes\":[],\"cudagraph_capture_sizes\":[256,248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,4,2,1],\"max_capture_size\":256}, use_cached_outputs=False, \n",
+      "INFO 04-07 13:24:51 cuda.py:230] Using Flash Attention backend.\n",
+      "INFO 04-07 13:24:51 model_runner.py:1110] Starting to load model unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit...\n",
+      "INFO 04-07 13:24:52 loader.py:1102] Loading weights with BitsAndBytes quantization.  May take a while ...\n",
+      "INFO 04-07 13:24:53 weight_utils.py:252] Using model weights format ['*.safetensors']\n"
+     ]
+    },
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "3d048c49170f45ce9a5ebb5997f5718c",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "Loading safetensors checkpoint shards:   0% Completed | 0/1 [00:00<?, ?it/s]\n"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "e24533100ec4480d9eb366cd6842faee",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "Loading safetensors checkpoint shards:   0% Completed | 0/1 [00:00<?, ?it/s]\n"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "INFO 04-07 13:25:02 model_runner.py:1115] Loading model weights took 5.3463 GB\n",
+      "INFO 04-07 13:25:02 punica_selector.py:18] Using PunicaWrapperGPU.\n",
+      "INFO 04-07 13:25:18 worker.py:267] Memory profiling takes 16.25 seconds\n",
+      "INFO 04-07 13:25:18 worker.py:267] the current vLLM instance can use total_gpu_memory (44.42GiB) x gpu_memory_utilization (0.90) = 39.98GiB\n",
+      "INFO 04-07 13:25:18 worker.py:267] model weights take 5.35GiB; non_torch_memory takes 0.08GiB; PyTorch activation peak memory takes 13.62GiB; the rest of the memory reserved for KV Cache is 20.93GiB.\n",
+      "INFO 04-07 13:25:18 executor_base.py:110] # CUDA blocks: 10716, # CPU blocks: 2048\n",
+      "INFO 04-07 13:25:18 executor_base.py:115] Maximum concurrency for 131072 tokens per request: 1.31x\n",
+      "INFO 04-07 13:25:20 model_runner.py:1434] Capturing cudagraphs for decoding. This may lead to unexpected consequences if the model is not static. To run the model in eager mode, set 'enforce_eager=True' or use '--enforce-eager' in the CLI. If out-of-memory error occurs during cudagraph capture, consider decreasing `gpu_memory_utilization` or switching to eager mode. You can also reduce the `max_num_seqs` as needed to decrease memory usage.\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "Capturing CUDA graph shapes: 100%|██████████| 35/35 [00:18<00:00,  1.92it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "INFO 04-07 13:25:39 model_runner.py:1562] Graph capturing finished in 18 secs, took 0.83 GiB\n",
+      "INFO 04-07 13:25:39 llm_engine.py:431] init engine (profile, create kv cache, warmup model) took 36.89 seconds\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "GPU = NVIDIA L40S. Max memory = 44.422 GB.\n",
+      "27.01 GB of memory reserved.\n"
+     ]
+    }
+   ],
+   "source": [
+    "from vllm import LLM, SamplingParams\n",
+    "from vllm.lora.request import LoRARequest\n",
+    "import torch# unsloth/tinyllama-bnb-4bit is a pre-quantized checkpoint.\n",
+    "model_id = \"unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit\" #\"unsloth/tinyllama-bnb-4bit\"#\n",
+    "llm = LLM(model=model_id, dtype=torch.bfloat16, trust_remote_code=True, quantization=\"bitsandbytes\",load_format=\"bitsandbytes\",enable_lora=True,enable_prefix_caching=True,max_lora_rank=64)\n",
+    "gpu_stats = torch.cuda.get_device_properties(0)\n",
+    "start_gpu_memory = round(torch.cuda.max_memory_reserved() / 1024 / 1024 / 1024, 3)\n",
+    "max_memory = round(gpu_stats.total_memory / 1024 / 1024 / 1024, 3)\n",
+    "print(f\"GPU = {gpu_stats.name}. Max memory = {max_memory} GB.\")\n",
+    "print(f\"{start_gpu_memory} GB of memory reserved.\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "id": "eae926b7-c5af-4f14-ab05-461fb6d18032",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def get_generation_time(llm, sampling_params, prompts,lora_request):\n",
+    "    # time the generation\n",
+    "    start_time = time.time()\n",
+    "    outputs = llm.generate(\n",
+    "    prompts,\n",
+    "    sampling_params,\n",
+    "    lora_request=lora_request)\n",
+    "    end_time = time.time()\n",
+    "    # print the output and generation time\n",
+    "    for output in outputs:\n",
+    "        for o in output.outputs:\n",
+    "            print(f\"Output: {o.text}\")\n",
+    "    print(f\"Generation time: {end_time - start_time} seconds.\")\n",
+    "    return outputs"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "id": "98e73835-5979-4403-b84b-cee38d469b8d",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "lora_path=\"work/ai-copiltot-ft/models/unsloth_Meta-Llama-3.1-8B-Instruct-bnb-4bit/version_27/lora_model/\""
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "id": "5eefb8f4-8495-4134-8144-64ae7023d4a7",
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [],
+   "source": [
+    "q='Search the NOMAD database for materials that belong to the triclinic crystal system, contain the elements phosphorus (P), oxygen (O), and sulfur (S), have been studied using Density Functional Theory (DFT), and exhibit spin-polarized electronic density of states (DOS).'\n",
+    "q='Retrieve entries of aluminum nitride in a wurtzite structure.'\n",
+    "queries = [eval_chat_template.format(SYSTEM=system_context, INPUT=q),eval_chat_template.format(SYSTEM=system_context, INPUT=q)]\n",
+    "sampling_params = [SamplingParams(\n",
+    "    n=1,\n",
+    "    temperature=0,\n",
+    "    max_tokens=2048,\n",
+    "    # top_k=10,\n",
+    "    # top_p=0.,\n",
+    "    # presence_penalty=1,\n",
+    "    # repetition_penalty=0,\n",
+    "    # frequency_penalty=0,\n",
+    "    seed=42,\n",
+    "    stop=[\"<|end_of_text|>\"],\n",
+    "),SamplingParams(\n",
+    "    n=2,\n",
+    "    temperature=1.0,\n",
+    "    max_tokens=2048,\n",
+    "    top_k=10,\n",
+    "    # top_p=0.,\n",
+    "    # presence_penalty=1,\n",
+    "    # repetition_penalty=0,\n",
+    "    # frequency_penalty=0,\n",
+    "    seed=42,\n",
+    "    stop=[\"<|end_of_text|>\"],\n",
+    ")]\n",
+    "\n",
+    "lora_request=LoRARequest(\"api_lora\", 1, lora_path)\n",
+    "        \n",
+    "# o=get_generation_time(llm,sampling_params,queries,lora_request)\n",
+    "# outputs = llm.generate(\n",
+    "#     queries,\n",
+    "#     sampling_params,\n",
+    "#     lora_request=LoRARequest(\"api_lora\", 1, lora_path)\n",
+    "# )"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "id": "7684c9a5-ac63-482a-b995-c7d0a11610b3",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "Processed prompts:  67%|██████▋   | 2/3 [00:13<00:06,  6.89s/it, est. speed input: 2848.23 toks/s, output: 14.29 toks/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Output: \n",
+      "\n",
+      "''' JSON: {\n",
+      "    \"and\": [\n",
+      "        {\n",
+      "            \"results.material.elements\": {\n",
+      "                \"all\": [\n",
+      "                    \"Al\",\n",
+      "                    \"N\"\n",
+      "                ]\n",
+      "            },\n",
+      "            \"results.material.symmetry.structure_name\": {\n",
+      "                \"any\": [\n",
+      "                    \"wurtzite\"\n",
+      "                ]\n",
+      "            }\n",
+      "        }\n",
+      "    ]\n",
+      "}''' \n",
+      "Output: \n",
+      "\n",
+      "''' JSON: {\n",
+      "    \"and\": [\n",
+      "        {\n",
+      "            \"results.material.composition\": {\n",
+      "                \"all\": [\n",
+      "                    \"AlN\"\n",
+      "                ]\n",
+      "            },\n",
+      "            \"results.material.symmetry.structure_name\": {\n",
+      "                \"any\": [\n",
+      "                    \"wurtzite\"\n",
+      "                ]\n",
+      "            }\n",
+      "        }\n",
+      "    ]\n",
+      "}''' \n",
+      "Output: \n",
+      "\n",
+      "''' JSON: {\n",
+      "    \"results.material.elements\": {\n",
+      "        \"all\": [\n",
+      "            \"Al\",\n",
+      "            \"N\"\n",
+      "        ]\n",
+      "    },\n",
+      "    \"results.material.symmetry.structure_name\": {\n",
+      "        \"any\": [\n",
+      "            \"wurtzite\"\n",
+      "        ]\n",
+      "    }\n",
+      "}''' \n",
+      "Generation time: 14.315262794494629 seconds.\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "o=get_generation_time(llm,sampling_params,queries,lora_request)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "id": "730a95cc-3ceb-45cf-bb23-fd08498ec6e8",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "Processed prompts:  67%|██████▋   | 2/3 [00:04<00:02,  2.41s/it, est. speed input: 8145.50 toks/s, output: 47.31 toks/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Output: \n",
+      "\n",
+      "''' JSON: {\n",
+      "    \"and\": [\n",
+      "        {\n",
+      "            \"results.material.topology.cell.atomic_density\": {\n",
+      "                \"gt\": null,\n",
+      "                \"gte\": null,\n",
+      "                \"lt\": null,\n",
+      "                \"lte\": \"value_0\"\n",
+      "            }\n",
+      "        }\n",
+      "    ]\n",
+      "}''' \n",
+      "\n",
+      "results.material.topology.cell.atomic_density:value_0:0.06111:e-26 / meter ** 3\n",
+      "Output: \n",
+      "\n",
+      "''' JSON: {\n",
+      "    \"results.material.topology.cell.atomic_density\": {\n",
+      "        \"gt\": null,\n",
+      "        \"gte\": null,\n",
+      "        \"lt\": null,\n",
+      "        \"lte\": \"value_0\"\n",
+      "    }\n",
+      "}''' \n",
+      "\n",
+      "results.material.topology.cell.atomic_density:value_0:0.06111:e-28:angstrom **-3\n",
+      "Output: \n",
+      "\n",
+      "''' JSON: {\n",
+      "    \"results.material.topology.cell.atomic_density\": {\n",
+      "        \"gt\": null,\n",
+      "        \"gte\": 0.06111,\n",
+      "        \"lt\": null,\n",
+      "        \"lte\": null\n",
+      "    }\n",
+      "}''' \n",
+      "\n",
+      "results.material.topology.cell.atomic_density:value_0:0.06111:ångström ** 3\n",
+      "Generation time: 4.8828887939453125 seconds.\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "q='materials with primitive atomic density equal top 0.06111 Å^-3'\n",
+    "queries = [eval_chat_template.format(SYSTEM=system_context, INPUT=q),eval_chat_template.format(SYSTEM=system_context, INPUT=q)]\n",
+    "o=get_generation_time(llm,sampling_params,queries,lora_request)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "id": "ac257093-56f3-4de6-bb1e-a6f86ba66b95",
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[RequestOutput(request_id=0, prompt='<|begin_of_text|><|start_header_id|>system<|end_header_id|>\\n\\nYou are an assistant helping users search NOMAD a Materials science database. You have chemistry and materials science knowledge. Your task is to create a search api for natural language search queries by users. \\nYou are given the relevant search fields and their descriptions as name : description : the data type or the list of enum  values for the field : optional unit of the value.\\nIf the data type is \"None\" the field can only be used in the \"quantities\" field to check its existence. Do not use it as a search field.\\nDont format it into ES DSL format (dont use bool, must, terms) instead use the NOMAD API format. \\nOnly give the json formatted query no explanation is needed.\\nTime is formatted as Unix Timestamp. \\nUse these ops to format the query:\\n    all: Requires all values in list to match\\n    any: Matches if any value in list matches (default)\\n    none: Requires none of the values to match\\n    lte, lt, gte, gt: Range comparisons for numeric fields     \\nDont use \"all\" as the first field.\\nConvert units where the field has a specified unit.\\nUse \"results.material.topology.label\": \"MOF\" for metal organic framework queries\\n\\nSearch Fields: upload_id : The persistent and globally unique identifier for the upload of the entry : str\\nupload_name : The user provided upload name : str\\nupload_create_time : The date and time when the upload was created in nomad : nomad.metainfo.data_type.Datetime\\nentry_id : A persistent and globally unique identifier for the entry : str\\nentry_name : A brief human readable name for the entry. : str\\nentry_name.prefix : A brief human readable name for the entry. : str\\nentry_type : The main schema definition. This is the name of the section used for data. : str\\ncalc_id : Legacy field name, use `entry_id` instead. : str\\nentry_create_time : The date and time when the entry was created in nomad : nomad.metainfo.data_type.Datetime\\nparser_name : The NOMAD parser used for the last processing : str\\nmainfile : The path to the mainfile from the root directory of the uploaded files : str\\nmainfile.path : The path to the mainfile from the root directory of the uploaded files : str\\nmainfile_key : Key used to differentiate between different *child entries* of an entry.\\nFor parent entries and entries that do not have any children, the value should\\nbe empty. : str\\nmainfile_key.path : Key used to differentiate between different *child entries* of an entry.\\nFor parent entries and entries that do not have any children, the value should\\nbe empty. : str\\ntext_search_contents : Contains text contents that should be considered when\\ndoing free text queries for entries. : str\\nfiles : The paths to the files within the upload that belong to this entry.\\nAll files within the same directory as the entry\\'s mainfile are considered the\\nauxiliary files that belong to the entry. : str\\nfiles.path : The paths to the files within the upload that belong to this entry.\\nAll files within the same directory as the entry\\'s mainfile are considered the\\nauxiliary files that belong to the entry. : str\\npid : The unique, sequentially enumerated, integer PID that was used in the legacy\\nNOMAD CoE. It allows to resolve URLs of the old NOMAD CoE Repository. : str\\nraw_id : The code specific identifier extracted from the entry\\'s raw files by the parser,\\nif supported. : str\\nexternal_id : A user provided external id. Usually the id for an entry in an external database\\nwhere the data was imported from. : str\\npublished : Indicates if the entry is published : bool\\npublish_time : The date and time when the upload was published in nomad : nomad.metainfo.data_type.Datetime\\nwith_embargo : Indicated if this entry is under an embargo : bool\\nprocessed : Indicates that the entry is successfully processed. : bool\\nlast_processing_time : The date and time of the last processing. : nomad.metainfo.data_type.Datetime\\nprocessing_errors : Errors that occurred during processing : str\\nnomad_version : The NOMAD version used for the last processing : str\\nnomad_commit : The NOMAD commit used for the last processing : str\\ncomment : A user provided comment for this entry : str\\nreferences : User provided references (URLs) for this entry : str\\nexternal_db : The repository or external database where the original data resides : AFLOW,EELS Data Base,Kyoto Phonopy Database,Materials Project,OQMD,The Perovskite Database Project\\norigin : A short human readable description of the entries origin. Usually it is the\\nhandle of an external database/repository or the name of the main author. : str\\nmain_author.name :   : str\\nmain_author.name.text :   : str\\nmain_author.user_id : The unique, persistent keycloak UUID : str\\nmain_author : The main author of the entry : User\\nauthors.name :   : str\\nauthors.name.text :   : str\\nauthors : All authors (main author and co-authors) : Author\\nwriters.name :   : str\\nwriters.name.text :   : str\\nwriters.user_id : The unique, persistent keycloak UUID : str\\nwriters : All writers (main author, upload coauthors) : User\\nwriter_groups : Groups with write access (= coauthor groups). : str\\nviewers.name :   : str\\nviewers.name.text :   : str\\nviewers.user_id : The unique, persistent keycloak UUID : str\\nviewers : All viewers (main author, upload coauthors, and reviewers) : User\\nviewer_groups : Groups with read access (= coauthor groups + reviewer groups). : str\\ndatasets.dataset_id : The unique identifier for this dataset as a string. It should be\\na randomly generated UUID, similar to other nomad ids. : str\\ndatasets.dataset_name : The human-readable name of the dataset as string. The dataset name must be\\nunique for the user. : str\\ndatasets.doi : The optional Document Object Identifier (DOI) associated with this dataset.\\nNomad can register DOIs that link back to the respective representation of\\nthe dataset in the nomad UI. This quantity holds the string representation of\\nthis DOI. There is only one per dataset. The DOI is just the DOI name, not its\\nfull URL, e.g. \"10.17172/nomad/2019.10.29-1\". : str\\ndatasets.dataset_create_time : The date when the dataset was first created. : nomad.metainfo.data_type.Datetime\\ndatasets.dataset_modified_time : The date when the dataset was last modified. An owned dataset\\ncan only be extended after a DOI was assigned. A foreign dataset cannot be changed\\nonce a DOI was assigned. : nomad.metainfo.data_type.Datetime\\ndatasets.dataset_type : The type determined if a dataset is owned, i.e. was created by\\nthe authors of the contained entries; or if a dataset is foreign,\\ni.e. it was created by someone not necessarily related to the entries. : foreign,owned\\ndatasets : A list of user curated datasets this entry belongs to. : /packages/16/section_definitions/0\\ndomain : The material science domain : dft,ems,nexus\\nn_quantities : Number of metainfo quantities parsed from the entry. : int\\nquantities : All quantities that are used by this entry. : str\\nquantities.path : All quantities that are used by this entry. : str\\nsections : All sections that are present in this entry. This field is deprecated and will be removed. : str\\noptimade.elements : Names of the different elements present in the structure. : Ac,Ag,Al,Am,Ar,As,At,Au,B,Ba,Be,Bh,Bi,Bk,Br,C,Ca,Cd,Ce,Cf,Cl,Cm,Cn,Co,Cr,Cs,Cu,Db,Ds,Dy,Er,Es,Eu,F,Fe,Fl,Fm,Fr,Ga,Gd,Ge,H,He,Hf,Hg,Ho,Hs,I,In,Ir,K,Kr,La,Li,Lr,Lu,Lv,Mc,Md,Mg,Mn,Mo,Mt,N,Na,Nb,Nd,Ne,Nh,Ni,No,Np,O,Og,Os,P,Pa,Pb,Pd,Pm,Po,Pr,Pt,Pu,Ra,Rb,Re,Rf,Rg,Rh,Rn,Ru,S,Sb,Sc,Se,Sg,Si,Sm,Sn,Sr,Ta,Tb,Tc,Te,Th,Ti,Tl,Tm,Ts,U,V,W,X,Xe,Y,Yb,Zn,Zr\\noptimade.nelements : Number of different elements in the structure as an integer. : int\\noptimade.elements_ratios : Relative proportions of different elements in the structure. : float\\noptimade.chemical_formula_descriptive : The chemical formula for a structure as a string in a form chosen by the API\\nimplementation. : str\\noptimade.chemical_formula_reduced : The reduced chemical formula for a structure as a string with element symbols and\\ninteger chemical proportion numbers. The proportion number MUST be omitted if it is 1. : str\\noptimade.chemical_formula_hill : The chemical formula for a structure in Hill form with element symbols followed by\\ninteger chemical proportion numbers. The proportion number MUST be omitted if it is 1. : str\\noptimade.chemical_formula_anonymous : The anonymous formula is the chemical_formula_reduced, but where the elements are\\ninstead first ordered by their chemical proportion number, and then, in order left to\\nright, replaced by anonymous symbols A, B, C, ..., Z, Aa, Ba, ..., Za, Ab, Bb, ... and\\nso on. : str\\noptimade.nperiodic_dimensions : An integer specifying the number of periodic dimensions in the structure, equivalent\\nto the number of non-zero entries in dimension_types. : int\\noptimade.nsites : An integer specifying the length of the cartesian_site_positions property. : int\\noptimade.structure_features : A list of strings that flag which special features are used by the structure.\\n\\n- disorder: This flag MUST be present if any one entry in the species list has a\\nchemical_symbols list that is longer than 1 element.\\n- unknown_positions: This flag MUST be present if at least one component of the\\ncartesian_site_positions list of lists has value null.\\n- assemblies: This flag MUST be present if the assemblies list is present. : assemblies,disorder,unknown_positions\\nsection_defs.definition_qualified_name : The qualified name of the compatible section. : str\\nsection_defs.definition_id : The definition id of the compatible section. : str\\nsection_defs.used_directly : If the compatible section is directly used as base section. : bool\\nentry_references.target_reference : The full url like reference of the the target. : str\\nentry_references.target_entry_id : The id of the entry containing the target. : str\\nentry_references.target_mainfile : The mainfile of the entry containing the target. : str\\nentry_references.target_upload_id : The id of the upload containing the target. : str\\nentry_references.target_name : The name of the target quantity/section. : str\\nentry_references.target_path : The path of the target quantity/section in its archive. : str\\nentry_references.source_name : The name of the source (self) quantity/section in its archive. : str\\nentry_references.source_path : The path of the source (self) quantity/section in its archive. : str\\nentry_references.source_quantity : A reference to the quantity definition that defines the reference : str\\nsearch_quantities.id : The full identifier for this quantity that contains the path in the schema +\\nschema name. : str\\nsearch_quantities.definition : A reference to the quantity definition. : str\\nsearch_quantities.path_archive : Path of the value within the archive. : str\\nsearch_quantities.bool_value : The value mapped as an ES boolean field. : bool\\nsearch_quantities.str_value : The value mapped as an ES text and keyword field. : str\\nsearch_quantities.str_value.keyword : The value mapped as an ES text and keyword field. : str\\nsearch_quantities.int_value : The value mapped as an ES long number field. : int\\nsearch_quantities.float_value : The value mapped as an ES double number field. : float\\nsearch_quantities.datetime_value : The value mapped as an ES date field. : nomad.metainfo.data_type.Datetime\\nresults.material.material_id : A fixed length, unique material identifier in the form of a hash\\ndigest. : str\\nresults.material.material_name : Meaningful names for this a material if any can be assigned. : str\\nresults.material.structural_type : Structural class determined from the atomic structure. : 1D,2D,atom,bulk,molecule / cluster,not processed,surface,unavailable\\nresults.material.dimensionality : Dimensionality of the system. For atomistic systems this is\\nautomatically evaluated by using the topology-scaling algorithm:\\nhttps://doi.org/10.1103/PhysRevLett.118.106101.\\n\\n| Value | Description |\\n| --------- | ----------------------- |\\n| `\\'0D\\'` | Not connected periodically |\\n| `\\'1D\\'` | Periodically connected in one dimension |\\n| `\\'2D\\'` | Periodically connected in two dimensions |\\n| `\\'3D\\'` | Periodically connected in three dimensions | : 0D,1D,2D,3D\\nresults.material.building_block : More exact classification for this system, i.e. the type of \"building\\nblock\" it represents.\\n\\n| Value | Description |\\n| --------- | ----------------------- |\\n| `\\'surface\\'` | Structure built from a unit cell that repeats periodically in two directions and at least twice, but not infinitely in a third direction. |\\n| `\\'2D material\\'` | Structure built from a unit cell that repeats periodically in two directions and only once in a third direction. |\\n| `\\'molecule\\'` | Molecule defined in the force-field topology |\\n| `\\'monomer\\'` | Monomer defined in the force-field topology | : 2D material,molecule,monomer,surface\\nresults.material.functional_type : Classification based on the functional properties. : str\\nresults.material.compound_type : Classification based on the chemical formula. : str\\nresults.material.elements : Names of the different elements present in the structure. : Ac,Ag,Al,Am,Ar,As,At,Au,B,Ba,Be,Bh,Bi,Bk,Br,C,Ca,Cd,Ce,Cf,Cl,Cm,Cn,Co,Cr,Cs,Cu,Db,Ds,Dy,Er,Es,Eu,F,Fe,Fl,Fm,Fr,Ga,Gd,Ge,H,He,Hf,Hg,Ho,Hs,I,In,Ir,K,Kr,La,Li,Lr,Lu,Lv,Mc,Md,Mg,Mn,Mo,Mt,N,Na,Nb,Nd,Ne,Nh,Ni,No,Np,O,Og,Os,P,Pa,Pb,Pd,Pm,Po,Pr,Pt,Pu,Ra,Rb,Re,Rf,Rg,Rh,Rn,Ru,S,Sb,Sc,Se,Sg,Si,Sm,Sn,Sr,Ta,Tb,Tc,Te,Th,Ti,Tl,Tm,Ts,U,V,W,X,Xe,Y,Yb,Zn,Zr\\nresults.material.n_elements : Number of different elements in the structure as an integer. : int\\nresults.material.elements_exclusive : String containing the chemical elements in alphabetical order and\\nseparated by a single whitespace. This quantity can be used for\\nexclusive element searches where you want to find entries/materials\\nwith only certain given elements. : str\\nresults.material.chemical_formula_descriptive : The chemical formula for a structure as a string in a form chosen by the API\\nimplementation. : str\\nresults.material.chemical_formula_reduced : Alphabetically sorted chemical formula with reduced integer chemical\\nproportion numbers. The proportion number is omitted if it is 1. : str\\nresults.material.chemical_formula_hill : The chemical formula for a structure in Hill form with element\\nsymbols followed by non-reduced integer chemical proportion numbers.\\nThe proportion number is omitted if it is 1. : str\\nresults.material.chemical_formula_iupac : Formula where the elements are ordered using a formal list loosely\\nbased on electronegativity as defined in the IUPAC nomenclature of\\ninorganic chemistry (2005). Contains reduced integer chemical\\nproportion numbers where the proportion number is omitted if it is\\n1. : str\\nresults.material.chemical_formula_anonymous : Formula with the elements ordered by their reduced integer chemical\\nproportion number, and the chemical species replaced by\\nalphabetically ordered letters. The proportion number is omitted if\\nit is 1. E.g.  H2O becomes A2B and H2O2 becomes AB. The letters are\\ndrawn from the english alphabet that may be extended by increasing\\nthe number of letters, e.g. A, B, ..., Z, Aa, Ab and so on. This\\ndefinition is in line with the similarly named OPTIMADE definition. : str\\nresults.material.chemical_formula_reduced_fragments : Alphabetically sorted chemical formula with reduced integer chemical\\nproportion numbers. The proportion number is omitted if it is 1. : str\\nresults.material.elemental_composition.element : The symbol of the element, e.g. \\'Pb\\'. : Ac,Ag,Al,Am,Ar,As,At,Au,B,Ba,Be,Bh,Bi,Bk,Br,C,Ca,Cd,Ce,Cf,Cl,Cm,Cn,Co,Cr,Cs,Cu,Db,Ds,Dy,Er,Es,Eu,F,Fe,Fl,Fm,Fr,Ga,Gd,Ge,H,He,Hf,Hg,Ho,Hs,I,In,Ir,K,Kr,La,Li,Lr,Lu,Lv,Mc,Md,Mg,Mn,Mo,Mt,N,Na,Nb,Nd,Ne,Nh,Ni,No,Np,O,Og,Os,P,Pa,Pb,Pd,Pm,Po,Pr,Pt,Pu,Ra,Rb,Re,Rf,Rg,Rh,Rn,Ru,S,Sb,Sc,Se,Sg,Si,Sm,Sn,Sr,Ta,Tb,Tc,Te,Th,Ti,Tl,Tm,Ts,U,V,W,Xe,Y,Yb,Zn,Zr\\nresults.material.elemental_composition.atomic_fraction : The atomic fraction of the element in the system it is contained within.\\nPer definition a positive value less than or equal to 1. : float64\\nresults.material.elemental_composition.mass_fraction : The mass fraction of the element in the system it is contained within.\\nPer definition a positive value less than or equal to 1. : float64\\nresults.material.symmetry.bravais_lattice : Identifier for the Bravais lattice in Pearson notation. The first lowercase letter\\nidentifies the crystal family and can be one of the following: a (triclinic), b\\n(monoclinic), o (orthorhombic), t (tetragonal), h (hexagonal) or c (cubic). The\\nsecond uppercase letter identifies the centring and can be one of the following: P\\n(primitive), S (face centred), I (body centred), R (rhombohedral centring) or F\\n(all faces centred). : aP,cF,cI,cP,hP,hR,mP,mS,oF,oI,oP,oS,tI,tP\\nresults.material.symmetry.crystal_system : Name of the crystal system. : cubic,hexagonal,monoclinic,orthorhombic,tetragonal,triclinic,trigonal\\nresults.material.symmetry.hall_number : The Hall number for this system. : int32\\nresults.material.symmetry.hall_symbol : The Hall symbol for this system. : str\\nresults.material.symmetry.point_group : Symbol of the crystallographic point group in the Hermann-Mauguin notation. : str\\nresults.material.symmetry.space_group_number : Specifies the International Union of Crystallography (IUC) number of the 3D space\\ngroup of this system. : int32\\nresults.material.symmetry.space_group_symbol : The International Union of Crystallography (IUC) short symbol of the 3D\\nspace group of this system. : str\\nresults.material.symmetry.prototype_formula : The formula of the prototypical material for this structure. : str\\nresults.material.symmetry.prototype_aflow_id : The identifier of this structure in the AFLOW encyclopedia of\\ncrystallographic prototypes:\\nhttp://www.aflowlib.org/prototype-encyclopedia/index.html : str\\nresults.material.symmetry.structure_name : A common name for this structure, e.g. fcc, bcc. : 4-member ring,Heusler,bcc,bct,bct5,clathrate,cuprite,diamond,fcc,fct,half-Heusler,hcp,perovskite,rock salt,rutile,simple cubic,wurtzite,zincblende\\nresults.material.symmetry.strukturbericht_designation : Classification of the material according to the historically grown\\n\\'strukturbericht\\'. : str\\nresults.material.topology.system_id : That path of this section within the metainfo that is used as a unique\\nidentifier. : str\\nresults.material.topology.label : Descriptive label that identifies this structural part. : str\\nresults.material.topology.method : The method used for identifying this system. : matid,parser,porosity,user\\nresults.material.topology.description : A short description about this part of the topology. : str\\nresults.material.topology.material_id : A fixed length, unique material identifier in the form of a hash\\ndigest. : str\\nresults.material.topology.material_name : Meaningful names for this a material if any can be assigned. : str\\nresults.material.topology.structural_type : Structural class determined from the atomic structure. : 1D,2D,active orbitals,atom,bulk,group,molecule,molecule / cluster,monomer,not processed,surface,unavailable\\nresults.material.topology.dimensionality : Dimensionality of the system. For atomistic systems this is\\nautomatically evaluated by using the topology-scaling algorithm:\\nhttps://doi.org/10.1103/PhysRevLett.118.106101.\\n\\n| Value | Description |\\n| --------- | ----------------------- |\\n| `\\'0D\\'` | Not connected periodically |\\n| `\\'1D\\'` | Periodically connected in one dimension |\\n| `\\'2D\\'` | Periodically connected in two dimensions |\\n| `\\'3D\\'` | Periodically connected in three dimensions | : 0D,1D,2D,3D\\nresults.material.topology.building_block : More exact classification for this system, i.e. the type of \"building\\nblock\" it represents.\\n\\n| Value | Description |\\n| --------- | ----------------------- |\\n| `\\'surface\\'` | Structure built from a unit cell that repeats periodically in two directions and at least twice, but not infinitely in a third direction. |\\n| `\\'2D material\\'` | Structure built from a unit cell that repeats periodically in two directions and only once in a third direction. |\\n| `\\'molecule\\'` | Molecule defined in the force-field topology |\\n| `\\'monomer\\'` | Monomer defined in the force-field topology | : 2D material,molecule,monomer,surface\\nresults.material.topology.functional_type : Classification based on the functional properties. : str\\nresults.material.topology.compound_type : Classification based on the chemical formula. : str\\nresults.material.topology.elements : Names of the different elements present in the structure. : Ac,Ag,Al,Am,Ar,As,At,Au,B,Ba,Be,Bh,Bi,Bk,Br,C,Ca,Cd,Ce,Cf,Cl,Cm,Cn,Co,Cr,Cs,Cu,Db,Ds,Dy,Er,Es,Eu,F,Fe,Fl,Fm,Fr,Ga,Gd,Ge,H,He,Hf,Hg,Ho,Hs,I,In,Ir,K,Kr,La,Li,Lr,Lu,Lv,Mc,Md,Mg,Mn,Mo,Mt,N,Na,Nb,Nd,Ne,Nh,Ni,No,Np,O,Og,Os,P,Pa,Pb,Pd,Pm,Po,Pr,Pt,Pu,Ra,Rb,Re,Rf,Rg,Rh,Rn,Ru,S,Sb,Sc,Se,Sg,Si,Sm,Sn,Sr,Ta,Tb,Tc,Te,Th,Ti,Tl,Tm,Ts,U,V,W,X,Xe,Y,Yb,Zn,Zr\\nresults.material.topology.n_elements : Number of different elements in the structure as an integer. : int\\nresults.material.topology.elements_exclusive : String containing the chemical elements in alphabetical order and\\nseparated by a single whitespace. This quantity can be used for\\nexclusive element searches where you want to find entries/materials\\nwith only certain given elements. : str\\nresults.material.topology.chemical_formula_descriptive : The chemical formula for a structure as a string in a form chosen by the API\\nimplementation. : str\\nresults.material.topology.chemical_formula_reduced : Alphabetically sorted chemical formula with reduced integer chemical\\nproportion numbers. The proportion number is omitted if it is 1. : str\\nresults.material.topology.chemical_formula_hill : The chemical formula for a structure in Hill form with element\\nsymbols followed by non-reduced integer chemical proportion numbers.\\nThe proportion number is omitted if it is 1. : str\\nresults.material.topology.chemical_formula_iupac : Formula where the elements are ordered using a formal list loosely\\nbased on electronegativity as defined in the IUPAC nomenclature of\\ninorganic chemistry (2005). Contains reduced integer chemical\\nproportion numbers where the proportion number is omitted if it is\\n1. : str\\nresults.material.topology.chemical_formula_anonymous : Formula with the elements ordered by their reduced integer chemical\\nproportion number, and the chemical species replaced by\\nalphabetically ordered letters. The proportion number is omitted if\\nit is 1. E.g.  H2O becomes A2B and H2O2 becomes AB. The letters are\\ndrawn from the english alphabet that may be extended by increasing\\nthe number of letters, e.g. A, B, ..., Z, Aa, Ab and so on. This\\ndefinition is in line with the similarly named OPTIMADE definition. : str\\nresults.material.topology.chemical_formula_reduced_fragments : Alphabetically sorted chemical formula with reduced integer chemical\\nproportion numbers. The proportion number is omitted if it is 1. : str\\nresults.material.topology.parent_system : Reference to the parent system. : str\\nresults.material.topology.child_systems : References to the child systems. : str\\nresults.material.topology.atomic_fraction : The atomic fraction of this system in the full structure it is contained in.\\nPer definition a positive value less than or equal to 1. : float64\\nresults.material.topology.mass_fraction : The mass fraction of this system in the full structure it is contained within.\\nPer definition a positive value less than or equal to 1. : float64\\nresults.material.topology.n_atoms : The total number of species (atoms, particles) in the system. : int\\nresults.material.topology.sbu_type : The topological representation of the metal secondary building units (sbus).\\nThe shape of most metal sbus are well defined and form the basis of most\\n popular MOFs. The most common example is the paddlewheel, rodlike mofs,\\n irmofs, uio66 : str\\nresults.material.topology.largest_cavity_diameter : The largest cavity diameter is the largest sphere that can be inserted in a porous\\nsystem without overlapping with any of the atoms in the system. : float64 : meter\\nresults.material.topology.pore_limiting_diameter : The pore limiting diameter is the largest sphere that can freely\\ndiffuse through the porous network without overlapping with any of the\\natoms in the system. : float64 : meter\\nresults.material.topology.largest_included_sphere_along_free_sphere_path : The largest included sphere along free sphere path is\\nlargest sphere that can be inserted in the pore. : float64 : meter\\nresults.material.topology.accessible_surface_area : The surface area accessible is the area that is accessible to guest molecules\\nin a porous system. It is generally considered to be the entire surface area\\nthat can be spanned by a probe of a specific radius. In NOMAD, by default we use\\na probe that has a radius of 1.86 Angstrom, which correspond to the\\ncovalent radii of nitrogen gas. For biomolecular system, a radii of\\n1.4 Angstrom can be used, which correspond to the covalent radii\\nof water. : float64 : meter ** 2\\nresults.material.topology.accessible_volume : Volume of unoccupied space in a system that can be accessible to\\nguest molecules, like solvents. : float64 : meter ** 3\\nresults.material.topology.void_fraction : Ratio of the the volume of the unoccupied space in the system\\nto the volume of the entire system. It is a good proxy to\\ndetermine how porous a system is. Highly porous systems\\noften have a larger void fraction, meanwhile compact or dense\\nsystems have smaller void fractions. : float64\\nresults.material.topology.n_channels : Number of channels present in the porous system, which correspond to the number of\\npores within the system. : int\\nresults.material.topology.sbu_coordination_number : The number of connecting point in the secondary building units(sbu), which corresponds to\\nthe to the number of point of extension in the secondary building unit. Some common\\nterminology include\\n1 : monotopic\\n2 : ditopic\\n3 : tritopic\\n4 : tetratopic\\n5 : pentatopic : int\\nresults.material.topology.elemental_composition.element : The symbol of the element, e.g. \\'Pb\\'. : Ac,Ag,Al,Am,Ar,As,At,Au,B,Ba,Be,Bh,Bi,Bk,Br,C,Ca,Cd,Ce,Cf,Cl,Cm,Cn,Co,Cr,Cs,Cu,Db,Ds,Dy,Er,Es,Eu,F,Fe,Fl,Fm,Fr,Ga,Gd,Ge,H,He,Hf,Hg,Ho,Hs,I,In,Ir,K,Kr,La,Li,Lr,Lu,Lv,Mc,Md,Mg,Mn,Mo,Mt,N,Na,Nb,Nd,Ne,Nh,Ni,No,Np,O,Og,Os,P,Pa,Pb,Pd,Pm,Po,Pr,Pt,Pu,Ra,Rb,Re,Rf,Rg,Rh,Rn,Ru,S,Sb,Sc,Se,Sg,Si,Sm,Sn,Sr,Ta,Tb,Tc,Te,Th,Ti,Tl,Tm,Ts,U,V,W,Xe,Y,Yb,Zn,Zr\\nresults.material.topology.elemental_composition.atomic_fraction : The atomic fraction of the element in the system it is contained within.\\nPer definition a positive value less than or equal to 1. : float64\\nresults.material.topology.elemental_composition.mass_fraction : The mass fraction of the element in the system it is contained within.\\nPer definition a positive value less than or equal to 1. : float64\\nresults.material.topology.system_relation.type : The type of relation between a system and it\\'s parent.\\n\\n| Value | Description |\\n| --------- | ----------------------- |\\n| `\\'root\\'` | System representing the entire structure, has no parent system. |\\n| `\\'subsystem\\'` | A single logical entity extracted from the parent system. |\\n| `\\'group\\'` | A logical group of subsystems within the parent, e.g. a group of molecules in MD. |\\n| `\\'primitive_cell\\'` | The conventional cell from which the parent is constructed from. |\\n| `\\'conventional_cell\\'` | The primitive cell from which the parent is constructed from. | : conventional_cell,group,primitive_cell,root,subsystem\\nresults.material.topology.cell.a : Length of the first basis vector. : float64 : meter\\nresults.material.topology.cell.b : Length of the second basis vector. : float64 : meter\\nresults.material.topology.cell.c : Length of the third basis vector. : float64 : meter\\nresults.material.topology.cell.alpha : Angle between second and third basis vector. : float64 : radian\\nresults.material.topology.cell.beta : Angle between first and third basis vector. : float64 : radian\\nresults.material.topology.cell.gamma : Angle between first and second basis vector. : float64 : radian\\nresults.material.topology.cell.volume : Volume of the cell. : float64 : meter ** 3\\nresults.material.topology.cell.atomic_density : Atomic density of the material (atoms/volume).\\' : float64 : 1 / meter ** 3\\nresults.material.topology.cell.mass_density : Mass density of the material. : float64 : kilogram / meter ** 3\\nresults.material.topology.symmetry.bravais_lattice : Identifier for the Bravais lattice in Pearson notation. The first lowercase letter\\nidentifies the crystal family and can be one of the following: a (triclinic), b\\n(monoclinic), o (orthorhombic), t (tetragonal), h (hexagonal) or c (cubic). The\\nsecond uppercase letter identifies the centring and can be one of the following: P\\n(primitive), S (face centred), I (body centred), R (rhombohedral centring) or F\\n(all faces centred). : aP,cF,cI,cP,hP,hR,mP,mS,oF,oI,oP,oS,tI,tP\\nresults.material.topology.symmetry.crystal_system : Name of the crystal system. : cubic,hexagonal,monoclinic,orthorhombic,tetragonal,triclinic,trigonal\\nresults.material.topology.symmetry.hall_number : The Hall number for this system. : int32\\nresults.material.topology.symmetry.hall_symbol : The Hall symbol for this system. : str\\nresults.material.topology.symmetry.point_group : Symbol of the crystallographic point group in the Hermann-Mauguin notation. : str\\nresults.material.topology.symmetry.space_group_number : Specifies the International Union of Crystallography (IUC) number of the 3D space\\ngroup of this system. : int32\\nresults.material.topology.symmetry.space_group_symbol : The International Union of Crystallography (IUC) short symbol of the 3D\\nspace group of this system. : str\\nresults.material.topology.symmetry.strukturbericht_designation : Classification of the material according to the historically grown\\n\\'strukturbericht\\'. : str\\nresults.material.topology.symmetry.prototype_label_aflow : AFLOW label of the prototype (see\\nhttp://aflowlib.org/CrystalDatabase/prototype_index.html) identified on the basis\\nof the space_group and normalized_wyckoff. : str\\nresults.material.topology.symmetry.prototype_name : A common name for this prototypical structure, e.g. fcc, bcc. : 4-member ring,Heusler,bcc,bct,bct5,clathrate,cuprite,diamond,fcc,fct,half-Heusler,hcp,perovskite,rock salt,rutile,simple cubic,wurtzite,zincblende\\nresults.material.topology.active_orbitals.n_quantum_number : Principal quantum number $n$. : int32\\nresults.material.topology.active_orbitals.j_quantum_number : Total angular momentum quantum number $j = |l-s| ... l+s$.\\n**Necessary with strong L-S coupling or non-collinear spin systems.** : float64\\nresults.material.topology.active_orbitals.mj_quantum_number : Azimuthal projection of the $j$ vector.\\n**Necessary with strong L-S coupling or non-collinear spin systems.** : float64\\nresults.material.topology.active_orbitals.degeneracy : The number of states under the filling constraints applied to the orbital set.\\nThis implicitly assumes that all orbitals in the set are degenerate. : int32\\nresults.material.topology.active_orbitals.n_electrons_excited : The electron charge excited for modelling purposes.\\nChoices that deviate from 0 or 1 typically leverage Janak composition.\\nUnless the `initial` state is chosen, the model corresponds to a single electron being excited in physical reality. : float64\\nresults.material.topology.active_orbitals.occupation : The total number of electrons within the state (as defined by degeneracy)\\nafter exciting the model charge. : float64\\nresults.material.topology.active_orbitals.l_quantum_symbol : Azimuthal $l$ in symbolic form. : str\\nresults.material.topology.active_orbitals.ml_quantum_symbol : Magnetic quantum number $m_l$ in symbolic form. : str\\nresults.material.topology.active_orbitals.ms_quantum_symbol : Spin quantum number $m_s$ in symbolic form. : str\\nresults.method.method_id : Identifier for the used method. Only available for a subset of entries\\nfor which the methodology has been identified with precision. : str\\nresults.method.method_name : Common name for the used method. : BSE,CoreHole,DFT,DMFT,EELS,GW,NMR,TB,XPS,XRD,kMC,quantum cms,unavailable\\nresults.method.workflow_name :   : str\\nresults.method.simulation.program_name : The name of the used program. : str\\nresults.method.simulation.program_version : The version of the used program. : str\\nresults.method.simulation.program_version_internal : The version tag used internally by the development team. : str\\nresults.method.simulation.dft.basis_set_type : The used basis set functions. : (L)APW+lo,gaussians,not processed,numeric AOs,plane waves,psinc functions,real-space grid,unavailable\\nresults.method.simulation.dft.core_electron_treatment : How the core electrons are described. : all electron frozen core,full all electron,pseudopotential,unavailable\\nresults.method.simulation.dft.spin_polarized : Whether the calculation is spin-polarized. : bool\\nresults.method.simulation.dft.scf_threshold_energy_change : Specifies the threshold for the total energy change between two subsequent\\nself-consistent field (SCF) iterations. The SCF is considered converged when the\\ntotal-energy change between two SCF cycles is below the threshold (possibly in\\ncombination with other criteria). : float64 : joule\\nresults.method.simulation.dft.van_der_Waals_method : The used van der Waals method. : str\\nresults.method.simulation.dft.relativity_method : Describes the relativistic treatment used for the calculation of the final energy\\nand related quantities. If skipped or empty, no relativistic treatment is applied. : pseudo_scalar_relativistic,scalar_relativistic,scalar_relativistic_atomic_ZORA\\nresults.method.simulation.dft.smearing_kind : Specifies the kind of smearing on the electron occupation used to calculate the\\nfree energy (see energy_free)\\n\\nValid values are:\\n\\n| Smearing kind             | Description                       |\\n\\n| ------------------------- | --------------------------------- |\\n\\n| `\"empty\"`                 | No smearing is applied            |\\n\\n| `\"gaussian\"`              | Gaussian smearing                 |\\n\\n| `\"fermi\"`                 | Fermi smearing                    |\\n\\n| `\"marzari-vanderbilt\"`    | Marzari-Vanderbilt smearing       |\\n\\n| `\"methfessel-paxton\"`     | Methfessel-Paxton smearing        |\\n\\n| `\"tetrahedra\"`            | Interpolation of state energies and occupations\\n(ignores smearing_width) | : str\\nresults.method.simulation.dft.smearing_width : Specifies the width of the smearing in energy for the electron occupation used to\\ncalculate the free energy (see energy_free).\\n\\n*NOTE:* Not all methods specified in smearing_kind uses this value. : float64\\nresults.method.simulation.dft.jacobs_ladder : Functional classification in line with Jacob\\'s Ladder.\\nFor more information, see https://doi.org/10.1063/1.1390175 (original paper);\\nhttps://doi.org/10.1103/PhysRevLett.91.146401 (meta-GGA);\\nand https://doi.org/10.1063/1.1904565 (hyper-GGA). : GGA,LDA,hybrid,hyper-GGA,meta-GGA,not processed,unavailable\\nresults.method.simulation.dft.xc_functional_type : Functional classification in line with Jacob\\'s Ladder.\\nFor more information, see https://doi.org/10.1063/1.1390175 (original paper);\\nhttps://doi.org/10.1103/PhysRevLett.91.146401 (meta-GGA);\\nand https://doi.org/10.1063/1.1904565 (hyper-GGA). : GGA,LDA,hybrid,hyper-GGA,meta-GGA,not processed,unavailable\\nresults.method.simulation.dft.xc_functional_names : The list of libXC functional names that where used in this entry. : str\\nresults.method.simulation.dft.exact_exchange_mixing_factor : Amount of exact exchange mixed in with the XC functional (value range = [0,1]). : float64\\nresults.method.simulation.dft.hubbard_kanamori_model.u_effective : Value of the effective U parameter (u - j). : float64 : joule\\nresults.method.simulation.dft.hubbard_kanamori_model.u : Value of the (intraorbital) Hubbard interaction : float64 : joule\\nresults.method.simulation.dft.hubbard_kanamori_model.j : Value of the exchange interaction. In rotational invariant systems, j = jh. : float64 : joule\\nresults.method.simulation.tb.type : Tight-binding model type: Slater Koster fitting, DFTB approximation, xTB perturbation\\ntheory, or Wannier projection. : DFTB,Slater-Koster,Wannier,not processed,xTB\\nresults.method.simulation.tb.localization_type : Localization type of the Wannier orbitals. : maximally_localized,single_shot\\nresults.method.simulation.gw.type : GW Hedin\\'s self-consistency cycle:\\n\\n| Name      | Description                      | Reference             |\\n\\n| --------- | -------------------------------- | --------------------- |\\n\\n| `\\'G0W0\\'`  | single-shot                      | PRB 74, 035101 (2006) |\\n\\n| `\\'scGW\\'`  | self-consistent G and W               | PRB 75, 235102 (2007) |\\n\\n| `\\'scGW0\\'` | self-consistent G with fixed W0  | PRB 54, 8411 (1996)   |\\n\\n| `\\'scG0W\\'` | self-consistent W with fixed G0  | -                     |\\n\\n| `\\'ev-scGW0\\'`  | eigenvalues self-consistent G with fixed W0   | PRB 34, 5390 (1986)   |\\n\\n| `\\'ev-scGW\\'`  | eigenvalues self-consistent G and W   | PRB 74, 045102 (2006)   |\\n\\n| `\\'qp-scGW0\\'`  | quasiparticle self-consistent G with fixed W0 | PRL 99, 115109 (2007) |\\n\\n| `\\'qp-scGW\\'`  | quasiparticle self-consistent G and W | PRL 96, 226402 (2006) | : G0W0,ev-scGW,ev-scGW0,qp-scGW,qp-scGW0,scG0W,scGW,scGW0\\nresults.method.simulation.gw.basis_set_type : The used basis set functions. : (L)APW+lo,gaussians,not processed,numeric AOs,plane waves,psinc functions,real-space grid,unavailable\\nresults.method.simulation.gw.starting_point_type : The libXC based xc functional classification used in the starting point DFT simulation. : GGA,HF,LDA,hybrid,hyper-GGA,meta-GGA,not processed,unavailable\\nresults.method.simulation.gw.starting_point_names : The list of libXC functional names that where used in this entry. : str\\nresults.method.simulation.bse.type : Type of BSE hamiltonian solved:\\n\\n    H_BSE = H_diagonal + 2 * gx * Hx - gc * Hc\\n\\nwhere gx, gc specifies the type.\\n\\nOnline resources for the theory:\\n- http://exciting.wikidot.com/carbon-excited-states-from-bse#toc1\\n- https://www.vasp.at/wiki/index.php/Bethe-Salpeter-equations_calculations\\n- https://docs.abinit.org/theory/bse/\\n- https://www.yambo-code.eu/wiki/index.php/Bethe-Salpeter_kernel\\n\\n| Name | Description |\\n\\n| --------- | ----------------------- |\\n\\n| `\\'Singlet\\'` | gx = 1, gc = 1 |\\n\\n| `\\'Triplet\\'` | gx = 0, gc = 1 |\\n\\n| `\\'IP\\'` | Independent-particle approach |\\n\\n| `\\'RPA\\'` | Random Phase Approximation | : IP,RPA,Singlet,Triplet\\nresults.method.simulation.bse.basis_set_type : The used basis set functions. : (L)APW+lo,gaussians,not processed,numeric AOs,plane waves,psinc functions,real-space grid,unavailable\\nresults.method.simulation.bse.starting_point_type : The libXC based xc functional classification used in the starting point DFT simulation. : GGA,HF,LDA,hybrid,hyper-GGA,meta-GGA,not processed,unavailable\\nresults.method.simulation.bse.starting_point_names : The list of libXC functional names that where used in this entry. : str\\nresults.method.simulation.bse.solver : Solver algotithm used to diagonalize the BSE Hamiltonian.\\n\\n| Name | Description | Reference |\\n\\n| --------- | ----------------------- | ----------- |\\n\\n| `\\'Full-diagonalization\\'` | Full diagonalization of the BSE Hamiltonian | - |\\n\\n| `\\'Lanczos-Haydock\\'` | Subspace iterative Lanczos-Haydock algorithm | https://doi.org/10.1103/PhysRevB.59.5441 |\\n\\n| `\\'GMRES\\'` | Generalized minimal residual method | https://doi.org/10.1137/0907058 |\\n\\n| `\\'SLEPc\\'` | Scalable Library for Eigenvalue Problem Computations | https://slepc.upv.es/ |\\n\\n| `\\'TDA\\'` | Tamm-Dancoff approximation | https://doi.org/10.1016/S0009-2614(99)01149-5 | : Full-diagonalization,GMRES,Lanczos-Haydock,SLEPc,TDA\\nresults.method.simulation.bse.gw_type : GW Hedin\\'s self-consistency cycle:\\n\\n| Name      | Description                      | Reference             |\\n\\n| --------- | -------------------------------- | --------------------- |\\n\\n| `\\'G0W0\\'`  | single-shot                      | PRB 74, 035101 (2006) |\\n\\n| `\\'scGW\\'`  | self-consistent G and W               | PRB 75, 235102 (2007) |\\n\\n| `\\'scGW0\\'` | self-consistent G with fixed W0  | PRB 54, 8411 (1996)   |\\n\\n| `\\'scG0W\\'` | self-consistent W with fixed G0  | -                     |\\n\\n| `\\'ev-scGW0\\'`  | eigenvalues self-consistent G with fixed W0   | PRB 34, 5390 (1986)   |\\n\\n| `\\'ev-scGW\\'`  | eigenvalues self-consistent G and W   | PRB 74, 045102 (2006)   |\\n\\n| `\\'qp-scGW0\\'`  | quasiparticle self-consistent G with fixed W0 | PRL 99, 115109 (2007) |\\n\\n| `\\'qp-scGW\\'`  | quasiparticle self-consistent G and W | PRL 96, 226402 (2006) | : G0W0,ev-scGW,ev-scGW0,qp-scGW,qp-scGW0,scG0W,scGW,scGW0\\nresults.method.simulation.dmft.impurity_solver_type : Impurity solver method used in the DMFT loop:\\n\\n| Name              | Reference                            |\\n\\n| ----------------- | ------------------------------------ |\\n\\n| `\\'CT-INT\\'`        | Rubtsov et al., JEPT Lett 80 (2004)  |\\n\\n| `\\'CT-HYB\\'`        | Werner et al., PRL 97 (2006)         |\\n\\n| `\\'CT-AUX\\'`        | Gull et al., EPL 82 (2008)           |\\n\\n| `\\'ED\\'`            | Caffarrel et al, PRL 72 (1994)       |\\n\\n| `\\'NRG\\'`           | Bulla et al., RMP 80 (2008)          |\\n\\n| `\\'MPS\\'`           | Ganahl et al., PRB 90 (2014)         |\\n\\n| `\\'IPT\\'`           | Georges et al., PRB 45 (1992)        |\\n\\n| `\\'NCA\\'`           | Pruschke et al., PRB 47 (1993)       |\\n\\n| `\\'OCA\\'`           | Pruschke et al., PRB 47 (1993)       |\\n\\n| `\\'slave_bosons\\'`  | Kotliar et al., PRL 57 (1986)        |\\n\\n| `\\'hubbard_I\\'`     | -                                    | : CT-AUX,CT-HYB,CT-INT,ED,IPT,MPS,NCA,NRG,OCA,hubbard_I,slave_bosons\\nresults.method.simulation.dmft.inverse_temperature : Inverse temperature = 1/(kB*T). : float64 : 1 / joule\\nresults.method.simulation.dmft.magnetic_state : Magnetic state in which the DMFT calculation is done. : antiferromagnetic,ferromagnetic,paramagnetic\\nresults.method.simulation.dmft.u : Value of the (intraorbital) Hubbard interaction : float64 : joule\\nresults.method.simulation.dmft.jh : Value of the (interorbital) Hund\\'s coupling. : float64 : joule\\nresults.method.simulation.dmft.analytical_continuation : Analytical continuation used to continuate the imaginary space Green\\'s functions into\\nthe real frequencies space.\\n\\n| Name           | Description         | Reference                        |\\n\\n| -------------- | ------------------- | -------------------------------- |\\n\\n| `\\'Pade\\'` | Pade\\'s approximant  | https://www.sciencedirect.com/science/article/pii/0021999173901277?via%3Dihub |\\n\\n| `\\'MaxEnt\\'` | Maximum Entropy method | https://journals.aps.org/prb/abstract/10.1103/PhysRevB.41.2380 |\\n\\n| `\\'SVD\\'` | Singular value decomposition | https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.75.517 |\\n\\n| `\\'Stochastic\\'` | Stochastic method | https://journals.aps.org/prb/abstract/10.1103/PhysRevB.57.10287 | : MaxEnt,Pade,SVD,Stochastic\\nresults.method.simulation.precision.k_line_density : Amount of sampled k-points per unit reciprocal length along each axis.\\nContains the least precise density out of all axes.\\nShould only be compared between calulations of similar dimensionality. : float64 : meter\\nresults.method.simulation.precision.native_tier : The code-specific tag indicating the precision used\\nfor the basis set and meshes of numerical routines.\\n\\nSupported codes (with hyperlinks to the relevant documentation):\\n- [`VASP`](https://www.vasp.at/wiki/index.php/PREC)\\n- `FHI-aims`\\n- [`CASTEP`](http://www.tcm.phy.cam.ac.uk/castep/documentation/WebHelp/CASTEP.html#modules/castep/tskcastepsetelecquality.htm?Highlight=ultra-fine) : str\\nresults.method.simulation.precision.basis_set : The type of basis set used by the program.\\n\\n| Value                          |                       Description |\\n| ------------------------------ | --------------------------------- |\\n| `\\'APW\\'`                        | Augmented plane waves             |\\n| `\\'LAPW\\'`                       | Linearized augmented plane waves  |\\n| `\\'APW+lo\\'`             | Augmented plane waves with local orbitals |\\n| `\\'LAPW+lo\\'` | Linearized augmented plane waves with local orbitals |\\n| `\\'(L)APW\\'`                     |     A combination of APW and LAPW |\\n| `\\'(L)APW+lo\\'`  | A combination of APW and LAPW with local orbitals |\\n| `\\'plane waves\\'`                | Plane waves                       |\\n| `\\'gaussians + plane waves\\'`    | Basis set of the Quickstep algorithm (DOI: 10.1016/j.cpc.2004.12.014) |\\n| `\\'real-space grid\\'`            | Real-space grid                   |\\n| `\\'suppport functions\\'`         | Support functions                 | : (L)APW,(L)APW+lo,APW,APW+lo,LAPW,LAPW+lo,atom-centered orbitals,gaussians + plane waves,not processed,plane waves,real-space grid,support functions,unavailable\\nresults.method.simulation.precision.planewave_cutoff : Spherical cutoff in reciprocal space for a plane-wave basis set. It is the energy\\nof the highest plane-wave ($\\\\frac{\\\\hbar^2|k+G|^2}{2m_e}$) included in the basis\\nset. : float64 : joule\\nresults.method.simulation.precision.apw_cutoff : The spherical cutoff parameter for the interstitial plane waves in the LAPW family.\\nThis cutoff is unitless, referring to the product of the smallest muffin-tin radius\\nand the length of the cutoff reciprocal vector ($r_{MT} * |K_{cut}|$). : float64\\nresults.method.measurement.xrd.diffraction_method_name : The diffraction method used to obtain the diffraction pattern.\\n| X-Ray Diffraction Method                                   | Description                                                                                                                                                                                                 |\\n|------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\\n| **Powder X-Ray Diffraction (PXRD)**                        | The term \"powder\" refers more to the random orientation of small crystallites than to the physical form of the sample. Can be used with non-powder samples if they present random crystallite orientations. |\\n| **Single Crystal X-Ray Diffraction (SCXRD)**               | Used for determining the atomic structure of a single crystal.                                                                                                                                              |\\n| **High-Resolution X-Ray Diffraction (HRXRD)**              | A technique typically used for detailed characterization of epitaxial thin films using precise diffraction measurements.                                                                                    |\\n| **Small-Angle X-Ray Scattering (SAXS)**                    | Used for studying nanostructures in the size range of 1-100 nm. Provides information on particle size, shape, and distribution.                                                                             |\\n| **X-Ray Reflectivity (XRR)**                               | Used to study thin film layers, interfaces, and multilayers. Provides info on film thickness, density, and roughness.                                                                                       |\\n| **Grazing Incidence X-Ray Diffraction (GIXRD)**            | Primarily used for the analysis of thin films with the incident beam at a fixed shallow angle.                                                                                                              |\\n| **Reciprocal Space Mapping (RSM)**                         | High-resolution XRD method to measure diffracted intensity in a 2-dimensional region of reciprocal space. Provides information about the real-structure (lattice mismatch, domain structure, stress and defects) in single-crystalline and epitaxial samples.| : Grazing Incidence X-Ray Diffraction (GIXRD),High-Resolution X-Ray Diffraction (HRXRD),Powder X-Ray Diffraction (PXRD),Reciprocal Space Mapping (RSM),Single Crystal X-Ray Diffraction (SCXRD),Small-Angle X-Ray Scattering (SAXS),X-Ray Reflectivity (XRR),unavailable\\nresults.properties.n_calculations : The number of performed single configuration calculations.\\' : int\\nresults.properties.available_properties : Subset of the property names that are present in this entry. : str\\nresults.properties.structural.radial_distribution_function.type : Describes if the observable is calculated at the molecular or atomic level. : atomic,molecular\\nresults.properties.structural.radial_distribution_function.label : Describes the atoms or molecule types involved in determining the property. : str\\nresults.properties.structural.radial_distribution_function.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.structural.radial_distribution_function.provenance.molecular_dynamics.time_step : The timestep at which the numerical integration is performed. : float64 : second\\nresults.properties.structural.radial_distribution_function.provenance.molecular_dynamics.ensemble_type : The type of thermodynamic ensemble that was simulated.\\n\\nAllowed values are:\\n\\n| Thermodynamic Ensemble          | Description                               |\\n\\n| ---------------------- | ----------------------------------------- |\\n\\n| `\"NVE\"`           | Constant number of particles, volume, and energy |\\n\\n| `\"NVT\"`           | Constant number of particles, volume, and temperature |\\n\\n| `\"NPT\"`           | Constant number of particles, pressure, and temperature |\\n\\n| `\"NPH\"`           | Constant number of particles, pressure, and enthalpy | : NPH,NPT,NVE,NVT\\nresults.properties.structural.radius_of_gyration.kind : Kind of the quantity. : str\\nresults.properties.structural.radius_of_gyration.label : Describes the atoms or molecule types involved in determining the property. : str\\nresults.properties.structural.radius_of_gyration.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.structural.radius_of_gyration.provenance.molecular_dynamics.time_step : The timestep at which the numerical integration is performed. : float64 : second\\nresults.properties.structural.radius_of_gyration.provenance.molecular_dynamics.ensemble_type : The type of thermodynamic ensemble that was simulated.\\n\\nAllowed values are:\\n\\n| Thermodynamic Ensemble          | Description                               |\\n\\n| ---------------------- | ----------------------------------------- |\\n\\n| `\"NVE\"`           | Constant number of particles, volume, and energy |\\n\\n| `\"NVT\"`           | Constant number of particles, volume, and temperature |\\n\\n| `\"NPT\"`           | Constant number of particles, pressure, and temperature |\\n\\n| `\"NPH\"`           | Constant number of particles, pressure, and enthalpy | : NPH,NPT,NVE,NVT\\nresults.properties.structural.diffraction_pattern.incident_beam_wavelength : The wavelength of the incident beam. : float64 : meter\\nresults.properties.dynamical.mean_squared_displacement.type : Describes if the observable is calculated at the molecular or atomic level. : atomic,molecular\\nresults.properties.dynamical.mean_squared_displacement.label : Describes the atoms or molecule types involved in determining the property. : str\\nresults.properties.dynamical.mean_squared_displacement.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.dynamical.mean_squared_displacement.provenance.molecular_dynamics.time_step : The timestep at which the numerical integration is performed. : float64 : second\\nresults.properties.dynamical.mean_squared_displacement.provenance.molecular_dynamics.ensemble_type : The type of thermodynamic ensemble that was simulated.\\n\\nAllowed values are:\\n\\n| Thermodynamic Ensemble          | Description                               |\\n\\n| ---------------------- | ----------------------------------------- |\\n\\n| `\"NVE\"`           | Constant number of particles, volume, and energy |\\n\\n| `\"NVT\"`           | Constant number of particles, volume, and temperature |\\n\\n| `\"NPT\"`           | Constant number of particles, pressure, and temperature |\\n\\n| `\"NPH\"`           | Constant number of particles, pressure, and enthalpy | : NPH,NPT,NVE,NVT\\nresults.properties.structures.structure_original.nperiodic_dimensions : An integer specifying the number of periodic dimensions in the\\nstructure, equivalent to the number of non-zero entries in\\ndimension_types. : int\\nresults.properties.structures.structure_original.n_sites : An integer specifying the length of the cartesian_site_positions property. : int\\nresults.properties.structures.structure_original.cell_volume : Volume of the cell. : float64 : meter ** 3\\nresults.properties.structures.structure_original.lattice_parameters.a : Length of the first basis vector. : float64 : meter\\nresults.properties.structures.structure_original.lattice_parameters.b : Length of the second basis vector. : float64 : meter\\nresults.properties.structures.structure_original.lattice_parameters.c : Length of the third basis vector. : float64 : meter\\nresults.properties.structures.structure_original.lattice_parameters.alpha : Angle between second and third basis vector. : float64 : radian\\nresults.properties.structures.structure_original.lattice_parameters.beta : Angle between first and third basis vector. : float64 : radian\\nresults.properties.structures.structure_original.lattice_parameters.gamma : Angle between first and second basis vector. : float64 : radian\\nresults.properties.structures.structure_conventional.nperiodic_dimensions : An integer specifying the number of periodic dimensions in the\\nstructure, equivalent to the number of non-zero entries in\\ndimension_types. : int\\nresults.properties.structures.structure_conventional.n_sites : An integer specifying the length of the cartesian_site_positions property. : int\\nresults.properties.structures.structure_conventional.cell_volume : Volume of the cell. : float64 : meter ** 3\\nresults.properties.structures.structure_conventional.lattice_parameters.a : Length of the first basis vector. : float64 : meter\\nresults.properties.structures.structure_conventional.lattice_parameters.b : Length of the second basis vector. : float64 : meter\\nresults.properties.structures.structure_conventional.lattice_parameters.c : Length of the third basis vector. : float64 : meter\\nresults.properties.structures.structure_conventional.lattice_parameters.alpha : Angle between second and third basis vector. : float64 : radian\\nresults.properties.structures.structure_conventional.lattice_parameters.beta : Angle between first and third basis vector. : float64 : radian\\nresults.properties.structures.structure_conventional.lattice_parameters.gamma : Angle between first and second basis vector. : float64 : radian\\nresults.properties.structures.structure_primitive.nperiodic_dimensions : An integer specifying the number of periodic dimensions in the\\nstructure, equivalent to the number of non-zero entries in\\ndimension_types. : int\\nresults.properties.structures.structure_primitive.n_sites : An integer specifying the length of the cartesian_site_positions property. : int\\nresults.properties.structures.structure_primitive.cell_volume : Volume of the cell. : float64 : meter ** 3\\nresults.properties.structures.structure_primitive.lattice_parameters.a : Length of the first basis vector. : float64 : meter\\nresults.properties.structures.structure_primitive.lattice_parameters.b : Length of the second basis vector. : float64 : meter\\nresults.properties.structures.structure_primitive.lattice_parameters.c : Length of the third basis vector. : float64 : meter\\nresults.properties.structures.structure_primitive.lattice_parameters.alpha : Angle between second and third basis vector. : float64 : radian\\nresults.properties.structures.structure_primitive.lattice_parameters.beta : Angle between first and third basis vector. : float64 : radian\\nresults.properties.structures.structure_primitive.lattice_parameters.gamma : Angle between first and second basis vector. : float64 : radian\\nresults.properties.electronic.band_gap.index : The spin channel index. : int32\\nresults.properties.electronic.band_gap.value : The actual value of the band gap. Value of zero indicates a vanishing band gap and\\nis distinct from sources lacking any band gap measurement or calculation. : float64 : joule\\nresults.properties.electronic.band_gap.type : Band gap type. : direct,indirect\\nresults.properties.electronic.band_gap.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.electronic.dos_electronic.spin_polarized : Whether the DOS is spin-polarized, i.e. is contains channels for both\\nspin values. : bool\\nresults.properties.electronic.dos_electronic.band_gap.index : The spin channel index. : int32\\nresults.properties.electronic.dos_electronic.band_gap.value : The actual value of the band gap. Value of zero indicates a vanishing band gap and\\nis distinct from sources lacking any band gap measurement or calculation. : float64 : joule\\nresults.properties.electronic.dos_electronic.band_gap.type : Band gap type. : direct,indirect\\nresults.properties.electronic.dos_electronic.band_gap.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.electronic.dos_electronic_new.spin_polarized : Whether the DOS is spin-polarized, i.e. is contains channels for both\\nspin values. : bool\\nresults.properties.electronic.dos_electronic_new.has_projected : Whether the DOS has information about projections (species-, atom-, and/or orbital-\\nprojected). : bool\\nresults.properties.electronic.dos_electronic_new.data.band_gap.index : The spin channel index. : int32\\nresults.properties.electronic.dos_electronic_new.data.band_gap.value : The actual value of the band gap. Value of zero indicates a vanishing band gap and\\nis distinct from sources lacking any band gap measurement or calculation. : float64 : joule\\nresults.properties.electronic.dos_electronic_new.data.band_gap.type : Band gap type. : direct,indirect\\nresults.properties.electronic.dos_electronic_new.data.band_gap.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.electronic.band_structure_electronic.spin_polarized : Whether the band structure is spin-polarized, i.e. is contains channels\\nfor both spin values. : bool\\nresults.properties.electronic.band_structure_electronic.band_gap.index : The spin channel index. : int32\\nresults.properties.electronic.band_structure_electronic.band_gap.value : The actual value of the band gap. Value of zero indicates a vanishing band gap and\\nis distinct from sources lacking any band gap measurement or calculation. : float64 : joule\\nresults.properties.electronic.band_structure_electronic.band_gap.type : Band gap type. : direct,indirect\\nresults.properties.electronic.band_structure_electronic.band_gap.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.magnetic.spin_spin_coupling.source : Identifier for the source of the data: \\'experiment\\' or \\'simulation\\'. : experiment,simulation\\nresults.properties.magnetic.magnetic_susceptibility.source : Identifier for the source of the data: \\'experiment\\' or \\'simulation\\'. : experiment,simulation\\nresults.properties.optoelectronic.solar_cell.efficiency : Power conversion effciency of a solar cell in percentage %. : float64\\nresults.properties.optoelectronic.solar_cell.fill_factor : Fill factor of a solar cell in absolute values (from 0 to 1). : float64\\nresults.properties.optoelectronic.solar_cell.open_circuit_voltage : Open circuit voltage of a solar cell. : float64 : volt\\nresults.properties.optoelectronic.solar_cell.short_circuit_current_density : Short circuit current density of a solar cell. : float64 : ampere / meter ** 2\\nresults.properties.optoelectronic.solar_cell.illumination_intensity : The light intensity during the IV measurement. : float64 : watt / meter ** 2\\nresults.properties.optoelectronic.solar_cell.device_area : The total area of the cell during IV and stability measurements under illumination. : float64 : meter ** 2\\nresults.properties.optoelectronic.solar_cell.device_architecture : Device architecture of the solar cell. Examples are:\\n`pn-Heterojunction`, `pin`, `nip`, ... : str\\nresults.properties.optoelectronic.solar_cell.device_stack : Layers of the entire device. : str\\nresults.properties.optoelectronic.solar_cell.absorber : Absorber layers used in the solar cell. : str\\nresults.properties.optoelectronic.solar_cell.absorber_fabrication : Technique describing the fabrication of the absorber layer. Examples are:\\n`Spin-coating`, `Evaporation`, `Doctor blading`, ... : str\\nresults.properties.optoelectronic.solar_cell.electron_transport_layer : Electron selective contact layers used in the solar cell. : str\\nresults.properties.optoelectronic.solar_cell.hole_transport_layer : Hole selective contact layers used in the solar cell. : str\\nresults.properties.optoelectronic.solar_cell.substrate : Substrate layers used in the solar cell. : str\\nresults.properties.optoelectronic.solar_cell.back_contact : Back contact layers used in the solar cell. : str\\nresults.properties.catalytic.reaction.name : Name of the catalytic test reaction. : str\\nresults.properties.catalytic.reaction.type : Classification of the catalytic test reaction such as Oxidation, Hydrogenation,\\nIsomerization, Coupling... : str\\nresults.properties.catalytic.reaction.reactants.name : IUPAC name of the reagent. : str\\nresults.properties.catalytic.reaction.reactants.gas_concentration_in : Volumetric concentration (fraction) of the reagent in the feed gas.\\nShould be a value between 0 and 1. : float64\\nresults.properties.catalytic.reaction.reactants.gas_concentration_out : Volumetric concentration (fraction) of the reagent after the reactor.\\nShould be a value between 0 and 1. : float64\\nresults.properties.catalytic.reaction.reactants.conversion : Conversion of the reactant, in %. : float64\\nresults.properties.catalytic.reaction.products.name : Name of the product, preferably the IUPAC name. : str\\nresults.properties.catalytic.reaction.products.gas_concentration_in : Volumetric concentration (fraction) of the reagent in the feed gas.\\nShould be a value between 0 and 1. : float64\\nresults.properties.catalytic.reaction.products.gas_concentration_out : Volumetric concentration (fraction) of the reagent after the reactor.\\nShould be a value between 0 and 1. : float64\\nresults.properties.catalytic.reaction.products.selectivity : Selectivity of the product, in %. : float64\\nresults.properties.catalytic.reaction.products.space_time_yield : Space-time-yield of the product, in mass product per mass catalyst per time. : float64 : 1 / second\\nresults.properties.catalytic.reaction.rates.name : IUPAC name of the reagent whose rate is captured. : str\\nresults.properties.catalytic.reaction.rates.reaction_rate : The rate of the number of reactant or product molecules converted/produced,\\nper mass of total catalyst, per time. : float64 : mole / gram / second\\nresults.properties.catalytic.reaction.rates.specific_mass_rate : The specific rate of the reactant, per mass of active catalyst component\\n(e.g. metal). : float64 : mole / gram / second\\nresults.properties.catalytic.reaction.rates.specific_surface_area_rate : The specific rate of the reactant, per surface area of active catalyst. : float64 : mole / meter ** 2 / second\\nresults.properties.catalytic.reaction.rates.turnover_frequency : The turnover frequency, calculated from mol of reactant or product per\\nnumber of sites over time. : float64 : 1 / second\\nresults.properties.catalytic.reaction.reaction_conditions.temperature : The reaction temperature(s) in the catalytic reactor during a chemical reaction. : float64 : kelvin\\nresults.properties.catalytic.reaction.reaction_conditions.pressure : The pressure during the catalytic test reaction. : float64 : pascal\\nresults.properties.catalytic.reaction.reaction_conditions.weight_hourly_space_velocity : The weight hourly space velocity in 1/time (gas flow per catalyst mass). : float64 : milliliter / gram / second\\nresults.properties.catalytic.reaction.reaction_conditions.gas_hourly_space_velocity : The gas hourly space velocity in 1/time (gas flow per catalyst volume). : float64 : 1 / second\\nresults.properties.catalytic.reaction.reaction_conditions.flow_rate : The volumetric gas flow in volume per time. : float64 : meter ** 3 / second\\nresults.properties.catalytic.reaction.reaction_conditions.time_on_stream : The time on stream of the catalyst in the catalytic reaction. : float64 : second\\nresults.properties.catalytic.reaction.reaction_mechanism.initial_states : The names of reactants of the reaction or elementary step. : str\\nresults.properties.catalytic.reaction.reaction_mechanism.final_states : The names of products of the reaction or elementary step. : str\\nresults.properties.catalytic.reaction.reaction_mechanism.reaction_enthalpy : The reaction enthalpy of the reaction or reaction step. : float64 : joule\\nresults.properties.catalytic.reaction.reaction_mechanism.activation_energy : The (apparent) activation energy of the catalyzed reaction or reaction step. : float64 : joule\\nresults.properties.catalytic.catalyst.catalyst_name : Custom name of catalyst. : str\\nresults.properties.catalytic.catalyst.preparation_method : The main preparation method of the catalyst sample. : str\\nresults.properties.catalytic.catalyst.catalyst_type : The type of catalyst, wether metal or oxide, model, bulk, supported, ect.\\nMultiple values can apply. : str\\nresults.properties.catalytic.catalyst.characterization_methods : A list of methods used to characterize the catalyst sample. : str\\nresults.properties.catalytic.catalyst.surface_area : The surface area per catalyst mass. : float64 : meter ** 2 / gram\\nresults.properties.mechanical.energy_volume_curve.type :   : birch_euler,birch_lagrange,birch_murnaghan,mie_gruneisen,murnaghan,pack_evans_james,pourier_tarantola,raw,tait,vinet\\nresults.properties.mechanical.bulk_modulus.type : Describes the methodology for obtaining the value. : birch_euler,birch_lagrange,birch_murnaghan,mie_gruneisen,murnaghan,pack_evans_james,pourier_tarantola,reuss_average,tait,vinet,voigt_average,voigt_reuss_hill_average\\nresults.properties.mechanical.bulk_modulus.value : Bulk modulus value. : float64 : pascal\\nresults.properties.mechanical.shear_modulus.type : Describes the methodology for obtaining the value. : reuss_average,voigt_average,voigt_reuss_hill_average\\nresults.properties.mechanical.shear_modulus.value : Shear modulus value. : float64 : pascal\\nresults.properties.thermodynamic.trajectory.available_properties : Subset of the property names that are present in this trajectory. : energy_potential,pressure,temperature,volume\\nresults.properties.thermodynamic.trajectory.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.thermodynamic.trajectory.provenance.molecular_dynamics.time_step : The timestep at which the numerical integration is performed. : float64 : second\\nresults.properties.thermodynamic.trajectory.provenance.molecular_dynamics.ensemble_type : The type of thermodynamic ensemble that was simulated.\\n\\nAllowed values are:\\n\\n| Thermodynamic Ensemble          | Description                               |\\n\\n| ---------------------- | ----------------------------------------- |\\n\\n| `\"NVE\"`           | Constant number of particles, volume, and energy |\\n\\n| `\"NVT\"`           | Constant number of particles, volume, and temperature |\\n\\n| `\"NPT\"`           | Constant number of particles, pressure, and temperature |\\n\\n| `\"NPH\"`           | Constant number of particles, pressure, and enthalpy | : NPH,NPT,NVE,NVT\\nresults.properties.spectroscopic.spectra.type : Identifier for the methodology done to obtain the spectra data: EELS, XAS, XPS, etc. : EELS,EXAFS,RXIS,XANES,XAS,XES,XPS,unavailable\\nresults.properties.spectroscopic.spectra.label : Identifier for the source of the spectra data, either \\'computation\\' or \\'experiment\\'. : computation,experiment\\nresults.properties.spectroscopic.spectra.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.spectroscopic.spectra.provenance.eels.detector_type : Detector type. : str\\nresults.properties.spectroscopic.spectra.provenance.eels.resolution : Energy resolution of the detector. : float64 : joule\\nresults.properties.spectroscopic.spectra.provenance.eels.max_energy : Maximum energy of the detector. : float64 : joule\\nresults.properties.spectroscopic.spectra.provenance.eels.min_energy : Minimum energy of the detector. : float64 : joule\\nresults.properties.spectroscopic.spectra.provenance.electronic_structure.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.geometry_optimization.convergence_tolerance_energy_difference : The input energy difference tolerance criterion. : float64 : joule\\nresults.properties.geometry_optimization.convergence_tolerance_force_maximum : The input maximum net force tolerance criterion. : float64 : newton\\nresults.properties.geometry_optimization.final_force_maximum : The maximum net force in the last optimization step. : float64 : newton\\nresults.properties.geometry_optimization.final_energy_difference : The difference in the energy_total between the last two steps during\\noptimization. : float64 : joule\\nresults.properties.geometry_optimization.final_displacement_maximum : The maximum displacement in the last optimization step with respect to previous. : float64 : meter\\nresults.eln.sections : The type of sections used in entries to search for. By default these are the names\\nof the used section definitions. : str\\nresults.eln.tags : Short tags that are useful to quickly search based on various\\nuser defined criteria. : str\\nresults.eln.names : Short human readable and descriptive names that appear in\\nELN entries. : str\\nresults.eln.descriptions : \\'Human descriptions that appear in ELN entries. : str\\nresults.eln.instruments : The name or type of instrument used in an activity, e.g. process or\\nmeasurement. : str\\nresults.eln.methods : The name or the applied method in an activity, e.g. process or measurement : str\\nresults.eln.lab_ids : The laboratory specific id for any item, e.g. sample, chemical, instrument. : str\\nresults.material : Section containing information on the material composition and structure. : None\\nresults.material.elemental_composition : Section containing information about the concentration of an element,\\n        given by its atomic and mass fraction within the system or material. : None\\nresults.material.symmetry : Section containing information about the symmetry of the material. All\\n        of these properties are derived by running a symmetry analysis on a\\n        representative geometry from the original data. This original geometry\\n        is stored in results.properties together with the primitive and\\n        conventional structures. : None\\nresults.material.topology : Describes a a structural part that has been identified within the entry.\\n        May be related to other systems. : None\\nresults.material.topology.atoms : Describes the atomic structure of the physical system. This includes the atom positions, lattice vectors, etc. : None\\nresults.material.topology.elemental_composition : Section containing information about the concentration of an element,\\n        given by its atomic and mass fraction within the system or material. : None\\nresults.material.topology.system_relation : Contains information about the relation between two different systems. : None\\nresults.material.topology.cell : Properties of a unit cell. : None\\nresults.material.topology.symmetry : Section containing information about the symmetry properties of a\\n        conventional cell related to a system. : None\\nresults.material.topology.symmetry.wyckoff_sets : Section for storing Wyckoff set information. Only available for\\n        conventional cells that have undergone symmetry analysis. : None\\nresults.material.topology.metal_coordination : Coordination number of an element, which represents the number of atoms directly bonded to the element. : None\\nresults.material.topology.active_orbitals :   : None\\nresults.method : Contains a summary of the methodology that has been used in this entry.\\n        This methodology applies to all of the reported properties and\\n        determines the result of a single energy evalution. The individual\\n        properties may be further methodological details affect e.g. the\\n        sampling. : None\\nresults.method.simulation : Contains method details for a simulation entry. : None\\nresults.method.simulation.dft : Methodology for a DFT calculation. : None\\nresults.method.simulation.dft.hubbard_kanamori_model : Setup of the Hubbard model used in DFT+U : None\\nresults.method.simulation.tb : Methodology for a Tight-Binding calculation. : None\\nresults.method.simulation.gw : Methodology for a GW calculation. : None\\nresults.method.simulation.bse : Methodology for a BSE calculation. : None\\nresults.method.simulation.dmft : Methodology for a DMFT calculation. : None\\nresults.method.simulation.quantum_cms :   : None\\nresults.method.simulation.quantum_cms.quantum_circuit :   : None\\nresults.method.simulation.precision : Contains parameters for controlling or evaluating the convergence of the electronic structure. : None\\nresults.method.measurement : Contains method details for a measurement entry. : None\\nresults.method.measurement.xrd : Methodology for an X-Ray Diffraction measurement. : None\\nresults.properties : Contains the physical properties that have been calculated or used in\\n        this entry. : None\\nresults.properties.structural : Structural properties. : None\\nresults.properties.structural.radial_distribution_function : Radial distribution function. : None\\nresults.properties.structural.radial_distribution_function.provenance : Contains provenance information for properties derived from molecular\\n        dynamics simulations. : None\\nresults.properties.structural.radial_distribution_function.provenance.molecular_dynamics : Methodology for molecular dynamics. : None\\nresults.properties.structural.radius_of_gyration : Contains Radius of Gyration values as a trajectory. : None\\nresults.properties.structural.radius_of_gyration.provenance : Contains provenance information for properties derived from molecular\\n        dynamics simulations. : None\\nresults.properties.structural.radius_of_gyration.provenance.molecular_dynamics : Methodology for molecular dynamics. : None\\nresults.properties.structural.diffraction_pattern : Diffraction pattern. : None\\nresults.properties.dynamical : Dynamical properties. : None\\nresults.properties.dynamical.mean_squared_displacement : Mean Squared Displacements. : None\\nresults.properties.dynamical.mean_squared_displacement.provenance : Contains provenance information for properties derived from molecular\\n        dynamics simulations. : None\\nresults.properties.dynamical.mean_squared_displacement.provenance.molecular_dynamics : Methodology for molecular dynamics. : None\\nresults.properties.structures : Contains full atomistic representations of the material in different\\n        forms. : None\\nresults.properties.structures.structure_original : Describes an atomistic structure. : None\\nresults.properties.structures.structure_original.species : Used to describe the species of the sites of this structure. Species can be pure chemical elements, or virtual-crystal atoms representing a statistical occupation of a\\ngiven site by multiple chemical elements. : None\\nresults.properties.structures.structure_original.lattice_parameters : Lattice parameters of a cell. : None\\nresults.properties.structures.structure_original.wyckoff_sets : Section for storing Wyckoff set information. Only available for\\n        conventional cells that have undergone symmetry analysis. : None\\nresults.properties.structures.structure_conventional : Describes an atomistic structure. : None\\nresults.properties.structures.structure_conventional.species : Used to describe the species of the sites of this structure. Species can be pure chemical elements, or virtual-crystal atoms representing a statistical occupation of a\\ngiven site by multiple chemical elements. : None\\nresults.properties.structures.structure_conventional.lattice_parameters : Lattice parameters of a cell. : None\\nresults.properties.structures.structure_conventional.wyckoff_sets : Section for storing Wyckoff set information. Only available for\\n        conventional cells that have undergone symmetry analysis. : None\\nresults.properties.structures.structure_primitive : Describes an atomistic structure. : None\\nresults.properties.structures.structure_primitive.species : Used to describe the species of the sites of this structure. Species can be pure chemical elements, or virtual-crystal atoms representing a statistical occupation of a\\ngiven site by multiple chemical elements. : None\\nresults.properties.structures.structure_primitive.lattice_parameters : Lattice parameters of a cell. : None\\nresults.properties.structures.structure_primitive.wyckoff_sets : Section for storing Wyckoff set information. Only available for\\n        conventional cells that have undergone symmetry analysis. : None\\nresults.properties.vibrational : Vibrational properties. : None\\nresults.properties.vibrational.band_structure_phonon : This section stores information on a vibrational band structure\\n        evaluation along one-dimensional pathways in the reciprocal space. : None\\nresults.properties.vibrational.dos_phonon : Contains the phonon density of states. : None\\nresults.properties.vibrational.heat_capacity_constant_volume : Contains the values of the specific (per mass) and isochoric (constant\\n        volume) heat capacity at different temperatures. : None\\nresults.properties.vibrational.energy_free_helmholtz : Contains the values of the Helmholtz free energy per atom at constant\\n        volume and at different temperatures. : None\\nresults.properties.electronic : Electronic properties. : None\\nresults.properties.electronic.band_gap :   : None\\nresults.properties.electronic.band_gap.provenance :  : None\\nresults.properties.electronic.dos_electronic : Contains the total electronic density of states.\\n\\n        OLD VERSION: it will eventually be deprecated. : None\\nresults.properties.electronic.dos_electronic.band_gap :   : None\\nresults.properties.electronic.dos_electronic.band_gap.provenance : Contains semantically labelled provenance information.\\n        To be stored under PropertySection.provenance or children. : None\\nresults.properties.electronic.dos_electronic_new : Contains the electronic Density of States (DOS). This section can be repeated to refer to\\n        different methodologies (e.g., label = \\'DFT\\', \\'GW\\', \\'TB\\', etc.), and it can be spin-polarized\\n        or not. The sub-section data points to each (if present) spin channels. : None\\nresults.properties.electronic.dos_electronic_new.data : Section containign the density of states data.\\n\\n        It includes the total DOS and the projected DOS values. We differentiate `species_projected` as the\\n        projected DOS for same atomic species, `atom_projected` as the projected DOS for different\\n        atoms in the cell, and `orbital_projected` as the projected DOS for the orbitals of each\\n        atom. : None\\nresults.properties.electronic.dos_electronic_new.data.band_gap :   : None\\nresults.properties.electronic.dos_electronic_new.data.band_gap.provenance : Contains semantically labelled provenance information.\\n        To be stored under PropertySection.provenance or children. : None\\nresults.properties.electronic.band_structure_electronic : This section stores information on a electonic band structure\\n        evaluation along one-dimensional pathways in the reciprocal space. : None\\nresults.properties.electronic.band_structure_electronic.band_gap :   : None\\nresults.properties.electronic.band_structure_electronic.band_gap.provenance : Contains semantically labelled provenance information.\\n        To be stored under PropertySection.provenance or children. : None\\nresults.properties.electronic.greens_functions_electronic : Base class for Green\\'s functions information. : None\\nresults.properties.electronic.electric_field_gradient : Base class for the electric field gradient information. This section is relevant\\n        for NMR and describes the potential generated my the nuclei in the system. : None\\nresults.properties.magnetic : Magnetic properties. : None\\nresults.properties.magnetic.magnetic_shielding : Base class for the atomic magnetic shielding information. : None\\nresults.properties.magnetic.spin_spin_coupling : Base class for the spin-spin coupling information. : None\\nresults.properties.magnetic.magnetic_susceptibility : Base class for the magnetic susceptibility information. : None\\nresults.properties.optoelectronic : Optoelectronic properties. : None\\nresults.properties.optoelectronic.solar_cell : Properties of solar cells. : None\\nresults.properties.catalytic : Properties relating to catalysis. : None\\nresults.properties.catalytic.reaction : A collection of specifications and properties of a full catalytic reaction.\\n        This may include reaction conditions, results and mechanistic aspects of a reaction. : None\\nresults.properties.catalytic.reaction.reactants : A reactant in a catalytic test reaction. A reactant\\n        is identified by having a conversion. : None\\nresults.properties.catalytic.reaction.products : A product of a catalytic reaction. A product here is usually identified by having\\n        a selectivity, or a gas_concentration_out but no/zero gas_concentration_in. : None\\nresults.properties.catalytic.reaction.rates : Section bundling multiple representations of catalytic reaction rates. : None\\nresults.properties.catalytic.reaction.reaction_conditions : Conditions under which a catalytic test reaction was performed. : None\\nresults.properties.catalytic.reaction.reaction_mechanism : Properties of single steps of a catalytic reaction mechanism. : None\\nresults.properties.catalytic.catalyst : Properties of a heterogeneous catalyst. : None\\nresults.properties.mechanical : Mechanical properties. : None\\nresults.properties.mechanical.energy_volume_curve : Energy volume curve. : None\\nresults.properties.mechanical.bulk_modulus : Contains bulk modulus values calculated with different methodologies. : None\\nresults.properties.mechanical.shear_modulus : Contains shear modulus values calculated with different methodologies. : None\\nresults.properties.thermodynamic : Thermodynamic properties. : None\\nresults.properties.thermodynamic.trajectory : Thermodynamic properties reported for an ensemble evolving in time. : None\\nresults.properties.thermodynamic.trajectory.provenance : Contains provenance information for properties derived from molecular\\n        dynamics simulations. : None\\nresults.properties.thermodynamic.trajectory.provenance.molecular_dynamics : Methodology for molecular dynamics. : None\\nresults.properties.thermodynamic.trajectory.temperature : Contains temperature values evaluated at different times. : None\\nresults.properties.thermodynamic.trajectory.pressure : Contains pressure values evaluated at different times. : None\\nresults.properties.thermodynamic.trajectory.volume : Contains volume values evaluated at different times. : None\\nresults.properties.thermodynamic.trajectory.energy_potential : Contains energy values evaluated at different times. : None\\nresults.properties.spectroscopic : Spectroscopic properties. : None\\nresults.properties.spectroscopic.spectra : Base class for Spectra calculation information as obtained from an experiment or a computation. : None\\nresults.properties.spectroscopic.spectra.provenance : Contains provenance information (mainly the methodology section) for spectra properties\\n        derived from an experiment or a calculation. : None\\nresults.properties.spectroscopic.spectra.provenance.eels : Base class for the EELS methodology. : None\\nresults.properties.spectroscopic.spectra.provenance.electronic_structure :  : None\\nresults.properties.geometry_optimization : Geometry optimization results and settings. : None\\nresults.eln :   : None\\n<|eot_id|><|start_header_id|>user<|end_header_id|>\\n\\nRetrieve entries of aluminum nitride in a wurtzite structure.<|eot_id|><|start_header_id|>assistant<|end_header_id|>', prompt_token_ids=[128000, 128000, 128006, 9125, 128007, 271, 2675, 527, 459, 18328, 10695, 3932, 2778, 98811, 1846, 264, 32009, 8198, 4729, 13, 1472, 617, 30903, 323, 7384, 8198, 6677, 13, 4718, 3465, 374, 311, 1893, 264, 2778, 6464, 369, 5933, 4221, 2778, 20126, 555, 3932, 13, 720, 2675, 527, 2728, 279, 9959, 2778, 5151, 323, 872, 28887, 439, 836, 551, 4096, 551, 279, 828, 955, 477, 279, 1160, 315, 7773, 220, 2819, 369, 279, 2115, 551, 10309, 5089, 315, 279, 907, 627, 2746, 279, 828, 955, 374, 330, 4155, 1, 279, 2115, 649, 1193, 387, 1511, 304, 279, 330, 31548, 1385, 1, 2115, 311, 1817, 1202, 14209, 13, 3234, 539, 1005, 433, 439, 264, 2778, 2115, 627, 35, 546, 3645, 433, 1139, 19844, 46658, 3645, 320, 78125, 1005, 1845, 11, 2011, 11, 3878, 8, 4619, 1005, 279, 98811, 1846, 5446, 3645, 13, 720, 7456, 3041, 279, 3024, 24001, 3319, 912, 16540, 374, 4460, 627, 1489, 374, 24001, 439, 48095, 33858, 13, 720, 10464, 1521, 28231, 311, 3645, 279, 3319, 512, 262, 682, 25, 45189, 682, 2819, 304, 1160, 311, 2489, 198, 262, 904, 25, 62354, 422, 904, 907, 304, 1160, 9248, 320, 2309, 340, 262, 7000, 25, 45189, 7000, 315, 279, 2819, 311, 2489, 198, 262, 326, 668, 11, 26237, 11, 342, 668, 11, 26220, 25, 16842, 36595, 369, 25031, 5151, 11187, 35, 546, 1005, 330, 543, 1, 439, 279, 1176, 2115, 627, 12281, 8316, 1405, 279, 2115, 706, 264, 5300, 5089, 627, 10464, 330, 8234, 24585, 8947, 2508, 2981, 794, 330, 10754, 37, 1, 369, 9501, 17808, 12914, 20126, 271, 6014, 25599, 25, 8298, 851, 551, 578, 26048, 323, 31550, 5016, 13110, 369, 279, 8298, 315, 279, 4441, 551, 610, 198, 6248, 1292, 551, 578, 1217, 3984, 8298, 836, 551, 610, 198, 6248, 8827, 3084, 551, 578, 2457, 323, 892, 994, 279, 8298, 574, 3549, 304, 9859, 329, 551, 9859, 329, 41748, 467, 831, 2245, 1857, 920, 28762, 198, 4177, 851, 551, 362, 26048, 323, 31550, 5016, 13110, 369, 279, 4441, 551, 610, 198, 4177, 1292, 551, 362, 10015, 3823, 34898, 836, 369, 279, 4441, 13, 551, 610, 198, 4177, 1292, 39643, 551, 362, 10015, 3823, 34898, 836, 369, 279, 4441, 13, 551, 610, 198, 4177, 1857, 551, 578, 1925, 11036, 7419, 13, 1115, 374, 279, 836, 315, 279, 3857, 1511, 369, 828, 13, 551, 610, 198, 27684, 851, 551, 38987, 2115, 836, 11, 1005, 1595, 4177, 851, 63, 4619, 13, 551, 610, 198, 4177, 8827, 3084, 551, 578, 2457, 323, 892, 994, 279, 4441, 574, 3549, 304, 9859, 329, 551, 9859, 329, 41748, 467, 831, 2245, 1857, 920, 28762, 198, 9854, 1292, 551, 578, 98811, 1846, 6871, 1511, 369, 279, 1566, 8863, 551, 610, 198, 3902, 1213, 551, 578, 1853, 311, 279, 1925, 1213, 505, 279, 3789, 6352, 315, 279, 23700, 3626, 551, 610, 198, 3902, 1213, 3960, 551, 578, 1853, 311, 279, 1925, 1213, 505, 279, 3789, 6352, 315, 279, 23700, 3626, 551, 610, 198, 3902, 1213, 3173, 551, 5422, 1511, 311, 54263, 1990, 2204, 353, 3124, 10925, 9, 315, 459, 4441, 627, 2520, 2748, 10925, 323, 10925, 430, 656, 539, 617, 904, 2911, 11, 279, 907, 1288, 198, 1395, 4384, 13, 551, 610, 198, 3902, 1213, 3173, 3960, 551, 5422, 1511, 311, 54263, 1990, 2204, 353, 3124, 10925, 9, 315, 459, 4441, 627, 2520, 2748, 10925, 323, 10925, 430, 656, 539, 617, 904, 2911, 11, 279, 907, 1288, 198, 1395, 4384, 13, 551, 610, 198, 1342, 10947, 17096, 551, 31911, 1495, 8970, 430, 1288, 387, 6646, 994, 198, 45359, 1949, 1495, 20126, 369, 10925, 13, 551, 610, 198, 7346, 551, 578, 13006, 311, 279, 3626, 2949, 279, 8298, 430, 9352, 311, 420, 4441, 627, 2460, 3626, 2949, 279, 1890, 6352, 439, 279, 4441, 596, 1925, 1213, 527, 6646, 279, 198, 12249, 35546, 3626, 430, 9352, 311, 279, 4441, 13, 551, 610, 198, 7346, 3960, 551, 578, 13006, 311, 279, 3626, 2949, 279, 8298, 430, 9352, 311, 420, 4441, 627, 2460, 3626, 2949, 279, 1890, 6352, 439, 279, 4441, 596, 1925, 1213, 527, 6646, 279, 198, 12249, 35546, 3626, 430, 9352, 311, 279, 4441, 13, 551, 610, 198, 10629, 551, 578, 5016, 11, 95659, 85969, 11, 7698, 36871, 430, 574, 1511, 304, 279, 20160, 198, 45, 1937, 1846, 3623, 36, 13, 1102, 6276, 311, 9006, 36106, 315, 279, 2362, 98811, 1846, 3623, 36, 27475, 13, 551, 610, 198, 1059, 851, 551, 578, 2082, 3230, 13110, 28532, 505, 279, 4441, 596, 7257, 3626, 555, 279, 6871, 345, 333, 7396, 13, 551, 610, 198, 21591, 851, 551, 362, 1217, 3984, 9434, 887, 13, 34067, 279, 887, 369, 459, 4441, 304, 459, 9434, 4729, 198, 2940, 279, 828, 574, 25973, 505, 13, 551, 610, 198, 33966, 551, 45367, 422, 279, 4441, 374, 4756, 551, 1845, 198, 28602, 3084, 551, 578, 2457, 323, 892, 994, 279, 8298, 574, 4756, 304, 9859, 329, 551, 9859, 329, 41748, 467, 831, 2245, 1857, 920, 28762, 198, 4291, 57964, 12359, 551, 2314, 10297, 422, 420, 4441, 374, 1234, 459, 48702, 551, 1845, 198, 35122, 551, 45367, 430, 279, 4441, 374, 7946, 15590, 13, 551, 1845, 198, 4354, 59309, 3084, 551, 578, 2457, 323, 892, 315, 279, 1566, 8863, 13, 551, 9859, 329, 41748, 467, 831, 2245, 1857, 920, 28762, 198, 21315, 20808, 551, 40356, 430, 10222, 2391, 8863, 551, 610, 198, 17101, 329, 9625, 551, 578, 98811, 1846, 2373, 1511, 369, 279, 1566, 8863, 551, 610, 198, 17101, 329, 37446, 551, 578, 98811, 1846, 5379, 1511, 369, 279, 1566, 8863, 551, 610, 198, 6313, 551, 362, 1217, 3984, 4068, 369, 420, 4441, 551, 610, 198, 37009, 551, 2724, 3984, 15407, 320, 3222, 82, 8, 369, 420, 4441, 551, 610, 198, 21591, 8856, 551, 578, 12827, 477, 9434, 4729, 1405, 279, 4113, 828, 54068, 551, 20479, 9628, 43225, 98952, 2956, 5464, 44754, 88, 2117, 71424, 1289, 10199, 11, 61612, 5907, 75449, 48, 6204, 11, 791, 3700, 869, 4991, 635, 10199, 5907, 198, 8781, 551, 362, 2875, 3823, 34898, 4096, 315, 279, 10925, 6371, 13, 34067, 433, 374, 279, 198, 8355, 315, 459, 9434, 4729, 98648, 477, 279, 836, 315, 279, 1925, 3229, 13, 551, 610, 198, 3902, 23790, 2710, 551, 256, 551, 610, 198, 3902, 23790, 2710, 2858, 551, 256, 551, 610, 198, 3902, 23790, 3405, 851, 551, 578, 5016, 11, 26048, 1401, 89851, 24628, 551, 610, 198, 3902, 23790, 551, 578, 1925, 3229, 315, 279, 4441, 551, 2724, 198, 48105, 2710, 551, 256, 551, 610, 198, 48105, 2710, 2858, 551, 256, 551, 610, 198, 48105, 551, 2052, 12283, 320, 3902, 3229, 323, 1080, 34603, 1105, 8, 551, 7030, 198, 62712, 2710, 551, 256, 551, 610, 198, 62712, 2710, 2858, 551, 256, 551, 610, 198, 62712, 3405, 851, 551, 578, 5016, 11, 26048, 1401, 89851, 24628, 551, 610, 198, 62712, 551, 2052, 16483, 320, 3902, 3229, 11, 8298, 1080, 48105, 8, 551, 2724, 198, 18688, 21833, 551, 35680, 449, 3350, 2680, 39838, 1080, 3170, 5315, 570, 551, 610, 198, 1068, 388, 2710, 551, 256, 551, 610, 198, 1068, 388, 2710, 2858, 551, 256, 551, 610, 198, 1068, 388, 3405, 851, 551, 578, 5016, 11, 26048, 1401, 89851, 24628, 551, 610, 198, 1068, 388, 551, 2052, 22511, 320, 3902, 3229, 11, 8298, 1080, 48105, 11, 323, 60138, 8, 551, 2724, 198, 48722, 21833, 551, 35680, 449, 1373, 2680, 39838, 1080, 3170, 5315, 489, 56614, 5315, 570, 551, 610, 198, 66646, 25600, 851, 551, 578, 5016, 13110, 369, 420, 10550, 439, 264, 925, 13, 1102, 1288, 387, 198, 64, 27716, 8066, 24628, 11, 4528, 311, 1023, 9859, 329, 14483, 13, 551, 610, 198, 66646, 25600, 1292, 551, 578, 3823, 84318, 836, 315, 279, 10550, 439, 925, 13, 578, 10550, 836, 2011, 387, 198, 9782, 369, 279, 1217, 13, 551, 610, 198, 66646, 962, 6870, 551, 578, 10309, 12051, 3075, 35721, 320, 91092, 8, 5938, 449, 420, 10550, 627, 37412, 329, 649, 4254, 9503, 3957, 430, 2723, 1203, 311, 279, 20081, 13340, 315, 198, 1820, 10550, 304, 279, 9859, 329, 3774, 13, 1115, 12472, 10187, 279, 925, 13340, 315, 198, 576, 59670, 13, 2684, 374, 1193, 832, 824, 10550, 13, 578, 59670, 374, 1120, 279, 59670, 836, 11, 539, 1202, 198, 9054, 5665, 11, 384, 1326, 13, 330, 605, 13, 11123, 5332, 9809, 316, 329, 14, 679, 24, 13, 605, 13, 1682, 12, 16, 3343, 551, 610, 198, 66646, 25600, 8827, 3084, 551, 578, 2457, 994, 279, 10550, 574, 1176, 3549, 13, 551, 9859, 329, 41748, 467, 831, 2245, 1857, 920, 28762, 198, 66646, 25600, 38849, 3084, 551, 578, 2457, 994, 279, 10550, 574, 1566, 11041, 13, 1556, 13234, 10550, 198, 4919, 1193, 387, 11838, 1306, 264, 59670, 574, 12893, 13, 362, 7362, 10550, 4250, 387, 5614, 198, 13486, 264, 59670, 574, 12893, 13, 551, 9859, 329, 41748, 467, 831, 2245, 1857, 920, 28762, 198, 66646, 25600, 1857, 551, 578, 955, 11075, 422, 264, 10550, 374, 13234, 11, 602, 1770, 13, 574, 3549, 555, 198, 1820, 12283, 315, 279, 13282, 10925, 26, 477, 422, 264, 10550, 374, 7362, 345, 72, 1770, 13, 433, 574, 3549, 555, 4423, 539, 14647, 5552, 311, 279, 10925, 13, 551, 7362, 11, 18838, 198, 66646, 551, 362, 1160, 315, 1217, 58732, 30525, 420, 4441, 17623, 311, 13, 551, 611, 44241, 14, 845, 14, 2879, 85981, 14, 15, 198, 12482, 551, 578, 3769, 8198, 8106, 551, 294, 728, 11, 12116, 10337, 24590, 198, 77, 54446, 1385, 551, 5742, 315, 2322, 467, 831, 33776, 16051, 505, 279, 4441, 13, 551, 528, 198, 31548, 1385, 551, 2052, 33776, 430, 527, 1511, 555, 420, 4441, 13, 551, 610, 198, 31548, 1385, 3960, 551, 2052, 33776, 430, 527, 1511, 555, 420, 4441, 13, 551, 610, 198, 25686, 551, 2052, 14491, 430, 527, 3118, 304, 420, 4441, 13, 1115, 2115, 374, 32690, 323, 690, 387, 7108, 13, 551, 610, 198, 19680, 1037, 29377, 551, 35975, 315, 279, 2204, 5540, 3118, 304, 279, 6070, 13, 551, 6515, 11, 9219, 11, 2149, 11, 6219, 11, 7098, 11, 2170, 11, 1688, 15381, 84, 8324, 8324, 64, 11, 3513, 8324, 71, 8324, 72, 8324, 74, 11, 6971, 11541, 11541, 64, 11541, 67, 11541, 68, 11541, 69, 11, 5176, 11541, 76, 11541, 77, 11, 7489, 11541, 81, 11541, 82, 11541, 84, 11, 8153, 28365, 82, 28365, 88, 11, 20027, 11, 17812, 43225, 84, 28328, 11, 6251, 11, 3968, 28328, 76, 11, 23376, 38406, 64, 38406, 67, 11, 9688, 44639, 11, 1548, 44639, 69, 44639, 70, 44639, 78, 44639, 82, 38868, 11, 644, 38868, 81, 44754, 44754, 81, 11, 8921, 31214, 72, 31214, 81, 31214, 84, 31214, 85, 11, 26353, 28112, 67, 28112, 70, 28112, 77, 11, 26694, 28112, 83, 22812, 11, 16589, 22812, 65, 22812, 67, 11, 8989, 22812, 71, 22812, 72, 86176, 22812, 79, 75449, 75449, 70, 11, 29967, 28494, 11, 20908, 28494, 65, 28494, 67, 28494, 76, 28494, 78, 11, 3617, 28494, 83, 28494, 84, 24412, 64, 24412, 65, 11, 697, 24412, 69, 24412, 70, 24412, 71, 24412, 77, 24412, 84, 21861, 21861, 65, 11, 3407, 11, 1542, 21861, 70, 21861, 72, 11, 10902, 11, 21380, 21861, 81, 20594, 64, 20594, 65, 20594, 66, 11, 6777, 70980, 20594, 72, 20594, 75, 20594, 76, 20594, 82, 51581, 41054, 50640, 30341, 30341, 68, 30533, 30533, 65, 51932, 77, 51932, 81, 198, 19680, 1037, 23456, 91555, 551, 5742, 315, 2204, 5540, 304, 279, 6070, 439, 459, 7698, 13, 551, 528, 198, 19680, 1037, 29377, 71575, 3614, 551, 40502, 49892, 315, 2204, 5540, 304, 279, 6070, 13, 551, 2273, 198, 19680, 1037, 13, 32056, 64969, 16145, 41419, 551, 578, 11742, 15150, 369, 264, 6070, 439, 264, 925, 304, 264, 1376, 12146, 555, 279, 5446, 198, 14706, 13, 551, 610, 198, 19680, 1037, 13, 32056, 64969, 1311, 54478, 551, 578, 11293, 11742, 15150, 369, 264, 6070, 439, 264, 925, 449, 2449, 18210, 323, 198, 11924, 11742, 21801, 5219, 13, 578, 21801, 1396, 28832, 387, 40542, 422, 433, 374, 220, 16, 13, 551, 610, 198, 19680, 1037, 13, 32056, 64969, 1552, 484, 551, 578, 11742, 15150, 369, 264, 6070, 304, 8270, 1376, 449, 2449, 18210, 8272, 555, 198, 11924, 11742, 21801, 5219, 13, 578, 21801, 1396, 28832, 387, 40542, 422, 433, 374, 220, 16, 13, 551, 610, 198, 19680, 1037, 13, 32056, 64969, 12277, 9956, 551, 578, 22939, 15150, 374, 279, 11742, 64969, 1311, 54478, 11, 719, 1405, 279, 5540, 527, 198, 65937, 1176, 11713, 555, 872, 11742, 21801, 1396, 11, 323, 1243, 11, 304, 2015, 2163, 311, 198, 1315, 11, 12860, 555, 22939, 18210, 362, 11, 426, 11, 356, 11, 61453, 1901, 11, 362, 64, 11, 14659, 11, 61453, 65808, 11, 3765, 11, 426, 65, 11, 2564, 323, 198, 708, 389, 13, 551, 610, 198, 19680, 1037, 1276, 19862, 292, 60799, 551, 1556, 7698, 38938, 279, 1396, 315, 39445, 15696, 304, 279, 6070, 11, 13890, 198, 998, 279, 1396, 315, 2536, 38029, 10925, 304, 13167, 9962, 13, 551, 528, 198, 19680, 1037, 53428, 3695, 551, 1556, 7698, 38938, 279, 3160, 315, 279, 95481, 25521, 38319, 3424, 13, 551, 528, 198, 19680, 1037, 68436, 15314, 551, 362, 1160, 315, 9246, 430, 5292, 902, 3361, 4519, 527, 1511, 555, 279, 6070, 382, 12, 19823, 25, 1115, 5292, 28832, 387, 3118, 422, 904, 832, 4441, 304, 279, 9606, 1160, 706, 264, 198, 32056, 56852, 1160, 430, 374, 5129, 1109, 220, 16, 2449, 627, 12, 9987, 38319, 25, 1115, 5292, 28832, 387, 3118, 422, 520, 3325, 832, 3777, 315, 279, 198, 11707, 30321, 25521, 38319, 1160, 315, 11725, 706, 907, 854, 627, 12, 62407, 25, 1115, 5292, 28832, 387, 3118, 422, 279, 62407, 1160, 374, 3118, 13, 551, 62407, 11, 4338, 1382, 11, 16476, 38319, 198, 2879, 57635, 78940, 62, 37435, 1292, 551, 578, 15337, 836, 315, 279, 18641, 3857, 13, 551, 610, 198, 2879, 57635, 78940, 851, 551, 578, 7419, 887, 315, 279, 18641, 3857, 13, 551, 610, 198, 2879, 57635, 84302, 33971, 398, 551, 1442, 279, 18641, 3857, 374, 6089, 1511, 439, 2385, 3857, 13, 551, 1845, 198, 4177, 93802, 6676, 26508, 551, 578, 2539, 2576, 1093, 5905, 315, 279, 279, 2218, 13, 551, 610, 198, 4177, 93802, 6676, 9255, 851, 551, 578, 887, 315, 279, 4441, 8649, 279, 2218, 13, 551, 610, 198, 4177, 93802, 6676, 11273, 1213, 551, 578, 1925, 1213, 315, 279, 4441, 8649, 279, 2218, 13, 551, 610, 198, 4177, 93802, 6676, 22433, 851, 551, 578, 887, 315, 279, 8298, 8649, 279, 2218, 13, 551, 610, 198, 4177, 93802, 6676, 1292, 551, 578, 836, 315, 279, 2218, 12472, 14, 2879, 13, 551, 610, 198, 4177, 93802, 6676, 2703, 551, 578, 1853, 315, 279, 2218, 12472, 14, 2879, 304, 1202, 18624, 13, 551, 610, 198, 4177, 93802, 15040, 1292, 551, 578, 836, 315, 279, 2592, 320, 726, 8, 12472, 14, 2879, 304, 1202, 18624, 13, 551, 610, 198, 4177, 93802, 15040, 2703, 551, 578, 1853, 315, 279, 2592, 320, 726, 8, 12472, 14, 2879, 304, 1202, 18624, 13, 551, 610, 198, 4177, 93802, 15040, 33197, 551, 362, 5905, 311, 279, 12472, 7419, 430, 19170, 279, 5905, 551, 610, 198, 1874, 54446, 1385, 1801, 551, 578, 2539, 13110, 369, 420, 12472, 430, 5727, 279, 1853, 304, 279, 11036, 3694, 17801, 836, 13, 551, 610, 198, 1874, 54446, 1385, 78940, 551, 362, 5905, 311, 279, 12472, 7419, 13, 551, 610, 198, 1874, 54446, 1385, 3960, 43973, 551, 8092, 315, 279, 907, 2949, 279, 18624, 13, 551, 610, 198, 1874, 54446, 1385, 29891, 3220, 551, 578, 907, 24784, 439, 459, 19844, 2777, 2115, 13, 551, 1845, 198, 1874, 54446, 1385, 9720, 3220, 551, 578, 907, 24784, 439, 459, 19844, 1495, 323, 16570, 2115, 13, 551, 610, 198, 1874, 54446, 1385, 9720, 3220, 75011, 551, 578, 907, 24784, 439, 459, 19844, 1495, 323, 16570, 2115, 13, 551, 610, 198, 1874, 54446, 1385, 6537, 3220, 551, 578, 907, 24784, 439, 459, 19844, 1317, 1396, 2115, 13, 551, 528, 198, 1874, 54446, 1385, 16304, 3220, 551, 578, 907, 24784, 439, 459, 19844, 2033, 1396, 2115, 13, 551, 2273, 198, 1874, 54446, 1385, 20296, 3220, 551, 578, 907, 24784, 439, 459, 19844, 2457, 2115, 13, 551, 9859, 329, 41748, 467, 831, 2245, 1857, 920, 28762, 198, 8234, 24585, 24585, 851, 551, 362, 8521, 3160, 11, 5016, 3769, 13110, 304, 279, 1376, 315, 264, 5286, 198, 37439, 13, 551, 610, 198, 8234, 24585, 24585, 1292, 551, 49203, 1285, 5144, 369, 420, 264, 3769, 422, 904, 649, 387, 12893, 13, 551, 610, 198, 8234, 24585, 73318, 4269, 1857, 551, 73800, 538, 11075, 505, 279, 25524, 6070, 13, 551, 220, 16, 35, 11, 17, 35, 11, 22612, 8568, 22537, 13387, 55269, 611, 10879, 11, 1962, 15590, 10900, 10730, 11, 359, 10547, 198, 8234, 24585, 77143, 2786, 551, 29023, 2786, 315, 279, 1887, 13, 1789, 19670, 4633, 6067, 420, 374, 198, 28172, 7167, 26126, 555, 1701, 279, 45982, 62987, 287, 12384, 512, 2485, 1129, 48886, 2726, 14, 605, 13, 5120, 18, 14, 67171, 37284, 43, 7211, 13, 8899, 13, 7461, 4645, 382, 91, 5273, 765, 7817, 9432, 91, 81922, 765, 14730, 21622, 9432, 91, 74011, 15, 35, 6, 63, 765, 2876, 8599, 48582, 9432, 91, 74011, 16, 35, 6, 63, 765, 26572, 2740, 8599, 304, 832, 13167, 9432, 91, 74011, 17, 35, 6, 63, 765, 26572, 2740, 8599, 304, 1403, 15696, 9432, 91, 74011, 18, 35, 6, 63, 765, 26572, 2740, 8599, 304, 2380, 15696, 765, 551, 220, 15, 35, 11, 16, 35, 11, 17, 35, 11, 18, 35, 198, 8234, 24585, 13542, 287, 7258, 551, 4497, 4839, 24790, 369, 420, 1887, 11, 602, 1770, 13, 279, 955, 315, 330, 24177, 198, 4677, 1, 433, 11105, 382, 91, 5273, 765, 7817, 9432, 91, 81922, 765, 14730, 21622, 9432, 91, 74011, 40846, 6, 63, 765, 29696, 5918, 505, 264, 5089, 2849, 430, 44694, 48582, 304, 1403, 18445, 323, 520, 3325, 11157, 11, 719, 539, 72600, 304, 264, 4948, 5216, 13, 9432, 91, 74011, 17, 35, 3769, 6, 63, 765, 29696, 5918, 505, 264, 5089, 2849, 430, 44694, 48582, 304, 1403, 18445, 323, 1193, 3131, 304, 264, 4948, 5216, 13, 9432, 91, 74011, 76, 55269, 6, 63, 765, 386, 55269, 4613, 304, 279, 5457, 19677, 45982, 9432, 91, 74011, 1677, 26429, 6, 63, 765, 3206, 26429, 4613, 304, 279, 5457, 19677, 45982, 765, 551, 220, 17, 35, 3769, 13387, 55269, 11, 1677, 26429, 10900, 10730, 198, 8234, 24585, 64361, 1857, 551, 55982, 3196, 389, 279, 16003, 6012, 13, 551, 610, 198, 8234, 24585, 40802, 801, 1857, 551, 55982, 3196, 389, 279, 11742, 15150, 13, 551, 610, 198, 8234, 24585, 29377, 551, 35975, 315, 279, 2204, 5540, 3118, 304, 279, 6070, 13, 551, 6515, 11, 9219, 11, 2149, 11, 6219, 11, 7098, 11, 2170, 11, 1688, 15381, 84, 8324, 8324, 64, 11, 3513, 8324, 71, 8324, 72, 8324, 74, 11, 6971, 11541, 11541, 64, 11541, 67, 11541, 68, 11541, 69, 11, 5176, 11541, 76, 11541, 77, 11, 7489, 11541, 81, 11541, 82, 11541, 84, 11, 8153, 28365, 82, 28365, 88, 11, 20027, 11, 17812, 43225, 84, 28328, 11, 6251, 11, 3968, 28328, 76, 11, 23376, 38406, 64, 38406, 67, 11, 9688, 44639, 11, 1548, 44639, 69, 44639, 70, 44639, 78, 44639, 82, 38868, 11, 644, 38868, 81, 44754, 44754, 81, 11, 8921, 31214, 72, 31214, 81, 31214, 84, 31214, 85, 11, 26353, 28112, 67, 28112, 70, 28112, 77, 11, 26694, 28112, 83, 22812, 11, 16589, 22812, 65, 22812, 67, 11, 8989, 22812, 71, 22812, 72, 86176, 22812, 79, 75449, 75449, 70, 11, 29967, 28494, 11, 20908, 28494, 65, 28494, 67, 28494, 76, 28494, 78, 11, 3617, 28494, 83, 28494, 84, 24412, 64, 24412, 65, 11, 697, 24412, 69, 24412, 70, 24412, 71, 24412, 77, 24412, 84, 21861, 21861, 65, 11, 3407, 11, 1542, 21861, 70, 21861, 72, 11, 10902, 11, 21380, 21861, 81, 20594, 64, 20594, 65, 20594, 66, 11, 6777, 70980, 20594, 72, 20594, 75, 20594, 76, 20594, 82, 51581, 41054, 50640, 30341, 30341, 68, 30533, 30533, 65, 51932, 77, 51932, 81, 198, 8234, 24585, 1276, 23646, 551, 5742, 315, 2204, 5540, 304, 279, 6070, 439, 459, 7698, 13, 551, 528, 198, 8234, 24585, 29377, 2769, 8500, 551, 935, 8649, 279, 11742, 5540, 304, 84398, 2015, 323, 198, 325, 50700, 555, 264, 3254, 37472, 13, 1115, 12472, 649, 387, 1511, 369, 198, 90222, 2449, 27573, 1405, 499, 1390, 311, 1505, 10925, 15175, 82, 198, 4291, 1193, 3738, 2728, 5540, 13, 551, 610, 198, 8234, 24585, 13, 32056, 64969, 16145, 41419, 551, 578, 11742, 15150, 369, 264, 6070, 439, 264, 925, 304, 264, 1376, 12146, 555, 279, 5446, 198, 14706, 13, 551, 610, 198, 8234, 24585, 13, 32056, 64969, 1311, 54478, 551, 63897, 2740, 10839, 11742, 15150, 449, 11293, 7698, 11742, 198, 782, 15750, 5219, 13, 578, 21801, 1396, 374, 40542, 422, 433, 374, 220, 16, 13, 551, 610, 198, 8234, 24585, 13, 32056, 64969, 1552, 484, 551, 578, 11742, 15150, 369, 264, 6070, 304, 8270, 1376, 449, 2449, 198, 68526, 8272, 555, 2536, 5621, 54478, 7698, 11742, 21801, 5219, 627, 791, 21801, 1396, 374, 40542, 422, 433, 374, 220, 16, 13, 551, 610, 198, 8234, 24585, 13, 32056, 64969, 5431, 455, 582, 551, 31922, 1405, 279, 5540, 527, 11713, 1701, 264, 16287, 1160, 63557, 198, 31039, 389, 43906, 606, 70, 44515, 439, 4613, 304, 279, 358, 3202, 1741, 308, 89947, 1598, 315, 198, 258, 61694, 30903, 320, 1049, 20, 570, 31911, 11293, 7698, 11742, 198, 782, 15750, 5219, 1405, 279, 21801, 1396, 374, 40542, 422, 433, 374, 198, 16, 13, 551, 610, 198, 8234, 24585, 13, 32056, 64969, 12277, 9956, 551, 31922, 449, 279, 5540, 11713, 555, 872, 11293, 7698, 11742, 198, 782, 15750, 1396, 11, 323, 279, 11742, 9606, 12860, 555, 198, 90553, 2740, 11713, 12197, 13, 578, 21801, 1396, 374, 40542, 422, 198, 275, 374, 220, 16, 13, 469, 1326, 13, 220, 473, 17, 46, 9221, 362, 17, 33, 323, 473, 17, 46, 17, 9221, 14469, 13, 578, 12197, 527, 198, 7788, 77, 505, 279, 30063, 28890, 430, 1253, 387, 11838, 555, 7859, 198, 1820, 1396, 315, 12197, 11, 384, 1326, 13, 362, 11, 426, 11, 61453, 1901, 11, 362, 64, 11, 3765, 323, 779, 389, 13, 1115, 198, 18881, 374, 304, 1584, 449, 279, 30293, 7086, 41134, 1829, 33941, 7419, 13, 551, 610, 198, 8234, 24585, 13, 32056, 64969, 1311, 54478, 766, 43056, 551, 63897, 2740, 10839, 11742, 15150, 449, 11293, 7698, 11742, 198, 782, 15750, 5219, 13, 578, 21801, 1396, 374, 40542, 422, 433, 374, 220, 16, 13, 551, 610, 198, 8234, 24585, 12613, 278, 3038, 3571, 12613, 551, 578, 7891, 315, 279, 2449, 11, 384, 1326, 13, 364, 47, 65, 4527, 551, 6515, 11, 9219, 11, 2149, 11, 6219, 11, 7098, 11, 2170, 11, 1688, 15381, 84, 8324, 8324, 64, 11, 3513, 8324, 71, 8324, 72, 8324, 74, 11, 6971, 11541, 11541, 64, 11541, 67, 11541, 68, 11541, 69, 11, 5176, 11541, 76, 11541, 77, 11, 7489, 11541, 81, 11541, 82, 11541, 84, 11, 8153, 28365, 82, 28365, 88, 11, 20027, 11, 17812, 43225, 84, 28328, 11, 6251, 11, 3968, 28328, 76, 11, 23376, 38406, 64, 38406, 67, 11, 9688, 44639, 11, 1548, 44639, 69, 44639, 70, 44639, 78, 44639, 82, 38868, 11, 644, 38868, 81, 44754, 44754, 81, 11, 8921, 31214, 72, 31214, 81, 31214, 84, 31214, 85, 11, 26353, 28112, 67, 28112, 70, 28112, 77, 11, 26694, 28112, 83, 22812, 11, 16589, 22812, 65, 22812, 67, 11, 8989, 22812, 71, 22812, 72, 86176, 22812, 79, 75449, 75449, 70, 11, 29967, 28494, 11, 20908, 28494, 65, 28494, 67, 28494, 76, 28494, 78, 11, 3617, 28494, 83, 28494, 84, 24412, 64, 24412, 65, 11, 697, 24412, 69, 24412, 70, 24412, 71, 24412, 77, 24412, 84, 21861, 21861, 65, 11, 3407, 11, 1542, 21861, 70, 21861, 72, 11, 10902, 11, 21380, 21861, 81, 20594, 64, 20594, 65, 20594, 66, 11, 6777, 70980, 20594, 72, 20594, 75, 20594, 76, 20594, 82, 51581, 41054, 50640, 30341, 68, 30533, 30533, 65, 51932, 77, 51932, 81, 198, 8234, 24585, 12613, 278, 3038, 3571, 69382, 60123, 551, 578, 25524, 19983, 315, 279, 2449, 304, 279, 1887, 433, 374, 13282, 2949, 627, 3976, 7419, 264, 6928, 907, 2753, 1109, 477, 6273, 311, 220, 16, 13, 551, 2273, 1227, 198, 8234, 24585, 12613, 278, 3038, 3571, 68471, 60123, 551, 578, 3148, 19983, 315, 279, 2449, 304, 279, 1887, 433, 374, 13282, 2949, 627, 3976, 7419, 264, 6928, 907, 2753, 1109, 477, 6273, 311, 220, 16, 13, 551, 2273, 1227, 198, 8234, 24585, 52001, 33342, 21610, 402, 2852, 918, 32891, 551, 35721, 369, 279, 3320, 402, 2852, 55372, 304, 59642, 45297, 13, 578, 1176, 43147, 6661, 198, 1748, 9803, 279, 26110, 3070, 323, 649, 387, 832, 315, 279, 2768, 25, 264, 320, 376, 292, 3817, 292, 705, 293, 198, 65618, 511, 3817, 292, 705, 297, 320, 2419, 269, 71, 2925, 292, 705, 259, 320, 73542, 4193, 25180, 705, 305, 320, 17757, 24346, 8, 477, 272, 320, 66, 42281, 570, 578, 198, 5686, 40582, 6661, 36611, 279, 2960, 12928, 323, 649, 387, 832, 315, 279, 2768, 25, 393, 198, 26022, 13968, 705, 328, 320, 1594, 2960, 1171, 705, 358, 320, 2664, 2960, 1171, 705, 432, 320, 81, 35940, 754, 71, 36620, 2960, 12928, 8, 477, 435, 198, 21013, 12580, 2960, 1171, 570, 551, 264, 47, 10317, 37, 10317, 40, 10317, 47, 20393, 47, 20393, 49, 13387, 47, 13387, 50, 50318, 37, 50318, 40, 50318, 47, 50318, 50, 14287, 40, 14287, 47, 198, 8234, 24585, 52001, 33342, 42664, 14272, 18155, 551, 4076, 315, 279, 26110, 1887, 13, 551, 41999, 11, 17757, 24346, 11, 1677, 511, 3817, 292, 11, 2419, 269, 71, 2925, 292, 14287, 295, 4193, 25180, 67554, 292, 3817, 292, 67554, 343, 25180, 198, 8234, 24585, 52001, 33342, 870, 543, 5617, 551, 578, 11166, 1396, 369, 420, 1887, 13, 551, 528, 843, 198, 8234, 24585, 52001, 33342, 870, 543, 21868, 551, 578, 11166, 7891, 369, 420, 1887, 13, 551, 610, 198, 8234, 24585, 52001, 33342, 24112, 6422, 551, 20185, 315, 279, 26110, 848, 79173, 1486, 1912, 304, 279, 32565, 1036, 5364, 19729, 75721, 45297, 13, 551, 610, 198, 8234, 24585, 52001, 33342, 36983, 6422, 5617, 551, 46080, 279, 7327, 9323, 315, 29016, 848, 1976, 88, 320, 40, 5576, 8, 1396, 315, 279, 220, 18, 35, 3634, 198, 4166, 315, 420, 1887, 13, 551, 528, 843, 198, 8234, 24585, 52001, 33342, 36983, 6422, 21868, 551, 578, 7327, 9323, 315, 29016, 848, 1976, 88, 320, 40, 5576, 8, 2875, 7891, 315, 279, 220, 18, 35, 198, 8920, 1912, 315, 420, 1887, 13, 551, 610, 198, 8234, 24585, 52001, 33342, 6131, 64969, 551, 578, 15150, 315, 279, 1760, 88167, 3769, 369, 420, 6070, 13, 551, 610, 198, 8234, 24585, 52001, 33342, 6131, 4404, 5072, 851, 551, 578, 13110, 315, 420, 6070, 304, 279, 20479, 9628, 83708, 315, 198, 5192, 14272, 848, 79173, 47728, 512, 1277, 1129, 2185, 5973, 5072, 2808, 2726, 14, 46754, 12, 2301, 66, 43473, 9199, 2628, 551, 610, 198, 8234, 24585, 52001, 33342, 68436, 1292, 551, 362, 4279, 836, 369, 420, 6070, 11, 384, 1326, 13, 282, 641, 11, 293, 641, 13, 551, 220, 19, 44650, 10264, 11, 1548, 355, 1565, 8568, 641, 8568, 302, 8568, 302, 20, 11, 566, 589, 7853, 10317, 455, 1269, 12260, 18986, 17514, 641, 17514, 302, 20393, 3181, 12, 1548, 355, 1565, 20393, 4777, 11, 716, 869, 4991, 635, 11, 21161, 12290, 16262, 332, 458, 10900, 6592, 41999, 25576, 5757, 89, 635, 23500, 2910, 2067, 11178, 198, 8234, 24585, 52001, 33342, 9720, 86056, 655, 4970, 50903, 367, 551, 55982, 315, 279, 3769, 4184, 311, 279, 35901, 15042, 198, 596, 376, 86056, 655, 4970, 4527, 551, 610, 198, 8234, 24585, 8947, 2508, 16315, 851, 551, 3011, 1853, 315, 420, 3857, 2949, 279, 2322, 467, 831, 430, 374, 1511, 439, 264, 5016, 198, 16288, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 2981, 551, 3959, 41419, 2440, 430, 36611, 420, 24693, 961, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13204, 551, 578, 1749, 1511, 369, 25607, 420, 1887, 13, 551, 5634, 307, 11, 9854, 11, 4406, 22828, 46061, 198, 8234, 24585, 8947, 2508, 13480, 551, 362, 2875, 4096, 922, 420, 961, 315, 279, 45982, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 24585, 851, 551, 362, 8521, 3160, 11, 5016, 3769, 13110, 304, 279, 1376, 315, 264, 5286, 198, 37439, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 24585, 1292, 551, 49203, 1285, 5144, 369, 420, 264, 3769, 422, 904, 649, 387, 12893, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 73318, 4269, 1857, 551, 73800, 538, 11075, 505, 279, 25524, 6070, 13, 551, 220, 16, 35, 11, 17, 35, 11, 3104, 27605, 1147, 11, 22612, 8568, 22537, 11, 4166, 13387, 55269, 13387, 55269, 611, 10879, 11, 1677, 26429, 11, 1962, 15590, 10900, 10730, 11, 359, 10547, 198, 8234, 24585, 8947, 2508, 77143, 2786, 551, 29023, 2786, 315, 279, 1887, 13, 1789, 19670, 4633, 6067, 420, 374, 198, 28172, 7167, 26126, 555, 1701, 279, 45982, 62987, 287, 12384, 512, 2485, 1129, 48886, 2726, 14, 605, 13, 5120, 18, 14, 67171, 37284, 43, 7211, 13, 8899, 13, 7461, 4645, 382, 91, 5273, 765, 7817, 9432, 91, 81922, 765, 14730, 21622, 9432, 91, 74011, 15, 35, 6, 63, 765, 2876, 8599, 48582, 9432, 91, 74011, 16, 35, 6, 63, 765, 26572, 2740, 8599, 304, 832, 13167, 9432, 91, 74011, 17, 35, 6, 63, 765, 26572, 2740, 8599, 304, 1403, 15696, 9432, 91, 74011, 18, 35, 6, 63, 765, 26572, 2740, 8599, 304, 2380, 15696, 765, 551, 220, 15, 35, 11, 16, 35, 11, 17, 35, 11, 18, 35, 198, 8234, 24585, 8947, 2508, 13542, 287, 7258, 551, 4497, 4839, 24790, 369, 420, 1887, 11, 602, 1770, 13, 279, 955, 315, 330, 24177, 198, 4677, 1, 433, 11105, 382, 91, 5273, 765, 7817, 9432, 91, 81922, 765, 14730, 21622, 9432, 91, 74011, 40846, 6, 63, 765, 29696, 5918, 505, 264, 5089, 2849, 430, 44694, 48582, 304, 1403, 18445, 323, 520, 3325, 11157, 11, 719, 539, 72600, 304, 264, 4948, 5216, 13, 9432, 91, 74011, 17, 35, 3769, 6, 63, 765, 29696, 5918, 505, 264, 5089, 2849, 430, 44694, 48582, 304, 1403, 18445, 323, 1193, 3131, 304, 264, 4948, 5216, 13, 9432, 91, 74011, 76, 55269, 6, 63, 765, 386, 55269, 4613, 304, 279, 5457, 19677, 45982, 9432, 91, 74011, 1677, 26429, 6, 63, 765, 3206, 26429, 4613, 304, 279, 5457, 19677, 45982, 765, 551, 220, 17, 35, 3769, 13387, 55269, 11, 1677, 26429, 10900, 10730, 198, 8234, 24585, 8947, 2508, 64361, 1857, 551, 55982, 3196, 389, 279, 16003, 6012, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 40802, 801, 1857, 551, 55982, 3196, 389, 279, 11742, 15150, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 29377, 551, 35975, 315, 279, 2204, 5540, 3118, 304, 279, 6070, 13, 551, 6515, 11, 9219, 11, 2149, 11, 6219, 11, 7098, 11, 2170, 11, 1688, 15381, 84, 8324, 8324, 64, 11, 3513, 8324, 71, 8324, 72, 8324, 74, 11, 6971, 11541, 11541, 64, 11541, 67, 11541, 68, 11541, 69, 11, 5176, 11541, 76, 11541, 77, 11, 7489, 11541, 81, 11541, 82, 11541, 84, 11, 8153, 28365, 82, 28365, 88, 11, 20027, 11, 17812, 43225, 84, 28328, 11, 6251, 11, 3968, 28328, 76, 11, 23376, 38406, 64, 38406, 67, 11, 9688, 44639, 11, 1548, 44639, 69, 44639, 70, 44639, 78, 44639, 82, 38868, 11, 644, 38868, 81, 44754, 44754, 81, 11, 8921, 31214, 72, 31214, 81, 31214, 84, 31214, 85, 11, 26353, 28112, 67, 28112, 70, 28112, 77, 11, 26694, 28112, 83, 22812, 11, 16589, 22812, 65, 22812, 67, 11, 8989, 22812, 71, 22812, 72, 86176, 22812, 79, 75449, 75449, 70, 11, 29967, 28494, 11, 20908, 28494, 65, 28494, 67, 28494, 76, 28494, 78, 11, 3617, 28494, 83, 28494, 84, 24412, 64, 24412, 65, 11, 697, 24412, 69, 24412, 70, 24412, 71, 24412, 77, 24412, 84, 21861, 21861, 65, 11, 3407, 11, 1542, 21861, 70, 21861, 72, 11, 10902, 11, 21380, 21861, 81, 20594, 64, 20594, 65, 20594, 66, 11, 6777, 70980, 20594, 72, 20594, 75, 20594, 76, 20594, 82, 51581, 41054, 50640, 30341, 30341, 68, 30533, 30533, 65, 51932, 77, 51932, 81, 198, 8234, 24585, 8947, 2508, 1276, 23646, 551, 5742, 315, 2204, 5540, 304, 279, 6070, 439, 459, 7698, 13, 551, 528, 198, 8234, 24585, 8947, 2508, 29377, 2769, 8500, 551, 935, 8649, 279, 11742, 5540, 304, 84398, 2015, 323, 198, 325, 50700, 555, 264, 3254, 37472, 13, 1115, 12472, 649, 387, 1511, 369, 198, 90222, 2449, 27573, 1405, 499, 1390, 311, 1505, 10925, 15175, 82, 198, 4291, 1193, 3738, 2728, 5540, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13, 32056, 64969, 16145, 41419, 551, 578, 11742, 15150, 369, 264, 6070, 439, 264, 925, 304, 264, 1376, 12146, 555, 279, 5446, 198, 14706, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13, 32056, 64969, 1311, 54478, 551, 63897, 2740, 10839, 11742, 15150, 449, 11293, 7698, 11742, 198, 782, 15750, 5219, 13, 578, 21801, 1396, 374, 40542, 422, 433, 374, 220, 16, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13, 32056, 64969, 1552, 484, 551, 578, 11742, 15150, 369, 264, 6070, 304, 8270, 1376, 449, 2449, 198, 68526, 8272, 555, 2536, 5621, 54478, 7698, 11742, 21801, 5219, 627, 791, 21801, 1396, 374, 40542, 422, 433, 374, 220, 16, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13, 32056, 64969, 5431, 455, 582, 551, 31922, 1405, 279, 5540, 527, 11713, 1701, 264, 16287, 1160, 63557, 198, 31039, 389, 43906, 606, 70, 44515, 439, 4613, 304, 279, 358, 3202, 1741, 308, 89947, 1598, 315, 198, 258, 61694, 30903, 320, 1049, 20, 570, 31911, 11293, 7698, 11742, 198, 782, 15750, 5219, 1405, 279, 21801, 1396, 374, 40542, 422, 433, 374, 198, 16, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13, 32056, 64969, 12277, 9956, 551, 31922, 449, 279, 5540, 11713, 555, 872, 11293, 7698, 11742, 198, 782, 15750, 1396, 11, 323, 279, 11742, 9606, 12860, 555, 198, 90553, 2740, 11713, 12197, 13, 578, 21801, 1396, 374, 40542, 422, 198, 275, 374, 220, 16, 13, 469, 1326, 13, 220, 473, 17, 46, 9221, 362, 17, 33, 323, 473, 17, 46, 17, 9221, 14469, 13, 578, 12197, 527, 198, 7788, 77, 505, 279, 30063, 28890, 430, 1253, 387, 11838, 555, 7859, 198, 1820, 1396, 315, 12197, 11, 384, 1326, 13, 362, 11, 426, 11, 61453, 1901, 11, 362, 64, 11, 3765, 323, 779, 389, 13, 1115, 198, 18881, 374, 304, 1584, 449, 279, 30293, 7086, 41134, 1829, 33941, 7419, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13, 32056, 64969, 1311, 54478, 766, 43056, 551, 63897, 2740, 10839, 11742, 15150, 449, 11293, 7698, 11742, 198, 782, 15750, 5219, 13, 578, 21801, 1396, 374, 40542, 422, 433, 374, 220, 16, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 8829, 18155, 551, 17650, 311, 279, 2748, 1887, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 17990, 18155, 82, 551, 45178, 311, 279, 1716, 6067, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 69382, 60123, 551, 578, 25524, 19983, 315, 420, 1887, 304, 279, 2539, 6070, 433, 374, 13282, 304, 627, 3976, 7419, 264, 6928, 907, 2753, 1109, 477, 6273, 311, 220, 16, 13, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 68471, 60123, 551, 578, 3148, 19983, 315, 420, 1887, 304, 279, 2539, 6070, 433, 374, 13282, 2949, 627, 3976, 7419, 264, 6928, 907, 2753, 1109, 477, 6273, 311, 220, 16, 13, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 1276, 68855, 551, 578, 2860, 1396, 315, 9606, 320, 66650, 11, 19252, 8, 304, 279, 1887, 13, 551, 528, 198, 8234, 24585, 8947, 2508, 516, 20218, 1857, 551, 578, 1948, 5848, 13340, 315, 279, 9501, 14580, 4857, 8316, 320, 82, 10551, 4390, 791, 6211, 315, 1455, 9501, 8057, 355, 527, 1664, 4613, 323, 1376, 279, 8197, 315, 1455, 198, 5526, 11672, 49400, 13, 578, 1455, 4279, 3187, 374, 279, 40403, 39690, 11, 21236, 4908, 296, 37181, 345, 98382, 37181, 11, 577, 822, 2287, 551, 610, 198, 8234, 24585, 8947, 2508, 929, 33481, 669, 11980, 821, 37144, 551, 578, 7928, 56429, 23899, 374, 279, 7928, 26436, 430, 649, 387, 22306, 304, 264, 94761, 198, 9125, 2085, 50917, 449, 904, 315, 279, 33299, 304, 279, 1887, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 24585, 8947, 2508, 558, 461, 15106, 287, 821, 37144, 551, 578, 97551, 33994, 23899, 374, 279, 7928, 26436, 430, 649, 26662, 198, 13798, 817, 1555, 279, 94761, 4009, 2085, 50917, 449, 904, 315, 279, 198, 66650, 304, 279, 1887, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 24585, 8947, 2508, 929, 33481, 1265, 10391, 88073, 8584, 647, 9082, 88073, 2703, 551, 578, 7928, 5343, 26436, 3235, 1949, 26436, 1853, 374, 198, 27995, 478, 26436, 430, 649, 387, 22306, 304, 279, 97551, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 24585, 8947, 2508, 22757, 1260, 32130, 15380, 551, 578, 7479, 3158, 15987, 374, 279, 3158, 430, 374, 15987, 311, 8810, 35715, 198, 258, 264, 94761, 1887, 13, 1102, 374, 8965, 6646, 311, 387, 279, 4553, 7479, 3158, 198, 9210, 649, 387, 9575, 19212, 555, 264, 22477, 315, 264, 3230, 10801, 13, 763, 98811, 1846, 11, 555, 1670, 584, 1005, 198, 64, 22477, 430, 706, 264, 10801, 315, 220, 16, 13, 4218, 7568, 35155, 11, 902, 8024, 311, 279, 198, 1030, 838, 306, 12164, 72, 315, 47503, 6962, 13, 1789, 39538, 43943, 1887, 11, 264, 12164, 72, 315, 198, 16, 13, 19, 7568, 35155, 649, 387, 1511, 11, 902, 8024, 311, 279, 1080, 838, 306, 12164, 72, 198, 1073, 3090, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 17, 198, 8234, 24585, 8947, 2508, 22757, 1260, 28039, 551, 20880, 315, 653, 41456, 3634, 304, 264, 1887, 430, 649, 387, 15987, 311, 198, 31277, 35715, 11, 1093, 2092, 48764, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 18, 198, 8234, 24585, 8947, 2508, 13, 1019, 60123, 551, 51848, 315, 279, 279, 8286, 315, 279, 653, 41456, 3634, 304, 279, 1887, 198, 998, 279, 8286, 315, 279, 4553, 1887, 13, 1102, 374, 264, 1695, 13594, 311, 198, 67, 25296, 1268, 94761, 264, 1887, 374, 13, 53485, 94761, 6067, 198, 61917, 617, 264, 8294, 742, 19983, 11, 37318, 17251, 477, 29050, 198, 46654, 617, 9333, 742, 65995, 13, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 1276, 19848, 551, 5742, 315, 12006, 3118, 304, 279, 94761, 1887, 11, 902, 8024, 311, 279, 1396, 315, 198, 79, 4692, 2949, 279, 1887, 13, 551, 528, 198, 8234, 24585, 8947, 2508, 516, 20218, 31196, 2617, 5617, 551, 578, 1396, 315, 21583, 1486, 304, 279, 14580, 4857, 8316, 1161, 20218, 705, 902, 34310, 311, 198, 1820, 311, 279, 1396, 315, 1486, 315, 9070, 304, 279, 14580, 4857, 5089, 13, 4427, 4279, 198, 23827, 2508, 2997, 198, 16, 551, 78316, 25847, 198, 17, 551, 22011, 25847, 198, 18, 551, 490, 275, 25847, 198, 19, 551, 259, 17820, 266, 25847, 198, 20, 551, 20801, 266, 25847, 551, 528, 198, 8234, 24585, 8947, 2508, 12613, 278, 3038, 3571, 12613, 551, 578, 7891, 315, 279, 2449, 11, 384, 1326, 13, 364, 47, 65, 4527, 551, 6515, 11, 9219, 11, 2149, 11, 6219, 11, 7098, 11, 2170, 11, 1688, 15381, 84, 8324, 8324, 64, 11, 3513, 8324, 71, 8324, 72, 8324, 74, 11, 6971, 11541, 11541, 64, 11541, 67, 11541, 68, 11541, 69, 11, 5176, 11541, 76, 11541, 77, 11, 7489, 11541, 81, 11541, 82, 11541, 84, 11, 8153, 28365, 82, 28365, 88, 11, 20027, 11, 17812, 43225, 84, 28328, 11, 6251, 11, 3968, 28328, 76, 11, 23376, 38406, 64, 38406, 67, 11, 9688, 44639, 11, 1548, 44639, 69, 44639, 70, 44639, 78, 44639, 82, 38868, 11, 644, 38868, 81, 44754, 44754, 81, 11, 8921, 31214, 72, 31214, 81, 31214, 84, 31214, 85, 11, 26353, 28112, 67, 28112, 70, 28112, 77, 11, 26694, 28112, 83, 22812, 11, 16589, 22812, 65, 22812, 67, 11, 8989, 22812, 71, 22812, 72, 86176, 22812, 79, 75449, 75449, 70, 11, 29967, 28494, 11, 20908, 28494, 65, 28494, 67, 28494, 76, 28494, 78, 11, 3617, 28494, 83, 28494, 84, 24412, 64, 24412, 65, 11, 697, 24412, 69, 24412, 70, 24412, 71, 24412, 77, 24412, 84, 21861, 21861, 65, 11, 3407, 11, 1542, 21861, 70, 21861, 72, 11, 10902, 11, 21380, 21861, 81, 20594, 64, 20594, 65, 20594, 66, 11, 6777, 70980, 20594, 72, 20594, 75, 20594, 76, 20594, 82, 51581, 41054, 50640, 30341, 68, 30533, 30533, 65, 51932, 77, 51932, 81, 198, 8234, 24585, 8947, 2508, 12613, 278, 3038, 3571, 69382, 60123, 551, 578, 25524, 19983, 315, 279, 2449, 304, 279, 1887, 433, 374, 13282, 2949, 627, 3976, 7419, 264, 6928, 907, 2753, 1109, 477, 6273, 311, 220, 16, 13, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 12613, 278, 3038, 3571, 68471, 60123, 551, 578, 3148, 19983, 315, 279, 2449, 304, 279, 1887, 433, 374, 13282, 2949, 627, 3976, 7419, 264, 6928, 907, 2753, 1109, 477, 6273, 311, 220, 16, 13, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 16315, 48084, 4957, 551, 578, 955, 315, 12976, 1990, 264, 1887, 323, 433, 596, 2748, 382, 91, 5273, 765, 7817, 9432, 91, 81922, 765, 14730, 21622, 9432, 91, 74011, 2959, 6, 63, 765, 744, 14393, 279, 4553, 6070, 11, 706, 912, 2748, 1887, 13, 9432, 91, 74011, 2008, 9125, 6, 63, 765, 362, 3254, 20406, 5502, 28532, 505, 279, 2748, 1887, 13, 9432, 91, 74011, 4166, 6, 63, 765, 362, 20406, 1912, 315, 53885, 82, 2949, 279, 2748, 11, 384, 1326, 13, 264, 1912, 315, 35715, 304, 14306, 13, 9432, 91, 74011, 74548, 17061, 6, 63, 765, 578, 21349, 2849, 505, 902, 279, 2748, 374, 20968, 505, 13, 9432, 91, 74011, 444, 44322, 17061, 6, 63, 765, 578, 28694, 2849, 505, 902, 279, 2748, 374, 20968, 505, 13, 765, 551, 21349, 17061, 11, 4166, 11, 74548, 17061, 11, 2959, 11, 2008, 9125, 198, 8234, 24585, 8947, 2508, 25606, 5973, 551, 17736, 315, 279, 1176, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 24585, 8947, 2508, 25606, 960, 551, 17736, 315, 279, 2132, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 24585, 8947, 2508, 25606, 522, 551, 17736, 315, 279, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 24585, 8947, 2508, 25606, 24879, 551, 37337, 1990, 2132, 323, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 24585, 8947, 2508, 25606, 63029, 551, 37337, 1990, 1176, 323, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 24585, 8947, 2508, 25606, 74401, 551, 37337, 1990, 1176, 323, 2132, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 24585, 8947, 2508, 25606, 41584, 551, 20880, 315, 279, 2849, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 18, 198, 8234, 24585, 8947, 2508, 25606, 69382, 54449, 551, 31416, 17915, 315, 279, 3769, 320, 66650, 5574, 4765, 50522, 551, 2273, 1227, 551, 220, 16, 611, 23819, 3146, 220, 18, 198, 8234, 24585, 8947, 2508, 25606, 68471, 54449, 551, 9346, 17915, 315, 279, 3769, 13, 551, 2273, 1227, 551, 15395, 13255, 611, 23819, 3146, 220, 18, 198, 8234, 24585, 8947, 2508, 52001, 33342, 21610, 402, 2852, 918, 32891, 551, 35721, 369, 279, 3320, 402, 2852, 55372, 304, 59642, 45297, 13, 578, 1176, 43147, 6661, 198, 1748, 9803, 279, 26110, 3070, 323, 649, 387, 832, 315, 279, 2768, 25, 264, 320, 376, 292, 3817, 292, 705, 293, 198, 65618, 511, 3817, 292, 705, 297, 320, 2419, 269, 71, 2925, 292, 705, 259, 320, 73542, 4193, 25180, 705, 305, 320, 17757, 24346, 8, 477, 272, 320, 66, 42281, 570, 578, 198, 5686, 40582, 6661, 36611, 279, 2960, 12928, 323, 649, 387, 832, 315, 279, 2768, 25, 393, 198, 26022, 13968, 705, 328, 320, 1594, 2960, 1171, 705, 358, 320, 2664, 2960, 1171, 705, 432, 320, 81, 35940, 754, 71, 36620, 2960, 12928, 8, 477, 435, 198, 21013, 12580, 2960, 1171, 570, 551, 264, 47, 10317, 37, 10317, 40, 10317, 47, 20393, 47, 20393, 49, 13387, 47, 13387, 50, 50318, 37, 50318, 40, 50318, 47, 50318, 50, 14287, 40, 14287, 47, 198, 8234, 24585, 8947, 2508, 52001, 33342, 42664, 14272, 18155, 551, 4076, 315, 279, 26110, 1887, 13, 551, 41999, 11, 17757, 24346, 11, 1677, 511, 3817, 292, 11, 2419, 269, 71, 2925, 292, 14287, 295, 4193, 25180, 67554, 292, 3817, 292, 67554, 343, 25180, 198, 8234, 24585, 8947, 2508, 52001, 33342, 870, 543, 5617, 551, 578, 11166, 1396, 369, 420, 1887, 13, 551, 528, 843, 198, 8234, 24585, 8947, 2508, 52001, 33342, 870, 543, 21868, 551, 578, 11166, 7891, 369, 420, 1887, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 52001, 33342, 24112, 6422, 551, 20185, 315, 279, 26110, 848, 79173, 1486, 1912, 304, 279, 32565, 1036, 5364, 19729, 75721, 45297, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 52001, 33342, 36983, 6422, 5617, 551, 46080, 279, 7327, 9323, 315, 29016, 848, 1976, 88, 320, 40, 5576, 8, 1396, 315, 279, 220, 18, 35, 3634, 198, 4166, 315, 420, 1887, 13, 551, 528, 843, 198, 8234, 24585, 8947, 2508, 52001, 33342, 36983, 6422, 21868, 551, 578, 7327, 9323, 315, 29016, 848, 1976, 88, 320, 40, 5576, 8, 2875, 7891, 315, 279, 220, 18, 35, 198, 8920, 1912, 315, 420, 1887, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 52001, 33342, 9720, 86056, 655, 4970, 50903, 367, 551, 55982, 315, 279, 3769, 4184, 311, 279, 35901, 15042, 198, 596, 376, 86056, 655, 4970, 4527, 551, 610, 198, 8234, 24585, 8947, 2508, 52001, 33342, 6131, 6234, 4404, 5072, 551, 20479, 9628, 2440, 315, 279, 25018, 320, 4151, 198, 1277, 1129, 64, 5072, 2808, 2726, 11547, 81, 14272, 6116, 14, 46754, 3644, 2628, 8, 11054, 389, 279, 8197, 198, 1073, 279, 3634, 6422, 323, 30510, 1704, 88, 377, 1885, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 52001, 33342, 6131, 1292, 551, 362, 4279, 836, 369, 420, 1760, 88167, 6070, 11, 384, 1326, 13, 282, 641, 11, 293, 641, 13, 551, 220, 19, 44650, 10264, 11, 1548, 355, 1565, 8568, 641, 8568, 302, 8568, 302, 20, 11, 566, 589, 7853, 10317, 455, 1269, 12260, 18986, 17514, 641, 17514, 302, 20393, 3181, 12, 1548, 355, 1565, 20393, 4777, 11, 716, 869, 4991, 635, 11, 21161, 12290, 16262, 332, 458, 10900, 6592, 41999, 25576, 5757, 89, 635, 23500, 2910, 2067, 11178, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 1276, 54446, 372, 5617, 551, 37409, 31228, 1396, 400, 77, 13244, 551, 528, 843, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 1190, 54446, 372, 5617, 551, 10884, 20932, 24151, 31228, 1396, 400, 73, 284, 765, 75, 1355, 91, 2564, 326, 68897, 3, 627, 334, 45, 20726, 449, 3831, 445, 6354, 59086, 477, 2536, 1824, 980, 90021, 12903, 6067, 13, 334, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 97251, 54446, 372, 5617, 551, 15757, 56307, 278, 22343, 315, 279, 400, 73, 3, 4724, 627, 334, 45, 20726, 449, 3831, 445, 6354, 59086, 477, 2536, 1824, 980, 90021, 12903, 6067, 13, 334, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 2337, 7642, 2826, 551, 578, 1396, 315, 5415, 1234, 279, 21973, 17413, 9435, 311, 279, 65691, 743, 627, 2028, 52873, 22204, 430, 682, 27605, 1147, 304, 279, 743, 527, 5367, 13523, 13, 551, 528, 843, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 1276, 2253, 772, 26692, 46747, 1639, 551, 578, 17130, 6900, 12304, 369, 61966, 10096, 627, 90383, 430, 3567, 6629, 505, 220, 15, 477, 220, 16, 11383, 33164, 4448, 587, 18528, 627, 36687, 279, 1595, 9613, 63, 1614, 374, 12146, 11, 279, 1646, 34310, 311, 264, 3254, 17130, 1694, 12304, 304, 7106, 8903, 13, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 13, 59362, 551, 578, 2860, 1396, 315, 57678, 2949, 279, 1614, 320, 300, 4613, 555, 5367, 804, 2826, 340, 10924, 13548, 279, 1646, 6900, 13, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 929, 54446, 372, 21868, 551, 15757, 56307, 278, 400, 75, 3, 304, 36396, 1376, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 58509, 54446, 372, 21868, 551, 63755, 31228, 1396, 400, 76, 918, 3, 304, 36396, 1376, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 40215, 54446, 372, 21868, 551, 41785, 31228, 1396, 400, 76, 646, 3, 304, 36396, 1376, 13, 551, 610, 198, 8234, 13204, 13204, 851, 551, 35721, 369, 279, 1511, 1749, 13, 8442, 2561, 369, 264, 27084, 315, 10925, 198, 2000, 902, 279, 38152, 706, 1027, 11054, 449, 16437, 13, 551, 610, 198, 8234, 13204, 13204, 1292, 551, 7874, 836, 369, 279, 1511, 1749, 13, 551, 426, 937, 11, 5501, 39, 1286, 28365, 4082, 11, 8561, 4082, 43225, 98952, 38406, 54, 22812, 18953, 20594, 33, 30341, 5119, 30341, 37790, 16539, 11865, 11, 31548, 372, 27366, 11, 359, 10547, 198, 8234, 13204, 73874, 1292, 551, 256, 551, 610, 198, 8234, 13204, 29716, 2987, 46182, 1292, 551, 578, 836, 315, 279, 1511, 2068, 13, 551, 610, 198, 8234, 13204, 29716, 2987, 46182, 9625, 551, 578, 2373, 315, 279, 1511, 2068, 13, 551, 610, 198, 8234, 13204, 29716, 2987, 46182, 9625, 24369, 551, 578, 2373, 4877, 1511, 34167, 555, 279, 4500, 2128, 13, 551, 610, 198, 8234, 13204, 29716, 2987, 962, 728, 960, 10949, 2667, 1857, 551, 578, 1511, 8197, 743, 5865, 13, 551, 320, 43, 8, 2599, 54, 10, 385, 11, 6885, 1892, 5493, 11, 1962, 15590, 11, 20173, 362, 29967, 11, 19563, 17301, 11, 1725, 2910, 5865, 11, 8110, 29047, 5950, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 962, 728, 4976, 2253, 70329, 530, 35320, 551, 2650, 279, 6332, 57678, 527, 7633, 13, 551, 682, 17130, 20268, 6332, 11, 9054, 682, 17130, 7385, 40512, 89490, 2335, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 962, 728, 91571, 623, 7569, 1534, 551, 13440, 279, 22702, 374, 12903, 2320, 7569, 1534, 13, 551, 1845, 198, 8234, 13204, 29716, 2987, 962, 728, 7840, 69, 22616, 35895, 16326, 551, 46080, 279, 12447, 369, 279, 2860, 4907, 2349, 1990, 1403, 17876, 198, 726, 69604, 18620, 2115, 320, 3624, 37, 8, 26771, 13, 578, 7683, 37, 374, 6646, 97875, 994, 279, 198, 5143, 65487, 2349, 1990, 1403, 7683, 37, 25492, 374, 3770, 279, 12447, 320, 54228, 304, 198, 76128, 449, 1023, 13186, 570, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 13204, 29716, 2987, 962, 728, 3211, 276, 36445, 2832, 64, 1147, 9209, 551, 578, 1511, 5355, 2761, 29614, 1147, 1749, 13, 551, 610, 198, 8234, 13204, 29716, 2987, 962, 728, 1351, 5641, 1968, 9209, 551, 3959, 56236, 279, 59425, 4633, 6514, 1511, 369, 279, 22702, 315, 279, 1620, 4907, 198, 438, 5552, 33776, 13, 1442, 36257, 477, 4384, 11, 912, 59425, 4633, 6514, 374, 9435, 13, 551, 35850, 42752, 1311, 5641, 344, 4633, 11, 36442, 1311, 5641, 344, 4633, 11, 36442, 1311, 5641, 344, 4633, 52467, 12582, 52577, 198, 8234, 13204, 29716, 2987, 962, 728, 23368, 13992, 34262, 551, 46080, 279, 3169, 315, 1554, 13992, 389, 279, 17130, 30747, 1511, 311, 11294, 279, 198, 10816, 4907, 320, 4151, 4907, 9082, 696, 4180, 2819, 527, 1473, 91, 4487, 13992, 3169, 1835, 765, 7817, 5291, 36821, 91, 14730, 23573, 765, 20308, 12, 36821, 91, 54405, 3274, 41017, 338, 765, 2360, 1554, 13992, 374, 9435, 310, 36821, 91, 54405, 6885, 15950, 41017, 1078, 765, 49668, 1554, 13992, 338, 36821, 91, 54405, 809, 8318, 41017, 338, 765, 99362, 72, 1554, 13992, 504, 36821, 91, 54405, 5730, 89, 2850, 8437, 8363, 70824, 41017, 262, 765, 2947, 89, 2850, 20198, 8363, 70824, 1554, 13992, 996, 36821, 91, 54405, 69991, 69, 36648, 2320, 710, 783, 41017, 257, 765, 57175, 69, 36648, 9483, 710, 783, 1554, 13992, 286, 36821, 91, 54405, 73542, 33607, 291, 969, 41017, 310, 765, 5783, 45786, 315, 1614, 49969, 323, 60966, 198, 7, 625, 4692, 1554, 13992, 8086, 8, 765, 551, 610, 198, 8234, 13204, 29716, 2987, 962, 728, 23368, 13992, 8086, 551, 46080, 279, 2430, 315, 279, 1554, 13992, 304, 4907, 369, 279, 17130, 30747, 1511, 311, 198, 36697, 279, 1949, 4907, 320, 4151, 4907, 9082, 3677, 9, 28892, 54486, 2876, 682, 5528, 5300, 304, 1554, 13992, 34262, 5829, 420, 907, 13, 551, 2273, 1227, 198, 8234, 13204, 29716, 2987, 962, 728, 1190, 582, 5598, 918, 21473, 551, 55550, 24790, 304, 1584, 449, 25537, 596, 445, 21473, 627, 2520, 810, 2038, 11, 1518, 3788, 1129, 48886, 2726, 14, 605, 13, 7461, 18, 14, 16, 13, 10125, 17248, 20, 320, 10090, 5684, 317, 2485, 1129, 48886, 2726, 14, 605, 13, 5120, 18, 14, 67171, 37284, 43, 7211, 13, 5925, 13, 10465, 10841, 320, 5607, 12279, 16519, 317, 438, 3788, 1129, 48886, 2726, 14, 605, 13, 7461, 18, 14, 16, 13, 7028, 10961, 20, 320, 69292, 12279, 16519, 570, 551, 480, 16519, 31214, 6486, 11, 8671, 16621, 11, 69292, 12279, 16519, 11, 5607, 12279, 16519, 11, 1962, 15590, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 962, 728, 2036, 66, 9353, 278, 1857, 551, 55550, 24790, 304, 1584, 449, 25537, 596, 445, 21473, 627, 2520, 810, 2038, 11, 1518, 3788, 1129, 48886, 2726, 14, 605, 13, 7461, 18, 14, 16, 13, 10125, 17248, 20, 320, 10090, 5684, 317, 2485, 1129, 48886, 2726, 14, 605, 13, 5120, 18, 14, 67171, 37284, 43, 7211, 13, 5925, 13, 10465, 10841, 320, 5607, 12279, 16519, 317, 438, 3788, 1129, 48886, 2726, 14, 605, 13, 7461, 18, 14, 16, 13, 7028, 10961, 20, 320, 69292, 12279, 16519, 570, 551, 480, 16519, 31214, 6486, 11, 8671, 16621, 11, 69292, 12279, 16519, 11, 5607, 12279, 16519, 11, 1962, 15590, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 962, 728, 2036, 66, 9353, 278, 9366, 551, 578, 1160, 315, 3127, 39046, 16003, 5144, 430, 1405, 1511, 304, 420, 4441, 13, 551, 610, 198, 8234, 13204, 29716, 2987, 962, 728, 2272, 533, 60312, 68829, 287, 19100, 551, 26868, 315, 4839, 9473, 9709, 304, 449, 279, 61442, 16003, 320, 970, 2134, 284, 510, 15, 11, 16, 10927, 551, 2273, 1227, 198, 8234, 13204, 29716, 2987, 962, 728, 870, 21340, 569, 4803, 276, 309, 13915, 5156, 11895, 28224, 535, 551, 5273, 315, 279, 7524, 549, 5852, 320, 84, 482, 503, 570, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 13204, 29716, 2987, 962, 728, 870, 21340, 569, 4803, 276, 309, 13915, 5156, 11895, 551, 5273, 315, 279, 320, 258, 2221, 30986, 2223, 8, 81000, 16628, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 13204, 29716, 2987, 962, 728, 870, 21340, 569, 4803, 276, 309, 13915, 5156, 1190, 551, 5273, 315, 279, 9473, 16628, 13, 763, 92371, 58720, 6067, 11, 503, 284, 503, 71, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 13204, 29716, 2987, 36386, 4957, 551, 75446, 65500, 1646, 955, 25, 98103, 735, 11975, 27442, 11, 423, 4082, 33, 57304, 11, 865, 32260, 18713, 65916, 198, 94304, 11, 477, 468, 1036, 1291, 22343, 13, 551, 423, 4082, 33, 11, 7594, 977, 16222, 11975, 50640, 1036, 1291, 11, 1962, 15590, 13095, 32260, 198, 8234, 13204, 29716, 2987, 36386, 77863, 1857, 551, 81920, 955, 315, 279, 468, 1036, 1291, 27605, 1147, 13, 551, 31127, 750, 13876, 1534, 10900, 2222, 82326, 198, 8234, 13204, 29716, 2987, 1326, 86, 4957, 551, 42353, 473, 31501, 596, 659, 69604, 48194, 11008, 1473, 91, 4076, 415, 765, 7817, 2611, 765, 17650, 1835, 36821, 91, 81922, 765, 20308, 765, 14730, 15431, 36821, 91, 74011, 38, 15, 54, 15, 6, 63, 220, 765, 3254, 64630, 2611, 765, 8743, 33, 220, 5728, 11, 220, 22407, 4645, 320, 1049, 21, 8, 36821, 91, 74011, 2445, 63665, 6, 63, 220, 765, 659, 69604, 18620, 480, 323, 468, 2342, 765, 8743, 33, 220, 2075, 11, 220, 12422, 4278, 320, 1049, 22, 8, 36821, 91, 74011, 2445, 63665, 15, 6, 63, 765, 659, 69604, 18620, 480, 449, 8521, 468, 15, 220, 765, 8743, 33, 220, 4370, 11, 220, 25496, 16, 320, 2550, 21, 8, 256, 36821, 91, 74011, 2445, 38, 15, 54, 6, 63, 765, 659, 69604, 18620, 468, 449, 8521, 480, 15, 220, 765, 482, 3909, 36821, 91, 74011, 5230, 31419, 63665, 15, 6, 63, 220, 765, 29824, 3745, 659, 69604, 18620, 480, 449, 8521, 468, 15, 256, 765, 8743, 33, 220, 1958, 11, 220, 23033, 15, 320, 3753, 21, 8, 256, 36821, 91, 74011, 5230, 31419, 63665, 6, 63, 220, 765, 29824, 3745, 659, 69604, 18620, 480, 323, 468, 256, 765, 8743, 33, 220, 5728, 11, 220, 23785, 4278, 320, 1049, 21, 8, 256, 36821, 91, 74011, 33863, 31419, 63665, 15, 6, 63, 220, 765, 934, 300, 575, 7203, 659, 69604, 18620, 480, 449, 8521, 468, 15, 765, 393, 4833, 220, 1484, 11, 220, 7322, 7743, 320, 1049, 22, 8, 36821, 91, 74011, 33863, 31419, 63665, 6, 63, 220, 765, 934, 300, 575, 7203, 659, 69604, 18620, 480, 323, 468, 765, 393, 4833, 220, 4161, 11, 220, 14057, 16496, 320, 1049, 21, 8, 765, 551, 480, 15, 54, 15, 82692, 31419, 63665, 82692, 31419, 63665, 15, 11, 33863, 31419, 63665, 11, 33863, 31419, 63665, 15, 11, 2445, 38, 15, 54, 11, 2445, 63665, 11, 2445, 63665, 15, 198, 8234, 13204, 29716, 2987, 1326, 86, 960, 10949, 2667, 1857, 551, 578, 1511, 8197, 743, 5865, 13, 551, 320, 43, 8, 2599, 54, 10, 385, 11, 6885, 1892, 5493, 11, 1962, 15590, 11, 20173, 362, 29967, 11, 19563, 17301, 11, 1725, 2910, 5865, 11, 8110, 29047, 5950, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 1326, 86, 5069, 287, 6213, 1857, 551, 578, 3127, 39046, 3196, 58001, 16003, 24790, 1511, 304, 279, 6041, 1486, 423, 4082, 19576, 13, 551, 480, 16519, 44639, 37, 31214, 6486, 11, 8671, 16621, 11, 69292, 12279, 16519, 11, 5607, 12279, 16519, 11, 1962, 15590, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 1326, 86, 5069, 287, 6213, 9366, 551, 578, 1160, 315, 3127, 39046, 16003, 5144, 430, 1405, 1511, 304, 420, 4441, 13, 551, 610, 198, 8234, 13204, 29716, 2987, 960, 325, 4957, 551, 4078, 315, 426, 937, 13824, 16695, 1122, 29056, 1473, 262, 473, 1702, 937, 284, 473, 30577, 24346, 489, 220, 17, 353, 62133, 353, 473, 87, 482, 22903, 353, 473, 66, 271, 2940, 62133, 11, 22903, 30202, 279, 955, 382, 20171, 5070, 369, 279, 10334, 512, 12, 1795, 1129, 40541, 5977, 62601, 94369, 916, 2971, 52745, 98033, 1639, 90160, 39151, 1481, 325, 2, 55880, 16, 198, 12, 3788, 1129, 2185, 3211, 13671, 6990, 26583, 9199, 2348, 16675, 19030, 6354, 278, 79, 1430, 63359, 811, 24965, 3395, 811, 198, 12, 3788, 1129, 14452, 22823, 2381, 2726, 52357, 683, 3554, 325, 6018, 12, 3788, 1129, 2185, 2441, 309, 754, 26327, 36103, 26583, 9199, 2348, 16675, 19030, 6354, 278, 79, 1430, 27974, 271, 91, 4076, 765, 7817, 36821, 91, 81922, 765, 14730, 21622, 36821, 91, 74011, 60300, 1169, 6, 63, 765, 62133, 284, 220, 16, 11, 22903, 284, 220, 16, 36821, 91, 74011, 22646, 11053, 6, 63, 765, 62133, 284, 220, 15, 11, 22903, 284, 220, 16, 36821, 91, 74011, 3378, 6, 63, 765, 22765, 2320, 7203, 5603, 36821, 91, 74011, 49, 8201, 6, 63, 765, 10836, 28673, 44919, 5582, 765, 551, 6933, 24412, 8201, 21861, 287, 1169, 20594, 462, 11053, 198, 8234, 13204, 29716, 2987, 960, 325, 960, 10949, 2667, 1857, 551, 578, 1511, 8197, 743, 5865, 13, 551, 320, 43, 8, 2599, 54, 10, 385, 11, 6885, 1892, 5493, 11, 1962, 15590, 11, 20173, 362, 29967, 11, 19563, 17301, 11, 1725, 2910, 5865, 11, 8110, 29047, 5950, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 960, 325, 5069, 287, 6213, 1857, 551, 578, 3127, 39046, 3196, 58001, 16003, 24790, 1511, 304, 279, 6041, 1486, 423, 4082, 19576, 13, 551, 480, 16519, 44639, 37, 31214, 6486, 11, 8671, 16621, 11, 69292, 12279, 16519, 11, 5607, 12279, 16519, 11, 1962, 15590, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 960, 325, 5069, 287, 6213, 9366, 551, 578, 1160, 315, 3127, 39046, 16003, 5144, 430, 1405, 1511, 304, 420, 4441, 13, 551, 610, 198, 8234, 13204, 29716, 2987, 960, 325, 516, 8080, 551, 69395, 17797, 354, 411, 76, 1511, 311, 38336, 553, 279, 426, 937, 24051, 1122, 382, 91, 4076, 765, 7817, 765, 17650, 36821, 91, 81922, 765, 14730, 21622, 765, 93686, 36821, 91, 74011, 9619, 51389, 24346, 2065, 6, 63, 765, 8797, 38336, 2065, 315, 279, 426, 937, 24051, 1122, 765, 482, 36821, 91, 74011, 43, 1149, 54801, 11529, 352, 78155, 6, 63, 765, 3804, 8920, 87975, 39634, 54801, 11529, 352, 78155, 12384, 765, 3788, 1129, 48886, 2726, 14, 605, 13, 5120, 18, 14, 67171, 37284, 33, 13, 2946, 13, 21239, 16, 36821, 91, 74011, 21287, 7157, 6, 63, 765, 3331, 1534, 17832, 33247, 1749, 765, 3788, 1129, 48886, 2726, 14, 605, 13, 8190, 22, 14, 18807, 21469, 23, 36821, 91, 74011, 50, 877, 47, 66, 6, 63, 765, 69934, 481, 11896, 369, 25059, 970, 22854, 24019, 811, 765, 3788, 1129, 82, 273, 4080, 18119, 85, 19060, 14, 36821, 91, 74011, 51, 6486, 6, 63, 765, 350, 8836, 9607, 19067, 544, 57304, 765, 3788, 1129, 48886, 2726, 14, 605, 13, 4645, 21, 11628, 931, 24, 12, 15602, 19, 7, 1484, 8, 10731, 2491, 12, 20, 765, 551, 8797, 51389, 24346, 2065, 11, 21287, 7157, 31214, 1149, 54801, 11529, 352, 78155, 21861, 877, 47, 66, 20594, 6486, 198, 8234, 13204, 29716, 2987, 960, 325, 1326, 86, 1857, 551, 42353, 473, 31501, 596, 659, 69604, 48194, 11008, 1473, 91, 4076, 415, 765, 7817, 2611, 765, 17650, 1835, 36821, 91, 81922, 765, 20308, 765, 14730, 15431, 36821, 91, 74011, 38, 15, 54, 15, 6, 63, 220, 765, 3254, 64630, 2611, 765, 8743, 33, 220, 5728, 11, 220, 22407, 4645, 320, 1049, 21, 8, 36821, 91, 74011, 2445, 63665, 6, 63, 220, 765, 659, 69604, 18620, 480, 323, 468, 2342, 765, 8743, 33, 220, 2075, 11, 220, 12422, 4278, 320, 1049, 22, 8, 36821, 91, 74011, 2445, 63665, 15, 6, 63, 765, 659, 69604, 18620, 480, 449, 8521, 468, 15, 220, 765, 8743, 33, 220, 4370, 11, 220, 25496, 16, 320, 2550, 21, 8, 256, 36821, 91, 74011, 2445, 38, 15, 54, 6, 63, 765, 659, 69604, 18620, 468, 449, 8521, 480, 15, 220, 765, 482, 3909, 36821, 91, 74011, 5230, 31419, 63665, 15, 6, 63, 220, 765, 29824, 3745, 659, 69604, 18620, 480, 449, 8521, 468, 15, 256, 765, 8743, 33, 220, 1958, 11, 220, 23033, 15, 320, 3753, 21, 8, 256, 36821, 91, 74011, 5230, 31419, 63665, 6, 63, 220, 765, 29824, 3745, 659, 69604, 18620, 480, 323, 468, 256, 765, 8743, 33, 220, 5728, 11, 220, 23785, 4278, 320, 1049, 21, 8, 256, 36821, 91, 74011, 33863, 31419, 63665, 15, 6, 63, 220, 765, 934, 300, 575, 7203, 659, 69604, 18620, 480, 449, 8521, 468, 15, 765, 393, 4833, 220, 1484, 11, 220, 7322, 7743, 320, 1049, 22, 8, 36821, 91, 74011, 33863, 31419, 63665, 6, 63, 220, 765, 934, 300, 575, 7203, 659, 69604, 18620, 480, 323, 468, 765, 393, 4833, 220, 4161, 11, 220, 14057, 16496, 320, 1049, 21, 8, 765, 551, 480, 15, 54, 15, 82692, 31419, 63665, 82692, 31419, 63665, 15, 11, 33863, 31419, 63665, 11, 33863, 31419, 63665, 15, 11, 2445, 38, 15, 54, 11, 2445, 63665, 11, 2445, 63665, 15, 198, 8234, 13204, 29716, 2987, 81183, 728, 81554, 5631, 54256, 1857, 551, 14727, 5631, 30061, 1749, 1511, 304, 279, 20804, 4082, 6471, 1473, 91, 4076, 1078, 765, 17650, 1014, 36821, 91, 14730, 12, 765, 20308, 381, 36821, 91, 74011, 1182, 12, 3301, 6, 63, 286, 765, 13134, 83, 85393, 1880, 453, 2637, 71430, 2898, 6914, 83, 220, 1490, 320, 1049, 19, 8, 220, 36821, 91, 74011, 1182, 11529, 56, 33, 6, 63, 286, 765, 80835, 1880, 453, 2637, 393, 4833, 220, 3534, 320, 1049, 21, 8, 260, 36821, 91, 74011, 1182, 6830, 13706, 6, 63, 286, 765, 480, 620, 1880, 453, 2637, 469, 2989, 220, 6086, 320, 1049, 23, 8, 1881, 36821, 91, 74011, 1507, 6, 63, 310, 765, 356, 2715, 277, 3833, 1880, 453, 11, 393, 4833, 220, 5332, 320, 2550, 19, 8, 996, 36821, 91, 74011, 27416, 38, 6, 63, 1881, 765, 22353, 64, 1880, 453, 2637, 432, 5901, 220, 1490, 320, 1049, 23, 8, 692, 36821, 91, 74011, 44, 5119, 6, 63, 1881, 765, 50181, 17137, 1880, 453, 2637, 8743, 33, 220, 1954, 320, 679, 19, 8, 260, 36821, 91, 74011, 40, 2898, 6, 63, 1881, 765, 95359, 1880, 453, 2637, 8743, 33, 220, 1774, 320, 2550, 17, 8, 286, 36821, 91, 74011, 45, 5158, 6, 63, 1881, 765, 2394, 52178, 441, 1880, 453, 2637, 8743, 33, 220, 2618, 320, 2550, 18, 8, 996, 36821, 91, 74011, 46, 5158, 6, 63, 1881, 765, 2394, 52178, 441, 1880, 453, 2637, 8743, 33, 220, 2618, 320, 2550, 18, 8, 996, 36821, 91, 74011, 53605, 890, 437, 2439, 6, 63, 220, 765, 62763, 747, 277, 1880, 453, 2637, 393, 4833, 220, 3226, 320, 3753, 21, 8, 286, 36821, 91, 74011, 71, 21340, 569, 8118, 6, 63, 257, 765, 482, 1961, 765, 551, 19084, 6830, 13706, 11, 1182, 11529, 56, 33, 11, 1182, 12, 3301, 11, 1507, 38868, 2898, 28112, 5119, 22812, 5158, 22812, 33460, 75449, 5158, 20393, 21340, 569, 8118, 11, 53605, 890, 437, 2439, 198, 8234, 13204, 29716, 2987, 81183, 728, 77663, 54625, 551, 763, 4550, 9499, 284, 220, 16, 12148, 82624, 61734, 570, 551, 2273, 1227, 551, 220, 16, 611, 28068, 273, 198, 8234, 13204, 29716, 2987, 81183, 728, 749, 39100, 4486, 551, 63755, 1614, 304, 902, 279, 20804, 4082, 22702, 374, 2884, 13, 551, 3276, 11691, 442, 39100, 11, 809, 442, 39100, 61662, 39100, 198, 8234, 13204, 29716, 2987, 81183, 728, 11895, 551, 5273, 315, 279, 320, 258, 2221, 30986, 2223, 8, 81000, 16628, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 13204, 29716, 2987, 81183, 728, 1190, 71, 551, 5273, 315, 279, 320, 2295, 30986, 2223, 8, 99014, 596, 59086, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 13204, 29716, 2987, 81183, 728, 10985, 5893, 35758, 70048, 4090, 551, 38527, 35758, 42271, 1511, 311, 2018, 6426, 279, 51052, 3634, 7997, 596, 5865, 1139, 198, 1820, 1972, 34873, 3634, 382, 91, 4076, 1881, 765, 7817, 260, 765, 17650, 667, 36821, 91, 33658, 313, 765, 14730, 4521, 765, 20308, 36821, 91, 74011, 47, 1037, 6, 63, 765, 393, 1037, 596, 10049, 318, 519, 220, 765, 3788, 1129, 2185, 516, 5979, 5886, 1248, 916, 34574, 1873, 39281, 63328, 72, 14, 6726, 2550, 24391, 15515, 6804, 22, 30, 20708, 4, 18, 35, 7141, 392, 36821, 91, 74011, 6102, 2300, 6, 63, 765, 27697, 4968, 18237, 1749, 765, 3788, 1129, 73, 33714, 13, 2690, 2726, 45772, 65, 14, 16647, 14, 605, 13, 5120, 18, 14, 67171, 37284, 33, 13, 3174, 13, 13895, 15, 36821, 91, 74011, 50, 12757, 6, 63, 765, 96030, 907, 66266, 765, 3788, 1129, 73, 33714, 13, 2690, 2726, 45772, 75, 14, 16647, 14, 605, 13, 5120, 18, 14, 67171, 37284, 43, 7211, 13, 2075, 13, 22507, 36821, 91, 74011, 626, 67054, 6, 63, 765, 800, 67054, 1749, 765, 3788, 1129, 73, 33714, 13, 2690, 2726, 45772, 65, 14, 16647, 14, 605, 13, 5120, 18, 14, 67171, 37284, 33, 13, 3226, 13, 4278, 4044, 765, 551, 7639, 2300, 28494, 1037, 21861, 12757, 11, 626, 67054, 198, 8234, 13204, 29716, 2987, 81941, 5314, 6665, 54449, 551, 26868, 315, 49976, 597, 93558, 824, 5089, 87298, 3160, 3235, 1855, 8183, 627, 24741, 279, 3325, 24473, 17915, 704, 315, 682, 25776, 627, 15346, 1193, 387, 7863, 1990, 1652, 7607, 315, 4528, 13167, 2786, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 13204, 29716, 2987, 81941, 15054, 530, 1291, 551, 578, 2082, 19440, 4877, 19392, 279, 16437, 1511, 198, 2000, 279, 8197, 743, 323, 65614, 315, 35876, 30597, 382, 35736, 14236, 320, 4291, 17508, 16259, 311, 279, 9959, 9904, 997, 12, 41618, 63380, 47, 85802, 2485, 1129, 2185, 3211, 13671, 6990, 26583, 9199, 2348, 16744, 67713, 340, 12, 1595, 37, 24860, 12, 26760, 4077, 12, 41618, 35263, 9377, 85802, 1277, 1129, 2185, 739, 6358, 2180, 88, 56840, 15761, 15549, 2971, 561, 752, 86686, 51538, 12978, 14, 35263, 9377, 2628, 2, 11786, 2971, 561, 752, 100146, 74, 3914, 752, 751, 10274, 66, 10692, 24165, 30, 30930, 28, 360, 2221, 2269, 483, 8, 551, 610, 198, 8234, 13204, 29716, 2987, 81941, 960, 10949, 2667, 551, 578, 955, 315, 8197, 743, 1511, 555, 279, 2068, 382, 91, 5273, 3586, 765, 5291, 7817, 9432, 91, 14730, 43191, 765, 20308, 12, 9432, 91, 74011, 2599, 54, 6, 63, 667, 765, 5033, 28078, 11277, 17301, 1835, 9432, 91, 74011, 43, 2599, 54, 6, 63, 5291, 765, 29363, 1534, 57088, 11277, 17301, 220, 9432, 91, 74011, 2599, 54, 10, 385, 6, 63, 1835, 765, 5033, 28078, 11277, 17301, 449, 2254, 27605, 1147, 9432, 91, 74011, 43, 2599, 54, 10, 385, 6, 63, 765, 29363, 1534, 57088, 11277, 17301, 449, 2254, 27605, 1147, 9432, 91, 1595, 59436, 43, 8, 2599, 54, 6, 63, 3909, 765, 257, 362, 10824, 315, 10314, 54, 323, 72428, 54, 9432, 91, 1595, 59436, 43, 8, 2599, 54, 10, 385, 6, 63, 220, 765, 362, 10824, 315, 10314, 54, 323, 72428, 54, 449, 2254, 27605, 1147, 9432, 91, 74011, 19563, 17301, 6, 63, 394, 765, 44144, 17301, 5291, 9432, 91, 74011, 6885, 1892, 5493, 489, 11277, 17301, 6, 63, 262, 765, 70128, 743, 315, 279, 17697, 9710, 12384, 320, 91092, 25, 220, 605, 13, 4645, 21, 4537, 522, 4080, 13, 1049, 19, 13, 717, 13, 15901, 8, 9432, 91, 74011, 8110, 29047, 5950, 6, 63, 310, 765, 8976, 29047, 5950, 4391, 9432, 91, 74011, 13066, 79, 403, 5865, 6, 63, 260, 765, 9365, 5865, 338, 765, 551, 320, 43, 8, 2599, 54, 13247, 43, 8, 2599, 54, 10, 385, 11, 2599, 54, 11, 2599, 54, 10, 385, 31214, 2599, 54, 31214, 2599, 54, 10, 385, 11, 22612, 50482, 27605, 1147, 11, 6885, 1892, 5493, 489, 11277, 17301, 11, 1962, 15590, 11, 19563, 17301, 11, 8110, 29047, 5950, 10900, 2870, 5865, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 81941, 46942, 365, 525, 75482, 551, 328, 45845, 45379, 304, 87298, 3634, 369, 264, 11277, 89354, 8197, 743, 13, 1102, 374, 279, 4907, 198, 1073, 279, 8592, 11277, 89354, 1746, 59, 38118, 36802, 71, 2308, 61, 17, 91, 74, 10, 38, 97850, 17, 15523, 17, 76, 2253, 32816, 8, 5343, 304, 279, 8197, 198, 751, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 13204, 29716, 2987, 81941, 4795, 86, 75482, 551, 578, 65251, 45379, 5852, 369, 279, 958, 49270, 11277, 17301, 304, 279, 72428, 54, 3070, 627, 2028, 45379, 374, 5089, 1752, 11, 22797, 311, 279, 2027, 315, 279, 25655, 55404, 258, 2442, 258, 10801, 198, 438, 279, 3160, 315, 279, 45379, 87298, 4724, 1746, 81, 15511, 8673, 92, 353, 765, 42, 15511, 10453, 53498, 3, 570, 551, 2273, 1227, 198, 8234, 13204, 17777, 25357, 2036, 6634, 41779, 16597, 9209, 1292, 551, 578, 3722, 16597, 1749, 1511, 311, 6994, 279, 3722, 16597, 5497, 627, 91, 1630, 79504, 29469, 16597, 6872, 9898, 765, 7817, 58040, 5351, 9432, 91, 9411, 5272, 91, 3597, 3597, 3597, 20098, 7511, 91, 3146, 67684, 1126, 1630, 79504, 29469, 16597, 320, 74912, 37790, 33395, 667, 765, 578, 4751, 330, 22491, 1126, 1, 19813, 810, 311, 279, 4288, 17140, 315, 2678, 64568, 3695, 1109, 311, 279, 7106, 1376, 315, 279, 6205, 13, 3053, 387, 1511, 449, 2536, 2320, 363, 1126, 10688, 422, 814, 3118, 4288, 64568, 635, 89935, 13, 9432, 91, 3146, 11126, 29016, 1630, 79504, 29469, 16597, 320, 3624, 55, 37790, 33395, 2342, 765, 12477, 369, 26679, 279, 25524, 6070, 315, 264, 3254, 26110, 13, 58040, 1078, 9432, 91, 3146, 12243, 12, 39206, 1630, 79504, 29469, 16597, 320, 17526, 55, 37790, 33395, 1078, 765, 362, 15105, 11383, 1511, 369, 11944, 60993, 315, 67422, 710, 532, 15792, 12631, 1701, 24473, 3722, 16597, 22323, 13, 52575, 9432, 91, 3146, 26375, 6830, 67330, 1630, 79504, 2522, 31436, 320, 50, 3027, 50, 33395, 504, 765, 12477, 369, 21630, 51593, 47194, 304, 279, 1404, 2134, 315, 220, 16, 12, 1041, 26807, 13, 37717, 2038, 389, 19320, 1404, 11, 6211, 11, 323, 8141, 13, 56899, 9432, 91, 3146, 55, 79504, 35698, 1968, 320, 55, 8268, 33395, 7714, 765, 12477, 311, 4007, 15792, 4632, 13931, 11, 25066, 11, 323, 2814, 321, 5184, 13, 37717, 3630, 389, 4632, 26839, 11, 17915, 11, 323, 11413, 2136, 13, 5351, 5291, 9432, 91, 3146, 38, 8875, 287, 4953, 7232, 1630, 79504, 29469, 16597, 320, 38, 5511, 37790, 33395, 310, 765, 36283, 6751, 1511, 369, 279, 6492, 315, 15792, 12631, 449, 279, 10672, 24310, 520, 264, 8521, 26682, 9392, 13, 5351, 13771, 9432, 91, 3146, 3905, 49889, 5531, 11746, 39546, 320, 49, 9691, 33395, 5218, 765, 5234, 64036, 1630, 37790, 1749, 311, 6767, 1422, 1658, 22955, 21261, 304, 264, 220, 17, 33520, 5654, 315, 87298, 3634, 13, 37717, 2038, 922, 279, 1972, 12, 7993, 320, 75, 32891, 36401, 11, 8106, 6070, 11, 8631, 323, 42655, 8, 304, 3254, 48689, 599, 543, 483, 323, 67422, 710, 532, 10688, 57370, 551, 94030, 287, 4953, 7232, 1630, 79504, 29469, 16597, 320, 38, 5511, 37790, 705, 12243, 12, 39206, 1630, 79504, 29469, 16597, 320, 17526, 55, 37790, 705, 67684, 1126, 1630, 79504, 29469, 16597, 320, 74912, 37790, 705, 3905, 49889, 5531, 11746, 39546, 320, 49, 9691, 705, 11126, 29016, 1630, 79504, 29469, 16597, 320, 3624, 55, 37790, 705, 26375, 6830, 67330, 1630, 79504, 2522, 31436, 320, 50, 3027, 50, 705, 55, 79504, 35698, 1968, 320, 55, 8268, 705, 359, 10547, 198, 8234, 21661, 1276, 24965, 3395, 811, 551, 578, 1396, 315, 10887, 3254, 6683, 29217, 3238, 551, 528, 198, 8234, 21661, 48211, 26216, 551, 74323, 315, 279, 3424, 5144, 430, 527, 3118, 304, 420, 4441, 13, 551, 610, 198, 8234, 21661, 73318, 4269, 46779, 532, 42565, 9353, 4957, 551, 3959, 56236, 422, 279, 40635, 374, 16997, 520, 279, 31206, 477, 25524, 2237, 13, 551, 25524, 13387, 43943, 198, 8234, 21661, 73318, 4269, 46779, 532, 42565, 9353, 2981, 551, 3959, 56236, 279, 33299, 477, 43030, 4595, 6532, 304, 26679, 279, 3424, 13, 551, 610, 198, 8234, 21661, 73318, 4269, 46779, 532, 42565, 9353, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 73318, 4269, 46779, 532, 42565, 9353, 2776, 1055, 685, 749, 43943, 821, 51248, 6512, 12212, 551, 578, 75678, 520, 902, 279, 35876, 18052, 374, 10887, 13, 551, 2273, 1227, 551, 2132, 198, 8234, 21661, 73318, 4269, 46779, 532, 42565, 9353, 2776, 1055, 685, 749, 43943, 821, 51248, 13, 49575, 1857, 551, 578, 955, 315, 30945, 61002, 40126, 430, 574, 46836, 382, 36482, 2819, 527, 1473, 91, 68372, 61002, 89457, 692, 765, 7817, 7714, 36821, 91, 14730, 16974, 765, 20308, 23573, 36821, 91, 54405, 45, 4592, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 8286, 11, 323, 4907, 36821, 91, 54405, 45, 21089, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 8286, 11, 323, 9499, 36821, 91, 54405, 45, 2898, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 7410, 11, 323, 9499, 36821, 91, 54405, 45, 11079, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 7410, 11, 323, 1218, 12130, 3368, 765, 551, 452, 11079, 22812, 2898, 22812, 4592, 22812, 21089, 198, 8234, 21661, 73318, 4269, 35194, 3659, 1928, 88, 2214, 37732, 551, 17262, 315, 279, 12472, 13, 551, 610, 198, 8234, 21661, 73318, 4269, 35194, 3659, 1928, 88, 2214, 2981, 551, 3959, 56236, 279, 33299, 477, 43030, 4595, 6532, 304, 26679, 279, 3424, 13, 551, 610, 198, 8234, 21661, 73318, 4269, 35194, 3659, 1928, 88, 2214, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 73318, 4269, 35194, 3659, 1928, 88, 2214, 2776, 1055, 685, 749, 43943, 821, 51248, 6512, 12212, 551, 578, 75678, 520, 902, 279, 35876, 18052, 374, 10887, 13, 551, 2273, 1227, 551, 2132, 198, 8234, 21661, 73318, 4269, 35194, 3659, 1928, 88, 2214, 2776, 1055, 685, 749, 43943, 821, 51248, 13, 49575, 1857, 551, 578, 955, 315, 30945, 61002, 40126, 430, 574, 46836, 382, 36482, 2819, 527, 1473, 91, 68372, 61002, 89457, 692, 765, 7817, 7714, 36821, 91, 14730, 16974, 765, 20308, 23573, 36821, 91, 54405, 45, 4592, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 8286, 11, 323, 4907, 36821, 91, 54405, 45, 21089, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 8286, 11, 323, 9499, 36821, 91, 54405, 45, 2898, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 7410, 11, 323, 9499, 36821, 91, 54405, 45, 11079, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 7410, 11, 323, 1218, 12130, 3368, 765, 551, 452, 11079, 22812, 2898, 22812, 4592, 22812, 21089, 198, 8234, 21661, 73318, 4269, 41779, 16597, 21957, 27895, 1748, 86450, 1704, 35961, 551, 578, 46406, 315, 279, 10672, 24310, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 962, 11694, 950, 19231, 55741, 10135, 16491, 4957, 551, 3959, 56236, 422, 279, 40635, 374, 16997, 520, 279, 31206, 477, 25524, 2237, 13, 551, 25524, 13387, 43943, 198, 8234, 21661, 962, 11694, 950, 19231, 55741, 10135, 16491, 2981, 551, 3959, 56236, 279, 33299, 477, 43030, 4595, 6532, 304, 26679, 279, 3424, 13, 551, 610, 198, 8234, 21661, 962, 11694, 950, 19231, 55741, 10135, 16491, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 962, 11694, 950, 19231, 55741, 10135, 16491, 2776, 1055, 685, 749, 43943, 821, 51248, 6512, 12212, 551, 578, 75678, 520, 902, 279, 35876, 18052, 374, 10887, 13, 551, 2273, 1227, 551, 2132, 198, 8234, 21661, 962, 11694, 950, 19231, 55741, 10135, 16491, 2776, 1055, 685, 749, 43943, 821, 51248, 13, 49575, 1857, 551, 578, 955, 315, 30945, 61002, 40126, 430, 574, 46836, 382, 36482, 2819, 527, 1473, 91, 68372, 61002, 89457, 692, 765, 7817, 7714, 36821, 91, 14730, 16974, 765, 20308, 23573, 36821, 91, 54405, 45, 4592, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 8286, 11, 323, 4907, 36821, 91, 54405, 45, 21089, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 8286, 11, 323, 9499, 36821, 91, 54405, 45, 2898, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 7410, 11, 323, 9499, 36821, 91, 54405, 45, 11079, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 7410, 11, 323, 1218, 12130, 3368, 765, 551, 452, 11079, 22812, 2898, 22812, 4592, 22812, 21089, 198, 8234, 21661, 13, 47194, 68436, 40656, 1276, 19862, 292, 60799, 551, 1556, 7698, 38938, 279, 1396, 315, 39445, 15696, 304, 279, 198, 7993, 11, 13890, 311, 279, 1396, 315, 2536, 38029, 10925, 304, 198, 43639, 9962, 13, 551, 528, 198, 8234, 21661, 13, 47194, 68436, 40656, 1276, 69700, 551, 1556, 7698, 38938, 279, 3160, 315, 279, 95481, 25521, 38319, 3424, 13, 551, 528, 198, 8234, 21661, 13, 47194, 68436, 40656, 25606, 28039, 551, 20880, 315, 279, 2849, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 18, 198, 8234, 21661, 13, 47194, 68436, 40656, 929, 32891, 18764, 5973, 551, 17736, 315, 279, 1176, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 40656, 929, 32891, 18764, 960, 551, 17736, 315, 279, 2132, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 40656, 929, 32891, 18764, 522, 551, 17736, 315, 279, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 40656, 929, 32891, 18764, 24879, 551, 37337, 1990, 2132, 323, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 13, 47194, 68436, 40656, 929, 32891, 18764, 63029, 551, 37337, 1990, 1176, 323, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 13, 47194, 68436, 40656, 929, 32891, 18764, 74401, 551, 37337, 1990, 1176, 323, 2132, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 1276, 19862, 292, 60799, 551, 1556, 7698, 38938, 279, 1396, 315, 39445, 15696, 304, 279, 198, 7993, 11, 13890, 311, 279, 1396, 315, 2536, 38029, 10925, 304, 198, 43639, 9962, 13, 551, 528, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 1276, 69700, 551, 1556, 7698, 38938, 279, 3160, 315, 279, 95481, 25521, 38319, 3424, 13, 551, 528, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 25606, 28039, 551, 20880, 315, 279, 2849, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 18, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 929, 32891, 18764, 5973, 551, 17736, 315, 279, 1176, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 929, 32891, 18764, 960, 551, 17736, 315, 279, 2132, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 929, 32891, 18764, 522, 551, 17736, 315, 279, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 929, 32891, 18764, 24879, 551, 37337, 1990, 2132, 323, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 929, 32891, 18764, 63029, 551, 37337, 1990, 1176, 323, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 929, 32891, 18764, 74401, 551, 37337, 1990, 1176, 323, 2132, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 13, 47194, 68436, 85187, 1276, 19862, 292, 60799, 551, 1556, 7698, 38938, 279, 1396, 315, 39445, 15696, 304, 279, 198, 7993, 11, 13890, 311, 279, 1396, 315, 2536, 38029, 10925, 304, 198, 43639, 9962, 13, 551, 528, 198, 8234, 21661, 13, 47194, 68436, 85187, 1276, 69700, 551, 1556, 7698, 38938, 279, 3160, 315, 279, 95481, 25521, 38319, 3424, 13, 551, 528, 198, 8234, 21661, 13, 47194, 68436, 85187, 25606, 28039, 551, 20880, 315, 279, 2849, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 18, 198, 8234, 21661, 13, 47194, 68436, 85187, 929, 32891, 18764, 5973, 551, 17736, 315, 279, 1176, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 85187, 929, 32891, 18764, 960, 551, 17736, 315, 279, 2132, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 85187, 929, 32891, 18764, 522, 551, 17736, 315, 279, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 85187, 929, 32891, 18764, 24879, 551, 37337, 1990, 2132, 323, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 13, 47194, 68436, 85187, 929, 32891, 18764, 63029, 551, 37337, 1990, 1176, 323, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 13, 47194, 68436, 85187, 929, 32891, 18764, 74401, 551, 37337, 1990, 1176, 323, 2132, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 1770, 772, 8535, 75339, 52890, 5265, 551, 578, 12903, 5613, 1963, 13, 551, 528, 843, 198, 8234, 21661, 1770, 772, 8535, 75339, 52890, 2894, 551, 578, 5150, 907, 315, 279, 7200, 13225, 13, 5273, 315, 7315, 15151, 264, 5355, 11218, 7200, 13225, 323, 198, 285, 12742, 505, 8336, 32161, 904, 7200, 13225, 19179, 477, 22702, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 1770, 772, 8535, 75339, 52890, 4957, 551, 17366, 13225, 955, 13, 551, 2167, 11, 485, 1248, 198, 8234, 21661, 1770, 772, 8535, 75339, 52890, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 91571, 623, 7569, 1534, 551, 13440, 279, 59580, 374, 12903, 2320, 7569, 1534, 11, 602, 1770, 13, 374, 5727, 12006, 369, 2225, 198, 42682, 2819, 13, 551, 1845, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 75339, 52890, 5265, 551, 578, 12903, 5613, 1963, 13, 551, 528, 843, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 75339, 52890, 2894, 551, 578, 5150, 907, 315, 279, 7200, 13225, 13, 5273, 315, 7315, 15151, 264, 5355, 11218, 7200, 13225, 323, 198, 285, 12742, 505, 8336, 32161, 904, 7200, 13225, 19179, 477, 22702, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 75339, 52890, 4957, 551, 17366, 13225, 955, 13, 551, 2167, 11, 485, 1248, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 75339, 52890, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 91571, 623, 7569, 1534, 551, 13440, 279, 59580, 374, 12903, 2320, 7569, 1534, 11, 602, 1770, 13, 374, 5727, 12006, 369, 2225, 198, 42682, 2819, 13, 551, 1845, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 7001, 16756, 291, 551, 13440, 279, 59580, 706, 2038, 922, 41579, 320, 43590, 37619, 19670, 37619, 323, 5255, 65691, 7058, 5094, 291, 570, 551, 1845, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 2245, 75339, 52890, 5265, 551, 578, 12903, 5613, 1963, 13, 551, 528, 843, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 2245, 75339, 52890, 2894, 551, 578, 5150, 907, 315, 279, 7200, 13225, 13, 5273, 315, 7315, 15151, 264, 5355, 11218, 7200, 13225, 323, 198, 285, 12742, 505, 8336, 32161, 904, 7200, 13225, 19179, 477, 22702, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 2245, 75339, 52890, 4957, 551, 17366, 13225, 955, 13, 551, 2167, 11, 485, 1248, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 2245, 75339, 52890, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 1770, 772, 8535, 75339, 39383, 2253, 772, 8535, 91571, 623, 7569, 1534, 551, 13440, 279, 7200, 6070, 374, 12903, 2320, 7569, 1534, 11, 602, 1770, 13, 374, 5727, 12006, 198, 2000, 2225, 12903, 2819, 13, 551, 1845, 198, 8234, 21661, 1770, 772, 8535, 75339, 39383, 2253, 772, 8535, 75339, 52890, 5265, 551, 578, 12903, 5613, 1963, 13, 551, 528, 843, 198, 8234, 21661, 1770, 772, 8535, 75339, 39383, 2253, 772, 8535, 75339, 52890, 2894, 551, 578, 5150, 907, 315, 279, 7200, 13225, 13, 5273, 315, 7315, 15151, 264, 5355, 11218, 7200, 13225, 323, 198, 285, 12742, 505, 8336, 32161, 904, 7200, 13225, 19179, 477, 22702, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 1770, 772, 8535, 75339, 39383, 2253, 772, 8535, 75339, 52890, 4957, 551, 17366, 13225, 955, 13, 551, 2167, 11, 485, 1248, 198, 8234, 21661, 1770, 772, 8535, 75339, 39383, 2253, 772, 8535, 75339, 52890, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 749, 39100, 91571, 49065, 99863, 12127, 15040, 551, 35721, 369, 279, 2592, 315, 279, 828, 25, 364, 60529, 6, 477, 364, 84872, 4527, 551, 9526, 10900, 61461, 198, 8234, 21661, 749, 39100, 749, 39100, 646, 355, 1512, 3225, 15040, 551, 35721, 369, 279, 2592, 315, 279, 828, 25, 364, 60529, 6, 477, 364, 84872, 4527, 551, 9526, 10900, 61461, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 1770, 544, 10603, 551, 7572, 14747, 3369, 5979, 2301, 315, 264, 13238, 2849, 304, 11668, 19032, 551, 2273, 1227, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 12749, 19100, 551, 22748, 8331, 315, 264, 13238, 2849, 304, 10973, 2819, 320, 1527, 220, 15, 311, 220, 16, 570, 551, 2273, 1227, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 5949, 669, 38368, 63856, 551, 5377, 16622, 22465, 315, 264, 13238, 2849, 13, 551, 2273, 1227, 551, 16798, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 27764, 669, 38368, 11327, 54449, 551, 10928, 16622, 1510, 17915, 315, 264, 13238, 2849, 13, 551, 2273, 1227, 551, 23598, 486, 611, 23819, 3146, 220, 17, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 13, 77665, 2617, 81287, 551, 578, 3177, 21261, 2391, 279, 17244, 19179, 13, 551, 2273, 1227, 551, 67272, 611, 23819, 3146, 220, 17, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 18861, 15380, 551, 578, 2860, 3158, 315, 279, 2849, 2391, 17244, 323, 20334, 22323, 1234, 77052, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 17, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 18861, 35430, 42234, 551, 14227, 18112, 315, 279, 13238, 2849, 13, 26379, 527, 512, 63, 20553, 11529, 1430, 21963, 600, 7964, 1595, 13576, 7964, 1595, 70873, 7964, 2564, 551, 610, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 18861, 15897, 551, 84922, 315, 279, 4553, 3756, 13, 551, 610, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 14914, 269, 655, 551, 22855, 269, 655, 13931, 1511, 304, 279, 13238, 2849, 13, 551, 610, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 14914, 269, 655, 766, 29997, 367, 551, 78719, 23524, 279, 59251, 315, 279, 15938, 655, 6324, 13, 26379, 527, 512, 63, 42838, 23283, 1113, 7964, 1595, 35212, 96649, 7964, 1595, 43824, 1529, 2277, 7964, 2564, 551, 610, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 1770, 70329, 47498, 12969, 551, 77976, 44010, 3729, 13931, 1511, 304, 279, 13238, 2849, 13, 551, 610, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 870, 1286, 47498, 12969, 551, 52029, 44010, 3729, 13931, 1511, 304, 279, 13238, 2849, 13, 551, 610, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 18497, 349, 551, 3804, 71015, 13931, 1511, 304, 279, 13238, 2849, 13, 551, 610, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 7485, 21245, 551, 6984, 3729, 13931, 1511, 304, 279, 13238, 2849, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 2710, 551, 4076, 315, 279, 34454, 70504, 1296, 13010, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 4957, 551, 55982, 315, 279, 34454, 70504, 1296, 13010, 1778, 439, 51715, 307, 367, 11, 40602, 4469, 367, 345, 3957, 26429, 2065, 11, 18733, 12127, 1131, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 55782, 1821, 2710, 551, 358, 3202, 1741, 836, 315, 279, 312, 8252, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 55782, 1821, 1326, 300, 3464, 94376, 1265, 551, 650, 1152, 16743, 20545, 320, 82190, 8, 315, 279, 312, 8252, 304, 279, 5510, 6962, 627, 15346, 387, 264, 907, 1990, 220, 15, 323, 220, 16, 13, 551, 2273, 1227, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 55782, 1821, 1326, 300, 3464, 94376, 6196, 551, 650, 1152, 16743, 20545, 320, 82190, 8, 315, 279, 312, 8252, 1306, 279, 38729, 627, 15346, 387, 264, 907, 1990, 220, 15, 323, 220, 16, 13, 551, 2273, 1227, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 55782, 1821, 2932, 4464, 551, 43609, 315, 279, 14085, 519, 11, 304, 19032, 551, 2273, 1227, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 37262, 2710, 551, 4076, 315, 279, 2027, 11, 52754, 279, 358, 3202, 1741, 836, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 37262, 1326, 300, 3464, 94376, 1265, 551, 650, 1152, 16743, 20545, 320, 82190, 8, 315, 279, 312, 8252, 304, 279, 5510, 6962, 627, 15346, 387, 264, 907, 1990, 220, 15, 323, 220, 16, 13, 551, 2273, 1227, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 37262, 1326, 300, 3464, 94376, 6196, 551, 650, 1152, 16743, 20545, 320, 82190, 8, 315, 279, 312, 8252, 1306, 279, 38729, 627, 15346, 387, 264, 907, 1990, 220, 15, 323, 220, 16, 13, 551, 2273, 1227, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 37262, 9911, 1968, 551, 8593, 1968, 315, 279, 2027, 11, 304, 19032, 551, 2273, 1227, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 37262, 36983, 3084, 84809, 551, 11746, 7394, 12303, 823, 315, 279, 2027, 11, 304, 3148, 2027, 824, 3148, 51483, 824, 892, 13, 551, 2273, 1227, 551, 220, 16, 611, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1783, 988, 2710, 551, 358, 3202, 1741, 836, 315, 279, 312, 8252, 6832, 4478, 374, 17439, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1783, 988, 1351, 1335, 9430, 551, 578, 4478, 315, 279, 1396, 315, 14085, 519, 477, 2027, 35715, 16489, 14, 8723, 2041, 345, 716, 3148, 315, 2860, 51483, 11, 824, 892, 13, 551, 2273, 1227, 551, 35751, 611, 23882, 611, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1783, 988, 516, 15934, 37814, 9430, 551, 578, 3230, 4478, 315, 279, 14085, 519, 11, 824, 3148, 315, 4642, 51483, 3777, 198, 2069, 1326, 13, 9501, 570, 551, 2273, 1227, 551, 35751, 611, 23882, 611, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1783, 988, 516, 15934, 32130, 15380, 9430, 551, 578, 3230, 4478, 315, 279, 14085, 519, 11, 824, 7479, 3158, 315, 4642, 51483, 13, 551, 2273, 1227, 551, 35751, 611, 23819, 3146, 220, 17, 611, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1783, 988, 46734, 2017, 41232, 551, 578, 48639, 11900, 11, 16997, 505, 22337, 315, 14085, 519, 477, 2027, 824, 198, 4174, 315, 6732, 927, 892, 13, 551, 2273, 1227, 551, 220, 16, 611, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 55199, 75466, 551, 578, 13010, 9499, 1161, 8, 304, 279, 34454, 70504, 38729, 2391, 264, 11742, 13010, 13, 551, 2273, 1227, 551, 49328, 9799, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 55199, 70908, 554, 551, 578, 7410, 2391, 279, 34454, 70504, 1296, 13010, 13, 551, 2273, 1227, 551, 281, 36940, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 55199, 26210, 33392, 398, 15005, 40766, 551, 578, 4785, 47729, 3634, 15798, 304, 220, 16, 36363, 320, 40625, 6530, 824, 51483, 3148, 570, 551, 2273, 1227, 551, 2606, 321, 2058, 611, 23882, 611, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 55199, 1326, 300, 33392, 398, 15005, 40766, 551, 578, 6962, 47729, 3634, 15798, 304, 220, 16, 36363, 320, 40625, 6530, 824, 51483, 8286, 570, 551, 2273, 1227, 551, 220, 16, 611, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 55199, 35171, 9430, 551, 578, 63920, 16743, 6962, 6530, 304, 8286, 824, 892, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 18, 611, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 55199, 6512, 4570, 12962, 551, 578, 892, 389, 4365, 315, 279, 51483, 304, 279, 34454, 70504, 13010, 13, 551, 2273, 1227, 551, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 722, 4842, 68913, 18271, 23830, 551, 578, 5144, 315, 14085, 1821, 315, 279, 13010, 477, 36256, 3094, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 722, 4842, 68913, 44980, 23830, 551, 578, 5144, 315, 3956, 315, 279, 13010, 477, 36256, 3094, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 722, 4842, 68913, 1351, 1335, 28525, 12130, 3368, 551, 578, 13010, 1218, 12130, 3368, 315, 279, 13010, 477, 13010, 3094, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 722, 4842, 68913, 85923, 35895, 551, 578, 320, 680, 1415, 8, 15449, 4907, 315, 279, 34454, 88, 16284, 13010, 477, 13010, 3094, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 522, 4306, 70504, 522, 4306, 599, 522, 4306, 599, 1292, 551, 8572, 836, 315, 51483, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 522, 4306, 599, 6357, 36235, 9209, 551, 578, 1925, 18459, 1749, 315, 279, 51483, 6205, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 522, 4306, 599, 522, 4306, 599, 1857, 551, 578, 955, 315, 51483, 11, 289, 2791, 9501, 477, 51180, 11, 1646, 11, 20155, 11, 7396, 11, 77594, 627, 33189, 2819, 649, 3881, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 522, 4306, 599, 48279, 2065, 37184, 551, 362, 1160, 315, 5528, 1511, 311, 70755, 279, 51483, 6205, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 522, 4306, 599, 77925, 15380, 551, 578, 7479, 3158, 824, 51483, 3148, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 17, 611, 23882, 198, 8234, 21661, 749, 4842, 45983, 70509, 28039, 44507, 4957, 551, 256, 551, 15606, 331, 2253, 8646, 8568, 404, 331, 918, 351, 9866, 8568, 404, 331, 722, 399, 97269, 13387, 648, 16057, 2957, 24004, 13387, 399, 97269, 11, 4853, 44813, 598, 5487, 986, 7385, 414, 1291, 67708, 519, 8083, 11, 1059, 14287, 1339, 11, 9799, 295, 198, 8234, 21661, 749, 4842, 45983, 89691, 7632, 19990, 4957, 551, 3959, 56236, 279, 38152, 369, 19546, 279, 907, 13, 551, 15606, 331, 2253, 8646, 8568, 404, 331, 918, 351, 9866, 8568, 404, 331, 722, 399, 97269, 13387, 648, 16057, 2957, 24004, 13387, 399, 97269, 11, 4853, 44813, 598, 5487, 986, 7385, 414, 1291, 67708, 519, 8083, 39225, 1892, 39694, 14287, 1339, 11, 9799, 295, 11, 3415, 18400, 39694, 11, 3415, 18400, 1311, 1892, 1552, 484, 39694, 198, 8234, 21661, 749, 4842, 45983, 89691, 7632, 19990, 2894, 551, 62020, 75124, 907, 13, 551, 2273, 1227, 551, 281, 36940, 198, 8234, 21661, 749, 4842, 45983, 516, 87160, 7632, 19990, 4957, 551, 3959, 56236, 279, 38152, 369, 19546, 279, 907, 13, 551, 312, 1892, 39694, 11, 3415, 18400, 39694, 11, 3415, 18400, 1311, 1892, 1552, 484, 39694, 198, 8234, 21661, 749, 4842, 45983, 516, 87160, 7632, 19990, 2894, 551, 3005, 277, 75124, 907, 13, 551, 2273, 1227, 551, 281, 36940, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 48211, 26216, 551, 74323, 315, 279, 3424, 5144, 430, 527, 3118, 304, 420, 35782, 13, 551, 4907, 59052, 2335, 11, 47074, 11, 35658, 14605, 4765, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 2776, 1055, 685, 749, 43943, 821, 51248, 6512, 12212, 551, 578, 75678, 520, 902, 279, 35876, 18052, 374, 10887, 13, 551, 2273, 1227, 551, 2132, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 2776, 1055, 685, 749, 43943, 821, 51248, 13, 49575, 1857, 551, 578, 955, 315, 30945, 61002, 40126, 430, 574, 46836, 382, 36482, 2819, 527, 1473, 91, 68372, 61002, 89457, 692, 765, 7817, 7714, 36821, 91, 14730, 16974, 765, 20308, 23573, 36821, 91, 54405, 45, 4592, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 8286, 11, 323, 4907, 36821, 91, 54405, 45, 21089, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 8286, 11, 323, 9499, 36821, 91, 54405, 45, 2898, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 7410, 11, 323, 9499, 36821, 91, 54405, 45, 11079, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 7410, 11, 323, 1218, 12130, 3368, 765, 551, 452, 11079, 22812, 2898, 22812, 4592, 22812, 21089, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 4957, 551, 35721, 369, 279, 38152, 2884, 311, 6994, 279, 63697, 828, 25, 469, 98952, 11, 1630, 1950, 11, 1630, 5119, 11, 5099, 13, 551, 469, 98952, 11, 3337, 8440, 50, 24412, 55, 1669, 30341, 1111, 1600, 30341, 1950, 30341, 1600, 30341, 5119, 11, 359, 10547, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2981, 551, 35721, 369, 279, 2592, 315, 279, 63697, 828, 11, 3060, 364, 884, 13623, 6, 477, 364, 60529, 4527, 551, 35547, 11, 60529, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 1770, 2053, 42213, 1279, 1857, 551, 80119, 955, 13, 551, 610, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 1770, 2053, 87531, 551, 12634, 11175, 315, 279, 32314, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 1770, 2053, 6817, 35895, 551, 27697, 4907, 315, 279, 32314, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 1770, 2053, 4456, 35895, 551, 32025, 4907, 315, 279, 32314, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 1770, 772, 8535, 39383, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 34930, 15382, 67064, 2932, 81848, 93169, 35895, 48625, 551, 578, 1988, 4907, 6811, 25065, 37057, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 34930, 15382, 67064, 2932, 81848, 93169, 41839, 94681, 551, 578, 1988, 7340, 4272, 5457, 25065, 37057, 13, 551, 2273, 1227, 551, 502, 783, 198, 8234, 21661, 34930, 15382, 67064, 44980, 41839, 94681, 551, 578, 7340, 4272, 5457, 304, 279, 1566, 26329, 3094, 13, 551, 2273, 1227, 551, 502, 783, 198, 8234, 21661, 34930, 15382, 67064, 44980, 35895, 48625, 551, 578, 6811, 304, 279, 4907, 11017, 1990, 279, 1566, 1403, 7504, 2391, 198, 19680, 2065, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 34930, 15382, 67064, 44980, 10135, 16491, 94681, 551, 578, 7340, 44153, 304, 279, 1566, 26329, 3094, 449, 5201, 311, 3766, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 16230, 77, 73272, 551, 578, 955, 315, 14491, 1511, 304, 10925, 311, 2778, 369, 13, 3296, 1670, 1521, 527, 279, 5144, 198, 1073, 279, 1511, 3857, 17931, 13, 551, 610, 198, 8234, 16230, 77, 33608, 551, 10928, 9681, 430, 527, 5505, 311, 6288, 2778, 3196, 389, 5370, 198, 882, 4613, 13186, 13, 551, 610, 198, 8234, 16230, 77, 48975, 551, 10928, 3823, 34898, 323, 53944, 5144, 430, 5101, 304, 198, 2818, 45, 10925, 13, 551, 610, 198, 8234, 16230, 77, 17853, 25712, 551, 364, 35075, 28887, 430, 5101, 304, 17705, 45, 10925, 13, 551, 610, 198, 8234, 16230, 77, 1896, 38818, 551, 578, 836, 477, 955, 315, 14473, 1511, 304, 459, 5820, 11, 384, 1326, 13, 1920, 477, 198, 82525, 13, 551, 610, 198, 8234, 16230, 77, 44013, 551, 578, 836, 477, 279, 9435, 1749, 304, 459, 5820, 11, 384, 1326, 13, 1920, 477, 19179, 551, 610, 198, 8234, 16230, 77, 56382, 8237, 551, 578, 27692, 3230, 887, 369, 904, 1537, 11, 384, 1326, 13, 6205, 11, 11742, 11, 14473, 13, 551, 610, 198, 8234, 24585, 551, 11360, 8649, 2038, 389, 279, 3769, 18528, 323, 6070, 13, 551, 2290, 198, 8234, 24585, 12613, 278, 3038, 3571, 551, 11360, 8649, 2038, 922, 279, 20545, 315, 459, 2449, 345, 286, 2728, 555, 1202, 25524, 323, 3148, 19983, 2949, 279, 1887, 477, 3769, 13, 551, 2290, 198, 8234, 24585, 52001, 33342, 551, 11360, 8649, 2038, 922, 279, 46220, 315, 279, 3769, 13, 2052, 198, 286, 315, 1521, 6012, 527, 14592, 555, 4401, 264, 46220, 6492, 389, 264, 198, 286, 18740, 17484, 505, 279, 4113, 828, 13, 1115, 4113, 17484, 198, 286, 374, 9967, 304, 3135, 21661, 3871, 449, 279, 28694, 323, 198, 286, 21349, 14726, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 551, 3959, 56236, 264, 264, 24693, 961, 430, 706, 1027, 11054, 2949, 279, 4441, 627, 286, 3297, 387, 5552, 311, 1023, 6067, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 6990, 7085, 551, 3959, 56236, 279, 25524, 6070, 315, 279, 7106, 1887, 13, 1115, 5764, 279, 19670, 10093, 11, 55372, 23728, 11, 5099, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 12613, 278, 3038, 3571, 551, 11360, 8649, 2038, 922, 279, 20545, 315, 459, 2449, 345, 286, 2728, 555, 1202, 25524, 323, 3148, 19983, 2949, 279, 1887, 477, 3769, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 16315, 48084, 551, 31911, 2038, 922, 279, 12976, 1990, 1403, 2204, 6067, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 25606, 551, 12094, 315, 264, 5089, 2849, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 52001, 33342, 551, 11360, 8649, 2038, 922, 279, 46220, 6012, 315, 264, 198, 286, 21349, 2849, 5552, 311, 264, 1887, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 52001, 33342, 1444, 88, 377, 1885, 21992, 551, 11360, 369, 28672, 24100, 377, 1885, 743, 2038, 13, 8442, 2561, 369, 198, 286, 21349, 7917, 430, 617, 64238, 46220, 6492, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 749, 22029, 31196, 2617, 551, 48949, 2617, 1396, 315, 459, 2449, 11, 902, 11105, 279, 1396, 315, 33299, 6089, 70241, 311, 279, 2449, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 551, 256, 551, 2290, 198, 8234, 13204, 551, 31911, 264, 12399, 315, 279, 38152, 430, 706, 1027, 1511, 304, 420, 4441, 627, 286, 1115, 38152, 17208, 311, 682, 315, 279, 5068, 6012, 323, 198, 286, 27667, 279, 1121, 315, 264, 3254, 4907, 5720, 1516, 13, 578, 3927, 198, 286, 6012, 1253, 387, 4726, 1749, 5848, 3649, 7958, 384, 1326, 13, 279, 198, 286, 25936, 13, 551, 2290, 198, 8234, 13204, 29716, 2987, 551, 31911, 1749, 3649, 369, 264, 19576, 4441, 13, 551, 2290, 198, 8234, 13204, 29716, 2987, 962, 728, 551, 6872, 2508, 369, 264, 423, 4082, 22702, 13, 551, 2290, 198, 8234, 13204, 29716, 2987, 962, 728, 870, 21340, 569, 4803, 276, 309, 13915, 5156, 551, 19139, 315, 279, 81000, 1646, 1511, 304, 423, 4082, 10, 52, 551, 2290, 198, 8234, 13204, 29716, 2987, 36386, 551, 6872, 2508, 369, 264, 75446, 7826, 4049, 22702, 13, 551, 2290, 198, 8234, 13204, 29716, 2987, 1326, 86, 551, 6872, 2508, 369, 264, 42353, 22702, 13, 551, 2290, 198, 8234, 13204, 29716, 2987, 960, 325, 551, 6872, 2508, 369, 264, 426, 937, 22702, 13, 551, 2290, 198, 8234, 13204, 29716, 2987, 81183, 728, 551, 6872, 2508, 369, 264, 20804, 4082, 22702, 13, 551, 2290, 198, 8234, 13204, 29716, 2987, 78702, 372, 669, 1026, 551, 256, 551, 2290, 198, 8234, 13204, 29716, 2987, 78702, 372, 669, 1026, 78702, 372, 669, 38368, 551, 256, 551, 2290, 198, 8234, 13204, 29716, 2987, 81941, 551, 31911, 5137, 369, 26991, 477, 38663, 279, 56541, 315, 279, 14683, 6070, 13, 551, 2290, 198, 8234, 13204, 17777, 25357, 551, 31911, 1749, 3649, 369, 264, 19179, 4441, 13, 551, 2290, 198, 8234, 13204, 17777, 25357, 2036, 6634, 551, 6872, 2508, 369, 459, 1630, 79504, 29469, 16597, 19179, 13, 551, 2290, 198, 8234, 21661, 551, 31911, 279, 7106, 6012, 430, 617, 1027, 16997, 477, 1511, 304, 198, 286, 420, 4441, 13, 551, 2290, 198, 8234, 21661, 73318, 4269, 551, 73800, 6012, 13, 551, 2290, 198, 8234, 21661, 73318, 4269, 46779, 532, 42565, 9353, 551, 21254, 532, 8141, 734, 13, 551, 2290, 198, 8234, 21661, 73318, 4269, 46779, 532, 42565, 9353, 2776, 1055, 685, 551, 31911, 17033, 685, 2038, 369, 6012, 14592, 505, 31206, 198, 286, 30295, 47590, 13, 551, 2290, 198, 8234, 21661, 73318, 4269, 46779, 532, 42565, 9353, 2776, 1055, 685, 749, 43943, 821, 51248, 551, 6872, 2508, 369, 31206, 30295, 13, 551, 2290, 198, 8234, 21661, 73318, 4269, 35194, 3659, 1928, 88, 2214, 551, 31911, 41553, 315, 56015, 2214, 2819, 439, 264, 35782, 13, 551, 2290, 198, 8234, 21661, 73318, 4269, 35194, 3659, 1928, 88, 2214, 2776, 1055, 685, 551, 31911, 17033, 685, 2038, 369, 6012, 14592, 505, 31206, 198, 286, 30295, 47590, 13, 551, 2290, 198, 8234, 21661, 73318, 4269, 35194, 3659, 1928, 88, 2214, 2776, 1055, 685, 749, 43943, 821, 51248, 551, 6872, 2508, 369, 31206, 30295, 13, 551, 2290, 198, 8234, 21661, 73318, 4269, 41779, 16597, 21957, 551, 29469, 16597, 5497, 13, 551, 2290, 198, 8234, 21661, 962, 11694, 950, 551, 33593, 950, 6012, 13, 551, 2290, 198, 8234, 21661, 962, 11694, 950, 19231, 55741, 10135, 16491, 551, 16729, 20685, 1636, 4185, 64635, 13, 551, 2290, 198, 8234, 21661, 962, 11694, 950, 19231, 55741, 10135, 16491, 2776, 1055, 685, 551, 31911, 17033, 685, 2038, 369, 6012, 14592, 505, 31206, 198, 286, 30295, 47590, 13, 551, 2290, 198, 8234, 21661, 962, 11694, 950, 19231, 55741, 10135, 16491, 2776, 1055, 685, 749, 43943, 821, 51248, 551, 6872, 2508, 369, 31206, 30295, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 551, 31911, 2539, 19670, 4633, 44713, 315, 279, 3769, 304, 2204, 198, 286, 7739, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 40656, 551, 3959, 56236, 459, 19670, 4633, 6070, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 40656, 99339, 551, 12477, 311, 7664, 279, 9606, 315, 279, 6732, 315, 420, 6070, 13, 51567, 649, 387, 10748, 11742, 5540, 11, 477, 4200, 48689, 14272, 33299, 14393, 264, 29564, 30747, 315, 264, 198, 43068, 2816, 555, 5361, 11742, 5540, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 40656, 929, 32891, 18764, 551, 445, 32891, 5137, 315, 264, 2849, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 40656, 1444, 88, 377, 1885, 21992, 551, 11360, 369, 28672, 24100, 377, 1885, 743, 2038, 13, 8442, 2561, 369, 198, 286, 21349, 7917, 430, 617, 64238, 46220, 6492, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 551, 3959, 56236, 459, 19670, 4633, 6070, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 99339, 551, 12477, 311, 7664, 279, 9606, 315, 279, 6732, 315, 420, 6070, 13, 51567, 649, 387, 10748, 11742, 5540, 11, 477, 4200, 48689, 14272, 33299, 14393, 264, 29564, 30747, 315, 264, 198, 43068, 2816, 555, 5361, 11742, 5540, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 929, 32891, 18764, 551, 445, 32891, 5137, 315, 264, 2849, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 1444, 88, 377, 1885, 21992, 551, 11360, 369, 28672, 24100, 377, 1885, 743, 2038, 13, 8442, 2561, 369, 198, 286, 21349, 7917, 430, 617, 64238, 46220, 6492, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 85187, 551, 3959, 56236, 459, 19670, 4633, 6070, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 85187, 99339, 551, 12477, 311, 7664, 279, 9606, 315, 279, 6732, 315, 420, 6070, 13, 51567, 649, 387, 10748, 11742, 5540, 11, 477, 4200, 48689, 14272, 33299, 14393, 264, 29564, 30747, 315, 264, 198, 43068, 2816, 555, 5361, 11742, 5540, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 85187, 929, 32891, 18764, 551, 445, 32891, 5137, 315, 264, 2849, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 85187, 1444, 88, 377, 1885, 21992, 551, 11360, 369, 28672, 24100, 377, 1885, 743, 2038, 13, 8442, 2561, 369, 198, 286, 21349, 7917, 430, 617, 64238, 46220, 6492, 13, 551, 2290, 198, 8234, 21661, 3211, 10892, 1697, 551, 60288, 1697, 6012, 13, 551, 2290, 198, 8234, 21661, 3211, 10892, 1697, 75339, 39383, 9981, 263, 263, 551, 1115, 3857, 10756, 2038, 389, 264, 17358, 1697, 7200, 6070, 198, 286, 16865, 3235, 832, 33520, 44014, 304, 279, 87298, 3634, 13, 551, 2290, 198, 8234, 21661, 3211, 10892, 1697, 962, 437, 9981, 263, 263, 551, 31911, 279, 51923, 263, 17915, 315, 5415, 13, 551, 2290, 198, 8234, 21661, 3211, 10892, 1697, 13, 20559, 36703, 36067, 28039, 551, 31911, 279, 2819, 315, 279, 3230, 320, 716, 3148, 8, 323, 374, 5059, 27456, 320, 18568, 198, 286, 8286, 8, 8798, 8824, 520, 2204, 20472, 13, 551, 2290, 198, 8234, 21661, 3211, 10892, 1697, 70509, 9082, 1552, 24037, 71, 6312, 89, 551, 31911, 279, 2819, 315, 279, 16183, 53016, 6312, 89, 1949, 4907, 824, 19670, 520, 6926, 198, 286, 8286, 323, 520, 2204, 20472, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 551, 35269, 6012, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 75339, 52890, 551, 256, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 75339, 52890, 2776, 1055, 685, 551, 220, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 551, 31911, 279, 2860, 14683, 17915, 315, 5415, 382, 286, 65991, 34892, 25, 433, 690, 9778, 387, 32690, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 75339, 52890, 551, 256, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 75339, 52890, 2776, 1055, 685, 551, 31911, 5347, 82049, 61336, 17033, 685, 2038, 627, 286, 2057, 387, 9967, 1234, 8825, 9817, 2776, 1055, 685, 477, 2911, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 551, 31911, 279, 14683, 73710, 315, 4273, 320, 35, 3204, 570, 1115, 3857, 649, 387, 11763, 311, 8464, 311, 198, 286, 2204, 81898, 320, 68, 1326, 2637, 2440, 284, 364, 35, 4082, 518, 364, 63665, 518, 364, 32260, 518, 5099, 25390, 323, 433, 649, 387, 12903, 2320, 7569, 1534, 198, 286, 477, 539, 13, 578, 1207, 22327, 828, 3585, 311, 1855, 320, 333, 3118, 8, 12903, 12006, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 2245, 551, 11360, 6782, 625, 279, 17915, 315, 5415, 828, 382, 286, 1102, 5764, 279, 2860, 59580, 323, 279, 28448, 59580, 2819, 13, 1226, 54263, 1595, 43590, 16756, 291, 63, 439, 279, 198, 286, 28448, 59580, 369, 1890, 25524, 9606, 11, 1595, 22612, 16756, 291, 63, 439, 279, 28448, 59580, 369, 2204, 198, 286, 33299, 304, 279, 2849, 11, 323, 1595, 30986, 2223, 16756, 291, 63, 439, 279, 28448, 59580, 369, 279, 27605, 1147, 315, 1855, 198, 286, 19670, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 2245, 75339, 52890, 551, 256, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 2245, 75339, 52890, 2776, 1055, 685, 551, 31911, 5347, 82049, 61336, 17033, 685, 2038, 627, 286, 2057, 387, 9967, 1234, 8825, 9817, 2776, 1055, 685, 477, 2911, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 75339, 39383, 2253, 772, 8535, 551, 1115, 3857, 10756, 2038, 389, 264, 4135, 14338, 7200, 6070, 198, 286, 16865, 3235, 832, 33520, 44014, 304, 279, 87298, 3634, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 75339, 39383, 2253, 772, 8535, 75339, 52890, 551, 256, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 75339, 39383, 2253, 772, 8535, 75339, 52890, 2776, 1055, 685, 551, 31911, 5347, 82049, 61336, 17033, 685, 2038, 627, 286, 2057, 387, 9967, 1234, 8825, 9817, 2776, 1055, 685, 477, 2911, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 1326, 265, 729, 32808, 2253, 772, 8535, 551, 5464, 538, 369, 7997, 596, 5865, 2038, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 1770, 47262, 5121, 50582, 551, 5464, 538, 369, 279, 9249, 2115, 20779, 2038, 13, 1115, 3857, 374, 9959, 198, 286, 369, 452, 18953, 323, 16964, 279, 4754, 8066, 856, 279, 97192, 304, 279, 1887, 13, 551, 2290, 198, 8234, 21661, 749, 39100, 551, 63755, 6012, 13, 551, 2290, 198, 8234, 21661, 749, 39100, 749, 39100, 3797, 100092, 551, 5464, 538, 369, 279, 25524, 24924, 97776, 2038, 13, 551, 2290, 198, 8234, 21661, 749, 39100, 91571, 49065, 99863, 12127, 551, 5464, 538, 369, 279, 12903, 82006, 59086, 2038, 13, 551, 2290, 198, 8234, 21661, 749, 39100, 749, 39100, 646, 355, 1512, 3225, 551, 5464, 538, 369, 279, 24924, 88636, 2038, 13, 551, 2290, 198, 8234, 21661, 29202, 4748, 772, 8535, 551, 16963, 4748, 772, 8535, 6012, 13, 551, 2290, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 551, 12094, 315, 13238, 7917, 13, 551, 2290, 198, 8234, 21661, 522, 4306, 70504, 551, 12094, 23343, 311, 34454, 4548, 13, 551, 2290, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 551, 362, 4526, 315, 29803, 323, 6012, 315, 264, 2539, 34454, 70504, 13010, 627, 286, 1115, 1253, 2997, 13010, 4787, 11, 3135, 323, 7852, 4633, 13878, 315, 264, 13010, 13, 551, 2290, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 55782, 1821, 551, 362, 14085, 519, 304, 264, 34454, 70504, 1296, 13010, 13, 362, 14085, 519, 198, 286, 374, 11054, 555, 3515, 264, 14747, 13, 551, 2290, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 37262, 551, 362, 2027, 315, 264, 34454, 70504, 13010, 13, 362, 2027, 1618, 374, 6118, 11054, 555, 3515, 198, 286, 264, 3373, 1968, 11, 477, 264, 6962, 3464, 94376, 6196, 719, 912, 14, 14486, 6962, 3464, 94376, 1265, 13, 551, 2290, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1783, 988, 551, 11360, 10581, 2785, 5361, 44713, 315, 34454, 70504, 13010, 7969, 13, 551, 2290, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 55199, 551, 32934, 1234, 902, 264, 34454, 70504, 1296, 13010, 574, 10887, 13, 551, 2290, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 722, 4842, 68913, 551, 12094, 315, 3254, 7504, 315, 264, 34454, 70504, 13010, 17383, 13, 551, 2290, 198, 8234, 21661, 522, 4306, 70504, 522, 4306, 599, 551, 12094, 315, 264, 98882, 51483, 13, 551, 2290, 198, 8234, 21661, 749, 4842, 45983, 551, 51684, 6012, 13, 551, 2290, 198, 8234, 21661, 749, 4842, 45983, 70509, 28039, 44507, 551, 12634, 8286, 16029, 13, 551, 2290, 198, 8234, 21661, 749, 4842, 45983, 89691, 7632, 19990, 551, 31911, 20155, 75124, 2819, 16997, 449, 2204, 81898, 13, 551, 2290, 198, 8234, 21661, 749, 4842, 45983, 516, 87160, 7632, 19990, 551, 31911, 65344, 75124, 2819, 16997, 449, 2204, 81898, 13, 551, 2290, 198, 8234, 21661, 13, 700, 76, 61002, 551, 68372, 61002, 6012, 13, 551, 2290, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 551, 68372, 61002, 6012, 5068, 369, 459, 40126, 42028, 304, 892, 13, 551, 2290, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 2776, 1055, 685, 551, 31911, 17033, 685, 2038, 369, 6012, 14592, 505, 31206, 198, 286, 30295, 47590, 13, 551, 2290, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 2776, 1055, 685, 749, 43943, 821, 51248, 551, 6872, 2508, 369, 31206, 30295, 13, 551, 2290, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 75466, 551, 31911, 9499, 2819, 26126, 520, 2204, 3115, 13, 551, 2290, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 70908, 554, 551, 31911, 7410, 2819, 26126, 520, 2204, 3115, 13, 551, 2290, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 41584, 551, 31911, 8286, 2819, 26126, 520, 2204, 3115, 13, 551, 2290, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 70509, 59052, 2335, 551, 31911, 4907, 2819, 26126, 520, 2204, 3115, 13, 551, 2290, 198, 8234, 21661, 516, 1002, 299, 58510, 551, 27726, 299, 58510, 6012, 13, 551, 2290, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 551, 5464, 538, 369, 27726, 969, 22702, 2038, 439, 12457, 505, 459, 9526, 477, 264, 35547, 13, 551, 2290, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 551, 31911, 17033, 685, 2038, 320, 3902, 398, 279, 38152, 3857, 8, 369, 63697, 6012, 198, 286, 14592, 505, 459, 9526, 477, 264, 22702, 13, 551, 2290, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 1770, 2053, 551, 5464, 538, 369, 279, 469, 98952, 38152, 13, 551, 2290, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 1770, 772, 8535, 39383, 551, 220, 551, 2290, 198, 8234, 21661, 34930, 15382, 67064, 551, 40018, 26329, 3135, 323, 5110, 13, 551, 2290, 198, 8234, 16230, 77, 551, 256, 551, 2290, 198, 128009, 128006, 882, 128007, 271, 88765, 10925, 315, 25674, 25719, 1425, 304, 264, 289, 5757, 89, 635, 6070, 13, 128009, 128006, 78191, 128007], encoder_prompt=None, encoder_prompt_token_ids=None, prompt_logprobs=None, outputs=[CompletionOutput(index=0, text='', token_ids=(128009,), cumulative_logprob=None, logprobs=None, finish_reason=stop, stop_reason=None)], finished=True, metrics=RequestMetrics(arrival_time=1743501270.0963492, last_token_time=1743501270.2431462, first_scheduled_time=1743501270.1403975, first_token_time=1743501270.2431462, time_in_queue=0.044048309326171875, finished_time=1743501270.2444491, scheduler_time=0.00533777114469558, model_forward_time=None, model_execute_time=None), lora_request=LoRARequest(lora_name='api_lora', lora_int_id=1, lora_path='work/ai-copiltot-ft/models/unsloth_Meta-Llama-3.1-8B-Instruct-bnb-4bit/version_26/lora_model/', lora_local_path=None, long_lora_max_len=None, base_model_name=None), num_cached_tokens=19616, multi_modal_placeholders={}),\n",
+       " RequestOutput(request_id=1, prompt='<|begin_of_text|><|start_header_id|>system<|end_header_id|>\\n\\nYou are an assistant helping users search NOMAD a Materials science database. You have chemistry and materials science knowledge. Your task is to create a search api for natural language search queries by users. \\nYou are given the relevant search fields and their descriptions as name : description : the data type or the list of enum  values for the field : optional unit of the value.\\nIf the data type is \"None\" the field can only be used in the \"quantities\" field to check its existence. Do not use it as a search field.\\nDont format it into ES DSL format (dont use bool, must, terms) instead use the NOMAD API format. \\nOnly give the json formatted query no explanation is needed.\\nTime is formatted as Unix Timestamp. \\nUse these ops to format the query:\\n    all: Requires all values in list to match\\n    any: Matches if any value in list matches (default)\\n    none: Requires none of the values to match\\n    lte, lt, gte, gt: Range comparisons for numeric fields     \\nDont use \"all\" as the first field.\\nConvert units where the field has a specified unit.\\nUse \"results.material.topology.label\": \"MOF\" for metal organic framework queries\\n\\nSearch Fields: upload_id : The persistent and globally unique identifier for the upload of the entry : str\\nupload_name : The user provided upload name : str\\nupload_create_time : The date and time when the upload was created in nomad : nomad.metainfo.data_type.Datetime\\nentry_id : A persistent and globally unique identifier for the entry : str\\nentry_name : A brief human readable name for the entry. : str\\nentry_name.prefix : A brief human readable name for the entry. : str\\nentry_type : The main schema definition. This is the name of the section used for data. : str\\ncalc_id : Legacy field name, use `entry_id` instead. : str\\nentry_create_time : The date and time when the entry was created in nomad : nomad.metainfo.data_type.Datetime\\nparser_name : The NOMAD parser used for the last processing : str\\nmainfile : The path to the mainfile from the root directory of the uploaded files : str\\nmainfile.path : The path to the mainfile from the root directory of the uploaded files : str\\nmainfile_key : Key used to differentiate between different *child entries* of an entry.\\nFor parent entries and entries that do not have any children, the value should\\nbe empty. : str\\nmainfile_key.path : Key used to differentiate between different *child entries* of an entry.\\nFor parent entries and entries that do not have any children, the value should\\nbe empty. : str\\ntext_search_contents : Contains text contents that should be considered when\\ndoing free text queries for entries. : str\\nfiles : The paths to the files within the upload that belong to this entry.\\nAll files within the same directory as the entry\\'s mainfile are considered the\\nauxiliary files that belong to the entry. : str\\nfiles.path : The paths to the files within the upload that belong to this entry.\\nAll files within the same directory as the entry\\'s mainfile are considered the\\nauxiliary files that belong to the entry. : str\\npid : The unique, sequentially enumerated, integer PID that was used in the legacy\\nNOMAD CoE. It allows to resolve URLs of the old NOMAD CoE Repository. : str\\nraw_id : The code specific identifier extracted from the entry\\'s raw files by the parser,\\nif supported. : str\\nexternal_id : A user provided external id. Usually the id for an entry in an external database\\nwhere the data was imported from. : str\\npublished : Indicates if the entry is published : bool\\npublish_time : The date and time when the upload was published in nomad : nomad.metainfo.data_type.Datetime\\nwith_embargo : Indicated if this entry is under an embargo : bool\\nprocessed : Indicates that the entry is successfully processed. : bool\\nlast_processing_time : The date and time of the last processing. : nomad.metainfo.data_type.Datetime\\nprocessing_errors : Errors that occurred during processing : str\\nnomad_version : The NOMAD version used for the last processing : str\\nnomad_commit : The NOMAD commit used for the last processing : str\\ncomment : A user provided comment for this entry : str\\nreferences : User provided references (URLs) for this entry : str\\nexternal_db : The repository or external database where the original data resides : AFLOW,EELS Data Base,Kyoto Phonopy Database,Materials Project,OQMD,The Perovskite Database Project\\norigin : A short human readable description of the entries origin. Usually it is the\\nhandle of an external database/repository or the name of the main author. : str\\nmain_author.name :   : str\\nmain_author.name.text :   : str\\nmain_author.user_id : The unique, persistent keycloak UUID : str\\nmain_author : The main author of the entry : User\\nauthors.name :   : str\\nauthors.name.text :   : str\\nauthors : All authors (main author and co-authors) : Author\\nwriters.name :   : str\\nwriters.name.text :   : str\\nwriters.user_id : The unique, persistent keycloak UUID : str\\nwriters : All writers (main author, upload coauthors) : User\\nwriter_groups : Groups with write access (= coauthor groups). : str\\nviewers.name :   : str\\nviewers.name.text :   : str\\nviewers.user_id : The unique, persistent keycloak UUID : str\\nviewers : All viewers (main author, upload coauthors, and reviewers) : User\\nviewer_groups : Groups with read access (= coauthor groups + reviewer groups). : str\\ndatasets.dataset_id : The unique identifier for this dataset as a string. It should be\\na randomly generated UUID, similar to other nomad ids. : str\\ndatasets.dataset_name : The human-readable name of the dataset as string. The dataset name must be\\nunique for the user. : str\\ndatasets.doi : The optional Document Object Identifier (DOI) associated with this dataset.\\nNomad can register DOIs that link back to the respective representation of\\nthe dataset in the nomad UI. This quantity holds the string representation of\\nthis DOI. There is only one per dataset. The DOI is just the DOI name, not its\\nfull URL, e.g. \"10.17172/nomad/2019.10.29-1\". : str\\ndatasets.dataset_create_time : The date when the dataset was first created. : nomad.metainfo.data_type.Datetime\\ndatasets.dataset_modified_time : The date when the dataset was last modified. An owned dataset\\ncan only be extended after a DOI was assigned. A foreign dataset cannot be changed\\nonce a DOI was assigned. : nomad.metainfo.data_type.Datetime\\ndatasets.dataset_type : The type determined if a dataset is owned, i.e. was created by\\nthe authors of the contained entries; or if a dataset is foreign,\\ni.e. it was created by someone not necessarily related to the entries. : foreign,owned\\ndatasets : A list of user curated datasets this entry belongs to. : /packages/16/section_definitions/0\\ndomain : The material science domain : dft,ems,nexus\\nn_quantities : Number of metainfo quantities parsed from the entry. : int\\nquantities : All quantities that are used by this entry. : str\\nquantities.path : All quantities that are used by this entry. : str\\nsections : All sections that are present in this entry. This field is deprecated and will be removed. : str\\noptimade.elements : Names of the different elements present in the structure. : Ac,Ag,Al,Am,Ar,As,At,Au,B,Ba,Be,Bh,Bi,Bk,Br,C,Ca,Cd,Ce,Cf,Cl,Cm,Cn,Co,Cr,Cs,Cu,Db,Ds,Dy,Er,Es,Eu,F,Fe,Fl,Fm,Fr,Ga,Gd,Ge,H,He,Hf,Hg,Ho,Hs,I,In,Ir,K,Kr,La,Li,Lr,Lu,Lv,Mc,Md,Mg,Mn,Mo,Mt,N,Na,Nb,Nd,Ne,Nh,Ni,No,Np,O,Og,Os,P,Pa,Pb,Pd,Pm,Po,Pr,Pt,Pu,Ra,Rb,Re,Rf,Rg,Rh,Rn,Ru,S,Sb,Sc,Se,Sg,Si,Sm,Sn,Sr,Ta,Tb,Tc,Te,Th,Ti,Tl,Tm,Ts,U,V,W,X,Xe,Y,Yb,Zn,Zr\\noptimade.nelements : Number of different elements in the structure as an integer. : int\\noptimade.elements_ratios : Relative proportions of different elements in the structure. : float\\noptimade.chemical_formula_descriptive : The chemical formula for a structure as a string in a form chosen by the API\\nimplementation. : str\\noptimade.chemical_formula_reduced : The reduced chemical formula for a structure as a string with element symbols and\\ninteger chemical proportion numbers. The proportion number MUST be omitted if it is 1. : str\\noptimade.chemical_formula_hill : The chemical formula for a structure in Hill form with element symbols followed by\\ninteger chemical proportion numbers. The proportion number MUST be omitted if it is 1. : str\\noptimade.chemical_formula_anonymous : The anonymous formula is the chemical_formula_reduced, but where the elements are\\ninstead first ordered by their chemical proportion number, and then, in order left to\\nright, replaced by anonymous symbols A, B, C, ..., Z, Aa, Ba, ..., Za, Ab, Bb, ... and\\nso on. : str\\noptimade.nperiodic_dimensions : An integer specifying the number of periodic dimensions in the structure, equivalent\\nto the number of non-zero entries in dimension_types. : int\\noptimade.nsites : An integer specifying the length of the cartesian_site_positions property. : int\\noptimade.structure_features : A list of strings that flag which special features are used by the structure.\\n\\n- disorder: This flag MUST be present if any one entry in the species list has a\\nchemical_symbols list that is longer than 1 element.\\n- unknown_positions: This flag MUST be present if at least one component of the\\ncartesian_site_positions list of lists has value null.\\n- assemblies: This flag MUST be present if the assemblies list is present. : assemblies,disorder,unknown_positions\\nsection_defs.definition_qualified_name : The qualified name of the compatible section. : str\\nsection_defs.definition_id : The definition id of the compatible section. : str\\nsection_defs.used_directly : If the compatible section is directly used as base section. : bool\\nentry_references.target_reference : The full url like reference of the the target. : str\\nentry_references.target_entry_id : The id of the entry containing the target. : str\\nentry_references.target_mainfile : The mainfile of the entry containing the target. : str\\nentry_references.target_upload_id : The id of the upload containing the target. : str\\nentry_references.target_name : The name of the target quantity/section. : str\\nentry_references.target_path : The path of the target quantity/section in its archive. : str\\nentry_references.source_name : The name of the source (self) quantity/section in its archive. : str\\nentry_references.source_path : The path of the source (self) quantity/section in its archive. : str\\nentry_references.source_quantity : A reference to the quantity definition that defines the reference : str\\nsearch_quantities.id : The full identifier for this quantity that contains the path in the schema +\\nschema name. : str\\nsearch_quantities.definition : A reference to the quantity definition. : str\\nsearch_quantities.path_archive : Path of the value within the archive. : str\\nsearch_quantities.bool_value : The value mapped as an ES boolean field. : bool\\nsearch_quantities.str_value : The value mapped as an ES text and keyword field. : str\\nsearch_quantities.str_value.keyword : The value mapped as an ES text and keyword field. : str\\nsearch_quantities.int_value : The value mapped as an ES long number field. : int\\nsearch_quantities.float_value : The value mapped as an ES double number field. : float\\nsearch_quantities.datetime_value : The value mapped as an ES date field. : nomad.metainfo.data_type.Datetime\\nresults.material.material_id : A fixed length, unique material identifier in the form of a hash\\ndigest. : str\\nresults.material.material_name : Meaningful names for this a material if any can be assigned. : str\\nresults.material.structural_type : Structural class determined from the atomic structure. : 1D,2D,atom,bulk,molecule / cluster,not processed,surface,unavailable\\nresults.material.dimensionality : Dimensionality of the system. For atomistic systems this is\\nautomatically evaluated by using the topology-scaling algorithm:\\nhttps://doi.org/10.1103/PhysRevLett.118.106101.\\n\\n| Value | Description |\\n| --------- | ----------------------- |\\n| `\\'0D\\'` | Not connected periodically |\\n| `\\'1D\\'` | Periodically connected in one dimension |\\n| `\\'2D\\'` | Periodically connected in two dimensions |\\n| `\\'3D\\'` | Periodically connected in three dimensions | : 0D,1D,2D,3D\\nresults.material.building_block : More exact classification for this system, i.e. the type of \"building\\nblock\" it represents.\\n\\n| Value | Description |\\n| --------- | ----------------------- |\\n| `\\'surface\\'` | Structure built from a unit cell that repeats periodically in two directions and at least twice, but not infinitely in a third direction. |\\n| `\\'2D material\\'` | Structure built from a unit cell that repeats periodically in two directions and only once in a third direction. |\\n| `\\'molecule\\'` | Molecule defined in the force-field topology |\\n| `\\'monomer\\'` | Monomer defined in the force-field topology | : 2D material,molecule,monomer,surface\\nresults.material.functional_type : Classification based on the functional properties. : str\\nresults.material.compound_type : Classification based on the chemical formula. : str\\nresults.material.elements : Names of the different elements present in the structure. : Ac,Ag,Al,Am,Ar,As,At,Au,B,Ba,Be,Bh,Bi,Bk,Br,C,Ca,Cd,Ce,Cf,Cl,Cm,Cn,Co,Cr,Cs,Cu,Db,Ds,Dy,Er,Es,Eu,F,Fe,Fl,Fm,Fr,Ga,Gd,Ge,H,He,Hf,Hg,Ho,Hs,I,In,Ir,K,Kr,La,Li,Lr,Lu,Lv,Mc,Md,Mg,Mn,Mo,Mt,N,Na,Nb,Nd,Ne,Nh,Ni,No,Np,O,Og,Os,P,Pa,Pb,Pd,Pm,Po,Pr,Pt,Pu,Ra,Rb,Re,Rf,Rg,Rh,Rn,Ru,S,Sb,Sc,Se,Sg,Si,Sm,Sn,Sr,Ta,Tb,Tc,Te,Th,Ti,Tl,Tm,Ts,U,V,W,X,Xe,Y,Yb,Zn,Zr\\nresults.material.n_elements : Number of different elements in the structure as an integer. : int\\nresults.material.elements_exclusive : String containing the chemical elements in alphabetical order and\\nseparated by a single whitespace. This quantity can be used for\\nexclusive element searches where you want to find entries/materials\\nwith only certain given elements. : str\\nresults.material.chemical_formula_descriptive : The chemical formula for a structure as a string in a form chosen by the API\\nimplementation. : str\\nresults.material.chemical_formula_reduced : Alphabetically sorted chemical formula with reduced integer chemical\\nproportion numbers. The proportion number is omitted if it is 1. : str\\nresults.material.chemical_formula_hill : The chemical formula for a structure in Hill form with element\\nsymbols followed by non-reduced integer chemical proportion numbers.\\nThe proportion number is omitted if it is 1. : str\\nresults.material.chemical_formula_iupac : Formula where the elements are ordered using a formal list loosely\\nbased on electronegativity as defined in the IUPAC nomenclature of\\ninorganic chemistry (2005). Contains reduced integer chemical\\nproportion numbers where the proportion number is omitted if it is\\n1. : str\\nresults.material.chemical_formula_anonymous : Formula with the elements ordered by their reduced integer chemical\\nproportion number, and the chemical species replaced by\\nalphabetically ordered letters. The proportion number is omitted if\\nit is 1. E.g.  H2O becomes A2B and H2O2 becomes AB. The letters are\\ndrawn from the english alphabet that may be extended by increasing\\nthe number of letters, e.g. A, B, ..., Z, Aa, Ab and so on. This\\ndefinition is in line with the similarly named OPTIMADE definition. : str\\nresults.material.chemical_formula_reduced_fragments : Alphabetically sorted chemical formula with reduced integer chemical\\nproportion numbers. The proportion number is omitted if it is 1. : str\\nresults.material.elemental_composition.element : The symbol of the element, e.g. \\'Pb\\'. : Ac,Ag,Al,Am,Ar,As,At,Au,B,Ba,Be,Bh,Bi,Bk,Br,C,Ca,Cd,Ce,Cf,Cl,Cm,Cn,Co,Cr,Cs,Cu,Db,Ds,Dy,Er,Es,Eu,F,Fe,Fl,Fm,Fr,Ga,Gd,Ge,H,He,Hf,Hg,Ho,Hs,I,In,Ir,K,Kr,La,Li,Lr,Lu,Lv,Mc,Md,Mg,Mn,Mo,Mt,N,Na,Nb,Nd,Ne,Nh,Ni,No,Np,O,Og,Os,P,Pa,Pb,Pd,Pm,Po,Pr,Pt,Pu,Ra,Rb,Re,Rf,Rg,Rh,Rn,Ru,S,Sb,Sc,Se,Sg,Si,Sm,Sn,Sr,Ta,Tb,Tc,Te,Th,Ti,Tl,Tm,Ts,U,V,W,Xe,Y,Yb,Zn,Zr\\nresults.material.elemental_composition.atomic_fraction : The atomic fraction of the element in the system it is contained within.\\nPer definition a positive value less than or equal to 1. : float64\\nresults.material.elemental_composition.mass_fraction : The mass fraction of the element in the system it is contained within.\\nPer definition a positive value less than or equal to 1. : float64\\nresults.material.symmetry.bravais_lattice : Identifier for the Bravais lattice in Pearson notation. The first lowercase letter\\nidentifies the crystal family and can be one of the following: a (triclinic), b\\n(monoclinic), o (orthorhombic), t (tetragonal), h (hexagonal) or c (cubic). The\\nsecond uppercase letter identifies the centring and can be one of the following: P\\n(primitive), S (face centred), I (body centred), R (rhombohedral centring) or F\\n(all faces centred). : aP,cF,cI,cP,hP,hR,mP,mS,oF,oI,oP,oS,tI,tP\\nresults.material.symmetry.crystal_system : Name of the crystal system. : cubic,hexagonal,monoclinic,orthorhombic,tetragonal,triclinic,trigonal\\nresults.material.symmetry.hall_number : The Hall number for this system. : int32\\nresults.material.symmetry.hall_symbol : The Hall symbol for this system. : str\\nresults.material.symmetry.point_group : Symbol of the crystallographic point group in the Hermann-Mauguin notation. : str\\nresults.material.symmetry.space_group_number : Specifies the International Union of Crystallography (IUC) number of the 3D space\\ngroup of this system. : int32\\nresults.material.symmetry.space_group_symbol : The International Union of Crystallography (IUC) short symbol of the 3D\\nspace group of this system. : str\\nresults.material.symmetry.prototype_formula : The formula of the prototypical material for this structure. : str\\nresults.material.symmetry.prototype_aflow_id : The identifier of this structure in the AFLOW encyclopedia of\\ncrystallographic prototypes:\\nhttp://www.aflowlib.org/prototype-encyclopedia/index.html : str\\nresults.material.symmetry.structure_name : A common name for this structure, e.g. fcc, bcc. : 4-member ring,Heusler,bcc,bct,bct5,clathrate,cuprite,diamond,fcc,fct,half-Heusler,hcp,perovskite,rock salt,rutile,simple cubic,wurtzite,zincblende\\nresults.material.symmetry.strukturbericht_designation : Classification of the material according to the historically grown\\n\\'strukturbericht\\'. : str\\nresults.material.topology.system_id : That path of this section within the metainfo that is used as a unique\\nidentifier. : str\\nresults.material.topology.label : Descriptive label that identifies this structural part. : str\\nresults.material.topology.method : The method used for identifying this system. : matid,parser,porosity,user\\nresults.material.topology.description : A short description about this part of the topology. : str\\nresults.material.topology.material_id : A fixed length, unique material identifier in the form of a hash\\ndigest. : str\\nresults.material.topology.material_name : Meaningful names for this a material if any can be assigned. : str\\nresults.material.topology.structural_type : Structural class determined from the atomic structure. : 1D,2D,active orbitals,atom,bulk,group,molecule,molecule / cluster,monomer,not processed,surface,unavailable\\nresults.material.topology.dimensionality : Dimensionality of the system. For atomistic systems this is\\nautomatically evaluated by using the topology-scaling algorithm:\\nhttps://doi.org/10.1103/PhysRevLett.118.106101.\\n\\n| Value | Description |\\n| --------- | ----------------------- |\\n| `\\'0D\\'` | Not connected periodically |\\n| `\\'1D\\'` | Periodically connected in one dimension |\\n| `\\'2D\\'` | Periodically connected in two dimensions |\\n| `\\'3D\\'` | Periodically connected in three dimensions | : 0D,1D,2D,3D\\nresults.material.topology.building_block : More exact classification for this system, i.e. the type of \"building\\nblock\" it represents.\\n\\n| Value | Description |\\n| --------- | ----------------------- |\\n| `\\'surface\\'` | Structure built from a unit cell that repeats periodically in two directions and at least twice, but not infinitely in a third direction. |\\n| `\\'2D material\\'` | Structure built from a unit cell that repeats periodically in two directions and only once in a third direction. |\\n| `\\'molecule\\'` | Molecule defined in the force-field topology |\\n| `\\'monomer\\'` | Monomer defined in the force-field topology | : 2D material,molecule,monomer,surface\\nresults.material.topology.functional_type : Classification based on the functional properties. : str\\nresults.material.topology.compound_type : Classification based on the chemical formula. : str\\nresults.material.topology.elements : Names of the different elements present in the structure. : Ac,Ag,Al,Am,Ar,As,At,Au,B,Ba,Be,Bh,Bi,Bk,Br,C,Ca,Cd,Ce,Cf,Cl,Cm,Cn,Co,Cr,Cs,Cu,Db,Ds,Dy,Er,Es,Eu,F,Fe,Fl,Fm,Fr,Ga,Gd,Ge,H,He,Hf,Hg,Ho,Hs,I,In,Ir,K,Kr,La,Li,Lr,Lu,Lv,Mc,Md,Mg,Mn,Mo,Mt,N,Na,Nb,Nd,Ne,Nh,Ni,No,Np,O,Og,Os,P,Pa,Pb,Pd,Pm,Po,Pr,Pt,Pu,Ra,Rb,Re,Rf,Rg,Rh,Rn,Ru,S,Sb,Sc,Se,Sg,Si,Sm,Sn,Sr,Ta,Tb,Tc,Te,Th,Ti,Tl,Tm,Ts,U,V,W,X,Xe,Y,Yb,Zn,Zr\\nresults.material.topology.n_elements : Number of different elements in the structure as an integer. : int\\nresults.material.topology.elements_exclusive : String containing the chemical elements in alphabetical order and\\nseparated by a single whitespace. This quantity can be used for\\nexclusive element searches where you want to find entries/materials\\nwith only certain given elements. : str\\nresults.material.topology.chemical_formula_descriptive : The chemical formula for a structure as a string in a form chosen by the API\\nimplementation. : str\\nresults.material.topology.chemical_formula_reduced : Alphabetically sorted chemical formula with reduced integer chemical\\nproportion numbers. The proportion number is omitted if it is 1. : str\\nresults.material.topology.chemical_formula_hill : The chemical formula for a structure in Hill form with element\\nsymbols followed by non-reduced integer chemical proportion numbers.\\nThe proportion number is omitted if it is 1. : str\\nresults.material.topology.chemical_formula_iupac : Formula where the elements are ordered using a formal list loosely\\nbased on electronegativity as defined in the IUPAC nomenclature of\\ninorganic chemistry (2005). Contains reduced integer chemical\\nproportion numbers where the proportion number is omitted if it is\\n1. : str\\nresults.material.topology.chemical_formula_anonymous : Formula with the elements ordered by their reduced integer chemical\\nproportion number, and the chemical species replaced by\\nalphabetically ordered letters. The proportion number is omitted if\\nit is 1. E.g.  H2O becomes A2B and H2O2 becomes AB. The letters are\\ndrawn from the english alphabet that may be extended by increasing\\nthe number of letters, e.g. A, B, ..., Z, Aa, Ab and so on. This\\ndefinition is in line with the similarly named OPTIMADE definition. : str\\nresults.material.topology.chemical_formula_reduced_fragments : Alphabetically sorted chemical formula with reduced integer chemical\\nproportion numbers. The proportion number is omitted if it is 1. : str\\nresults.material.topology.parent_system : Reference to the parent system. : str\\nresults.material.topology.child_systems : References to the child systems. : str\\nresults.material.topology.atomic_fraction : The atomic fraction of this system in the full structure it is contained in.\\nPer definition a positive value less than or equal to 1. : float64\\nresults.material.topology.mass_fraction : The mass fraction of this system in the full structure it is contained within.\\nPer definition a positive value less than or equal to 1. : float64\\nresults.material.topology.n_atoms : The total number of species (atoms, particles) in the system. : int\\nresults.material.topology.sbu_type : The topological representation of the metal secondary building units (sbus).\\nThe shape of most metal sbus are well defined and form the basis of most\\n popular MOFs. The most common example is the paddlewheel, rodlike mofs,\\n irmofs, uio66 : str\\nresults.material.topology.largest_cavity_diameter : The largest cavity diameter is the largest sphere that can be inserted in a porous\\nsystem without overlapping with any of the atoms in the system. : float64 : meter\\nresults.material.topology.pore_limiting_diameter : The pore limiting diameter is the largest sphere that can freely\\ndiffuse through the porous network without overlapping with any of the\\natoms in the system. : float64 : meter\\nresults.material.topology.largest_included_sphere_along_free_sphere_path : The largest included sphere along free sphere path is\\nlargest sphere that can be inserted in the pore. : float64 : meter\\nresults.material.topology.accessible_surface_area : The surface area accessible is the area that is accessible to guest molecules\\nin a porous system. It is generally considered to be the entire surface area\\nthat can be spanned by a probe of a specific radius. In NOMAD, by default we use\\na probe that has a radius of 1.86 Angstrom, which correspond to the\\ncovalent radii of nitrogen gas. For biomolecular system, a radii of\\n1.4 Angstrom can be used, which correspond to the covalent radii\\nof water. : float64 : meter ** 2\\nresults.material.topology.accessible_volume : Volume of unoccupied space in a system that can be accessible to\\nguest molecules, like solvents. : float64 : meter ** 3\\nresults.material.topology.void_fraction : Ratio of the the volume of the unoccupied space in the system\\nto the volume of the entire system. It is a good proxy to\\ndetermine how porous a system is. Highly porous systems\\noften have a larger void fraction, meanwhile compact or dense\\nsystems have smaller void fractions. : float64\\nresults.material.topology.n_channels : Number of channels present in the porous system, which correspond to the number of\\npores within the system. : int\\nresults.material.topology.sbu_coordination_number : The number of connecting point in the secondary building units(sbu), which corresponds to\\nthe to the number of point of extension in the secondary building unit. Some common\\nterminology include\\n1 : monotopic\\n2 : ditopic\\n3 : tritopic\\n4 : tetratopic\\n5 : pentatopic : int\\nresults.material.topology.elemental_composition.element : The symbol of the element, e.g. \\'Pb\\'. : Ac,Ag,Al,Am,Ar,As,At,Au,B,Ba,Be,Bh,Bi,Bk,Br,C,Ca,Cd,Ce,Cf,Cl,Cm,Cn,Co,Cr,Cs,Cu,Db,Ds,Dy,Er,Es,Eu,F,Fe,Fl,Fm,Fr,Ga,Gd,Ge,H,He,Hf,Hg,Ho,Hs,I,In,Ir,K,Kr,La,Li,Lr,Lu,Lv,Mc,Md,Mg,Mn,Mo,Mt,N,Na,Nb,Nd,Ne,Nh,Ni,No,Np,O,Og,Os,P,Pa,Pb,Pd,Pm,Po,Pr,Pt,Pu,Ra,Rb,Re,Rf,Rg,Rh,Rn,Ru,S,Sb,Sc,Se,Sg,Si,Sm,Sn,Sr,Ta,Tb,Tc,Te,Th,Ti,Tl,Tm,Ts,U,V,W,Xe,Y,Yb,Zn,Zr\\nresults.material.topology.elemental_composition.atomic_fraction : The atomic fraction of the element in the system it is contained within.\\nPer definition a positive value less than or equal to 1. : float64\\nresults.material.topology.elemental_composition.mass_fraction : The mass fraction of the element in the system it is contained within.\\nPer definition a positive value less than or equal to 1. : float64\\nresults.material.topology.system_relation.type : The type of relation between a system and it\\'s parent.\\n\\n| Value | Description |\\n| --------- | ----------------------- |\\n| `\\'root\\'` | System representing the entire structure, has no parent system. |\\n| `\\'subsystem\\'` | A single logical entity extracted from the parent system. |\\n| `\\'group\\'` | A logical group of subsystems within the parent, e.g. a group of molecules in MD. |\\n| `\\'primitive_cell\\'` | The conventional cell from which the parent is constructed from. |\\n| `\\'conventional_cell\\'` | The primitive cell from which the parent is constructed from. | : conventional_cell,group,primitive_cell,root,subsystem\\nresults.material.topology.cell.a : Length of the first basis vector. : float64 : meter\\nresults.material.topology.cell.b : Length of the second basis vector. : float64 : meter\\nresults.material.topology.cell.c : Length of the third basis vector. : float64 : meter\\nresults.material.topology.cell.alpha : Angle between second and third basis vector. : float64 : radian\\nresults.material.topology.cell.beta : Angle between first and third basis vector. : float64 : radian\\nresults.material.topology.cell.gamma : Angle between first and second basis vector. : float64 : radian\\nresults.material.topology.cell.volume : Volume of the cell. : float64 : meter ** 3\\nresults.material.topology.cell.atomic_density : Atomic density of the material (atoms/volume).\\' : float64 : 1 / meter ** 3\\nresults.material.topology.cell.mass_density : Mass density of the material. : float64 : kilogram / meter ** 3\\nresults.material.topology.symmetry.bravais_lattice : Identifier for the Bravais lattice in Pearson notation. The first lowercase letter\\nidentifies the crystal family and can be one of the following: a (triclinic), b\\n(monoclinic), o (orthorhombic), t (tetragonal), h (hexagonal) or c (cubic). The\\nsecond uppercase letter identifies the centring and can be one of the following: P\\n(primitive), S (face centred), I (body centred), R (rhombohedral centring) or F\\n(all faces centred). : aP,cF,cI,cP,hP,hR,mP,mS,oF,oI,oP,oS,tI,tP\\nresults.material.topology.symmetry.crystal_system : Name of the crystal system. : cubic,hexagonal,monoclinic,orthorhombic,tetragonal,triclinic,trigonal\\nresults.material.topology.symmetry.hall_number : The Hall number for this system. : int32\\nresults.material.topology.symmetry.hall_symbol : The Hall symbol for this system. : str\\nresults.material.topology.symmetry.point_group : Symbol of the crystallographic point group in the Hermann-Mauguin notation. : str\\nresults.material.topology.symmetry.space_group_number : Specifies the International Union of Crystallography (IUC) number of the 3D space\\ngroup of this system. : int32\\nresults.material.topology.symmetry.space_group_symbol : The International Union of Crystallography (IUC) short symbol of the 3D\\nspace group of this system. : str\\nresults.material.topology.symmetry.strukturbericht_designation : Classification of the material according to the historically grown\\n\\'strukturbericht\\'. : str\\nresults.material.topology.symmetry.prototype_label_aflow : AFLOW label of the prototype (see\\nhttp://aflowlib.org/CrystalDatabase/prototype_index.html) identified on the basis\\nof the space_group and normalized_wyckoff. : str\\nresults.material.topology.symmetry.prototype_name : A common name for this prototypical structure, e.g. fcc, bcc. : 4-member ring,Heusler,bcc,bct,bct5,clathrate,cuprite,diamond,fcc,fct,half-Heusler,hcp,perovskite,rock salt,rutile,simple cubic,wurtzite,zincblende\\nresults.material.topology.active_orbitals.n_quantum_number : Principal quantum number $n$. : int32\\nresults.material.topology.active_orbitals.j_quantum_number : Total angular momentum quantum number $j = |l-s| ... l+s$.\\n**Necessary with strong L-S coupling or non-collinear spin systems.** : float64\\nresults.material.topology.active_orbitals.mj_quantum_number : Azimuthal projection of the $j$ vector.\\n**Necessary with strong L-S coupling or non-collinear spin systems.** : float64\\nresults.material.topology.active_orbitals.degeneracy : The number of states under the filling constraints applied to the orbital set.\\nThis implicitly assumes that all orbitals in the set are degenerate. : int32\\nresults.material.topology.active_orbitals.n_electrons_excited : The electron charge excited for modelling purposes.\\nChoices that deviate from 0 or 1 typically leverage Janak composition.\\nUnless the `initial` state is chosen, the model corresponds to a single electron being excited in physical reality. : float64\\nresults.material.topology.active_orbitals.occupation : The total number of electrons within the state (as defined by degeneracy)\\nafter exciting the model charge. : float64\\nresults.material.topology.active_orbitals.l_quantum_symbol : Azimuthal $l$ in symbolic form. : str\\nresults.material.topology.active_orbitals.ml_quantum_symbol : Magnetic quantum number $m_l$ in symbolic form. : str\\nresults.material.topology.active_orbitals.ms_quantum_symbol : Spin quantum number $m_s$ in symbolic form. : str\\nresults.method.method_id : Identifier for the used method. Only available for a subset of entries\\nfor which the methodology has been identified with precision. : str\\nresults.method.method_name : Common name for the used method. : BSE,CoreHole,DFT,DMFT,EELS,GW,NMR,TB,XPS,XRD,kMC,quantum cms,unavailable\\nresults.method.workflow_name :   : str\\nresults.method.simulation.program_name : The name of the used program. : str\\nresults.method.simulation.program_version : The version of the used program. : str\\nresults.method.simulation.program_version_internal : The version tag used internally by the development team. : str\\nresults.method.simulation.dft.basis_set_type : The used basis set functions. : (L)APW+lo,gaussians,not processed,numeric AOs,plane waves,psinc functions,real-space grid,unavailable\\nresults.method.simulation.dft.core_electron_treatment : How the core electrons are described. : all electron frozen core,full all electron,pseudopotential,unavailable\\nresults.method.simulation.dft.spin_polarized : Whether the calculation is spin-polarized. : bool\\nresults.method.simulation.dft.scf_threshold_energy_change : Specifies the threshold for the total energy change between two subsequent\\nself-consistent field (SCF) iterations. The SCF is considered converged when the\\ntotal-energy change between two SCF cycles is below the threshold (possibly in\\ncombination with other criteria). : float64 : joule\\nresults.method.simulation.dft.van_der_Waals_method : The used van der Waals method. : str\\nresults.method.simulation.dft.relativity_method : Describes the relativistic treatment used for the calculation of the final energy\\nand related quantities. If skipped or empty, no relativistic treatment is applied. : pseudo_scalar_relativistic,scalar_relativistic,scalar_relativistic_atomic_ZORA\\nresults.method.simulation.dft.smearing_kind : Specifies the kind of smearing on the electron occupation used to calculate the\\nfree energy (see energy_free)\\n\\nValid values are:\\n\\n| Smearing kind             | Description                       |\\n\\n| ------------------------- | --------------------------------- |\\n\\n| `\"empty\"`                 | No smearing is applied            |\\n\\n| `\"gaussian\"`              | Gaussian smearing                 |\\n\\n| `\"fermi\"`                 | Fermi smearing                    |\\n\\n| `\"marzari-vanderbilt\"`    | Marzari-Vanderbilt smearing       |\\n\\n| `\"methfessel-paxton\"`     | Methfessel-Paxton smearing        |\\n\\n| `\"tetrahedra\"`            | Interpolation of state energies and occupations\\n(ignores smearing_width) | : str\\nresults.method.simulation.dft.smearing_width : Specifies the width of the smearing in energy for the electron occupation used to\\ncalculate the free energy (see energy_free).\\n\\n*NOTE:* Not all methods specified in smearing_kind uses this value. : float64\\nresults.method.simulation.dft.jacobs_ladder : Functional classification in line with Jacob\\'s Ladder.\\nFor more information, see https://doi.org/10.1063/1.1390175 (original paper);\\nhttps://doi.org/10.1103/PhysRevLett.91.146401 (meta-GGA);\\nand https://doi.org/10.1063/1.1904565 (hyper-GGA). : GGA,LDA,hybrid,hyper-GGA,meta-GGA,not processed,unavailable\\nresults.method.simulation.dft.xc_functional_type : Functional classification in line with Jacob\\'s Ladder.\\nFor more information, see https://doi.org/10.1063/1.1390175 (original paper);\\nhttps://doi.org/10.1103/PhysRevLett.91.146401 (meta-GGA);\\nand https://doi.org/10.1063/1.1904565 (hyper-GGA). : GGA,LDA,hybrid,hyper-GGA,meta-GGA,not processed,unavailable\\nresults.method.simulation.dft.xc_functional_names : The list of libXC functional names that where used in this entry. : str\\nresults.method.simulation.dft.exact_exchange_mixing_factor : Amount of exact exchange mixed in with the XC functional (value range = [0,1]). : float64\\nresults.method.simulation.dft.hubbard_kanamori_model.u_effective : Value of the effective U parameter (u - j). : float64 : joule\\nresults.method.simulation.dft.hubbard_kanamori_model.u : Value of the (intraorbital) Hubbard interaction : float64 : joule\\nresults.method.simulation.dft.hubbard_kanamori_model.j : Value of the exchange interaction. In rotational invariant systems, j = jh. : float64 : joule\\nresults.method.simulation.tb.type : Tight-binding model type: Slater Koster fitting, DFTB approximation, xTB perturbation\\ntheory, or Wannier projection. : DFTB,Slater-Koster,Wannier,not processed,xTB\\nresults.method.simulation.tb.localization_type : Localization type of the Wannier orbitals. : maximally_localized,single_shot\\nresults.method.simulation.gw.type : GW Hedin\\'s self-consistency cycle:\\n\\n| Name      | Description                      | Reference             |\\n\\n| --------- | -------------------------------- | --------------------- |\\n\\n| `\\'G0W0\\'`  | single-shot                      | PRB 74, 035101 (2006) |\\n\\n| `\\'scGW\\'`  | self-consistent G and W               | PRB 75, 235102 (2007) |\\n\\n| `\\'scGW0\\'` | self-consistent G with fixed W0  | PRB 54, 8411 (1996)   |\\n\\n| `\\'scG0W\\'` | self-consistent W with fixed G0  | -                     |\\n\\n| `\\'ev-scGW0\\'`  | eigenvalues self-consistent G with fixed W0   | PRB 34, 5390 (1986)   |\\n\\n| `\\'ev-scGW\\'`  | eigenvalues self-consistent G and W   | PRB 74, 045102 (2006)   |\\n\\n| `\\'qp-scGW0\\'`  | quasiparticle self-consistent G with fixed W0 | PRL 99, 115109 (2007) |\\n\\n| `\\'qp-scGW\\'`  | quasiparticle self-consistent G and W | PRL 96, 226402 (2006) | : G0W0,ev-scGW,ev-scGW0,qp-scGW,qp-scGW0,scG0W,scGW,scGW0\\nresults.method.simulation.gw.basis_set_type : The used basis set functions. : (L)APW+lo,gaussians,not processed,numeric AOs,plane waves,psinc functions,real-space grid,unavailable\\nresults.method.simulation.gw.starting_point_type : The libXC based xc functional classification used in the starting point DFT simulation. : GGA,HF,LDA,hybrid,hyper-GGA,meta-GGA,not processed,unavailable\\nresults.method.simulation.gw.starting_point_names : The list of libXC functional names that where used in this entry. : str\\nresults.method.simulation.bse.type : Type of BSE hamiltonian solved:\\n\\n    H_BSE = H_diagonal + 2 * gx * Hx - gc * Hc\\n\\nwhere gx, gc specifies the type.\\n\\nOnline resources for the theory:\\n- http://exciting.wikidot.com/carbon-excited-states-from-bse#toc1\\n- https://www.vasp.at/wiki/index.php/Bethe-Salpeter-equations_calculations\\n- https://docs.abinit.org/theory/bse/\\n- https://www.yambo-code.eu/wiki/index.php/Bethe-Salpeter_kernel\\n\\n| Name | Description |\\n\\n| --------- | ----------------------- |\\n\\n| `\\'Singlet\\'` | gx = 1, gc = 1 |\\n\\n| `\\'Triplet\\'` | gx = 0, gc = 1 |\\n\\n| `\\'IP\\'` | Independent-particle approach |\\n\\n| `\\'RPA\\'` | Random Phase Approximation | : IP,RPA,Singlet,Triplet\\nresults.method.simulation.bse.basis_set_type : The used basis set functions. : (L)APW+lo,gaussians,not processed,numeric AOs,plane waves,psinc functions,real-space grid,unavailable\\nresults.method.simulation.bse.starting_point_type : The libXC based xc functional classification used in the starting point DFT simulation. : GGA,HF,LDA,hybrid,hyper-GGA,meta-GGA,not processed,unavailable\\nresults.method.simulation.bse.starting_point_names : The list of libXC functional names that where used in this entry. : str\\nresults.method.simulation.bse.solver : Solver algotithm used to diagonalize the BSE Hamiltonian.\\n\\n| Name | Description | Reference |\\n\\n| --------- | ----------------------- | ----------- |\\n\\n| `\\'Full-diagonalization\\'` | Full diagonalization of the BSE Hamiltonian | - |\\n\\n| `\\'Lanczos-Haydock\\'` | Subspace iterative Lanczos-Haydock algorithm | https://doi.org/10.1103/PhysRevB.59.5441 |\\n\\n| `\\'GMRES\\'` | Generalized minimal residual method | https://doi.org/10.1137/0907058 |\\n\\n| `\\'SLEPc\\'` | Scalable Library for Eigenvalue Problem Computations | https://slepc.upv.es/ |\\n\\n| `\\'TDA\\'` | Tamm-Dancoff approximation | https://doi.org/10.1016/S0009-2614(99)01149-5 | : Full-diagonalization,GMRES,Lanczos-Haydock,SLEPc,TDA\\nresults.method.simulation.bse.gw_type : GW Hedin\\'s self-consistency cycle:\\n\\n| Name      | Description                      | Reference             |\\n\\n| --------- | -------------------------------- | --------------------- |\\n\\n| `\\'G0W0\\'`  | single-shot                      | PRB 74, 035101 (2006) |\\n\\n| `\\'scGW\\'`  | self-consistent G and W               | PRB 75, 235102 (2007) |\\n\\n| `\\'scGW0\\'` | self-consistent G with fixed W0  | PRB 54, 8411 (1996)   |\\n\\n| `\\'scG0W\\'` | self-consistent W with fixed G0  | -                     |\\n\\n| `\\'ev-scGW0\\'`  | eigenvalues self-consistent G with fixed W0   | PRB 34, 5390 (1986)   |\\n\\n| `\\'ev-scGW\\'`  | eigenvalues self-consistent G and W   | PRB 74, 045102 (2006)   |\\n\\n| `\\'qp-scGW0\\'`  | quasiparticle self-consistent G with fixed W0 | PRL 99, 115109 (2007) |\\n\\n| `\\'qp-scGW\\'`  | quasiparticle self-consistent G and W | PRL 96, 226402 (2006) | : G0W0,ev-scGW,ev-scGW0,qp-scGW,qp-scGW0,scG0W,scGW,scGW0\\nresults.method.simulation.dmft.impurity_solver_type : Impurity solver method used in the DMFT loop:\\n\\n| Name              | Reference                            |\\n\\n| ----------------- | ------------------------------------ |\\n\\n| `\\'CT-INT\\'`        | Rubtsov et al., JEPT Lett 80 (2004)  |\\n\\n| `\\'CT-HYB\\'`        | Werner et al., PRL 97 (2006)         |\\n\\n| `\\'CT-AUX\\'`        | Gull et al., EPL 82 (2008)           |\\n\\n| `\\'ED\\'`            | Caffarrel et al, PRL 72 (1994)       |\\n\\n| `\\'NRG\\'`           | Bulla et al., RMP 80 (2008)          |\\n\\n| `\\'MPS\\'`           | Ganahl et al., PRB 90 (2014)         |\\n\\n| `\\'IPT\\'`           | Georges et al., PRB 45 (1992)        |\\n\\n| `\\'NCA\\'`           | Pruschke et al., PRB 47 (1993)       |\\n\\n| `\\'OCA\\'`           | Pruschke et al., PRB 47 (1993)       |\\n\\n| `\\'slave_bosons\\'`  | Kotliar et al., PRL 57 (1986)        |\\n\\n| `\\'hubbard_I\\'`     | -                                    | : CT-AUX,CT-HYB,CT-INT,ED,IPT,MPS,NCA,NRG,OCA,hubbard_I,slave_bosons\\nresults.method.simulation.dmft.inverse_temperature : Inverse temperature = 1/(kB*T). : float64 : 1 / joule\\nresults.method.simulation.dmft.magnetic_state : Magnetic state in which the DMFT calculation is done. : antiferromagnetic,ferromagnetic,paramagnetic\\nresults.method.simulation.dmft.u : Value of the (intraorbital) Hubbard interaction : float64 : joule\\nresults.method.simulation.dmft.jh : Value of the (interorbital) Hund\\'s coupling. : float64 : joule\\nresults.method.simulation.dmft.analytical_continuation : Analytical continuation used to continuate the imaginary space Green\\'s functions into\\nthe real frequencies space.\\n\\n| Name           | Description         | Reference                        |\\n\\n| -------------- | ------------------- | -------------------------------- |\\n\\n| `\\'Pade\\'` | Pade\\'s approximant  | https://www.sciencedirect.com/science/article/pii/0021999173901277?via%3Dihub |\\n\\n| `\\'MaxEnt\\'` | Maximum Entropy method | https://journals.aps.org/prb/abstract/10.1103/PhysRevB.41.2380 |\\n\\n| `\\'SVD\\'` | Singular value decomposition | https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.75.517 |\\n\\n| `\\'Stochastic\\'` | Stochastic method | https://journals.aps.org/prb/abstract/10.1103/PhysRevB.57.10287 | : MaxEnt,Pade,SVD,Stochastic\\nresults.method.simulation.precision.k_line_density : Amount of sampled k-points per unit reciprocal length along each axis.\\nContains the least precise density out of all axes.\\nShould only be compared between calulations of similar dimensionality. : float64 : meter\\nresults.method.simulation.precision.native_tier : The code-specific tag indicating the precision used\\nfor the basis set and meshes of numerical routines.\\n\\nSupported codes (with hyperlinks to the relevant documentation):\\n- [`VASP`](https://www.vasp.at/wiki/index.php/PREC)\\n- `FHI-aims`\\n- [`CASTEP`](http://www.tcm.phy.cam.ac.uk/castep/documentation/WebHelp/CASTEP.html#modules/castep/tskcastepsetelecquality.htm?Highlight=ultra-fine) : str\\nresults.method.simulation.precision.basis_set : The type of basis set used by the program.\\n\\n| Value                          |                       Description |\\n| ------------------------------ | --------------------------------- |\\n| `\\'APW\\'`                        | Augmented plane waves             |\\n| `\\'LAPW\\'`                       | Linearized augmented plane waves  |\\n| `\\'APW+lo\\'`             | Augmented plane waves with local orbitals |\\n| `\\'LAPW+lo\\'` | Linearized augmented plane waves with local orbitals |\\n| `\\'(L)APW\\'`                     |     A combination of APW and LAPW |\\n| `\\'(L)APW+lo\\'`  | A combination of APW and LAPW with local orbitals |\\n| `\\'plane waves\\'`                | Plane waves                       |\\n| `\\'gaussians + plane waves\\'`    | Basis set of the Quickstep algorithm (DOI: 10.1016/j.cpc.2004.12.014) |\\n| `\\'real-space grid\\'`            | Real-space grid                   |\\n| `\\'suppport functions\\'`         | Support functions                 | : (L)APW,(L)APW+lo,APW,APW+lo,LAPW,LAPW+lo,atom-centered orbitals,gaussians + plane waves,not processed,plane waves,real-space grid,support functions,unavailable\\nresults.method.simulation.precision.planewave_cutoff : Spherical cutoff in reciprocal space for a plane-wave basis set. It is the energy\\nof the highest plane-wave ($\\\\frac{\\\\hbar^2|k+G|^2}{2m_e}$) included in the basis\\nset. : float64 : joule\\nresults.method.simulation.precision.apw_cutoff : The spherical cutoff parameter for the interstitial plane waves in the LAPW family.\\nThis cutoff is unitless, referring to the product of the smallest muffin-tin radius\\nand the length of the cutoff reciprocal vector ($r_{MT} * |K_{cut}|$). : float64\\nresults.method.measurement.xrd.diffraction_method_name : The diffraction method used to obtain the diffraction pattern.\\n| X-Ray Diffraction Method                                   | Description                                                                                                                                                                                                 |\\n|------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\\n| **Powder X-Ray Diffraction (PXRD)**                        | The term \"powder\" refers more to the random orientation of small crystallites than to the physical form of the sample. Can be used with non-powder samples if they present random crystallite orientations. |\\n| **Single Crystal X-Ray Diffraction (SCXRD)**               | Used for determining the atomic structure of a single crystal.                                                                                                                                              |\\n| **High-Resolution X-Ray Diffraction (HRXRD)**              | A technique typically used for detailed characterization of epitaxial thin films using precise diffraction measurements.                                                                                    |\\n| **Small-Angle X-Ray Scattering (SAXS)**                    | Used for studying nanostructures in the size range of 1-100 nm. Provides information on particle size, shape, and distribution.                                                                             |\\n| **X-Ray Reflectivity (XRR)**                               | Used to study thin film layers, interfaces, and multilayers. Provides info on film thickness, density, and roughness.                                                                                       |\\n| **Grazing Incidence X-Ray Diffraction (GIXRD)**            | Primarily used for the analysis of thin films with the incident beam at a fixed shallow angle.                                                                                                              |\\n| **Reciprocal Space Mapping (RSM)**                         | High-resolution XRD method to measure diffracted intensity in a 2-dimensional region of reciprocal space. Provides information about the real-structure (lattice mismatch, domain structure, stress and defects) in single-crystalline and epitaxial samples.| : Grazing Incidence X-Ray Diffraction (GIXRD),High-Resolution X-Ray Diffraction (HRXRD),Powder X-Ray Diffraction (PXRD),Reciprocal Space Mapping (RSM),Single Crystal X-Ray Diffraction (SCXRD),Small-Angle X-Ray Scattering (SAXS),X-Ray Reflectivity (XRR),unavailable\\nresults.properties.n_calculations : The number of performed single configuration calculations.\\' : int\\nresults.properties.available_properties : Subset of the property names that are present in this entry. : str\\nresults.properties.structural.radial_distribution_function.type : Describes if the observable is calculated at the molecular or atomic level. : atomic,molecular\\nresults.properties.structural.radial_distribution_function.label : Describes the atoms or molecule types involved in determining the property. : str\\nresults.properties.structural.radial_distribution_function.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.structural.radial_distribution_function.provenance.molecular_dynamics.time_step : The timestep at which the numerical integration is performed. : float64 : second\\nresults.properties.structural.radial_distribution_function.provenance.molecular_dynamics.ensemble_type : The type of thermodynamic ensemble that was simulated.\\n\\nAllowed values are:\\n\\n| Thermodynamic Ensemble          | Description                               |\\n\\n| ---------------------- | ----------------------------------------- |\\n\\n| `\"NVE\"`           | Constant number of particles, volume, and energy |\\n\\n| `\"NVT\"`           | Constant number of particles, volume, and temperature |\\n\\n| `\"NPT\"`           | Constant number of particles, pressure, and temperature |\\n\\n| `\"NPH\"`           | Constant number of particles, pressure, and enthalpy | : NPH,NPT,NVE,NVT\\nresults.properties.structural.radius_of_gyration.kind : Kind of the quantity. : str\\nresults.properties.structural.radius_of_gyration.label : Describes the atoms or molecule types involved in determining the property. : str\\nresults.properties.structural.radius_of_gyration.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.structural.radius_of_gyration.provenance.molecular_dynamics.time_step : The timestep at which the numerical integration is performed. : float64 : second\\nresults.properties.structural.radius_of_gyration.provenance.molecular_dynamics.ensemble_type : The type of thermodynamic ensemble that was simulated.\\n\\nAllowed values are:\\n\\n| Thermodynamic Ensemble          | Description                               |\\n\\n| ---------------------- | ----------------------------------------- |\\n\\n| `\"NVE\"`           | Constant number of particles, volume, and energy |\\n\\n| `\"NVT\"`           | Constant number of particles, volume, and temperature |\\n\\n| `\"NPT\"`           | Constant number of particles, pressure, and temperature |\\n\\n| `\"NPH\"`           | Constant number of particles, pressure, and enthalpy | : NPH,NPT,NVE,NVT\\nresults.properties.structural.diffraction_pattern.incident_beam_wavelength : The wavelength of the incident beam. : float64 : meter\\nresults.properties.dynamical.mean_squared_displacement.type : Describes if the observable is calculated at the molecular or atomic level. : atomic,molecular\\nresults.properties.dynamical.mean_squared_displacement.label : Describes the atoms or molecule types involved in determining the property. : str\\nresults.properties.dynamical.mean_squared_displacement.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.dynamical.mean_squared_displacement.provenance.molecular_dynamics.time_step : The timestep at which the numerical integration is performed. : float64 : second\\nresults.properties.dynamical.mean_squared_displacement.provenance.molecular_dynamics.ensemble_type : The type of thermodynamic ensemble that was simulated.\\n\\nAllowed values are:\\n\\n| Thermodynamic Ensemble          | Description                               |\\n\\n| ---------------------- | ----------------------------------------- |\\n\\n| `\"NVE\"`           | Constant number of particles, volume, and energy |\\n\\n| `\"NVT\"`           | Constant number of particles, volume, and temperature |\\n\\n| `\"NPT\"`           | Constant number of particles, pressure, and temperature |\\n\\n| `\"NPH\"`           | Constant number of particles, pressure, and enthalpy | : NPH,NPT,NVE,NVT\\nresults.properties.structures.structure_original.nperiodic_dimensions : An integer specifying the number of periodic dimensions in the\\nstructure, equivalent to the number of non-zero entries in\\ndimension_types. : int\\nresults.properties.structures.structure_original.n_sites : An integer specifying the length of the cartesian_site_positions property. : int\\nresults.properties.structures.structure_original.cell_volume : Volume of the cell. : float64 : meter ** 3\\nresults.properties.structures.structure_original.lattice_parameters.a : Length of the first basis vector. : float64 : meter\\nresults.properties.structures.structure_original.lattice_parameters.b : Length of the second basis vector. : float64 : meter\\nresults.properties.structures.structure_original.lattice_parameters.c : Length of the third basis vector. : float64 : meter\\nresults.properties.structures.structure_original.lattice_parameters.alpha : Angle between second and third basis vector. : float64 : radian\\nresults.properties.structures.structure_original.lattice_parameters.beta : Angle between first and third basis vector. : float64 : radian\\nresults.properties.structures.structure_original.lattice_parameters.gamma : Angle between first and second basis vector. : float64 : radian\\nresults.properties.structures.structure_conventional.nperiodic_dimensions : An integer specifying the number of periodic dimensions in the\\nstructure, equivalent to the number of non-zero entries in\\ndimension_types. : int\\nresults.properties.structures.structure_conventional.n_sites : An integer specifying the length of the cartesian_site_positions property. : int\\nresults.properties.structures.structure_conventional.cell_volume : Volume of the cell. : float64 : meter ** 3\\nresults.properties.structures.structure_conventional.lattice_parameters.a : Length of the first basis vector. : float64 : meter\\nresults.properties.structures.structure_conventional.lattice_parameters.b : Length of the second basis vector. : float64 : meter\\nresults.properties.structures.structure_conventional.lattice_parameters.c : Length of the third basis vector. : float64 : meter\\nresults.properties.structures.structure_conventional.lattice_parameters.alpha : Angle between second and third basis vector. : float64 : radian\\nresults.properties.structures.structure_conventional.lattice_parameters.beta : Angle between first and third basis vector. : float64 : radian\\nresults.properties.structures.structure_conventional.lattice_parameters.gamma : Angle between first and second basis vector. : float64 : radian\\nresults.properties.structures.structure_primitive.nperiodic_dimensions : An integer specifying the number of periodic dimensions in the\\nstructure, equivalent to the number of non-zero entries in\\ndimension_types. : int\\nresults.properties.structures.structure_primitive.n_sites : An integer specifying the length of the cartesian_site_positions property. : int\\nresults.properties.structures.structure_primitive.cell_volume : Volume of the cell. : float64 : meter ** 3\\nresults.properties.structures.structure_primitive.lattice_parameters.a : Length of the first basis vector. : float64 : meter\\nresults.properties.structures.structure_primitive.lattice_parameters.b : Length of the second basis vector. : float64 : meter\\nresults.properties.structures.structure_primitive.lattice_parameters.c : Length of the third basis vector. : float64 : meter\\nresults.properties.structures.structure_primitive.lattice_parameters.alpha : Angle between second and third basis vector. : float64 : radian\\nresults.properties.structures.structure_primitive.lattice_parameters.beta : Angle between first and third basis vector. : float64 : radian\\nresults.properties.structures.structure_primitive.lattice_parameters.gamma : Angle between first and second basis vector. : float64 : radian\\nresults.properties.electronic.band_gap.index : The spin channel index. : int32\\nresults.properties.electronic.band_gap.value : The actual value of the band gap. Value of zero indicates a vanishing band gap and\\nis distinct from sources lacking any band gap measurement or calculation. : float64 : joule\\nresults.properties.electronic.band_gap.type : Band gap type. : direct,indirect\\nresults.properties.electronic.band_gap.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.electronic.dos_electronic.spin_polarized : Whether the DOS is spin-polarized, i.e. is contains channels for both\\nspin values. : bool\\nresults.properties.electronic.dos_electronic.band_gap.index : The spin channel index. : int32\\nresults.properties.electronic.dos_electronic.band_gap.value : The actual value of the band gap. Value of zero indicates a vanishing band gap and\\nis distinct from sources lacking any band gap measurement or calculation. : float64 : joule\\nresults.properties.electronic.dos_electronic.band_gap.type : Band gap type. : direct,indirect\\nresults.properties.electronic.dos_electronic.band_gap.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.electronic.dos_electronic_new.spin_polarized : Whether the DOS is spin-polarized, i.e. is contains channels for both\\nspin values. : bool\\nresults.properties.electronic.dos_electronic_new.has_projected : Whether the DOS has information about projections (species-, atom-, and/or orbital-\\nprojected). : bool\\nresults.properties.electronic.dos_electronic_new.data.band_gap.index : The spin channel index. : int32\\nresults.properties.electronic.dos_electronic_new.data.band_gap.value : The actual value of the band gap. Value of zero indicates a vanishing band gap and\\nis distinct from sources lacking any band gap measurement or calculation. : float64 : joule\\nresults.properties.electronic.dos_electronic_new.data.band_gap.type : Band gap type. : direct,indirect\\nresults.properties.electronic.dos_electronic_new.data.band_gap.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.electronic.band_structure_electronic.spin_polarized : Whether the band structure is spin-polarized, i.e. is contains channels\\nfor both spin values. : bool\\nresults.properties.electronic.band_structure_electronic.band_gap.index : The spin channel index. : int32\\nresults.properties.electronic.band_structure_electronic.band_gap.value : The actual value of the band gap. Value of zero indicates a vanishing band gap and\\nis distinct from sources lacking any band gap measurement or calculation. : float64 : joule\\nresults.properties.electronic.band_structure_electronic.band_gap.type : Band gap type. : direct,indirect\\nresults.properties.electronic.band_structure_electronic.band_gap.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.magnetic.spin_spin_coupling.source : Identifier for the source of the data: \\'experiment\\' or \\'simulation\\'. : experiment,simulation\\nresults.properties.magnetic.magnetic_susceptibility.source : Identifier for the source of the data: \\'experiment\\' or \\'simulation\\'. : experiment,simulation\\nresults.properties.optoelectronic.solar_cell.efficiency : Power conversion effciency of a solar cell in percentage %. : float64\\nresults.properties.optoelectronic.solar_cell.fill_factor : Fill factor of a solar cell in absolute values (from 0 to 1). : float64\\nresults.properties.optoelectronic.solar_cell.open_circuit_voltage : Open circuit voltage of a solar cell. : float64 : volt\\nresults.properties.optoelectronic.solar_cell.short_circuit_current_density : Short circuit current density of a solar cell. : float64 : ampere / meter ** 2\\nresults.properties.optoelectronic.solar_cell.illumination_intensity : The light intensity during the IV measurement. : float64 : watt / meter ** 2\\nresults.properties.optoelectronic.solar_cell.device_area : The total area of the cell during IV and stability measurements under illumination. : float64 : meter ** 2\\nresults.properties.optoelectronic.solar_cell.device_architecture : Device architecture of the solar cell. Examples are:\\n`pn-Heterojunction`, `pin`, `nip`, ... : str\\nresults.properties.optoelectronic.solar_cell.device_stack : Layers of the entire device. : str\\nresults.properties.optoelectronic.solar_cell.absorber : Absorber layers used in the solar cell. : str\\nresults.properties.optoelectronic.solar_cell.absorber_fabrication : Technique describing the fabrication of the absorber layer. Examples are:\\n`Spin-coating`, `Evaporation`, `Doctor blading`, ... : str\\nresults.properties.optoelectronic.solar_cell.electron_transport_layer : Electron selective contact layers used in the solar cell. : str\\nresults.properties.optoelectronic.solar_cell.hole_transport_layer : Hole selective contact layers used in the solar cell. : str\\nresults.properties.optoelectronic.solar_cell.substrate : Substrate layers used in the solar cell. : str\\nresults.properties.optoelectronic.solar_cell.back_contact : Back contact layers used in the solar cell. : str\\nresults.properties.catalytic.reaction.name : Name of the catalytic test reaction. : str\\nresults.properties.catalytic.reaction.type : Classification of the catalytic test reaction such as Oxidation, Hydrogenation,\\nIsomerization, Coupling... : str\\nresults.properties.catalytic.reaction.reactants.name : IUPAC name of the reagent. : str\\nresults.properties.catalytic.reaction.reactants.gas_concentration_in : Volumetric concentration (fraction) of the reagent in the feed gas.\\nShould be a value between 0 and 1. : float64\\nresults.properties.catalytic.reaction.reactants.gas_concentration_out : Volumetric concentration (fraction) of the reagent after the reactor.\\nShould be a value between 0 and 1. : float64\\nresults.properties.catalytic.reaction.reactants.conversion : Conversion of the reactant, in %. : float64\\nresults.properties.catalytic.reaction.products.name : Name of the product, preferably the IUPAC name. : str\\nresults.properties.catalytic.reaction.products.gas_concentration_in : Volumetric concentration (fraction) of the reagent in the feed gas.\\nShould be a value between 0 and 1. : float64\\nresults.properties.catalytic.reaction.products.gas_concentration_out : Volumetric concentration (fraction) of the reagent after the reactor.\\nShould be a value between 0 and 1. : float64\\nresults.properties.catalytic.reaction.products.selectivity : Selectivity of the product, in %. : float64\\nresults.properties.catalytic.reaction.products.space_time_yield : Space-time-yield of the product, in mass product per mass catalyst per time. : float64 : 1 / second\\nresults.properties.catalytic.reaction.rates.name : IUPAC name of the reagent whose rate is captured. : str\\nresults.properties.catalytic.reaction.rates.reaction_rate : The rate of the number of reactant or product molecules converted/produced,\\nper mass of total catalyst, per time. : float64 : mole / gram / second\\nresults.properties.catalytic.reaction.rates.specific_mass_rate : The specific rate of the reactant, per mass of active catalyst component\\n(e.g. metal). : float64 : mole / gram / second\\nresults.properties.catalytic.reaction.rates.specific_surface_area_rate : The specific rate of the reactant, per surface area of active catalyst. : float64 : mole / meter ** 2 / second\\nresults.properties.catalytic.reaction.rates.turnover_frequency : The turnover frequency, calculated from mol of reactant or product per\\nnumber of sites over time. : float64 : 1 / second\\nresults.properties.catalytic.reaction.reaction_conditions.temperature : The reaction temperature(s) in the catalytic reactor during a chemical reaction. : float64 : kelvin\\nresults.properties.catalytic.reaction.reaction_conditions.pressure : The pressure during the catalytic test reaction. : float64 : pascal\\nresults.properties.catalytic.reaction.reaction_conditions.weight_hourly_space_velocity : The weight hourly space velocity in 1/time (gas flow per catalyst mass). : float64 : milliliter / gram / second\\nresults.properties.catalytic.reaction.reaction_conditions.gas_hourly_space_velocity : The gas hourly space velocity in 1/time (gas flow per catalyst volume). : float64 : 1 / second\\nresults.properties.catalytic.reaction.reaction_conditions.flow_rate : The volumetric gas flow in volume per time. : float64 : meter ** 3 / second\\nresults.properties.catalytic.reaction.reaction_conditions.time_on_stream : The time on stream of the catalyst in the catalytic reaction. : float64 : second\\nresults.properties.catalytic.reaction.reaction_mechanism.initial_states : The names of reactants of the reaction or elementary step. : str\\nresults.properties.catalytic.reaction.reaction_mechanism.final_states : The names of products of the reaction or elementary step. : str\\nresults.properties.catalytic.reaction.reaction_mechanism.reaction_enthalpy : The reaction enthalpy of the reaction or reaction step. : float64 : joule\\nresults.properties.catalytic.reaction.reaction_mechanism.activation_energy : The (apparent) activation energy of the catalyzed reaction or reaction step. : float64 : joule\\nresults.properties.catalytic.catalyst.catalyst_name : Custom name of catalyst. : str\\nresults.properties.catalytic.catalyst.preparation_method : The main preparation method of the catalyst sample. : str\\nresults.properties.catalytic.catalyst.catalyst_type : The type of catalyst, wether metal or oxide, model, bulk, supported, ect.\\nMultiple values can apply. : str\\nresults.properties.catalytic.catalyst.characterization_methods : A list of methods used to characterize the catalyst sample. : str\\nresults.properties.catalytic.catalyst.surface_area : The surface area per catalyst mass. : float64 : meter ** 2 / gram\\nresults.properties.mechanical.energy_volume_curve.type :   : birch_euler,birch_lagrange,birch_murnaghan,mie_gruneisen,murnaghan,pack_evans_james,pourier_tarantola,raw,tait,vinet\\nresults.properties.mechanical.bulk_modulus.type : Describes the methodology for obtaining the value. : birch_euler,birch_lagrange,birch_murnaghan,mie_gruneisen,murnaghan,pack_evans_james,pourier_tarantola,reuss_average,tait,vinet,voigt_average,voigt_reuss_hill_average\\nresults.properties.mechanical.bulk_modulus.value : Bulk modulus value. : float64 : pascal\\nresults.properties.mechanical.shear_modulus.type : Describes the methodology for obtaining the value. : reuss_average,voigt_average,voigt_reuss_hill_average\\nresults.properties.mechanical.shear_modulus.value : Shear modulus value. : float64 : pascal\\nresults.properties.thermodynamic.trajectory.available_properties : Subset of the property names that are present in this trajectory. : energy_potential,pressure,temperature,volume\\nresults.properties.thermodynamic.trajectory.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.thermodynamic.trajectory.provenance.molecular_dynamics.time_step : The timestep at which the numerical integration is performed. : float64 : second\\nresults.properties.thermodynamic.trajectory.provenance.molecular_dynamics.ensemble_type : The type of thermodynamic ensemble that was simulated.\\n\\nAllowed values are:\\n\\n| Thermodynamic Ensemble          | Description                               |\\n\\n| ---------------------- | ----------------------------------------- |\\n\\n| `\"NVE\"`           | Constant number of particles, volume, and energy |\\n\\n| `\"NVT\"`           | Constant number of particles, volume, and temperature |\\n\\n| `\"NPT\"`           | Constant number of particles, pressure, and temperature |\\n\\n| `\"NPH\"`           | Constant number of particles, pressure, and enthalpy | : NPH,NPT,NVE,NVT\\nresults.properties.spectroscopic.spectra.type : Identifier for the methodology done to obtain the spectra data: EELS, XAS, XPS, etc. : EELS,EXAFS,RXIS,XANES,XAS,XES,XPS,unavailable\\nresults.properties.spectroscopic.spectra.label : Identifier for the source of the spectra data, either \\'computation\\' or \\'experiment\\'. : computation,experiment\\nresults.properties.spectroscopic.spectra.provenance.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.spectroscopic.spectra.provenance.eels.detector_type : Detector type. : str\\nresults.properties.spectroscopic.spectra.provenance.eels.resolution : Energy resolution of the detector. : float64 : joule\\nresults.properties.spectroscopic.spectra.provenance.eels.max_energy : Maximum energy of the detector. : float64 : joule\\nresults.properties.spectroscopic.spectra.provenance.eels.min_energy : Minimum energy of the detector. : float64 : joule\\nresults.properties.spectroscopic.spectra.provenance.electronic_structure.label : Class or type of the provenance.\\nCan be used to add further description to the provenance. : str\\nresults.properties.geometry_optimization.convergence_tolerance_energy_difference : The input energy difference tolerance criterion. : float64 : joule\\nresults.properties.geometry_optimization.convergence_tolerance_force_maximum : The input maximum net force tolerance criterion. : float64 : newton\\nresults.properties.geometry_optimization.final_force_maximum : The maximum net force in the last optimization step. : float64 : newton\\nresults.properties.geometry_optimization.final_energy_difference : The difference in the energy_total between the last two steps during\\noptimization. : float64 : joule\\nresults.properties.geometry_optimization.final_displacement_maximum : The maximum displacement in the last optimization step with respect to previous. : float64 : meter\\nresults.eln.sections : The type of sections used in entries to search for. By default these are the names\\nof the used section definitions. : str\\nresults.eln.tags : Short tags that are useful to quickly search based on various\\nuser defined criteria. : str\\nresults.eln.names : Short human readable and descriptive names that appear in\\nELN entries. : str\\nresults.eln.descriptions : \\'Human descriptions that appear in ELN entries. : str\\nresults.eln.instruments : The name or type of instrument used in an activity, e.g. process or\\nmeasurement. : str\\nresults.eln.methods : The name or the applied method in an activity, e.g. process or measurement : str\\nresults.eln.lab_ids : The laboratory specific id for any item, e.g. sample, chemical, instrument. : str\\nresults.material : Section containing information on the material composition and structure. : None\\nresults.material.elemental_composition : Section containing information about the concentration of an element,\\n        given by its atomic and mass fraction within the system or material. : None\\nresults.material.symmetry : Section containing information about the symmetry of the material. All\\n        of these properties are derived by running a symmetry analysis on a\\n        representative geometry from the original data. This original geometry\\n        is stored in results.properties together with the primitive and\\n        conventional structures. : None\\nresults.material.topology : Describes a a structural part that has been identified within the entry.\\n        May be related to other systems. : None\\nresults.material.topology.atoms : Describes the atomic structure of the physical system. This includes the atom positions, lattice vectors, etc. : None\\nresults.material.topology.elemental_composition : Section containing information about the concentration of an element,\\n        given by its atomic and mass fraction within the system or material. : None\\nresults.material.topology.system_relation : Contains information about the relation between two different systems. : None\\nresults.material.topology.cell : Properties of a unit cell. : None\\nresults.material.topology.symmetry : Section containing information about the symmetry properties of a\\n        conventional cell related to a system. : None\\nresults.material.topology.symmetry.wyckoff_sets : Section for storing Wyckoff set information. Only available for\\n        conventional cells that have undergone symmetry analysis. : None\\nresults.material.topology.metal_coordination : Coordination number of an element, which represents the number of atoms directly bonded to the element. : None\\nresults.material.topology.active_orbitals :   : None\\nresults.method : Contains a summary of the methodology that has been used in this entry.\\n        This methodology applies to all of the reported properties and\\n        determines the result of a single energy evalution. The individual\\n        properties may be further methodological details affect e.g. the\\n        sampling. : None\\nresults.method.simulation : Contains method details for a simulation entry. : None\\nresults.method.simulation.dft : Methodology for a DFT calculation. : None\\nresults.method.simulation.dft.hubbard_kanamori_model : Setup of the Hubbard model used in DFT+U : None\\nresults.method.simulation.tb : Methodology for a Tight-Binding calculation. : None\\nresults.method.simulation.gw : Methodology for a GW calculation. : None\\nresults.method.simulation.bse : Methodology for a BSE calculation. : None\\nresults.method.simulation.dmft : Methodology for a DMFT calculation. : None\\nresults.method.simulation.quantum_cms :   : None\\nresults.method.simulation.quantum_cms.quantum_circuit :   : None\\nresults.method.simulation.precision : Contains parameters for controlling or evaluating the convergence of the electronic structure. : None\\nresults.method.measurement : Contains method details for a measurement entry. : None\\nresults.method.measurement.xrd : Methodology for an X-Ray Diffraction measurement. : None\\nresults.properties : Contains the physical properties that have been calculated or used in\\n        this entry. : None\\nresults.properties.structural : Structural properties. : None\\nresults.properties.structural.radial_distribution_function : Radial distribution function. : None\\nresults.properties.structural.radial_distribution_function.provenance : Contains provenance information for properties derived from molecular\\n        dynamics simulations. : None\\nresults.properties.structural.radial_distribution_function.provenance.molecular_dynamics : Methodology for molecular dynamics. : None\\nresults.properties.structural.radius_of_gyration : Contains Radius of Gyration values as a trajectory. : None\\nresults.properties.structural.radius_of_gyration.provenance : Contains provenance information for properties derived from molecular\\n        dynamics simulations. : None\\nresults.properties.structural.radius_of_gyration.provenance.molecular_dynamics : Methodology for molecular dynamics. : None\\nresults.properties.structural.diffraction_pattern : Diffraction pattern. : None\\nresults.properties.dynamical : Dynamical properties. : None\\nresults.properties.dynamical.mean_squared_displacement : Mean Squared Displacements. : None\\nresults.properties.dynamical.mean_squared_displacement.provenance : Contains provenance information for properties derived from molecular\\n        dynamics simulations. : None\\nresults.properties.dynamical.mean_squared_displacement.provenance.molecular_dynamics : Methodology for molecular dynamics. : None\\nresults.properties.structures : Contains full atomistic representations of the material in different\\n        forms. : None\\nresults.properties.structures.structure_original : Describes an atomistic structure. : None\\nresults.properties.structures.structure_original.species : Used to describe the species of the sites of this structure. Species can be pure chemical elements, or virtual-crystal atoms representing a statistical occupation of a\\ngiven site by multiple chemical elements. : None\\nresults.properties.structures.structure_original.lattice_parameters : Lattice parameters of a cell. : None\\nresults.properties.structures.structure_original.wyckoff_sets : Section for storing Wyckoff set information. Only available for\\n        conventional cells that have undergone symmetry analysis. : None\\nresults.properties.structures.structure_conventional : Describes an atomistic structure. : None\\nresults.properties.structures.structure_conventional.species : Used to describe the species of the sites of this structure. Species can be pure chemical elements, or virtual-crystal atoms representing a statistical occupation of a\\ngiven site by multiple chemical elements. : None\\nresults.properties.structures.structure_conventional.lattice_parameters : Lattice parameters of a cell. : None\\nresults.properties.structures.structure_conventional.wyckoff_sets : Section for storing Wyckoff set information. Only available for\\n        conventional cells that have undergone symmetry analysis. : None\\nresults.properties.structures.structure_primitive : Describes an atomistic structure. : None\\nresults.properties.structures.structure_primitive.species : Used to describe the species of the sites of this structure. Species can be pure chemical elements, or virtual-crystal atoms representing a statistical occupation of a\\ngiven site by multiple chemical elements. : None\\nresults.properties.structures.structure_primitive.lattice_parameters : Lattice parameters of a cell. : None\\nresults.properties.structures.structure_primitive.wyckoff_sets : Section for storing Wyckoff set information. Only available for\\n        conventional cells that have undergone symmetry analysis. : None\\nresults.properties.vibrational : Vibrational properties. : None\\nresults.properties.vibrational.band_structure_phonon : This section stores information on a vibrational band structure\\n        evaluation along one-dimensional pathways in the reciprocal space. : None\\nresults.properties.vibrational.dos_phonon : Contains the phonon density of states. : None\\nresults.properties.vibrational.heat_capacity_constant_volume : Contains the values of the specific (per mass) and isochoric (constant\\n        volume) heat capacity at different temperatures. : None\\nresults.properties.vibrational.energy_free_helmholtz : Contains the values of the Helmholtz free energy per atom at constant\\n        volume and at different temperatures. : None\\nresults.properties.electronic : Electronic properties. : None\\nresults.properties.electronic.band_gap :   : None\\nresults.properties.electronic.band_gap.provenance :  : None\\nresults.properties.electronic.dos_electronic : Contains the total electronic density of states.\\n\\n        OLD VERSION: it will eventually be deprecated. : None\\nresults.properties.electronic.dos_electronic.band_gap :   : None\\nresults.properties.electronic.dos_electronic.band_gap.provenance : Contains semantically labelled provenance information.\\n        To be stored under PropertySection.provenance or children. : None\\nresults.properties.electronic.dos_electronic_new : Contains the electronic Density of States (DOS). This section can be repeated to refer to\\n        different methodologies (e.g., label = \\'DFT\\', \\'GW\\', \\'TB\\', etc.), and it can be spin-polarized\\n        or not. The sub-section data points to each (if present) spin channels. : None\\nresults.properties.electronic.dos_electronic_new.data : Section containign the density of states data.\\n\\n        It includes the total DOS and the projected DOS values. We differentiate `species_projected` as the\\n        projected DOS for same atomic species, `atom_projected` as the projected DOS for different\\n        atoms in the cell, and `orbital_projected` as the projected DOS for the orbitals of each\\n        atom. : None\\nresults.properties.electronic.dos_electronic_new.data.band_gap :   : None\\nresults.properties.electronic.dos_electronic_new.data.band_gap.provenance : Contains semantically labelled provenance information.\\n        To be stored under PropertySection.provenance or children. : None\\nresults.properties.electronic.band_structure_electronic : This section stores information on a electonic band structure\\n        evaluation along one-dimensional pathways in the reciprocal space. : None\\nresults.properties.electronic.band_structure_electronic.band_gap :   : None\\nresults.properties.electronic.band_structure_electronic.band_gap.provenance : Contains semantically labelled provenance information.\\n        To be stored under PropertySection.provenance or children. : None\\nresults.properties.electronic.greens_functions_electronic : Base class for Green\\'s functions information. : None\\nresults.properties.electronic.electric_field_gradient : Base class for the electric field gradient information. This section is relevant\\n        for NMR and describes the potential generated my the nuclei in the system. : None\\nresults.properties.magnetic : Magnetic properties. : None\\nresults.properties.magnetic.magnetic_shielding : Base class for the atomic magnetic shielding information. : None\\nresults.properties.magnetic.spin_spin_coupling : Base class for the spin-spin coupling information. : None\\nresults.properties.magnetic.magnetic_susceptibility : Base class for the magnetic susceptibility information. : None\\nresults.properties.optoelectronic : Optoelectronic properties. : None\\nresults.properties.optoelectronic.solar_cell : Properties of solar cells. : None\\nresults.properties.catalytic : Properties relating to catalysis. : None\\nresults.properties.catalytic.reaction : A collection of specifications and properties of a full catalytic reaction.\\n        This may include reaction conditions, results and mechanistic aspects of a reaction. : None\\nresults.properties.catalytic.reaction.reactants : A reactant in a catalytic test reaction. A reactant\\n        is identified by having a conversion. : None\\nresults.properties.catalytic.reaction.products : A product of a catalytic reaction. A product here is usually identified by having\\n        a selectivity, or a gas_concentration_out but no/zero gas_concentration_in. : None\\nresults.properties.catalytic.reaction.rates : Section bundling multiple representations of catalytic reaction rates. : None\\nresults.properties.catalytic.reaction.reaction_conditions : Conditions under which a catalytic test reaction was performed. : None\\nresults.properties.catalytic.reaction.reaction_mechanism : Properties of single steps of a catalytic reaction mechanism. : None\\nresults.properties.catalytic.catalyst : Properties of a heterogeneous catalyst. : None\\nresults.properties.mechanical : Mechanical properties. : None\\nresults.properties.mechanical.energy_volume_curve : Energy volume curve. : None\\nresults.properties.mechanical.bulk_modulus : Contains bulk modulus values calculated with different methodologies. : None\\nresults.properties.mechanical.shear_modulus : Contains shear modulus values calculated with different methodologies. : None\\nresults.properties.thermodynamic : Thermodynamic properties. : None\\nresults.properties.thermodynamic.trajectory : Thermodynamic properties reported for an ensemble evolving in time. : None\\nresults.properties.thermodynamic.trajectory.provenance : Contains provenance information for properties derived from molecular\\n        dynamics simulations. : None\\nresults.properties.thermodynamic.trajectory.provenance.molecular_dynamics : Methodology for molecular dynamics. : None\\nresults.properties.thermodynamic.trajectory.temperature : Contains temperature values evaluated at different times. : None\\nresults.properties.thermodynamic.trajectory.pressure : Contains pressure values evaluated at different times. : None\\nresults.properties.thermodynamic.trajectory.volume : Contains volume values evaluated at different times. : None\\nresults.properties.thermodynamic.trajectory.energy_potential : Contains energy values evaluated at different times. : None\\nresults.properties.spectroscopic : Spectroscopic properties. : None\\nresults.properties.spectroscopic.spectra : Base class for Spectra calculation information as obtained from an experiment or a computation. : None\\nresults.properties.spectroscopic.spectra.provenance : Contains provenance information (mainly the methodology section) for spectra properties\\n        derived from an experiment or a calculation. : None\\nresults.properties.spectroscopic.spectra.provenance.eels : Base class for the EELS methodology. : None\\nresults.properties.spectroscopic.spectra.provenance.electronic_structure :  : None\\nresults.properties.geometry_optimization : Geometry optimization results and settings. : None\\nresults.eln :   : None\\n<|eot_id|><|start_header_id|>user<|end_header_id|>\\n\\nRetrieve entries of aluminum nitride in a wurtzite structure.<|eot_id|><|start_header_id|>assistant<|end_header_id|>', prompt_token_ids=[128000, 128000, 128006, 9125, 128007, 271, 2675, 527, 459, 18328, 10695, 3932, 2778, 98811, 1846, 264, 32009, 8198, 4729, 13, 1472, 617, 30903, 323, 7384, 8198, 6677, 13, 4718, 3465, 374, 311, 1893, 264, 2778, 6464, 369, 5933, 4221, 2778, 20126, 555, 3932, 13, 720, 2675, 527, 2728, 279, 9959, 2778, 5151, 323, 872, 28887, 439, 836, 551, 4096, 551, 279, 828, 955, 477, 279, 1160, 315, 7773, 220, 2819, 369, 279, 2115, 551, 10309, 5089, 315, 279, 907, 627, 2746, 279, 828, 955, 374, 330, 4155, 1, 279, 2115, 649, 1193, 387, 1511, 304, 279, 330, 31548, 1385, 1, 2115, 311, 1817, 1202, 14209, 13, 3234, 539, 1005, 433, 439, 264, 2778, 2115, 627, 35, 546, 3645, 433, 1139, 19844, 46658, 3645, 320, 78125, 1005, 1845, 11, 2011, 11, 3878, 8, 4619, 1005, 279, 98811, 1846, 5446, 3645, 13, 720, 7456, 3041, 279, 3024, 24001, 3319, 912, 16540, 374, 4460, 627, 1489, 374, 24001, 439, 48095, 33858, 13, 720, 10464, 1521, 28231, 311, 3645, 279, 3319, 512, 262, 682, 25, 45189, 682, 2819, 304, 1160, 311, 2489, 198, 262, 904, 25, 62354, 422, 904, 907, 304, 1160, 9248, 320, 2309, 340, 262, 7000, 25, 45189, 7000, 315, 279, 2819, 311, 2489, 198, 262, 326, 668, 11, 26237, 11, 342, 668, 11, 26220, 25, 16842, 36595, 369, 25031, 5151, 11187, 35, 546, 1005, 330, 543, 1, 439, 279, 1176, 2115, 627, 12281, 8316, 1405, 279, 2115, 706, 264, 5300, 5089, 627, 10464, 330, 8234, 24585, 8947, 2508, 2981, 794, 330, 10754, 37, 1, 369, 9501, 17808, 12914, 20126, 271, 6014, 25599, 25, 8298, 851, 551, 578, 26048, 323, 31550, 5016, 13110, 369, 279, 8298, 315, 279, 4441, 551, 610, 198, 6248, 1292, 551, 578, 1217, 3984, 8298, 836, 551, 610, 198, 6248, 8827, 3084, 551, 578, 2457, 323, 892, 994, 279, 8298, 574, 3549, 304, 9859, 329, 551, 9859, 329, 41748, 467, 831, 2245, 1857, 920, 28762, 198, 4177, 851, 551, 362, 26048, 323, 31550, 5016, 13110, 369, 279, 4441, 551, 610, 198, 4177, 1292, 551, 362, 10015, 3823, 34898, 836, 369, 279, 4441, 13, 551, 610, 198, 4177, 1292, 39643, 551, 362, 10015, 3823, 34898, 836, 369, 279, 4441, 13, 551, 610, 198, 4177, 1857, 551, 578, 1925, 11036, 7419, 13, 1115, 374, 279, 836, 315, 279, 3857, 1511, 369, 828, 13, 551, 610, 198, 27684, 851, 551, 38987, 2115, 836, 11, 1005, 1595, 4177, 851, 63, 4619, 13, 551, 610, 198, 4177, 8827, 3084, 551, 578, 2457, 323, 892, 994, 279, 4441, 574, 3549, 304, 9859, 329, 551, 9859, 329, 41748, 467, 831, 2245, 1857, 920, 28762, 198, 9854, 1292, 551, 578, 98811, 1846, 6871, 1511, 369, 279, 1566, 8863, 551, 610, 198, 3902, 1213, 551, 578, 1853, 311, 279, 1925, 1213, 505, 279, 3789, 6352, 315, 279, 23700, 3626, 551, 610, 198, 3902, 1213, 3960, 551, 578, 1853, 311, 279, 1925, 1213, 505, 279, 3789, 6352, 315, 279, 23700, 3626, 551, 610, 198, 3902, 1213, 3173, 551, 5422, 1511, 311, 54263, 1990, 2204, 353, 3124, 10925, 9, 315, 459, 4441, 627, 2520, 2748, 10925, 323, 10925, 430, 656, 539, 617, 904, 2911, 11, 279, 907, 1288, 198, 1395, 4384, 13, 551, 610, 198, 3902, 1213, 3173, 3960, 551, 5422, 1511, 311, 54263, 1990, 2204, 353, 3124, 10925, 9, 315, 459, 4441, 627, 2520, 2748, 10925, 323, 10925, 430, 656, 539, 617, 904, 2911, 11, 279, 907, 1288, 198, 1395, 4384, 13, 551, 610, 198, 1342, 10947, 17096, 551, 31911, 1495, 8970, 430, 1288, 387, 6646, 994, 198, 45359, 1949, 1495, 20126, 369, 10925, 13, 551, 610, 198, 7346, 551, 578, 13006, 311, 279, 3626, 2949, 279, 8298, 430, 9352, 311, 420, 4441, 627, 2460, 3626, 2949, 279, 1890, 6352, 439, 279, 4441, 596, 1925, 1213, 527, 6646, 279, 198, 12249, 35546, 3626, 430, 9352, 311, 279, 4441, 13, 551, 610, 198, 7346, 3960, 551, 578, 13006, 311, 279, 3626, 2949, 279, 8298, 430, 9352, 311, 420, 4441, 627, 2460, 3626, 2949, 279, 1890, 6352, 439, 279, 4441, 596, 1925, 1213, 527, 6646, 279, 198, 12249, 35546, 3626, 430, 9352, 311, 279, 4441, 13, 551, 610, 198, 10629, 551, 578, 5016, 11, 95659, 85969, 11, 7698, 36871, 430, 574, 1511, 304, 279, 20160, 198, 45, 1937, 1846, 3623, 36, 13, 1102, 6276, 311, 9006, 36106, 315, 279, 2362, 98811, 1846, 3623, 36, 27475, 13, 551, 610, 198, 1059, 851, 551, 578, 2082, 3230, 13110, 28532, 505, 279, 4441, 596, 7257, 3626, 555, 279, 6871, 345, 333, 7396, 13, 551, 610, 198, 21591, 851, 551, 362, 1217, 3984, 9434, 887, 13, 34067, 279, 887, 369, 459, 4441, 304, 459, 9434, 4729, 198, 2940, 279, 828, 574, 25973, 505, 13, 551, 610, 198, 33966, 551, 45367, 422, 279, 4441, 374, 4756, 551, 1845, 198, 28602, 3084, 551, 578, 2457, 323, 892, 994, 279, 8298, 574, 4756, 304, 9859, 329, 551, 9859, 329, 41748, 467, 831, 2245, 1857, 920, 28762, 198, 4291, 57964, 12359, 551, 2314, 10297, 422, 420, 4441, 374, 1234, 459, 48702, 551, 1845, 198, 35122, 551, 45367, 430, 279, 4441, 374, 7946, 15590, 13, 551, 1845, 198, 4354, 59309, 3084, 551, 578, 2457, 323, 892, 315, 279, 1566, 8863, 13, 551, 9859, 329, 41748, 467, 831, 2245, 1857, 920, 28762, 198, 21315, 20808, 551, 40356, 430, 10222, 2391, 8863, 551, 610, 198, 17101, 329, 9625, 551, 578, 98811, 1846, 2373, 1511, 369, 279, 1566, 8863, 551, 610, 198, 17101, 329, 37446, 551, 578, 98811, 1846, 5379, 1511, 369, 279, 1566, 8863, 551, 610, 198, 6313, 551, 362, 1217, 3984, 4068, 369, 420, 4441, 551, 610, 198, 37009, 551, 2724, 3984, 15407, 320, 3222, 82, 8, 369, 420, 4441, 551, 610, 198, 21591, 8856, 551, 578, 12827, 477, 9434, 4729, 1405, 279, 4113, 828, 54068, 551, 20479, 9628, 43225, 98952, 2956, 5464, 44754, 88, 2117, 71424, 1289, 10199, 11, 61612, 5907, 75449, 48, 6204, 11, 791, 3700, 869, 4991, 635, 10199, 5907, 198, 8781, 551, 362, 2875, 3823, 34898, 4096, 315, 279, 10925, 6371, 13, 34067, 433, 374, 279, 198, 8355, 315, 459, 9434, 4729, 98648, 477, 279, 836, 315, 279, 1925, 3229, 13, 551, 610, 198, 3902, 23790, 2710, 551, 256, 551, 610, 198, 3902, 23790, 2710, 2858, 551, 256, 551, 610, 198, 3902, 23790, 3405, 851, 551, 578, 5016, 11, 26048, 1401, 89851, 24628, 551, 610, 198, 3902, 23790, 551, 578, 1925, 3229, 315, 279, 4441, 551, 2724, 198, 48105, 2710, 551, 256, 551, 610, 198, 48105, 2710, 2858, 551, 256, 551, 610, 198, 48105, 551, 2052, 12283, 320, 3902, 3229, 323, 1080, 34603, 1105, 8, 551, 7030, 198, 62712, 2710, 551, 256, 551, 610, 198, 62712, 2710, 2858, 551, 256, 551, 610, 198, 62712, 3405, 851, 551, 578, 5016, 11, 26048, 1401, 89851, 24628, 551, 610, 198, 62712, 551, 2052, 16483, 320, 3902, 3229, 11, 8298, 1080, 48105, 8, 551, 2724, 198, 18688, 21833, 551, 35680, 449, 3350, 2680, 39838, 1080, 3170, 5315, 570, 551, 610, 198, 1068, 388, 2710, 551, 256, 551, 610, 198, 1068, 388, 2710, 2858, 551, 256, 551, 610, 198, 1068, 388, 3405, 851, 551, 578, 5016, 11, 26048, 1401, 89851, 24628, 551, 610, 198, 1068, 388, 551, 2052, 22511, 320, 3902, 3229, 11, 8298, 1080, 48105, 11, 323, 60138, 8, 551, 2724, 198, 48722, 21833, 551, 35680, 449, 1373, 2680, 39838, 1080, 3170, 5315, 489, 56614, 5315, 570, 551, 610, 198, 66646, 25600, 851, 551, 578, 5016, 13110, 369, 420, 10550, 439, 264, 925, 13, 1102, 1288, 387, 198, 64, 27716, 8066, 24628, 11, 4528, 311, 1023, 9859, 329, 14483, 13, 551, 610, 198, 66646, 25600, 1292, 551, 578, 3823, 84318, 836, 315, 279, 10550, 439, 925, 13, 578, 10550, 836, 2011, 387, 198, 9782, 369, 279, 1217, 13, 551, 610, 198, 66646, 962, 6870, 551, 578, 10309, 12051, 3075, 35721, 320, 91092, 8, 5938, 449, 420, 10550, 627, 37412, 329, 649, 4254, 9503, 3957, 430, 2723, 1203, 311, 279, 20081, 13340, 315, 198, 1820, 10550, 304, 279, 9859, 329, 3774, 13, 1115, 12472, 10187, 279, 925, 13340, 315, 198, 576, 59670, 13, 2684, 374, 1193, 832, 824, 10550, 13, 578, 59670, 374, 1120, 279, 59670, 836, 11, 539, 1202, 198, 9054, 5665, 11, 384, 1326, 13, 330, 605, 13, 11123, 5332, 9809, 316, 329, 14, 679, 24, 13, 605, 13, 1682, 12, 16, 3343, 551, 610, 198, 66646, 25600, 8827, 3084, 551, 578, 2457, 994, 279, 10550, 574, 1176, 3549, 13, 551, 9859, 329, 41748, 467, 831, 2245, 1857, 920, 28762, 198, 66646, 25600, 38849, 3084, 551, 578, 2457, 994, 279, 10550, 574, 1566, 11041, 13, 1556, 13234, 10550, 198, 4919, 1193, 387, 11838, 1306, 264, 59670, 574, 12893, 13, 362, 7362, 10550, 4250, 387, 5614, 198, 13486, 264, 59670, 574, 12893, 13, 551, 9859, 329, 41748, 467, 831, 2245, 1857, 920, 28762, 198, 66646, 25600, 1857, 551, 578, 955, 11075, 422, 264, 10550, 374, 13234, 11, 602, 1770, 13, 574, 3549, 555, 198, 1820, 12283, 315, 279, 13282, 10925, 26, 477, 422, 264, 10550, 374, 7362, 345, 72, 1770, 13, 433, 574, 3549, 555, 4423, 539, 14647, 5552, 311, 279, 10925, 13, 551, 7362, 11, 18838, 198, 66646, 551, 362, 1160, 315, 1217, 58732, 30525, 420, 4441, 17623, 311, 13, 551, 611, 44241, 14, 845, 14, 2879, 85981, 14, 15, 198, 12482, 551, 578, 3769, 8198, 8106, 551, 294, 728, 11, 12116, 10337, 24590, 198, 77, 54446, 1385, 551, 5742, 315, 2322, 467, 831, 33776, 16051, 505, 279, 4441, 13, 551, 528, 198, 31548, 1385, 551, 2052, 33776, 430, 527, 1511, 555, 420, 4441, 13, 551, 610, 198, 31548, 1385, 3960, 551, 2052, 33776, 430, 527, 1511, 555, 420, 4441, 13, 551, 610, 198, 25686, 551, 2052, 14491, 430, 527, 3118, 304, 420, 4441, 13, 1115, 2115, 374, 32690, 323, 690, 387, 7108, 13, 551, 610, 198, 19680, 1037, 29377, 551, 35975, 315, 279, 2204, 5540, 3118, 304, 279, 6070, 13, 551, 6515, 11, 9219, 11, 2149, 11, 6219, 11, 7098, 11, 2170, 11, 1688, 15381, 84, 8324, 8324, 64, 11, 3513, 8324, 71, 8324, 72, 8324, 74, 11, 6971, 11541, 11541, 64, 11541, 67, 11541, 68, 11541, 69, 11, 5176, 11541, 76, 11541, 77, 11, 7489, 11541, 81, 11541, 82, 11541, 84, 11, 8153, 28365, 82, 28365, 88, 11, 20027, 11, 17812, 43225, 84, 28328, 11, 6251, 11, 3968, 28328, 76, 11, 23376, 38406, 64, 38406, 67, 11, 9688, 44639, 11, 1548, 44639, 69, 44639, 70, 44639, 78, 44639, 82, 38868, 11, 644, 38868, 81, 44754, 44754, 81, 11, 8921, 31214, 72, 31214, 81, 31214, 84, 31214, 85, 11, 26353, 28112, 67, 28112, 70, 28112, 77, 11, 26694, 28112, 83, 22812, 11, 16589, 22812, 65, 22812, 67, 11, 8989, 22812, 71, 22812, 72, 86176, 22812, 79, 75449, 75449, 70, 11, 29967, 28494, 11, 20908, 28494, 65, 28494, 67, 28494, 76, 28494, 78, 11, 3617, 28494, 83, 28494, 84, 24412, 64, 24412, 65, 11, 697, 24412, 69, 24412, 70, 24412, 71, 24412, 77, 24412, 84, 21861, 21861, 65, 11, 3407, 11, 1542, 21861, 70, 21861, 72, 11, 10902, 11, 21380, 21861, 81, 20594, 64, 20594, 65, 20594, 66, 11, 6777, 70980, 20594, 72, 20594, 75, 20594, 76, 20594, 82, 51581, 41054, 50640, 30341, 30341, 68, 30533, 30533, 65, 51932, 77, 51932, 81, 198, 19680, 1037, 23456, 91555, 551, 5742, 315, 2204, 5540, 304, 279, 6070, 439, 459, 7698, 13, 551, 528, 198, 19680, 1037, 29377, 71575, 3614, 551, 40502, 49892, 315, 2204, 5540, 304, 279, 6070, 13, 551, 2273, 198, 19680, 1037, 13, 32056, 64969, 16145, 41419, 551, 578, 11742, 15150, 369, 264, 6070, 439, 264, 925, 304, 264, 1376, 12146, 555, 279, 5446, 198, 14706, 13, 551, 610, 198, 19680, 1037, 13, 32056, 64969, 1311, 54478, 551, 578, 11293, 11742, 15150, 369, 264, 6070, 439, 264, 925, 449, 2449, 18210, 323, 198, 11924, 11742, 21801, 5219, 13, 578, 21801, 1396, 28832, 387, 40542, 422, 433, 374, 220, 16, 13, 551, 610, 198, 19680, 1037, 13, 32056, 64969, 1552, 484, 551, 578, 11742, 15150, 369, 264, 6070, 304, 8270, 1376, 449, 2449, 18210, 8272, 555, 198, 11924, 11742, 21801, 5219, 13, 578, 21801, 1396, 28832, 387, 40542, 422, 433, 374, 220, 16, 13, 551, 610, 198, 19680, 1037, 13, 32056, 64969, 12277, 9956, 551, 578, 22939, 15150, 374, 279, 11742, 64969, 1311, 54478, 11, 719, 1405, 279, 5540, 527, 198, 65937, 1176, 11713, 555, 872, 11742, 21801, 1396, 11, 323, 1243, 11, 304, 2015, 2163, 311, 198, 1315, 11, 12860, 555, 22939, 18210, 362, 11, 426, 11, 356, 11, 61453, 1901, 11, 362, 64, 11, 14659, 11, 61453, 65808, 11, 3765, 11, 426, 65, 11, 2564, 323, 198, 708, 389, 13, 551, 610, 198, 19680, 1037, 1276, 19862, 292, 60799, 551, 1556, 7698, 38938, 279, 1396, 315, 39445, 15696, 304, 279, 6070, 11, 13890, 198, 998, 279, 1396, 315, 2536, 38029, 10925, 304, 13167, 9962, 13, 551, 528, 198, 19680, 1037, 53428, 3695, 551, 1556, 7698, 38938, 279, 3160, 315, 279, 95481, 25521, 38319, 3424, 13, 551, 528, 198, 19680, 1037, 68436, 15314, 551, 362, 1160, 315, 9246, 430, 5292, 902, 3361, 4519, 527, 1511, 555, 279, 6070, 382, 12, 19823, 25, 1115, 5292, 28832, 387, 3118, 422, 904, 832, 4441, 304, 279, 9606, 1160, 706, 264, 198, 32056, 56852, 1160, 430, 374, 5129, 1109, 220, 16, 2449, 627, 12, 9987, 38319, 25, 1115, 5292, 28832, 387, 3118, 422, 520, 3325, 832, 3777, 315, 279, 198, 11707, 30321, 25521, 38319, 1160, 315, 11725, 706, 907, 854, 627, 12, 62407, 25, 1115, 5292, 28832, 387, 3118, 422, 279, 62407, 1160, 374, 3118, 13, 551, 62407, 11, 4338, 1382, 11, 16476, 38319, 198, 2879, 57635, 78940, 62, 37435, 1292, 551, 578, 15337, 836, 315, 279, 18641, 3857, 13, 551, 610, 198, 2879, 57635, 78940, 851, 551, 578, 7419, 887, 315, 279, 18641, 3857, 13, 551, 610, 198, 2879, 57635, 84302, 33971, 398, 551, 1442, 279, 18641, 3857, 374, 6089, 1511, 439, 2385, 3857, 13, 551, 1845, 198, 4177, 93802, 6676, 26508, 551, 578, 2539, 2576, 1093, 5905, 315, 279, 279, 2218, 13, 551, 610, 198, 4177, 93802, 6676, 9255, 851, 551, 578, 887, 315, 279, 4441, 8649, 279, 2218, 13, 551, 610, 198, 4177, 93802, 6676, 11273, 1213, 551, 578, 1925, 1213, 315, 279, 4441, 8649, 279, 2218, 13, 551, 610, 198, 4177, 93802, 6676, 22433, 851, 551, 578, 887, 315, 279, 8298, 8649, 279, 2218, 13, 551, 610, 198, 4177, 93802, 6676, 1292, 551, 578, 836, 315, 279, 2218, 12472, 14, 2879, 13, 551, 610, 198, 4177, 93802, 6676, 2703, 551, 578, 1853, 315, 279, 2218, 12472, 14, 2879, 304, 1202, 18624, 13, 551, 610, 198, 4177, 93802, 15040, 1292, 551, 578, 836, 315, 279, 2592, 320, 726, 8, 12472, 14, 2879, 304, 1202, 18624, 13, 551, 610, 198, 4177, 93802, 15040, 2703, 551, 578, 1853, 315, 279, 2592, 320, 726, 8, 12472, 14, 2879, 304, 1202, 18624, 13, 551, 610, 198, 4177, 93802, 15040, 33197, 551, 362, 5905, 311, 279, 12472, 7419, 430, 19170, 279, 5905, 551, 610, 198, 1874, 54446, 1385, 1801, 551, 578, 2539, 13110, 369, 420, 12472, 430, 5727, 279, 1853, 304, 279, 11036, 3694, 17801, 836, 13, 551, 610, 198, 1874, 54446, 1385, 78940, 551, 362, 5905, 311, 279, 12472, 7419, 13, 551, 610, 198, 1874, 54446, 1385, 3960, 43973, 551, 8092, 315, 279, 907, 2949, 279, 18624, 13, 551, 610, 198, 1874, 54446, 1385, 29891, 3220, 551, 578, 907, 24784, 439, 459, 19844, 2777, 2115, 13, 551, 1845, 198, 1874, 54446, 1385, 9720, 3220, 551, 578, 907, 24784, 439, 459, 19844, 1495, 323, 16570, 2115, 13, 551, 610, 198, 1874, 54446, 1385, 9720, 3220, 75011, 551, 578, 907, 24784, 439, 459, 19844, 1495, 323, 16570, 2115, 13, 551, 610, 198, 1874, 54446, 1385, 6537, 3220, 551, 578, 907, 24784, 439, 459, 19844, 1317, 1396, 2115, 13, 551, 528, 198, 1874, 54446, 1385, 16304, 3220, 551, 578, 907, 24784, 439, 459, 19844, 2033, 1396, 2115, 13, 551, 2273, 198, 1874, 54446, 1385, 20296, 3220, 551, 578, 907, 24784, 439, 459, 19844, 2457, 2115, 13, 551, 9859, 329, 41748, 467, 831, 2245, 1857, 920, 28762, 198, 8234, 24585, 24585, 851, 551, 362, 8521, 3160, 11, 5016, 3769, 13110, 304, 279, 1376, 315, 264, 5286, 198, 37439, 13, 551, 610, 198, 8234, 24585, 24585, 1292, 551, 49203, 1285, 5144, 369, 420, 264, 3769, 422, 904, 649, 387, 12893, 13, 551, 610, 198, 8234, 24585, 73318, 4269, 1857, 551, 73800, 538, 11075, 505, 279, 25524, 6070, 13, 551, 220, 16, 35, 11, 17, 35, 11, 22612, 8568, 22537, 13387, 55269, 611, 10879, 11, 1962, 15590, 10900, 10730, 11, 359, 10547, 198, 8234, 24585, 77143, 2786, 551, 29023, 2786, 315, 279, 1887, 13, 1789, 19670, 4633, 6067, 420, 374, 198, 28172, 7167, 26126, 555, 1701, 279, 45982, 62987, 287, 12384, 512, 2485, 1129, 48886, 2726, 14, 605, 13, 5120, 18, 14, 67171, 37284, 43, 7211, 13, 8899, 13, 7461, 4645, 382, 91, 5273, 765, 7817, 9432, 91, 81922, 765, 14730, 21622, 9432, 91, 74011, 15, 35, 6, 63, 765, 2876, 8599, 48582, 9432, 91, 74011, 16, 35, 6, 63, 765, 26572, 2740, 8599, 304, 832, 13167, 9432, 91, 74011, 17, 35, 6, 63, 765, 26572, 2740, 8599, 304, 1403, 15696, 9432, 91, 74011, 18, 35, 6, 63, 765, 26572, 2740, 8599, 304, 2380, 15696, 765, 551, 220, 15, 35, 11, 16, 35, 11, 17, 35, 11, 18, 35, 198, 8234, 24585, 13542, 287, 7258, 551, 4497, 4839, 24790, 369, 420, 1887, 11, 602, 1770, 13, 279, 955, 315, 330, 24177, 198, 4677, 1, 433, 11105, 382, 91, 5273, 765, 7817, 9432, 91, 81922, 765, 14730, 21622, 9432, 91, 74011, 40846, 6, 63, 765, 29696, 5918, 505, 264, 5089, 2849, 430, 44694, 48582, 304, 1403, 18445, 323, 520, 3325, 11157, 11, 719, 539, 72600, 304, 264, 4948, 5216, 13, 9432, 91, 74011, 17, 35, 3769, 6, 63, 765, 29696, 5918, 505, 264, 5089, 2849, 430, 44694, 48582, 304, 1403, 18445, 323, 1193, 3131, 304, 264, 4948, 5216, 13, 9432, 91, 74011, 76, 55269, 6, 63, 765, 386, 55269, 4613, 304, 279, 5457, 19677, 45982, 9432, 91, 74011, 1677, 26429, 6, 63, 765, 3206, 26429, 4613, 304, 279, 5457, 19677, 45982, 765, 551, 220, 17, 35, 3769, 13387, 55269, 11, 1677, 26429, 10900, 10730, 198, 8234, 24585, 64361, 1857, 551, 55982, 3196, 389, 279, 16003, 6012, 13, 551, 610, 198, 8234, 24585, 40802, 801, 1857, 551, 55982, 3196, 389, 279, 11742, 15150, 13, 551, 610, 198, 8234, 24585, 29377, 551, 35975, 315, 279, 2204, 5540, 3118, 304, 279, 6070, 13, 551, 6515, 11, 9219, 11, 2149, 11, 6219, 11, 7098, 11, 2170, 11, 1688, 15381, 84, 8324, 8324, 64, 11, 3513, 8324, 71, 8324, 72, 8324, 74, 11, 6971, 11541, 11541, 64, 11541, 67, 11541, 68, 11541, 69, 11, 5176, 11541, 76, 11541, 77, 11, 7489, 11541, 81, 11541, 82, 11541, 84, 11, 8153, 28365, 82, 28365, 88, 11, 20027, 11, 17812, 43225, 84, 28328, 11, 6251, 11, 3968, 28328, 76, 11, 23376, 38406, 64, 38406, 67, 11, 9688, 44639, 11, 1548, 44639, 69, 44639, 70, 44639, 78, 44639, 82, 38868, 11, 644, 38868, 81, 44754, 44754, 81, 11, 8921, 31214, 72, 31214, 81, 31214, 84, 31214, 85, 11, 26353, 28112, 67, 28112, 70, 28112, 77, 11, 26694, 28112, 83, 22812, 11, 16589, 22812, 65, 22812, 67, 11, 8989, 22812, 71, 22812, 72, 86176, 22812, 79, 75449, 75449, 70, 11, 29967, 28494, 11, 20908, 28494, 65, 28494, 67, 28494, 76, 28494, 78, 11, 3617, 28494, 83, 28494, 84, 24412, 64, 24412, 65, 11, 697, 24412, 69, 24412, 70, 24412, 71, 24412, 77, 24412, 84, 21861, 21861, 65, 11, 3407, 11, 1542, 21861, 70, 21861, 72, 11, 10902, 11, 21380, 21861, 81, 20594, 64, 20594, 65, 20594, 66, 11, 6777, 70980, 20594, 72, 20594, 75, 20594, 76, 20594, 82, 51581, 41054, 50640, 30341, 30341, 68, 30533, 30533, 65, 51932, 77, 51932, 81, 198, 8234, 24585, 1276, 23646, 551, 5742, 315, 2204, 5540, 304, 279, 6070, 439, 459, 7698, 13, 551, 528, 198, 8234, 24585, 29377, 2769, 8500, 551, 935, 8649, 279, 11742, 5540, 304, 84398, 2015, 323, 198, 325, 50700, 555, 264, 3254, 37472, 13, 1115, 12472, 649, 387, 1511, 369, 198, 90222, 2449, 27573, 1405, 499, 1390, 311, 1505, 10925, 15175, 82, 198, 4291, 1193, 3738, 2728, 5540, 13, 551, 610, 198, 8234, 24585, 13, 32056, 64969, 16145, 41419, 551, 578, 11742, 15150, 369, 264, 6070, 439, 264, 925, 304, 264, 1376, 12146, 555, 279, 5446, 198, 14706, 13, 551, 610, 198, 8234, 24585, 13, 32056, 64969, 1311, 54478, 551, 63897, 2740, 10839, 11742, 15150, 449, 11293, 7698, 11742, 198, 782, 15750, 5219, 13, 578, 21801, 1396, 374, 40542, 422, 433, 374, 220, 16, 13, 551, 610, 198, 8234, 24585, 13, 32056, 64969, 1552, 484, 551, 578, 11742, 15150, 369, 264, 6070, 304, 8270, 1376, 449, 2449, 198, 68526, 8272, 555, 2536, 5621, 54478, 7698, 11742, 21801, 5219, 627, 791, 21801, 1396, 374, 40542, 422, 433, 374, 220, 16, 13, 551, 610, 198, 8234, 24585, 13, 32056, 64969, 5431, 455, 582, 551, 31922, 1405, 279, 5540, 527, 11713, 1701, 264, 16287, 1160, 63557, 198, 31039, 389, 43906, 606, 70, 44515, 439, 4613, 304, 279, 358, 3202, 1741, 308, 89947, 1598, 315, 198, 258, 61694, 30903, 320, 1049, 20, 570, 31911, 11293, 7698, 11742, 198, 782, 15750, 5219, 1405, 279, 21801, 1396, 374, 40542, 422, 433, 374, 198, 16, 13, 551, 610, 198, 8234, 24585, 13, 32056, 64969, 12277, 9956, 551, 31922, 449, 279, 5540, 11713, 555, 872, 11293, 7698, 11742, 198, 782, 15750, 1396, 11, 323, 279, 11742, 9606, 12860, 555, 198, 90553, 2740, 11713, 12197, 13, 578, 21801, 1396, 374, 40542, 422, 198, 275, 374, 220, 16, 13, 469, 1326, 13, 220, 473, 17, 46, 9221, 362, 17, 33, 323, 473, 17, 46, 17, 9221, 14469, 13, 578, 12197, 527, 198, 7788, 77, 505, 279, 30063, 28890, 430, 1253, 387, 11838, 555, 7859, 198, 1820, 1396, 315, 12197, 11, 384, 1326, 13, 362, 11, 426, 11, 61453, 1901, 11, 362, 64, 11, 3765, 323, 779, 389, 13, 1115, 198, 18881, 374, 304, 1584, 449, 279, 30293, 7086, 41134, 1829, 33941, 7419, 13, 551, 610, 198, 8234, 24585, 13, 32056, 64969, 1311, 54478, 766, 43056, 551, 63897, 2740, 10839, 11742, 15150, 449, 11293, 7698, 11742, 198, 782, 15750, 5219, 13, 578, 21801, 1396, 374, 40542, 422, 433, 374, 220, 16, 13, 551, 610, 198, 8234, 24585, 12613, 278, 3038, 3571, 12613, 551, 578, 7891, 315, 279, 2449, 11, 384, 1326, 13, 364, 47, 65, 4527, 551, 6515, 11, 9219, 11, 2149, 11, 6219, 11, 7098, 11, 2170, 11, 1688, 15381, 84, 8324, 8324, 64, 11, 3513, 8324, 71, 8324, 72, 8324, 74, 11, 6971, 11541, 11541, 64, 11541, 67, 11541, 68, 11541, 69, 11, 5176, 11541, 76, 11541, 77, 11, 7489, 11541, 81, 11541, 82, 11541, 84, 11, 8153, 28365, 82, 28365, 88, 11, 20027, 11, 17812, 43225, 84, 28328, 11, 6251, 11, 3968, 28328, 76, 11, 23376, 38406, 64, 38406, 67, 11, 9688, 44639, 11, 1548, 44639, 69, 44639, 70, 44639, 78, 44639, 82, 38868, 11, 644, 38868, 81, 44754, 44754, 81, 11, 8921, 31214, 72, 31214, 81, 31214, 84, 31214, 85, 11, 26353, 28112, 67, 28112, 70, 28112, 77, 11, 26694, 28112, 83, 22812, 11, 16589, 22812, 65, 22812, 67, 11, 8989, 22812, 71, 22812, 72, 86176, 22812, 79, 75449, 75449, 70, 11, 29967, 28494, 11, 20908, 28494, 65, 28494, 67, 28494, 76, 28494, 78, 11, 3617, 28494, 83, 28494, 84, 24412, 64, 24412, 65, 11, 697, 24412, 69, 24412, 70, 24412, 71, 24412, 77, 24412, 84, 21861, 21861, 65, 11, 3407, 11, 1542, 21861, 70, 21861, 72, 11, 10902, 11, 21380, 21861, 81, 20594, 64, 20594, 65, 20594, 66, 11, 6777, 70980, 20594, 72, 20594, 75, 20594, 76, 20594, 82, 51581, 41054, 50640, 30341, 68, 30533, 30533, 65, 51932, 77, 51932, 81, 198, 8234, 24585, 12613, 278, 3038, 3571, 69382, 60123, 551, 578, 25524, 19983, 315, 279, 2449, 304, 279, 1887, 433, 374, 13282, 2949, 627, 3976, 7419, 264, 6928, 907, 2753, 1109, 477, 6273, 311, 220, 16, 13, 551, 2273, 1227, 198, 8234, 24585, 12613, 278, 3038, 3571, 68471, 60123, 551, 578, 3148, 19983, 315, 279, 2449, 304, 279, 1887, 433, 374, 13282, 2949, 627, 3976, 7419, 264, 6928, 907, 2753, 1109, 477, 6273, 311, 220, 16, 13, 551, 2273, 1227, 198, 8234, 24585, 52001, 33342, 21610, 402, 2852, 918, 32891, 551, 35721, 369, 279, 3320, 402, 2852, 55372, 304, 59642, 45297, 13, 578, 1176, 43147, 6661, 198, 1748, 9803, 279, 26110, 3070, 323, 649, 387, 832, 315, 279, 2768, 25, 264, 320, 376, 292, 3817, 292, 705, 293, 198, 65618, 511, 3817, 292, 705, 297, 320, 2419, 269, 71, 2925, 292, 705, 259, 320, 73542, 4193, 25180, 705, 305, 320, 17757, 24346, 8, 477, 272, 320, 66, 42281, 570, 578, 198, 5686, 40582, 6661, 36611, 279, 2960, 12928, 323, 649, 387, 832, 315, 279, 2768, 25, 393, 198, 26022, 13968, 705, 328, 320, 1594, 2960, 1171, 705, 358, 320, 2664, 2960, 1171, 705, 432, 320, 81, 35940, 754, 71, 36620, 2960, 12928, 8, 477, 435, 198, 21013, 12580, 2960, 1171, 570, 551, 264, 47, 10317, 37, 10317, 40, 10317, 47, 20393, 47, 20393, 49, 13387, 47, 13387, 50, 50318, 37, 50318, 40, 50318, 47, 50318, 50, 14287, 40, 14287, 47, 198, 8234, 24585, 52001, 33342, 42664, 14272, 18155, 551, 4076, 315, 279, 26110, 1887, 13, 551, 41999, 11, 17757, 24346, 11, 1677, 511, 3817, 292, 11, 2419, 269, 71, 2925, 292, 14287, 295, 4193, 25180, 67554, 292, 3817, 292, 67554, 343, 25180, 198, 8234, 24585, 52001, 33342, 870, 543, 5617, 551, 578, 11166, 1396, 369, 420, 1887, 13, 551, 528, 843, 198, 8234, 24585, 52001, 33342, 870, 543, 21868, 551, 578, 11166, 7891, 369, 420, 1887, 13, 551, 610, 198, 8234, 24585, 52001, 33342, 24112, 6422, 551, 20185, 315, 279, 26110, 848, 79173, 1486, 1912, 304, 279, 32565, 1036, 5364, 19729, 75721, 45297, 13, 551, 610, 198, 8234, 24585, 52001, 33342, 36983, 6422, 5617, 551, 46080, 279, 7327, 9323, 315, 29016, 848, 1976, 88, 320, 40, 5576, 8, 1396, 315, 279, 220, 18, 35, 3634, 198, 4166, 315, 420, 1887, 13, 551, 528, 843, 198, 8234, 24585, 52001, 33342, 36983, 6422, 21868, 551, 578, 7327, 9323, 315, 29016, 848, 1976, 88, 320, 40, 5576, 8, 2875, 7891, 315, 279, 220, 18, 35, 198, 8920, 1912, 315, 420, 1887, 13, 551, 610, 198, 8234, 24585, 52001, 33342, 6131, 64969, 551, 578, 15150, 315, 279, 1760, 88167, 3769, 369, 420, 6070, 13, 551, 610, 198, 8234, 24585, 52001, 33342, 6131, 4404, 5072, 851, 551, 578, 13110, 315, 420, 6070, 304, 279, 20479, 9628, 83708, 315, 198, 5192, 14272, 848, 79173, 47728, 512, 1277, 1129, 2185, 5973, 5072, 2808, 2726, 14, 46754, 12, 2301, 66, 43473, 9199, 2628, 551, 610, 198, 8234, 24585, 52001, 33342, 68436, 1292, 551, 362, 4279, 836, 369, 420, 6070, 11, 384, 1326, 13, 282, 641, 11, 293, 641, 13, 551, 220, 19, 44650, 10264, 11, 1548, 355, 1565, 8568, 641, 8568, 302, 8568, 302, 20, 11, 566, 589, 7853, 10317, 455, 1269, 12260, 18986, 17514, 641, 17514, 302, 20393, 3181, 12, 1548, 355, 1565, 20393, 4777, 11, 716, 869, 4991, 635, 11, 21161, 12290, 16262, 332, 458, 10900, 6592, 41999, 25576, 5757, 89, 635, 23500, 2910, 2067, 11178, 198, 8234, 24585, 52001, 33342, 9720, 86056, 655, 4970, 50903, 367, 551, 55982, 315, 279, 3769, 4184, 311, 279, 35901, 15042, 198, 596, 376, 86056, 655, 4970, 4527, 551, 610, 198, 8234, 24585, 8947, 2508, 16315, 851, 551, 3011, 1853, 315, 420, 3857, 2949, 279, 2322, 467, 831, 430, 374, 1511, 439, 264, 5016, 198, 16288, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 2981, 551, 3959, 41419, 2440, 430, 36611, 420, 24693, 961, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13204, 551, 578, 1749, 1511, 369, 25607, 420, 1887, 13, 551, 5634, 307, 11, 9854, 11, 4406, 22828, 46061, 198, 8234, 24585, 8947, 2508, 13480, 551, 362, 2875, 4096, 922, 420, 961, 315, 279, 45982, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 24585, 851, 551, 362, 8521, 3160, 11, 5016, 3769, 13110, 304, 279, 1376, 315, 264, 5286, 198, 37439, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 24585, 1292, 551, 49203, 1285, 5144, 369, 420, 264, 3769, 422, 904, 649, 387, 12893, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 73318, 4269, 1857, 551, 73800, 538, 11075, 505, 279, 25524, 6070, 13, 551, 220, 16, 35, 11, 17, 35, 11, 3104, 27605, 1147, 11, 22612, 8568, 22537, 11, 4166, 13387, 55269, 13387, 55269, 611, 10879, 11, 1677, 26429, 11, 1962, 15590, 10900, 10730, 11, 359, 10547, 198, 8234, 24585, 8947, 2508, 77143, 2786, 551, 29023, 2786, 315, 279, 1887, 13, 1789, 19670, 4633, 6067, 420, 374, 198, 28172, 7167, 26126, 555, 1701, 279, 45982, 62987, 287, 12384, 512, 2485, 1129, 48886, 2726, 14, 605, 13, 5120, 18, 14, 67171, 37284, 43, 7211, 13, 8899, 13, 7461, 4645, 382, 91, 5273, 765, 7817, 9432, 91, 81922, 765, 14730, 21622, 9432, 91, 74011, 15, 35, 6, 63, 765, 2876, 8599, 48582, 9432, 91, 74011, 16, 35, 6, 63, 765, 26572, 2740, 8599, 304, 832, 13167, 9432, 91, 74011, 17, 35, 6, 63, 765, 26572, 2740, 8599, 304, 1403, 15696, 9432, 91, 74011, 18, 35, 6, 63, 765, 26572, 2740, 8599, 304, 2380, 15696, 765, 551, 220, 15, 35, 11, 16, 35, 11, 17, 35, 11, 18, 35, 198, 8234, 24585, 8947, 2508, 13542, 287, 7258, 551, 4497, 4839, 24790, 369, 420, 1887, 11, 602, 1770, 13, 279, 955, 315, 330, 24177, 198, 4677, 1, 433, 11105, 382, 91, 5273, 765, 7817, 9432, 91, 81922, 765, 14730, 21622, 9432, 91, 74011, 40846, 6, 63, 765, 29696, 5918, 505, 264, 5089, 2849, 430, 44694, 48582, 304, 1403, 18445, 323, 520, 3325, 11157, 11, 719, 539, 72600, 304, 264, 4948, 5216, 13, 9432, 91, 74011, 17, 35, 3769, 6, 63, 765, 29696, 5918, 505, 264, 5089, 2849, 430, 44694, 48582, 304, 1403, 18445, 323, 1193, 3131, 304, 264, 4948, 5216, 13, 9432, 91, 74011, 76, 55269, 6, 63, 765, 386, 55269, 4613, 304, 279, 5457, 19677, 45982, 9432, 91, 74011, 1677, 26429, 6, 63, 765, 3206, 26429, 4613, 304, 279, 5457, 19677, 45982, 765, 551, 220, 17, 35, 3769, 13387, 55269, 11, 1677, 26429, 10900, 10730, 198, 8234, 24585, 8947, 2508, 64361, 1857, 551, 55982, 3196, 389, 279, 16003, 6012, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 40802, 801, 1857, 551, 55982, 3196, 389, 279, 11742, 15150, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 29377, 551, 35975, 315, 279, 2204, 5540, 3118, 304, 279, 6070, 13, 551, 6515, 11, 9219, 11, 2149, 11, 6219, 11, 7098, 11, 2170, 11, 1688, 15381, 84, 8324, 8324, 64, 11, 3513, 8324, 71, 8324, 72, 8324, 74, 11, 6971, 11541, 11541, 64, 11541, 67, 11541, 68, 11541, 69, 11, 5176, 11541, 76, 11541, 77, 11, 7489, 11541, 81, 11541, 82, 11541, 84, 11, 8153, 28365, 82, 28365, 88, 11, 20027, 11, 17812, 43225, 84, 28328, 11, 6251, 11, 3968, 28328, 76, 11, 23376, 38406, 64, 38406, 67, 11, 9688, 44639, 11, 1548, 44639, 69, 44639, 70, 44639, 78, 44639, 82, 38868, 11, 644, 38868, 81, 44754, 44754, 81, 11, 8921, 31214, 72, 31214, 81, 31214, 84, 31214, 85, 11, 26353, 28112, 67, 28112, 70, 28112, 77, 11, 26694, 28112, 83, 22812, 11, 16589, 22812, 65, 22812, 67, 11, 8989, 22812, 71, 22812, 72, 86176, 22812, 79, 75449, 75449, 70, 11, 29967, 28494, 11, 20908, 28494, 65, 28494, 67, 28494, 76, 28494, 78, 11, 3617, 28494, 83, 28494, 84, 24412, 64, 24412, 65, 11, 697, 24412, 69, 24412, 70, 24412, 71, 24412, 77, 24412, 84, 21861, 21861, 65, 11, 3407, 11, 1542, 21861, 70, 21861, 72, 11, 10902, 11, 21380, 21861, 81, 20594, 64, 20594, 65, 20594, 66, 11, 6777, 70980, 20594, 72, 20594, 75, 20594, 76, 20594, 82, 51581, 41054, 50640, 30341, 30341, 68, 30533, 30533, 65, 51932, 77, 51932, 81, 198, 8234, 24585, 8947, 2508, 1276, 23646, 551, 5742, 315, 2204, 5540, 304, 279, 6070, 439, 459, 7698, 13, 551, 528, 198, 8234, 24585, 8947, 2508, 29377, 2769, 8500, 551, 935, 8649, 279, 11742, 5540, 304, 84398, 2015, 323, 198, 325, 50700, 555, 264, 3254, 37472, 13, 1115, 12472, 649, 387, 1511, 369, 198, 90222, 2449, 27573, 1405, 499, 1390, 311, 1505, 10925, 15175, 82, 198, 4291, 1193, 3738, 2728, 5540, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13, 32056, 64969, 16145, 41419, 551, 578, 11742, 15150, 369, 264, 6070, 439, 264, 925, 304, 264, 1376, 12146, 555, 279, 5446, 198, 14706, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13, 32056, 64969, 1311, 54478, 551, 63897, 2740, 10839, 11742, 15150, 449, 11293, 7698, 11742, 198, 782, 15750, 5219, 13, 578, 21801, 1396, 374, 40542, 422, 433, 374, 220, 16, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13, 32056, 64969, 1552, 484, 551, 578, 11742, 15150, 369, 264, 6070, 304, 8270, 1376, 449, 2449, 198, 68526, 8272, 555, 2536, 5621, 54478, 7698, 11742, 21801, 5219, 627, 791, 21801, 1396, 374, 40542, 422, 433, 374, 220, 16, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13, 32056, 64969, 5431, 455, 582, 551, 31922, 1405, 279, 5540, 527, 11713, 1701, 264, 16287, 1160, 63557, 198, 31039, 389, 43906, 606, 70, 44515, 439, 4613, 304, 279, 358, 3202, 1741, 308, 89947, 1598, 315, 198, 258, 61694, 30903, 320, 1049, 20, 570, 31911, 11293, 7698, 11742, 198, 782, 15750, 5219, 1405, 279, 21801, 1396, 374, 40542, 422, 433, 374, 198, 16, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13, 32056, 64969, 12277, 9956, 551, 31922, 449, 279, 5540, 11713, 555, 872, 11293, 7698, 11742, 198, 782, 15750, 1396, 11, 323, 279, 11742, 9606, 12860, 555, 198, 90553, 2740, 11713, 12197, 13, 578, 21801, 1396, 374, 40542, 422, 198, 275, 374, 220, 16, 13, 469, 1326, 13, 220, 473, 17, 46, 9221, 362, 17, 33, 323, 473, 17, 46, 17, 9221, 14469, 13, 578, 12197, 527, 198, 7788, 77, 505, 279, 30063, 28890, 430, 1253, 387, 11838, 555, 7859, 198, 1820, 1396, 315, 12197, 11, 384, 1326, 13, 362, 11, 426, 11, 61453, 1901, 11, 362, 64, 11, 3765, 323, 779, 389, 13, 1115, 198, 18881, 374, 304, 1584, 449, 279, 30293, 7086, 41134, 1829, 33941, 7419, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13, 32056, 64969, 1311, 54478, 766, 43056, 551, 63897, 2740, 10839, 11742, 15150, 449, 11293, 7698, 11742, 198, 782, 15750, 5219, 13, 578, 21801, 1396, 374, 40542, 422, 433, 374, 220, 16, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 8829, 18155, 551, 17650, 311, 279, 2748, 1887, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 17990, 18155, 82, 551, 45178, 311, 279, 1716, 6067, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 69382, 60123, 551, 578, 25524, 19983, 315, 420, 1887, 304, 279, 2539, 6070, 433, 374, 13282, 304, 627, 3976, 7419, 264, 6928, 907, 2753, 1109, 477, 6273, 311, 220, 16, 13, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 68471, 60123, 551, 578, 3148, 19983, 315, 420, 1887, 304, 279, 2539, 6070, 433, 374, 13282, 2949, 627, 3976, 7419, 264, 6928, 907, 2753, 1109, 477, 6273, 311, 220, 16, 13, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 1276, 68855, 551, 578, 2860, 1396, 315, 9606, 320, 66650, 11, 19252, 8, 304, 279, 1887, 13, 551, 528, 198, 8234, 24585, 8947, 2508, 516, 20218, 1857, 551, 578, 1948, 5848, 13340, 315, 279, 9501, 14580, 4857, 8316, 320, 82, 10551, 4390, 791, 6211, 315, 1455, 9501, 8057, 355, 527, 1664, 4613, 323, 1376, 279, 8197, 315, 1455, 198, 5526, 11672, 49400, 13, 578, 1455, 4279, 3187, 374, 279, 40403, 39690, 11, 21236, 4908, 296, 37181, 345, 98382, 37181, 11, 577, 822, 2287, 551, 610, 198, 8234, 24585, 8947, 2508, 929, 33481, 669, 11980, 821, 37144, 551, 578, 7928, 56429, 23899, 374, 279, 7928, 26436, 430, 649, 387, 22306, 304, 264, 94761, 198, 9125, 2085, 50917, 449, 904, 315, 279, 33299, 304, 279, 1887, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 24585, 8947, 2508, 558, 461, 15106, 287, 821, 37144, 551, 578, 97551, 33994, 23899, 374, 279, 7928, 26436, 430, 649, 26662, 198, 13798, 817, 1555, 279, 94761, 4009, 2085, 50917, 449, 904, 315, 279, 198, 66650, 304, 279, 1887, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 24585, 8947, 2508, 929, 33481, 1265, 10391, 88073, 8584, 647, 9082, 88073, 2703, 551, 578, 7928, 5343, 26436, 3235, 1949, 26436, 1853, 374, 198, 27995, 478, 26436, 430, 649, 387, 22306, 304, 279, 97551, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 24585, 8947, 2508, 22757, 1260, 32130, 15380, 551, 578, 7479, 3158, 15987, 374, 279, 3158, 430, 374, 15987, 311, 8810, 35715, 198, 258, 264, 94761, 1887, 13, 1102, 374, 8965, 6646, 311, 387, 279, 4553, 7479, 3158, 198, 9210, 649, 387, 9575, 19212, 555, 264, 22477, 315, 264, 3230, 10801, 13, 763, 98811, 1846, 11, 555, 1670, 584, 1005, 198, 64, 22477, 430, 706, 264, 10801, 315, 220, 16, 13, 4218, 7568, 35155, 11, 902, 8024, 311, 279, 198, 1030, 838, 306, 12164, 72, 315, 47503, 6962, 13, 1789, 39538, 43943, 1887, 11, 264, 12164, 72, 315, 198, 16, 13, 19, 7568, 35155, 649, 387, 1511, 11, 902, 8024, 311, 279, 1080, 838, 306, 12164, 72, 198, 1073, 3090, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 17, 198, 8234, 24585, 8947, 2508, 22757, 1260, 28039, 551, 20880, 315, 653, 41456, 3634, 304, 264, 1887, 430, 649, 387, 15987, 311, 198, 31277, 35715, 11, 1093, 2092, 48764, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 18, 198, 8234, 24585, 8947, 2508, 13, 1019, 60123, 551, 51848, 315, 279, 279, 8286, 315, 279, 653, 41456, 3634, 304, 279, 1887, 198, 998, 279, 8286, 315, 279, 4553, 1887, 13, 1102, 374, 264, 1695, 13594, 311, 198, 67, 25296, 1268, 94761, 264, 1887, 374, 13, 53485, 94761, 6067, 198, 61917, 617, 264, 8294, 742, 19983, 11, 37318, 17251, 477, 29050, 198, 46654, 617, 9333, 742, 65995, 13, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 1276, 19848, 551, 5742, 315, 12006, 3118, 304, 279, 94761, 1887, 11, 902, 8024, 311, 279, 1396, 315, 198, 79, 4692, 2949, 279, 1887, 13, 551, 528, 198, 8234, 24585, 8947, 2508, 516, 20218, 31196, 2617, 5617, 551, 578, 1396, 315, 21583, 1486, 304, 279, 14580, 4857, 8316, 1161, 20218, 705, 902, 34310, 311, 198, 1820, 311, 279, 1396, 315, 1486, 315, 9070, 304, 279, 14580, 4857, 5089, 13, 4427, 4279, 198, 23827, 2508, 2997, 198, 16, 551, 78316, 25847, 198, 17, 551, 22011, 25847, 198, 18, 551, 490, 275, 25847, 198, 19, 551, 259, 17820, 266, 25847, 198, 20, 551, 20801, 266, 25847, 551, 528, 198, 8234, 24585, 8947, 2508, 12613, 278, 3038, 3571, 12613, 551, 578, 7891, 315, 279, 2449, 11, 384, 1326, 13, 364, 47, 65, 4527, 551, 6515, 11, 9219, 11, 2149, 11, 6219, 11, 7098, 11, 2170, 11, 1688, 15381, 84, 8324, 8324, 64, 11, 3513, 8324, 71, 8324, 72, 8324, 74, 11, 6971, 11541, 11541, 64, 11541, 67, 11541, 68, 11541, 69, 11, 5176, 11541, 76, 11541, 77, 11, 7489, 11541, 81, 11541, 82, 11541, 84, 11, 8153, 28365, 82, 28365, 88, 11, 20027, 11, 17812, 43225, 84, 28328, 11, 6251, 11, 3968, 28328, 76, 11, 23376, 38406, 64, 38406, 67, 11, 9688, 44639, 11, 1548, 44639, 69, 44639, 70, 44639, 78, 44639, 82, 38868, 11, 644, 38868, 81, 44754, 44754, 81, 11, 8921, 31214, 72, 31214, 81, 31214, 84, 31214, 85, 11, 26353, 28112, 67, 28112, 70, 28112, 77, 11, 26694, 28112, 83, 22812, 11, 16589, 22812, 65, 22812, 67, 11, 8989, 22812, 71, 22812, 72, 86176, 22812, 79, 75449, 75449, 70, 11, 29967, 28494, 11, 20908, 28494, 65, 28494, 67, 28494, 76, 28494, 78, 11, 3617, 28494, 83, 28494, 84, 24412, 64, 24412, 65, 11, 697, 24412, 69, 24412, 70, 24412, 71, 24412, 77, 24412, 84, 21861, 21861, 65, 11, 3407, 11, 1542, 21861, 70, 21861, 72, 11, 10902, 11, 21380, 21861, 81, 20594, 64, 20594, 65, 20594, 66, 11, 6777, 70980, 20594, 72, 20594, 75, 20594, 76, 20594, 82, 51581, 41054, 50640, 30341, 68, 30533, 30533, 65, 51932, 77, 51932, 81, 198, 8234, 24585, 8947, 2508, 12613, 278, 3038, 3571, 69382, 60123, 551, 578, 25524, 19983, 315, 279, 2449, 304, 279, 1887, 433, 374, 13282, 2949, 627, 3976, 7419, 264, 6928, 907, 2753, 1109, 477, 6273, 311, 220, 16, 13, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 12613, 278, 3038, 3571, 68471, 60123, 551, 578, 3148, 19983, 315, 279, 2449, 304, 279, 1887, 433, 374, 13282, 2949, 627, 3976, 7419, 264, 6928, 907, 2753, 1109, 477, 6273, 311, 220, 16, 13, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 16315, 48084, 4957, 551, 578, 955, 315, 12976, 1990, 264, 1887, 323, 433, 596, 2748, 382, 91, 5273, 765, 7817, 9432, 91, 81922, 765, 14730, 21622, 9432, 91, 74011, 2959, 6, 63, 765, 744, 14393, 279, 4553, 6070, 11, 706, 912, 2748, 1887, 13, 9432, 91, 74011, 2008, 9125, 6, 63, 765, 362, 3254, 20406, 5502, 28532, 505, 279, 2748, 1887, 13, 9432, 91, 74011, 4166, 6, 63, 765, 362, 20406, 1912, 315, 53885, 82, 2949, 279, 2748, 11, 384, 1326, 13, 264, 1912, 315, 35715, 304, 14306, 13, 9432, 91, 74011, 74548, 17061, 6, 63, 765, 578, 21349, 2849, 505, 902, 279, 2748, 374, 20968, 505, 13, 9432, 91, 74011, 444, 44322, 17061, 6, 63, 765, 578, 28694, 2849, 505, 902, 279, 2748, 374, 20968, 505, 13, 765, 551, 21349, 17061, 11, 4166, 11, 74548, 17061, 11, 2959, 11, 2008, 9125, 198, 8234, 24585, 8947, 2508, 25606, 5973, 551, 17736, 315, 279, 1176, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 24585, 8947, 2508, 25606, 960, 551, 17736, 315, 279, 2132, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 24585, 8947, 2508, 25606, 522, 551, 17736, 315, 279, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 24585, 8947, 2508, 25606, 24879, 551, 37337, 1990, 2132, 323, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 24585, 8947, 2508, 25606, 63029, 551, 37337, 1990, 1176, 323, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 24585, 8947, 2508, 25606, 74401, 551, 37337, 1990, 1176, 323, 2132, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 24585, 8947, 2508, 25606, 41584, 551, 20880, 315, 279, 2849, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 18, 198, 8234, 24585, 8947, 2508, 25606, 69382, 54449, 551, 31416, 17915, 315, 279, 3769, 320, 66650, 5574, 4765, 50522, 551, 2273, 1227, 551, 220, 16, 611, 23819, 3146, 220, 18, 198, 8234, 24585, 8947, 2508, 25606, 68471, 54449, 551, 9346, 17915, 315, 279, 3769, 13, 551, 2273, 1227, 551, 15395, 13255, 611, 23819, 3146, 220, 18, 198, 8234, 24585, 8947, 2508, 52001, 33342, 21610, 402, 2852, 918, 32891, 551, 35721, 369, 279, 3320, 402, 2852, 55372, 304, 59642, 45297, 13, 578, 1176, 43147, 6661, 198, 1748, 9803, 279, 26110, 3070, 323, 649, 387, 832, 315, 279, 2768, 25, 264, 320, 376, 292, 3817, 292, 705, 293, 198, 65618, 511, 3817, 292, 705, 297, 320, 2419, 269, 71, 2925, 292, 705, 259, 320, 73542, 4193, 25180, 705, 305, 320, 17757, 24346, 8, 477, 272, 320, 66, 42281, 570, 578, 198, 5686, 40582, 6661, 36611, 279, 2960, 12928, 323, 649, 387, 832, 315, 279, 2768, 25, 393, 198, 26022, 13968, 705, 328, 320, 1594, 2960, 1171, 705, 358, 320, 2664, 2960, 1171, 705, 432, 320, 81, 35940, 754, 71, 36620, 2960, 12928, 8, 477, 435, 198, 21013, 12580, 2960, 1171, 570, 551, 264, 47, 10317, 37, 10317, 40, 10317, 47, 20393, 47, 20393, 49, 13387, 47, 13387, 50, 50318, 37, 50318, 40, 50318, 47, 50318, 50, 14287, 40, 14287, 47, 198, 8234, 24585, 8947, 2508, 52001, 33342, 42664, 14272, 18155, 551, 4076, 315, 279, 26110, 1887, 13, 551, 41999, 11, 17757, 24346, 11, 1677, 511, 3817, 292, 11, 2419, 269, 71, 2925, 292, 14287, 295, 4193, 25180, 67554, 292, 3817, 292, 67554, 343, 25180, 198, 8234, 24585, 8947, 2508, 52001, 33342, 870, 543, 5617, 551, 578, 11166, 1396, 369, 420, 1887, 13, 551, 528, 843, 198, 8234, 24585, 8947, 2508, 52001, 33342, 870, 543, 21868, 551, 578, 11166, 7891, 369, 420, 1887, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 52001, 33342, 24112, 6422, 551, 20185, 315, 279, 26110, 848, 79173, 1486, 1912, 304, 279, 32565, 1036, 5364, 19729, 75721, 45297, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 52001, 33342, 36983, 6422, 5617, 551, 46080, 279, 7327, 9323, 315, 29016, 848, 1976, 88, 320, 40, 5576, 8, 1396, 315, 279, 220, 18, 35, 3634, 198, 4166, 315, 420, 1887, 13, 551, 528, 843, 198, 8234, 24585, 8947, 2508, 52001, 33342, 36983, 6422, 21868, 551, 578, 7327, 9323, 315, 29016, 848, 1976, 88, 320, 40, 5576, 8, 2875, 7891, 315, 279, 220, 18, 35, 198, 8920, 1912, 315, 420, 1887, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 52001, 33342, 9720, 86056, 655, 4970, 50903, 367, 551, 55982, 315, 279, 3769, 4184, 311, 279, 35901, 15042, 198, 596, 376, 86056, 655, 4970, 4527, 551, 610, 198, 8234, 24585, 8947, 2508, 52001, 33342, 6131, 6234, 4404, 5072, 551, 20479, 9628, 2440, 315, 279, 25018, 320, 4151, 198, 1277, 1129, 64, 5072, 2808, 2726, 11547, 81, 14272, 6116, 14, 46754, 3644, 2628, 8, 11054, 389, 279, 8197, 198, 1073, 279, 3634, 6422, 323, 30510, 1704, 88, 377, 1885, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 52001, 33342, 6131, 1292, 551, 362, 4279, 836, 369, 420, 1760, 88167, 6070, 11, 384, 1326, 13, 282, 641, 11, 293, 641, 13, 551, 220, 19, 44650, 10264, 11, 1548, 355, 1565, 8568, 641, 8568, 302, 8568, 302, 20, 11, 566, 589, 7853, 10317, 455, 1269, 12260, 18986, 17514, 641, 17514, 302, 20393, 3181, 12, 1548, 355, 1565, 20393, 4777, 11, 716, 869, 4991, 635, 11, 21161, 12290, 16262, 332, 458, 10900, 6592, 41999, 25576, 5757, 89, 635, 23500, 2910, 2067, 11178, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 1276, 54446, 372, 5617, 551, 37409, 31228, 1396, 400, 77, 13244, 551, 528, 843, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 1190, 54446, 372, 5617, 551, 10884, 20932, 24151, 31228, 1396, 400, 73, 284, 765, 75, 1355, 91, 2564, 326, 68897, 3, 627, 334, 45, 20726, 449, 3831, 445, 6354, 59086, 477, 2536, 1824, 980, 90021, 12903, 6067, 13, 334, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 97251, 54446, 372, 5617, 551, 15757, 56307, 278, 22343, 315, 279, 400, 73, 3, 4724, 627, 334, 45, 20726, 449, 3831, 445, 6354, 59086, 477, 2536, 1824, 980, 90021, 12903, 6067, 13, 334, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 2337, 7642, 2826, 551, 578, 1396, 315, 5415, 1234, 279, 21973, 17413, 9435, 311, 279, 65691, 743, 627, 2028, 52873, 22204, 430, 682, 27605, 1147, 304, 279, 743, 527, 5367, 13523, 13, 551, 528, 843, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 1276, 2253, 772, 26692, 46747, 1639, 551, 578, 17130, 6900, 12304, 369, 61966, 10096, 627, 90383, 430, 3567, 6629, 505, 220, 15, 477, 220, 16, 11383, 33164, 4448, 587, 18528, 627, 36687, 279, 1595, 9613, 63, 1614, 374, 12146, 11, 279, 1646, 34310, 311, 264, 3254, 17130, 1694, 12304, 304, 7106, 8903, 13, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 13, 59362, 551, 578, 2860, 1396, 315, 57678, 2949, 279, 1614, 320, 300, 4613, 555, 5367, 804, 2826, 340, 10924, 13548, 279, 1646, 6900, 13, 551, 2273, 1227, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 929, 54446, 372, 21868, 551, 15757, 56307, 278, 400, 75, 3, 304, 36396, 1376, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 58509, 54446, 372, 21868, 551, 63755, 31228, 1396, 400, 76, 918, 3, 304, 36396, 1376, 13, 551, 610, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 40215, 54446, 372, 21868, 551, 41785, 31228, 1396, 400, 76, 646, 3, 304, 36396, 1376, 13, 551, 610, 198, 8234, 13204, 13204, 851, 551, 35721, 369, 279, 1511, 1749, 13, 8442, 2561, 369, 264, 27084, 315, 10925, 198, 2000, 902, 279, 38152, 706, 1027, 11054, 449, 16437, 13, 551, 610, 198, 8234, 13204, 13204, 1292, 551, 7874, 836, 369, 279, 1511, 1749, 13, 551, 426, 937, 11, 5501, 39, 1286, 28365, 4082, 11, 8561, 4082, 43225, 98952, 38406, 54, 22812, 18953, 20594, 33, 30341, 5119, 30341, 37790, 16539, 11865, 11, 31548, 372, 27366, 11, 359, 10547, 198, 8234, 13204, 73874, 1292, 551, 256, 551, 610, 198, 8234, 13204, 29716, 2987, 46182, 1292, 551, 578, 836, 315, 279, 1511, 2068, 13, 551, 610, 198, 8234, 13204, 29716, 2987, 46182, 9625, 551, 578, 2373, 315, 279, 1511, 2068, 13, 551, 610, 198, 8234, 13204, 29716, 2987, 46182, 9625, 24369, 551, 578, 2373, 4877, 1511, 34167, 555, 279, 4500, 2128, 13, 551, 610, 198, 8234, 13204, 29716, 2987, 962, 728, 960, 10949, 2667, 1857, 551, 578, 1511, 8197, 743, 5865, 13, 551, 320, 43, 8, 2599, 54, 10, 385, 11, 6885, 1892, 5493, 11, 1962, 15590, 11, 20173, 362, 29967, 11, 19563, 17301, 11, 1725, 2910, 5865, 11, 8110, 29047, 5950, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 962, 728, 4976, 2253, 70329, 530, 35320, 551, 2650, 279, 6332, 57678, 527, 7633, 13, 551, 682, 17130, 20268, 6332, 11, 9054, 682, 17130, 7385, 40512, 89490, 2335, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 962, 728, 91571, 623, 7569, 1534, 551, 13440, 279, 22702, 374, 12903, 2320, 7569, 1534, 13, 551, 1845, 198, 8234, 13204, 29716, 2987, 962, 728, 7840, 69, 22616, 35895, 16326, 551, 46080, 279, 12447, 369, 279, 2860, 4907, 2349, 1990, 1403, 17876, 198, 726, 69604, 18620, 2115, 320, 3624, 37, 8, 26771, 13, 578, 7683, 37, 374, 6646, 97875, 994, 279, 198, 5143, 65487, 2349, 1990, 1403, 7683, 37, 25492, 374, 3770, 279, 12447, 320, 54228, 304, 198, 76128, 449, 1023, 13186, 570, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 13204, 29716, 2987, 962, 728, 3211, 276, 36445, 2832, 64, 1147, 9209, 551, 578, 1511, 5355, 2761, 29614, 1147, 1749, 13, 551, 610, 198, 8234, 13204, 29716, 2987, 962, 728, 1351, 5641, 1968, 9209, 551, 3959, 56236, 279, 59425, 4633, 6514, 1511, 369, 279, 22702, 315, 279, 1620, 4907, 198, 438, 5552, 33776, 13, 1442, 36257, 477, 4384, 11, 912, 59425, 4633, 6514, 374, 9435, 13, 551, 35850, 42752, 1311, 5641, 344, 4633, 11, 36442, 1311, 5641, 344, 4633, 11, 36442, 1311, 5641, 344, 4633, 52467, 12582, 52577, 198, 8234, 13204, 29716, 2987, 962, 728, 23368, 13992, 34262, 551, 46080, 279, 3169, 315, 1554, 13992, 389, 279, 17130, 30747, 1511, 311, 11294, 279, 198, 10816, 4907, 320, 4151, 4907, 9082, 696, 4180, 2819, 527, 1473, 91, 4487, 13992, 3169, 1835, 765, 7817, 5291, 36821, 91, 14730, 23573, 765, 20308, 12, 36821, 91, 54405, 3274, 41017, 338, 765, 2360, 1554, 13992, 374, 9435, 310, 36821, 91, 54405, 6885, 15950, 41017, 1078, 765, 49668, 1554, 13992, 338, 36821, 91, 54405, 809, 8318, 41017, 338, 765, 99362, 72, 1554, 13992, 504, 36821, 91, 54405, 5730, 89, 2850, 8437, 8363, 70824, 41017, 262, 765, 2947, 89, 2850, 20198, 8363, 70824, 1554, 13992, 996, 36821, 91, 54405, 69991, 69, 36648, 2320, 710, 783, 41017, 257, 765, 57175, 69, 36648, 9483, 710, 783, 1554, 13992, 286, 36821, 91, 54405, 73542, 33607, 291, 969, 41017, 310, 765, 5783, 45786, 315, 1614, 49969, 323, 60966, 198, 7, 625, 4692, 1554, 13992, 8086, 8, 765, 551, 610, 198, 8234, 13204, 29716, 2987, 962, 728, 23368, 13992, 8086, 551, 46080, 279, 2430, 315, 279, 1554, 13992, 304, 4907, 369, 279, 17130, 30747, 1511, 311, 198, 36697, 279, 1949, 4907, 320, 4151, 4907, 9082, 3677, 9, 28892, 54486, 2876, 682, 5528, 5300, 304, 1554, 13992, 34262, 5829, 420, 907, 13, 551, 2273, 1227, 198, 8234, 13204, 29716, 2987, 962, 728, 1190, 582, 5598, 918, 21473, 551, 55550, 24790, 304, 1584, 449, 25537, 596, 445, 21473, 627, 2520, 810, 2038, 11, 1518, 3788, 1129, 48886, 2726, 14, 605, 13, 7461, 18, 14, 16, 13, 10125, 17248, 20, 320, 10090, 5684, 317, 2485, 1129, 48886, 2726, 14, 605, 13, 5120, 18, 14, 67171, 37284, 43, 7211, 13, 5925, 13, 10465, 10841, 320, 5607, 12279, 16519, 317, 438, 3788, 1129, 48886, 2726, 14, 605, 13, 7461, 18, 14, 16, 13, 7028, 10961, 20, 320, 69292, 12279, 16519, 570, 551, 480, 16519, 31214, 6486, 11, 8671, 16621, 11, 69292, 12279, 16519, 11, 5607, 12279, 16519, 11, 1962, 15590, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 962, 728, 2036, 66, 9353, 278, 1857, 551, 55550, 24790, 304, 1584, 449, 25537, 596, 445, 21473, 627, 2520, 810, 2038, 11, 1518, 3788, 1129, 48886, 2726, 14, 605, 13, 7461, 18, 14, 16, 13, 10125, 17248, 20, 320, 10090, 5684, 317, 2485, 1129, 48886, 2726, 14, 605, 13, 5120, 18, 14, 67171, 37284, 43, 7211, 13, 5925, 13, 10465, 10841, 320, 5607, 12279, 16519, 317, 438, 3788, 1129, 48886, 2726, 14, 605, 13, 7461, 18, 14, 16, 13, 7028, 10961, 20, 320, 69292, 12279, 16519, 570, 551, 480, 16519, 31214, 6486, 11, 8671, 16621, 11, 69292, 12279, 16519, 11, 5607, 12279, 16519, 11, 1962, 15590, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 962, 728, 2036, 66, 9353, 278, 9366, 551, 578, 1160, 315, 3127, 39046, 16003, 5144, 430, 1405, 1511, 304, 420, 4441, 13, 551, 610, 198, 8234, 13204, 29716, 2987, 962, 728, 2272, 533, 60312, 68829, 287, 19100, 551, 26868, 315, 4839, 9473, 9709, 304, 449, 279, 61442, 16003, 320, 970, 2134, 284, 510, 15, 11, 16, 10927, 551, 2273, 1227, 198, 8234, 13204, 29716, 2987, 962, 728, 870, 21340, 569, 4803, 276, 309, 13915, 5156, 11895, 28224, 535, 551, 5273, 315, 279, 7524, 549, 5852, 320, 84, 482, 503, 570, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 13204, 29716, 2987, 962, 728, 870, 21340, 569, 4803, 276, 309, 13915, 5156, 11895, 551, 5273, 315, 279, 320, 258, 2221, 30986, 2223, 8, 81000, 16628, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 13204, 29716, 2987, 962, 728, 870, 21340, 569, 4803, 276, 309, 13915, 5156, 1190, 551, 5273, 315, 279, 9473, 16628, 13, 763, 92371, 58720, 6067, 11, 503, 284, 503, 71, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 13204, 29716, 2987, 36386, 4957, 551, 75446, 65500, 1646, 955, 25, 98103, 735, 11975, 27442, 11, 423, 4082, 33, 57304, 11, 865, 32260, 18713, 65916, 198, 94304, 11, 477, 468, 1036, 1291, 22343, 13, 551, 423, 4082, 33, 11, 7594, 977, 16222, 11975, 50640, 1036, 1291, 11, 1962, 15590, 13095, 32260, 198, 8234, 13204, 29716, 2987, 36386, 77863, 1857, 551, 81920, 955, 315, 279, 468, 1036, 1291, 27605, 1147, 13, 551, 31127, 750, 13876, 1534, 10900, 2222, 82326, 198, 8234, 13204, 29716, 2987, 1326, 86, 4957, 551, 42353, 473, 31501, 596, 659, 69604, 48194, 11008, 1473, 91, 4076, 415, 765, 7817, 2611, 765, 17650, 1835, 36821, 91, 81922, 765, 20308, 765, 14730, 15431, 36821, 91, 74011, 38, 15, 54, 15, 6, 63, 220, 765, 3254, 64630, 2611, 765, 8743, 33, 220, 5728, 11, 220, 22407, 4645, 320, 1049, 21, 8, 36821, 91, 74011, 2445, 63665, 6, 63, 220, 765, 659, 69604, 18620, 480, 323, 468, 2342, 765, 8743, 33, 220, 2075, 11, 220, 12422, 4278, 320, 1049, 22, 8, 36821, 91, 74011, 2445, 63665, 15, 6, 63, 765, 659, 69604, 18620, 480, 449, 8521, 468, 15, 220, 765, 8743, 33, 220, 4370, 11, 220, 25496, 16, 320, 2550, 21, 8, 256, 36821, 91, 74011, 2445, 38, 15, 54, 6, 63, 765, 659, 69604, 18620, 468, 449, 8521, 480, 15, 220, 765, 482, 3909, 36821, 91, 74011, 5230, 31419, 63665, 15, 6, 63, 220, 765, 29824, 3745, 659, 69604, 18620, 480, 449, 8521, 468, 15, 256, 765, 8743, 33, 220, 1958, 11, 220, 23033, 15, 320, 3753, 21, 8, 256, 36821, 91, 74011, 5230, 31419, 63665, 6, 63, 220, 765, 29824, 3745, 659, 69604, 18620, 480, 323, 468, 256, 765, 8743, 33, 220, 5728, 11, 220, 23785, 4278, 320, 1049, 21, 8, 256, 36821, 91, 74011, 33863, 31419, 63665, 15, 6, 63, 220, 765, 934, 300, 575, 7203, 659, 69604, 18620, 480, 449, 8521, 468, 15, 765, 393, 4833, 220, 1484, 11, 220, 7322, 7743, 320, 1049, 22, 8, 36821, 91, 74011, 33863, 31419, 63665, 6, 63, 220, 765, 934, 300, 575, 7203, 659, 69604, 18620, 480, 323, 468, 765, 393, 4833, 220, 4161, 11, 220, 14057, 16496, 320, 1049, 21, 8, 765, 551, 480, 15, 54, 15, 82692, 31419, 63665, 82692, 31419, 63665, 15, 11, 33863, 31419, 63665, 11, 33863, 31419, 63665, 15, 11, 2445, 38, 15, 54, 11, 2445, 63665, 11, 2445, 63665, 15, 198, 8234, 13204, 29716, 2987, 1326, 86, 960, 10949, 2667, 1857, 551, 578, 1511, 8197, 743, 5865, 13, 551, 320, 43, 8, 2599, 54, 10, 385, 11, 6885, 1892, 5493, 11, 1962, 15590, 11, 20173, 362, 29967, 11, 19563, 17301, 11, 1725, 2910, 5865, 11, 8110, 29047, 5950, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 1326, 86, 5069, 287, 6213, 1857, 551, 578, 3127, 39046, 3196, 58001, 16003, 24790, 1511, 304, 279, 6041, 1486, 423, 4082, 19576, 13, 551, 480, 16519, 44639, 37, 31214, 6486, 11, 8671, 16621, 11, 69292, 12279, 16519, 11, 5607, 12279, 16519, 11, 1962, 15590, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 1326, 86, 5069, 287, 6213, 9366, 551, 578, 1160, 315, 3127, 39046, 16003, 5144, 430, 1405, 1511, 304, 420, 4441, 13, 551, 610, 198, 8234, 13204, 29716, 2987, 960, 325, 4957, 551, 4078, 315, 426, 937, 13824, 16695, 1122, 29056, 1473, 262, 473, 1702, 937, 284, 473, 30577, 24346, 489, 220, 17, 353, 62133, 353, 473, 87, 482, 22903, 353, 473, 66, 271, 2940, 62133, 11, 22903, 30202, 279, 955, 382, 20171, 5070, 369, 279, 10334, 512, 12, 1795, 1129, 40541, 5977, 62601, 94369, 916, 2971, 52745, 98033, 1639, 90160, 39151, 1481, 325, 2, 55880, 16, 198, 12, 3788, 1129, 2185, 3211, 13671, 6990, 26583, 9199, 2348, 16675, 19030, 6354, 278, 79, 1430, 63359, 811, 24965, 3395, 811, 198, 12, 3788, 1129, 14452, 22823, 2381, 2726, 52357, 683, 3554, 325, 6018, 12, 3788, 1129, 2185, 2441, 309, 754, 26327, 36103, 26583, 9199, 2348, 16675, 19030, 6354, 278, 79, 1430, 27974, 271, 91, 4076, 765, 7817, 36821, 91, 81922, 765, 14730, 21622, 36821, 91, 74011, 60300, 1169, 6, 63, 765, 62133, 284, 220, 16, 11, 22903, 284, 220, 16, 36821, 91, 74011, 22646, 11053, 6, 63, 765, 62133, 284, 220, 15, 11, 22903, 284, 220, 16, 36821, 91, 74011, 3378, 6, 63, 765, 22765, 2320, 7203, 5603, 36821, 91, 74011, 49, 8201, 6, 63, 765, 10836, 28673, 44919, 5582, 765, 551, 6933, 24412, 8201, 21861, 287, 1169, 20594, 462, 11053, 198, 8234, 13204, 29716, 2987, 960, 325, 960, 10949, 2667, 1857, 551, 578, 1511, 8197, 743, 5865, 13, 551, 320, 43, 8, 2599, 54, 10, 385, 11, 6885, 1892, 5493, 11, 1962, 15590, 11, 20173, 362, 29967, 11, 19563, 17301, 11, 1725, 2910, 5865, 11, 8110, 29047, 5950, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 960, 325, 5069, 287, 6213, 1857, 551, 578, 3127, 39046, 3196, 58001, 16003, 24790, 1511, 304, 279, 6041, 1486, 423, 4082, 19576, 13, 551, 480, 16519, 44639, 37, 31214, 6486, 11, 8671, 16621, 11, 69292, 12279, 16519, 11, 5607, 12279, 16519, 11, 1962, 15590, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 960, 325, 5069, 287, 6213, 9366, 551, 578, 1160, 315, 3127, 39046, 16003, 5144, 430, 1405, 1511, 304, 420, 4441, 13, 551, 610, 198, 8234, 13204, 29716, 2987, 960, 325, 516, 8080, 551, 69395, 17797, 354, 411, 76, 1511, 311, 38336, 553, 279, 426, 937, 24051, 1122, 382, 91, 4076, 765, 7817, 765, 17650, 36821, 91, 81922, 765, 14730, 21622, 765, 93686, 36821, 91, 74011, 9619, 51389, 24346, 2065, 6, 63, 765, 8797, 38336, 2065, 315, 279, 426, 937, 24051, 1122, 765, 482, 36821, 91, 74011, 43, 1149, 54801, 11529, 352, 78155, 6, 63, 765, 3804, 8920, 87975, 39634, 54801, 11529, 352, 78155, 12384, 765, 3788, 1129, 48886, 2726, 14, 605, 13, 5120, 18, 14, 67171, 37284, 33, 13, 2946, 13, 21239, 16, 36821, 91, 74011, 21287, 7157, 6, 63, 765, 3331, 1534, 17832, 33247, 1749, 765, 3788, 1129, 48886, 2726, 14, 605, 13, 8190, 22, 14, 18807, 21469, 23, 36821, 91, 74011, 50, 877, 47, 66, 6, 63, 765, 69934, 481, 11896, 369, 25059, 970, 22854, 24019, 811, 765, 3788, 1129, 82, 273, 4080, 18119, 85, 19060, 14, 36821, 91, 74011, 51, 6486, 6, 63, 765, 350, 8836, 9607, 19067, 544, 57304, 765, 3788, 1129, 48886, 2726, 14, 605, 13, 4645, 21, 11628, 931, 24, 12, 15602, 19, 7, 1484, 8, 10731, 2491, 12, 20, 765, 551, 8797, 51389, 24346, 2065, 11, 21287, 7157, 31214, 1149, 54801, 11529, 352, 78155, 21861, 877, 47, 66, 20594, 6486, 198, 8234, 13204, 29716, 2987, 960, 325, 1326, 86, 1857, 551, 42353, 473, 31501, 596, 659, 69604, 48194, 11008, 1473, 91, 4076, 415, 765, 7817, 2611, 765, 17650, 1835, 36821, 91, 81922, 765, 20308, 765, 14730, 15431, 36821, 91, 74011, 38, 15, 54, 15, 6, 63, 220, 765, 3254, 64630, 2611, 765, 8743, 33, 220, 5728, 11, 220, 22407, 4645, 320, 1049, 21, 8, 36821, 91, 74011, 2445, 63665, 6, 63, 220, 765, 659, 69604, 18620, 480, 323, 468, 2342, 765, 8743, 33, 220, 2075, 11, 220, 12422, 4278, 320, 1049, 22, 8, 36821, 91, 74011, 2445, 63665, 15, 6, 63, 765, 659, 69604, 18620, 480, 449, 8521, 468, 15, 220, 765, 8743, 33, 220, 4370, 11, 220, 25496, 16, 320, 2550, 21, 8, 256, 36821, 91, 74011, 2445, 38, 15, 54, 6, 63, 765, 659, 69604, 18620, 468, 449, 8521, 480, 15, 220, 765, 482, 3909, 36821, 91, 74011, 5230, 31419, 63665, 15, 6, 63, 220, 765, 29824, 3745, 659, 69604, 18620, 480, 449, 8521, 468, 15, 256, 765, 8743, 33, 220, 1958, 11, 220, 23033, 15, 320, 3753, 21, 8, 256, 36821, 91, 74011, 5230, 31419, 63665, 6, 63, 220, 765, 29824, 3745, 659, 69604, 18620, 480, 323, 468, 256, 765, 8743, 33, 220, 5728, 11, 220, 23785, 4278, 320, 1049, 21, 8, 256, 36821, 91, 74011, 33863, 31419, 63665, 15, 6, 63, 220, 765, 934, 300, 575, 7203, 659, 69604, 18620, 480, 449, 8521, 468, 15, 765, 393, 4833, 220, 1484, 11, 220, 7322, 7743, 320, 1049, 22, 8, 36821, 91, 74011, 33863, 31419, 63665, 6, 63, 220, 765, 934, 300, 575, 7203, 659, 69604, 18620, 480, 323, 468, 765, 393, 4833, 220, 4161, 11, 220, 14057, 16496, 320, 1049, 21, 8, 765, 551, 480, 15, 54, 15, 82692, 31419, 63665, 82692, 31419, 63665, 15, 11, 33863, 31419, 63665, 11, 33863, 31419, 63665, 15, 11, 2445, 38, 15, 54, 11, 2445, 63665, 11, 2445, 63665, 15, 198, 8234, 13204, 29716, 2987, 81183, 728, 81554, 5631, 54256, 1857, 551, 14727, 5631, 30061, 1749, 1511, 304, 279, 20804, 4082, 6471, 1473, 91, 4076, 1078, 765, 17650, 1014, 36821, 91, 14730, 12, 765, 20308, 381, 36821, 91, 74011, 1182, 12, 3301, 6, 63, 286, 765, 13134, 83, 85393, 1880, 453, 2637, 71430, 2898, 6914, 83, 220, 1490, 320, 1049, 19, 8, 220, 36821, 91, 74011, 1182, 11529, 56, 33, 6, 63, 286, 765, 80835, 1880, 453, 2637, 393, 4833, 220, 3534, 320, 1049, 21, 8, 260, 36821, 91, 74011, 1182, 6830, 13706, 6, 63, 286, 765, 480, 620, 1880, 453, 2637, 469, 2989, 220, 6086, 320, 1049, 23, 8, 1881, 36821, 91, 74011, 1507, 6, 63, 310, 765, 356, 2715, 277, 3833, 1880, 453, 11, 393, 4833, 220, 5332, 320, 2550, 19, 8, 996, 36821, 91, 74011, 27416, 38, 6, 63, 1881, 765, 22353, 64, 1880, 453, 2637, 432, 5901, 220, 1490, 320, 1049, 23, 8, 692, 36821, 91, 74011, 44, 5119, 6, 63, 1881, 765, 50181, 17137, 1880, 453, 2637, 8743, 33, 220, 1954, 320, 679, 19, 8, 260, 36821, 91, 74011, 40, 2898, 6, 63, 1881, 765, 95359, 1880, 453, 2637, 8743, 33, 220, 1774, 320, 2550, 17, 8, 286, 36821, 91, 74011, 45, 5158, 6, 63, 1881, 765, 2394, 52178, 441, 1880, 453, 2637, 8743, 33, 220, 2618, 320, 2550, 18, 8, 996, 36821, 91, 74011, 46, 5158, 6, 63, 1881, 765, 2394, 52178, 441, 1880, 453, 2637, 8743, 33, 220, 2618, 320, 2550, 18, 8, 996, 36821, 91, 74011, 53605, 890, 437, 2439, 6, 63, 220, 765, 62763, 747, 277, 1880, 453, 2637, 393, 4833, 220, 3226, 320, 3753, 21, 8, 286, 36821, 91, 74011, 71, 21340, 569, 8118, 6, 63, 257, 765, 482, 1961, 765, 551, 19084, 6830, 13706, 11, 1182, 11529, 56, 33, 11, 1182, 12, 3301, 11, 1507, 38868, 2898, 28112, 5119, 22812, 5158, 22812, 33460, 75449, 5158, 20393, 21340, 569, 8118, 11, 53605, 890, 437, 2439, 198, 8234, 13204, 29716, 2987, 81183, 728, 77663, 54625, 551, 763, 4550, 9499, 284, 220, 16, 12148, 82624, 61734, 570, 551, 2273, 1227, 551, 220, 16, 611, 28068, 273, 198, 8234, 13204, 29716, 2987, 81183, 728, 749, 39100, 4486, 551, 63755, 1614, 304, 902, 279, 20804, 4082, 22702, 374, 2884, 13, 551, 3276, 11691, 442, 39100, 11, 809, 442, 39100, 61662, 39100, 198, 8234, 13204, 29716, 2987, 81183, 728, 11895, 551, 5273, 315, 279, 320, 258, 2221, 30986, 2223, 8, 81000, 16628, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 13204, 29716, 2987, 81183, 728, 1190, 71, 551, 5273, 315, 279, 320, 2295, 30986, 2223, 8, 99014, 596, 59086, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 13204, 29716, 2987, 81183, 728, 10985, 5893, 35758, 70048, 4090, 551, 38527, 35758, 42271, 1511, 311, 2018, 6426, 279, 51052, 3634, 7997, 596, 5865, 1139, 198, 1820, 1972, 34873, 3634, 382, 91, 4076, 1881, 765, 7817, 260, 765, 17650, 667, 36821, 91, 33658, 313, 765, 14730, 4521, 765, 20308, 36821, 91, 74011, 47, 1037, 6, 63, 765, 393, 1037, 596, 10049, 318, 519, 220, 765, 3788, 1129, 2185, 516, 5979, 5886, 1248, 916, 34574, 1873, 39281, 63328, 72, 14, 6726, 2550, 24391, 15515, 6804, 22, 30, 20708, 4, 18, 35, 7141, 392, 36821, 91, 74011, 6102, 2300, 6, 63, 765, 27697, 4968, 18237, 1749, 765, 3788, 1129, 73, 33714, 13, 2690, 2726, 45772, 65, 14, 16647, 14, 605, 13, 5120, 18, 14, 67171, 37284, 33, 13, 3174, 13, 13895, 15, 36821, 91, 74011, 50, 12757, 6, 63, 765, 96030, 907, 66266, 765, 3788, 1129, 73, 33714, 13, 2690, 2726, 45772, 75, 14, 16647, 14, 605, 13, 5120, 18, 14, 67171, 37284, 43, 7211, 13, 2075, 13, 22507, 36821, 91, 74011, 626, 67054, 6, 63, 765, 800, 67054, 1749, 765, 3788, 1129, 73, 33714, 13, 2690, 2726, 45772, 65, 14, 16647, 14, 605, 13, 5120, 18, 14, 67171, 37284, 33, 13, 3226, 13, 4278, 4044, 765, 551, 7639, 2300, 28494, 1037, 21861, 12757, 11, 626, 67054, 198, 8234, 13204, 29716, 2987, 81941, 5314, 6665, 54449, 551, 26868, 315, 49976, 597, 93558, 824, 5089, 87298, 3160, 3235, 1855, 8183, 627, 24741, 279, 3325, 24473, 17915, 704, 315, 682, 25776, 627, 15346, 1193, 387, 7863, 1990, 1652, 7607, 315, 4528, 13167, 2786, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 13204, 29716, 2987, 81941, 15054, 530, 1291, 551, 578, 2082, 19440, 4877, 19392, 279, 16437, 1511, 198, 2000, 279, 8197, 743, 323, 65614, 315, 35876, 30597, 382, 35736, 14236, 320, 4291, 17508, 16259, 311, 279, 9959, 9904, 997, 12, 41618, 63380, 47, 85802, 2485, 1129, 2185, 3211, 13671, 6990, 26583, 9199, 2348, 16744, 67713, 340, 12, 1595, 37, 24860, 12, 26760, 4077, 12, 41618, 35263, 9377, 85802, 1277, 1129, 2185, 739, 6358, 2180, 88, 56840, 15761, 15549, 2971, 561, 752, 86686, 51538, 12978, 14, 35263, 9377, 2628, 2, 11786, 2971, 561, 752, 100146, 74, 3914, 752, 751, 10274, 66, 10692, 24165, 30, 30930, 28, 360, 2221, 2269, 483, 8, 551, 610, 198, 8234, 13204, 29716, 2987, 81941, 960, 10949, 2667, 551, 578, 955, 315, 8197, 743, 1511, 555, 279, 2068, 382, 91, 5273, 3586, 765, 5291, 7817, 9432, 91, 14730, 43191, 765, 20308, 12, 9432, 91, 74011, 2599, 54, 6, 63, 667, 765, 5033, 28078, 11277, 17301, 1835, 9432, 91, 74011, 43, 2599, 54, 6, 63, 5291, 765, 29363, 1534, 57088, 11277, 17301, 220, 9432, 91, 74011, 2599, 54, 10, 385, 6, 63, 1835, 765, 5033, 28078, 11277, 17301, 449, 2254, 27605, 1147, 9432, 91, 74011, 43, 2599, 54, 10, 385, 6, 63, 765, 29363, 1534, 57088, 11277, 17301, 449, 2254, 27605, 1147, 9432, 91, 1595, 59436, 43, 8, 2599, 54, 6, 63, 3909, 765, 257, 362, 10824, 315, 10314, 54, 323, 72428, 54, 9432, 91, 1595, 59436, 43, 8, 2599, 54, 10, 385, 6, 63, 220, 765, 362, 10824, 315, 10314, 54, 323, 72428, 54, 449, 2254, 27605, 1147, 9432, 91, 74011, 19563, 17301, 6, 63, 394, 765, 44144, 17301, 5291, 9432, 91, 74011, 6885, 1892, 5493, 489, 11277, 17301, 6, 63, 262, 765, 70128, 743, 315, 279, 17697, 9710, 12384, 320, 91092, 25, 220, 605, 13, 4645, 21, 4537, 522, 4080, 13, 1049, 19, 13, 717, 13, 15901, 8, 9432, 91, 74011, 8110, 29047, 5950, 6, 63, 310, 765, 8976, 29047, 5950, 4391, 9432, 91, 74011, 13066, 79, 403, 5865, 6, 63, 260, 765, 9365, 5865, 338, 765, 551, 320, 43, 8, 2599, 54, 13247, 43, 8, 2599, 54, 10, 385, 11, 2599, 54, 11, 2599, 54, 10, 385, 31214, 2599, 54, 31214, 2599, 54, 10, 385, 11, 22612, 50482, 27605, 1147, 11, 6885, 1892, 5493, 489, 11277, 17301, 11, 1962, 15590, 11, 19563, 17301, 11, 8110, 29047, 5950, 10900, 2870, 5865, 11, 359, 10547, 198, 8234, 13204, 29716, 2987, 81941, 46942, 365, 525, 75482, 551, 328, 45845, 45379, 304, 87298, 3634, 369, 264, 11277, 89354, 8197, 743, 13, 1102, 374, 279, 4907, 198, 1073, 279, 8592, 11277, 89354, 1746, 59, 38118, 36802, 71, 2308, 61, 17, 91, 74, 10, 38, 97850, 17, 15523, 17, 76, 2253, 32816, 8, 5343, 304, 279, 8197, 198, 751, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 13204, 29716, 2987, 81941, 4795, 86, 75482, 551, 578, 65251, 45379, 5852, 369, 279, 958, 49270, 11277, 17301, 304, 279, 72428, 54, 3070, 627, 2028, 45379, 374, 5089, 1752, 11, 22797, 311, 279, 2027, 315, 279, 25655, 55404, 258, 2442, 258, 10801, 198, 438, 279, 3160, 315, 279, 45379, 87298, 4724, 1746, 81, 15511, 8673, 92, 353, 765, 42, 15511, 10453, 53498, 3, 570, 551, 2273, 1227, 198, 8234, 13204, 17777, 25357, 2036, 6634, 41779, 16597, 9209, 1292, 551, 578, 3722, 16597, 1749, 1511, 311, 6994, 279, 3722, 16597, 5497, 627, 91, 1630, 79504, 29469, 16597, 6872, 9898, 765, 7817, 58040, 5351, 9432, 91, 9411, 5272, 91, 3597, 3597, 3597, 20098, 7511, 91, 3146, 67684, 1126, 1630, 79504, 29469, 16597, 320, 74912, 37790, 33395, 667, 765, 578, 4751, 330, 22491, 1126, 1, 19813, 810, 311, 279, 4288, 17140, 315, 2678, 64568, 3695, 1109, 311, 279, 7106, 1376, 315, 279, 6205, 13, 3053, 387, 1511, 449, 2536, 2320, 363, 1126, 10688, 422, 814, 3118, 4288, 64568, 635, 89935, 13, 9432, 91, 3146, 11126, 29016, 1630, 79504, 29469, 16597, 320, 3624, 55, 37790, 33395, 2342, 765, 12477, 369, 26679, 279, 25524, 6070, 315, 264, 3254, 26110, 13, 58040, 1078, 9432, 91, 3146, 12243, 12, 39206, 1630, 79504, 29469, 16597, 320, 17526, 55, 37790, 33395, 1078, 765, 362, 15105, 11383, 1511, 369, 11944, 60993, 315, 67422, 710, 532, 15792, 12631, 1701, 24473, 3722, 16597, 22323, 13, 52575, 9432, 91, 3146, 26375, 6830, 67330, 1630, 79504, 2522, 31436, 320, 50, 3027, 50, 33395, 504, 765, 12477, 369, 21630, 51593, 47194, 304, 279, 1404, 2134, 315, 220, 16, 12, 1041, 26807, 13, 37717, 2038, 389, 19320, 1404, 11, 6211, 11, 323, 8141, 13, 56899, 9432, 91, 3146, 55, 79504, 35698, 1968, 320, 55, 8268, 33395, 7714, 765, 12477, 311, 4007, 15792, 4632, 13931, 11, 25066, 11, 323, 2814, 321, 5184, 13, 37717, 3630, 389, 4632, 26839, 11, 17915, 11, 323, 11413, 2136, 13, 5351, 5291, 9432, 91, 3146, 38, 8875, 287, 4953, 7232, 1630, 79504, 29469, 16597, 320, 38, 5511, 37790, 33395, 310, 765, 36283, 6751, 1511, 369, 279, 6492, 315, 15792, 12631, 449, 279, 10672, 24310, 520, 264, 8521, 26682, 9392, 13, 5351, 13771, 9432, 91, 3146, 3905, 49889, 5531, 11746, 39546, 320, 49, 9691, 33395, 5218, 765, 5234, 64036, 1630, 37790, 1749, 311, 6767, 1422, 1658, 22955, 21261, 304, 264, 220, 17, 33520, 5654, 315, 87298, 3634, 13, 37717, 2038, 922, 279, 1972, 12, 7993, 320, 75, 32891, 36401, 11, 8106, 6070, 11, 8631, 323, 42655, 8, 304, 3254, 48689, 599, 543, 483, 323, 67422, 710, 532, 10688, 57370, 551, 94030, 287, 4953, 7232, 1630, 79504, 29469, 16597, 320, 38, 5511, 37790, 705, 12243, 12, 39206, 1630, 79504, 29469, 16597, 320, 17526, 55, 37790, 705, 67684, 1126, 1630, 79504, 29469, 16597, 320, 74912, 37790, 705, 3905, 49889, 5531, 11746, 39546, 320, 49, 9691, 705, 11126, 29016, 1630, 79504, 29469, 16597, 320, 3624, 55, 37790, 705, 26375, 6830, 67330, 1630, 79504, 2522, 31436, 320, 50, 3027, 50, 705, 55, 79504, 35698, 1968, 320, 55, 8268, 705, 359, 10547, 198, 8234, 21661, 1276, 24965, 3395, 811, 551, 578, 1396, 315, 10887, 3254, 6683, 29217, 3238, 551, 528, 198, 8234, 21661, 48211, 26216, 551, 74323, 315, 279, 3424, 5144, 430, 527, 3118, 304, 420, 4441, 13, 551, 610, 198, 8234, 21661, 73318, 4269, 46779, 532, 42565, 9353, 4957, 551, 3959, 56236, 422, 279, 40635, 374, 16997, 520, 279, 31206, 477, 25524, 2237, 13, 551, 25524, 13387, 43943, 198, 8234, 21661, 73318, 4269, 46779, 532, 42565, 9353, 2981, 551, 3959, 56236, 279, 33299, 477, 43030, 4595, 6532, 304, 26679, 279, 3424, 13, 551, 610, 198, 8234, 21661, 73318, 4269, 46779, 532, 42565, 9353, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 73318, 4269, 46779, 532, 42565, 9353, 2776, 1055, 685, 749, 43943, 821, 51248, 6512, 12212, 551, 578, 75678, 520, 902, 279, 35876, 18052, 374, 10887, 13, 551, 2273, 1227, 551, 2132, 198, 8234, 21661, 73318, 4269, 46779, 532, 42565, 9353, 2776, 1055, 685, 749, 43943, 821, 51248, 13, 49575, 1857, 551, 578, 955, 315, 30945, 61002, 40126, 430, 574, 46836, 382, 36482, 2819, 527, 1473, 91, 68372, 61002, 89457, 692, 765, 7817, 7714, 36821, 91, 14730, 16974, 765, 20308, 23573, 36821, 91, 54405, 45, 4592, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 8286, 11, 323, 4907, 36821, 91, 54405, 45, 21089, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 8286, 11, 323, 9499, 36821, 91, 54405, 45, 2898, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 7410, 11, 323, 9499, 36821, 91, 54405, 45, 11079, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 7410, 11, 323, 1218, 12130, 3368, 765, 551, 452, 11079, 22812, 2898, 22812, 4592, 22812, 21089, 198, 8234, 21661, 73318, 4269, 35194, 3659, 1928, 88, 2214, 37732, 551, 17262, 315, 279, 12472, 13, 551, 610, 198, 8234, 21661, 73318, 4269, 35194, 3659, 1928, 88, 2214, 2981, 551, 3959, 56236, 279, 33299, 477, 43030, 4595, 6532, 304, 26679, 279, 3424, 13, 551, 610, 198, 8234, 21661, 73318, 4269, 35194, 3659, 1928, 88, 2214, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 73318, 4269, 35194, 3659, 1928, 88, 2214, 2776, 1055, 685, 749, 43943, 821, 51248, 6512, 12212, 551, 578, 75678, 520, 902, 279, 35876, 18052, 374, 10887, 13, 551, 2273, 1227, 551, 2132, 198, 8234, 21661, 73318, 4269, 35194, 3659, 1928, 88, 2214, 2776, 1055, 685, 749, 43943, 821, 51248, 13, 49575, 1857, 551, 578, 955, 315, 30945, 61002, 40126, 430, 574, 46836, 382, 36482, 2819, 527, 1473, 91, 68372, 61002, 89457, 692, 765, 7817, 7714, 36821, 91, 14730, 16974, 765, 20308, 23573, 36821, 91, 54405, 45, 4592, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 8286, 11, 323, 4907, 36821, 91, 54405, 45, 21089, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 8286, 11, 323, 9499, 36821, 91, 54405, 45, 2898, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 7410, 11, 323, 9499, 36821, 91, 54405, 45, 11079, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 7410, 11, 323, 1218, 12130, 3368, 765, 551, 452, 11079, 22812, 2898, 22812, 4592, 22812, 21089, 198, 8234, 21661, 73318, 4269, 41779, 16597, 21957, 27895, 1748, 86450, 1704, 35961, 551, 578, 46406, 315, 279, 10672, 24310, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 962, 11694, 950, 19231, 55741, 10135, 16491, 4957, 551, 3959, 56236, 422, 279, 40635, 374, 16997, 520, 279, 31206, 477, 25524, 2237, 13, 551, 25524, 13387, 43943, 198, 8234, 21661, 962, 11694, 950, 19231, 55741, 10135, 16491, 2981, 551, 3959, 56236, 279, 33299, 477, 43030, 4595, 6532, 304, 26679, 279, 3424, 13, 551, 610, 198, 8234, 21661, 962, 11694, 950, 19231, 55741, 10135, 16491, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 962, 11694, 950, 19231, 55741, 10135, 16491, 2776, 1055, 685, 749, 43943, 821, 51248, 6512, 12212, 551, 578, 75678, 520, 902, 279, 35876, 18052, 374, 10887, 13, 551, 2273, 1227, 551, 2132, 198, 8234, 21661, 962, 11694, 950, 19231, 55741, 10135, 16491, 2776, 1055, 685, 749, 43943, 821, 51248, 13, 49575, 1857, 551, 578, 955, 315, 30945, 61002, 40126, 430, 574, 46836, 382, 36482, 2819, 527, 1473, 91, 68372, 61002, 89457, 692, 765, 7817, 7714, 36821, 91, 14730, 16974, 765, 20308, 23573, 36821, 91, 54405, 45, 4592, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 8286, 11, 323, 4907, 36821, 91, 54405, 45, 21089, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 8286, 11, 323, 9499, 36821, 91, 54405, 45, 2898, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 7410, 11, 323, 9499, 36821, 91, 54405, 45, 11079, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 7410, 11, 323, 1218, 12130, 3368, 765, 551, 452, 11079, 22812, 2898, 22812, 4592, 22812, 21089, 198, 8234, 21661, 13, 47194, 68436, 40656, 1276, 19862, 292, 60799, 551, 1556, 7698, 38938, 279, 1396, 315, 39445, 15696, 304, 279, 198, 7993, 11, 13890, 311, 279, 1396, 315, 2536, 38029, 10925, 304, 198, 43639, 9962, 13, 551, 528, 198, 8234, 21661, 13, 47194, 68436, 40656, 1276, 69700, 551, 1556, 7698, 38938, 279, 3160, 315, 279, 95481, 25521, 38319, 3424, 13, 551, 528, 198, 8234, 21661, 13, 47194, 68436, 40656, 25606, 28039, 551, 20880, 315, 279, 2849, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 18, 198, 8234, 21661, 13, 47194, 68436, 40656, 929, 32891, 18764, 5973, 551, 17736, 315, 279, 1176, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 40656, 929, 32891, 18764, 960, 551, 17736, 315, 279, 2132, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 40656, 929, 32891, 18764, 522, 551, 17736, 315, 279, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 40656, 929, 32891, 18764, 24879, 551, 37337, 1990, 2132, 323, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 13, 47194, 68436, 40656, 929, 32891, 18764, 63029, 551, 37337, 1990, 1176, 323, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 13, 47194, 68436, 40656, 929, 32891, 18764, 74401, 551, 37337, 1990, 1176, 323, 2132, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 1276, 19862, 292, 60799, 551, 1556, 7698, 38938, 279, 1396, 315, 39445, 15696, 304, 279, 198, 7993, 11, 13890, 311, 279, 1396, 315, 2536, 38029, 10925, 304, 198, 43639, 9962, 13, 551, 528, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 1276, 69700, 551, 1556, 7698, 38938, 279, 3160, 315, 279, 95481, 25521, 38319, 3424, 13, 551, 528, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 25606, 28039, 551, 20880, 315, 279, 2849, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 18, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 929, 32891, 18764, 5973, 551, 17736, 315, 279, 1176, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 929, 32891, 18764, 960, 551, 17736, 315, 279, 2132, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 929, 32891, 18764, 522, 551, 17736, 315, 279, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 929, 32891, 18764, 24879, 551, 37337, 1990, 2132, 323, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 929, 32891, 18764, 63029, 551, 37337, 1990, 1176, 323, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 929, 32891, 18764, 74401, 551, 37337, 1990, 1176, 323, 2132, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 13, 47194, 68436, 85187, 1276, 19862, 292, 60799, 551, 1556, 7698, 38938, 279, 1396, 315, 39445, 15696, 304, 279, 198, 7993, 11, 13890, 311, 279, 1396, 315, 2536, 38029, 10925, 304, 198, 43639, 9962, 13, 551, 528, 198, 8234, 21661, 13, 47194, 68436, 85187, 1276, 69700, 551, 1556, 7698, 38938, 279, 3160, 315, 279, 95481, 25521, 38319, 3424, 13, 551, 528, 198, 8234, 21661, 13, 47194, 68436, 85187, 25606, 28039, 551, 20880, 315, 279, 2849, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 18, 198, 8234, 21661, 13, 47194, 68436, 85187, 929, 32891, 18764, 5973, 551, 17736, 315, 279, 1176, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 85187, 929, 32891, 18764, 960, 551, 17736, 315, 279, 2132, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 85187, 929, 32891, 18764, 522, 551, 17736, 315, 279, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 21661, 13, 47194, 68436, 85187, 929, 32891, 18764, 24879, 551, 37337, 1990, 2132, 323, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 13, 47194, 68436, 85187, 929, 32891, 18764, 63029, 551, 37337, 1990, 1176, 323, 4948, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 13, 47194, 68436, 85187, 929, 32891, 18764, 74401, 551, 37337, 1990, 1176, 323, 2132, 8197, 4724, 13, 551, 2273, 1227, 551, 9038, 1122, 198, 8234, 21661, 1770, 772, 8535, 75339, 52890, 5265, 551, 578, 12903, 5613, 1963, 13, 551, 528, 843, 198, 8234, 21661, 1770, 772, 8535, 75339, 52890, 2894, 551, 578, 5150, 907, 315, 279, 7200, 13225, 13, 5273, 315, 7315, 15151, 264, 5355, 11218, 7200, 13225, 323, 198, 285, 12742, 505, 8336, 32161, 904, 7200, 13225, 19179, 477, 22702, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 1770, 772, 8535, 75339, 52890, 4957, 551, 17366, 13225, 955, 13, 551, 2167, 11, 485, 1248, 198, 8234, 21661, 1770, 772, 8535, 75339, 52890, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 91571, 623, 7569, 1534, 551, 13440, 279, 59580, 374, 12903, 2320, 7569, 1534, 11, 602, 1770, 13, 374, 5727, 12006, 369, 2225, 198, 42682, 2819, 13, 551, 1845, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 75339, 52890, 5265, 551, 578, 12903, 5613, 1963, 13, 551, 528, 843, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 75339, 52890, 2894, 551, 578, 5150, 907, 315, 279, 7200, 13225, 13, 5273, 315, 7315, 15151, 264, 5355, 11218, 7200, 13225, 323, 198, 285, 12742, 505, 8336, 32161, 904, 7200, 13225, 19179, 477, 22702, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 75339, 52890, 4957, 551, 17366, 13225, 955, 13, 551, 2167, 11, 485, 1248, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 75339, 52890, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 91571, 623, 7569, 1534, 551, 13440, 279, 59580, 374, 12903, 2320, 7569, 1534, 11, 602, 1770, 13, 374, 5727, 12006, 369, 2225, 198, 42682, 2819, 13, 551, 1845, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 7001, 16756, 291, 551, 13440, 279, 59580, 706, 2038, 922, 41579, 320, 43590, 37619, 19670, 37619, 323, 5255, 65691, 7058, 5094, 291, 570, 551, 1845, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 2245, 75339, 52890, 5265, 551, 578, 12903, 5613, 1963, 13, 551, 528, 843, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 2245, 75339, 52890, 2894, 551, 578, 5150, 907, 315, 279, 7200, 13225, 13, 5273, 315, 7315, 15151, 264, 5355, 11218, 7200, 13225, 323, 198, 285, 12742, 505, 8336, 32161, 904, 7200, 13225, 19179, 477, 22702, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 2245, 75339, 52890, 4957, 551, 17366, 13225, 955, 13, 551, 2167, 11, 485, 1248, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 2245, 75339, 52890, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 1770, 772, 8535, 75339, 39383, 2253, 772, 8535, 91571, 623, 7569, 1534, 551, 13440, 279, 7200, 6070, 374, 12903, 2320, 7569, 1534, 11, 602, 1770, 13, 374, 5727, 12006, 198, 2000, 2225, 12903, 2819, 13, 551, 1845, 198, 8234, 21661, 1770, 772, 8535, 75339, 39383, 2253, 772, 8535, 75339, 52890, 5265, 551, 578, 12903, 5613, 1963, 13, 551, 528, 843, 198, 8234, 21661, 1770, 772, 8535, 75339, 39383, 2253, 772, 8535, 75339, 52890, 2894, 551, 578, 5150, 907, 315, 279, 7200, 13225, 13, 5273, 315, 7315, 15151, 264, 5355, 11218, 7200, 13225, 323, 198, 285, 12742, 505, 8336, 32161, 904, 7200, 13225, 19179, 477, 22702, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 1770, 772, 8535, 75339, 39383, 2253, 772, 8535, 75339, 52890, 4957, 551, 17366, 13225, 955, 13, 551, 2167, 11, 485, 1248, 198, 8234, 21661, 1770, 772, 8535, 75339, 39383, 2253, 772, 8535, 75339, 52890, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 749, 39100, 91571, 49065, 99863, 12127, 15040, 551, 35721, 369, 279, 2592, 315, 279, 828, 25, 364, 60529, 6, 477, 364, 84872, 4527, 551, 9526, 10900, 61461, 198, 8234, 21661, 749, 39100, 749, 39100, 646, 355, 1512, 3225, 15040, 551, 35721, 369, 279, 2592, 315, 279, 828, 25, 364, 60529, 6, 477, 364, 84872, 4527, 551, 9526, 10900, 61461, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 1770, 544, 10603, 551, 7572, 14747, 3369, 5979, 2301, 315, 264, 13238, 2849, 304, 11668, 19032, 551, 2273, 1227, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 12749, 19100, 551, 22748, 8331, 315, 264, 13238, 2849, 304, 10973, 2819, 320, 1527, 220, 15, 311, 220, 16, 570, 551, 2273, 1227, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 5949, 669, 38368, 63856, 551, 5377, 16622, 22465, 315, 264, 13238, 2849, 13, 551, 2273, 1227, 551, 16798, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 27764, 669, 38368, 11327, 54449, 551, 10928, 16622, 1510, 17915, 315, 264, 13238, 2849, 13, 551, 2273, 1227, 551, 23598, 486, 611, 23819, 3146, 220, 17, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 13, 77665, 2617, 81287, 551, 578, 3177, 21261, 2391, 279, 17244, 19179, 13, 551, 2273, 1227, 551, 67272, 611, 23819, 3146, 220, 17, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 18861, 15380, 551, 578, 2860, 3158, 315, 279, 2849, 2391, 17244, 323, 20334, 22323, 1234, 77052, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 17, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 18861, 35430, 42234, 551, 14227, 18112, 315, 279, 13238, 2849, 13, 26379, 527, 512, 63, 20553, 11529, 1430, 21963, 600, 7964, 1595, 13576, 7964, 1595, 70873, 7964, 2564, 551, 610, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 18861, 15897, 551, 84922, 315, 279, 4553, 3756, 13, 551, 610, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 14914, 269, 655, 551, 22855, 269, 655, 13931, 1511, 304, 279, 13238, 2849, 13, 551, 610, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 14914, 269, 655, 766, 29997, 367, 551, 78719, 23524, 279, 59251, 315, 279, 15938, 655, 6324, 13, 26379, 527, 512, 63, 42838, 23283, 1113, 7964, 1595, 35212, 96649, 7964, 1595, 43824, 1529, 2277, 7964, 2564, 551, 610, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 1770, 70329, 47498, 12969, 551, 77976, 44010, 3729, 13931, 1511, 304, 279, 13238, 2849, 13, 551, 610, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 870, 1286, 47498, 12969, 551, 52029, 44010, 3729, 13931, 1511, 304, 279, 13238, 2849, 13, 551, 610, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 18497, 349, 551, 3804, 71015, 13931, 1511, 304, 279, 13238, 2849, 13, 551, 610, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 7485, 21245, 551, 6984, 3729, 13931, 1511, 304, 279, 13238, 2849, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 2710, 551, 4076, 315, 279, 34454, 70504, 1296, 13010, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 4957, 551, 55982, 315, 279, 34454, 70504, 1296, 13010, 1778, 439, 51715, 307, 367, 11, 40602, 4469, 367, 345, 3957, 26429, 2065, 11, 18733, 12127, 1131, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 55782, 1821, 2710, 551, 358, 3202, 1741, 836, 315, 279, 312, 8252, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 55782, 1821, 1326, 300, 3464, 94376, 1265, 551, 650, 1152, 16743, 20545, 320, 82190, 8, 315, 279, 312, 8252, 304, 279, 5510, 6962, 627, 15346, 387, 264, 907, 1990, 220, 15, 323, 220, 16, 13, 551, 2273, 1227, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 55782, 1821, 1326, 300, 3464, 94376, 6196, 551, 650, 1152, 16743, 20545, 320, 82190, 8, 315, 279, 312, 8252, 1306, 279, 38729, 627, 15346, 387, 264, 907, 1990, 220, 15, 323, 220, 16, 13, 551, 2273, 1227, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 55782, 1821, 2932, 4464, 551, 43609, 315, 279, 14085, 519, 11, 304, 19032, 551, 2273, 1227, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 37262, 2710, 551, 4076, 315, 279, 2027, 11, 52754, 279, 358, 3202, 1741, 836, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 37262, 1326, 300, 3464, 94376, 1265, 551, 650, 1152, 16743, 20545, 320, 82190, 8, 315, 279, 312, 8252, 304, 279, 5510, 6962, 627, 15346, 387, 264, 907, 1990, 220, 15, 323, 220, 16, 13, 551, 2273, 1227, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 37262, 1326, 300, 3464, 94376, 6196, 551, 650, 1152, 16743, 20545, 320, 82190, 8, 315, 279, 312, 8252, 1306, 279, 38729, 627, 15346, 387, 264, 907, 1990, 220, 15, 323, 220, 16, 13, 551, 2273, 1227, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 37262, 9911, 1968, 551, 8593, 1968, 315, 279, 2027, 11, 304, 19032, 551, 2273, 1227, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 37262, 36983, 3084, 84809, 551, 11746, 7394, 12303, 823, 315, 279, 2027, 11, 304, 3148, 2027, 824, 3148, 51483, 824, 892, 13, 551, 2273, 1227, 551, 220, 16, 611, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1783, 988, 2710, 551, 358, 3202, 1741, 836, 315, 279, 312, 8252, 6832, 4478, 374, 17439, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1783, 988, 1351, 1335, 9430, 551, 578, 4478, 315, 279, 1396, 315, 14085, 519, 477, 2027, 35715, 16489, 14, 8723, 2041, 345, 716, 3148, 315, 2860, 51483, 11, 824, 892, 13, 551, 2273, 1227, 551, 35751, 611, 23882, 611, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1783, 988, 516, 15934, 37814, 9430, 551, 578, 3230, 4478, 315, 279, 14085, 519, 11, 824, 3148, 315, 4642, 51483, 3777, 198, 2069, 1326, 13, 9501, 570, 551, 2273, 1227, 551, 35751, 611, 23882, 611, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1783, 988, 516, 15934, 32130, 15380, 9430, 551, 578, 3230, 4478, 315, 279, 14085, 519, 11, 824, 7479, 3158, 315, 4642, 51483, 13, 551, 2273, 1227, 551, 35751, 611, 23819, 3146, 220, 17, 611, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1783, 988, 46734, 2017, 41232, 551, 578, 48639, 11900, 11, 16997, 505, 22337, 315, 14085, 519, 477, 2027, 824, 198, 4174, 315, 6732, 927, 892, 13, 551, 2273, 1227, 551, 220, 16, 611, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 55199, 75466, 551, 578, 13010, 9499, 1161, 8, 304, 279, 34454, 70504, 38729, 2391, 264, 11742, 13010, 13, 551, 2273, 1227, 551, 49328, 9799, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 55199, 70908, 554, 551, 578, 7410, 2391, 279, 34454, 70504, 1296, 13010, 13, 551, 2273, 1227, 551, 281, 36940, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 55199, 26210, 33392, 398, 15005, 40766, 551, 578, 4785, 47729, 3634, 15798, 304, 220, 16, 36363, 320, 40625, 6530, 824, 51483, 3148, 570, 551, 2273, 1227, 551, 2606, 321, 2058, 611, 23882, 611, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 55199, 1326, 300, 33392, 398, 15005, 40766, 551, 578, 6962, 47729, 3634, 15798, 304, 220, 16, 36363, 320, 40625, 6530, 824, 51483, 8286, 570, 551, 2273, 1227, 551, 220, 16, 611, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 55199, 35171, 9430, 551, 578, 63920, 16743, 6962, 6530, 304, 8286, 824, 892, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 18, 611, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 55199, 6512, 4570, 12962, 551, 578, 892, 389, 4365, 315, 279, 51483, 304, 279, 34454, 70504, 13010, 13, 551, 2273, 1227, 551, 2132, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 722, 4842, 68913, 18271, 23830, 551, 578, 5144, 315, 14085, 1821, 315, 279, 13010, 477, 36256, 3094, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 722, 4842, 68913, 44980, 23830, 551, 578, 5144, 315, 3956, 315, 279, 13010, 477, 36256, 3094, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 722, 4842, 68913, 1351, 1335, 28525, 12130, 3368, 551, 578, 13010, 1218, 12130, 3368, 315, 279, 13010, 477, 13010, 3094, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 722, 4842, 68913, 85923, 35895, 551, 578, 320, 680, 1415, 8, 15449, 4907, 315, 279, 34454, 88, 16284, 13010, 477, 13010, 3094, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 522, 4306, 70504, 522, 4306, 599, 522, 4306, 599, 1292, 551, 8572, 836, 315, 51483, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 522, 4306, 599, 6357, 36235, 9209, 551, 578, 1925, 18459, 1749, 315, 279, 51483, 6205, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 522, 4306, 599, 522, 4306, 599, 1857, 551, 578, 955, 315, 51483, 11, 289, 2791, 9501, 477, 51180, 11, 1646, 11, 20155, 11, 7396, 11, 77594, 627, 33189, 2819, 649, 3881, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 522, 4306, 599, 48279, 2065, 37184, 551, 362, 1160, 315, 5528, 1511, 311, 70755, 279, 51483, 6205, 13, 551, 610, 198, 8234, 21661, 522, 4306, 70504, 522, 4306, 599, 77925, 15380, 551, 578, 7479, 3158, 824, 51483, 3148, 13, 551, 2273, 1227, 551, 23819, 3146, 220, 17, 611, 23882, 198, 8234, 21661, 749, 4842, 45983, 70509, 28039, 44507, 4957, 551, 256, 551, 15606, 331, 2253, 8646, 8568, 404, 331, 918, 351, 9866, 8568, 404, 331, 722, 399, 97269, 13387, 648, 16057, 2957, 24004, 13387, 399, 97269, 11, 4853, 44813, 598, 5487, 986, 7385, 414, 1291, 67708, 519, 8083, 11, 1059, 14287, 1339, 11, 9799, 295, 198, 8234, 21661, 749, 4842, 45983, 89691, 7632, 19990, 4957, 551, 3959, 56236, 279, 38152, 369, 19546, 279, 907, 13, 551, 15606, 331, 2253, 8646, 8568, 404, 331, 918, 351, 9866, 8568, 404, 331, 722, 399, 97269, 13387, 648, 16057, 2957, 24004, 13387, 399, 97269, 11, 4853, 44813, 598, 5487, 986, 7385, 414, 1291, 67708, 519, 8083, 39225, 1892, 39694, 14287, 1339, 11, 9799, 295, 11, 3415, 18400, 39694, 11, 3415, 18400, 1311, 1892, 1552, 484, 39694, 198, 8234, 21661, 749, 4842, 45983, 89691, 7632, 19990, 2894, 551, 62020, 75124, 907, 13, 551, 2273, 1227, 551, 281, 36940, 198, 8234, 21661, 749, 4842, 45983, 516, 87160, 7632, 19990, 4957, 551, 3959, 56236, 279, 38152, 369, 19546, 279, 907, 13, 551, 312, 1892, 39694, 11, 3415, 18400, 39694, 11, 3415, 18400, 1311, 1892, 1552, 484, 39694, 198, 8234, 21661, 749, 4842, 45983, 516, 87160, 7632, 19990, 2894, 551, 3005, 277, 75124, 907, 13, 551, 2273, 1227, 551, 281, 36940, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 48211, 26216, 551, 74323, 315, 279, 3424, 5144, 430, 527, 3118, 304, 420, 35782, 13, 551, 4907, 59052, 2335, 11, 47074, 11, 35658, 14605, 4765, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 2776, 1055, 685, 749, 43943, 821, 51248, 6512, 12212, 551, 578, 75678, 520, 902, 279, 35876, 18052, 374, 10887, 13, 551, 2273, 1227, 551, 2132, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 2776, 1055, 685, 749, 43943, 821, 51248, 13, 49575, 1857, 551, 578, 955, 315, 30945, 61002, 40126, 430, 574, 46836, 382, 36482, 2819, 527, 1473, 91, 68372, 61002, 89457, 692, 765, 7817, 7714, 36821, 91, 14730, 16974, 765, 20308, 23573, 36821, 91, 54405, 45, 4592, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 8286, 11, 323, 4907, 36821, 91, 54405, 45, 21089, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 8286, 11, 323, 9499, 36821, 91, 54405, 45, 2898, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 7410, 11, 323, 9499, 36821, 91, 54405, 45, 11079, 41017, 1881, 765, 19863, 1396, 315, 19252, 11, 7410, 11, 323, 1218, 12130, 3368, 765, 551, 452, 11079, 22812, 2898, 22812, 4592, 22812, 21089, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 4957, 551, 35721, 369, 279, 38152, 2884, 311, 6994, 279, 63697, 828, 25, 469, 98952, 11, 1630, 1950, 11, 1630, 5119, 11, 5099, 13, 551, 469, 98952, 11, 3337, 8440, 50, 24412, 55, 1669, 30341, 1111, 1600, 30341, 1950, 30341, 1600, 30341, 5119, 11, 359, 10547, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2981, 551, 35721, 369, 279, 2592, 315, 279, 63697, 828, 11, 3060, 364, 884, 13623, 6, 477, 364, 60529, 4527, 551, 35547, 11, 60529, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 1770, 2053, 42213, 1279, 1857, 551, 80119, 955, 13, 551, 610, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 1770, 2053, 87531, 551, 12634, 11175, 315, 279, 32314, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 1770, 2053, 6817, 35895, 551, 27697, 4907, 315, 279, 32314, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 1770, 2053, 4456, 35895, 551, 32025, 4907, 315, 279, 32314, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 1770, 772, 8535, 39383, 2981, 551, 3308, 477, 955, 315, 279, 17033, 685, 627, 6854, 387, 1511, 311, 923, 4726, 4096, 311, 279, 17033, 685, 13, 551, 610, 198, 8234, 21661, 34930, 15382, 67064, 2932, 81848, 93169, 35895, 48625, 551, 578, 1988, 4907, 6811, 25065, 37057, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 34930, 15382, 67064, 2932, 81848, 93169, 41839, 94681, 551, 578, 1988, 7340, 4272, 5457, 25065, 37057, 13, 551, 2273, 1227, 551, 502, 783, 198, 8234, 21661, 34930, 15382, 67064, 44980, 41839, 94681, 551, 578, 7340, 4272, 5457, 304, 279, 1566, 26329, 3094, 13, 551, 2273, 1227, 551, 502, 783, 198, 8234, 21661, 34930, 15382, 67064, 44980, 35895, 48625, 551, 578, 6811, 304, 279, 4907, 11017, 1990, 279, 1566, 1403, 7504, 2391, 198, 19680, 2065, 13, 551, 2273, 1227, 551, 28068, 273, 198, 8234, 21661, 34930, 15382, 67064, 44980, 10135, 16491, 94681, 551, 578, 7340, 44153, 304, 279, 1566, 26329, 3094, 449, 5201, 311, 3766, 13, 551, 2273, 1227, 551, 23819, 198, 8234, 16230, 77, 73272, 551, 578, 955, 315, 14491, 1511, 304, 10925, 311, 2778, 369, 13, 3296, 1670, 1521, 527, 279, 5144, 198, 1073, 279, 1511, 3857, 17931, 13, 551, 610, 198, 8234, 16230, 77, 33608, 551, 10928, 9681, 430, 527, 5505, 311, 6288, 2778, 3196, 389, 5370, 198, 882, 4613, 13186, 13, 551, 610, 198, 8234, 16230, 77, 48975, 551, 10928, 3823, 34898, 323, 53944, 5144, 430, 5101, 304, 198, 2818, 45, 10925, 13, 551, 610, 198, 8234, 16230, 77, 17853, 25712, 551, 364, 35075, 28887, 430, 5101, 304, 17705, 45, 10925, 13, 551, 610, 198, 8234, 16230, 77, 1896, 38818, 551, 578, 836, 477, 955, 315, 14473, 1511, 304, 459, 5820, 11, 384, 1326, 13, 1920, 477, 198, 82525, 13, 551, 610, 198, 8234, 16230, 77, 44013, 551, 578, 836, 477, 279, 9435, 1749, 304, 459, 5820, 11, 384, 1326, 13, 1920, 477, 19179, 551, 610, 198, 8234, 16230, 77, 56382, 8237, 551, 578, 27692, 3230, 887, 369, 904, 1537, 11, 384, 1326, 13, 6205, 11, 11742, 11, 14473, 13, 551, 610, 198, 8234, 24585, 551, 11360, 8649, 2038, 389, 279, 3769, 18528, 323, 6070, 13, 551, 2290, 198, 8234, 24585, 12613, 278, 3038, 3571, 551, 11360, 8649, 2038, 922, 279, 20545, 315, 459, 2449, 345, 286, 2728, 555, 1202, 25524, 323, 3148, 19983, 2949, 279, 1887, 477, 3769, 13, 551, 2290, 198, 8234, 24585, 52001, 33342, 551, 11360, 8649, 2038, 922, 279, 46220, 315, 279, 3769, 13, 2052, 198, 286, 315, 1521, 6012, 527, 14592, 555, 4401, 264, 46220, 6492, 389, 264, 198, 286, 18740, 17484, 505, 279, 4113, 828, 13, 1115, 4113, 17484, 198, 286, 374, 9967, 304, 3135, 21661, 3871, 449, 279, 28694, 323, 198, 286, 21349, 14726, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 551, 3959, 56236, 264, 264, 24693, 961, 430, 706, 1027, 11054, 2949, 279, 4441, 627, 286, 3297, 387, 5552, 311, 1023, 6067, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 6990, 7085, 551, 3959, 56236, 279, 25524, 6070, 315, 279, 7106, 1887, 13, 1115, 5764, 279, 19670, 10093, 11, 55372, 23728, 11, 5099, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 12613, 278, 3038, 3571, 551, 11360, 8649, 2038, 922, 279, 20545, 315, 459, 2449, 345, 286, 2728, 555, 1202, 25524, 323, 3148, 19983, 2949, 279, 1887, 477, 3769, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 16315, 48084, 551, 31911, 2038, 922, 279, 12976, 1990, 1403, 2204, 6067, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 25606, 551, 12094, 315, 264, 5089, 2849, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 52001, 33342, 551, 11360, 8649, 2038, 922, 279, 46220, 6012, 315, 264, 198, 286, 21349, 2849, 5552, 311, 264, 1887, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 52001, 33342, 1444, 88, 377, 1885, 21992, 551, 11360, 369, 28672, 24100, 377, 1885, 743, 2038, 13, 8442, 2561, 369, 198, 286, 21349, 7917, 430, 617, 64238, 46220, 6492, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 749, 22029, 31196, 2617, 551, 48949, 2617, 1396, 315, 459, 2449, 11, 902, 11105, 279, 1396, 315, 33299, 6089, 70241, 311, 279, 2449, 13, 551, 2290, 198, 8234, 24585, 8947, 2508, 13930, 8908, 4590, 1147, 551, 256, 551, 2290, 198, 8234, 13204, 551, 31911, 264, 12399, 315, 279, 38152, 430, 706, 1027, 1511, 304, 420, 4441, 627, 286, 1115, 38152, 17208, 311, 682, 315, 279, 5068, 6012, 323, 198, 286, 27667, 279, 1121, 315, 264, 3254, 4907, 5720, 1516, 13, 578, 3927, 198, 286, 6012, 1253, 387, 4726, 1749, 5848, 3649, 7958, 384, 1326, 13, 279, 198, 286, 25936, 13, 551, 2290, 198, 8234, 13204, 29716, 2987, 551, 31911, 1749, 3649, 369, 264, 19576, 4441, 13, 551, 2290, 198, 8234, 13204, 29716, 2987, 962, 728, 551, 6872, 2508, 369, 264, 423, 4082, 22702, 13, 551, 2290, 198, 8234, 13204, 29716, 2987, 962, 728, 870, 21340, 569, 4803, 276, 309, 13915, 5156, 551, 19139, 315, 279, 81000, 1646, 1511, 304, 423, 4082, 10, 52, 551, 2290, 198, 8234, 13204, 29716, 2987, 36386, 551, 6872, 2508, 369, 264, 75446, 7826, 4049, 22702, 13, 551, 2290, 198, 8234, 13204, 29716, 2987, 1326, 86, 551, 6872, 2508, 369, 264, 42353, 22702, 13, 551, 2290, 198, 8234, 13204, 29716, 2987, 960, 325, 551, 6872, 2508, 369, 264, 426, 937, 22702, 13, 551, 2290, 198, 8234, 13204, 29716, 2987, 81183, 728, 551, 6872, 2508, 369, 264, 20804, 4082, 22702, 13, 551, 2290, 198, 8234, 13204, 29716, 2987, 78702, 372, 669, 1026, 551, 256, 551, 2290, 198, 8234, 13204, 29716, 2987, 78702, 372, 669, 1026, 78702, 372, 669, 38368, 551, 256, 551, 2290, 198, 8234, 13204, 29716, 2987, 81941, 551, 31911, 5137, 369, 26991, 477, 38663, 279, 56541, 315, 279, 14683, 6070, 13, 551, 2290, 198, 8234, 13204, 17777, 25357, 551, 31911, 1749, 3649, 369, 264, 19179, 4441, 13, 551, 2290, 198, 8234, 13204, 17777, 25357, 2036, 6634, 551, 6872, 2508, 369, 459, 1630, 79504, 29469, 16597, 19179, 13, 551, 2290, 198, 8234, 21661, 551, 31911, 279, 7106, 6012, 430, 617, 1027, 16997, 477, 1511, 304, 198, 286, 420, 4441, 13, 551, 2290, 198, 8234, 21661, 73318, 4269, 551, 73800, 6012, 13, 551, 2290, 198, 8234, 21661, 73318, 4269, 46779, 532, 42565, 9353, 551, 21254, 532, 8141, 734, 13, 551, 2290, 198, 8234, 21661, 73318, 4269, 46779, 532, 42565, 9353, 2776, 1055, 685, 551, 31911, 17033, 685, 2038, 369, 6012, 14592, 505, 31206, 198, 286, 30295, 47590, 13, 551, 2290, 198, 8234, 21661, 73318, 4269, 46779, 532, 42565, 9353, 2776, 1055, 685, 749, 43943, 821, 51248, 551, 6872, 2508, 369, 31206, 30295, 13, 551, 2290, 198, 8234, 21661, 73318, 4269, 35194, 3659, 1928, 88, 2214, 551, 31911, 41553, 315, 56015, 2214, 2819, 439, 264, 35782, 13, 551, 2290, 198, 8234, 21661, 73318, 4269, 35194, 3659, 1928, 88, 2214, 2776, 1055, 685, 551, 31911, 17033, 685, 2038, 369, 6012, 14592, 505, 31206, 198, 286, 30295, 47590, 13, 551, 2290, 198, 8234, 21661, 73318, 4269, 35194, 3659, 1928, 88, 2214, 2776, 1055, 685, 749, 43943, 821, 51248, 551, 6872, 2508, 369, 31206, 30295, 13, 551, 2290, 198, 8234, 21661, 73318, 4269, 41779, 16597, 21957, 551, 29469, 16597, 5497, 13, 551, 2290, 198, 8234, 21661, 962, 11694, 950, 551, 33593, 950, 6012, 13, 551, 2290, 198, 8234, 21661, 962, 11694, 950, 19231, 55741, 10135, 16491, 551, 16729, 20685, 1636, 4185, 64635, 13, 551, 2290, 198, 8234, 21661, 962, 11694, 950, 19231, 55741, 10135, 16491, 2776, 1055, 685, 551, 31911, 17033, 685, 2038, 369, 6012, 14592, 505, 31206, 198, 286, 30295, 47590, 13, 551, 2290, 198, 8234, 21661, 962, 11694, 950, 19231, 55741, 10135, 16491, 2776, 1055, 685, 749, 43943, 821, 51248, 551, 6872, 2508, 369, 31206, 30295, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 551, 31911, 2539, 19670, 4633, 44713, 315, 279, 3769, 304, 2204, 198, 286, 7739, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 40656, 551, 3959, 56236, 459, 19670, 4633, 6070, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 40656, 99339, 551, 12477, 311, 7664, 279, 9606, 315, 279, 6732, 315, 420, 6070, 13, 51567, 649, 387, 10748, 11742, 5540, 11, 477, 4200, 48689, 14272, 33299, 14393, 264, 29564, 30747, 315, 264, 198, 43068, 2816, 555, 5361, 11742, 5540, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 40656, 929, 32891, 18764, 551, 445, 32891, 5137, 315, 264, 2849, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 40656, 1444, 88, 377, 1885, 21992, 551, 11360, 369, 28672, 24100, 377, 1885, 743, 2038, 13, 8442, 2561, 369, 198, 286, 21349, 7917, 430, 617, 64238, 46220, 6492, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 551, 3959, 56236, 459, 19670, 4633, 6070, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 99339, 551, 12477, 311, 7664, 279, 9606, 315, 279, 6732, 315, 420, 6070, 13, 51567, 649, 387, 10748, 11742, 5540, 11, 477, 4200, 48689, 14272, 33299, 14393, 264, 29564, 30747, 315, 264, 198, 43068, 2816, 555, 5361, 11742, 5540, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 929, 32891, 18764, 551, 445, 32891, 5137, 315, 264, 2849, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 3464, 44322, 1444, 88, 377, 1885, 21992, 551, 11360, 369, 28672, 24100, 377, 1885, 743, 2038, 13, 8442, 2561, 369, 198, 286, 21349, 7917, 430, 617, 64238, 46220, 6492, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 85187, 551, 3959, 56236, 459, 19670, 4633, 6070, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 85187, 99339, 551, 12477, 311, 7664, 279, 9606, 315, 279, 6732, 315, 420, 6070, 13, 51567, 649, 387, 10748, 11742, 5540, 11, 477, 4200, 48689, 14272, 33299, 14393, 264, 29564, 30747, 315, 264, 198, 43068, 2816, 555, 5361, 11742, 5540, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 85187, 929, 32891, 18764, 551, 445, 32891, 5137, 315, 264, 2849, 13, 551, 2290, 198, 8234, 21661, 13, 47194, 68436, 85187, 1444, 88, 377, 1885, 21992, 551, 11360, 369, 28672, 24100, 377, 1885, 743, 2038, 13, 8442, 2561, 369, 198, 286, 21349, 7917, 430, 617, 64238, 46220, 6492, 13, 551, 2290, 198, 8234, 21661, 3211, 10892, 1697, 551, 60288, 1697, 6012, 13, 551, 2290, 198, 8234, 21661, 3211, 10892, 1697, 75339, 39383, 9981, 263, 263, 551, 1115, 3857, 10756, 2038, 389, 264, 17358, 1697, 7200, 6070, 198, 286, 16865, 3235, 832, 33520, 44014, 304, 279, 87298, 3634, 13, 551, 2290, 198, 8234, 21661, 3211, 10892, 1697, 962, 437, 9981, 263, 263, 551, 31911, 279, 51923, 263, 17915, 315, 5415, 13, 551, 2290, 198, 8234, 21661, 3211, 10892, 1697, 13, 20559, 36703, 36067, 28039, 551, 31911, 279, 2819, 315, 279, 3230, 320, 716, 3148, 8, 323, 374, 5059, 27456, 320, 18568, 198, 286, 8286, 8, 8798, 8824, 520, 2204, 20472, 13, 551, 2290, 198, 8234, 21661, 3211, 10892, 1697, 70509, 9082, 1552, 24037, 71, 6312, 89, 551, 31911, 279, 2819, 315, 279, 16183, 53016, 6312, 89, 1949, 4907, 824, 19670, 520, 6926, 198, 286, 8286, 323, 520, 2204, 20472, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 551, 35269, 6012, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 75339, 52890, 551, 256, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 75339, 52890, 2776, 1055, 685, 551, 220, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 551, 31911, 279, 2860, 14683, 17915, 315, 5415, 382, 286, 65991, 34892, 25, 433, 690, 9778, 387, 32690, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 75339, 52890, 551, 256, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 75339, 52890, 2776, 1055, 685, 551, 31911, 5347, 82049, 61336, 17033, 685, 2038, 627, 286, 2057, 387, 9967, 1234, 8825, 9817, 2776, 1055, 685, 477, 2911, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 551, 31911, 279, 14683, 73710, 315, 4273, 320, 35, 3204, 570, 1115, 3857, 649, 387, 11763, 311, 8464, 311, 198, 286, 2204, 81898, 320, 68, 1326, 2637, 2440, 284, 364, 35, 4082, 518, 364, 63665, 518, 364, 32260, 518, 5099, 25390, 323, 433, 649, 387, 12903, 2320, 7569, 1534, 198, 286, 477, 539, 13, 578, 1207, 22327, 828, 3585, 311, 1855, 320, 333, 3118, 8, 12903, 12006, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 2245, 551, 11360, 6782, 625, 279, 17915, 315, 5415, 828, 382, 286, 1102, 5764, 279, 2860, 59580, 323, 279, 28448, 59580, 2819, 13, 1226, 54263, 1595, 43590, 16756, 291, 63, 439, 279, 198, 286, 28448, 59580, 369, 1890, 25524, 9606, 11, 1595, 22612, 16756, 291, 63, 439, 279, 28448, 59580, 369, 2204, 198, 286, 33299, 304, 279, 2849, 11, 323, 1595, 30986, 2223, 16756, 291, 63, 439, 279, 28448, 59580, 369, 279, 27605, 1147, 315, 1855, 198, 286, 19670, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 2245, 75339, 52890, 551, 256, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 962, 437, 2253, 772, 8535, 6046, 2245, 75339, 52890, 2776, 1055, 685, 551, 31911, 5347, 82049, 61336, 17033, 685, 2038, 627, 286, 2057, 387, 9967, 1234, 8825, 9817, 2776, 1055, 685, 477, 2911, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 75339, 39383, 2253, 772, 8535, 551, 1115, 3857, 10756, 2038, 389, 264, 4135, 14338, 7200, 6070, 198, 286, 16865, 3235, 832, 33520, 44014, 304, 279, 87298, 3634, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 75339, 39383, 2253, 772, 8535, 75339, 52890, 551, 256, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 75339, 39383, 2253, 772, 8535, 75339, 52890, 2776, 1055, 685, 551, 31911, 5347, 82049, 61336, 17033, 685, 2038, 627, 286, 2057, 387, 9967, 1234, 8825, 9817, 2776, 1055, 685, 477, 2911, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 1326, 265, 729, 32808, 2253, 772, 8535, 551, 5464, 538, 369, 7997, 596, 5865, 2038, 13, 551, 2290, 198, 8234, 21661, 1770, 772, 8535, 1770, 47262, 5121, 50582, 551, 5464, 538, 369, 279, 9249, 2115, 20779, 2038, 13, 1115, 3857, 374, 9959, 198, 286, 369, 452, 18953, 323, 16964, 279, 4754, 8066, 856, 279, 97192, 304, 279, 1887, 13, 551, 2290, 198, 8234, 21661, 749, 39100, 551, 63755, 6012, 13, 551, 2290, 198, 8234, 21661, 749, 39100, 749, 39100, 3797, 100092, 551, 5464, 538, 369, 279, 25524, 24924, 97776, 2038, 13, 551, 2290, 198, 8234, 21661, 749, 39100, 91571, 49065, 99863, 12127, 551, 5464, 538, 369, 279, 12903, 82006, 59086, 2038, 13, 551, 2290, 198, 8234, 21661, 749, 39100, 749, 39100, 646, 355, 1512, 3225, 551, 5464, 538, 369, 279, 24924, 88636, 2038, 13, 551, 2290, 198, 8234, 21661, 29202, 4748, 772, 8535, 551, 16963, 4748, 772, 8535, 6012, 13, 551, 2290, 198, 8234, 21661, 29202, 4748, 772, 8535, 516, 7569, 17061, 551, 12094, 315, 13238, 7917, 13, 551, 2290, 198, 8234, 21661, 522, 4306, 70504, 551, 12094, 23343, 311, 34454, 4548, 13, 551, 2290, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 551, 362, 4526, 315, 29803, 323, 6012, 315, 264, 2539, 34454, 70504, 13010, 627, 286, 1115, 1253, 2997, 13010, 4787, 11, 3135, 323, 7852, 4633, 13878, 315, 264, 13010, 13, 551, 2290, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 55782, 1821, 551, 362, 14085, 519, 304, 264, 34454, 70504, 1296, 13010, 13, 362, 14085, 519, 198, 286, 374, 11054, 555, 3515, 264, 14747, 13, 551, 2290, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 37262, 551, 362, 2027, 315, 264, 34454, 70504, 13010, 13, 362, 2027, 1618, 374, 6118, 11054, 555, 3515, 198, 286, 264, 3373, 1968, 11, 477, 264, 6962, 3464, 94376, 6196, 719, 912, 14, 14486, 6962, 3464, 94376, 1265, 13, 551, 2290, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1783, 988, 551, 11360, 10581, 2785, 5361, 44713, 315, 34454, 70504, 13010, 7969, 13, 551, 2290, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 55199, 551, 32934, 1234, 902, 264, 34454, 70504, 1296, 13010, 574, 10887, 13, 551, 2290, 198, 8234, 21661, 522, 4306, 70504, 1351, 1335, 1351, 1335, 722, 4842, 68913, 551, 12094, 315, 3254, 7504, 315, 264, 34454, 70504, 13010, 17383, 13, 551, 2290, 198, 8234, 21661, 522, 4306, 70504, 522, 4306, 599, 551, 12094, 315, 264, 98882, 51483, 13, 551, 2290, 198, 8234, 21661, 749, 4842, 45983, 551, 51684, 6012, 13, 551, 2290, 198, 8234, 21661, 749, 4842, 45983, 70509, 28039, 44507, 551, 12634, 8286, 16029, 13, 551, 2290, 198, 8234, 21661, 749, 4842, 45983, 89691, 7632, 19990, 551, 31911, 20155, 75124, 2819, 16997, 449, 2204, 81898, 13, 551, 2290, 198, 8234, 21661, 749, 4842, 45983, 516, 87160, 7632, 19990, 551, 31911, 65344, 75124, 2819, 16997, 449, 2204, 81898, 13, 551, 2290, 198, 8234, 21661, 13, 700, 76, 61002, 551, 68372, 61002, 6012, 13, 551, 2290, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 551, 68372, 61002, 6012, 5068, 369, 459, 40126, 42028, 304, 892, 13, 551, 2290, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 2776, 1055, 685, 551, 31911, 17033, 685, 2038, 369, 6012, 14592, 505, 31206, 198, 286, 30295, 47590, 13, 551, 2290, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 2776, 1055, 685, 749, 43943, 821, 51248, 551, 6872, 2508, 369, 31206, 30295, 13, 551, 2290, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 75466, 551, 31911, 9499, 2819, 26126, 520, 2204, 3115, 13, 551, 2290, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 70908, 554, 551, 31911, 7410, 2819, 26126, 520, 2204, 3115, 13, 551, 2290, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 41584, 551, 31911, 8286, 2819, 26126, 520, 2204, 3115, 13, 551, 2290, 198, 8234, 21661, 13, 700, 76, 61002, 13, 84887, 70509, 59052, 2335, 551, 31911, 4907, 2819, 26126, 520, 2204, 3115, 13, 551, 2290, 198, 8234, 21661, 516, 1002, 299, 58510, 551, 27726, 299, 58510, 6012, 13, 551, 2290, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 551, 5464, 538, 369, 27726, 969, 22702, 2038, 439, 12457, 505, 459, 9526, 477, 264, 35547, 13, 551, 2290, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 551, 31911, 17033, 685, 2038, 320, 3902, 398, 279, 38152, 3857, 8, 369, 63697, 6012, 198, 286, 14592, 505, 459, 9526, 477, 264, 22702, 13, 551, 2290, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 1770, 2053, 551, 5464, 538, 369, 279, 469, 98952, 38152, 13, 551, 2290, 198, 8234, 21661, 516, 1002, 299, 58510, 516, 1002, 969, 2776, 1055, 685, 1770, 772, 8535, 39383, 551, 220, 551, 2290, 198, 8234, 21661, 34930, 15382, 67064, 551, 40018, 26329, 3135, 323, 5110, 13, 551, 2290, 198, 8234, 16230, 77, 551, 256, 551, 2290, 198, 128009, 128006, 882, 128007, 271, 88765, 10925, 315, 25674, 25719, 1425, 304, 264, 289, 5757, 89, 635, 6070, 13, 128009, 128006, 78191, 128007], encoder_prompt=None, encoder_prompt_token_ids=None, prompt_logprobs=None, outputs=[CompletionOutput(index=0, text='', token_ids=(128009,), cumulative_logprob=None, logprobs=None, finish_reason=stop, stop_reason=None)], finished=True, metrics=RequestMetrics(arrival_time=1743501101.1243887, last_token_time=1743501270.1914291, first_scheduled_time=1743501101.1605785, first_token_time=1743501270.1914291, time_in_queue=0.03618979454040527, finished_time=1743501270.19282, scheduler_time=0.01062816206831485, model_forward_time=None, model_execute_time=None), lora_request=LoRARequest(lora_name='api_lora', lora_int_id=1, lora_path='work/ai-copiltot-ft/models/unsloth_Meta-Llama-3.1-8B-Instruct-bnb-4bit/version_26/lora_model/', lora_local_path=None, long_lora_max_len=None, base_model_name=None), num_cached_tokens=19616, multi_modal_placeholders={})]"
+      ]
+     },
+     "execution_count": 17,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "o"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
+   "id": "370197ee-a5b5-482f-a1bf-7fbda3b322e1",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from vllm.sampling_params import BeamSearchParams\n",
+    "params = BeamSearchParams(beam_width=5, max_tokens=50)\n",
+    "outputs = llm.beam_search([{\"prompt\": \"Hello, my name is \"}], params)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "id": "2db87732-8dc5-4837-afea-faac5839c7f2",
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "878"
+      ]
+     },
+     "execution_count": 19,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "len(o[0].outputs[1].text)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "e272f841-ed77-48cb-9ac5-7d295afa14ea",
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [],
+   "source": [
+    "model_path=\"huggingface/hub/models--pilar12--nomad-api-writer/snapshots/46c67bfbdd28e49ccc96e0e2cca639c025ae3238\""
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "afc495ba-98bc-414f-9a8c-da680ddd5c51",
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "INFO 03-27 15:52:03 config.py:542] This model supports multiple tasks: {'score', 'reward', 'embed', 'classify', 'generate'}. Defaulting to 'generate'.\n",
+      "WARNING 03-27 15:52:03 arg_utils.py:1135] Chunked prefill is enabled by default for models with max_model_len > 32K. Currently, chunked prefill might not work with some features or models. If you encounter any issues, please disable chunked prefill by setting --enable-chunked-prefill=False.\n",
+      "INFO 03-27 15:52:03 config.py:1556] Chunked prefill is enabled with max_num_batched_tokens=2048.\n",
+      "INFO 03-27 15:52:03 llm_engine.py:234] Initializing a V0 LLM engine (v0.7.2) with config: model='huggingface/hub/models--pilar12--nomad-api-writer/snapshots/46c67bfbdd28e49ccc96e0e2cca639c025ae3238', speculative_config=None, tokenizer='huggingface/hub/models--pilar12--nomad-api-writer/snapshots/46c67bfbdd28e49ccc96e0e2cca639c025ae3238', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, override_neuron_config=None, tokenizer_revision=None, trust_remote_code=True, dtype=torch.bfloat16, max_seq_len=131072, download_dir=None, load_format=LoadFormat.AUTO, tensor_parallel_size=1, pipeline_parallel_size=1, disable_custom_all_reduce=False, quantization=None, enforce_eager=False, kv_cache_dtype=auto,  device_config=cuda, decoding_config=DecodingConfig(guided_decoding_backend='xgrammar'), observability_config=ObservabilityConfig(otlp_traces_endpoint=None, collect_model_forward_time=False, collect_model_execute_time=False), seed=0, served_model_name=huggingface/hub/models--pilar12--nomad-api-writer/snapshots/46c67bfbdd28e49ccc96e0e2cca639c025ae3238, num_scheduler_steps=1, multi_step_stream_outputs=True, enable_prefix_caching=True, chunked_prefill_enabled=True, use_async_output_proc=True, disable_mm_preprocessor_cache=False, mm_processor_kwargs=None, pooler_config=None, compilation_config={\"splitting_ops\":[],\"compile_sizes\":[],\"cudagraph_capture_sizes\":[256,248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,4,2,1],\"max_capture_size\":256}, use_cached_outputs=False, \n",
+      "INFO 03-27 15:52:05 cuda.py:230] Using Flash Attention backend.\n",
+      "INFO 03-27 15:52:05 model_runner.py:1110] Starting to load model huggingface/hub/models--pilar12--nomad-api-writer/snapshots/46c67bfbdd28e49ccc96e0e2cca639c025ae3238...\n"
+     ]
+    },
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "a5e0bf50f9f14ce3960ae8cf0bb0b1bc",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "Loading safetensors checkpoint shards:   0% Completed | 0/4 [00:00<?, ?it/s]\n"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "INFO 03-27 15:52:18 model_runner.py:1115] Loading model weights took 14.9888 GB\n",
+      "INFO 03-27 15:52:19 worker.py:267] Memory profiling takes 0.48 seconds\n",
+      "INFO 03-27 15:52:19 worker.py:267] the current vLLM instance can use total_gpu_memory (79.25GiB) x gpu_memory_utilization (0.90) = 71.33GiB\n",
+      "INFO 03-27 15:52:19 worker.py:267] model weights take 14.99GiB; non_torch_memory takes 0.09GiB; PyTorch activation peak memory takes 1.19GiB; the rest of the memory reserved for KV Cache is 55.06GiB.\n",
+      "INFO 03-27 15:52:19 executor_base.py:110] # CUDA blocks: 28190, # CPU blocks: 2048\n",
+      "INFO 03-27 15:52:19 executor_base.py:115] Maximum concurrency for 131072 tokens per request: 3.44x\n"
+     ]
+    },
+    {
+     "ename": "OutOfMemoryError",
+     "evalue": "CUDA out of memory. Tried to allocate 1.72 GiB. GPU 0 has a total capacity of 79.25 GiB of which 383.19 MiB is free. Process 45885 has 11.72 GiB memory in use. Including non-PyTorch memory, this process has 67.14 GiB memory in use. Of the allocated memory 66.62 GiB is allocated by PyTorch, and 29.30 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation.  See documentation for Memory Management  (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables)",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mOutOfMemoryError\u001b[0m                          Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[4], line 4\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mvllm\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mlora\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mrequest\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m LoRARequest\n\u001b[1;32m      3\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mtorch\u001b[39;00m\u001b[38;5;66;03m# unsloth/tinyllama-bnb-4bit is a pre-quantized checkpoint.\u001b[39;00m\n\u001b[0;32m----> 4\u001b[0m llm \u001b[38;5;241m=\u001b[39m \u001b[43mLLM\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmodel_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtorch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbfloat16\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtrust_remote_code\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43menable_prefix_caching\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43mmax_model_len\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m131072\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m      5\u001b[0m gpu_stats \u001b[38;5;241m=\u001b[39m torch\u001b[38;5;241m.\u001b[39mcuda\u001b[38;5;241m.\u001b[39mget_device_properties(\u001b[38;5;241m0\u001b[39m)\n\u001b[1;32m      6\u001b[0m start_gpu_memory \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mround\u001b[39m(torch\u001b[38;5;241m.\u001b[39mcuda\u001b[38;5;241m.\u001b[39mmax_memory_reserved() \u001b[38;5;241m/\u001b[39m \u001b[38;5;241m1024\u001b[39m \u001b[38;5;241m/\u001b[39m \u001b[38;5;241m1024\u001b[39m \u001b[38;5;241m/\u001b[39m \u001b[38;5;241m1024\u001b[39m, \u001b[38;5;241m3\u001b[39m)\n",
+      "File \u001b[0;32m/lustre/physik/patilsha/miniconda3/envs/vllm/lib/python3.12/site-packages/vllm/utils.py:1051\u001b[0m, in \u001b[0;36mdeprecate_args.<locals>.wrapper.<locals>.inner\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m   1044\u001b[0m             msg \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00madditional_message\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m   1046\u001b[0m         warnings\u001b[38;5;241m.\u001b[39mwarn(\n\u001b[1;32m   1047\u001b[0m             \u001b[38;5;167;01mDeprecationWarning\u001b[39;00m(msg),\n\u001b[1;32m   1048\u001b[0m             stacklevel\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m3\u001b[39m,  \u001b[38;5;66;03m# The inner function takes up one level\u001b[39;00m\n\u001b[1;32m   1049\u001b[0m         )\n\u001b[0;32m-> 1051\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
+      "File \u001b[0;32m/lustre/physik/patilsha/miniconda3/envs/vllm/lib/python3.12/site-packages/vllm/entrypoints/llm.py:242\u001b[0m, in \u001b[0;36mLLM.__init__\u001b[0;34m(self, model, tokenizer, tokenizer_mode, skip_tokenizer_init, trust_remote_code, allowed_local_media_path, tensor_parallel_size, dtype, quantization, revision, tokenizer_revision, seed, gpu_memory_utilization, swap_space, cpu_offload_gb, enforce_eager, max_seq_len_to_capture, disable_custom_all_reduce, disable_async_output_proc, hf_overrides, mm_processor_kwargs, task, override_pooler_config, compilation_config, **kwargs)\u001b[0m\n\u001b[1;32m    239\u001b[0m \u001b[38;5;66;03m# Logic to switch between engines is done at runtime instead of import\u001b[39;00m\n\u001b[1;32m    240\u001b[0m \u001b[38;5;66;03m# to avoid import order issues\u001b[39;00m\n\u001b[1;32m    241\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mengine_class \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_engine_class()\n\u001b[0;32m--> 242\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mllm_engine \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mengine_class\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfrom_engine_args\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    243\u001b[0m \u001b[43m    \u001b[49m\u001b[43mengine_args\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43musage_context\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mUsageContext\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mLLM_CLASS\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    245\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrequest_counter \u001b[38;5;241m=\u001b[39m Counter()\n",
+      "File \u001b[0;32m/lustre/physik/patilsha/miniconda3/envs/vllm/lib/python3.12/site-packages/vllm/engine/llm_engine.py:484\u001b[0m, in \u001b[0;36mLLMEngine.from_engine_args\u001b[0;34m(cls, engine_args, usage_context, stat_loggers)\u001b[0m\n\u001b[1;32m    482\u001b[0m executor_class \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39m_get_executor_cls(engine_config)\n\u001b[1;32m    483\u001b[0m \u001b[38;5;66;03m# Create the LLM engine.\u001b[39;00m\n\u001b[0;32m--> 484\u001b[0m engine \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mcls\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m    485\u001b[0m \u001b[43m    \u001b[49m\u001b[43mvllm_config\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mengine_config\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    486\u001b[0m \u001b[43m    \u001b[49m\u001b[43mexecutor_class\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexecutor_class\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    487\u001b[0m \u001b[43m    \u001b[49m\u001b[43mlog_stats\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;129;43;01mnot\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mengine_args\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdisable_log_stats\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    488\u001b[0m \u001b[43m    \u001b[49m\u001b[43musage_context\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43musage_context\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    489\u001b[0m \u001b[43m    \u001b[49m\u001b[43mstat_loggers\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstat_loggers\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    490\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    492\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m engine\n",
+      "File \u001b[0;32m/lustre/physik/patilsha/miniconda3/envs/vllm/lib/python3.12/site-packages/vllm/engine/llm_engine.py:276\u001b[0m, in \u001b[0;36mLLMEngine.__init__\u001b[0;34m(self, vllm_config, executor_class, log_stats, usage_context, stat_loggers, input_registry, mm_registry, use_cached_outputs)\u001b[0m\n\u001b[1;32m    273\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmodel_executor \u001b[38;5;241m=\u001b[39m executor_class(vllm_config\u001b[38;5;241m=\u001b[39mvllm_config, )\n\u001b[1;32m    275\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmodel_config\u001b[38;5;241m.\u001b[39mrunner_type \u001b[38;5;241m!=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpooling\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m--> 276\u001b[0m     \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_initialize_kv_caches\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    278\u001b[0m \u001b[38;5;66;03m# If usage stat is enabled, collect relevant info.\u001b[39;00m\n\u001b[1;32m    279\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_usage_stats_enabled():\n",
+      "File \u001b[0;32m/lustre/physik/patilsha/miniconda3/envs/vllm/lib/python3.12/site-packages/vllm/engine/llm_engine.py:429\u001b[0m, in \u001b[0;36mLLMEngine._initialize_kv_caches\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    426\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcache_config\u001b[38;5;241m.\u001b[39mnum_gpu_blocks \u001b[38;5;241m=\u001b[39m num_gpu_blocks\n\u001b[1;32m    427\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcache_config\u001b[38;5;241m.\u001b[39mnum_cpu_blocks \u001b[38;5;241m=\u001b[39m num_cpu_blocks\n\u001b[0;32m--> 429\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmodel_executor\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minitialize_cache\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnum_gpu_blocks\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnum_cpu_blocks\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    430\u001b[0m elapsed \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mtime() \u001b[38;5;241m-\u001b[39m start\n\u001b[1;32m    431\u001b[0m logger\u001b[38;5;241m.\u001b[39minfo((\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124minit engine (profile, create kv cache, \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    432\u001b[0m              \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mwarmup model) took \u001b[39m\u001b[38;5;132;01m%.2f\u001b[39;00m\u001b[38;5;124m seconds\u001b[39m\u001b[38;5;124m\"\u001b[39m), elapsed)\n",
+      "File \u001b[0;32m/lustre/physik/patilsha/miniconda3/envs/vllm/lib/python3.12/site-packages/vllm/executor/executor_base.py:121\u001b[0m, in \u001b[0;36mExecutorBase.initialize_cache\u001b[0;34m(self, num_gpu_blocks, num_cpu_blocks)\u001b[0m\n\u001b[1;32m    118\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcache_config\u001b[38;5;241m.\u001b[39mnum_gpu_blocks \u001b[38;5;241m=\u001b[39m num_gpu_blocks\n\u001b[1;32m    119\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcache_config\u001b[38;5;241m.\u001b[39mnum_cpu_blocks \u001b[38;5;241m=\u001b[39m num_cpu_blocks\n\u001b[0;32m--> 121\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcollective_rpc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43minitialize_cache\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    122\u001b[0m \u001b[43m                    \u001b[49m\u001b[43margs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mnum_gpu_blocks\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnum_cpu_blocks\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n",
+      "File \u001b[0;32m/lustre/physik/patilsha/miniconda3/envs/vllm/lib/python3.12/site-packages/vllm/executor/uniproc_executor.py:51\u001b[0m, in \u001b[0;36mUniProcExecutor.collective_rpc\u001b[0;34m(self, method, timeout, args, kwargs)\u001b[0m\n\u001b[1;32m     49\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m kwargs \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m     50\u001b[0m     kwargs \u001b[38;5;241m=\u001b[39m {}\n\u001b[0;32m---> 51\u001b[0m answer \u001b[38;5;241m=\u001b[39m \u001b[43mrun_method\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdriver_worker\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m     52\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m [answer]\n",
+      "File \u001b[0;32m/lustre/physik/patilsha/miniconda3/envs/vllm/lib/python3.12/site-packages/vllm/utils.py:2220\u001b[0m, in \u001b[0;36mrun_method\u001b[0;34m(obj, method, args, kwargs)\u001b[0m\n\u001b[1;32m   2218\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m   2219\u001b[0m     func \u001b[38;5;241m=\u001b[39m partial(method, obj)  \u001b[38;5;66;03m# type: ignore\u001b[39;00m\n\u001b[0;32m-> 2220\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
+      "File \u001b[0;32m/lustre/physik/patilsha/miniconda3/envs/vllm/lib/python3.12/site-packages/vllm/worker/worker.py:306\u001b[0m, in \u001b[0;36mWorker.initialize_cache\u001b[0;34m(self, num_gpu_blocks, num_cpu_blocks)\u001b[0m\n\u001b[1;32m    304\u001b[0m     context \u001b[38;5;241m=\u001b[39m nullcontext()\n\u001b[1;32m    305\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m context:\n\u001b[0;32m--> 306\u001b[0m     \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_init_cache_engine\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    307\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_warm_up_model()\n",
+      "File \u001b[0;32m/lustre/physik/patilsha/miniconda3/envs/vllm/lib/python3.12/site-packages/vllm/worker/worker.py:312\u001b[0m, in \u001b[0;36mWorker._init_cache_engine\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    309\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21m_init_cache_engine\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m    310\u001b[0m     \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcache_config\u001b[38;5;241m.\u001b[39mnum_gpu_blocks \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m    311\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcache_engine \u001b[38;5;241m=\u001b[39m [\n\u001b[0;32m--> 312\u001b[0m         \u001b[43mCacheEngine\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcache_config\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmodel_config\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    313\u001b[0m \u001b[43m                    \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparallel_config\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdevice_config\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    314\u001b[0m         \u001b[38;5;28;01mfor\u001b[39;00m _ \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mparallel_config\u001b[38;5;241m.\u001b[39mpipeline_parallel_size)\n\u001b[1;32m    315\u001b[0m     ]\n\u001b[1;32m    316\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgpu_cache \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m    317\u001b[0m         \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcache_engine[ve]\u001b[38;5;241m.\u001b[39mgpu_cache\n\u001b[1;32m    318\u001b[0m         \u001b[38;5;28;01mfor\u001b[39;00m ve \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mparallel_config\u001b[38;5;241m.\u001b[39mpipeline_parallel_size)\n\u001b[1;32m    319\u001b[0m     ]\n\u001b[1;32m    320\u001b[0m     bind_kv_cache(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcompilation_config\u001b[38;5;241m.\u001b[39mstatic_forward_context,\n\u001b[1;32m    321\u001b[0m                   \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgpu_cache)\n",
+      "File \u001b[0;32m/lustre/physik/patilsha/miniconda3/envs/vllm/lib/python3.12/site-packages/vllm/worker/cache_engine.py:69\u001b[0m, in \u001b[0;36mCacheEngine.__init__\u001b[0;34m(self, cache_config, model_config, parallel_config, device_config)\u001b[0m\n\u001b[1;32m     61\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mattn_backend \u001b[38;5;241m=\u001b[39m get_attn_backend(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhead_size,\n\u001b[1;32m     62\u001b[0m                                      model_config\u001b[38;5;241m.\u001b[39mdtype,\n\u001b[1;32m     63\u001b[0m                                      cache_config\u001b[38;5;241m.\u001b[39mcache_dtype,\n\u001b[1;32m     64\u001b[0m                                      \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mblock_size,\n\u001b[1;32m     65\u001b[0m                                      model_config\u001b[38;5;241m.\u001b[39mis_attention_free,\n\u001b[1;32m     66\u001b[0m                                      use_mla\u001b[38;5;241m=\u001b[39mmodel_config\u001b[38;5;241m.\u001b[39muse_mla)\n\u001b[1;32m     68\u001b[0m \u001b[38;5;66;03m# Initialize the cache.\u001b[39;00m\n\u001b[0;32m---> 69\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgpu_cache \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_allocate_kv_cache\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m     70\u001b[0m \u001b[43m    \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnum_gpu_blocks\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdevice_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdevice_type\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m     71\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcpu_cache \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_allocate_kv_cache(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnum_cpu_blocks, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcpu\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
+      "File \u001b[0;32m/lustre/physik/patilsha/miniconda3/envs/vllm/lib/python3.12/site-packages/vllm/worker/cache_engine.py:103\u001b[0m, in \u001b[0;36mCacheEngine._allocate_kv_cache\u001b[0;34m(self, num_blocks, device)\u001b[0m\n\u001b[1;32m     97\u001b[0m     alloc_shape \u001b[38;5;241m=\u001b[39m kv_cache_shape\n\u001b[1;32m     99\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m _ \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnum_attention_layers):\n\u001b[1;32m    100\u001b[0m     \u001b[38;5;66;03m# null block in CpuGpuBlockAllocator requires at least that\u001b[39;00m\n\u001b[1;32m    101\u001b[0m     \u001b[38;5;66;03m# block to be zeroed-out.\u001b[39;00m\n\u001b[1;32m    102\u001b[0m     \u001b[38;5;66;03m# We zero-out everything for simplicity.\u001b[39;00m\n\u001b[0;32m--> 103\u001b[0m     layer_kv_cache \u001b[38;5;241m=\u001b[39m \u001b[43mtorch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mzeros\u001b[49m\u001b[43m(\u001b[49m\u001b[43malloc_shape\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    104\u001b[0m \u001b[43m                                 \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    105\u001b[0m \u001b[43m                                 \u001b[49m\u001b[43mpin_memory\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpin_memory\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    106\u001b[0m \u001b[43m                                 \u001b[49m\u001b[43mdevice\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdevice\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    108\u001b[0m     \u001b[38;5;66;03m# If we allocated with padding for alignment reasons truncate the\u001b[39;00m\n\u001b[1;32m    109\u001b[0m     \u001b[38;5;66;03m# shape while preserving the aligned stride\u001b[39;00m\n\u001b[1;32m    110\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39malign_cache:\n",
+      "\u001b[0;31mOutOfMemoryError\u001b[0m: CUDA out of memory. Tried to allocate 1.72 GiB. GPU 0 has a total capacity of 79.25 GiB of which 383.19 MiB is free. Process 45885 has 11.72 GiB memory in use. Including non-PyTorch memory, this process has 67.14 GiB memory in use. Of the allocated memory 66.62 GiB is allocated by PyTorch, and 29.30 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation.  See documentation for Memory Management  (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables)"
+     ]
+    }
+   ],
+   "source": [
+    "from vllm import LLM, SamplingParams\n",
+    "from vllm.lora.request import LoRARequest\n",
+    "import torch# unsloth/tinyllama-bnb-4bit is a pre-quantized checkpoint.\n",
+    "llm = LLM(model=model_path, dtype=torch.bfloat16, trust_remote_code=True,enable_prefix_caching=True,max_model_len=131072)\n",
+    "gpu_stats = torch.cuda.get_device_properties(0)\n",
+    "start_gpu_memory = round(torch.cuda.max_memory_reserved() / 1024 / 1024 / 1024, 3)\n",
+    "max_memory = round(gpu_stats.total_memory / 1024 / 1024 / 1024, 3)\n",
+    "print(f\"GPU = {gpu_stats.name}. Max memory = {max_memory} GB.\")\n",
+    "print(f\"{start_gpu_memory} GB of memory reserved.\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "32bf2b46-1329-44e1-8978-9580c061bbda",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from difflib import SequenceMatcher\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "d2ef5182-4a0e-4a9d-95d0-5b4193d7528f",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "similarity = SequenceMatcher(None, s_string1, s_string2).ratio()\n",
+    "dissimilar_chars = max(len(s_string1), len(s_string2)) * (1 - similarity)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "eccab2a8-87af-470c-a72f-df3954faf656",
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Collecting gradio\n",
+      "  Downloading gradio-5.23.3-py3-none-any.whl.metadata (16 kB)\n",
+      "Collecting aiofiles<24.0,>=22.0 (from gradio)\n",
+      "  Using cached aiofiles-23.2.1-py3-none-any.whl.metadata (9.7 kB)\n",
+      "Requirement already satisfied: anyio<5.0,>=3.0 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from gradio) (4.8.0)\n",
+      "Collecting audioop-lts<1.0 (from gradio)\n",
+      "  Downloading audioop_lts-0.2.1-cp313-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.6 kB)\n",
+      "Collecting fastapi<1.0,>=0.115.2 (from gradio)\n",
+      "  Downloading fastapi-0.115.12-py3-none-any.whl.metadata (27 kB)\n",
+      "Collecting ffmpy (from gradio)\n",
+      "  Using cached ffmpy-0.5.0-py3-none-any.whl.metadata (3.0 kB)\n",
+      "Collecting gradio-client==1.8.0 (from gradio)\n",
+      "  Using cached gradio_client-1.8.0-py3-none-any.whl.metadata (7.1 kB)\n",
+      "Collecting groovy~=0.1 (from gradio)\n",
+      "  Using cached groovy-0.1.2-py3-none-any.whl.metadata (6.1 kB)\n",
+      "Requirement already satisfied: httpx>=0.24.1 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from gradio) (0.28.1)\n",
+      "Collecting huggingface-hub>=0.28.1 (from gradio)\n",
+      "  Downloading huggingface_hub-0.30.1-py3-none-any.whl.metadata (13 kB)\n",
+      "Requirement already satisfied: jinja2<4.0 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from gradio) (3.1.5)\n",
+      "Requirement already satisfied: markupsafe<4.0,>=2.0 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from gradio) (3.0.2)\n",
+      "Collecting numpy<3.0,>=1.0 (from gradio)\n",
+      "  Downloading numpy-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n",
+      "Collecting orjson~=3.0 (from gradio)\n",
+      "  Downloading orjson-3.10.16-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (41 kB)\n",
+      "Requirement already satisfied: packaging in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from gradio) (24.2)\n",
+      "Collecting pandas<3.0,>=1.0 (from gradio)\n",
+      "  Downloading pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (89 kB)\n",
+      "Collecting pillow<12.0,>=8.0 (from gradio)\n",
+      "  Downloading pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n",
+      "Collecting pydantic<2.12,>=2.0 (from gradio)\n",
+      "  Downloading pydantic-2.11.2-py3-none-any.whl.metadata (64 kB)\n",
+      "Collecting pydub (from gradio)\n",
+      "  Using cached pydub-0.25.1-py2.py3-none-any.whl.metadata (1.4 kB)\n",
+      "Collecting python-multipart>=0.0.18 (from gradio)\n",
+      "  Using cached python_multipart-0.0.20-py3-none-any.whl.metadata (1.8 kB)\n",
+      "Requirement already satisfied: pyyaml<7.0,>=5.0 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from gradio) (6.0.2)\n",
+      "Collecting ruff>=0.9.3 (from gradio)\n",
+      "  Downloading ruff-0.11.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (25 kB)\n",
+      "Collecting safehttpx<0.2.0,>=0.1.6 (from gradio)\n",
+      "  Using cached safehttpx-0.1.6-py3-none-any.whl.metadata (4.2 kB)\n",
+      "Collecting semantic-version~=2.0 (from gradio)\n",
+      "  Using cached semantic_version-2.10.0-py2.py3-none-any.whl.metadata (9.7 kB)\n",
+      "Collecting starlette<1.0,>=0.40.0 (from gradio)\n",
+      "  Downloading starlette-0.46.1-py3-none-any.whl.metadata (6.2 kB)\n",
+      "Requirement already satisfied: tomlkit<0.14.0,>=0.12.0 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from gradio) (0.13.2)\n",
+      "Collecting typer<1.0,>=0.12 (from gradio)\n",
+      "  Using cached typer-0.15.2-py3-none-any.whl.metadata (15 kB)\n",
+      "Requirement already satisfied: typing-extensions~=4.0 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from gradio) (4.12.2)\n",
+      "Collecting uvicorn>=0.14.0 (from gradio)\n",
+      "  Using cached uvicorn-0.34.0-py3-none-any.whl.metadata (6.5 kB)\n",
+      "Collecting fsspec (from gradio-client==1.8.0->gradio)\n",
+      "  Downloading fsspec-2025.3.2-py3-none-any.whl.metadata (11 kB)\n",
+      "Collecting websockets<16.0,>=10.0 (from gradio-client==1.8.0->gradio)\n",
+      "  Downloading websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.8 kB)\n",
+      "Requirement already satisfied: idna>=2.8 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from anyio<5.0,>=3.0->gradio) (3.10)\n",
+      "Requirement already satisfied: sniffio>=1.1 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from anyio<5.0,>=3.0->gradio) (1.3.1)\n",
+      "Requirement already satisfied: certifi in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from httpx>=0.24.1->gradio) (2024.12.14)\n",
+      "Requirement already satisfied: httpcore==1.* in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from httpx>=0.24.1->gradio) (1.0.7)\n",
+      "Requirement already satisfied: h11<0.15,>=0.13 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from httpcore==1.*->httpx>=0.24.1->gradio) (0.14.0)\n",
+      "Collecting filelock (from huggingface-hub>=0.28.1->gradio)\n",
+      "  Downloading filelock-3.18.0-py3-none-any.whl.metadata (2.9 kB)\n",
+      "Requirement already satisfied: requests in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from huggingface-hub>=0.28.1->gradio) (2.32.3)\n",
+      "Collecting tqdm>=4.42.1 (from huggingface-hub>=0.28.1->gradio)\n",
+      "  Using cached tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n",
+      "Requirement already satisfied: python-dateutil>=2.8.2 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from pandas<3.0,>=1.0->gradio) (2.9.0.post0)\n",
+      "Collecting pytz>=2020.1 (from pandas<3.0,>=1.0->gradio)\n",
+      "  Downloading pytz-2025.2-py2.py3-none-any.whl.metadata (22 kB)\n",
+      "Collecting tzdata>=2022.7 (from pandas<3.0,>=1.0->gradio)\n",
+      "  Downloading tzdata-2025.2-py2.py3-none-any.whl.metadata (1.4 kB)\n",
+      "Collecting annotated-types>=0.6.0 (from pydantic<2.12,>=2.0->gradio)\n",
+      "  Using cached annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n",
+      "Collecting pydantic-core==2.33.1 (from pydantic<2.12,>=2.0->gradio)\n",
+      "  Downloading pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.8 kB)\n",
+      "Collecting typing-inspection>=0.4.0 (from pydantic<2.12,>=2.0->gradio)\n",
+      "  Downloading typing_inspection-0.4.0-py3-none-any.whl.metadata (2.6 kB)\n",
+      "Collecting click>=8.0.0 (from typer<1.0,>=0.12->gradio)\n",
+      "  Using cached click-8.1.8-py3-none-any.whl.metadata (2.3 kB)\n",
+      "Collecting shellingham>=1.3.0 (from typer<1.0,>=0.12->gradio)\n",
+      "  Using cached shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)\n",
+      "Collecting rich>=10.11.0 (from typer<1.0,>=0.12->gradio)\n",
+      "  Downloading rich-14.0.0-py3-none-any.whl.metadata (18 kB)\n",
+      "Requirement already satisfied: six>=1.5 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from python-dateutil>=2.8.2->pandas<3.0,>=1.0->gradio) (1.17.0)\n",
+      "Collecting markdown-it-py>=2.2.0 (from rich>=10.11.0->typer<1.0,>=0.12->gradio)\n",
+      "  Using cached markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)\n",
+      "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from rich>=10.11.0->typer<1.0,>=0.12->gradio) (2.19.1)\n",
+      "Requirement already satisfied: charset-normalizer<4,>=2 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from requests->huggingface-hub>=0.28.1->gradio) (3.4.1)\n",
+      "Requirement already satisfied: urllib3<3,>=1.21.1 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from requests->huggingface-hub>=0.28.1->gradio) (2.3.0)\n",
+      "Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer<1.0,>=0.12->gradio)\n",
+      "  Using cached mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n",
+      "Downloading gradio-5.23.3-py3-none-any.whl (46.5 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m46.5/46.5 MB\u001b[0m \u001b[31m130.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n",
+      "\u001b[?25hUsing cached gradio_client-1.8.0-py3-none-any.whl (322 kB)\n",
+      "Using cached aiofiles-23.2.1-py3-none-any.whl (15 kB)\n",
+      "Downloading audioop_lts-0.2.1-cp313-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (82 kB)\n",
+      "Downloading fastapi-0.115.12-py3-none-any.whl (95 kB)\n",
+      "Using cached groovy-0.1.2-py3-none-any.whl (14 kB)\n",
+      "Downloading huggingface_hub-0.30.1-py3-none-any.whl (481 kB)\n",
+      "Downloading numpy-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.1 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m16.1/16.1 MB\u001b[0m \u001b[31m116.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "Downloading orjson-3.10.16-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (133 kB)\n",
+      "Downloading pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.7 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.7/12.7 MB\u001b[0m \u001b[31m85.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "Downloading pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl (4.5 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.5/4.5 MB\u001b[0m \u001b[31m92.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "Downloading pydantic-2.11.2-py3-none-any.whl (443 kB)\n",
+      "Downloading pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.0/2.0 MB\u001b[0m \u001b[31m62.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "Using cached python_multipart-0.0.20-py3-none-any.whl (24 kB)\n",
+      "Downloading ruff-0.11.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.3 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m11.3/11.3 MB\u001b[0m \u001b[31m122.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "Using cached safehttpx-0.1.6-py3-none-any.whl (8.7 kB)\n",
+      "Using cached semantic_version-2.10.0-py2.py3-none-any.whl (15 kB)\n",
+      "Downloading starlette-0.46.1-py3-none-any.whl (71 kB)\n",
+      "Using cached typer-0.15.2-py3-none-any.whl (45 kB)\n",
+      "Using cached uvicorn-0.34.0-py3-none-any.whl (62 kB)\n",
+      "Using cached ffmpy-0.5.0-py3-none-any.whl (6.0 kB)\n",
+      "Using cached pydub-0.25.1-py2.py3-none-any.whl (32 kB)\n",
+      "Using cached annotated_types-0.7.0-py3-none-any.whl (13 kB)\n",
+      "Using cached click-8.1.8-py3-none-any.whl (98 kB)\n",
+      "Downloading fsspec-2025.3.2-py3-none-any.whl (194 kB)\n",
+      "Downloading pytz-2025.2-py2.py3-none-any.whl (509 kB)\n",
+      "Downloading rich-14.0.0-py3-none-any.whl (243 kB)\n",
+      "Using cached shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)\n",
+      "Using cached tqdm-4.67.1-py3-none-any.whl (78 kB)\n",
+      "Downloading typing_inspection-0.4.0-py3-none-any.whl (14 kB)\n",
+      "Downloading tzdata-2025.2-py2.py3-none-any.whl (347 kB)\n",
+      "Downloading websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (182 kB)\n",
+      "Downloading filelock-3.18.0-py3-none-any.whl (16 kB)\n",
+      "Using cached markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n",
+      "Using cached mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n",
+      "Installing collected packages: pytz, pydub, websockets, tzdata, typing-inspection, tqdm, shellingham, semantic-version, ruff, python-multipart, pydantic-core, pillow, orjson, numpy, mdurl, groovy, fsspec, filelock, ffmpy, click, audioop-lts, annotated-types, aiofiles, uvicorn, starlette, pydantic, pandas, markdown-it-py, huggingface-hub, safehttpx, rich, gradio-client, fastapi, typer, gradio\n",
+      "\u001b[31mERROR: Could not install packages due to an OSError: [Errno 13] Permission denied: '/software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages/pytz'\n",
+      "Check the permissions.\n",
+      "\u001b[0m\u001b[31m\n",
+      "\u001b[0m\n",
+      "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.0.1\u001b[0m\n",
+      "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n"
+     ]
+    }
+   ],
+   "source": [
+    "import argparse\n",
+    "import json\n",
+    "\n",
+    "import gradio as gr\n",
+    "import requests\n",
+    "\n",
+    "\n",
+    "def http_bot(prompt):\n",
+    "    headers = {\"User-Agent\": \"vLLM Client\"}\n",
+    "    pload = {\n",
+    "        \"prompt\": prompt,\n",
+    "        \"stream\": True,\n",
+    "        \"max_tokens\": 128,\n",
+    "    }\n",
+    "    response = requests.post(args.model_url,\n",
+    "                             headers=headers,\n",
+    "                             json=pload,\n",
+    "                             stream=True)\n",
+    "\n",
+    "    for chunk in response.iter_lines(chunk_size=8192,\n",
+    "                                     decode_unicode=False,\n",
+    "                                     delimiter=b\"\\n\"):\n",
+    "        if chunk:\n",
+    "            data = json.loads(chunk.decode(\"utf-8\"))\n",
+    "            output = data[\"text\"][0]\n",
+    "            yield output\n",
+    "\n",
+    "\n",
+    "def build_demo():\n",
+    "    with gr.Blocks() as demo:\n",
+    "        gr.Markdown(\"# vLLM text completion demo\\n\")\n",
+    "        inputbox = gr.Textbox(label=\"Input\",\n",
+    "                              placeholder=\"Enter text and press ENTER\")\n",
+    "        outputbox = gr.Textbox(label=\"Output\",\n",
+    "                               placeholder=\"Generated result from the model\")\n",
+    "        inputbox.submit(http_bot, [inputbox], [outputbox])\n",
+    "    return demo\n",
+    "\n",
+    "\n",
+    "if __name__ == \"__main__\":\n",
+    "    parser = argparse.ArgumentParser()\n",
+    "    parser.add_argument(\"--host\", type=str, default=None)\n",
+    "    parser.add_argument(\"--port\", type=int, default=8001)\n",
+    "    parser.add_argument(\"--model-url\",\n",
+    "                        type=str,\n",
+    "                        default=\"http://localhost:8000/generate\")\n",
+    "    args = parser.parse_args()\n",
+    "\n",
+    "    demo = build_demo()\n",
+    "    demo.queue().launch(server_name=args.host,\n",
+    "                        server_port=args.port,\n",
+    "                        share=True)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "d253d9d1-e3c4-4ca5-bf15-2002c23a994e",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "vllm",
+   "language": "python",
+   "name": "vllm"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.12.0"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
-- 
GitLab


From 7af7d7b34070c76fd8ef3a82ce96e9e639f0645b Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Thu, 10 Apr 2025 11:38:29 +0200
Subject: [PATCH 02/28] update vllm notebook

---
 vllm.ipynb | 636 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 536 insertions(+), 100 deletions(-)

diff --git a/vllm.ipynb b/vllm.ipynb
index 95c250a..455032c 100644
--- a/vllm.ipynb
+++ b/vllm.ipynb
@@ -3,14 +3,371 @@
   {
    "cell_type": "code",
    "execution_count": 3,
+   "id": "a280186f-c8ff-4927-a56d-d604313e0a6b",
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Collecting vllm\n",
+      "  Using cached vllm-0.8.3-cp38-abi3-manylinux1_x86_64.whl.metadata (27 kB)\n",
+      "Requirement already satisfied: cachetools in /opt/conda/lib/python3.12/site-packages (from vllm) (5.5.2)\n",
+      "Requirement already satisfied: psutil in /opt/conda/lib/python3.12/site-packages (from vllm) (6.1.0)\n",
+      "Collecting sentencepiece (from vllm)\n",
+      "  Using cached sentencepiece-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.7 kB)\n",
+      "Requirement already satisfied: numpy in /opt/conda/lib/python3.12/site-packages (from vllm) (1.26.4)\n",
+      "Requirement already satisfied: requests>=2.26.0 in /opt/conda/lib/python3.12/site-packages (from vllm) (2.32.3)\n",
+      "Requirement already satisfied: tqdm in /opt/conda/lib/python3.12/site-packages (from vllm) (4.67.0)\n",
+      "Collecting blake3 (from vllm)\n",
+      "  Using cached blake3-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.2 kB)\n",
+      "Collecting py-cpuinfo (from vllm)\n",
+      "  Using cached py_cpuinfo-9.0.0-py3-none-any.whl.metadata (794 bytes)\n",
+      "Collecting transformers>=4.51.0 (from vllm)\n",
+      "  Using cached transformers-4.51.1-py3-none-any.whl.metadata (38 kB)\n",
+      "Collecting huggingface-hub>=0.30.0 (from huggingface-hub[hf_xet]>=0.30.0->vllm)\n",
+      "  Using cached huggingface_hub-0.30.2-py3-none-any.whl.metadata (13 kB)\n",
+      "Requirement already satisfied: tokenizers>=0.19.1 in /opt/conda/lib/python3.12/site-packages (from vllm) (0.21.1)\n",
+      "Requirement already satisfied: protobuf in /opt/conda/lib/python3.12/site-packages (from vllm) (5.29.4)\n",
+      "Requirement already satisfied: fastapi>=0.115.0 in /opt/conda/lib/python3.12/site-packages (from fastapi[standard]>=0.115.0->vllm) (0.115.12)\n",
+      "Requirement already satisfied: aiohttp in /opt/conda/lib/python3.12/site-packages (from vllm) (3.11.14)\n",
+      "Requirement already satisfied: openai>=1.52.0 in /opt/conda/lib/python3.12/site-packages (from vllm) (1.72.0)\n",
+      "Requirement already satisfied: pydantic>=2.9 in /opt/conda/lib/python3.12/site-packages (from vllm) (2.9.2)\n",
+      "Requirement already satisfied: prometheus_client>=0.18.0 in /opt/conda/lib/python3.12/site-packages (from vllm) (0.21.0)\n",
+      "Requirement already satisfied: pillow in /opt/conda/lib/python3.12/site-packages (from vllm) (11.1.0)\n",
+      "Collecting prometheus-fastapi-instrumentator>=7.0.0 (from vllm)\n",
+      "  Using cached prometheus_fastapi_instrumentator-7.1.0-py3-none-any.whl.metadata (13 kB)\n",
+      "Requirement already satisfied: tiktoken>=0.6.0 in /opt/conda/lib/python3.12/site-packages (from vllm) (0.9.0)\n",
+      "Collecting lm-format-enforcer<0.11,>=0.10.11 (from vllm)\n",
+      "  Using cached lm_format_enforcer-0.10.11-py3-none-any.whl.metadata (17 kB)\n",
+      "Collecting llguidance<0.8.0,>=0.7.9 (from vllm)\n",
+      "  Using cached llguidance-0.7.13-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (9.2 kB)\n",
+      "Collecting outlines==0.1.11 (from vllm)\n",
+      "  Using cached outlines-0.1.11-py3-none-any.whl.metadata (17 kB)\n",
+      "Collecting lark==1.2.2 (from vllm)\n",
+      "  Using cached lark-1.2.2-py3-none-any.whl.metadata (1.8 kB)\n",
+      "Collecting xgrammar==0.1.17 (from vllm)\n",
+      "  Using cached xgrammar-0.1.17-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.5 kB)\n",
+      "Requirement already satisfied: typing_extensions>=4.10 in /opt/conda/lib/python3.12/site-packages (from vllm) (4.12.2)\n",
+      "Requirement already satisfied: filelock>=3.16.1 in /opt/conda/lib/python3.12/site-packages (from vllm) (3.18.0)\n",
+      "Collecting partial-json-parser (from vllm)\n",
+      "  Using cached partial_json_parser-0.2.1.1.post5-py3-none-any.whl.metadata (6.1 kB)\n",
+      "Requirement already satisfied: pyzmq in /opt/conda/lib/python3.12/site-packages (from vllm) (26.2.0)\n",
+      "Collecting msgspec (from vllm)\n",
+      "  Using cached msgspec-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.9 kB)\n",
+      "Collecting gguf==0.10.0 (from vllm)\n",
+      "  Using cached gguf-0.10.0-py3-none-any.whl.metadata (3.5 kB)\n",
+      "Requirement already satisfied: importlib_metadata in /opt/conda/lib/python3.12/site-packages (from vllm) (8.5.0)\n",
+      "Collecting mistral_common>=1.5.4 (from mistral_common[opencv]>=1.5.4->vllm)\n",
+      "  Using cached mistral_common-1.5.4-py3-none-any.whl.metadata (4.5 kB)\n",
+      "Collecting opencv-python-headless>=4.11.0 (from vllm)\n",
+      "  Using cached opencv_python_headless-4.11.0.86-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (20 kB)\n",
+      "Requirement already satisfied: pyyaml in /opt/conda/lib/python3.12/site-packages (from vllm) (6.0.2)\n",
+      "Requirement already satisfied: six>=1.16.0 in /opt/conda/lib/python3.12/site-packages (from vllm) (1.16.0)\n",
+      "Requirement already satisfied: setuptools>=74.1.1 in /opt/conda/lib/python3.12/site-packages (from vllm) (75.3.0)\n",
+      "Collecting einops (from vllm)\n",
+      "  Using cached einops-0.8.1-py3-none-any.whl.metadata (13 kB)\n",
+      "Collecting compressed-tensors==0.9.2 (from vllm)\n",
+      "  Using cached compressed_tensors-0.9.2-py3-none-any.whl.metadata (7.0 kB)\n",
+      "Collecting depyf==0.18.0 (from vllm)\n",
+      "  Using cached depyf-0.18.0-py3-none-any.whl.metadata (7.1 kB)\n",
+      "Collecting cloudpickle (from vllm)\n",
+      "  Using cached cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n",
+      "Collecting watchfiles (from vllm)\n",
+      "  Using cached watchfiles-1.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.9 kB)\n",
+      "Requirement already satisfied: python-json-logger in /opt/conda/lib/python3.12/site-packages (from vllm) (2.0.7)\n",
+      "Requirement already satisfied: scipy in /opt/conda/lib/python3.12/site-packages (from vllm) (1.15.2)\n",
+      "Collecting ninja (from vllm)\n",
+      "  Using cached ninja-1.11.1.4-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (5.0 kB)\n",
+      "Collecting numba==0.61 (from vllm)\n",
+      "  Using cached numba-0.61.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (2.8 kB)\n",
+      "Collecting ray!=2.44.*,>=2.43.0 (from ray[cgraph]!=2.44.*,>=2.43.0->vllm)\n",
+      "  Using cached ray-2.43.0-cp312-cp312-manylinux2014_x86_64.whl.metadata (19 kB)\n",
+      "Collecting torch==2.6.0 (from vllm)\n",
+      "  Using cached torch-2.6.0-cp312-cp312-manylinux1_x86_64.whl.metadata (28 kB)\n",
+      "Collecting torchaudio==2.6.0 (from vllm)\n",
+      "  Using cached torchaudio-2.6.0-cp312-cp312-manylinux1_x86_64.whl.metadata (6.6 kB)\n",
+      "Collecting torchvision==0.21.0 (from vllm)\n",
+      "  Using cached torchvision-0.21.0-cp312-cp312-manylinux1_x86_64.whl.metadata (6.1 kB)\n",
+      "Collecting xformers==0.0.29.post2 (from vllm)\n",
+      "  Using cached xformers-0.0.29.post2-cp312-cp312-manylinux_2_28_x86_64.whl.metadata (1.2 kB)\n",
+      "Collecting astor (from depyf==0.18.0->vllm)\n",
+      "  Using cached astor-0.8.1-py2.py3-none-any.whl.metadata (4.2 kB)\n",
+      "Requirement already satisfied: dill in /opt/conda/lib/python3.12/site-packages (from depyf==0.18.0->vllm) (0.3.9)\n",
+      "Collecting llvmlite<0.45,>=0.44.0dev0 (from numba==0.61->vllm)\n",
+      "  Using cached llvmlite-0.44.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.0 kB)\n",
+      "Collecting interegular (from outlines==0.1.11->vllm)\n",
+      "  Using cached interegular-0.3.3-py37-none-any.whl.metadata (3.0 kB)\n",
+      "Requirement already satisfied: jinja2 in /opt/conda/lib/python3.12/site-packages (from outlines==0.1.11->vllm) (3.1.4)\n",
+      "Requirement already satisfied: nest_asyncio in /opt/conda/lib/python3.12/site-packages (from outlines==0.1.11->vllm) (1.6.0)\n",
+      "Collecting diskcache (from outlines==0.1.11->vllm)\n",
+      "  Using cached diskcache-5.6.3-py3-none-any.whl.metadata (20 kB)\n",
+      "Requirement already satisfied: referencing in /opt/conda/lib/python3.12/site-packages (from outlines==0.1.11->vllm) (0.35.1)\n",
+      "Requirement already satisfied: jsonschema in /opt/conda/lib/python3.12/site-packages (from outlines==0.1.11->vllm) (4.23.0)\n",
+      "Collecting pycountry (from outlines==0.1.11->vllm)\n",
+      "  Using cached pycountry-24.6.1-py3-none-any.whl.metadata (12 kB)\n",
+      "Collecting airportsdata (from outlines==0.1.11->vllm)\n",
+      "  Using cached airportsdata-20250224-py3-none-any.whl.metadata (9.0 kB)\n",
+      "Collecting outlines_core==0.1.26 (from outlines==0.1.11->vllm)\n",
+      "  Using cached outlines_core-0.1.26-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.8 kB)\n",
+      "Requirement already satisfied: networkx in /opt/conda/lib/python3.12/site-packages (from torch==2.6.0->vllm) (3.4.2)\n",
+      "Requirement already satisfied: fsspec in /opt/conda/lib/python3.12/site-packages (from torch==2.6.0->vllm) (2025.3.0)\n",
+      "Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch==2.6.0->vllm)\n",
+      "  Using cached nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n",
+      "Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch==2.6.0->vllm)\n",
+      "  Using cached nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n",
+      "Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch==2.6.0->vllm)\n",
+      "  Using cached nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n",
+      "Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch==2.6.0->vllm)\n",
+      "  Using cached nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n",
+      "Collecting nvidia-cublas-cu12==12.4.5.8 (from torch==2.6.0->vllm)\n",
+      "  Using cached nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n",
+      "Collecting nvidia-cufft-cu12==11.2.1.3 (from torch==2.6.0->vllm)\n",
+      "  Using cached nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n",
+      "Collecting nvidia-curand-cu12==10.3.5.147 (from torch==2.6.0->vllm)\n",
+      "  Using cached nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n",
+      "Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch==2.6.0->vllm)\n",
+      "  Using cached nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n",
+      "Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch==2.6.0->vllm)\n",
+      "  Using cached nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n",
+      "Collecting nvidia-cusparselt-cu12==0.6.2 (from torch==2.6.0->vllm)\n",
+      "  Using cached nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n",
+      "Collecting nvidia-nccl-cu12==2.21.5 (from torch==2.6.0->vllm)\n",
+      "  Using cached nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n",
+      "Collecting nvidia-nvtx-cu12==12.4.127 (from torch==2.6.0->vllm)\n",
+      "  Using cached nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n",
+      "Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch==2.6.0->vllm)\n",
+      "  Using cached nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n",
+      "Collecting triton==3.2.0 (from torch==2.6.0->vllm)\n",
+      "  Using cached triton-3.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n",
+      "Collecting sympy==1.13.1 (from torch==2.6.0->vllm)\n",
+      "  Using cached sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n",
+      "Collecting nanobind>=2.0.0 (from xgrammar==0.1.17->vllm)\n",
+      "  Using cached nanobind-2.6.1-py3-none-any.whl.metadata (1.8 kB)\n",
+      "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /opt/conda/lib/python3.12/site-packages (from sympy==1.13.1->torch==2.6.0->vllm) (1.3.0)\n",
+      "Requirement already satisfied: starlette<0.47.0,>=0.40.0 in /opt/conda/lib/python3.12/site-packages (from fastapi>=0.115.0->fastapi[standard]>=0.115.0->vllm) (0.46.1)\n",
+      "Collecting fastapi-cli>=0.0.5 (from fastapi-cli[standard]>=0.0.5; extra == \"standard\"->fastapi[standard]>=0.115.0->vllm)\n",
+      "  Using cached fastapi_cli-0.0.7-py3-none-any.whl.metadata (6.2 kB)\n",
+      "Requirement already satisfied: httpx>=0.23.0 in /opt/conda/lib/python3.12/site-packages (from fastapi[standard]>=0.115.0->vllm) (0.27.2)\n",
+      "Collecting jinja2 (from outlines==0.1.11->vllm)\n",
+      "  Using cached jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)\n",
+      "Requirement already satisfied: python-multipart>=0.0.18 in /opt/conda/lib/python3.12/site-packages (from fastapi[standard]>=0.115.0->vllm) (0.0.20)\n",
+      "Collecting email-validator>=2.0.0 (from fastapi[standard]>=0.115.0->vllm)\n",
+      "  Using cached email_validator-2.2.0-py3-none-any.whl.metadata (25 kB)\n",
+      "Requirement already satisfied: uvicorn>=0.12.0 in /opt/conda/lib/python3.12/site-packages (from uvicorn[standard]>=0.12.0; extra == \"standard\"->fastapi[standard]>=0.115.0->vllm) (0.34.0)\n",
+      "Requirement already satisfied: packaging>=20.9 in /opt/conda/lib/python3.12/site-packages (from huggingface-hub>=0.30.0->huggingface-hub[hf_xet]>=0.30.0->vllm) (24.1)\n",
+      "Collecting hf-xet>=0.1.4 (from huggingface-hub[hf_xet]>=0.30.0->vllm)\n",
+      "  Using cached hf_xet-1.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (494 bytes)\n",
+      "Requirement already satisfied: anyio<5,>=3.5.0 in /opt/conda/lib/python3.12/site-packages (from openai>=1.52.0->vllm) (4.6.2.post1)\n",
+      "Requirement already satisfied: distro<2,>=1.7.0 in /opt/conda/lib/python3.12/site-packages (from openai>=1.52.0->vllm) (1.9.0)\n",
+      "Requirement already satisfied: jiter<1,>=0.4.0 in /opt/conda/lib/python3.12/site-packages (from openai>=1.52.0->vllm) (0.9.0)\n",
+      "Requirement already satisfied: sniffio in /opt/conda/lib/python3.12/site-packages (from openai>=1.52.0->vllm) (1.3.1)\n",
+      "Requirement already satisfied: annotated-types>=0.6.0 in /opt/conda/lib/python3.12/site-packages (from pydantic>=2.9->vllm) (0.7.0)\n",
+      "Requirement already satisfied: pydantic-core==2.23.4 in /opt/conda/lib/python3.12/site-packages (from pydantic>=2.9->vllm) (2.23.4)\n",
+      "Requirement already satisfied: click>=7.0 in /opt/conda/lib/python3.12/site-packages (from ray!=2.44.*,>=2.43.0->ray[cgraph]!=2.44.*,>=2.43.0->vllm) (8.1.8)\n",
+      "Requirement already satisfied: msgpack<2.0.0,>=1.0.0 in /opt/conda/lib/python3.12/site-packages (from ray!=2.44.*,>=2.43.0->ray[cgraph]!=2.44.*,>=2.43.0->vllm) (1.1.0)\n",
+      "Requirement already satisfied: aiosignal in /opt/conda/lib/python3.12/site-packages (from ray!=2.44.*,>=2.43.0->ray[cgraph]!=2.44.*,>=2.43.0->vllm) (1.3.2)\n",
+      "Requirement already satisfied: frozenlist in /opt/conda/lib/python3.12/site-packages (from ray!=2.44.*,>=2.43.0->ray[cgraph]!=2.44.*,>=2.43.0->vllm) (1.5.0)\n",
+      "Collecting cupy-cuda12x (from ray[cgraph]!=2.44.*,>=2.43.0->vllm)\n",
+      "  Using cached cupy_cuda12x-13.4.1-cp312-cp312-manylinux2014_x86_64.whl.metadata (2.6 kB)\n",
+      "Requirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.12/site-packages (from requests>=2.26.0->vllm) (3.4.0)\n",
+      "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.12/site-packages (from requests>=2.26.0->vllm) (3.10)\n",
+      "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.12/site-packages (from requests>=2.26.0->vllm) (2.2.3)\n",
+      "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.12/site-packages (from requests>=2.26.0->vllm) (2024.8.30)\n",
+      "Requirement already satisfied: regex>=2022.1.18 in /opt/conda/lib/python3.12/site-packages (from tiktoken>=0.6.0->vllm) (2024.11.6)\n",
+      "Collecting safetensors>=0.4.3 (from transformers>=4.51.0->vllm)\n",
+      "  Using cached safetensors-0.5.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.8 kB)\n",
+      "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /opt/conda/lib/python3.12/site-packages (from aiohttp->vllm) (2.6.1)\n",
+      "Requirement already satisfied: attrs>=17.3.0 in /opt/conda/lib/python3.12/site-packages (from aiohttp->vllm) (24.2.0)\n",
+      "Requirement already satisfied: multidict<7.0,>=4.5 in /opt/conda/lib/python3.12/site-packages (from aiohttp->vllm) (6.2.0)\n",
+      "Requirement already satisfied: propcache>=0.2.0 in /opt/conda/lib/python3.12/site-packages (from aiohttp->vllm) (0.3.1)\n",
+      "Requirement already satisfied: yarl<2.0,>=1.17.0 in /opt/conda/lib/python3.12/site-packages (from aiohttp->vllm) (1.18.3)\n",
+      "Requirement already satisfied: zipp>=3.20 in /opt/conda/lib/python3.12/site-packages (from importlib_metadata->vllm) (3.21.0)\n",
+      "Requirement already satisfied: dnspython>=2.0.0 in /opt/conda/lib/python3.12/site-packages (from email-validator>=2.0.0->fastapi[standard]>=0.115.0->vllm) (2.7.0)\n",
+      "Requirement already satisfied: typer>=0.12.3 in /opt/conda/lib/python3.12/site-packages (from fastapi-cli>=0.0.5->fastapi-cli[standard]>=0.0.5; extra == \"standard\"->fastapi[standard]>=0.115.0->vllm) (0.15.2)\n",
+      "Collecting rich-toolkit>=0.11.1 (from fastapi-cli>=0.0.5->fastapi-cli[standard]>=0.0.5; extra == \"standard\"->fastapi[standard]>=0.115.0->vllm)\n",
+      "  Using cached rich_toolkit-0.14.1-py3-none-any.whl.metadata (999 bytes)\n",
+      "Requirement already satisfied: httpcore==1.* in /opt/conda/lib/python3.12/site-packages (from httpx>=0.23.0->fastapi[standard]>=0.115.0->vllm) (1.0.6)\n",
+      "Requirement already satisfied: h11<0.15,>=0.13 in /opt/conda/lib/python3.12/site-packages (from httpcore==1.*->httpx>=0.23.0->fastapi[standard]>=0.115.0->vllm) (0.14.0)\n",
+      "Requirement already satisfied: MarkupSafe>=2.0 in /opt/conda/lib/python3.12/site-packages (from jinja2->outlines==0.1.11->vllm) (3.0.2)\n",
+      "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /opt/conda/lib/python3.12/site-packages (from jsonschema->outlines==0.1.11->vllm) (2024.10.1)\n",
+      "Requirement already satisfied: rpds-py>=0.7.1 in /opt/conda/lib/python3.12/site-packages (from jsonschema->outlines==0.1.11->vllm) (0.21.0)\n",
+      "Collecting httptools>=0.6.3 (from uvicorn[standard]>=0.12.0; extra == \"standard\"->fastapi[standard]>=0.115.0->vllm)\n",
+      "  Using cached httptools-0.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.6 kB)\n",
+      "Requirement already satisfied: python-dotenv>=0.13 in /opt/conda/lib/python3.12/site-packages (from uvicorn[standard]>=0.12.0; extra == \"standard\"->fastapi[standard]>=0.115.0->vllm) (1.1.0)\n",
+      "Collecting uvloop!=0.15.0,!=0.15.1,>=0.14.0 (from uvicorn[standard]>=0.12.0; extra == \"standard\"->fastapi[standard]>=0.115.0->vllm)\n",
+      "  Using cached uvloop-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.9 kB)\n",
+      "Requirement already satisfied: websockets>=10.4 in /opt/conda/lib/python3.12/site-packages (from uvicorn[standard]>=0.12.0; extra == \"standard\"->fastapi[standard]>=0.115.0->vllm) (15.0.1)\n",
+      "Collecting fastrlock>=0.5 (from cupy-cuda12x->ray[cgraph]!=2.44.*,>=2.43.0->vllm)\n",
+      "  Using cached fastrlock-0.8.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n",
+      "Requirement already satisfied: rich>=13.7.1 in /opt/conda/lib/python3.12/site-packages (from rich-toolkit>=0.11.1->fastapi-cli>=0.0.5->fastapi-cli[standard]>=0.0.5; extra == \"standard\"->fastapi[standard]>=0.115.0->vllm) (14.0.0)\n",
+      "Requirement already satisfied: shellingham>=1.3.0 in /opt/conda/lib/python3.12/site-packages (from typer>=0.12.3->fastapi-cli>=0.0.5->fastapi-cli[standard]>=0.0.5; extra == \"standard\"->fastapi[standard]>=0.115.0->vllm) (1.5.4)\n",
+      "Requirement already satisfied: markdown-it-py>=2.2.0 in /opt/conda/lib/python3.12/site-packages (from rich>=13.7.1->rich-toolkit>=0.11.1->fastapi-cli>=0.0.5->fastapi-cli[standard]>=0.0.5; extra == \"standard\"->fastapi[standard]>=0.115.0->vllm) (3.0.0)\n",
+      "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /opt/conda/lib/python3.12/site-packages (from rich>=13.7.1->rich-toolkit>=0.11.1->fastapi-cli>=0.0.5->fastapi-cli[standard]>=0.0.5; extra == \"standard\"->fastapi[standard]>=0.115.0->vllm) (2.18.0)\n",
+      "Requirement already satisfied: mdurl~=0.1 in /opt/conda/lib/python3.12/site-packages (from markdown-it-py>=2.2.0->rich>=13.7.1->rich-toolkit>=0.11.1->fastapi-cli>=0.0.5->fastapi-cli[standard]>=0.0.5; extra == \"standard\"->fastapi[standard]>=0.115.0->vllm) (0.1.2)\n",
+      "Using cached vllm-0.8.3-cp38-abi3-manylinux1_x86_64.whl (294.0 MB)\n",
+      "Using cached compressed_tensors-0.9.2-py3-none-any.whl (97 kB)\n",
+      "Using cached depyf-0.18.0-py3-none-any.whl (38 kB)\n",
+      "Using cached gguf-0.10.0-py3-none-any.whl (71 kB)\n",
+      "Using cached lark-1.2.2-py3-none-any.whl (111 kB)\n",
+      "Using cached numba-0.61.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (3.9 MB)\n",
+      "Using cached outlines-0.1.11-py3-none-any.whl (87 kB)\n",
+      "Using cached torch-2.6.0-cp312-cp312-manylinux1_x86_64.whl (766.6 MB)\n",
+      "Using cached torchaudio-2.6.0-cp312-cp312-manylinux1_x86_64.whl (3.4 MB)\n",
+      "Using cached torchvision-0.21.0-cp312-cp312-manylinux1_x86_64.whl (7.2 MB)\n",
+      "Using cached xformers-0.0.29.post2-cp312-cp312-manylinux_2_28_x86_64.whl (44.3 MB)\n",
+      "Using cached xgrammar-0.1.17-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.3 MB)\n",
+      "Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m363.4/363.4 MB\u001b[0m \u001b[31m131.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+      "\u001b[?25hDownloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.8/13.8 MB\u001b[0m \u001b[31m120.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "\u001b[?25hDownloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m24.6/24.6 MB\u001b[0m \u001b[31m92.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m\n",
+      "\u001b[?25hDownloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m883.7/883.7 kB\u001b[0m \u001b[31m33.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "\u001b[?25hDownloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m664.8/664.8 MB\u001b[0m \u001b[31m77.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+      "\u001b[?25hDownloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m211.5/211.5 MB\u001b[0m \u001b[31m156.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+      "\u001b[?25hDownloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.3/56.3 MB\u001b[0m \u001b[31m130.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m\n",
+      "\u001b[?25hDownloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m127.9/127.9 MB\u001b[0m \u001b[31m155.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+      "\u001b[?25hDownloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m207.5/207.5 MB\u001b[0m \u001b[31m144.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+      "\u001b[?25hDownloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m150.1/150.1 MB\u001b[0m \u001b[31m76.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+      "\u001b[?25hDownloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m188.7/188.7 MB\u001b[0m \u001b[31m75.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+      "\u001b[?25hDownloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.1/21.1 MB\u001b[0m \u001b[31m48.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m\n",
+      "\u001b[?25hDownloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n",
+      "Downloading outlines_core-0.1.26-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (343 kB)\n",
+      "Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.2/6.2 MB\u001b[0m \u001b[31m57.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "\u001b[?25hDownloading triton-3.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.2 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m253.2/253.2 MB\u001b[0m \u001b[31m127.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+      "\u001b[?25hDownloading huggingface_hub-0.30.2-py3-none-any.whl (481 kB)\n",
+      "Downloading llguidance-0.7.13-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.8 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.8/13.8 MB\u001b[0m \u001b[31m66.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m\n",
+      "\u001b[?25hDownloading lm_format_enforcer-0.10.11-py3-none-any.whl (44 kB)\n",
+      "Downloading mistral_common-1.5.4-py3-none-any.whl (6.5 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.5/6.5 MB\u001b[0m \u001b[31m84.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "\u001b[?25hDownloading opencv_python_headless-4.11.0.86-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (50.0 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m50.0/50.0 MB\u001b[0m \u001b[31m118.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+      "\u001b[?25hDownloading prometheus_fastapi_instrumentator-7.1.0-py3-none-any.whl (19 kB)\n",
+      "Downloading ray-2.43.0-cp312-cp312-manylinux2014_x86_64.whl (67.8 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m67.8/67.8 MB\u001b[0m \u001b[31m135.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+      "\u001b[?25hDownloading sentencepiece-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m39.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "\u001b[?25hDownloading transformers-4.51.1-py3-none-any.whl (10.4 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m10.4/10.4 MB\u001b[0m \u001b[31m104.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "\u001b[?25hDownloading blake3-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (374 kB)\n",
+      "Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n",
+      "Downloading einops-0.8.1-py3-none-any.whl (64 kB)\n",
+      "Downloading msgspec-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (213 kB)\n",
+      "Downloading ninja-1.11.1.4-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (422 kB)\n",
+      "Downloading partial_json_parser-0.2.1.1.post5-py3-none-any.whl (10 kB)\n",
+      "Downloading py_cpuinfo-9.0.0-py3-none-any.whl (22 kB)\n",
+      "Downloading watchfiles-1.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (454 kB)\n",
+      "Downloading email_validator-2.2.0-py3-none-any.whl (33 kB)\n",
+      "Downloading fastapi_cli-0.0.7-py3-none-any.whl (10 kB)\n",
+      "Downloading hf_xet-1.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (53.8 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m53.8/53.8 MB\u001b[0m \u001b[31m117.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+      "\u001b[?25hDownloading interegular-0.3.3-py37-none-any.whl (23 kB)\n",
+      "Downloading jinja2-3.1.6-py3-none-any.whl (134 kB)\n",
+      "Downloading llvmlite-0.44.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.4 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m42.4/42.4 MB\u001b[0m \u001b[31m128.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m\n",
+      "\u001b[?25hDownloading nanobind-2.6.1-py3-none-any.whl (238 kB)\n",
+      "Downloading safetensors-0.5.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (471 kB)\n",
+      "Downloading airportsdata-20250224-py3-none-any.whl (913 kB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m913.7/913.7 kB\u001b[0m \u001b[31m21.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "\u001b[?25hDownloading astor-0.8.1-py2.py3-none-any.whl (27 kB)\n",
+      "Downloading cupy_cuda12x-13.4.1-cp312-cp312-manylinux2014_x86_64.whl (105.3 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m105.3/105.3 MB\u001b[0m \u001b[31m142.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+      "\u001b[?25hDownloading diskcache-5.6.3-py3-none-any.whl (45 kB)\n",
+      "Downloading pycountry-24.6.1-py3-none-any.whl (6.3 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.3/6.3 MB\u001b[0m \u001b[31m76.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "\u001b[?25hDownloading fastrlock-0.8.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n",
+      "Downloading httptools-0.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (510 kB)\n",
+      "Downloading rich_toolkit-0.14.1-py3-none-any.whl (24 kB)\n",
+      "Downloading uvloop-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.7 MB)\n",
+      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.7/4.7 MB\u001b[0m \u001b[31m68.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+      "\u001b[?25hInstalling collected packages: triton, sentencepiece, py-cpuinfo, nvidia-cusparselt-cu12, nanobind, fastrlock, blake3, uvloop, sympy, safetensors, pycountry, partial-json-parser, opencv-python-headless, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, ninja, msgspec, llvmlite, llguidance, lark, jinja2, interegular, httptools, hf-xet, gguf, email-validator, einops, diskcache, cupy-cuda12x, cloudpickle, astor, airportsdata, watchfiles, nvidia-cusparse-cu12, nvidia-cudnn-cu12, numba, huggingface-hub, depyf, rich-toolkit, prometheus-fastapi-instrumentator, nvidia-cusolver-cu12, lm-format-enforcer, transformers, torch, ray, outlines_core, mistral_common, fastapi-cli, xgrammar, xformers, torchvision, torchaudio, outlines, compressed-tensors, vllm\n",
+      "  Attempting uninstall: sympy\n",
+      "    Found existing installation: sympy 1.13.3\n",
+      "    Uninstalling sympy-1.13.3:\n",
+      "      Successfully uninstalled sympy-1.13.3\n",
+      "  Attempting uninstall: jinja2\n",
+      "    Found existing installation: Jinja2 3.1.4\n",
+      "    Uninstalling Jinja2-3.1.4:\n",
+      "      Successfully uninstalled Jinja2-3.1.4\n",
+      "  Attempting uninstall: huggingface-hub\n",
+      "    Found existing installation: huggingface-hub 0.29.3\n",
+      "    Uninstalling huggingface-hub-0.29.3:\n",
+      "      Successfully uninstalled huggingface-hub-0.29.3\n",
+      "  Attempting uninstall: torch\n",
+      "    Found existing installation: torch 2.2.1+cu118\n",
+      "    Uninstalling torch-2.2.1+cu118:\n",
+      "      Successfully uninstalled torch-2.2.1+cu118\n",
+      "  Attempting uninstall: torchvision\n",
+      "    Found existing installation: torchvision 0.17.1+cu118\n",
+      "    Uninstalling torchvision-0.17.1+cu118:\n",
+      "      Successfully uninstalled torchvision-0.17.1+cu118\n",
+      "  Attempting uninstall: torchaudio\n",
+      "    Found existing installation: torchaudio 2.2.1+cu118\n",
+      "    Uninstalling torchaudio-2.2.1+cu118:\n",
+      "      Successfully uninstalled torchaudio-2.2.1+cu118\n",
+      "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
+      "mattergen 1.0 requires torch==2.2.1+cu118; sys_platform == \"linux\", but you have torch 2.6.0 which is incompatible.\n",
+      "mattergen 1.0 requires torchaudio==2.2.1+cu118; sys_platform == \"linux\", but you have torchaudio 2.6.0 which is incompatible.\n",
+      "mattergen 1.0 requires torchvision==0.17.1+cu118; sys_platform == \"linux\", but you have torchvision 0.21.0 which is incompatible.\u001b[0m\u001b[31m\n",
+      "\u001b[0mSuccessfully installed airportsdata-20250224 astor-0.8.1 blake3-1.0.4 cloudpickle-3.1.1 compressed-tensors-0.9.2 cupy-cuda12x-13.4.1 depyf-0.18.0 diskcache-5.6.3 einops-0.8.1 email-validator-2.2.0 fastapi-cli-0.0.7 fastrlock-0.8.3 gguf-0.10.0 hf-xet-1.0.3 httptools-0.6.4 huggingface-hub-0.30.2 interegular-0.3.3 jinja2-3.1.6 lark-1.2.2 llguidance-0.7.13 llvmlite-0.44.0 lm-format-enforcer-0.10.11 mistral_common-1.5.4 msgspec-0.19.0 nanobind-2.6.1 ninja-1.11.1.4 numba-0.61.0 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 opencv-python-headless-4.11.0.86 outlines-0.1.11 outlines_core-0.1.26 partial-json-parser-0.2.1.1.post5 prometheus-fastapi-instrumentator-7.1.0 py-cpuinfo-9.0.0 pycountry-24.6.1 ray-2.43.0 rich-toolkit-0.14.1 safetensors-0.5.3 sentencepiece-0.2.0 sympy-1.13.1 torch-2.6.0 torchaudio-2.6.0 torchvision-0.21.0 transformers-4.51.1 triton-3.2.0 uvloop-0.21.0 vllm-0.8.3 watchfiles-1.0.5 xformers-0.0.29.post2 xgrammar-0.1.17\n"
+     ]
+    }
+   ],
+   "source": [
+    "!pip install vllm"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "56526343-4ae8-4610-a647-27276baf5edd",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "!pip install bitsandbytes>=0.45.3"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
    "id": "0ad22fdf-4092-4097-b478-3c993213c152",
    "metadata": {},
    "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/opt/conda/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
+      "  from .autonotebook import tqdm as notebook_tqdm\n"
+     ]
+    },
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "INFO 04-07 13:24:32 __init__.py:190] Automatically detected platform cuda.\n"
+      "INFO 04-10 08:48:29 [__init__.py:239] Automatically detected platform cuda.\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2025-04-10 08:48:30,732\tINFO util.py:154 -- Missing packages: ['ipywidgets']. Run `pip install -U ipywidgets`, then restart the notebook server for rich notebook output.\n"
      ]
     }
    ],
@@ -18,7 +375,38 @@
     "import vllm\n",
     "import pickle\n",
     "import torch\n",
-    "import time"
+    "import time\n",
+    "import json"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "aafc6ae6-ae6c-44d6-ac86-8c5e356edfe1",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "Fetching 11 files: 100%|██████████| 11/11 [00:09<00:00,  1.18it/s]\n"
+     ]
+    }
+   ],
+   "source": [
+    "hf_token=\"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\"\n",
+    "from huggingface_hub import snapshot_download\n",
+    "snapshot_path=snapshot_download(\"pilar12/nomad-api-writer-lora\", revision= 'v_27', token=hf_token)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "ac3fac68-1177-46ed-a1d2-4bde37931004",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "snapshot_path = '/home/jovyan/.cache/huggingface/hub/models--pilar12--nomad-api-writer-lora/snapshots/f0d29149ccca6ca2cb75f770ecded2835f711f48/'"
    ]
   },
   {
@@ -49,13 +437,35 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "lora_path=\"huggingface/hub/models--pilar12--nomad-api-writer-lora/snapshots/4cf37226134cf2256c89a20cfb782bdb7d42d9d0\"\n",
+    "# lora_path=\"huggingface/hub/models--pilar12--nomad-api-writer-lora/snapshots/4cf37226134cf2256c89a20cfb782bdb7d42d9d0\"\n",
+    "lora_path = snapshot_path\n",
     "system_prompt, chat_template, eval_chat_template, full_context, system_context = load_templates(lora_path)"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 6,
+   "id": "cf768300-1e01-42dc-a43a-2083ff09a502",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "adapter_config = json.load(open(snapshot_path+\"/adapter_config.json\",\"r\"))\n",
+    "model_id = adapter_config['base_model_name_or_path']"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "id": "ccc29fab-5624-47dd-a8eb-2803f9320987",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "model_id_mapper={'unsloth/meta-llama-3.1-8b-instruct-bnb-4bit':'unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit'}"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
    "id": "07f38d9a-bbd2-4c76-997c-1858d82fce88",
    "metadata": {},
    "outputs": [
@@ -63,7 +473,7 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "GPU = NVIDIA L40S. Max memory = 44.422 GB.\n",
+      "GPU = NVIDIA A40. Max memory = 44.339 GB.\n",
       "0.0 GB of memory reserved.\n"
      ]
     }
@@ -78,95 +488,131 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": null,
    "id": "e157cdd4-1320-497a-b48e-426d1582a281",
-   "metadata": {},
+   "metadata": {
+    "scrolled": true
+   },
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "INFO 04-07 13:24:48 config.py:542] This model supports multiple tasks: {'embed', 'reward', 'generate', 'score', 'classify'}. Defaulting to 'generate'.\n",
-      "WARNING 04-07 13:24:50 config.py:621] bitsandbytes quantization is not fully optimized yet. The speed can be slower than non-quantized models.\n",
-      "WARNING 04-07 13:24:50 arg_utils.py:1145] The model has a long context length (131072). This may cause OOM errors during the initial memory profiling phase, or result in low performance due to small KV cache space. Consider setting --max-model-len to a smaller value.\n",
-      "WARNING 04-07 13:24:50 config.py:2155] bitsandbytes quantization is not tested with LoRA yet.\n",
-      "INFO 04-07 13:24:50 llm_engine.py:234] Initializing a V0 LLM engine (v0.7.2) with config: model='unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit', speculative_config=None, tokenizer='unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, override_neuron_config=None, tokenizer_revision=None, trust_remote_code=True, dtype=torch.bfloat16, max_seq_len=131072, download_dir=None, load_format=LoadFormat.BITSANDBYTES, tensor_parallel_size=1, pipeline_parallel_size=1, disable_custom_all_reduce=False, quantization=bitsandbytes, enforce_eager=False, kv_cache_dtype=auto,  device_config=cuda, decoding_config=DecodingConfig(guided_decoding_backend='xgrammar'), observability_config=ObservabilityConfig(otlp_traces_endpoint=None, collect_model_forward_time=False, collect_model_execute_time=False), seed=0, served_model_name=unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit, num_scheduler_steps=1, multi_step_stream_outputs=True, enable_prefix_caching=True, chunked_prefill_enabled=False, use_async_output_proc=True, disable_mm_preprocessor_cache=False, mm_processor_kwargs=None, pooler_config=None, compilation_config={\"splitting_ops\":[],\"compile_sizes\":[],\"cudagraph_capture_sizes\":[256,248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,4,2,1],\"max_capture_size\":256}, use_cached_outputs=False, \n",
-      "INFO 04-07 13:24:51 cuda.py:230] Using Flash Attention backend.\n",
-      "INFO 04-07 13:24:51 model_runner.py:1110] Starting to load model unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit...\n",
-      "INFO 04-07 13:24:52 loader.py:1102] Loading weights with BitsAndBytes quantization.  May take a while ...\n",
-      "INFO 04-07 13:24:53 weight_utils.py:252] Using model weights format ['*.safetensors']\n"
-     ]
-    },
-    {
-     "data": {
-      "application/vnd.jupyter.widget-view+json": {
-       "model_id": "3d048c49170f45ce9a5ebb5997f5718c",
-       "version_major": 2,
-       "version_minor": 0
-      },
-      "text/plain": [
-       "Loading safetensors checkpoint shards:   0% Completed | 0/1 [00:00<?, ?it/s]\n"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "application/vnd.jupyter.widget-view+json": {
-       "model_id": "e24533100ec4480d9eb366cd6842faee",
-       "version_major": 2,
-       "version_minor": 0
-      },
-      "text/plain": [
-       "Loading safetensors checkpoint shards:   0% Completed | 0/1 [00:00<?, ?it/s]\n"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "INFO 04-07 13:25:02 model_runner.py:1115] Loading model weights took 5.3463 GB\n",
-      "INFO 04-07 13:25:02 punica_selector.py:18] Using PunicaWrapperGPU.\n",
-      "INFO 04-07 13:25:18 worker.py:267] Memory profiling takes 16.25 seconds\n",
-      "INFO 04-07 13:25:18 worker.py:267] the current vLLM instance can use total_gpu_memory (44.42GiB) x gpu_memory_utilization (0.90) = 39.98GiB\n",
-      "INFO 04-07 13:25:18 worker.py:267] model weights take 5.35GiB; non_torch_memory takes 0.08GiB; PyTorch activation peak memory takes 13.62GiB; the rest of the memory reserved for KV Cache is 20.93GiB.\n",
-      "INFO 04-07 13:25:18 executor_base.py:110] # CUDA blocks: 10716, # CPU blocks: 2048\n",
-      "INFO 04-07 13:25:18 executor_base.py:115] Maximum concurrency for 131072 tokens per request: 1.31x\n",
-      "INFO 04-07 13:25:20 model_runner.py:1434] Capturing cudagraphs for decoding. This may lead to unexpected consequences if the model is not static. To run the model in eager mode, set 'enforce_eager=True' or use '--enforce-eager' in the CLI. If out-of-memory error occurs during cudagraph capture, consider decreasing `gpu_memory_utilization` or switching to eager mode. You can also reduce the `max_num_seqs` as needed to decrease memory usage.\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "Capturing CUDA graph shapes: 100%|██████████| 35/35 [00:18<00:00,  1.92it/s]"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "INFO 04-07 13:25:39 model_runner.py:1562] Graph capturing finished in 18 secs, took 0.83 GiB\n",
-      "INFO 04-07 13:25:39 llm_engine.py:431] init engine (profile, create kv cache, warmup model) took 36.89 seconds\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "GPU = NVIDIA L40S. Max memory = 44.422 GB.\n",
-      "27.01 GB of memory reserved.\n"
+      "INFO 04-10 08:49:55 [config.py:600] This model supports multiple tasks: {'score', 'classify', 'reward', 'generate', 'embed'}. Defaulting to 'generate'.\n",
+      "WARNING 04-10 08:49:56 [config.py:679] bitsandbytes quantization is not fully optimized yet. The speed can be slower than non-quantized models.\n",
+      "INFO 04-10 08:49:57 [config.py:1780] Chunked prefill is enabled with max_num_batched_tokens=8192.\n",
+      "WARNING 04-10 08:49:57 [config.py:2468] LoRA with chunked prefill is still experimental and may be unstable.\n",
+      "INFO 04-10 08:49:59 [core.py:61] Initializing a V1 LLM engine (v0.8.3) with config: model='unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit', speculative_config=None, tokenizer='unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, override_neuron_config=None, tokenizer_revision=None, trust_remote_code=True, dtype=torch.bfloat16, max_seq_len=131072, download_dir=None, load_format=LoadFormat.BITSANDBYTES, tensor_parallel_size=1, pipeline_parallel_size=1, disable_custom_all_reduce=False, quantization=bitsandbytes, enforce_eager=False, kv_cache_dtype=auto,  device_config=cuda, decoding_config=DecodingConfig(guided_decoding_backend='xgrammar', reasoning_backend=None), observability_config=ObservabilityConfig(show_hidden_metrics=False, otlp_traces_endpoint=None, collect_model_forward_time=False, collect_model_execute_time=False), seed=None, served_model_name=unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit, num_scheduler_steps=1, multi_step_stream_outputs=True, enable_prefix_caching=True, chunked_prefill_enabled=True, use_async_output_proc=True, disable_mm_preprocessor_cache=False, mm_processor_kwargs=None, pooler_config=None, compilation_config={\"level\":3,\"custom_ops\":[\"none\"],\"splitting_ops\":[\"vllm.unified_attention\",\"vllm.unified_attention_with_output\"],\"use_inductor\":true,\"compile_sizes\":[],\"use_cudagraph\":true,\"cudagraph_num_of_warmups\":1,\"cudagraph_capture_sizes\":[512,504,496,488,480,472,464,456,448,440,432,424,416,408,400,392,384,376,368,360,352,344,336,328,320,312,304,296,288,280,272,264,256,248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,4,2,1],\"max_capture_size\":512}\n",
+      "WARNING 04-10 08:49:59 [utils.py:2413] Methods determine_num_available_blocks,device_config,get_cache_block_size_bytes,initialize_cache not implemented in <vllm.v1.worker.gpu_worker.Worker object at 0x7f1e38c91310>\n",
+      "INFO 04-10 08:50:00 [parallel_state.py:957] rank 0 in world size 1 is assigned as DP rank 0, PP rank 0, TP rank 0\n",
+      "INFO 04-10 08:50:00 [cuda.py:221] Using Flash Attention backend on V1 engine.\n",
+      "INFO 04-10 08:50:00 [gpu_model_runner.py:1258] Starting to load model unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit...\n",
+      "WARNING 04-10 08:50:00 [config.py:3785] `torch.compile` is turned on, but the model unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit does not support it. Please open an issue on GitHub if you want it to be supported.\n",
+      "ERROR 04-10 08:50:00 [core.py:390] EngineCore hit an exception: Traceback (most recent call last):\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/v1/engine/core.py\", line 378, in run_engine_core\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     engine_core = EngineCoreProc(*args, **kwargs)\n",
+      "ERROR 04-10 08:50:00 [core.py:390]                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/v1/engine/core.py\", line 319, in __init__\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     super().__init__(vllm_config, executor_class, log_stats)\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/v1/engine/core.py\", line 67, in __init__\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     self.model_executor = executor_class(vllm_config)\n",
+      "ERROR 04-10 08:50:00 [core.py:390]                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/executor/executor_base.py\", line 52, in __init__\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     self._init_executor()\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/executor/uniproc_executor.py\", line 47, in _init_executor\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     self.collective_rpc(\"load_model\")\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/executor/uniproc_executor.py\", line 56, in collective_rpc\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     answer = run_method(self.driver_worker, method, args, kwargs)\n",
+      "ERROR 04-10 08:50:00 [core.py:390]              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/utils.py\", line 2347, in run_method\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     return func(*args, **kwargs)\n",
+      "ERROR 04-10 08:50:00 [core.py:390]            ^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/v1/worker/gpu_worker.py\", line 136, in load_model\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     self.model_runner.load_model()\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/v1/worker/gpu_model_runner.py\", line 1261, in load_model\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     self.model = get_model(vllm_config=self.vllm_config)\n",
+      "ERROR 04-10 08:50:00 [core.py:390]                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/model_executor/model_loader/__init__.py\", line 14, in get_model\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     return loader.load_model(vllm_config=vllm_config)\n",
+      "ERROR 04-10 08:50:00 [core.py:390]            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/model_executor/model_loader/loader.py\", line 1278, in load_model\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     model = _initialize_model(vllm_config=vllm_config)\n",
+      "ERROR 04-10 08:50:00 [core.py:390]             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/model_executor/model_loader/loader.py\", line 127, in _initialize_model\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     return model_class(vllm_config=vllm_config, prefix=prefix)\n",
+      "ERROR 04-10 08:50:00 [core.py:390]            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/model_executor/models/llama.py\", line 486, in __init__\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     self.model = self._init_model(vllm_config=vllm_config,\n",
+      "ERROR 04-10 08:50:00 [core.py:390]                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/model_executor/models/llama.py\", line 527, in _init_model\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     return LlamaModel(vllm_config=vllm_config,\n",
+      "ERROR 04-10 08:50:00 [core.py:390]            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/compilation/decorators.py\", line 151, in __init__\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     old_init(self, vllm_config=vllm_config, prefix=prefix, **kwargs)\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/model_executor/models/llama.py\", line 321, in __init__\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     self.start_layer, self.end_layer, self.layers = make_layers(\n",
+      "ERROR 04-10 08:50:00 [core.py:390]                                                     ^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/model_executor/models/utils.py\", line 610, in make_layers\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     maybe_offload_to_cpu(layer_fn(prefix=f\"{prefix}.{idx}\"))\n",
+      "ERROR 04-10 08:50:00 [core.py:390]                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/model_executor/models/llama.py\", line 323, in <lambda>\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     lambda prefix: layer_type(config=config,\n",
+      "ERROR 04-10 08:50:00 [core.py:390]                    ^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/model_executor/models/llama.py\", line 239, in __init__\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     self.self_attn = LlamaAttention(\n",
+      "ERROR 04-10 08:50:00 [core.py:390]                      ^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/model_executor/models/llama.py\", line 142, in __init__\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     self.qkv_proj = QKVParallelLinear(\n",
+      "ERROR 04-10 08:50:00 [core.py:390]                     ^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/model_executor/layers/linear.py\", line 833, in __init__\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     super().__init__(input_size=input_size,\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/model_executor/layers/linear.py\", line 384, in __init__\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     super().__init__(input_size,\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/model_executor/layers/linear.py\", line 231, in __init__\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     self.quant_method = quant_config.get_quant_method(self,\n",
+      "ERROR 04-10 08:50:00 [core.py:390]                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/model_executor/layers/quantization/bitsandbytes.py\", line 128, in get_quant_method\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     return BitsAndBytesLinearMethod(self)\n",
+      "ERROR 04-10 08:50:00 [core.py:390]            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/vllm/model_executor/layers/quantization/bitsandbytes.py\", line 158, in __init__\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     import bitsandbytes\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/bitsandbytes/__init__.py\", line 15, in <module>\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     from .nn import modules\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/bitsandbytes/nn/__init__.py\", line 21, in <module>\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     from .triton_based_modules import (\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/bitsandbytes/nn/triton_based_modules.py\", line 6, in <module>\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     from bitsandbytes.triton.dequantize_rowwise import dequantize_rowwise\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/bitsandbytes/triton/dequantize_rowwise.py\", line 18, in <module>\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     @triton.autotune(\n",
+      "ERROR 04-10 08:50:00 [core.py:390]      ^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/triton/runtime/autotuner.py\", line 368, in decorator\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     return Autotuner(fn, fn.arg_names, configs, key, reset_to_zero, restore_value, pre_hook=pre_hook,\n",
+      "ERROR 04-10 08:50:00 [core.py:390]            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/triton/runtime/autotuner.py\", line 130, in __init__\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     self.do_bench = driver.active.get_benchmarker()\n",
+      "ERROR 04-10 08:50:00 [core.py:390]                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/triton/runtime/driver.py\", line 23, in __getattr__\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     self._initialize_obj()\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/triton/runtime/driver.py\", line 20, in _initialize_obj\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     self._obj = self._init_fn()\n",
+      "ERROR 04-10 08:50:00 [core.py:390]                 ^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/triton/runtime/driver.py\", line 9, in _create_driver\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     return actives[0]()\n",
+      "ERROR 04-10 08:50:00 [core.py:390]            ^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/triton/backends/nvidia/driver.py\", line 450, in __init__\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     self.utils = CudaUtils()  # TODO: make static\n",
+      "ERROR 04-10 08:50:00 [core.py:390]                  ^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/triton/backends/nvidia/driver.py\", line 80, in __init__\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     mod = compile_module_from_src(Path(os.path.join(dirname, \"driver.c\")).read_text(), \"cuda_utils\")\n",
+      "ERROR 04-10 08:50:00 [core.py:390]           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/triton/backends/nvidia/driver.py\", line 57, in compile_module_from_src\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     so = _build(name, src_path, tmpdir, library_dirs(), include_dir, libraries)\n",
+      "ERROR 04-10 08:50:00 [core.py:390]          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "ERROR 04-10 08:50:00 [core.py:390]   File \"/opt/conda/lib/python3.12/site-packages/triton/runtime/build.py\", line 32, in _build\n",
+      "ERROR 04-10 08:50:00 [core.py:390]     raise RuntimeError(\"Failed to find C compiler. Please specify via CC environment variable.\")\n",
+      "ERROR 04-10 08:50:00 [core.py:390] RuntimeError: Failed to find C compiler. Please specify via CC environment variable.\n",
+      "ERROR 04-10 08:50:00 [core.py:390] \n",
+      "CRITICAL 04-10 08:50:00 [core_client.py:361] Got fatal signal from worker processes, shutting down. See stack trace above for root cause issue.\n"
      ]
     }
    ],
@@ -206,16 +652,6 @@
     "    return outputs"
    ]
   },
-  {
-   "cell_type": "code",
-   "execution_count": 9,
-   "id": "98e73835-5979-4403-b84b-cee38d469b8d",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "lora_path=\"work/ai-copiltot-ft/models/unsloth_Meta-Llama-3.1-8B-Instruct-bnb-4bit/version_27/lora_model/\""
-   ]
-  },
   {
    "cell_type": "code",
    "execution_count": 10,
@@ -812,9 +1248,9 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "vllm",
+   "display_name": "Python 3 (ipykernel)",
    "language": "python",
-   "name": "vllm"
+   "name": "python3"
   },
   "language_info": {
    "codemirror_mode": {
@@ -826,7 +1262,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.12.0"
+   "version": "3.12.7"
   }
  },
  "nbformat": 4,
-- 
GitLab


From 1fd0c4d6ce24b7add14161fa3c7b3fdb9290d22e Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Thu, 10 Apr 2025 11:47:02 +0200
Subject: [PATCH 03/28] add ignored files

---
 .dockerignore  |   0
 .gitignore     | 257 +++++++++++++++++++++++++++++++++++++++++++++++++
 .gitlab-ci.yml |  44 +++++++++
 3 files changed, 301 insertions(+)
 create mode 100644 .dockerignore
 create mode 100644 .gitignore
 create mode 100644 .gitlab-ci.yml

diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..e69de29
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8709572
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,257 @@
+# https://github.com/github/gitignore/blob/main/Python.gitignore
+
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+#  Usually these files are written by a python script from a template
+#  before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+.pybuilder/
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+#   For a library or package, you might want to ignore these files since the code is
+#   intended to run in multiple environments; otherwise, check them in:
+.python-version
+
+# pipenv
+#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+#   However, in case of collaboration, if having platform-specific dependencies or dependencies
+#   having no cross-platform support, pipenv may install dependencies that don't work, or not
+#   install all needed dependencies.
+#Pipfile.lock
+
+# poetry
+#   Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
+#   This is especially recommended for binary packages to ensure reproducibility, and is more
+#   commonly ignored for libraries.
+#   https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
+#poetry.lock
+
+# pdm
+#   Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
+#pdm.lock
+#   pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
+#   in version control.
+#   https://pdm.fming.dev/#use-with-ide
+.pdm.toml
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
+
+# PyCharm
+#  JetBrains specific template is maintained in a separate JetBrains.gitignore that can
+#  be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
+#  and can be added to the global gitignore or merged into this file.  For a more nuclear
+#  option (not recommended) you can uncomment the following to ignore the entire idea folder.
+.idea/
+
+
+# https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore/
+
+.vscode/*
+!.vscode/settings.json
+# !.vscode/tasks.json
+# !.vscode/launch.json
+# !.vscode/extensions.json
+!.vscode/*.code-snippets
+
+# Local History for Visual Studio Code
+.history/
+
+# Built Visual Studio Code Extensions
+*.vsix
+
+
+# https://github.com/github/gitignore/blob/main/Global/macOS.gitignore
+
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+
+# https://github.com/github/gitignore/blob/main/Global/Windows.gitignore
+
+# Windows thumbnail cache files
+Thumbs.db
+Thumbs.db:encryptable
+ehthumbs.db
+ehthumbs_vista.db
+
+# Dump file
+*.stackdump
+
+# Folder config file
+[Dd]esktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+
+# https://github.com/github/gitignore/blob/main/Global/Linux.gitignore
+
+*~
+
+# temporary files which can be created if a process still has a handle open of a deleted file
+.fuse_hidden*
+
+# KDE directory preferences
+.directory
+
+# Linux trash folder which might appear on any partition or disk
+.Trash-*
+
+# .nfs files are created when an open file is removed but is still being accessed
+.nfs*
+
+# local overwrites for docker-compose files
+docker-compose.local.yml
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..8a66630
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,44 @@
+image: gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-fair/ci-runner:latest
+
+variables:
+  DOCKER_TAG: ${CI_COMMIT_REF_SLUG}
+
+workflow:
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
+    - if: $CI_COMMIT_TAG
+      variables:
+        DOCKER_TAG: ${CI_COMMIT_REF_NAME}
+    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
+    - when: never
+
+stages:
+  - build
+
+.build:
+  stage: build
+  tags:
+    - docker-builder
+  image:
+    name: gcr.io/kaniko-project/executor:debug
+    entrypoint: [""]
+  variables:
+    IMAGE_TAG: latest
+    GIT_SUBMODULE_STRATEGY: recursive
+    GIT_SUBMODULE_DEPTH: 1
+    GIT_SUBMODULE_UPDATE_FLAGS: --jobs 4
+  before_script:
+    - echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"},\"$CI_DEPENDENCY_PROXY_SERVER\":{\"auth\":\"$(printf "%s:%s" ${CI_DEPENDENCY_PROXY_USER} "${CI_DEPENDENCY_PROXY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
+
+build:
+  extends: .build
+  script:
+    - /kaniko/executor
+      --context "${CI_PROJECT_DIR}"
+      --dockerfile "${CI_PROJECT_DIR}/Dockerfile"
+      --destination "${CI_REGISTRY_IMAGE}/jupyter:${DOCKER_TAG}"
+  rules:
+    - changes:
+      - ${CI_PROJECT_DIR}/Dockerfile
+    - when: on_success
+
-- 
GitLab


From 6423a4279d0ab5d8313b7809f207727bfd7d8809 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Thu, 10 Apr 2025 12:18:41 +0200
Subject: [PATCH 04/28] fix requirements file location

---
 Dockerfile | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index 56c1207..d4e7d9a 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -16,7 +16,8 @@ RUN apt-get update --yes \
 
 USER ${NB_UID}
 COPY --from=ghcr.io/astral-sh/uv:0.6.9 /uv /uvx /bin/
-RUN uv pip install --system -r requirements.txt \
+COPY --chown=${NB_UID}:${NB_GID} requirements.txt /tmp/
+RUN uv pip install --system -r /tmp/requirements.txt \
  && fix-permissions "${CONDA_DIR}" \
  && fix-permissions "/home/${NB_USER}"
 
-- 
GitLab


From 02fd51bec4e473331c05553d0c5ff37275009e1d Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Thu, 10 Apr 2025 12:25:19 +0200
Subject: [PATCH 05/28] fix spelling

---
 Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index d4e7d9a..1afa325 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -34,7 +34,7 @@ USER ${NB_UID}
 WORKDIR ${HOME}
 
 COPY --chown=${NB_UID}:${NB_GID} api_writer/ api_writer/
-COPY --chown=${NB_UID}:${NB_GID} jupterhub_test.ipynb .
+COPY --chown=${NB_UID}:${NB_GID} jupyterhub_test.ipynb .
 COPY --chown=${NB_UID}:${NB_GID} vllm.ipynb .
 
     
\ No newline at end of file
-- 
GitLab


From af7324f2680c7fff5fb8d4b0b8ddf8d2e33c6535 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Thu, 10 Apr 2025 16:01:43 +0200
Subject: [PATCH 06/28] fix

---
 api_writer/test_ui.py | 2 +-
 jupyterhub_test.ipynb | 2 +-
 vllm.ipynb            | 4 ++--
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
index 8dc5d9e..f6a55ae 100644
--- a/api_writer/test_ui.py
+++ b/api_writer/test_ui.py
@@ -3,7 +3,7 @@ import pandas as pd
 import os
 import json
 from opik import track, opik_context
-os.environ["OPIK_API_KEY"] = "DEwfV8SdhCNbnULybo5dLfcuk" 
+os.environ["OPIK_API_KEY"] = "" 
 os.environ["OPIK_WORKSPACE"] = "pilar12"
 
 n=3
diff --git a/jupyterhub_test.ipynb b/jupyterhub_test.ipynb
index 6508fd8..01d8432 100644
--- a/jupyterhub_test.ipynb
+++ b/jupyterhub_test.ipynb
@@ -297,7 +297,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.12.7"
+   "version": "3.13.1"
   }
  },
  "nbformat": 4,
diff --git a/vllm.ipynb b/vllm.ipynb
index 455032c..caf1faf 100644
--- a/vllm.ipynb
+++ b/vllm.ipynb
@@ -394,7 +394,7 @@
     }
    ],
    "source": [
-    "hf_token=\"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\"\n",
+    "hf_token=\"\"\n",
     "from huggingface_hub import snapshot_download\n",
     "snapshot_path=snapshot_download(\"pilar12/nomad-api-writer-lora\", revision= 'v_27', token=hf_token)"
    ]
@@ -1262,7 +1262,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.12.7"
+   "version": "3.13.1"
   }
  },
  "nbformat": 4,
-- 
GitLab


From 476a88a7231c65ad57e03cd3dee751a83dc8837b Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Fri, 11 Apr 2025 15:33:08 +0200
Subject: [PATCH 07/28] link demo and vllm

---
 api_writer/__init__.py                |    0
 api_writer/config.yaml                |    5 +
 api_writer/hf_model.py                |    6 +
 api_writer/nomad_api.py               |   31 +
 api_writer/sampling_params.yaml       |    9 +
 api_writer/search_quantities_lim.json | 1977 +++++++++++++++++++++++++
 api_writer/test_ui.py                 |   46 +-
 api_writer/utils.py                   |   43 +
 api_writer/vllm_api.py                |   31 +
 jupyterhub_test.ipynb                 |  119 +-
 requirements.txt                      |    3 +
 vllm.ipynb                            |  527 ++++---
 12 files changed, 2598 insertions(+), 199 deletions(-)
 create mode 100644 api_writer/__init__.py
 create mode 100644 api_writer/config.yaml
 create mode 100644 api_writer/hf_model.py
 create mode 100644 api_writer/nomad_api.py
 create mode 100644 api_writer/sampling_params.yaml
 create mode 100644 api_writer/search_quantities_lim.json
 create mode 100644 api_writer/utils.py
 create mode 100644 api_writer/vllm_api.py

diff --git a/api_writer/__init__.py b/api_writer/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/api_writer/config.yaml b/api_writer/config.yaml
new file mode 100644
index 0000000..b33df44
--- /dev/null
+++ b/api_writer/config.yaml
@@ -0,0 +1,5 @@
+load-format: bitsandbytes
+dtype: bfloat16
+quantization: bitsandbytes
+enable-prefix-caching: true
+max-lora-rank: 64
\ No newline at end of file
diff --git a/api_writer/hf_model.py b/api_writer/hf_model.py
new file mode 100644
index 0000000..5b86dd7
--- /dev/null
+++ b/api_writer/hf_model.py
@@ -0,0 +1,6 @@
+hf_token=""
+from huggingface_hub import snapshot_download
+snapshot_path=snapshot_download("pilar12/nomad-api-writer-lora", revision='v_27', token=hf_token)
+def download_model(model_path="pilar12/nomad-api-writer-lora", revision='v_27'):
+    snapshot_path=snapshot_download(model_path, revision=revision, token=hf_token)
+    return snapshot_path
\ No newline at end of file
diff --git a/api_writer/nomad_api.py b/api_writer/nomad_api.py
new file mode 100644
index 0000000..0c540b5
--- /dev/null
+++ b/api_writer/nomad_api.py
@@ -0,0 +1,31 @@
+import requests, json
+URL = "http://nomad-lab.eu/prod/v1/api/v1/"
+BASE_REQUEST ={
+  "owner": "visible",
+  "query": {},
+  "aggregations": {},
+  "pagination": {
+    "order_by": "upload_create_time",
+    "order": "desc",
+    "page_size": 20
+  },
+"required": {"include":["upload_name","origin","results.material.chemical_formula_descriptive"]}
+}
+
+def make_query(query: str):
+    # print(query)
+    try:
+        query+=" "
+        query = query[query.index('{'):query[::-1].index('}')*-1]
+        query = json.loads(query)
+        if len(query.keys())==1 and 'all' in query.keys():
+            query['and'] = query['all']
+    except Exception as e:
+        return True, 'Error parsing query: ' + query + ' ' + str(e)
+    if 'query' in query:
+        query = query['query']
+    query["upload_name:none"]=["Co-pilot test"]
+    request_query = BASE_REQUEST.copy()
+    request_query['query'] = query
+    response = requests.post(URL + 'entries/query/', json=request_query)
+    return response.status_code, response.json()
\ No newline at end of file
diff --git a/api_writer/sampling_params.yaml b/api_writer/sampling_params.yaml
new file mode 100644
index 0000000..c2d3a87
--- /dev/null
+++ b/api_writer/sampling_params.yaml
@@ -0,0 +1,9 @@
+n: 3
+model: "api-lora"
+stream": False
+max_tokens: 2048
+temperature: 1.0    
+top_k: 10
+seed: 42
+stop: ["<|end_of_text|>"]
+        
\ No newline at end of file
diff --git a/api_writer/search_quantities_lim.json b/api_writer/search_quantities_lim.json
new file mode 100644
index 0000000..ad7d2b0
--- /dev/null
+++ b/api_writer/search_quantities_lim.json
@@ -0,0 +1,1977 @@
+{
+    "upload_id": {
+        "description": "The persistent and globally unique identifier for the upload of the entry",
+        "type": "str"
+    },
+    "upload_name": {
+        "description": "The user provided upload name",
+        "type": "str"
+    },
+    "upload_create_time": {
+        "description": "The date and time when the upload was created in nomad",
+        "type": "nomad.metainfo.data_type.Datetime"
+    },
+    "entry_id": {
+        "description": "A persistent and globally unique identifier for the entry",
+        "type": "str"
+    },
+    "entry_name": {
+        "description": "A brief human readable name for the entry.",
+        "type": "str"
+    },
+    "entry_name.prefix": {
+        "description": "A brief human readable name for the entry.",
+        "type": "str"
+    },
+    "entry_type": {
+        "description": "The main schema definition. This is the name of the section used for data.",
+        "type": "str"
+    },
+    "calc_id": {
+        "description": "Legacy field name, use `entry_id` instead.",
+        "type": "str"
+    },
+    "entry_create_time": {
+        "description": "The date and time when the entry was created in nomad",
+        "type": "nomad.metainfo.data_type.Datetime"
+    },
+    "parser_name": {
+        "description": "The NOMAD parser used for the last processing",
+        "type": "str"
+    },
+    "mainfile": {
+        "description": "The path to the mainfile from the root directory of the uploaded files",
+        "type": "str"
+    },
+    "mainfile.path": {
+        "description": "The path to the mainfile from the root directory of the uploaded files",
+        "type": "str"
+    },
+    "mainfile_key": {
+        "description": "Key used to differentiate between different *child entries* of an entry.\nFor parent entries and entries that do not have any children, the value should\nbe empty.",
+        "type": "str"
+    },
+    "mainfile_key.path": {
+        "description": "Key used to differentiate between different *child entries* of an entry.\nFor parent entries and entries that do not have any children, the value should\nbe empty.",
+        "type": "str"
+    },
+    "text_search_contents": {
+        "description": "Contains text contents that should be considered when\ndoing free text queries for entries.",
+        "type": "str"
+    },
+    "files": {
+        "description": "The paths to the files within the upload that belong to this entry.\nAll files within the same directory as the entry's mainfile are considered the\nauxiliary files that belong to the entry.",
+        "type": "str"
+    },
+    "files.path": {
+        "description": "The paths to the files within the upload that belong to this entry.\nAll files within the same directory as the entry's mainfile are considered the\nauxiliary files that belong to the entry.",
+        "type": "str"
+    },
+    "pid": {
+        "description": "The unique, sequentially enumerated, integer PID that was used in the legacy\nNOMAD CoE. It allows to resolve URLs of the old NOMAD CoE Repository.",
+        "type": "str"
+    },
+    "raw_id": {
+        "description": "The code specific identifier extracted from the entry's raw files by the parser,\nif supported.",
+        "type": "str"
+    },
+    "external_id": {
+        "description": "A user provided external id. Usually the id for an entry in an external database\nwhere the data was imported from.",
+        "type": "str"
+    },
+    "published": {
+        "description": "Indicates if the entry is published",
+        "type": "bool"
+    },
+    "publish_time": {
+        "description": "The date and time when the upload was published in nomad",
+        "type": "nomad.metainfo.data_type.Datetime"
+    },
+    "with_embargo": {
+        "description": "Indicated if this entry is under an embargo",
+        "type": "bool"
+    },
+    "processed": {
+        "description": "Indicates that the entry is successfully processed.",
+        "type": "bool"
+    },
+    "last_processing_time": {
+        "description": "The date and time of the last processing.",
+        "type": "nomad.metainfo.data_type.Datetime"
+    },
+    "processing_errors": {
+        "description": "Errors that occurred during processing",
+        "type": "str"
+    },
+    "nomad_version": {
+        "description": "The NOMAD version used for the last processing",
+        "type": "str"
+    },
+    "nomad_commit": {
+        "description": "The NOMAD commit used for the last processing",
+        "type": "str"
+    },
+    "comment": {
+        "description": "A user provided comment for this entry",
+        "type": "str"
+    },
+    "references": {
+        "description": "User provided references (URLs) for this entry",
+        "type": "str"
+    },
+    "external_db": {
+        "description": "The repository or external database where the original data resides",
+        "type": "AFLOW,EELS Data Base,Kyoto Phonopy Database,Materials Project,OQMD,The Perovskite Database Project"
+    },
+    "origin": {
+        "description": "A short human readable description of the entries origin. Usually it is the\nhandle of an external database/repository or the name of the main author.",
+        "type": "str"
+    },
+    "main_author.name": {
+        "type": "str"
+    },
+    "main_author.name.text": {
+        "type": "str"
+    },
+    "main_author.user_id": {
+        "description": "The unique, persistent keycloak UUID",
+        "type": "str"
+    },
+    "main_author": {
+        "description": "The main author of the entry",
+        "type": "User"
+    },
+    "authors.name": {
+        "type": "str"
+    },
+    "authors.name.text": {
+        "type": "str"
+    },
+    "authors": {
+        "description": "All authors (main author and co-authors)",
+        "type": "Author"
+    },
+    "writers.name": {
+        "type": "str"
+    },
+    "writers.name.text": {
+        "type": "str"
+    },
+    "writers.user_id": {
+        "description": "The unique, persistent keycloak UUID",
+        "type": "str"
+    },
+    "writers": {
+        "description": "All writers (main author, upload coauthors)",
+        "type": "User"
+    },
+    "writer_groups": {
+        "description": "Groups with write access (= coauthor groups).",
+        "type": "str"
+    },
+    "viewers.name": {
+        "type": "str"
+    },
+    "viewers.name.text": {
+        "type": "str"
+    },
+    "viewers.user_id": {
+        "description": "The unique, persistent keycloak UUID",
+        "type": "str"
+    },
+    "viewers": {
+        "description": "All viewers (main author, upload coauthors, and reviewers)",
+        "type": "User"
+    },
+    "viewer_groups": {
+        "description": "Groups with read access (= coauthor groups + reviewer groups).",
+        "type": "str"
+    },
+    "datasets.dataset_id": {
+        "description": "The unique identifier for this dataset as a string. It should be\na randomly generated UUID, similar to other nomad ids.",
+        "type": "str"
+    },
+    "datasets.dataset_name": {
+        "description": "The human-readable name of the dataset as string. The dataset name must be\nunique for the user.",
+        "type": "str"
+    },
+    "datasets.doi": {
+        "description": "The optional Document Object Identifier (DOI) associated with this dataset.\nNomad can register DOIs that link back to the respective representation of\nthe dataset in the nomad UI. This quantity holds the string representation of\nthis DOI. There is only one per dataset. The DOI is just the DOI name, not its\nfull URL, e.g. \"10.17172/nomad/2019.10.29-1\".",
+        "type": "str"
+    },
+    "datasets.dataset_create_time": {
+        "description": "The date when the dataset was first created.",
+        "type": "nomad.metainfo.data_type.Datetime"
+    },
+    "datasets.dataset_modified_time": {
+        "description": "The date when the dataset was last modified. An owned dataset\ncan only be extended after a DOI was assigned. A foreign dataset cannot be changed\nonce a DOI was assigned.",
+        "type": "nomad.metainfo.data_type.Datetime"
+    },
+    "datasets.dataset_type": {
+        "description": "The type determined if a dataset is owned, i.e. was created by\nthe authors of the contained entries; or if a dataset is foreign,\ni.e. it was created by someone not necessarily related to the entries.",
+        "type": "foreign,owned"
+    },
+    "datasets": {
+        "description": "A list of user curated datasets this entry belongs to.",
+        "type": "/packages/16/section_definitions/0"
+    },
+    "domain": {
+        "description": "The material science domain",
+        "type": "dft,ems,nexus"
+    },
+    "n_quantities": {
+        "description": "Number of metainfo quantities parsed from the entry.",
+        "type": "int"
+    },
+    "quantities": {
+        "description": "All quantities that are used by this entry.",
+        "type": "str"
+    },
+    "quantities.path": {
+        "description": "All quantities that are used by this entry.",
+        "type": "str"
+    },
+    "sections": {
+        "description": "All sections that are present in this entry. This field is deprecated and will be removed.",
+        "type": "str"
+    },
+    "optimade.elements": {
+        "description": "Names of the different elements present in the structure.",
+        "type": "Ac,Ag,Al,Am,Ar,As,At,Au,B,Ba,Be,Bh,Bi,Bk,Br,C,Ca,Cd,Ce,Cf,Cl,Cm,Cn,Co,Cr,Cs,Cu,Db,Ds,Dy,Er,Es,Eu,F,Fe,Fl,Fm,Fr,Ga,Gd,Ge,H,He,Hf,Hg,Ho,Hs,I,In,Ir,K,Kr,La,Li,Lr,Lu,Lv,Mc,Md,Mg,Mn,Mo,Mt,N,Na,Nb,Nd,Ne,Nh,Ni,No,Np,O,Og,Os,P,Pa,Pb,Pd,Pm,Po,Pr,Pt,Pu,Ra,Rb,Re,Rf,Rg,Rh,Rn,Ru,S,Sb,Sc,Se,Sg,Si,Sm,Sn,Sr,Ta,Tb,Tc,Te,Th,Ti,Tl,Tm,Ts,U,V,W,X,Xe,Y,Yb,Zn,Zr"
+    },
+    "optimade.nelements": {
+        "description": "Number of different elements in the structure as an integer.",
+        "type": "int"
+    },
+    "optimade.elements_ratios": {
+        "description": "Relative proportions of different elements in the structure.",
+        "type": "float"
+    },
+    "optimade.chemical_formula_descriptive": {
+        "description": "The chemical formula for a structure as a string in a form chosen by the API\nimplementation.",
+        "type": "str"
+    },
+    "optimade.chemical_formula_reduced": {
+        "description": "The reduced chemical formula for a structure as a string with element symbols and\ninteger chemical proportion numbers. The proportion number MUST be omitted if it is 1.",
+        "type": "str"
+    },
+    "optimade.chemical_formula_hill": {
+        "description": "The chemical formula for a structure in Hill form with element symbols followed by\ninteger chemical proportion numbers. The proportion number MUST be omitted if it is 1.",
+        "type": "str"
+    },
+    "optimade.chemical_formula_anonymous": {
+        "description": "The anonymous formula is the chemical_formula_reduced, but where the elements are\ninstead first ordered by their chemical proportion number, and then, in order left to\nright, replaced by anonymous symbols A, B, C, ..., Z, Aa, Ba, ..., Za, Ab, Bb, ... and\nso on.",
+        "type": "str"
+    },
+    "optimade.nperiodic_dimensions": {
+        "description": "An integer specifying the number of periodic dimensions in the structure, equivalent\nto the number of non-zero entries in dimension_types.",
+        "type": "int"
+    },
+    "optimade.nsites": {
+        "description": "An integer specifying the length of the cartesian_site_positions property.",
+        "type": "int"
+    },
+    "optimade.structure_features": {
+        "description": "A list of strings that flag which special features are used by the structure.\n\n- disorder: This flag MUST be present if any one entry in the species list has a\nchemical_symbols list that is longer than 1 element.\n- unknown_positions: This flag MUST be present if at least one component of the\ncartesian_site_positions list of lists has value null.\n- assemblies: This flag MUST be present if the assemblies list is present.",
+        "type": "assemblies,disorder,unknown_positions"
+    },
+    "section_defs.definition_qualified_name": {
+        "description": "The qualified name of the compatible section.",
+        "type": "str"
+    },
+    "section_defs.definition_id": {
+        "description": "The definition id of the compatible section.",
+        "type": "str"
+    },
+    "section_defs.used_directly": {
+        "description": "If the compatible section is directly used as base section.",
+        "type": "bool"
+    },
+    "entry_references.target_reference": {
+        "description": "The full url like reference of the the target.",
+        "type": "str"
+    },
+    "entry_references.target_entry_id": {
+        "description": "The id of the entry containing the target.",
+        "type": "str"
+    },
+    "entry_references.target_mainfile": {
+        "description": "The mainfile of the entry containing the target.",
+        "type": "str"
+    },
+    "entry_references.target_upload_id": {
+        "description": "The id of the upload containing the target.",
+        "type": "str"
+    },
+    "entry_references.target_name": {
+        "description": "The name of the target quantity/section.",
+        "type": "str"
+    },
+    "entry_references.target_path": {
+        "description": "The path of the target quantity/section in its archive.",
+        "type": "str"
+    },
+    "entry_references.source_name": {
+        "description": "The name of the source (self) quantity/section in its archive.",
+        "type": "str"
+    },
+    "entry_references.source_path": {
+        "description": "The path of the source (self) quantity/section in its archive.",
+        "type": "str"
+    },
+    "entry_references.source_quantity": {
+        "description": "A reference to the quantity definition that defines the reference",
+        "type": "str"
+    },
+    "search_quantities.id": {
+        "description": "The full identifier for this quantity that contains the path in the schema +\nschema name.",
+        "type": "str"
+    },
+    "search_quantities.definition": {
+        "description": "A reference to the quantity definition.",
+        "type": "str"
+    },
+    "search_quantities.path_archive": {
+        "description": "Path of the value within the archive.",
+        "type": "str"
+    },
+    "search_quantities.bool_value": {
+        "description": "The value mapped as an ES boolean field.",
+        "type": "bool"
+    },
+    "search_quantities.str_value": {
+        "description": "The value mapped as an ES text and keyword field.",
+        "type": "str"
+    },
+    "search_quantities.str_value.keyword": {
+        "description": "The value mapped as an ES text and keyword field.",
+        "type": "str"
+    },
+    "search_quantities.int_value": {
+        "description": "The value mapped as an ES long number field.",
+        "type": "int"
+    },
+    "search_quantities.float_value": {
+        "description": "The value mapped as an ES double number field.",
+        "type": "float"
+    },
+    "search_quantities.datetime_value": {
+        "description": "The value mapped as an ES date field.",
+        "type": "nomad.metainfo.data_type.Datetime"
+    },
+    "results.material.material_id": {
+        "description": "A fixed length, unique material identifier in the form of a hash\ndigest.",
+        "type": "str"
+    },
+    "results.material.material_name": {
+        "description": "Meaningful names for this a material if any can be assigned.",
+        "type": "str"
+    },
+    "results.material.structural_type": {
+        "description": "Structural class determined from the atomic structure.",
+        "type": "1D,2D,atom,bulk,molecule / cluster,not processed,surface,unavailable"
+    },
+    "results.material.dimensionality": {
+        "description": "Dimensionality of the system. For atomistic systems this is\nautomatically evaluated by using the topology-scaling algorithm:\nhttps://doi.org/10.1103/PhysRevLett.118.106101.\n\n| Value | Description |\n| --------- | ----------------------- |\n| `'0D'` | Not connected periodically |\n| `'1D'` | Periodically connected in one dimension |\n| `'2D'` | Periodically connected in two dimensions |\n| `'3D'` | Periodically connected in three dimensions |",
+        "type": "0D,1D,2D,3D"
+    },
+    "results.material.building_block": {
+        "description": "More exact classification for this system, i.e. the type of \"building\nblock\" it represents.\n\n| Value | Description |\n| --------- | ----------------------- |\n| `'surface'` | Structure built from a unit cell that repeats periodically in two directions and at least twice, but not infinitely in a third direction. |\n| `'2D material'` | Structure built from a unit cell that repeats periodically in two directions and only once in a third direction. |\n| `'molecule'` | Molecule defined in the force-field topology |\n| `'monomer'` | Monomer defined in the force-field topology |",
+        "type": "2D material,molecule,monomer,surface"
+    },
+    "results.material.functional_type": {
+        "description": "Classification based on the functional properties.",
+        "type": "str"
+    },
+    "results.material.compound_type": {
+        "description": "Classification based on the chemical formula.",
+        "type": "str"
+    },
+    "results.material.elements": {
+        "description": "Names of the different elements present in the structure.",
+        "type": "Ac,Ag,Al,Am,Ar,As,At,Au,B,Ba,Be,Bh,Bi,Bk,Br,C,Ca,Cd,Ce,Cf,Cl,Cm,Cn,Co,Cr,Cs,Cu,Db,Ds,Dy,Er,Es,Eu,F,Fe,Fl,Fm,Fr,Ga,Gd,Ge,H,He,Hf,Hg,Ho,Hs,I,In,Ir,K,Kr,La,Li,Lr,Lu,Lv,Mc,Md,Mg,Mn,Mo,Mt,N,Na,Nb,Nd,Ne,Nh,Ni,No,Np,O,Og,Os,P,Pa,Pb,Pd,Pm,Po,Pr,Pt,Pu,Ra,Rb,Re,Rf,Rg,Rh,Rn,Ru,S,Sb,Sc,Se,Sg,Si,Sm,Sn,Sr,Ta,Tb,Tc,Te,Th,Ti,Tl,Tm,Ts,U,V,W,X,Xe,Y,Yb,Zn,Zr"
+    },
+    "results.material.n_elements": {
+        "description": "Number of different elements in the structure as an integer.",
+        "type": "int"
+    },
+    "results.material.elements_exclusive": {
+        "description": "String containing the chemical elements in alphabetical order and\nseparated by a single whitespace. This quantity can be used for\nexclusive element searches where you want to find entries/materials\nwith only certain given elements.",
+        "type": "str"
+    },
+    "results.material.chemical_formula_descriptive": {
+        "description": "The chemical formula for a structure as a string in a form chosen by the API\nimplementation.",
+        "type": "str"
+    },
+    "results.material.chemical_formula_reduced": {
+        "description": "Alphabetically sorted chemical formula with reduced integer chemical\nproportion numbers. The proportion number is omitted if it is 1.",
+        "type": "str"
+    },
+    "results.material.chemical_formula_hill": {
+        "description": "The chemical formula for a structure in Hill form with element\nsymbols followed by non-reduced integer chemical proportion numbers.\nThe proportion number is omitted if it is 1.",
+        "type": "str"
+    },
+    "results.material.chemical_formula_iupac": {
+        "description": "Formula where the elements are ordered using a formal list loosely\nbased on electronegativity as defined in the IUPAC nomenclature of\ninorganic chemistry (2005). Contains reduced integer chemical\nproportion numbers where the proportion number is omitted if it is\n1.",
+        "type": "str"
+    },
+    "results.material.chemical_formula_anonymous": {
+        "description": "Formula with the elements ordered by their reduced integer chemical\nproportion number, and the chemical species replaced by\nalphabetically ordered letters. The proportion number is omitted if\nit is 1. E.g.  H2O becomes A2B and H2O2 becomes AB. The letters are\ndrawn from the english alphabet that may be extended by increasing\nthe number of letters, e.g. A, B, ..., Z, Aa, Ab and so on. This\ndefinition is in line with the similarly named OPTIMADE definition.",
+        "type": "str"
+    },
+    "results.material.chemical_formula_reduced_fragments": {
+        "description": "Alphabetically sorted chemical formula with reduced integer chemical\nproportion numbers. The proportion number is omitted if it is 1.",
+        "type": "str"
+    },
+    "results.material.elemental_composition.element": {
+        "description": "The symbol of the element, e.g. 'Pb'.",
+        "type": "Ac,Ag,Al,Am,Ar,As,At,Au,B,Ba,Be,Bh,Bi,Bk,Br,C,Ca,Cd,Ce,Cf,Cl,Cm,Cn,Co,Cr,Cs,Cu,Db,Ds,Dy,Er,Es,Eu,F,Fe,Fl,Fm,Fr,Ga,Gd,Ge,H,He,Hf,Hg,Ho,Hs,I,In,Ir,K,Kr,La,Li,Lr,Lu,Lv,Mc,Md,Mg,Mn,Mo,Mt,N,Na,Nb,Nd,Ne,Nh,Ni,No,Np,O,Og,Os,P,Pa,Pb,Pd,Pm,Po,Pr,Pt,Pu,Ra,Rb,Re,Rf,Rg,Rh,Rn,Ru,S,Sb,Sc,Se,Sg,Si,Sm,Sn,Sr,Ta,Tb,Tc,Te,Th,Ti,Tl,Tm,Ts,U,V,W,Xe,Y,Yb,Zn,Zr"
+    },
+    "results.material.elemental_composition.atomic_fraction": {
+        "description": "The atomic fraction of the element in the system it is contained within.\nPer definition a positive value less than or equal to 1.",
+        "type": "float64"
+    },
+    "results.material.elemental_composition.mass_fraction": {
+        "description": "The mass fraction of the element in the system it is contained within.\nPer definition a positive value less than or equal to 1.",
+        "type": "float64"
+    },
+    "results.material.symmetry.bravais_lattice": {
+        "description": "Identifier for the Bravais lattice in Pearson notation. The first lowercase letter\nidentifies the crystal family and can be one of the following: a (triclinic), b\n(monoclinic), o (orthorhombic), t (tetragonal), h (hexagonal) or c (cubic). The\nsecond uppercase letter identifies the centring and can be one of the following: P\n(primitive), S (face centred), I (body centred), R (rhombohedral centring) or F\n(all faces centred).",
+        "type": "aP,cF,cI,cP,hP,hR,mP,mS,oF,oI,oP,oS,tI,tP"
+    },
+    "results.material.symmetry.crystal_system": {
+        "description": "Name of the crystal system.",
+        "type": "cubic,hexagonal,monoclinic,orthorhombic,tetragonal,triclinic,trigonal"
+    },
+    "results.material.symmetry.hall_number": {
+        "description": "The Hall number for this system.",
+        "type": "int32"
+    },
+    "results.material.symmetry.hall_symbol": {
+        "description": "The Hall symbol for this system.",
+        "type": "str"
+    },
+    "results.material.symmetry.point_group": {
+        "description": "Symbol of the crystallographic point group in the Hermann-Mauguin notation.",
+        "type": "str"
+    },
+    "results.material.symmetry.space_group_number": {
+        "description": "Specifies the International Union of Crystallography (IUC) number of the 3D space\ngroup of this system.",
+        "type": "int32"
+    },
+    "results.material.symmetry.space_group_symbol": {
+        "description": "The International Union of Crystallography (IUC) short symbol of the 3D\nspace group of this system.",
+        "type": "str"
+    },
+    "results.material.symmetry.prototype_formula": {
+        "description": "The formula of the prototypical material for this structure.",
+        "type": "str"
+    },
+    "results.material.symmetry.prototype_aflow_id": {
+        "description": "The identifier of this structure in the AFLOW encyclopedia of\ncrystallographic prototypes:\nhttp://www.aflowlib.org/prototype-encyclopedia/index.html",
+        "type": "str"
+    },
+    "results.material.symmetry.structure_name": {
+        "description": "A common name for this structure, e.g. fcc, bcc.",
+        "type": "4-member ring,Heusler,bcc,bct,bct5,clathrate,cuprite,diamond,fcc,fct,half-Heusler,hcp,perovskite,rock salt,rutile,simple cubic,wurtzite,zincblende"
+    },
+    "results.material.symmetry.strukturbericht_designation": {
+        "description": "Classification of the material according to the historically grown\n'strukturbericht'.",
+        "type": "str"
+    },
+    "results.material.topology.system_id": {
+        "description": "That path of this section within the metainfo that is used as a unique\nidentifier.",
+        "type": "str"
+    },
+    "results.material.topology.label": {
+        "description": "Descriptive label that identifies this structural part.",
+        "type": "str"
+    },
+    "results.material.topology.method": {
+        "description": "The method used for identifying this system.",
+        "type": "matid,parser,porosity,user"
+    },
+    "results.material.topology.description": {
+        "description": "A short description about this part of the topology.",
+        "type": "str"
+    },
+    "results.material.topology.material_id": {
+        "description": "A fixed length, unique material identifier in the form of a hash\ndigest.",
+        "type": "str"
+    },
+    "results.material.topology.material_name": {
+        "description": "Meaningful names for this a material if any can be assigned.",
+        "type": "str"
+    },
+    "results.material.topology.structural_type": {
+        "description": "Structural class determined from the atomic structure.",
+        "type": "1D,2D,active orbitals,atom,bulk,group,molecule,molecule / cluster,monomer,not processed,surface,unavailable"
+    },
+    "results.material.topology.dimensionality": {
+        "description": "Dimensionality of the system. For atomistic systems this is\nautomatically evaluated by using the topology-scaling algorithm:\nhttps://doi.org/10.1103/PhysRevLett.118.106101.\n\n| Value | Description |\n| --------- | ----------------------- |\n| `'0D'` | Not connected periodically |\n| `'1D'` | Periodically connected in one dimension |\n| `'2D'` | Periodically connected in two dimensions |\n| `'3D'` | Periodically connected in three dimensions |",
+        "type": "0D,1D,2D,3D"
+    },
+    "results.material.topology.building_block": {
+        "description": "More exact classification for this system, i.e. the type of \"building\nblock\" it represents.\n\n| Value | Description |\n| --------- | ----------------------- |\n| `'surface'` | Structure built from a unit cell that repeats periodically in two directions and at least twice, but not infinitely in a third direction. |\n| `'2D material'` | Structure built from a unit cell that repeats periodically in two directions and only once in a third direction. |\n| `'molecule'` | Molecule defined in the force-field topology |\n| `'monomer'` | Monomer defined in the force-field topology |",
+        "type": "2D material,molecule,monomer,surface"
+    },
+    "results.material.topology.functional_type": {
+        "description": "Classification based on the functional properties.",
+        "type": "str"
+    },
+    "results.material.topology.compound_type": {
+        "description": "Classification based on the chemical formula.",
+        "type": "str"
+    },
+    "results.material.topology.elements": {
+        "description": "Names of the different elements present in the structure.",
+        "type": "Ac,Ag,Al,Am,Ar,As,At,Au,B,Ba,Be,Bh,Bi,Bk,Br,C,Ca,Cd,Ce,Cf,Cl,Cm,Cn,Co,Cr,Cs,Cu,Db,Ds,Dy,Er,Es,Eu,F,Fe,Fl,Fm,Fr,Ga,Gd,Ge,H,He,Hf,Hg,Ho,Hs,I,In,Ir,K,Kr,La,Li,Lr,Lu,Lv,Mc,Md,Mg,Mn,Mo,Mt,N,Na,Nb,Nd,Ne,Nh,Ni,No,Np,O,Og,Os,P,Pa,Pb,Pd,Pm,Po,Pr,Pt,Pu,Ra,Rb,Re,Rf,Rg,Rh,Rn,Ru,S,Sb,Sc,Se,Sg,Si,Sm,Sn,Sr,Ta,Tb,Tc,Te,Th,Ti,Tl,Tm,Ts,U,V,W,X,Xe,Y,Yb,Zn,Zr"
+    },
+    "results.material.topology.n_elements": {
+        "description": "Number of different elements in the structure as an integer.",
+        "type": "int"
+    },
+    "results.material.topology.elements_exclusive": {
+        "description": "String containing the chemical elements in alphabetical order and\nseparated by a single whitespace. This quantity can be used for\nexclusive element searches where you want to find entries/materials\nwith only certain given elements.",
+        "type": "str"
+    },
+    "results.material.topology.chemical_formula_descriptive": {
+        "description": "The chemical formula for a structure as a string in a form chosen by the API\nimplementation.",
+        "type": "str"
+    },
+    "results.material.topology.chemical_formula_reduced": {
+        "description": "Alphabetically sorted chemical formula with reduced integer chemical\nproportion numbers. The proportion number is omitted if it is 1.",
+        "type": "str"
+    },
+    "results.material.topology.chemical_formula_hill": {
+        "description": "The chemical formula for a structure in Hill form with element\nsymbols followed by non-reduced integer chemical proportion numbers.\nThe proportion number is omitted if it is 1.",
+        "type": "str"
+    },
+    "results.material.topology.chemical_formula_iupac": {
+        "description": "Formula where the elements are ordered using a formal list loosely\nbased on electronegativity as defined in the IUPAC nomenclature of\ninorganic chemistry (2005). Contains reduced integer chemical\nproportion numbers where the proportion number is omitted if it is\n1.",
+        "type": "str"
+    },
+    "results.material.topology.chemical_formula_anonymous": {
+        "description": "Formula with the elements ordered by their reduced integer chemical\nproportion number, and the chemical species replaced by\nalphabetically ordered letters. The proportion number is omitted if\nit is 1. E.g.  H2O becomes A2B and H2O2 becomes AB. The letters are\ndrawn from the english alphabet that may be extended by increasing\nthe number of letters, e.g. A, B, ..., Z, Aa, Ab and so on. This\ndefinition is in line with the similarly named OPTIMADE definition.",
+        "type": "str"
+    },
+    "results.material.topology.chemical_formula_reduced_fragments": {
+        "description": "Alphabetically sorted chemical formula with reduced integer chemical\nproportion numbers. The proportion number is omitted if it is 1.",
+        "type": "str"
+    },
+    "results.material.topology.parent_system": {
+        "description": "Reference to the parent system.",
+        "type": "str"
+    },
+    "results.material.topology.child_systems": {
+        "description": "References to the child systems.",
+        "type": "str"
+    },
+    "results.material.topology.atomic_fraction": {
+        "description": "The atomic fraction of this system in the full structure it is contained in.\nPer definition a positive value less than or equal to 1.",
+        "type": "float64"
+    },
+    "results.material.topology.mass_fraction": {
+        "description": "The mass fraction of this system in the full structure it is contained within.\nPer definition a positive value less than or equal to 1.",
+        "type": "float64"
+    },
+    "results.material.topology.n_atoms": {
+        "description": "The total number of species (atoms, particles) in the system.",
+        "type": "int"
+    },
+    "results.material.topology.sbu_type": {
+        "description": "The topological representation of the metal secondary building units (sbus).\nThe shape of most metal sbus are well defined and form the basis of most\n popular MOFs. The most common example is the paddlewheel, rodlike mofs,\n irmofs, uio66",
+        "type": "str"
+    },
+    "results.material.topology.largest_cavity_diameter": {
+        "description": "The largest cavity diameter is the largest sphere that can be inserted in a porous\nsystem without overlapping with any of the atoms in the system.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.material.topology.pore_limiting_diameter": {
+        "description": "The pore limiting diameter is the largest sphere that can freely\ndiffuse through the porous network without overlapping with any of the\natoms in the system.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.material.topology.largest_included_sphere_along_free_sphere_path": {
+        "description": "The largest included sphere along free sphere path is\nlargest sphere that can be inserted in the pore.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.material.topology.accessible_surface_area": {
+        "description": "The surface area accessible is the area that is accessible to guest molecules\nin a porous system. It is generally considered to be the entire surface area\nthat can be spanned by a probe of a specific radius. In NOMAD, by default we use\na probe that has a radius of 1.86 Angstrom, which correspond to the\ncovalent radii of nitrogen gas. For biomolecular system, a radii of\n1.4 Angstrom can be used, which correspond to the covalent radii\nof water.",
+        "type": "float64",
+        "unit": "meter ** 2"
+    },
+    "results.material.topology.accessible_volume": {
+        "description": "Volume of unoccupied space in a system that can be accessible to\nguest molecules, like solvents.",
+        "type": "float64",
+        "unit": "meter ** 3"
+    },
+    "results.material.topology.void_fraction": {
+        "description": "Ratio of the the volume of the unoccupied space in the system\nto the volume of the entire system. It is a good proxy to\ndetermine how porous a system is. Highly porous systems\noften have a larger void fraction, meanwhile compact or dense\nsystems have smaller void fractions.",
+        "type": "float64"
+    },
+    "results.material.topology.n_channels": {
+        "description": "Number of channels present in the porous system, which correspond to the number of\npores within the system.",
+        "type": "int"
+    },
+    "results.material.topology.sbu_coordination_number": {
+        "description": "The number of connecting point in the secondary building units(sbu), which corresponds to\nthe to the number of point of extension in the secondary building unit. Some common\nterminology include\n1 : monotopic\n2 : ditopic\n3 : tritopic\n4 : tetratopic\n5 : pentatopic",
+        "type": "int"
+    },
+    "results.material.topology.elemental_composition.element": {
+        "description": "The symbol of the element, e.g. 'Pb'.",
+        "type": "Ac,Ag,Al,Am,Ar,As,At,Au,B,Ba,Be,Bh,Bi,Bk,Br,C,Ca,Cd,Ce,Cf,Cl,Cm,Cn,Co,Cr,Cs,Cu,Db,Ds,Dy,Er,Es,Eu,F,Fe,Fl,Fm,Fr,Ga,Gd,Ge,H,He,Hf,Hg,Ho,Hs,I,In,Ir,K,Kr,La,Li,Lr,Lu,Lv,Mc,Md,Mg,Mn,Mo,Mt,N,Na,Nb,Nd,Ne,Nh,Ni,No,Np,O,Og,Os,P,Pa,Pb,Pd,Pm,Po,Pr,Pt,Pu,Ra,Rb,Re,Rf,Rg,Rh,Rn,Ru,S,Sb,Sc,Se,Sg,Si,Sm,Sn,Sr,Ta,Tb,Tc,Te,Th,Ti,Tl,Tm,Ts,U,V,W,Xe,Y,Yb,Zn,Zr"
+    },
+    "results.material.topology.elemental_composition.atomic_fraction": {
+        "description": "The atomic fraction of the element in the system it is contained within.\nPer definition a positive value less than or equal to 1.",
+        "type": "float64"
+    },
+    "results.material.topology.elemental_composition.mass_fraction": {
+        "description": "The mass fraction of the element in the system it is contained within.\nPer definition a positive value less than or equal to 1.",
+        "type": "float64"
+    },
+    "results.material.topology.system_relation.type": {
+        "description": "The type of relation between a system and it's parent.\n\n| Value | Description |\n| --------- | ----------------------- |\n| `'root'` | System representing the entire structure, has no parent system. |\n| `'subsystem'` | A single logical entity extracted from the parent system. |\n| `'group'` | A logical group of subsystems within the parent, e.g. a group of molecules in MD. |\n| `'primitive_cell'` | The conventional cell from which the parent is constructed from. |\n| `'conventional_cell'` | The primitive cell from which the parent is constructed from. |",
+        "type": "conventional_cell,group,primitive_cell,root,subsystem"
+    },
+    "results.material.topology.cell.a": {
+        "description": "Length of the first basis vector.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.material.topology.cell.b": {
+        "description": "Length of the second basis vector.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.material.topology.cell.c": {
+        "description": "Length of the third basis vector.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.material.topology.cell.alpha": {
+        "description": "Angle between second and third basis vector.",
+        "type": "float64",
+        "unit": "radian"
+    },
+    "results.material.topology.cell.beta": {
+        "description": "Angle between first and third basis vector.",
+        "type": "float64",
+        "unit": "radian"
+    },
+    "results.material.topology.cell.gamma": {
+        "description": "Angle between first and second basis vector.",
+        "type": "float64",
+        "unit": "radian"
+    },
+    "results.material.topology.cell.volume": {
+        "description": "Volume of the cell.",
+        "type": "float64",
+        "unit": "meter ** 3"
+    },
+    "results.material.topology.cell.atomic_density": {
+        "description": "Atomic density of the material (atoms/volume).'",
+        "type": "float64",
+        "unit": "1 / meter ** 3"
+    },
+    "results.material.topology.cell.mass_density": {
+        "description": "Mass density of the material.",
+        "type": "float64",
+        "unit": "kilogram / meter ** 3"
+    },
+    "results.material.topology.symmetry.bravais_lattice": {
+        "description": "Identifier for the Bravais lattice in Pearson notation. The first lowercase letter\nidentifies the crystal family and can be one of the following: a (triclinic), b\n(monoclinic), o (orthorhombic), t (tetragonal), h (hexagonal) or c (cubic). The\nsecond uppercase letter identifies the centring and can be one of the following: P\n(primitive), S (face centred), I (body centred), R (rhombohedral centring) or F\n(all faces centred).",
+        "type": "aP,cF,cI,cP,hP,hR,mP,mS,oF,oI,oP,oS,tI,tP"
+    },
+    "results.material.topology.symmetry.crystal_system": {
+        "description": "Name of the crystal system.",
+        "type": "cubic,hexagonal,monoclinic,orthorhombic,tetragonal,triclinic,trigonal"
+    },
+    "results.material.topology.symmetry.hall_number": {
+        "description": "The Hall number for this system.",
+        "type": "int32"
+    },
+    "results.material.topology.symmetry.hall_symbol": {
+        "description": "The Hall symbol for this system.",
+        "type": "str"
+    },
+    "results.material.topology.symmetry.point_group": {
+        "description": "Symbol of the crystallographic point group in the Hermann-Mauguin notation.",
+        "type": "str"
+    },
+    "results.material.topology.symmetry.space_group_number": {
+        "description": "Specifies the International Union of Crystallography (IUC) number of the 3D space\ngroup of this system.",
+        "type": "int32"
+    },
+    "results.material.topology.symmetry.space_group_symbol": {
+        "description": "The International Union of Crystallography (IUC) short symbol of the 3D\nspace group of this system.",
+        "type": "str"
+    },
+    "results.material.topology.symmetry.strukturbericht_designation": {
+        "description": "Classification of the material according to the historically grown\n'strukturbericht'.",
+        "type": "str"
+    },
+    "results.material.topology.symmetry.prototype_label_aflow": {
+        "description": "AFLOW label of the prototype (see\nhttp://aflowlib.org/CrystalDatabase/prototype_index.html) identified on the basis\nof the space_group and normalized_wyckoff.",
+        "type": "str"
+    },
+    "results.material.topology.symmetry.prototype_name": {
+        "description": "A common name for this prototypical structure, e.g. fcc, bcc.",
+        "type": "4-member ring,Heusler,bcc,bct,bct5,clathrate,cuprite,diamond,fcc,fct,half-Heusler,hcp,perovskite,rock salt,rutile,simple cubic,wurtzite,zincblende"
+    },
+    "results.material.topology.active_orbitals.n_quantum_number": {
+        "description": "Principal quantum number $n$.",
+        "type": "int32"
+    },
+    "results.material.topology.active_orbitals.j_quantum_number": {
+        "description": "Total angular momentum quantum number $j = |l-s| ... l+s$.\n**Necessary with strong L-S coupling or non-collinear spin systems.**",
+        "type": "float64"
+    },
+    "results.material.topology.active_orbitals.mj_quantum_number": {
+        "description": "Azimuthal projection of the $j$ vector.\n**Necessary with strong L-S coupling or non-collinear spin systems.**",
+        "type": "float64"
+    },
+    "results.material.topology.active_orbitals.degeneracy": {
+        "description": "The number of states under the filling constraints applied to the orbital set.\nThis implicitly assumes that all orbitals in the set are degenerate.",
+        "type": "int32"
+    },
+    "results.material.topology.active_orbitals.n_electrons_excited": {
+        "description": "The electron charge excited for modelling purposes.\nChoices that deviate from 0 or 1 typically leverage Janak composition.\nUnless the `initial` state is chosen, the model corresponds to a single electron being excited in physical reality.",
+        "type": "float64"
+    },
+    "results.material.topology.active_orbitals.occupation": {
+        "description": "The total number of electrons within the state (as defined by degeneracy)\nafter exciting the model charge.",
+        "type": "float64"
+    },
+    "results.material.topology.active_orbitals.l_quantum_symbol": {
+        "description": "Azimuthal $l$ in symbolic form.",
+        "type": "str"
+    },
+    "results.material.topology.active_orbitals.ml_quantum_symbol": {
+        "description": "Magnetic quantum number $m_l$ in symbolic form.",
+        "type": "str"
+    },
+    "results.material.topology.active_orbitals.ms_quantum_symbol": {
+        "description": "Spin quantum number $m_s$ in symbolic form.",
+        "type": "str"
+    },
+    "results.method.method_id": {
+        "description": "Identifier for the used method. Only available for a subset of entries\nfor which the methodology has been identified with precision.",
+        "type": "str"
+    },
+    "results.method.method_name": {
+        "description": "Common name for the used method.",
+        "type": "BSE,CoreHole,DFT,DMFT,EELS,GW,NMR,TB,XPS,XRD,kMC,quantum cms,unavailable"
+    },
+    "results.method.workflow_name": {
+        "type": "str"
+    },
+    "results.method.simulation.program_name": {
+        "description": "The name of the used program.",
+        "type": "str"
+    },
+    "results.method.simulation.program_version": {
+        "description": "The version of the used program.",
+        "type": "str"
+    },
+    "results.method.simulation.program_version_internal": {
+        "description": "The version tag used internally by the development team.",
+        "type": "str"
+    },
+    "results.method.simulation.dft.basis_set_type": {
+        "description": "The used basis set functions.",
+        "type": "(L)APW+lo,gaussians,not processed,numeric AOs,plane waves,psinc functions,real-space grid,unavailable"
+    },
+    "results.method.simulation.dft.core_electron_treatment": {
+        "description": "How the core electrons are described.",
+        "type": "all electron frozen core,full all electron,pseudopotential,unavailable"
+    },
+    "results.method.simulation.dft.spin_polarized": {
+        "description": "Whether the calculation is spin-polarized.",
+        "type": "bool"
+    },
+    "results.method.simulation.dft.scf_threshold_energy_change": {
+        "description": "Specifies the threshold for the total energy change between two subsequent\nself-consistent field (SCF) iterations. The SCF is considered converged when the\ntotal-energy change between two SCF cycles is below the threshold (possibly in\ncombination with other criteria).",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.method.simulation.dft.van_der_Waals_method": {
+        "description": "The used van der Waals method.",
+        "type": "str"
+    },
+    "results.method.simulation.dft.relativity_method": {
+        "description": "Describes the relativistic treatment used for the calculation of the final energy\nand related quantities. If skipped or empty, no relativistic treatment is applied.",
+        "type": "pseudo_scalar_relativistic,scalar_relativistic,scalar_relativistic_atomic_ZORA"
+    },
+    "results.method.simulation.dft.smearing_kind": {
+        "description": "Specifies the kind of smearing on the electron occupation used to calculate the\nfree energy (see energy_free)\n\nValid values are:\n\n| Smearing kind             | Description                       |\n\n| ------------------------- | --------------------------------- |\n\n| `\"empty\"`                 | No smearing is applied            |\n\n| `\"gaussian\"`              | Gaussian smearing                 |\n\n| `\"fermi\"`                 | Fermi smearing                    |\n\n| `\"marzari-vanderbilt\"`    | Marzari-Vanderbilt smearing       |\n\n| `\"methfessel-paxton\"`     | Methfessel-Paxton smearing        |\n\n| `\"tetrahedra\"`            | Interpolation of state energies and occupations\n(ignores smearing_width) |",
+        "type": "str"
+    },
+    "results.method.simulation.dft.smearing_width": {
+        "description": "Specifies the width of the smearing in energy for the electron occupation used to\ncalculate the free energy (see energy_free).\n\n*NOTE:* Not all methods specified in smearing_kind uses this value.",
+        "type": "float64"
+    },
+    "results.method.simulation.dft.jacobs_ladder": {
+        "description": "Functional classification in line with Jacob's Ladder.\nFor more information, see https://doi.org/10.1063/1.1390175 (original paper);\nhttps://doi.org/10.1103/PhysRevLett.91.146401 (meta-GGA);\nand https://doi.org/10.1063/1.1904565 (hyper-GGA).",
+        "type": "GGA,LDA,hybrid,hyper-GGA,meta-GGA,not processed,unavailable"
+    },
+    "results.method.simulation.dft.xc_functional_type": {
+        "description": "Functional classification in line with Jacob's Ladder.\nFor more information, see https://doi.org/10.1063/1.1390175 (original paper);\nhttps://doi.org/10.1103/PhysRevLett.91.146401 (meta-GGA);\nand https://doi.org/10.1063/1.1904565 (hyper-GGA).",
+        "type": "GGA,LDA,hybrid,hyper-GGA,meta-GGA,not processed,unavailable"
+    },
+    "results.method.simulation.dft.xc_functional_names": {
+        "description": "The list of libXC functional names that where used in this entry.",
+        "type": "str"
+    },
+    "results.method.simulation.dft.exact_exchange_mixing_factor": {
+        "description": "Amount of exact exchange mixed in with the XC functional (value range = [0,1]).",
+        "type": "float64"
+    },
+    "results.method.simulation.dft.hubbard_kanamori_model.u_effective": {
+        "description": "Value of the effective U parameter (u - j).",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.method.simulation.dft.hubbard_kanamori_model.u": {
+        "description": "Value of the (intraorbital) Hubbard interaction",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.method.simulation.dft.hubbard_kanamori_model.j": {
+        "description": "Value of the exchange interaction. In rotational invariant systems, j = jh.",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.method.simulation.tb.type": {
+        "description": "Tight-binding model type: Slater Koster fitting, DFTB approximation, xTB perturbation\ntheory, or Wannier projection.",
+        "type": "DFTB,Slater-Koster,Wannier,not processed,xTB"
+    },
+    "results.method.simulation.tb.localization_type": {
+        "description": "Localization type of the Wannier orbitals.",
+        "type": "maximally_localized,single_shot"
+    },
+    "results.method.simulation.gw.type": {
+        "description": "GW Hedin's self-consistency cycle:\n\n| Name      | Description                      | Reference             |\n\n| --------- | -------------------------------- | --------------------- |\n\n| `'G0W0'`  | single-shot                      | PRB 74, 035101 (2006) |\n\n| `'scGW'`  | self-consistent G and W               | PRB 75, 235102 (2007) |\n\n| `'scGW0'` | self-consistent G with fixed W0  | PRB 54, 8411 (1996)   |\n\n| `'scG0W'` | self-consistent W with fixed G0  | -                     |\n\n| `'ev-scGW0'`  | eigenvalues self-consistent G with fixed W0   | PRB 34, 5390 (1986)   |\n\n| `'ev-scGW'`  | eigenvalues self-consistent G and W   | PRB 74, 045102 (2006)   |\n\n| `'qp-scGW0'`  | quasiparticle self-consistent G with fixed W0 | PRL 99, 115109 (2007) |\n\n| `'qp-scGW'`  | quasiparticle self-consistent G and W | PRL 96, 226402 (2006) |",
+        "type": "G0W0,ev-scGW,ev-scGW0,qp-scGW,qp-scGW0,scG0W,scGW,scGW0"
+    },
+    "results.method.simulation.gw.basis_set_type": {
+        "description": "The used basis set functions.",
+        "type": "(L)APW+lo,gaussians,not processed,numeric AOs,plane waves,psinc functions,real-space grid,unavailable"
+    },
+    "results.method.simulation.gw.starting_point_type": {
+        "description": "The libXC based xc functional classification used in the starting point DFT simulation.",
+        "type": "GGA,HF,LDA,hybrid,hyper-GGA,meta-GGA,not processed,unavailable"
+    },
+    "results.method.simulation.gw.starting_point_names": {
+        "description": "The list of libXC functional names that where used in this entry.",
+        "type": "str"
+    },
+    "results.method.simulation.bse.type": {
+        "description": "Type of BSE hamiltonian solved:\n\n    H_BSE = H_diagonal + 2 * gx * Hx - gc * Hc\n\nwhere gx, gc specifies the type.\n\nOnline resources for the theory:\n- http://exciting.wikidot.com/carbon-excited-states-from-bse#toc1\n- https://www.vasp.at/wiki/index.php/Bethe-Salpeter-equations_calculations\n- https://docs.abinit.org/theory/bse/\n- https://www.yambo-code.eu/wiki/index.php/Bethe-Salpeter_kernel\n\n| Name | Description |\n\n| --------- | ----------------------- |\n\n| `'Singlet'` | gx = 1, gc = 1 |\n\n| `'Triplet'` | gx = 0, gc = 1 |\n\n| `'IP'` | Independent-particle approach |\n\n| `'RPA'` | Random Phase Approximation |",
+        "type": "IP,RPA,Singlet,Triplet"
+    },
+    "results.method.simulation.bse.basis_set_type": {
+        "description": "The used basis set functions.",
+        "type": "(L)APW+lo,gaussians,not processed,numeric AOs,plane waves,psinc functions,real-space grid,unavailable"
+    },
+    "results.method.simulation.bse.starting_point_type": {
+        "description": "The libXC based xc functional classification used in the starting point DFT simulation.",
+        "type": "GGA,HF,LDA,hybrid,hyper-GGA,meta-GGA,not processed,unavailable"
+    },
+    "results.method.simulation.bse.starting_point_names": {
+        "description": "The list of libXC functional names that where used in this entry.",
+        "type": "str"
+    },
+    "results.method.simulation.bse.solver": {
+        "description": "Solver algotithm used to diagonalize the BSE Hamiltonian.\n\n| Name | Description | Reference |\n\n| --------- | ----------------------- | ----------- |\n\n| `'Full-diagonalization'` | Full diagonalization of the BSE Hamiltonian | - |\n\n| `'Lanczos-Haydock'` | Subspace iterative Lanczos-Haydock algorithm | https://doi.org/10.1103/PhysRevB.59.5441 |\n\n| `'GMRES'` | Generalized minimal residual method | https://doi.org/10.1137/0907058 |\n\n| `'SLEPc'` | Scalable Library for Eigenvalue Problem Computations | https://slepc.upv.es/ |\n\n| `'TDA'` | Tamm-Dancoff approximation | https://doi.org/10.1016/S0009-2614(99)01149-5 |",
+        "type": "Full-diagonalization,GMRES,Lanczos-Haydock,SLEPc,TDA"
+    },
+    "results.method.simulation.bse.gw_type": {
+        "description": "GW Hedin's self-consistency cycle:\n\n| Name      | Description                      | Reference             |\n\n| --------- | -------------------------------- | --------------------- |\n\n| `'G0W0'`  | single-shot                      | PRB 74, 035101 (2006) |\n\n| `'scGW'`  | self-consistent G and W               | PRB 75, 235102 (2007) |\n\n| `'scGW0'` | self-consistent G with fixed W0  | PRB 54, 8411 (1996)   |\n\n| `'scG0W'` | self-consistent W with fixed G0  | -                     |\n\n| `'ev-scGW0'`  | eigenvalues self-consistent G with fixed W0   | PRB 34, 5390 (1986)   |\n\n| `'ev-scGW'`  | eigenvalues self-consistent G and W   | PRB 74, 045102 (2006)   |\n\n| `'qp-scGW0'`  | quasiparticle self-consistent G with fixed W0 | PRL 99, 115109 (2007) |\n\n| `'qp-scGW'`  | quasiparticle self-consistent G and W | PRL 96, 226402 (2006) |",
+        "type": "G0W0,ev-scGW,ev-scGW0,qp-scGW,qp-scGW0,scG0W,scGW,scGW0"
+    },
+    "results.method.simulation.dmft.impurity_solver_type": {
+        "description": "Impurity solver method used in the DMFT loop:\n\n| Name              | Reference                            |\n\n| ----------------- | ------------------------------------ |\n\n| `'CT-INT'`        | Rubtsov et al., JEPT Lett 80 (2004)  |\n\n| `'CT-HYB'`        | Werner et al., PRL 97 (2006)         |\n\n| `'CT-AUX'`        | Gull et al., EPL 82 (2008)           |\n\n| `'ED'`            | Caffarrel et al, PRL 72 (1994)       |\n\n| `'NRG'`           | Bulla et al., RMP 80 (2008)          |\n\n| `'MPS'`           | Ganahl et al., PRB 90 (2014)         |\n\n| `'IPT'`           | Georges et al., PRB 45 (1992)        |\n\n| `'NCA'`           | Pruschke et al., PRB 47 (1993)       |\n\n| `'OCA'`           | Pruschke et al., PRB 47 (1993)       |\n\n| `'slave_bosons'`  | Kotliar et al., PRL 57 (1986)        |\n\n| `'hubbard_I'`     | -                                    |",
+        "type": "CT-AUX,CT-HYB,CT-INT,ED,IPT,MPS,NCA,NRG,OCA,hubbard_I,slave_bosons"
+    },
+    "results.method.simulation.dmft.inverse_temperature": {
+        "description": "Inverse temperature = 1/(kB*T).",
+        "type": "float64",
+        "unit": "1 / joule"
+    },
+    "results.method.simulation.dmft.magnetic_state": {
+        "description": "Magnetic state in which the DMFT calculation is done.",
+        "type": "antiferromagnetic,ferromagnetic,paramagnetic"
+    },
+    "results.method.simulation.dmft.u": {
+        "description": "Value of the (intraorbital) Hubbard interaction",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.method.simulation.dmft.jh": {
+        "description": "Value of the (interorbital) Hund's coupling.",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.method.simulation.dmft.analytical_continuation": {
+        "description": "Analytical continuation used to continuate the imaginary space Green's functions into\nthe real frequencies space.\n\n| Name           | Description         | Reference                        |\n\n| -------------- | ------------------- | -------------------------------- |\n\n| `'Pade'` | Pade's approximant  | https://www.sciencedirect.com/science/article/pii/0021999173901277?via%3Dihub |\n\n| `'MaxEnt'` | Maximum Entropy method | https://journals.aps.org/prb/abstract/10.1103/PhysRevB.41.2380 |\n\n| `'SVD'` | Singular value decomposition | https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.75.517 |\n\n| `'Stochastic'` | Stochastic method | https://journals.aps.org/prb/abstract/10.1103/PhysRevB.57.10287 |",
+        "type": "MaxEnt,Pade,SVD,Stochastic"
+    },
+    "results.method.simulation.precision.k_line_density": {
+        "description": "Amount of sampled k-points per unit reciprocal length along each axis.\nContains the least precise density out of all axes.\nShould only be compared between calulations of similar dimensionality.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.method.simulation.precision.native_tier": {
+        "description": "The code-specific tag indicating the precision used\nfor the basis set and meshes of numerical routines.\n\nSupported codes (with hyperlinks to the relevant documentation):\n- [`VASP`](https://www.vasp.at/wiki/index.php/PREC)\n- `FHI-aims`\n- [`CASTEP`](http://www.tcm.phy.cam.ac.uk/castep/documentation/WebHelp/CASTEP.html#modules/castep/tskcastepsetelecquality.htm?Highlight=ultra-fine)",
+        "type": "str"
+    },
+    "results.method.simulation.precision.basis_set": {
+        "description": "The type of basis set used by the program.\n\n| Value                          |                       Description |\n| ------------------------------ | --------------------------------- |\n| `'APW'`                        | Augmented plane waves             |\n| `'LAPW'`                       | Linearized augmented plane waves  |\n| `'APW+lo'`             | Augmented plane waves with local orbitals |\n| `'LAPW+lo'` | Linearized augmented plane waves with local orbitals |\n| `'(L)APW'`                     |     A combination of APW and LAPW |\n| `'(L)APW+lo'`  | A combination of APW and LAPW with local orbitals |\n| `'plane waves'`                | Plane waves                       |\n| `'gaussians + plane waves'`    | Basis set of the Quickstep algorithm (DOI: 10.1016/j.cpc.2004.12.014) |\n| `'real-space grid'`            | Real-space grid                   |\n| `'suppport functions'`         | Support functions                 |",
+        "type": "(L)APW,(L)APW+lo,APW,APW+lo,LAPW,LAPW+lo,atom-centered orbitals,gaussians + plane waves,not processed,plane waves,real-space grid,support functions,unavailable"
+    },
+    "results.method.simulation.precision.planewave_cutoff": {
+        "description": "Spherical cutoff in reciprocal space for a plane-wave basis set. It is the energy\nof the highest plane-wave ($\\frac{\\hbar^2|k+G|^2}{2m_e}$) included in the basis\nset.",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.method.simulation.precision.apw_cutoff": {
+        "description": "The spherical cutoff parameter for the interstitial plane waves in the LAPW family.\nThis cutoff is unitless, referring to the product of the smallest muffin-tin radius\nand the length of the cutoff reciprocal vector ($r_{MT} * |K_{cut}|$).",
+        "type": "float64"
+    },
+    "results.method.measurement.xrd.diffraction_method_name": {
+        "description": "The diffraction method used to obtain the diffraction pattern.\n| X-Ray Diffraction Method                                   | Description                                                                                                                                                                                                 |\n|------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **Powder X-Ray Diffraction (PXRD)**                        | The term \"powder\" refers more to the random orientation of small crystallites than to the physical form of the sample. Can be used with non-powder samples if they present random crystallite orientations. |\n| **Single Crystal X-Ray Diffraction (SCXRD)**               | Used for determining the atomic structure of a single crystal.                                                                                                                                              |\n| **High-Resolution X-Ray Diffraction (HRXRD)**              | A technique typically used for detailed characterization of epitaxial thin films using precise diffraction measurements.                                                                                    |\n| **Small-Angle X-Ray Scattering (SAXS)**                    | Used for studying nanostructures in the size range of 1-100 nm. Provides information on particle size, shape, and distribution.                                                                             |\n| **X-Ray Reflectivity (XRR)**                               | Used to study thin film layers, interfaces, and multilayers. Provides info on film thickness, density, and roughness.                                                                                       |\n| **Grazing Incidence X-Ray Diffraction (GIXRD)**            | Primarily used for the analysis of thin films with the incident beam at a fixed shallow angle.                                                                                                              |\n| **Reciprocal Space Mapping (RSM)**                         | High-resolution XRD method to measure diffracted intensity in a 2-dimensional region of reciprocal space. Provides information about the real-structure (lattice mismatch, domain structure, stress and defects) in single-crystalline and epitaxial samples.|",
+        "type": "Grazing Incidence X-Ray Diffraction (GIXRD),High-Resolution X-Ray Diffraction (HRXRD),Powder X-Ray Diffraction (PXRD),Reciprocal Space Mapping (RSM),Single Crystal X-Ray Diffraction (SCXRD),Small-Angle X-Ray Scattering (SAXS),X-Ray Reflectivity (XRR),unavailable"
+    },
+    "results.properties.n_calculations": {
+        "description": "The number of performed single configuration calculations.'",
+        "type": "int"
+    },
+    "results.properties.available_properties": {
+        "description": "Subset of the property names that are present in this entry.",
+        "type": "str"
+    },
+    "results.properties.structural.radial_distribution_function.type": {
+        "description": "Describes if the observable is calculated at the molecular or atomic level.",
+        "type": "atomic,molecular"
+    },
+    "results.properties.structural.radial_distribution_function.label": {
+        "description": "Describes the atoms or molecule types involved in determining the property.",
+        "type": "str"
+    },
+    "results.properties.structural.radial_distribution_function.provenance.label": {
+        "description": "Class or type of the provenance.\nCan be used to add further description to the provenance.",
+        "type": "str"
+    },
+    "results.properties.structural.radial_distribution_function.provenance.molecular_dynamics.time_step": {
+        "description": "The timestep at which the numerical integration is performed.",
+        "type": "float64",
+        "unit": "second"
+    },
+    "results.properties.structural.radial_distribution_function.provenance.molecular_dynamics.ensemble_type": {
+        "description": "The type of thermodynamic ensemble that was simulated.\n\nAllowed values are:\n\n| Thermodynamic Ensemble          | Description                               |\n\n| ---------------------- | ----------------------------------------- |\n\n| `\"NVE\"`           | Constant number of particles, volume, and energy |\n\n| `\"NVT\"`           | Constant number of particles, volume, and temperature |\n\n| `\"NPT\"`           | Constant number of particles, pressure, and temperature |\n\n| `\"NPH\"`           | Constant number of particles, pressure, and enthalpy |",
+        "type": "NPH,NPT,NVE,NVT"
+    },
+    "results.properties.structural.radius_of_gyration.kind": {
+        "description": "Kind of the quantity.",
+        "type": "str"
+    },
+    "results.properties.structural.radius_of_gyration.label": {
+        "description": "Describes the atoms or molecule types involved in determining the property.",
+        "type": "str"
+    },
+    "results.properties.structural.radius_of_gyration.provenance.label": {
+        "description": "Class or type of the provenance.\nCan be used to add further description to the provenance.",
+        "type": "str"
+    },
+    "results.properties.structural.radius_of_gyration.provenance.molecular_dynamics.time_step": {
+        "description": "The timestep at which the numerical integration is performed.",
+        "type": "float64",
+        "unit": "second"
+    },
+    "results.properties.structural.radius_of_gyration.provenance.molecular_dynamics.ensemble_type": {
+        "description": "The type of thermodynamic ensemble that was simulated.\n\nAllowed values are:\n\n| Thermodynamic Ensemble          | Description                               |\n\n| ---------------------- | ----------------------------------------- |\n\n| `\"NVE\"`           | Constant number of particles, volume, and energy |\n\n| `\"NVT\"`           | Constant number of particles, volume, and temperature |\n\n| `\"NPT\"`           | Constant number of particles, pressure, and temperature |\n\n| `\"NPH\"`           | Constant number of particles, pressure, and enthalpy |",
+        "type": "NPH,NPT,NVE,NVT"
+    },
+    "results.properties.structural.diffraction_pattern.incident_beam_wavelength": {
+        "description": "The wavelength of the incident beam.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.properties.dynamical.mean_squared_displacement.type": {
+        "description": "Describes if the observable is calculated at the molecular or atomic level.",
+        "type": "atomic,molecular"
+    },
+    "results.properties.dynamical.mean_squared_displacement.label": {
+        "description": "Describes the atoms or molecule types involved in determining the property.",
+        "type": "str"
+    },
+    "results.properties.dynamical.mean_squared_displacement.provenance.label": {
+        "description": "Class or type of the provenance.\nCan be used to add further description to the provenance.",
+        "type": "str"
+    },
+    "results.properties.dynamical.mean_squared_displacement.provenance.molecular_dynamics.time_step": {
+        "description": "The timestep at which the numerical integration is performed.",
+        "type": "float64",
+        "unit": "second"
+    },
+    "results.properties.dynamical.mean_squared_displacement.provenance.molecular_dynamics.ensemble_type": {
+        "description": "The type of thermodynamic ensemble that was simulated.\n\nAllowed values are:\n\n| Thermodynamic Ensemble          | Description                               |\n\n| ---------------------- | ----------------------------------------- |\n\n| `\"NVE\"`           | Constant number of particles, volume, and energy |\n\n| `\"NVT\"`           | Constant number of particles, volume, and temperature |\n\n| `\"NPT\"`           | Constant number of particles, pressure, and temperature |\n\n| `\"NPH\"`           | Constant number of particles, pressure, and enthalpy |",
+        "type": "NPH,NPT,NVE,NVT"
+    },
+    "results.properties.structures.structure_original.nperiodic_dimensions": {
+        "description": "An integer specifying the number of periodic dimensions in the\nstructure, equivalent to the number of non-zero entries in\ndimension_types.",
+        "type": "int"
+    },
+    "results.properties.structures.structure_original.n_sites": {
+        "description": "An integer specifying the length of the cartesian_site_positions property.",
+        "type": "int"
+    },
+    "results.properties.structures.structure_original.cell_volume": {
+        "description": "Volume of the cell.",
+        "type": "float64",
+        "unit": "meter ** 3"
+    },
+    "results.properties.structures.structure_original.lattice_parameters.a": {
+        "description": "Length of the first basis vector.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.properties.structures.structure_original.lattice_parameters.b": {
+        "description": "Length of the second basis vector.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.properties.structures.structure_original.lattice_parameters.c": {
+        "description": "Length of the third basis vector.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.properties.structures.structure_original.lattice_parameters.alpha": {
+        "description": "Angle between second and third basis vector.",
+        "type": "float64",
+        "unit": "radian"
+    },
+    "results.properties.structures.structure_original.lattice_parameters.beta": {
+        "description": "Angle between first and third basis vector.",
+        "type": "float64",
+        "unit": "radian"
+    },
+    "results.properties.structures.structure_original.lattice_parameters.gamma": {
+        "description": "Angle between first and second basis vector.",
+        "type": "float64",
+        "unit": "radian"
+    },
+    "results.properties.structures.structure_conventional.nperiodic_dimensions": {
+        "description": "An integer specifying the number of periodic dimensions in the\nstructure, equivalent to the number of non-zero entries in\ndimension_types.",
+        "type": "int"
+    },
+    "results.properties.structures.structure_conventional.n_sites": {
+        "description": "An integer specifying the length of the cartesian_site_positions property.",
+        "type": "int"
+    },
+    "results.properties.structures.structure_conventional.cell_volume": {
+        "description": "Volume of the cell.",
+        "type": "float64",
+        "unit": "meter ** 3"
+    },
+    "results.properties.structures.structure_conventional.lattice_parameters.a": {
+        "description": "Length of the first basis vector.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.properties.structures.structure_conventional.lattice_parameters.b": {
+        "description": "Length of the second basis vector.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.properties.structures.structure_conventional.lattice_parameters.c": {
+        "description": "Length of the third basis vector.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.properties.structures.structure_conventional.lattice_parameters.alpha": {
+        "description": "Angle between second and third basis vector.",
+        "type": "float64",
+        "unit": "radian"
+    },
+    "results.properties.structures.structure_conventional.lattice_parameters.beta": {
+        "description": "Angle between first and third basis vector.",
+        "type": "float64",
+        "unit": "radian"
+    },
+    "results.properties.structures.structure_conventional.lattice_parameters.gamma": {
+        "description": "Angle between first and second basis vector.",
+        "type": "float64",
+        "unit": "radian"
+    },
+    "results.properties.structures.structure_primitive.nperiodic_dimensions": {
+        "description": "An integer specifying the number of periodic dimensions in the\nstructure, equivalent to the number of non-zero entries in\ndimension_types.",
+        "type": "int"
+    },
+    "results.properties.structures.structure_primitive.n_sites": {
+        "description": "An integer specifying the length of the cartesian_site_positions property.",
+        "type": "int"
+    },
+    "results.properties.structures.structure_primitive.cell_volume": {
+        "description": "Volume of the cell.",
+        "type": "float64",
+        "unit": "meter ** 3"
+    },
+    "results.properties.structures.structure_primitive.lattice_parameters.a": {
+        "description": "Length of the first basis vector.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.properties.structures.structure_primitive.lattice_parameters.b": {
+        "description": "Length of the second basis vector.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.properties.structures.structure_primitive.lattice_parameters.c": {
+        "description": "Length of the third basis vector.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.properties.structures.structure_primitive.lattice_parameters.alpha": {
+        "description": "Angle between second and third basis vector.",
+        "type": "float64",
+        "unit": "radian"
+    },
+    "results.properties.structures.structure_primitive.lattice_parameters.beta": {
+        "description": "Angle between first and third basis vector.",
+        "type": "float64",
+        "unit": "radian"
+    },
+    "results.properties.structures.structure_primitive.lattice_parameters.gamma": {
+        "description": "Angle between first and second basis vector.",
+        "type": "float64",
+        "unit": "radian"
+    },
+    "results.properties.electronic.band_gap.index": {
+        "description": "The spin channel index.",
+        "type": "int32"
+    },
+    "results.properties.electronic.band_gap.value": {
+        "description": "The actual value of the band gap. Value of zero indicates a vanishing band gap and\nis distinct from sources lacking any band gap measurement or calculation.",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.properties.electronic.band_gap.type": {
+        "description": "Band gap type.",
+        "type": "direct,indirect"
+    },
+    "results.properties.electronic.band_gap.provenance.label": {
+        "description": "Class or type of the provenance.\nCan be used to add further description to the provenance.",
+        "type": "str"
+    },
+    "results.properties.electronic.dos_electronic.spin_polarized": {
+        "description": "Whether the DOS is spin-polarized, i.e. is contains channels for both\nspin values.",
+        "type": "bool"
+    },
+    "results.properties.electronic.dos_electronic.band_gap.index": {
+        "description": "The spin channel index.",
+        "type": "int32"
+    },
+    "results.properties.electronic.dos_electronic.band_gap.value": {
+        "description": "The actual value of the band gap. Value of zero indicates a vanishing band gap and\nis distinct from sources lacking any band gap measurement or calculation.",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.properties.electronic.dos_electronic.band_gap.type": {
+        "description": "Band gap type.",
+        "type": "direct,indirect"
+    },
+    "results.properties.electronic.dos_electronic.band_gap.provenance.label": {
+        "description": "Class or type of the provenance.\nCan be used to add further description to the provenance.",
+        "type": "str"
+    },
+    "results.properties.electronic.dos_electronic_new.spin_polarized": {
+        "description": "Whether the DOS is spin-polarized, i.e. is contains channels for both\nspin values.",
+        "type": "bool"
+    },
+    "results.properties.electronic.dos_electronic_new.has_projected": {
+        "description": "Whether the DOS has information about projections (species-, atom-, and/or orbital-\nprojected).",
+        "type": "bool"
+    },
+    "results.properties.electronic.dos_electronic_new.data.band_gap.index": {
+        "description": "The spin channel index.",
+        "type": "int32"
+    },
+    "results.properties.electronic.dos_electronic_new.data.band_gap.value": {
+        "description": "The actual value of the band gap. Value of zero indicates a vanishing band gap and\nis distinct from sources lacking any band gap measurement or calculation.",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.properties.electronic.dos_electronic_new.data.band_gap.type": {
+        "description": "Band gap type.",
+        "type": "direct,indirect"
+    },
+    "results.properties.electronic.dos_electronic_new.data.band_gap.provenance.label": {
+        "description": "Class or type of the provenance.\nCan be used to add further description to the provenance.",
+        "type": "str"
+    },
+    "results.properties.electronic.band_structure_electronic.spin_polarized": {
+        "description": "Whether the band structure is spin-polarized, i.e. is contains channels\nfor both spin values.",
+        "type": "bool"
+    },
+    "results.properties.electronic.band_structure_electronic.band_gap.index": {
+        "description": "The spin channel index.",
+        "type": "int32"
+    },
+    "results.properties.electronic.band_structure_electronic.band_gap.value": {
+        "description": "The actual value of the band gap. Value of zero indicates a vanishing band gap and\nis distinct from sources lacking any band gap measurement or calculation.",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.properties.electronic.band_structure_electronic.band_gap.type": {
+        "description": "Band gap type.",
+        "type": "direct,indirect"
+    },
+    "results.properties.electronic.band_structure_electronic.band_gap.provenance.label": {
+        "description": "Class or type of the provenance.\nCan be used to add further description to the provenance.",
+        "type": "str"
+    },
+    "results.properties.magnetic.spin_spin_coupling.source": {
+        "description": "Identifier for the source of the data: 'experiment' or 'simulation'.",
+        "type": "experiment,simulation"
+    },
+    "results.properties.magnetic.magnetic_susceptibility.source": {
+        "description": "Identifier for the source of the data: 'experiment' or 'simulation'.",
+        "type": "experiment,simulation"
+    },
+    "results.properties.optoelectronic.solar_cell.efficiency": {
+        "description": "Power conversion effciency of a solar cell in percentage %.",
+        "type": "float64"
+    },
+    "results.properties.optoelectronic.solar_cell.fill_factor": {
+        "description": "Fill factor of a solar cell in absolute values (from 0 to 1).",
+        "type": "float64"
+    },
+    "results.properties.optoelectronic.solar_cell.open_circuit_voltage": {
+        "description": "Open circuit voltage of a solar cell.",
+        "type": "float64",
+        "unit": "volt"
+    },
+    "results.properties.optoelectronic.solar_cell.short_circuit_current_density": {
+        "description": "Short circuit current density of a solar cell.",
+        "type": "float64",
+        "unit": "ampere / meter ** 2"
+    },
+    "results.properties.optoelectronic.solar_cell.illumination_intensity": {
+        "description": "The light intensity during the IV measurement.",
+        "type": "float64",
+        "unit": "watt / meter ** 2"
+    },
+    "results.properties.optoelectronic.solar_cell.device_area": {
+        "description": "The total area of the cell during IV and stability measurements under illumination.",
+        "type": "float64",
+        "unit": "meter ** 2"
+    },
+    "results.properties.optoelectronic.solar_cell.device_architecture": {
+        "description": "Device architecture of the solar cell. Examples are:\n`pn-Heterojunction`, `pin`, `nip`, ...",
+        "type": "str"
+    },
+    "results.properties.optoelectronic.solar_cell.device_stack": {
+        "description": "Layers of the entire device.",
+        "type": "str"
+    },
+    "results.properties.optoelectronic.solar_cell.absorber": {
+        "description": "Absorber layers used in the solar cell.",
+        "type": "str"
+    },
+    "results.properties.optoelectronic.solar_cell.absorber_fabrication": {
+        "description": "Technique describing the fabrication of the absorber layer. Examples are:\n`Spin-coating`, `Evaporation`, `Doctor blading`, ...",
+        "type": "str"
+    },
+    "results.properties.optoelectronic.solar_cell.electron_transport_layer": {
+        "description": "Electron selective contact layers used in the solar cell.",
+        "type": "str"
+    },
+    "results.properties.optoelectronic.solar_cell.hole_transport_layer": {
+        "description": "Hole selective contact layers used in the solar cell.",
+        "type": "str"
+    },
+    "results.properties.optoelectronic.solar_cell.substrate": {
+        "description": "Substrate layers used in the solar cell.",
+        "type": "str"
+    },
+    "results.properties.optoelectronic.solar_cell.back_contact": {
+        "description": "Back contact layers used in the solar cell.",
+        "type": "str"
+    },
+    "results.properties.catalytic.reaction.name": {
+        "description": "Name of the catalytic test reaction.",
+        "type": "str"
+    },
+    "results.properties.catalytic.reaction.type": {
+        "description": "Classification of the catalytic test reaction such as Oxidation, Hydrogenation,\nIsomerization, Coupling...",
+        "type": "str"
+    },
+    "results.properties.catalytic.reaction.reactants.name": {
+        "description": "IUPAC name of the reagent.",
+        "type": "str"
+    },
+    "results.properties.catalytic.reaction.reactants.gas_concentration_in": {
+        "description": "Volumetric concentration (fraction) of the reagent in the feed gas.\nShould be a value between 0 and 1.",
+        "type": "float64"
+    },
+    "results.properties.catalytic.reaction.reactants.gas_concentration_out": {
+        "description": "Volumetric concentration (fraction) of the reagent after the reactor.\nShould be a value between 0 and 1.",
+        "type": "float64"
+    },
+    "results.properties.catalytic.reaction.reactants.conversion": {
+        "description": "Conversion of the reactant, in %.",
+        "type": "float64"
+    },
+    "results.properties.catalytic.reaction.products.name": {
+        "description": "Name of the product, preferably the IUPAC name.",
+        "type": "str"
+    },
+    "results.properties.catalytic.reaction.products.gas_concentration_in": {
+        "description": "Volumetric concentration (fraction) of the reagent in the feed gas.\nShould be a value between 0 and 1.",
+        "type": "float64"
+    },
+    "results.properties.catalytic.reaction.products.gas_concentration_out": {
+        "description": "Volumetric concentration (fraction) of the reagent after the reactor.\nShould be a value between 0 and 1.",
+        "type": "float64"
+    },
+    "results.properties.catalytic.reaction.products.selectivity": {
+        "description": "Selectivity of the product, in %.",
+        "type": "float64"
+    },
+    "results.properties.catalytic.reaction.products.space_time_yield": {
+        "description": "Space-time-yield of the product, in mass product per mass catalyst per time.",
+        "type": "float64",
+        "unit": "1 / second"
+    },
+    "results.properties.catalytic.reaction.rates.name": {
+        "description": "IUPAC name of the reagent whose rate is captured.",
+        "type": "str"
+    },
+    "results.properties.catalytic.reaction.rates.reaction_rate": {
+        "description": "The rate of the number of reactant or product molecules converted/produced,\nper mass of total catalyst, per time.",
+        "type": "float64",
+        "unit": "mole / gram / second"
+    },
+    "results.properties.catalytic.reaction.rates.specific_mass_rate": {
+        "description": "The specific rate of the reactant, per mass of active catalyst component\n(e.g. metal).",
+        "type": "float64",
+        "unit": "mole / gram / second"
+    },
+    "results.properties.catalytic.reaction.rates.specific_surface_area_rate": {
+        "description": "The specific rate of the reactant, per surface area of active catalyst.",
+        "type": "float64",
+        "unit": "mole / meter ** 2 / second"
+    },
+    "results.properties.catalytic.reaction.rates.turnover_frequency": {
+        "description": "The turnover frequency, calculated from mol of reactant or product per\nnumber of sites over time.",
+        "type": "float64",
+        "unit": "1 / second"
+    },
+    "results.properties.catalytic.reaction.reaction_conditions.temperature": {
+        "description": "The reaction temperature(s) in the catalytic reactor during a chemical reaction.",
+        "type": "float64",
+        "unit": "kelvin"
+    },
+    "results.properties.catalytic.reaction.reaction_conditions.pressure": {
+        "description": "The pressure during the catalytic test reaction.",
+        "type": "float64",
+        "unit": "pascal"
+    },
+    "results.properties.catalytic.reaction.reaction_conditions.weight_hourly_space_velocity": {
+        "description": "The weight hourly space velocity in 1/time (gas flow per catalyst mass).",
+        "type": "float64",
+        "unit": "milliliter / gram / second"
+    },
+    "results.properties.catalytic.reaction.reaction_conditions.gas_hourly_space_velocity": {
+        "description": "The gas hourly space velocity in 1/time (gas flow per catalyst volume).",
+        "type": "float64",
+        "unit": "1 / second"
+    },
+    "results.properties.catalytic.reaction.reaction_conditions.flow_rate": {
+        "description": "The volumetric gas flow in volume per time.",
+        "type": "float64",
+        "unit": "meter ** 3 / second"
+    },
+    "results.properties.catalytic.reaction.reaction_conditions.time_on_stream": {
+        "description": "The time on stream of the catalyst in the catalytic reaction.",
+        "type": "float64",
+        "unit": "second"
+    },
+    "results.properties.catalytic.reaction.reaction_mechanism.initial_states": {
+        "description": "The names of reactants of the reaction or elementary step.",
+        "type": "str"
+    },
+    "results.properties.catalytic.reaction.reaction_mechanism.final_states": {
+        "description": "The names of products of the reaction or elementary step.",
+        "type": "str"
+    },
+    "results.properties.catalytic.reaction.reaction_mechanism.reaction_enthalpy": {
+        "description": "The reaction enthalpy of the reaction or reaction step.",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.properties.catalytic.reaction.reaction_mechanism.activation_energy": {
+        "description": "The (apparent) activation energy of the catalyzed reaction or reaction step.",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.properties.catalytic.catalyst.catalyst_name": {
+        "description": "Custom name of catalyst.",
+        "type": "str"
+    },
+    "results.properties.catalytic.catalyst.preparation_method": {
+        "description": "The main preparation method of the catalyst sample.",
+        "type": "str"
+    },
+    "results.properties.catalytic.catalyst.catalyst_type": {
+        "description": "The type of catalyst, wether metal or oxide, model, bulk, supported, ect.\nMultiple values can apply.",
+        "type": "str"
+    },
+    "results.properties.catalytic.catalyst.characterization_methods": {
+        "description": "A list of methods used to characterize the catalyst sample.",
+        "type": "str"
+    },
+    "results.properties.catalytic.catalyst.surface_area": {
+        "description": "The surface area per catalyst mass.",
+        "type": "float64",
+        "unit": "meter ** 2 / gram"
+    },
+    "results.properties.mechanical.energy_volume_curve.type": {
+        "type": "birch_euler,birch_lagrange,birch_murnaghan,mie_gruneisen,murnaghan,pack_evans_james,pourier_tarantola,raw,tait,vinet"
+    },
+    "results.properties.mechanical.bulk_modulus.type": {
+        "description": "Describes the methodology for obtaining the value.",
+        "type": "birch_euler,birch_lagrange,birch_murnaghan,mie_gruneisen,murnaghan,pack_evans_james,pourier_tarantola,reuss_average,tait,vinet,voigt_average,voigt_reuss_hill_average"
+    },
+    "results.properties.mechanical.bulk_modulus.value": {
+        "description": "Bulk modulus value.",
+        "type": "float64",
+        "unit": "pascal"
+    },
+    "results.properties.mechanical.shear_modulus.type": {
+        "description": "Describes the methodology for obtaining the value.",
+        "type": "reuss_average,voigt_average,voigt_reuss_hill_average"
+    },
+    "results.properties.mechanical.shear_modulus.value": {
+        "description": "Shear modulus value.",
+        "type": "float64",
+        "unit": "pascal"
+    },
+    "results.properties.thermodynamic.trajectory.available_properties": {
+        "description": "Subset of the property names that are present in this trajectory.",
+        "type": "energy_potential,pressure,temperature,volume"
+    },
+    "results.properties.thermodynamic.trajectory.provenance.label": {
+        "description": "Class or type of the provenance.\nCan be used to add further description to the provenance.",
+        "type": "str"
+    },
+    "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.time_step": {
+        "description": "The timestep at which the numerical integration is performed.",
+        "type": "float64",
+        "unit": "second"
+    },
+    "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.ensemble_type": {
+        "description": "The type of thermodynamic ensemble that was simulated.\n\nAllowed values are:\n\n| Thermodynamic Ensemble          | Description                               |\n\n| ---------------------- | ----------------------------------------- |\n\n| `\"NVE\"`           | Constant number of particles, volume, and energy |\n\n| `\"NVT\"`           | Constant number of particles, volume, and temperature |\n\n| `\"NPT\"`           | Constant number of particles, pressure, and temperature |\n\n| `\"NPH\"`           | Constant number of particles, pressure, and enthalpy |",
+        "type": "NPH,NPT,NVE,NVT"
+    },
+    "results.properties.spectroscopic.spectra.type": {
+        "description": "Identifier for the methodology done to obtain the spectra data: EELS, XAS, XPS, etc.",
+        "type": "EELS,EXAFS,RXIS,XANES,XAS,XES,XPS,unavailable"
+    },
+    "results.properties.spectroscopic.spectra.label": {
+        "description": "Identifier for the source of the spectra data, either 'computation' or 'experiment'.",
+        "type": "computation,experiment"
+    },
+    "results.properties.spectroscopic.spectra.provenance.label": {
+        "description": "Class or type of the provenance.\nCan be used to add further description to the provenance.",
+        "type": "str"
+    },
+    "results.properties.spectroscopic.spectra.provenance.eels.detector_type": {
+        "description": "Detector type.",
+        "type": "str"
+    },
+    "results.properties.spectroscopic.spectra.provenance.eels.resolution": {
+        "description": "Energy resolution of the detector.",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.properties.spectroscopic.spectra.provenance.eels.max_energy": {
+        "description": "Maximum energy of the detector.",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.properties.spectroscopic.spectra.provenance.eels.min_energy": {
+        "description": "Minimum energy of the detector.",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.properties.spectroscopic.spectra.provenance.electronic_structure.label": {
+        "description": "Class or type of the provenance.\nCan be used to add further description to the provenance.",
+        "type": "str"
+    },
+    "results.properties.geometry_optimization.convergence_tolerance_energy_difference": {
+        "description": "The input energy difference tolerance criterion.",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.properties.geometry_optimization.convergence_tolerance_force_maximum": {
+        "description": "The input maximum net force tolerance criterion.",
+        "type": "float64",
+        "unit": "newton"
+    },
+    "results.properties.geometry_optimization.final_force_maximum": {
+        "description": "The maximum net force in the last optimization step.",
+        "type": "float64",
+        "unit": "newton"
+    },
+    "results.properties.geometry_optimization.final_energy_difference": {
+        "description": "The difference in the energy_total between the last two steps during\noptimization.",
+        "type": "float64",
+        "unit": "joule"
+    },
+    "results.properties.geometry_optimization.final_displacement_maximum": {
+        "description": "The maximum displacement in the last optimization step with respect to previous.",
+        "type": "float64",
+        "unit": "meter"
+    },
+    "results.eln.sections": {
+        "description": "The type of sections used in entries to search for. By default these are the names\nof the used section definitions.",
+        "type": "str"
+    },
+    "results.eln.tags": {
+        "description": "Short tags that are useful to quickly search based on various\nuser defined criteria.",
+        "type": "str"
+    },
+    "results.eln.names": {
+        "description": "Short human readable and descriptive names that appear in\nELN entries.",
+        "type": "str"
+    },
+    "results.eln.descriptions": {
+        "description": "'Human descriptions that appear in ELN entries.",
+        "type": "str"
+    },
+    "results.eln.instruments": {
+        "description": "The name or type of instrument used in an activity, e.g. process or\nmeasurement.",
+        "type": "str"
+    },
+    "results.eln.methods": {
+        "description": "The name or the applied method in an activity, e.g. process or measurement",
+        "type": "str"
+    },
+    "results.eln.lab_ids": {
+        "description": "The laboratory specific id for any item, e.g. sample, chemical, instrument.",
+        "type": "str"
+    },
+    "results.material": {
+        "description": "Section containing information on the material composition and structure.",
+        "type": "None"
+    },
+    "results.material.elemental_composition": {
+        "description": "Section containing information about the concentration of an element,\n        given by its atomic and mass fraction within the system or material.",
+        "type": "None"
+    },
+    "results.material.symmetry": {
+        "description": "Section containing information about the symmetry of the material. All\n        of these properties are derived by running a symmetry analysis on a\n        representative geometry from the original data. This original geometry\n        is stored in results.properties together with the primitive and\n        conventional structures.",
+        "type": "None"
+    },
+    "results.material.topology": {
+        "description": "Describes a a structural part that has been identified within the entry.\n        May be related to other systems.",
+        "type": "None"
+    },
+    "results.material.topology.atoms": {
+        "description": "Describes the atomic structure of the physical system. This includes the atom positions, lattice vectors, etc.",
+        "type": "None"
+    },
+    "results.material.topology.elemental_composition": {
+        "description": "Section containing information about the concentration of an element,\n        given by its atomic and mass fraction within the system or material.",
+        "type": "None"
+    },
+    "results.material.topology.system_relation": {
+        "description": "Contains information about the relation between two different systems.",
+        "type": "None"
+    },
+    "results.material.topology.cell": {
+        "description": "Properties of a unit cell.",
+        "type": "None"
+    },
+    "results.material.topology.symmetry": {
+        "description": "Section containing information about the symmetry properties of a\n        conventional cell related to a system.",
+        "type": "None"
+    },
+    "results.material.topology.symmetry.wyckoff_sets": {
+        "description": "Section for storing Wyckoff set information. Only available for\n        conventional cells that have undergone symmetry analysis.",
+        "type": "None"
+    },
+    "results.material.topology.metal_coordination": {
+        "description": "Coordination number of an element, which represents the number of atoms directly bonded to the element.",
+        "type": "None"
+    },
+    "results.material.topology.active_orbitals": {
+        "type": "None"
+    },
+    "results.method": {
+        "description": "Contains a summary of the methodology that has been used in this entry.\n        This methodology applies to all of the reported properties and\n        determines the result of a single energy evalution. The individual\n        properties may be further methodological details affect e.g. the\n        sampling.",
+        "type": "None"
+    },
+    "results.method.simulation": {
+        "description": "Contains method details for a simulation entry.",
+        "type": "None"
+    },
+    "results.method.simulation.dft": {
+        "description": "Methodology for a DFT calculation.",
+        "type": "None"
+    },
+    "results.method.simulation.dft.hubbard_kanamori_model": {
+        "description": "Setup of the Hubbard model used in DFT+U",
+        "type": "None"
+    },
+    "results.method.simulation.tb": {
+        "description": "Methodology for a Tight-Binding calculation.",
+        "type": "None"
+    },
+    "results.method.simulation.gw": {
+        "description": "Methodology for a GW calculation.",
+        "type": "None"
+    },
+    "results.method.simulation.bse": {
+        "description": "Methodology for a BSE calculation.",
+        "type": "None"
+    },
+    "results.method.simulation.dmft": {
+        "description": "Methodology for a DMFT calculation.",
+        "type": "None"
+    },
+    "results.method.simulation.quantum_cms": {
+        "type": "None"
+    },
+    "results.method.simulation.quantum_cms.quantum_circuit": {
+        "type": "None"
+    },
+    "results.method.simulation.precision": {
+        "description": "Contains parameters for controlling or evaluating the convergence of the electronic structure.",
+        "type": "None"
+    },
+    "results.method.measurement": {
+        "description": "Contains method details for a measurement entry.",
+        "type": "None"
+    },
+    "results.method.measurement.xrd": {
+        "description": "Methodology for an X-Ray Diffraction measurement.",
+        "type": "None"
+    },
+    "results.properties": {
+        "description": "Contains the physical properties that have been calculated or used in\n        this entry.",
+        "type": "None"
+    },
+    "results.properties.structural": {
+        "description": "Structural properties.",
+        "type": "None"
+    },
+    "results.properties.structural.radial_distribution_function": {
+        "description": "Radial distribution function.",
+        "type": "None"
+    },
+    "results.properties.structural.radial_distribution_function.provenance": {
+        "description": "Contains provenance information for properties derived from molecular\n        dynamics simulations.",
+        "type": "None"
+    },
+    "results.properties.structural.radial_distribution_function.provenance.molecular_dynamics": {
+        "description": "Methodology for molecular dynamics.",
+        "type": "None"
+    },
+    "results.properties.structural.radius_of_gyration": {
+        "description": "Contains Radius of Gyration values as a trajectory.",
+        "type": "None"
+    },
+    "results.properties.structural.radius_of_gyration.provenance": {
+        "description": "Contains provenance information for properties derived from molecular\n        dynamics simulations.",
+        "type": "None"
+    },
+    "results.properties.structural.radius_of_gyration.provenance.molecular_dynamics": {
+        "description": "Methodology for molecular dynamics.",
+        "type": "None"
+    },
+    "results.properties.structural.diffraction_pattern": {
+        "description": "Diffraction pattern.",
+        "type": "None"
+    },
+    "results.properties.dynamical": {
+        "description": "Dynamical properties.",
+        "type": "None"
+    },
+    "results.properties.dynamical.mean_squared_displacement": {
+        "description": "Mean Squared Displacements.",
+        "type": "None"
+    },
+    "results.properties.dynamical.mean_squared_displacement.provenance": {
+        "description": "Contains provenance information for properties derived from molecular\n        dynamics simulations.",
+        "type": "None"
+    },
+    "results.properties.dynamical.mean_squared_displacement.provenance.molecular_dynamics": {
+        "description": "Methodology for molecular dynamics.",
+        "type": "None"
+    },
+    "results.properties.structures": {
+        "description": "Contains full atomistic representations of the material in different\n        forms.",
+        "type": "None"
+    },
+    "results.properties.structures.structure_original": {
+        "description": "Describes an atomistic structure.",
+        "type": "None"
+    },
+    "results.properties.structures.structure_original.species": {
+        "description": "Used to describe the species of the sites of this structure. Species can be pure chemical elements, or virtual-crystal atoms representing a statistical occupation of a\ngiven site by multiple chemical elements.",
+        "type": "None"
+    },
+    "results.properties.structures.structure_original.lattice_parameters": {
+        "description": "Lattice parameters of a cell.",
+        "type": "None"
+    },
+    "results.properties.structures.structure_original.wyckoff_sets": {
+        "description": "Section for storing Wyckoff set information. Only available for\n        conventional cells that have undergone symmetry analysis.",
+        "type": "None"
+    },
+    "results.properties.structures.structure_conventional": {
+        "description": "Describes an atomistic structure.",
+        "type": "None"
+    },
+    "results.properties.structures.structure_conventional.species": {
+        "description": "Used to describe the species of the sites of this structure. Species can be pure chemical elements, or virtual-crystal atoms representing a statistical occupation of a\ngiven site by multiple chemical elements.",
+        "type": "None"
+    },
+    "results.properties.structures.structure_conventional.lattice_parameters": {
+        "description": "Lattice parameters of a cell.",
+        "type": "None"
+    },
+    "results.properties.structures.structure_conventional.wyckoff_sets": {
+        "description": "Section for storing Wyckoff set information. Only available for\n        conventional cells that have undergone symmetry analysis.",
+        "type": "None"
+    },
+    "results.properties.structures.structure_primitive": {
+        "description": "Describes an atomistic structure.",
+        "type": "None"
+    },
+    "results.properties.structures.structure_primitive.species": {
+        "description": "Used to describe the species of the sites of this structure. Species can be pure chemical elements, or virtual-crystal atoms representing a statistical occupation of a\ngiven site by multiple chemical elements.",
+        "type": "None"
+    },
+    "results.properties.structures.structure_primitive.lattice_parameters": {
+        "description": "Lattice parameters of a cell.",
+        "type": "None"
+    },
+    "results.properties.structures.structure_primitive.wyckoff_sets": {
+        "description": "Section for storing Wyckoff set information. Only available for\n        conventional cells that have undergone symmetry analysis.",
+        "type": "None"
+    },
+    "results.properties.vibrational": {
+        "description": "Vibrational properties.",
+        "type": "None"
+    },
+    "results.properties.vibrational.band_structure_phonon": {
+        "description": "This section stores information on a vibrational band structure\n        evaluation along one-dimensional pathways in the reciprocal space.",
+        "type": "None"
+    },
+    "results.properties.vibrational.dos_phonon": {
+        "description": "Contains the phonon density of states.",
+        "type": "None"
+    },
+    "results.properties.vibrational.heat_capacity_constant_volume": {
+        "description": "Contains the values of the specific (per mass) and isochoric (constant\n        volume) heat capacity at different temperatures.",
+        "type": "None"
+    },
+    "results.properties.vibrational.energy_free_helmholtz": {
+        "description": "Contains the values of the Helmholtz free energy per atom at constant\n        volume and at different temperatures.",
+        "type": "None"
+    },
+    "results.properties.electronic": {
+        "description": "Electronic properties.",
+        "type": "None"
+    },
+    "results.properties.electronic.band_gap": {
+        "type": "None"
+    },
+    "results.properties.electronic.band_gap.provenance": {
+        "description": "",
+        "type": "None"
+    },
+    "results.properties.electronic.dos_electronic": {
+        "description": "Contains the total electronic density of states.\n\n        OLD VERSION: it will eventually be deprecated.",
+        "type": "None"
+    },
+    "results.properties.electronic.dos_electronic.band_gap": {
+        "type": "None"
+    },
+    "results.properties.electronic.dos_electronic.band_gap.provenance": {
+        "description": "Contains semantically labelled provenance information.\n        To be stored under PropertySection.provenance or children.",
+        "type": "None"
+    },
+    "results.properties.electronic.dos_electronic_new": {
+        "description": "Contains the electronic Density of States (DOS). This section can be repeated to refer to\n        different methodologies (e.g., label = 'DFT', 'GW', 'TB', etc.), and it can be spin-polarized\n        or not. The sub-section data points to each (if present) spin channels.",
+        "type": "None"
+    },
+    "results.properties.electronic.dos_electronic_new.data": {
+        "description": "Section containign the density of states data.\n\n        It includes the total DOS and the projected DOS values. We differentiate `species_projected` as the\n        projected DOS for same atomic species, `atom_projected` as the projected DOS for different\n        atoms in the cell, and `orbital_projected` as the projected DOS for the orbitals of each\n        atom.",
+        "type": "None"
+    },
+    "results.properties.electronic.dos_electronic_new.data.band_gap": {
+        "type": "None"
+    },
+    "results.properties.electronic.dos_electronic_new.data.band_gap.provenance": {
+        "description": "Contains semantically labelled provenance information.\n        To be stored under PropertySection.provenance or children.",
+        "type": "None"
+    },
+    "results.properties.electronic.band_structure_electronic": {
+        "description": "This section stores information on a electonic band structure\n        evaluation along one-dimensional pathways in the reciprocal space.",
+        "type": "None"
+    },
+    "results.properties.electronic.band_structure_electronic.band_gap": {
+        "type": "None"
+    },
+    "results.properties.electronic.band_structure_electronic.band_gap.provenance": {
+        "description": "Contains semantically labelled provenance information.\n        To be stored under PropertySection.provenance or children.",
+        "type": "None"
+    },
+    "results.properties.electronic.greens_functions_electronic": {
+        "description": "Base class for Green's functions information.",
+        "type": "None"
+    },
+    "results.properties.electronic.electric_field_gradient": {
+        "description": "Base class for the electric field gradient information. This section is relevant\n        for NMR and describes the potential generated my the nuclei in the system.",
+        "type": "None"
+    },
+    "results.properties.magnetic": {
+        "description": "Magnetic properties.",
+        "type": "None"
+    },
+    "results.properties.magnetic.magnetic_shielding": {
+        "description": "Base class for the atomic magnetic shielding information.",
+        "type": "None"
+    },
+    "results.properties.magnetic.spin_spin_coupling": {
+        "description": "Base class for the spin-spin coupling information.",
+        "type": "None"
+    },
+    "results.properties.magnetic.magnetic_susceptibility": {
+        "description": "Base class for the magnetic susceptibility information.",
+        "type": "None"
+    },
+    "results.properties.optoelectronic": {
+        "description": "Optoelectronic properties.",
+        "type": "None"
+    },
+    "results.properties.optoelectronic.solar_cell": {
+        "description": "Properties of solar cells.",
+        "type": "None"
+    },
+    "results.properties.catalytic": {
+        "description": "Properties relating to catalysis.",
+        "type": "None"
+    },
+    "results.properties.catalytic.reaction": {
+        "description": "A collection of specifications and properties of a full catalytic reaction.\n        This may include reaction conditions, results and mechanistic aspects of a reaction.",
+        "type": "None"
+    },
+    "results.properties.catalytic.reaction.reactants": {
+        "description": "A reactant in a catalytic test reaction. A reactant\n        is identified by having a conversion.",
+        "type": "None"
+    },
+    "results.properties.catalytic.reaction.products": {
+        "description": "A product of a catalytic reaction. A product here is usually identified by having\n        a selectivity, or a gas_concentration_out but no/zero gas_concentration_in.",
+        "type": "None"
+    },
+    "results.properties.catalytic.reaction.rates": {
+        "description": "Section bundling multiple representations of catalytic reaction rates.",
+        "type": "None"
+    },
+    "results.properties.catalytic.reaction.reaction_conditions": {
+        "description": "Conditions under which a catalytic test reaction was performed.",
+        "type": "None"
+    },
+    "results.properties.catalytic.reaction.reaction_mechanism": {
+        "description": "Properties of single steps of a catalytic reaction mechanism.",
+        "type": "None"
+    },
+    "results.properties.catalytic.catalyst": {
+        "description": "Properties of a heterogeneous catalyst.",
+        "type": "None"
+    },
+    "results.properties.mechanical": {
+        "description": "Mechanical properties.",
+        "type": "None"
+    },
+    "results.properties.mechanical.energy_volume_curve": {
+        "description": "Energy volume curve.",
+        "type": "None"
+    },
+    "results.properties.mechanical.bulk_modulus": {
+        "description": "Contains bulk modulus values calculated with different methodologies.",
+        "type": "None"
+    },
+    "results.properties.mechanical.shear_modulus": {
+        "description": "Contains shear modulus values calculated with different methodologies.",
+        "type": "None"
+    },
+    "results.properties.thermodynamic": {
+        "description": "Thermodynamic properties.",
+        "type": "None"
+    },
+    "results.properties.thermodynamic.trajectory": {
+        "description": "Thermodynamic properties reported for an ensemble evolving in time.",
+        "type": "None"
+    },
+    "results.properties.thermodynamic.trajectory.provenance": {
+        "description": "Contains provenance information for properties derived from molecular\n        dynamics simulations.",
+        "type": "None"
+    },
+    "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics": {
+        "description": "Methodology for molecular dynamics.",
+        "type": "None"
+    },
+    "results.properties.thermodynamic.trajectory.temperature": {
+        "description": "Contains temperature values evaluated at different times.",
+        "type": "None"
+    },
+    "results.properties.thermodynamic.trajectory.pressure": {
+        "description": "Contains pressure values evaluated at different times.",
+        "type": "None"
+    },
+    "results.properties.thermodynamic.trajectory.volume": {
+        "description": "Contains volume values evaluated at different times.",
+        "type": "None"
+    },
+    "results.properties.thermodynamic.trajectory.energy_potential": {
+        "description": "Contains energy values evaluated at different times.",
+        "type": "None"
+    },
+    "results.properties.spectroscopic": {
+        "description": "Spectroscopic properties.",
+        "type": "None"
+    },
+    "results.properties.spectroscopic.spectra": {
+        "description": "Base class for Spectra calculation information as obtained from an experiment or a computation.",
+        "type": "None"
+    },
+    "results.properties.spectroscopic.spectra.provenance": {
+        "description": "Contains provenance information (mainly the methodology section) for spectra properties\n        derived from an experiment or a calculation.",
+        "type": "None"
+    },
+    "results.properties.spectroscopic.spectra.provenance.eels": {
+        "description": "Base class for the EELS methodology.",
+        "type": "None"
+    },
+    "results.properties.spectroscopic.spectra.provenance.electronic_structure": {
+        "description": "",
+        "type": "None"
+    },
+    "results.properties.geometry_optimization": {
+        "description": "Geometry optimization results and settings.",
+        "type": "None"
+    },
+    "results.eln": {
+        "type": "None"
+    }
+}
\ No newline at end of file
diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
index f6a55ae..35f4c4a 100644
--- a/api_writer/test_ui.py
+++ b/api_writer/test_ui.py
@@ -3,10 +3,23 @@ import pandas as pd
 import os
 import json
 from opik import track, opik_context
+from vllm_api import http_bot
+from nomad_api import make_query
+from utils import add_values
 os.environ["OPIK_API_KEY"] = "" 
 os.environ["OPIK_WORKSPACE"] = "pilar12"
 
 n=3
+def format_num_response(response):
+    response=response[response.index('JSON')+5:]
+    values=response[response.index('\'\'\'')+3:].strip().split('\n')
+    base_json=response[:response.index('\'\'\'')].strip()
+    if values!=['']:
+        response=add_values(base_json,values)
+    else:
+        return base_json
+    return response
+
 def process_api_output(api_output: dict) -> pd.DataFrame:
     """
     Takes LLM output and returns a pandas DataFrame.
@@ -37,12 +50,31 @@ def process_api_output(api_output: dict) -> pd.DataFrame:
 
 track(capture_input=False, capture_output=False)
 def process_query(query):
-    llm_query = json.load(open("demo_api.json"))
-    api_response = json.load(open("demo_return.json"))
-    df = process_api_output(api_response)
-    r_llm_query = [llm_query for i in range(n)]
-    r_df = [df for i in range(n)]
-    return *r_llm_query, *r_llm_query, *r_df
+    # llm_query = json.load(open("demo_api.json"))
+    # api_response = json.load(open("demo_return.json"))
+    llm_response, llm_queries = http_bot(query)
+    r_df=[]
+    r_llm_query=[]
+    rh_llm_query=[]
+    for llm_query in llm_queries:
+        try:
+            llm_query = llm_query[llm_query.index("\'\'\'"):]
+        except:
+            pass        
+        try:
+            formatted_llm_query=format_num_response(llm_query)
+        except:
+            formatted_llm_query=llm_query
+        full_llm_query = llm_query +'\n\n\n' + formatted_llm_query
+        status_code, api_output = make_query(formatted_llm_query)
+        if status_code==200:
+            df = process_api_output(api_output)
+        else:
+            df = pd.DataFrame({"Error":[True]})
+        r_df.append(df)
+        r_llm_query.append(formatted_llm_query)
+        rh_llm_query.append(full_llm_query)
+    return *rh_llm_query, *r_llm_query, *r_df
 
 def user_fix_query(query):
     api_response = json.load(open("demo_return.json"))
@@ -142,4 +174,4 @@ with gr.Blocks() as demo:
     # clear_button.click(log_data, [query_input, *hidden_text, *output_text, *rating, pft_checkbox], None, preprocess=False)
 
 if __name__ == "__main__":
-    demo.launch(debug=True)
\ No newline at end of file
+    demo.launch(debug=True,share=True)
\ No newline at end of file
diff --git a/api_writer/utils.py b/api_writer/utils.py
new file mode 100644
index 0000000..0b46adf
--- /dev/null
+++ b/api_writer/utils.py
@@ -0,0 +1,43 @@
+import yaml
+import pickle
+from nomad.units import ureg as units
+import json
+def load_templates(model_path):
+    with open(model_path+"/system_prompt.txt", "r") as f:
+        system_prompt = f.read()
+    with open(model_path+"/chat_template.txt", "r") as f:
+        chat_template = f.read()
+    with open(model_path+"/eval_chat_template.txt", "r") as f:
+        eval_chat_template = f.read()
+    with open(model_path+"/full_context.pkl", "rb") as f:
+        full_context = pickle.load(f)
+    system_context=system_prompt.format(context=full_context)
+
+    return system_prompt, chat_template, eval_chat_template, full_context, system_context
+def load_config(config_path: str) -> dict:
+    """
+    Load configuration from YAML file
+       Dictionary containing configuration values
+    """
+    with open(config_path, "r") as f:
+        return yaml.safe_load(f) 
+
+def get_unit_quantities():
+    search_quantities=json.load(open("api_writer/search_quantities_lim.json","r"))
+    unit_quantities={}
+    for i in search_quantities:
+        if 'unit' in search_quantities[i]:
+            unit_quantities[i]=search_quantities[i]['unit']
+    return unit_quantities
+unit_quantities=get_unit_quantities()
+def convert_units(key,value,unit):
+    search_unit=unit_quantities[key]
+    value=units.Quantity(float(value),unit).to(search_unit).magnitude
+    return value
+def add_values(base_json,values):
+    for i in values:
+        key,tag,value,unit = i.split(':')
+        ind=base_json.index(tag)
+        value = convert_units(key,value,unit)
+        base_json = base_json[:ind-1] + str(value) + base_json[ind+len(tag)+1:]
+    return base_json
\ No newline at end of file
diff --git a/api_writer/vllm_api.py b/api_writer/vllm_api.py
new file mode 100644
index 0000000..c74689c
--- /dev/null
+++ b/api_writer/vllm_api.py
@@ -0,0 +1,31 @@
+from openai import OpenAI
+from utils import load_config,load_templates
+import requests
+from copy import deepcopy
+from hf_model import snapshot_path
+
+openai_api_key = "EMPTY"
+openai_api_base = "http://localhost:8000/v1"   
+client = OpenAI(
+    # defaults to os.environ.get("OPENAI_API_KEY")
+    api_key=openai_api_key,
+    base_url=openai_api_base,
+)   
+model = 'api-lora'
+sampling_params=load_config('api_writer/sampling_params.yaml')
+system_prompt, chat_template, eval_chat_template, full_context, system_context = load_templates(snapshot_path)
+def http_bot(prompt):
+    headers = {"User-Agent": "vLLM Client"}
+    prompt = eval_chat_template.format(SYSTEM=system_context, INPUT=prompt)
+    pload = deepcopy(sampling_params)
+    pload['prompt']=prompt
+    response = requests.post('http://localhost:8000/v1/completions',
+                             headers=headers,
+                             json=pload,
+                             stream=True)
+    outputs=[]
+    if response.status_code==200:
+        completions=response.json()['choices']
+        for i in completions:
+            outputs.append(i['text'])
+    return response, outputs
\ No newline at end of file
diff --git a/jupyterhub_test.ipynb b/jupyterhub_test.ipynb
index 01d8432..1d94396 100644
--- a/jupyterhub_test.ipynb
+++ b/jupyterhub_test.ipynb
@@ -2,12 +2,12 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 3,
    "id": "80440c29-cf44-4b98-b5c3-3d93e9cd3854",
    "metadata": {},
    "outputs": [],
    "source": [
-    "from test_ui import demo"
+    "from api_writer.test_ui import demo"
    ]
   },
   {
@@ -256,7 +256,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 4,
    "id": "12d620e0-0466-4fc6-b030-6fe7769446ca",
    "metadata": {},
    "outputs": [
@@ -264,8 +264,74 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "* Running on local URL:  http://127.0.0.1:7860\n"
+      "* Running on local URL:  http://127.0.0.1:7860\n",
+      "* Running on public URL: https://bb9ff0a89e0c2a5294.gradio.live\n",
+      "\n",
+      "This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from the terminal in the working directory to deploy to Hugging Face Spaces (https://huggingface.co/spaces)\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div><iframe src=\"https://bb9ff0a89e0c2a5294.gradio.live\" width=\"100%\" height=\"500\" allow=\"autoplay; camera; microphone; clipboard-read; clipboard-write;\" frameborder=\"0\" allowfullscreen></iframe></div>"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "Traceback (most recent call last):\n",
+      "  File \"/opt/conda/lib/python3.12/site-packages/gradio/queueing.py\", line 625, in process_events\n",
+      "    response = await route_utils.call_process_api(\n",
+      "               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "  File \"/opt/conda/lib/python3.12/site-packages/gradio/route_utils.py\", line 322, in call_process_api\n",
+      "    output = await app.get_blocks().process_api(\n",
+      "             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "  File \"/opt/conda/lib/python3.12/site-packages/gradio/blocks.py\", line 2137, in process_api\n",
+      "    result = await self.call_function(\n",
+      "             ^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "  File \"/opt/conda/lib/python3.12/site-packages/gradio/blocks.py\", line 1663, in call_function\n",
+      "    prediction = await anyio.to_thread.run_sync(  # type: ignore\n",
+      "                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "  File \"/opt/conda/lib/python3.12/site-packages/anyio/to_thread.py\", line 56, in run_sync\n",
+      "    return await get_async_backend().run_sync_in_worker_thread(\n",
+      "           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "  File \"/opt/conda/lib/python3.12/site-packages/anyio/_backends/_asyncio.py\", line 2441, in run_sync_in_worker_thread\n",
+      "    return await future\n",
+      "           ^^^^^^^^^^^^\n",
+      "  File \"/opt/conda/lib/python3.12/site-packages/anyio/_backends/_asyncio.py\", line 943, in run\n",
+      "    result = context.run(func, *args)\n",
+      "             ^^^^^^^^^^^^^^^^^^^^^^^^\n",
+      "  File \"/opt/conda/lib/python3.12/site-packages/gradio/utils.py\", line 890, in wrapper\n",
+      "    response = f(*args, **kwargs)\n",
+      "               ^^^^^^^^^^^^^^^^^^\n",
+      "  File \"/home/jovyan/api_writer/test_ui.py\", line 54, in process_query\n",
+      "    llm_response, llm_queries = http_bot(prompt)\n",
+      "                                         ^^^^^^\n",
+      "NameError: name 'prompt' is not defined\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Keyboard interruption in main thread... closing server.\n",
+      "Killing tunnel 127.0.0.1:7860 <> https://bb9ff0a89e0c2a5294.gradio.live\n"
      ]
+    },
+    {
+     "data": {
+      "text/plain": []
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
     }
    ],
    "source": [
@@ -274,10 +340,51 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 10,
    "id": "54ff0145-6e2c-4edc-9e7e-6e7845b2124a",
    "metadata": {},
    "outputs": [],
+   "source": [
+    "import sys"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "id": "b9822a93-e06f-4f0b-9e35-69cffdc227e3",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "True"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "sys.version_info >= (3,11)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "f03df0a7-2e42-474b-808d-479f93c8b27e",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import pint"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "7fcfd5f2-147d-46eb-9d7e-f9322eff6941",
+   "metadata": {},
+   "outputs": [],
    "source": []
   }
  ],
@@ -297,7 +404,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.13.1"
+   "version": "3.12.7"
   }
  },
  "nbformat": 4,
diff --git a/requirements.txt b/requirements.txt
index 85fe82e..db5ea09 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,3 +2,6 @@ vllm==0.8.3
 bitsandbytes>=0.45.3
 gradio==5.24.0
 opik==1.7.0
+flashinfer-python==0.2.5
+nomad-lab==1.3.15
+pint==0.24.1
diff --git a/vllm.ipynb b/vllm.ipynb
index caf1faf..5264aad 100644
--- a/vllm.ipynb
+++ b/vllm.ipynb
@@ -344,30 +344,22 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 1,
+   "execution_count": 5,
    "id": "0ad22fdf-4092-4097-b478-3c993213c152",
    "metadata": {},
    "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "/opt/conda/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
-      "  from .autonotebook import tqdm as notebook_tqdm\n"
-     ]
-    },
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "INFO 04-10 08:48:29 [__init__.py:239] Automatically detected platform cuda.\n"
+      "INFO 04-11 08:50:54 [__init__.py:239] Automatically detected platform cuda.\n"
      ]
     },
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "2025-04-10 08:48:30,732\tINFO util.py:154 -- Missing packages: ['ipywidgets']. Run `pip install -U ipywidgets`, then restart the notebook server for rich notebook output.\n"
+      "2025-04-11 08:50:56,651\tINFO util.py:154 -- Missing packages: ['ipywidgets']. Run `pip install -U ipywidgets`, then restart the notebook server for rich notebook output.\n"
      ]
     }
    ],
@@ -381,7 +373,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 1,
    "id": "aafc6ae6-ae6c-44d6-ac86-8c5e356edfe1",
    "metadata": {},
    "outputs": [
@@ -389,7 +381,9 @@
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "Fetching 11 files: 100%|██████████| 11/11 [00:09<00:00,  1.18it/s]\n"
+      "/opt/conda/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
+      "  from .autonotebook import tqdm as notebook_tqdm\n",
+      "Fetching 11 files: 100%|██████████| 11/11 [00:01<00:00,  5.69it/s]\n"
      ]
     }
    ],
@@ -411,7 +405,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 6,
    "id": "d69e341c-d700-47dc-a5c1-b6f11a58de0b",
    "metadata": {},
    "outputs": [],
@@ -432,7 +426,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 7,
    "id": "4a7689d5-7f30-41ba-8746-665056900df7",
    "metadata": {},
    "outputs": [],
@@ -702,7 +696,9 @@
    "cell_type": "code",
    "execution_count": 11,
    "id": "7684c9a5-ac63-482a-b995-c7d0a11610b3",
-   "metadata": {},
+   "metadata": {
+    "scrolled": true
+   },
    "outputs": [
     {
      "name": "stderr",
@@ -1032,7 +1028,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 32,
    "id": "eccab2a8-87af-470c-a72f-df3954faf656",
    "metadata": {
     "scrolled": true
@@ -1042,144 +1038,39 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Collecting gradio\n",
-      "  Downloading gradio-5.23.3-py3-none-any.whl.metadata (16 kB)\n",
-      "Collecting aiofiles<24.0,>=22.0 (from gradio)\n",
-      "  Using cached aiofiles-23.2.1-py3-none-any.whl.metadata (9.7 kB)\n",
-      "Requirement already satisfied: anyio<5.0,>=3.0 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from gradio) (4.8.0)\n",
-      "Collecting audioop-lts<1.0 (from gradio)\n",
-      "  Downloading audioop_lts-0.2.1-cp313-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.6 kB)\n",
-      "Collecting fastapi<1.0,>=0.115.2 (from gradio)\n",
-      "  Downloading fastapi-0.115.12-py3-none-any.whl.metadata (27 kB)\n",
-      "Collecting ffmpy (from gradio)\n",
-      "  Using cached ffmpy-0.5.0-py3-none-any.whl.metadata (3.0 kB)\n",
-      "Collecting gradio-client==1.8.0 (from gradio)\n",
-      "  Using cached gradio_client-1.8.0-py3-none-any.whl.metadata (7.1 kB)\n",
-      "Collecting groovy~=0.1 (from gradio)\n",
-      "  Using cached groovy-0.1.2-py3-none-any.whl.metadata (6.1 kB)\n",
-      "Requirement already satisfied: httpx>=0.24.1 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from gradio) (0.28.1)\n",
-      "Collecting huggingface-hub>=0.28.1 (from gradio)\n",
-      "  Downloading huggingface_hub-0.30.1-py3-none-any.whl.metadata (13 kB)\n",
-      "Requirement already satisfied: jinja2<4.0 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from gradio) (3.1.5)\n",
-      "Requirement already satisfied: markupsafe<4.0,>=2.0 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from gradio) (3.0.2)\n",
-      "Collecting numpy<3.0,>=1.0 (from gradio)\n",
-      "  Downloading numpy-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n",
-      "Collecting orjson~=3.0 (from gradio)\n",
-      "  Downloading orjson-3.10.16-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (41 kB)\n",
-      "Requirement already satisfied: packaging in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from gradio) (24.2)\n",
-      "Collecting pandas<3.0,>=1.0 (from gradio)\n",
-      "  Downloading pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (89 kB)\n",
-      "Collecting pillow<12.0,>=8.0 (from gradio)\n",
-      "  Downloading pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n",
-      "Collecting pydantic<2.12,>=2.0 (from gradio)\n",
-      "  Downloading pydantic-2.11.2-py3-none-any.whl.metadata (64 kB)\n",
-      "Collecting pydub (from gradio)\n",
-      "  Using cached pydub-0.25.1-py2.py3-none-any.whl.metadata (1.4 kB)\n",
-      "Collecting python-multipart>=0.0.18 (from gradio)\n",
-      "  Using cached python_multipart-0.0.20-py3-none-any.whl.metadata (1.8 kB)\n",
-      "Requirement already satisfied: pyyaml<7.0,>=5.0 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from gradio) (6.0.2)\n",
-      "Collecting ruff>=0.9.3 (from gradio)\n",
-      "  Downloading ruff-0.11.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (25 kB)\n",
-      "Collecting safehttpx<0.2.0,>=0.1.6 (from gradio)\n",
-      "  Using cached safehttpx-0.1.6-py3-none-any.whl.metadata (4.2 kB)\n",
-      "Collecting semantic-version~=2.0 (from gradio)\n",
-      "  Using cached semantic_version-2.10.0-py2.py3-none-any.whl.metadata (9.7 kB)\n",
-      "Collecting starlette<1.0,>=0.40.0 (from gradio)\n",
-      "  Downloading starlette-0.46.1-py3-none-any.whl.metadata (6.2 kB)\n",
-      "Requirement already satisfied: tomlkit<0.14.0,>=0.12.0 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from gradio) (0.13.2)\n",
-      "Collecting typer<1.0,>=0.12 (from gradio)\n",
-      "  Using cached typer-0.15.2-py3-none-any.whl.metadata (15 kB)\n",
-      "Requirement already satisfied: typing-extensions~=4.0 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from gradio) (4.12.2)\n",
-      "Collecting uvicorn>=0.14.0 (from gradio)\n",
-      "  Using cached uvicorn-0.34.0-py3-none-any.whl.metadata (6.5 kB)\n",
-      "Collecting fsspec (from gradio-client==1.8.0->gradio)\n",
-      "  Downloading fsspec-2025.3.2-py3-none-any.whl.metadata (11 kB)\n",
-      "Collecting websockets<16.0,>=10.0 (from gradio-client==1.8.0->gradio)\n",
-      "  Downloading websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.8 kB)\n",
-      "Requirement already satisfied: idna>=2.8 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from anyio<5.0,>=3.0->gradio) (3.10)\n",
-      "Requirement already satisfied: sniffio>=1.1 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from anyio<5.0,>=3.0->gradio) (1.3.1)\n",
-      "Requirement already satisfied: certifi in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from httpx>=0.24.1->gradio) (2024.12.14)\n",
-      "Requirement already satisfied: httpcore==1.* in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from httpx>=0.24.1->gradio) (1.0.7)\n",
-      "Requirement already satisfied: h11<0.15,>=0.13 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from httpcore==1.*->httpx>=0.24.1->gradio) (0.14.0)\n",
-      "Collecting filelock (from huggingface-hub>=0.28.1->gradio)\n",
-      "  Downloading filelock-3.18.0-py3-none-any.whl.metadata (2.9 kB)\n",
-      "Requirement already satisfied: requests in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from huggingface-hub>=0.28.1->gradio) (2.32.3)\n",
-      "Collecting tqdm>=4.42.1 (from huggingface-hub>=0.28.1->gradio)\n",
-      "  Using cached tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n",
-      "Requirement already satisfied: python-dateutil>=2.8.2 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from pandas<3.0,>=1.0->gradio) (2.9.0.post0)\n",
-      "Collecting pytz>=2020.1 (from pandas<3.0,>=1.0->gradio)\n",
-      "  Downloading pytz-2025.2-py2.py3-none-any.whl.metadata (22 kB)\n",
-      "Collecting tzdata>=2022.7 (from pandas<3.0,>=1.0->gradio)\n",
-      "  Downloading tzdata-2025.2-py2.py3-none-any.whl.metadata (1.4 kB)\n",
-      "Collecting annotated-types>=0.6.0 (from pydantic<2.12,>=2.0->gradio)\n",
-      "  Using cached annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n",
-      "Collecting pydantic-core==2.33.1 (from pydantic<2.12,>=2.0->gradio)\n",
-      "  Downloading pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.8 kB)\n",
-      "Collecting typing-inspection>=0.4.0 (from pydantic<2.12,>=2.0->gradio)\n",
-      "  Downloading typing_inspection-0.4.0-py3-none-any.whl.metadata (2.6 kB)\n",
-      "Collecting click>=8.0.0 (from typer<1.0,>=0.12->gradio)\n",
-      "  Using cached click-8.1.8-py3-none-any.whl.metadata (2.3 kB)\n",
-      "Collecting shellingham>=1.3.0 (from typer<1.0,>=0.12->gradio)\n",
-      "  Using cached shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)\n",
-      "Collecting rich>=10.11.0 (from typer<1.0,>=0.12->gradio)\n",
-      "  Downloading rich-14.0.0-py3-none-any.whl.metadata (18 kB)\n",
-      "Requirement already satisfied: six>=1.5 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from python-dateutil>=2.8.2->pandas<3.0,>=1.0->gradio) (1.17.0)\n",
-      "Collecting markdown-it-py>=2.2.0 (from rich>=10.11.0->typer<1.0,>=0.12->gradio)\n",
-      "  Using cached markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)\n",
-      "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from rich>=10.11.0->typer<1.0,>=0.12->gradio) (2.19.1)\n",
-      "Requirement already satisfied: charset-normalizer<4,>=2 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from requests->huggingface-hub>=0.28.1->gradio) (3.4.1)\n",
-      "Requirement already satisfied: urllib3<3,>=1.21.1 in /software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages (from requests->huggingface-hub>=0.28.1->gradio) (2.3.0)\n",
-      "Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer<1.0,>=0.12->gradio)\n",
-      "  Using cached mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n",
-      "Downloading gradio-5.23.3-py3-none-any.whl (46.5 MB)\n",
-      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m46.5/46.5 MB\u001b[0m \u001b[31m130.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n",
-      "\u001b[?25hUsing cached gradio_client-1.8.0-py3-none-any.whl (322 kB)\n",
-      "Using cached aiofiles-23.2.1-py3-none-any.whl (15 kB)\n",
-      "Downloading audioop_lts-0.2.1-cp313-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (82 kB)\n",
-      "Downloading fastapi-0.115.12-py3-none-any.whl (95 kB)\n",
-      "Using cached groovy-0.1.2-py3-none-any.whl (14 kB)\n",
-      "Downloading huggingface_hub-0.30.1-py3-none-any.whl (481 kB)\n",
-      "Downloading numpy-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.1 MB)\n",
-      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m16.1/16.1 MB\u001b[0m \u001b[31m116.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
-      "Downloading orjson-3.10.16-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (133 kB)\n",
-      "Downloading pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.7 MB)\n",
-      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.7/12.7 MB\u001b[0m \u001b[31m85.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
-      "Downloading pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl (4.5 MB)\n",
-      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.5/4.5 MB\u001b[0m \u001b[31m92.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
-      "Downloading pydantic-2.11.2-py3-none-any.whl (443 kB)\n",
-      "Downloading pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n",
-      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.0/2.0 MB\u001b[0m \u001b[31m62.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
-      "Using cached python_multipart-0.0.20-py3-none-any.whl (24 kB)\n",
-      "Downloading ruff-0.11.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.3 MB)\n",
-      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m11.3/11.3 MB\u001b[0m \u001b[31m122.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
-      "Using cached safehttpx-0.1.6-py3-none-any.whl (8.7 kB)\n",
-      "Using cached semantic_version-2.10.0-py2.py3-none-any.whl (15 kB)\n",
-      "Downloading starlette-0.46.1-py3-none-any.whl (71 kB)\n",
-      "Using cached typer-0.15.2-py3-none-any.whl (45 kB)\n",
-      "Using cached uvicorn-0.34.0-py3-none-any.whl (62 kB)\n",
-      "Using cached ffmpy-0.5.0-py3-none-any.whl (6.0 kB)\n",
-      "Using cached pydub-0.25.1-py2.py3-none-any.whl (32 kB)\n",
-      "Using cached annotated_types-0.7.0-py3-none-any.whl (13 kB)\n",
-      "Using cached click-8.1.8-py3-none-any.whl (98 kB)\n",
-      "Downloading fsspec-2025.3.2-py3-none-any.whl (194 kB)\n",
-      "Downloading pytz-2025.2-py2.py3-none-any.whl (509 kB)\n",
-      "Downloading rich-14.0.0-py3-none-any.whl (243 kB)\n",
-      "Using cached shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)\n",
-      "Using cached tqdm-4.67.1-py3-none-any.whl (78 kB)\n",
-      "Downloading typing_inspection-0.4.0-py3-none-any.whl (14 kB)\n",
-      "Downloading tzdata-2025.2-py2.py3-none-any.whl (347 kB)\n",
-      "Downloading websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (182 kB)\n",
-      "Downloading filelock-3.18.0-py3-none-any.whl (16 kB)\n",
-      "Using cached markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n",
-      "Using cached mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n",
-      "Installing collected packages: pytz, pydub, websockets, tzdata, typing-inspection, tqdm, shellingham, semantic-version, ruff, python-multipart, pydantic-core, pillow, orjson, numpy, mdurl, groovy, fsspec, filelock, ffmpy, click, audioop-lts, annotated-types, aiofiles, uvicorn, starlette, pydantic, pandas, markdown-it-py, huggingface-hub, safehttpx, rich, gradio-client, fastapi, typer, gradio\n",
-      "\u001b[31mERROR: Could not install packages due to an OSError: [Errno 13] Permission denied: '/software/python/3.13.1-test-gcc14.2.0/jupyter/lib/python3.13/site-packages/pytz'\n",
-      "Check the permissions.\n",
-      "\u001b[0m\u001b[31m\n",
-      "\u001b[0m\n",
-      "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.0.1\u001b[0m\n",
-      "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n"
+      "* Running on local URL:  http://127.0.0.1:8001\n",
+      "* Running on public URL: https://75f4ea364a339e62b5.gradio.live\n",
+      "\n",
+      "This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from the terminal in the working directory to deploy to Hugging Face Spaces (https://huggingface.co/spaces)\n"
      ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div><iframe src=\"https://75f4ea364a339e62b5.gradio.live\" width=\"100%\" height=\"500\" allow=\"autoplay; camera; microphone; clipboard-read; clipboard-write;\" frameborder=\"0\" allowfullscreen></iframe></div>"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Keyboard interruption in main thread... closing server.\n",
+      "Killing tunnel 127.0.0.1:8001 <> https://75f4ea364a339e62b5.gradio.live\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": []
+     },
+     "execution_count": 32,
+     "metadata": {},
+     "output_type": "execute_result"
     }
    ],
    "source": [
@@ -1188,27 +1079,37 @@
     "\n",
     "import gradio as gr\n",
     "import requests\n",
+    "from openai import OpenAI\n",
     "\n",
-    "\n",
+    "host=None\n",
+    "port=8001\n",
+    "openai_api_key = \"EMPTY\"\n",
+    "openai_api_base = \"http://localhost:8000/v1\"\n",
+    "    \n",
+    "client = OpenAI(\n",
+    "    # defaults to os.environ.get(\"OPENAI_API_KEY\")\n",
+    "    api_key=openai_api_key,\n",
+    "    base_url=openai_api_base,\n",
+    ")\n",
+    "    \n",
+    "models = client.models.list()\n",
+    "model = 'api-lora'\n",
     "def http_bot(prompt):\n",
-    "    headers = {\"User-Agent\": \"vLLM Client\"}\n",
-    "    pload = {\n",
-    "        \"prompt\": prompt,\n",
-    "        \"stream\": True,\n",
-    "        \"max_tokens\": 128,\n",
-    "    }\n",
-    "    response = requests.post(args.model_url,\n",
-    "                             headers=headers,\n",
-    "                             json=pload,\n",
-    "                             stream=True)\n",
+    "    prompt = eval_chat_template.format(SYSTEM=system_context, INPUT=prompt)\n",
     "\n",
-    "    for chunk in response.iter_lines(chunk_size=8192,\n",
-    "                                     decode_unicode=False,\n",
-    "                                     delimiter=b\"\\n\"):\n",
-    "        if chunk:\n",
-    "            data = json.loads(chunk.decode(\"utf-8\"))\n",
-    "            output = data[\"text\"][0]\n",
-    "            yield output\n",
+    "    # Modify OpenAI's API key and API base to use vLLM's API server.\n",
+    "    # Completion API\n",
+    "    stream = False\n",
+    "    completion = client.completions.create(\n",
+    "        model=model,\n",
+    "        prompt=prompt,\n",
+    "        echo=False,\n",
+    "        n=1,\n",
+    "        stream=stream,\n",
+    "        logprobs=3,\n",
+    "    max_tokens=256)\n",
+    "    return completion.choices[0].text\n",
+    "    \n",
     "\n",
     "\n",
     "def build_demo():\n",
@@ -1222,26 +1123,280 @@
     "    return demo\n",
     "\n",
     "\n",
-    "if __name__ == \"__main__\":\n",
-    "    parser = argparse.ArgumentParser()\n",
-    "    parser.add_argument(\"--host\", type=str, default=None)\n",
-    "    parser.add_argument(\"--port\", type=int, default=8001)\n",
-    "    parser.add_argument(\"--model-url\",\n",
-    "                        type=str,\n",
-    "                        default=\"http://localhost:8000/generate\")\n",
-    "    args = parser.parse_args()\n",
     "\n",
-    "    demo = build_demo()\n",
-    "    demo.queue().launch(server_name=args.host,\n",
-    "                        server_port=args.port,\n",
-    "                        share=True)\n"
+    "\n",
+    "demo = build_demo()\n",
+    "demo.queue().launch(\n",
+    "    debug=True,\n",
+    "    server_port=port,\n",
+    "    share=True)\n"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 33,
    "id": "d253d9d1-e3c4-4ca5-bf15-2002c23a994e",
    "metadata": {},
+   "outputs": [
+    {
+     "ename": "TypeError",
+     "evalue": "Completions.create() got an unexpected keyword argument 'top_k'",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[33], line 20\u001b[0m\n\u001b[1;32m     18\u001b[0m q\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mRetrieve entries of aluminum nitride in a wurtzite structure.\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m     19\u001b[0m queries \u001b[38;5;241m=\u001b[39m [eval_chat_template\u001b[38;5;241m.\u001b[39mformat(SYSTEM\u001b[38;5;241m=\u001b[39msystem_context, INPUT\u001b[38;5;241m=\u001b[39mq),eval_chat_template\u001b[38;5;241m.\u001b[39mformat(SYSTEM\u001b[38;5;241m=\u001b[39msystem_context, INPUT\u001b[38;5;241m=\u001b[39mq)][\u001b[38;5;241m0\u001b[39m]\n\u001b[0;32m---> 20\u001b[0m completion \u001b[38;5;241m=\u001b[39m \u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcompletions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m     21\u001b[0m \u001b[43m    \u001b[49m\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m     22\u001b[0m \u001b[43m    \u001b[49m\u001b[43mprompt\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mqueries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m     23\u001b[0m \u001b[43m    \u001b[49m\u001b[43mecho\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m     24\u001b[0m \u001b[43m    \u001b[49m\u001b[43mstream\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m     25\u001b[0m \u001b[43m    \u001b[49m\u001b[43mlogprobs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m     26\u001b[0m \u001b[43m    \u001b[49m\u001b[43mn\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m     27\u001b[0m \u001b[43m    \u001b[49m\u001b[43mtemperature\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1.0\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m     28\u001b[0m \u001b[43m    \u001b[49m\u001b[43mmax_tokens\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m2048\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m     29\u001b[0m \u001b[43m    \u001b[49m\u001b[43mtop_k\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m10\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m     30\u001b[0m \u001b[43m    \u001b[49m\u001b[38;5;66;43;03m# top_p=0.,\u001b[39;49;00m\n\u001b[1;32m     31\u001b[0m \u001b[43m    \u001b[49m\u001b[38;5;66;43;03m# presence_penalty=1,\u001b[39;49;00m\n\u001b[1;32m     32\u001b[0m \u001b[43m    \u001b[49m\u001b[38;5;66;43;03m# repetition_penalty=0,\u001b[39;49;00m\n\u001b[1;32m     33\u001b[0m \u001b[43m    \u001b[49m\u001b[38;5;66;43;03m# frequency_penalty=0,\u001b[39;49;00m\n\u001b[1;32m     34\u001b[0m \u001b[43m    \u001b[49m\u001b[43mseed\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m42\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m     35\u001b[0m \u001b[43m    \u001b[49m\u001b[43mstop\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m<|end_of_text|>\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m     37\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCompletion results:\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m     38\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m stream:\n",
+      "File \u001b[0;32m/opt/conda/lib/python3.12/site-packages/openai/_utils/_utils.py:279\u001b[0m, in \u001b[0;36mrequired_args.<locals>.inner.<locals>.wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m    277\u001b[0m             msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMissing required argument: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mquote(missing[\u001b[38;5;241m0\u001b[39m])\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    278\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(msg)\n\u001b[0;32m--> 279\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
+      "\u001b[0;31mTypeError\u001b[0m: Completions.create() got an unexpected keyword argument 'top_k'"
+     ]
+    }
+   ],
+   "source": [
+    "from openai import OpenAI\n",
+    "\n",
+    "# Modify OpenAI's API key and API base to use vLLM's API server.\n",
+    "openai_api_key = \"EMPTY\"\n",
+    "openai_api_base = \"http://localhost:8000/v1\"\n",
+    "\n",
+    "client = OpenAI(\n",
+    "    # defaults to os.environ.get(\"OPENAI_API_KEY\")\n",
+    "    api_key=openai_api_key,\n",
+    "    base_url=openai_api_base,\n",
+    ")\n",
+    "\n",
+    "models = client.models.list()\n",
+    "model = models.data[1].id\n",
+    "\n",
+    "# Completion API\n",
+    "stream = False\n",
+    "q='Retrieve entries of aluminum nitride in a wurtzite structure.'\n",
+    "queries = [eval_chat_template.format(SYSTEM=system_context, INPUT=q),eval_chat_template.format(SYSTEM=system_context, INPUT=q)][0]\n",
+    "completion = client.completions.create(\n",
+    "    model=model,\n",
+    "    prompt=queries,\n",
+    "    echo=False,\n",
+    "    stream=stream,\n",
+    "    logprobs=3,\n",
+    "    n=2,\n",
+    "    temperature=1.0,\n",
+    "    max_tokens=2048,\n",
+    "    top_k=10,\n",
+    "    # top_p=0.,\n",
+    "    # presence_penalty=1,\n",
+    "    # repetition_penalty=0,\n",
+    "    # frequency_penalty=0,\n",
+    "    seed=42,\n",
+    "    stop=[\"<|end_of_text|>\"],)\n",
+    "\n",
+    "print(\"Completion results:\")\n",
+    "if stream:\n",
+    "    for c in completion:\n",
+    "        print(c.choices[0].text)\n",
+    "else:\n",
+    "    print(completion)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "id": "16e8b817-1943-45b8-af79-05fbd4654ed8",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'\\n\\n\\'\\'\\' JSON: {\\n    \"results.material.elements\": {\\n        \"all\": [\\n            \"Al\",\\n            \"N\"\\n        ]\\n    },\\n    \"results.material.symmetry.structure_name\": {\\n        \"any\": [\\n            \"wurtzite\"\\n        ]\\n    }\\n}\\'\\'\\' '"
+      ]
+     },
+     "execution_count": 21,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "completion.choices[0].text"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "id": "aa24ea9b-60e2-41b6-8f2c-9c1335447284",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'\\n\\n\\'\\'\\' JSON: {\\n    \"and\": [\\n        {\\n            \"results.material.elements\": {\\n                \"all\": [\\n                    \"Al\",\\n                    \"N\"\\n                ]\\n            },\\n            \"results.material.symmetry.structure_name\": {\\n                \"any\": [\\n                    \"wurtzite\"\\n                ]\\n            }\\n        }\\n    ]\\n}\\'\\'\\' '"
+      ]
+     },
+     "execution_count": 22,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "completion.choices[1].text"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 31,
+   "id": "22e46d26-2b11-475d-81c0-03fabf09427b",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'api-lora'"
+      ]
+     },
+     "execution_count": 31,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "model"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 71,
+   "id": "a6ef0791-493c-4694-8afe-57e906c0e532",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import requests\n",
+    "\n",
+    "def http_bot(prompt):\n",
+    "    headers = {\"User-Agent\": \"vLLM Client\"}\n",
+    "    prompt = eval_chat_template.format(SYSTEM=system_context, INPUT=prompt)\n",
+    "    pload = {\n",
+    "        \"n\":2,\n",
+    "        \"model\": model,\n",
+    "        \"prompt\": prompt,\n",
+    "        \"stream\": False,\n",
+    "        \"max_tokens\": 2048,\n",
+    "        \"temperature\":1.0,    \n",
+    "        \"top_k\":10,\n",
+    "        \"seed\":42,\n",
+    "    \"stop\":[\"<|end_of_text|>\"]\n",
+    "        \n",
+    "    }\n",
+    "    response = requests.post('http://localhost:8000/v1/completions',\n",
+    "                             headers=headers,\n",
+    "                             json=pload,\n",
+    "                             stream=True)\n",
+    "    outputs=[]\n",
+    "    if response.status_code==200:\n",
+    "        completions=response.json()['choices']\n",
+    "        for i in completions:\n",
+    "            outputs.append(i['text']))\n",
+    "    return response, outputs\n",
+    "                "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 72,
+   "id": "928eea2c-e09a-4c60-a31c-21a972e59def",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "\n",
+      "\n",
+      "''' JSON: {\n",
+      "    \"and\": [\n",
+      "        {\n",
+      "            \"results.material.structural_type\": {\n",
+      "                \"any\": [\n",
+      "                    \"bulk\"\n",
+      "                ]\n",
+      "            },\n",
+      "            \"results.material.symmetry.structure_name\": {\n",
+      "                \"any\": [\n",
+      "                    \"wurtzite\"\n",
+      "                ]\n",
+      "            },\n",
+      "            \"results.material.elements\": {\n",
+      "                \"all\": [\n",
+      "                    \"Al\",\n",
+      "                    \"N\"\n",
+      "                ]\n",
+      "            }\n",
+      "        }\n",
+      "    ]\n",
+      "}''' \n",
+      "\n",
+      "\n",
+      "''' JSON: {\n",
+      "    \"results.material.elements\": {\n",
+      "        \"all\": [\n",
+      "            \"Al\",\n",
+      "            \"N\"\n",
+      "        ]\n",
+      "    },\n",
+      "    \"results.material.symmetry.structure_name\": {\n",
+      "        \"any\": [\n",
+      "            \"wurtzite\"\n",
+      "        ]\n",
+      "    }\n",
+      "}''' \n"
+     ]
+    }
+   ],
+   "source": [
+    "response=http_bot('Retrieve entries of aluminum nitride in a wurtzite structure')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 74,
+   "id": "03aca6d9-5781-4671-a354-41d4a1e22ba8",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'id': 'cmpl-a7b33e53eb9542bfa5c1468b70164b14',\n",
+       " 'object': 'text_completion',\n",
+       " 'created': 1744365797,\n",
+       " 'model': 'api-lora',\n",
+       " 'choices': [{'index': 0,\n",
+       "   'text': '\\n\\n\\'\\'\\' JSON: {\\n    \"and\": [\\n        {\\n            \"results.material.structural_type\": {\\n                \"any\": [\\n                    \"bulk\"\\n                ]\\n            },\\n            \"results.material.symmetry.structure_name\": {\\n                \"any\": [\\n                    \"wurtzite\"\\n                ]\\n            },\\n            \"results.material.elements\": {\\n                \"all\": [\\n                    \"Al\",\\n                    \"N\"\\n                ]\\n            }\\n        }\\n    ]\\n}\\'\\'\\' ',\n",
+       "   'logprobs': None,\n",
+       "   'finish_reason': 'stop',\n",
+       "   'stop_reason': None,\n",
+       "   'prompt_logprobs': None},\n",
+       "  {'index': 1,\n",
+       "   'text': '\\n\\n\\'\\'\\' JSON: {\\n    \"results.material.elements\": {\\n        \"all\": [\\n            \"Al\",\\n            \"N\"\\n        ]\\n    },\\n    \"results.material.symmetry.structure_name\": {\\n        \"any\": [\\n            \"wurtzite\"\\n        ]\\n    }\\n}\\'\\'\\' ',\n",
+       "   'logprobs': None,\n",
+       "   'finish_reason': 'stop',\n",
+       "   'stop_reason': None,\n",
+       "   'prompt_logprobs': None}],\n",
+       " 'usage': {'prompt_tokens': 19697,\n",
+       "  'total_tokens': 19848,\n",
+       "  'completion_tokens': 151,\n",
+       "  'prompt_tokens_details': None}}"
+      ]
+     },
+     "execution_count": 74,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "response.json()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "ae105b63-69ce-415d-99e7-fe7d357fc594",
+   "metadata": {},
    "outputs": [],
    "source": []
   }
@@ -1262,7 +1417,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.13.1"
+   "version": "3.12.7"
   }
  },
  "nbformat": 4,
-- 
GitLab


From 9572cbcff9d5aacdb7a58d2cc2957333c76cf9b3 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Fri, 11 Apr 2025 15:53:56 +0200
Subject: [PATCH 08/28] fix requirement

---
 requirements.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/requirements.txt b/requirements.txt
index db5ea09..5e3ed77 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -4,4 +4,4 @@ gradio==5.24.0
 opik==1.7.0
 flashinfer-python==0.2.5
 nomad-lab==1.3.15
-pint==0.24.1
+
-- 
GitLab


From 9a0db727a6478c6338a90cfebe26de92967b53c9 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Tue, 22 Apr 2025 10:17:22 +0200
Subject: [PATCH 09/28] import fix

---
 Dockerfile             |   2 +-
 api_writer/test_ui.py  |   6 +-
 api_writer/vllm_api.py |   4 +-
 jupyterhub_test.ipynb  |   2 +-
 vllm_simple.ipynb      | 439 +++++++++++++++++++++++++++++++++++++++++
 5 files changed, 446 insertions(+), 7 deletions(-)
 create mode 100644 vllm_simple.ipynb

diff --git a/Dockerfile b/Dockerfile
index 1afa325..74421d3 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -36,5 +36,5 @@ WORKDIR ${HOME}
 COPY --chown=${NB_UID}:${NB_GID} api_writer/ api_writer/
 COPY --chown=${NB_UID}:${NB_GID} jupyterhub_test.ipynb .
 COPY --chown=${NB_UID}:${NB_GID} vllm.ipynb .
-
+COPY --chown=${NB_UID}:${NB_GID} vllm_simple.ipynb .
     
\ No newline at end of file
diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
index 35f4c4a..997b5a3 100644
--- a/api_writer/test_ui.py
+++ b/api_writer/test_ui.py
@@ -3,9 +3,9 @@ import pandas as pd
 import os
 import json
 from opik import track, opik_context
-from vllm_api import http_bot
-from nomad_api import make_query
-from utils import add_values
+from api_writer.vllm_api import http_bot
+from api_writer.nomad_api import make_query
+from api_writer.utils import add_values
 os.environ["OPIK_API_KEY"] = "" 
 os.environ["OPIK_WORKSPACE"] = "pilar12"
 
diff --git a/api_writer/vllm_api.py b/api_writer/vllm_api.py
index c74689c..738efd6 100644
--- a/api_writer/vllm_api.py
+++ b/api_writer/vllm_api.py
@@ -1,8 +1,8 @@
 from openai import OpenAI
-from utils import load_config,load_templates
+from api_writer.utils import load_config,load_templates
 import requests
 from copy import deepcopy
-from hf_model import snapshot_path
+from api_writer.hf_model import snapshot_path
 
 openai_api_key = "EMPTY"
 openai_api_base = "http://localhost:8000/v1"   
diff --git a/jupyterhub_test.ipynb b/jupyterhub_test.ipynb
index 1d94396..de28238 100644
--- a/jupyterhub_test.ipynb
+++ b/jupyterhub_test.ipynb
@@ -404,7 +404,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.12.7"
+   "version": "3.13.1"
   }
  },
  "nbformat": 4,
diff --git a/vllm_simple.ipynb b/vllm_simple.ipynb
new file mode 100644
index 0000000..fde6fb5
--- /dev/null
+++ b/vllm_simple.ipynb
@@ -0,0 +1,439 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "0ad22fdf-4092-4097-b478-3c993213c152",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/opt/conda/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
+      "  from .autonotebook import tqdm as notebook_tqdm\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "INFO 04-22 08:06:24 [__init__.py:239] Automatically detected platform cuda.\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2025-04-22 08:06:26,373\tINFO util.py:154 -- Missing packages: ['ipywidgets']. Run `pip install -U ipywidgets`, then restart the notebook server for rich notebook output.\n"
+     ]
+    }
+   ],
+   "source": [
+    "import vllm\n",
+    "import pickle\n",
+    "import torch\n",
+    "import time\n",
+    "import json"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "aafc6ae6-ae6c-44d6-ac86-8c5e356edfe1",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "Fetching 11 files: 100%|██████████| 11/11 [00:33<00:00,  3.09s/it]\n"
+     ]
+    }
+   ],
+   "source": [
+    "hf_token=\"\"\n",
+    "from huggingface_hub import snapshot_download\n",
+    "snapshot_path=snapshot_download(\"pilar12/nomad-api-writer-lora\", revision= 'v_27', token=hf_token)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "d69e341c-d700-47dc-a5c1-b6f11a58de0b",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def load_templates(model_path):\n",
+    "    with open(model_path+\"/system_prompt.txt\", \"r\") as f:\n",
+    "        system_prompt = f.read()\n",
+    "    with open(model_path+\"/chat_template.txt\", \"r\") as f:\n",
+    "        chat_template = f.read()\n",
+    "    with open(model_path+\"/eval_chat_template.txt\", \"r\") as f:\n",
+    "        eval_chat_template = f.read()\n",
+    "    with open(model_path+\"/full_context.pkl\", \"rb\") as f:\n",
+    "        full_context = pickle.load(f)\n",
+    "    system_context=system_prompt.format(context=full_context)\n",
+    "\n",
+    "    return system_prompt, chat_template, eval_chat_template, full_context, system_context"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "4a7689d5-7f30-41ba-8746-665056900df7",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# lora_path=\"huggingface/hub/models--pilar12--nomad-api-writer-lora/snapshots/4cf37226134cf2256c89a20cfb782bdb7d42d9d0\"\n",
+    "lora_path = snapshot_path\n",
+    "system_prompt, chat_template, eval_chat_template, full_context, system_context = load_templates(lora_path)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "cf768300-1e01-42dc-a43a-2083ff09a502",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "adapter_config = json.load(open(snapshot_path+\"/adapter_config.json\",\"r\"))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "id": "07f38d9a-bbd2-4c76-997c-1858d82fce88",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "GPU = NVIDIA A40. Max memory = 44.339 GB.\n",
+      "0.0 GB of memory reserved.\n"
+     ]
+    }
+   ],
+   "source": [
+    "gpu_stats = torch.cuda.get_device_properties(0)\n",
+    "start_gpu_memory = round(torch.cuda.max_memory_reserved() / 1024 / 1024 / 1024, 3)\n",
+    "max_memory = round(gpu_stats.total_memory / 1024 / 1024 / 1024, 3)\n",
+    "print(f\"GPU = {gpu_stats.name}. Max memory = {max_memory} GB.\")\n",
+    "print(f\"{start_gpu_memory} GB of memory reserved.\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "id": "e157cdd4-1320-497a-b48e-426d1582a281",
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "INFO 04-22 08:08:24 [config.py:600] This model supports multiple tasks: {'classify', 'reward', 'score', 'generate', 'embed'}. Defaulting to 'generate'.\n",
+      "WARNING 04-22 08:08:25 [config.py:679] bitsandbytes quantization is not fully optimized yet. The speed can be slower than non-quantized models.\n",
+      "INFO 04-22 08:08:25 [config.py:1780] Chunked prefill is enabled with max_num_batched_tokens=8192.\n",
+      "WARNING 04-22 08:08:25 [config.py:2468] LoRA with chunked prefill is still experimental and may be unstable.\n",
+      "WARNING 04-22 08:08:27 [utils.py:2273] We must use the `spawn` multiprocessing start method. Overriding VLLM_WORKER_MULTIPROC_METHOD to 'spawn'. See https://docs.vllm.ai/en/latest/getting_started/troubleshooting.html#python-multiprocessing for more information. Reason: CUDA is initialized\n",
+      "INFO 04-22 08:08:31 [__init__.py:239] Automatically detected platform cuda.\n",
+      "INFO 04-22 08:08:33 [core.py:61] Initializing a V1 LLM engine (v0.8.3) with config: model='unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit', speculative_config=None, tokenizer='unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, override_neuron_config=None, tokenizer_revision=None, trust_remote_code=True, dtype=torch.bfloat16, max_seq_len=131072, download_dir=None, load_format=LoadFormat.BITSANDBYTES, tensor_parallel_size=1, pipeline_parallel_size=1, disable_custom_all_reduce=False, quantization=bitsandbytes, enforce_eager=False, kv_cache_dtype=auto,  device_config=cuda, decoding_config=DecodingConfig(guided_decoding_backend='xgrammar', reasoning_backend=None), observability_config=ObservabilityConfig(show_hidden_metrics=False, otlp_traces_endpoint=None, collect_model_forward_time=False, collect_model_execute_time=False), seed=None, served_model_name=unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit, num_scheduler_steps=1, multi_step_stream_outputs=True, enable_prefix_caching=True, chunked_prefill_enabled=True, use_async_output_proc=True, disable_mm_preprocessor_cache=False, mm_processor_kwargs=None, pooler_config=None, compilation_config={\"level\":3,\"custom_ops\":[\"none\"],\"splitting_ops\":[\"vllm.unified_attention\",\"vllm.unified_attention_with_output\"],\"use_inductor\":true,\"compile_sizes\":[],\"use_cudagraph\":true,\"cudagraph_num_of_warmups\":1,\"cudagraph_capture_sizes\":[512,504,496,488,480,472,464,456,448,440,432,424,416,408,400,392,384,376,368,360,352,344,336,328,320,312,304,296,288,280,272,264,256,248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,4,2,1],\"max_capture_size\":512}\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2025-04-22 08:08:33,949 - INFO - flashinfer.jit: Prebuilt kernels not found, using JIT backend\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "WARNING 04-22 08:08:34 [utils.py:2413] Methods determine_num_available_blocks,device_config,get_cache_block_size_bytes,initialize_cache not implemented in <vllm.v1.worker.gpu_worker.Worker object at 0x7f3f4a6df9b0>\n",
+      "INFO 04-22 08:08:34 [parallel_state.py:957] rank 0 in world size 1 is assigned as DP rank 0, PP rank 0, TP rank 0\n",
+      "INFO 04-22 08:08:34 [cuda.py:221] Using Flash Attention backend on V1 engine.\n",
+      "INFO 04-22 08:08:34 [gpu_model_runner.py:1258] Starting to load model unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit...\n",
+      "INFO 04-22 08:08:35 [topk_topp_sampler.py:44] Currently, FlashInfer top-p & top-k sampling sampler is disabled because FlashInfer>=v0.2.3 is not backward compatible. Falling back to the PyTorch-native implementation of top-p & top-k sampling.\n",
+      "INFO 04-22 08:08:35 [loader.py:1155] Loading weights with BitsAndBytes quantization. May take a while ...\n",
+      "INFO 04-22 08:08:35 [weight_utils.py:265] Using model weights format ['*.safetensors']\n",
+      "INFO 04-22 08:08:58 [weight_utils.py:281] Time spent downloading weights for unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit: 23.146429 seconds\n",
+      "INFO 04-22 08:08:59 [weight_utils.py:315] No model.safetensors.index.json found in remote.\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "Loading safetensors checkpoint shards:   0% Completed | 0/1 [00:00<?, ?it/s]\n",
+      "Loading safetensors checkpoint shards: 100% Completed | 1/1 [00:01<00:00,  1.11s/it]\n",
+      "Loading safetensors checkpoint shards: 100% Completed | 1/1 [00:01<00:00,  1.11s/it]\n",
+      "\n",
+      "Loading safetensors checkpoint shards:   0% Completed | 0/1 [00:00<?, ?it/s]\n",
+      "Loading safetensors checkpoint shards: 100% Completed | 1/1 [00:01<00:00,  1.30s/it]\n",
+      "Loading safetensors checkpoint shards: 100% Completed | 1/1 [00:01<00:00,  1.30s/it]\n",
+      "\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "INFO 04-22 08:09:01 [punica_selector.py:18] Using PunicaWrapperGPU.\n",
+      "INFO 04-22 08:09:01 [gpu_model_runner.py:1273] Model loading took 5.7018 GiB and 26.684054 seconds\n",
+      "INFO 04-22 08:09:14 [backends.py:416] Using cache directory: /home/jovyan/.cache/vllm/torch_compile_cache/2ee4ba84f5/rank_0_0 for vLLM's torch.compile\n",
+      "INFO 04-22 08:09:14 [backends.py:426] Dynamo bytecode transform time: 12.71 s\n",
+      "INFO 04-22 08:09:19 [backends.py:132] Cache the graph of shape None for later use\n",
+      "INFO 04-22 08:09:59 [backends.py:144] Compiling a graph for general shape takes 43.35 s\n",
+      "INFO 04-22 08:10:26 [monitor.py:33] torch.compile takes 56.06 s in total\n",
+      "INFO 04-22 08:10:27 [kv_cache_utils.py:578] GPU KV cache size: 238,368 tokens\n",
+      "INFO 04-22 08:10:27 [kv_cache_utils.py:581] Maximum concurrency for 131,072 tokens per request: 1.82x\n",
+      "INFO 04-22 08:11:23 [gpu_model_runner.py:1608] Graph capturing finished in 56 secs, took 1.44 GiB\n",
+      "INFO 04-22 08:11:24 [core.py:162] init engine (profile, create kv cache, warmup model) took 142.11 seconds\n",
+      "GPU = NVIDIA A40. Max memory = 44.339 GB.\n",
+      "0.0 GB of memory reserved.\n"
+     ]
+    }
+   ],
+   "source": [
+    "from vllm import LLM, SamplingParams\n",
+    "from vllm.lora.request import LoRARequest\n",
+    "import torch# unsloth/tinyllama-bnb-4bit is a pre-quantized checkpoint.\n",
+    "model_id = \"unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit\" #\"unsloth/tinyllama-bnb-4bit\"#\n",
+    "llm = LLM(model=model_id, dtype=torch.bfloat16, trust_remote_code=True, quantization=\"bitsandbytes\",load_format=\"bitsandbytes\",enable_lora=True,enable_prefix_caching=True,max_lora_rank=64)\n",
+    "gpu_stats = torch.cuda.get_device_properties(0)\n",
+    "start_gpu_memory = round(torch.cuda.max_memory_reserved() / 1024 / 1024 / 1024, 3)\n",
+    "max_memory = round(gpu_stats.total_memory / 1024 / 1024 / 1024, 3)\n",
+    "print(f\"GPU = {gpu_stats.name}. Max memory = {max_memory} GB.\")\n",
+    "print(f\"{start_gpu_memory} GB of memory reserved.\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "id": "eae926b7-c5af-4f14-ab05-461fb6d18032",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def get_generation_time(llm, sampling_params, prompts,lora_request):\n",
+    "    # time the generation\n",
+    "    start_time = time.time()\n",
+    "    outputs = llm.generate(\n",
+    "    prompts,\n",
+    "    sampling_params,\n",
+    "    lora_request=lora_request)\n",
+    "    end_time = time.time()\n",
+    "    # print the output and generation time\n",
+    "    for output in outputs:\n",
+    "        for o in output.outputs:\n",
+    "            print(f\"Output: {o.text}\")\n",
+    "    print(f\"Generation time: {end_time - start_time} seconds.\")\n",
+    "    return outputs"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "id": "c8c9f5c2-8e4c-4124-8bfa-83f7162bc613",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "q='Search the NOMAD database for materials that belong to the triclinic crystal system, contain the elements phosphorus (P), oxygen (O), and sulfur (S), have been studied using Density Functional Theory (DFT), and exhibit spin-polarized electronic density of states (DOS).'"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "id": "5eefb8f4-8495-4134-8144-64ae7023d4a7",
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [],
+   "source": [
+    "queries = [eval_chat_template.format(SYSTEM=system_context, INPUT=q),eval_chat_template.format(SYSTEM=system_context, INPUT=q)]\n",
+    "sampling_params = [SamplingParams(\n",
+    "    n=1,\n",
+    "    temperature=0,\n",
+    "    max_tokens=2048,\n",
+    "    # top_k=10,\n",
+    "    # top_p=0.,\n",
+    "    # presence_penalty=1,\n",
+    "    # repetition_penalty=0,\n",
+    "    # frequency_penalty=0,\n",
+    "    seed=42,\n",
+    "    stop=[\"<|end_of_text|>\"],\n",
+    "),SamplingParams(\n",
+    "    n=2,\n",
+    "    temperature=1.0,\n",
+    "    max_tokens=2048,\n",
+    "    top_k=10,\n",
+    "    # top_p=0.,\n",
+    "    # presence_penalty=1,\n",
+    "    # repetition_penalty=0,\n",
+    "    # frequency_penalty=0,\n",
+    "    seed=42,\n",
+    "    stop=[\"<|end_of_text|>\"],\n",
+    ")]\n",
+    "\n",
+    "lora_request=LoRARequest(\"api_lora\", 1, lora_path)\n",
+    "        \n",
+    "# o=get_generation_time(llm,sampling_params,queries,lora_request)\n",
+    "# outputs = llm.generate(\n",
+    "#     queries,\n",
+    "#     sampling_params,\n",
+    "#     lora_request=LoRARequest(\"api_lora\", 1, lora_path)\n",
+    "# )"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "id": "7684c9a5-ac63-482a-b995-c7d0a11610b3",
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "Processed prompts: 100%|██████████| 3/3 [00:14<00:00,  4.85s/it, est. speed input: 4067.61 toks/s, output: 24.58 toks/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Output: \n",
+      "\n",
+      "''' JSON: {\n",
+      "    \"and\": [\n",
+      "        {\n",
+      "            \"results.material.elements\": {\n",
+      "                \"all\": [\n",
+      "                    \"P\",\n",
+      "                    \"O\",\n",
+      "                    \"S\"\n",
+      "                ]\n",
+      "            },\n",
+      "            \"results.material.symmetry.crystal_system\": {\n",
+      "                \"any\": [\n",
+      "                    \"triclinic\"\n",
+      "                ]\n",
+      "            },\n",
+      "            \"results.method.method_name\": {\n",
+      "                \"any\": [\n",
+      "                    \"DFT\"\n",
+      "                ]\n",
+      "            },\n",
+      "            \"results.properties.electronic.dos_electronic\": {\n",
+      "                \"spin_polarized\": [\n",
+      "                    \"true\"\n",
+      "                ]\n",
+      "            }\n",
+      "        }\n",
+      "    ]\n",
+      "}''' \n",
+      "Output: \n",
+      "\n",
+      "''' JSON: {\n",
+      "    \"results.material.elements\": {\n",
+      "        \"all\": [\n",
+      "            \"P\",\n",
+      "            \"O\",\n",
+      "            \"S\"\n",
+      "        ]\n",
+      "    },\n",
+      "    \"results.material.symmetry.crystal_system\": {\n",
+      "        \"any\": [\n",
+      "            \"triclinic\"\n",
+      "        ]\n",
+      "    },\n",
+      "    \"results.method.method_name\": {\n",
+      "        \"any\": [\n",
+      "            \"DFT\"\n",
+      "        ]\n",
+      "    },\n",
+      "    \"results.properties.electronic.dos_electronic\": {\n",
+      "        \"spin_polarized\": [\n",
+      "            \"true\"\n",
+      "        ]\n",
+      "    }\n",
+      "}''' \n",
+      "Output: \n",
+      "\n",
+      "''' JSON: {\n",
+      "    \"results.material.elements\": {\n",
+      "        \"all\": [\n",
+      "            \"P\",\n",
+      "            \"O\",\n",
+      "            \"S\"\n",
+      "        ]\n",
+      "    },\n",
+      "    \"results.material.symmetry.crystal_system\": {\n",
+      "        \"any\": [\n",
+      "            \"triclinic\"\n",
+      "        ]\n",
+      "    },\n",
+      "    \"results.method.method_name\": {\n",
+      "        \"any\": [\n",
+      "            \"DFT\"\n",
+      "        ]\n",
+      "    },\n",
+      "    \"results.properties.electronic.dos_electronic\": {\n",
+      "        \"spin_polarized\": [\n",
+      "            true\n",
+      "        ]\n",
+      "    }\n",
+      "}''' \n",
+      "Generation time: 15.43905258178711 seconds.\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "o=get_generation_time(llm,sampling_params,queries,lora_request)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "f320953c-0ead-489b-bb55-eef012bf4aa6",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.12.7"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
-- 
GitLab


From df192e09fc865028d83172a7359fc4eb86b5da45 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Thu, 24 Apr 2025 15:22:07 +0200
Subject: [PATCH 10/28] added app

---
 api_writer/fast_app.py | 12 ++++++++++++
 api_writer/hf_model.py | 14 +++++++++++---
 api_writer/test_ui.py  | 12 +++++++++---
 api_writer/vllm_api.py |  4 ++--
 4 files changed, 34 insertions(+), 8 deletions(-)
 create mode 100644 api_writer/fast_app.py

diff --git a/api_writer/fast_app.py b/api_writer/fast_app.py
new file mode 100644
index 0000000..43ad91b
--- /dev/null
+++ b/api_writer/fast_app.py
@@ -0,0 +1,12 @@
+from fastapi import FastAPI
+from api_writer.test_ui import demo
+import gradio as gr
+
+CUSTOM_PATH = "/api_writer"
+
+app = FastAPI()
+
+@app.get("/")
+def read_main():
+    return {"message": "This is your main app"}
+app = gr.mount_gradio_app(app, demo, path=CUSTOM_PATH)
\ No newline at end of file
diff --git a/api_writer/hf_model.py b/api_writer/hf_model.py
index 5b86dd7..97ec596 100644
--- a/api_writer/hf_model.py
+++ b/api_writer/hf_model.py
@@ -1,6 +1,14 @@
-hf_token=""
+import os
 from huggingface_hub import snapshot_download
-snapshot_path=snapshot_download("pilar12/nomad-api-writer-lora", revision='v_27', token=hf_token)
+
+try:
+    hf_token = os.environ['HF_TOKEN_PVT']
+except:
+    hf_token = ""
+
+snapshot_path=snapshot_download("pilar12/nomad-api-writer-lora", revision='v_27', token=hf_token, local_dir='api_lora')
+os.environ['api_lora_path'] = snapshot_path
+
 def download_model(model_path="pilar12/nomad-api-writer-lora", revision='v_27'):
-    snapshot_path=snapshot_download(model_path, revision=revision, token=hf_token)
+    snapshot_path=snapshot_download(model_path, revision=revision, token=hf_token,local_dir='api_lora')
     return snapshot_path
\ No newline at end of file
diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
index 997b5a3..9fc39e4 100644
--- a/api_writer/test_ui.py
+++ b/api_writer/test_ui.py
@@ -6,9 +6,15 @@ from opik import track, opik_context
 from api_writer.vllm_api import http_bot
 from api_writer.nomad_api import make_query
 from api_writer.utils import add_values
-os.environ["OPIK_API_KEY"] = "" 
+try:
+    os.environ["OPIK_API_KEY"]
+except:
+    os.environ["OPIK_API_KEY"] =""
 os.environ["OPIK_WORKSPACE"] = "pilar12"
-
+try:
+    project_name = os.environ['OPIK_PROJECT_NAME']
+except:
+    project_name = "NOMAD_Demo_test_ui"
 n=3
 def format_num_response(response):
     response=response[response.index('JSON')+5:]
@@ -90,7 +96,7 @@ def update_selection(selected_values):
 
 
 csvlogger = gr.CSVLogger()
-@track(project_name="NOMAD_Demo_test_ui",capture_input=False, capture_output=False)
+@track(project_name=project_name,capture_input=False, capture_output=False)
 def log_data(*args):
     output = {}
     for i in range(n):
diff --git a/api_writer/vllm_api.py b/api_writer/vllm_api.py
index 738efd6..6a7de83 100644
--- a/api_writer/vllm_api.py
+++ b/api_writer/vllm_api.py
@@ -2,7 +2,7 @@ from openai import OpenAI
 from api_writer.utils import load_config,load_templates
 import requests
 from copy import deepcopy
-from api_writer.hf_model import snapshot_path
+# from api_writer.hf_model import snapshot_path
 
 openai_api_key = "EMPTY"
 openai_api_base = "http://localhost:8000/v1"   
@@ -13,7 +13,7 @@ client = OpenAI(
 )   
 model = 'api-lora'
 sampling_params=load_config('api_writer/sampling_params.yaml')
-system_prompt, chat_template, eval_chat_template, full_context, system_context = load_templates(snapshot_path)
+system_prompt, chat_template, eval_chat_template, full_context, system_context = load_templates("api_lora")
 def http_bot(prompt):
     headers = {"User-Agent": "vLLM Client"}
     prompt = eval_chat_template.format(SYSTEM=system_context, INPUT=prompt)
-- 
GitLab


From 3b52e9874d2126b0992a62e201a0ac85338cf8f4 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Thu, 24 Apr 2025 15:39:37 +0200
Subject: [PATCH 11/28] update model port

---
 api_writer/vllm_api.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/api_writer/vllm_api.py b/api_writer/vllm_api.py
index 6a7de83..65a85b6 100644
--- a/api_writer/vllm_api.py
+++ b/api_writer/vllm_api.py
@@ -5,7 +5,7 @@ from copy import deepcopy
 # from api_writer.hf_model import snapshot_path
 
 openai_api_key = "EMPTY"
-openai_api_base = "http://localhost:8000/v1"   
+openai_api_base = "http://localhost:8001/v1"   
 client = OpenAI(
     # defaults to os.environ.get("OPENAI_API_KEY")
     api_key=openai_api_key,
-- 
GitLab


From 2700d5cc1e63ada5512344920083d93f6eec00a4 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Thu, 24 Apr 2025 16:27:07 +0200
Subject: [PATCH 12/28] use offline serving instead

---
 api_writer/test_ui.py    |  7 ++++++-
 api_writer/vllm_model.py | 41 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 47 insertions(+), 1 deletion(-)
 create mode 100644 api_writer/vllm_model.py

diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
index 9fc39e4..76795ea 100644
--- a/api_writer/test_ui.py
+++ b/api_writer/test_ui.py
@@ -3,9 +3,14 @@ import pandas as pd
 import os
 import json
 from opik import track, opik_context
-from api_writer.vllm_api import http_bot
 from api_writer.nomad_api import make_query
 from api_writer.utils import add_values
+use_vllm_api = os.environ['USE_VLLM_API']
+if use_vllm_api == "True":
+    from api_writer.vllm_api import http_bot
+else:
+    from api_writer.vllm_model import http_bot
+
 try:
     os.environ["OPIK_API_KEY"]
 except:
diff --git a/api_writer/vllm_model.py b/api_writer/vllm_model.py
new file mode 100644
index 0000000..33fa6be
--- /dev/null
+++ b/api_writer/vllm_model.py
@@ -0,0 +1,41 @@
+from vllm import LLM, SamplingParams
+from vllm.lora.request import LoRARequest
+import torch# unsloth/tinyllama-bnb-4bit is a pre-quantized checkpoint.
+import os
+from api_writer.utils import load_config,load_templates
+import time
+
+model_id = os.environ['BASE_MODEL'] #"unsloth/tinyllama-bnb-4bit"#
+llm = LLM(model=model_id, dtype=torch.bfloat16, trust_remote_code=True, quantization="bitsandbytes",load_format="bitsandbytes",enable_lora=True,enable_prefix_caching=True,max_lora_rank=64)
+gpu_stats = torch.cuda.get_device_properties(0)
+start_gpu_memory = round(torch.cuda.max_memory_reserved() / 1024 / 1024 / 1024, 3)
+max_memory = round(gpu_stats.total_memory / 1024 / 1024 / 1024, 3)
+print(f"GPU = {gpu_stats.name}. Max memory = {max_memory} GB.")
+print(f"{start_gpu_memory} GB of memory reserved.")
+
+sampling_config=load_config('api_writer/sampling_params.yaml')
+system_prompt, chat_template, eval_chat_template, full_context, system_context = load_templates("api_lora")
+sampling_params=SamplingParams(
+    n=sampling_config['n'],
+    temperature=sampling_config['temperature'],
+    max_tokens=sampling_config['max_tokens'],
+    top_k=sampling_config['top_k'],
+    seed=sampling_config['seed'],
+    stop=sampling_config['stop'],
+)
+lora_request=LoRARequest("api_lora", 1, "api_lora")
+def http_bot(prompts, llm=llm, sampling_params=sampling_params,lora_request=lora_request):
+    # time the generation
+    start_time = time.time()
+    outputs = llm.generate(
+    prompts,
+    sampling_params,
+    lora_request=lora_request)
+    end_time = time.time()
+    # print the output and generation time
+    generated_text=[]
+    for output in outputs:
+        for o in output.outputs:
+            generated_text.append(o.text)
+    print(f"Generation time: {end_time - start_time} seconds.")
+    return outputs, generated_text
\ No newline at end of file
-- 
GitLab


From 9e1a713960ad1cf8b81abd1c2321f41fcf4f78f6 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Thu, 24 Apr 2025 16:50:43 +0200
Subject: [PATCH 13/28] change vllm model setting

---
 api_writer/vllm_model.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/api_writer/vllm_model.py b/api_writer/vllm_model.py
index 33fa6be..7f9a843 100644
--- a/api_writer/vllm_model.py
+++ b/api_writer/vllm_model.py
@@ -6,7 +6,7 @@ from api_writer.utils import load_config,load_templates
 import time
 
 model_id = os.environ['BASE_MODEL'] #"unsloth/tinyllama-bnb-4bit"#
-llm = LLM(model=model_id, dtype=torch.bfloat16, trust_remote_code=True, quantization="bitsandbytes",load_format="bitsandbytes",enable_lora=True,enable_prefix_caching=True,max_lora_rank=64)
+llm = LLM(model=model_id, dtype=torch.bfloat16, trust_remote_code=True, quantization="bitsandbytes",load_format="bitsandbytes",enable_lora=True,enable_prefix_caching=True,max_lora_rank=32,max_loras=1)
 gpu_stats = torch.cuda.get_device_properties(0)
 start_gpu_memory = round(torch.cuda.max_memory_reserved() / 1024 / 1024 / 1024, 3)
 max_memory = round(gpu_stats.total_memory / 1024 / 1024 / 1024, 3)
-- 
GitLab


From a83856e62c9a8e98159c6d0bf984c45b3109fde4 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Thu, 24 Apr 2025 17:18:43 +0200
Subject: [PATCH 14/28] port fix

---
 api_writer/vllm_api.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/api_writer/vllm_api.py b/api_writer/vllm_api.py
index 65a85b6..2cafc2f 100644
--- a/api_writer/vllm_api.py
+++ b/api_writer/vllm_api.py
@@ -19,7 +19,7 @@ def http_bot(prompt):
     prompt = eval_chat_template.format(SYSTEM=system_context, INPUT=prompt)
     pload = deepcopy(sampling_params)
     pload['prompt']=prompt
-    response = requests.post('http://localhost:8000/v1/completions',
+    response = requests.post('http://localhost:8001/v1/completions',
                              headers=headers,
                              json=pload,
                              stream=True)
-- 
GitLab


From de8c629a3dad44f9a5873218f2420d7004a79797 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Fri, 25 Apr 2025 12:09:52 +0200
Subject: [PATCH 15/28] fix

---
 api_writer/config.yaml          | 2 +-
 api_writer/sampling_params.yaml | 2 +-
 api_writer/vllm_model.py        | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/api_writer/config.yaml b/api_writer/config.yaml
index b33df44..f623952 100644
--- a/api_writer/config.yaml
+++ b/api_writer/config.yaml
@@ -2,4 +2,4 @@ load-format: bitsandbytes
 dtype: bfloat16
 quantization: bitsandbytes
 enable-prefix-caching: true
-max-lora-rank: 64
\ No newline at end of file
+max-lora-rank: 32
diff --git a/api_writer/sampling_params.yaml b/api_writer/sampling_params.yaml
index c2d3a87..03cfc62 100644
--- a/api_writer/sampling_params.yaml
+++ b/api_writer/sampling_params.yaml
@@ -1,6 +1,6 @@
 n: 3
 model: "api-lora"
-stream": False
+stream: False
 max_tokens: 2048
 temperature: 1.0    
 top_k: 10
diff --git a/api_writer/vllm_model.py b/api_writer/vllm_model.py
index 7f9a843..5b4eddc 100644
--- a/api_writer/vllm_model.py
+++ b/api_writer/vllm_model.py
@@ -6,7 +6,7 @@ from api_writer.utils import load_config,load_templates
 import time
 
 model_id = os.environ['BASE_MODEL'] #"unsloth/tinyllama-bnb-4bit"#
-llm = LLM(model=model_id, dtype=torch.bfloat16, trust_remote_code=True, quantization="bitsandbytes",load_format="bitsandbytes",enable_lora=True,enable_prefix_caching=True,max_lora_rank=32,max_loras=1)
+llm = LLM(model=model_id, dtype=torch.bfloat16, trust_remote_code=True, quantization="bitsandbytes",load_format="bitsandbytes",enable_lora=True,enable_prefix_caching=True,max_lora_rank=32,max_loras=1,enforce_eager=True)
 gpu_stats = torch.cuda.get_device_properties(0)
 start_gpu_memory = round(torch.cuda.max_memory_reserved() / 1024 / 1024 / 1024, 3)
 max_memory = round(gpu_stats.total_memory / 1024 / 1024 / 1024, 3)
-- 
GitLab


From e9746f5bbf546f9e925e03d46f600b4ee4fd55f7 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Fri, 25 Apr 2025 12:50:36 +0200
Subject: [PATCH 16/28] bugfix

---
 api_writer/test_ui.py    | 3 +++
 api_writer/vllm_model.py | 7 +++++--
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
index 76795ea..f2854bc 100644
--- a/api_writer/test_ui.py
+++ b/api_writer/test_ui.py
@@ -11,6 +11,9 @@ if use_vllm_api == "True":
 else:
     from api_writer.vllm_model import http_bot
 
+print("Caching context...")
+http_bot('warmup')
+
 try:
     os.environ["OPIK_API_KEY"]
 except:
diff --git a/api_writer/vllm_model.py b/api_writer/vllm_model.py
index 5b4eddc..8c318e4 100644
--- a/api_writer/vllm_model.py
+++ b/api_writer/vllm_model.py
@@ -24,11 +24,14 @@ sampling_params=SamplingParams(
     stop=sampling_config['stop'],
 )
 lora_request=LoRARequest("api_lora", 1, "api_lora")
-def http_bot(prompts, llm=llm, sampling_params=sampling_params,lora_request=lora_request):
+
+
+def http_bot(prompt, llm=llm, sampling_params=sampling_params,lora_request=lora_request):
     # time the generation
     start_time = time.time()
+    prompt = eval_chat_template.format(SYSTEM=system_context, INPUT=prompt)
     outputs = llm.generate(
-    prompts,
+    prompt,
     sampling_params,
     lora_request=lora_request)
     end_time = time.time()
-- 
GitLab


From 648d61483aa2931b5f0f1205b78d828ddd3d6275 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Tue, 20 May 2025 11:20:58 +0200
Subject: [PATCH 17/28] ui update

---
 api_writer/nomad_api.py |  1 +
 api_writer/test_ui.py   | 49 ++++++++++++++++++++++++++++++++---------
 2 files changed, 40 insertions(+), 10 deletions(-)

diff --git a/api_writer/nomad_api.py b/api_writer/nomad_api.py
index 0c540b5..0ee1f78 100644
--- a/api_writer/nomad_api.py
+++ b/api_writer/nomad_api.py
@@ -17,6 +17,7 @@ def make_query(query: str):
     try:
         query+=" "
         query = query[query.index('{'):query[::-1].index('}')*-1]
+        query = query.replace("\'",'"')
         query = json.loads(query)
         if len(query.keys())==1 and 'all' in query.keys():
             query['and'] = query['all']
diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
index f2854bc..bd30da4 100644
--- a/api_writer/test_ui.py
+++ b/api_writer/test_ui.py
@@ -2,6 +2,7 @@ import gradio as gr
 import pandas as pd
 import os
 import json
+import time
 from opik import track, opik_context
 from api_writer.nomad_api import make_query
 from api_writer.utils import add_values
@@ -23,7 +24,8 @@ try:
     project_name = os.environ['OPIK_PROJECT_NAME']
 except:
     project_name = "NOMAD_Demo_test_ui"
-n=3
+
+n=2
 def format_num_response(response):
     response=response[response.index('JSON')+5:]
     values=response[response.index('\'\'\'')+3:].strip().split('\n')
@@ -74,7 +76,8 @@ def process_query(query):
         try:
             llm_query = llm_query[llm_query.index("\'\'\'"):]
         except:
-            pass        
+            pass
+        llm_query=llm_query.replace('\\"','"').replace('\\n','\n')
         try:
             formatted_llm_query=format_num_response(llm_query)
         except:
@@ -102,7 +105,8 @@ def update_selection(selected_values):
     return selected_values
 
 
-
+rating_dict={"👍":1, "👎":0}
+pft_dict = {"Tie":0, "Both are bad":-1}
 csvlogger = gr.CSVLogger()
 @track(project_name=project_name,capture_input=False, capture_output=False)
 def log_data(*args):
@@ -110,20 +114,35 @@ def log_data(*args):
     for i in range(n):
         output[f'LLM Query {i+1}'] = args[i+1]
         output[f'Fixed LLM Query {i+1}'] = args[i+n+1]
-    feedback_scores = [{'name':f"Rating {i}",'value': float(args[i+2*n+1][0]) if args[i+2*n+1]!= [] else 0} for i in range(n)]
-    preferred_query = int(args[-1][0]) if args[-1]!= [] else 0
+    feedback_scores = [{'name':f"Rating {i}",'value': float(rating_dict[args[i+2*n+1][0]]) if args[i+2*n+1]!= [] else 0} for i in range(n)]
+    if args[-1][0] in pft_dict:
+        preferred_query = pft_dict[args[-1][0]]
+    else:
+        preferred_query = int(args[-1][0]) if args[-1]!= [] else 0
     feedback_scores.append({'name':'Preferred LLM Query', 'value': preferred_query})
     input = {'query': args[0]}
-    if preferred_query != 0:
+    if preferred_query != 0 or preferred_query != -1:
         output[f'Preferred LLM Query ({preferred_query})'] = args[preferred_query+n+1]
     opik_context.update_current_trace(input=input,
                                       output=output,
                                       feedback_scores=feedback_scores)
     csvlogger.flag(args)
+    return gr.update(visible=True), gr.update(visible=False)
 
 @track(project_name="NOMAD_Demo_test_ui", capture_output=False)
 def log_data2(*args):
     csvlogger.flag(args)
+
+def process_and_notify():
+    # Simulate some processing
+    time.sleep(1)
+    # Show message
+    return gr.update(visible=True), gr.update(visible=False)
+
+def hide_message():
+    # Called after delay to hide message
+    return gr.update(visible=False), gr.update(visible=True)
+
 with gr.Blocks() as demo:
     gr.Markdown("# LLM Query Processor")
     with gr.Accordion("Details"):
@@ -131,7 +150,7 @@ with gr.Blocks() as demo:
     with gr.Row():
         query_input = gr.Textbox(label="Enter your query", placeholder="Type your question here...",interactive=True,submit_btn=True)
 
-    n=3    
+    n=2    
     output_text = []
     hidden_text = []
     output_dataframe = []
@@ -141,7 +160,8 @@ with gr.Blocks() as demo:
             with gr.Column():
                 output_text.append(gr.Textbox(label=f"LLM Generated query {i+1}", interactive=True, submit_btn=True))
                 hidden_text.append(gr.Textbox(label=f"Original LLM Generated query {i+1}", interactive=False, visible=False))
-                rating.append(gr.CheckboxGroup(["1", "2", "3", "4", "5"], label="Rating", info="Rate the query from 1 to 5"))
+                rating.append(gr.CheckboxGroup(["👍", "👎"], label="Rating", info="👍  Upvote or 👎 Downvote"))
+                # rating.append(gr.CheckboxGroup(["1", "2", "3", "4", "5"], label="Rating", info="Rate the query from 1 to 5"))
         # with gr.Column():
         #     # output_text = gr.Markdown(label="LLM Response",max_height=1000)
         #     output_text_1 = gr.Textbox(label="LLM Generated query 1", interactive=True, submit_btn=True)
@@ -151,7 +171,10 @@ with gr.Blocks() as demo:
         # with gr.Column():
         #     output_text_3 = gr.Textbox(label="LLM Generated query 3", interactive=True, submit_btn=True)
     with gr.Row():
-        pft_checkbox = gr.CheckboxGroup([f'{i+1}' for i in range(n)], label="Best LLM query", info="Select the query that matches the NLU query the best.")
+        pfts=[f'{i+1}' for i in range(n)]
+        pfts.extend(['Tie','Both are bad'])
+        pft_checkbox = gr.CheckboxGroup(pfts, label="Best LLM query", info="Select the query that matches the NLU query the best.")
+        # pft_checkbox = gr.CheckboxGroup([f'{i+1}' for i in range(n)], label="Best LLM query", info="Select the query that matches the NLU query the best.")
     with gr.Row():
         for i in range(n):
             with gr.Column():
@@ -164,6 +187,7 @@ with gr.Blocks() as demo:
         #    dataframe_output_3 = gr.Dataframe(interactive=False, max_height=500)
     with gr.Row():
         end_button = gr.Button("Submit")
+        msg = gr.Markdown("✅ Process Complete!", visible=False)
     with gr.Row():
         clear_button = gr.ClearButton(components=[query_input, *hidden_text, *output_text, *rating, *output_dataframe, pft_checkbox],value="Clear")
     csvlogger.setup([query_input, *hidden_text, *output_text, *rating, pft_checkbox], "out_dir")
@@ -184,7 +208,12 @@ with gr.Blocks() as demo:
         rating[i].select(update_selection,rating[i],rating[i])
     pft_checkbox.select(update_selection,pft_checkbox,pft_checkbox)
     # end_button.click(lambda *args: csvlogger.flag(list(args)), [query_input, *output_text, *rating, pft_checkbox], None, preprocess=False)
-    end_button.click(log_data, [query_input, *hidden_text, *output_text, *rating, pft_checkbox], None, preprocess=False)
+    end_button.click(log_data, [query_input, *hidden_text, *output_text, *rating, pft_checkbox], [msg, end_button], preprocess=False, trigger_mode="once").then(
+        fn=lambda: time.sleep(1), inputs=None, outputs=None
+    ).then(
+        fn=hide_message, outputs=[msg, end_button]
+    )
+    # end_button.click(log_data, [query_input, *hidden_text, *output_text, *rating, pft_checkbox], None, preprocess=False)
     # clear_button.click(log_data, [query_input, *hidden_text, *output_text, *rating, pft_checkbox], None, preprocess=False)
 
 if __name__ == "__main__":
-- 
GitLab


From c5aec730f57499df403048a31a4c4d8e5f57a230 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Wed, 21 May 2025 10:26:46 +0200
Subject: [PATCH 18/28] download unsloth model before hand

---
 api_writer/hf_model.py | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/api_writer/hf_model.py b/api_writer/hf_model.py
index 97ec596..71136e9 100644
--- a/api_writer/hf_model.py
+++ b/api_writer/hf_model.py
@@ -6,9 +6,10 @@ try:
 except:
     hf_token = ""
 
-snapshot_path=snapshot_download("pilar12/nomad-api-writer-lora", revision='v_27', token=hf_token, local_dir='api_lora')
-os.environ['api_lora_path'] = snapshot_path
 
-def download_model(model_path="pilar12/nomad-api-writer-lora", revision='v_27'):
+snapshot_path=snapshot_download("pilar12/nomad-api-writer-lora", revision=os.environ['LORA_VERSION'], token=hf_token, local_dir='api_lora')
+os.environ['api_lora_path'] = snapshot_path
+snapshot_path = snapshot_download(os.environ['BASE_MODEL'])
+def download_model(model_path="pilar12/nomad-api-writer-lora", revision=os.environ['LORA_VERSION']):
     snapshot_path=snapshot_download(model_path, revision=revision, token=hf_token,local_dir='api_lora')
     return snapshot_path
\ No newline at end of file
-- 
GitLab


From 842c2b82ca12ed2e7235e190c8ece71227d7f172 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Fri, 23 May 2025 15:53:36 +0200
Subject: [PATCH 19/28] update

---
 api_writer/description.md         |  10 ++
 api_writer/sampling_params.yaml   |   2 +-
 api_writer/sampling_params_2.yaml |   9 ++
 api_writer/test_ui.py             |  98 +++++++--------
 api_writer/utils.py               | 195 +++++++++++++++++++++++++++++-
 api_writer/vllm_api.py            |   2 +-
 api_writer/vllm_model.py          |   2 +-
 7 files changed, 259 insertions(+), 59 deletions(-)
 create mode 100644 api_writer/description.md
 create mode 100644 api_writer/sampling_params_2.yaml

diff --git a/api_writer/description.md b/api_writer/description.md
new file mode 100644
index 0000000..2749e51
--- /dev/null
+++ b/api_writer/description.md
@@ -0,0 +1,10 @@
+# NOMAD API Writer: 
+
+This tool transforms your natural language text into structured API queries for searching NOMAD. We want to test and evaluate the models capablities and find its shortcomings to improve the model and the search functionality.
+
+The LLM generates two options for you to evaluate. Select which query performed better (1 or 2), or indicate if both performed equally well (Tie) or if neither were satisfactory (Both are bad).
+
+You can also edit either generated query to demonstrate the correct query or provide free-form feedback in the notes section.
+
+IMPORTANT: The queries and your feedback are only logged when you click on Submit.
+
diff --git a/api_writer/sampling_params.yaml b/api_writer/sampling_params.yaml
index 03cfc62..30574ef 100644
--- a/api_writer/sampling_params.yaml
+++ b/api_writer/sampling_params.yaml
@@ -1,4 +1,4 @@
-n: 3
+n: 2
 model: "api-lora"
 stream: False
 max_tokens: 2048
diff --git a/api_writer/sampling_params_2.yaml b/api_writer/sampling_params_2.yaml
new file mode 100644
index 0000000..91c1ea5
--- /dev/null
+++ b/api_writer/sampling_params_2.yaml
@@ -0,0 +1,9 @@
+n: 5
+model: "api-lora"
+stream: False
+max_tokens: 2048
+temperature: 1.0    
+top_k: 10
+seed: 42
+stop: ["<|end_of_text|>"]
+        
\ No newline at end of file
diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
index bd30da4..66f545c 100644
--- a/api_writer/test_ui.py
+++ b/api_writer/test_ui.py
@@ -5,7 +5,8 @@ import json
 import time
 from opik import track, opik_context
 from api_writer.nomad_api import make_query
-from api_writer.utils import add_values
+from api_writer.utils import add_values, check_keys
+from copy import deepcopy
 use_vllm_api = os.environ['USE_VLLM_API']
 if use_vllm_api == "True":
     from api_writer.vllm_api import http_bot
@@ -43,25 +44,18 @@ def process_api_output(api_output: dict) -> pd.DataFrame:
     """
     # Create a sample DataFrame
     data=[]
+    columns={'Name':'upload_name','Formula':"results.material.chemical_formula_descriptive","Entry Type":'entry_type','Author':'origin'}
     for i in api_output['data']:
-        try:
-            data.append({
-            "Name": i["upload_name"],
-            # "Formula": i["results"]["material"]["chemical_formula_descriptive"],
-            # "Entry Type": i["entry_type"],
-            "Author": i["origin"]
-        })
-        except:
-            pass
-    # data = [
-    #     {
-    #         "Name": i["upload_name"],
-    #         # "Formula": i["results"]["material"]["chemical_formula_descriptive"],
-    #         # "Entry Type": i["entry_type"],
-    #         "Author": i["origin"]
-    #     }
-    #     for i in api_output['data']
-    # ]
+        base={}
+        for col in columns:
+            try:
+                if col=='Formula':
+                    base[col]=i['results']['material']['chemical_formula_descriptive']
+                else:
+                    base[col]=i[columns[col]]
+            except:
+                base[col]=''
+        data.append(base)
     return pd.DataFrame(data)
 
 track(capture_input=False, capture_output=False)
@@ -69,6 +63,10 @@ def process_query(query):
     # llm_query = json.load(open("demo_api.json"))
     # api_response = json.load(open("demo_return.json"))
     llm_response, llm_queries = http_bot(query)
+    dissimilar,qs,qi = check_keys(llm_queries)
+    if not dissimilar:
+        gr.Info(" LLM Queries are same", duration=5)
+    llm_queries = [llm_queries[i] for i in range(len(llm_queries)) if i in qi]
     r_df=[]
     r_llm_query=[]
     rh_llm_query=[]
@@ -104,24 +102,25 @@ def update_selection(selected_values):
         return [selected_values[-1]]
     return selected_values
 
-
+description = open("description.md").read()
 rating_dict={"👍":1, "👎":0}
 pft_dict = {"Tie":0, "Both are bad":-1}
 csvlogger = gr.CSVLogger()
+for i in range(n):
+    pft_dict[f'{i+1}'] = i+1
 @track(project_name=project_name,capture_input=False, capture_output=False)
 def log_data(*args):
     output = {}
     for i in range(n):
         output[f'LLM Query {i+1}'] = args[i+1]
         output[f'Fixed LLM Query {i+1}'] = args[i+n+1]
-    feedback_scores = [{'name':f"Rating {i}",'value': float(rating_dict[args[i+2*n+1][0]]) if args[i+2*n+1]!= [] else 0} for i in range(n)]
-    if args[-1][0] in pft_dict:
-        preferred_query = pft_dict[args[-1][0]]
-    else:
-        preferred_query = int(args[-1][0]) if args[-1]!= [] else 0
+    # feedback_scores = [{'name':f"Rating {i}",'value': float(rating_dict[args[i+2*n+1][0]]) if args[i+2*n+1]!= [] else 0} for i in range(n)]
+    feedback_scores = []
+    preferred_query = pft_dict[args[-1][0]] if args[-1] != [] else 0
     feedback_scores.append({'name':'Preferred LLM Query', 'value': preferred_query})
     input = {'query': args[0]}
-    if preferred_query != 0 or preferred_query != -1:
+    output['Notes'] = args[-2]
+    if preferred_query >0:
         output[f'Preferred LLM Query ({preferred_query})'] = args[preferred_query+n+1]
     opik_context.update_current_trace(input=input,
                                       output=output,
@@ -146,7 +145,7 @@ def hide_message():
 with gr.Blocks() as demo:
     gr.Markdown("# LLM Query Processor")
     with gr.Accordion("Details"):
-        gr.Markdown("lorem ipsum")
+        gr.Markdown(description)
     with gr.Row():
         query_input = gr.Textbox(label="Enter your query", placeholder="Type your question here...",interactive=True,submit_btn=True)
 
@@ -158,39 +157,31 @@ with gr.Blocks() as demo:
     with gr.Row():
         for i in range(n):
             with gr.Column():
-                output_text.append(gr.Textbox(label=f"LLM Generated query {i+1}", interactive=True, submit_btn=True))
+                output_text.append(gr.Textbox(label=f"LLM Generated query {i+1}", max_lines=100, interactive=True, submit_btn=True))
                 hidden_text.append(gr.Textbox(label=f"Original LLM Generated query {i+1}", interactive=False, visible=False))
-                rating.append(gr.CheckboxGroup(["👍", "👎"], label="Rating", info="👍  Upvote or 👎 Downvote"))
+                # rating.append(gr.CheckboxGroup(["👍", "👎"], label="Rating", info="👍  Upvote or 👎 Downvote"))
                 # rating.append(gr.CheckboxGroup(["1", "2", "3", "4", "5"], label="Rating", info="Rate the query from 1 to 5"))
-        # with gr.Column():
-        #     # output_text = gr.Markdown(label="LLM Response",max_height=1000)
-        #     output_text_1 = gr.Textbox(label="LLM Generated query 1", interactive=True, submit_btn=True)
-
-        # with gr.Column():
-        #     output_text_2 = gr.Textbox(label="LLM Generated query 2", interactive=True, submit_btn=True)
-        # with gr.Column():
-        #     output_text_3 = gr.Textbox(label="LLM Generated query 3", interactive=True, submit_btn=True)
+       
     with gr.Row():
         pfts=[f'{i+1}' for i in range(n)]
         pfts.extend(['Tie','Both are bad'])
         pft_checkbox = gr.CheckboxGroup(pfts, label="Best LLM query", info="Select the query that matches the NLU query the best.")
         # pft_checkbox = gr.CheckboxGroup([f'{i+1}' for i in range(n)], label="Best LLM query", info="Select the query that matches the NLU query the best.")
+    with gr.Row():
+        notes = gr.Textbox(label="Notes", placeholder="Enter any additional feedback here...",max_lines=100, interactive=True, submit_btn=False)
     with gr.Row():
         for i in range(n):
             with gr.Column():
                 output_dataframe.append(gr.Dataframe(interactive=False, max_height=500))
-        # with gr.Column():
-        #     dataframe_output_1 = gr.Dataframe(interactive=False, max_height=500)
-        # with gr.Column():
-        #     dataframe_output_2 = gr.Dataframe(interactive=False, max_height=500)
-        #with gr.Column():
-        #    dataframe_output_3 = gr.Dataframe(interactive=False, max_height=500)
+
     with gr.Row():
         end_button = gr.Button("Submit")
         msg = gr.Markdown("✅ Process Complete!", visible=False)
     with gr.Row():
-        clear_button = gr.ClearButton(components=[query_input, *hidden_text, *output_text, *rating, *output_dataframe, pft_checkbox],value="Clear")
-    csvlogger.setup([query_input, *hidden_text, *output_text, *rating, pft_checkbox], "out_dir")
+        clear_button = gr.ClearButton(components=[query_input, *hidden_text, *output_text, *output_dataframe, notes, pft_checkbox],value="Clear")
+        # clear_button = gr.ClearButton(components=[query_input, *hidden_text, *output_text, *rating, *output_dataframe, pft_checkbox],value="Clear")
+    csvlogger.setup([query_input, *hidden_text, *output_text, *output_dataframe, notes,pft_checkbox], "out_dir")
+    # csvlogger.setup([query_input, *hidden_text, *output_text, *rating, pft_checkbox], "out_dir")
     query_input.submit(
         fn=process_query,
         inputs=query_input,
@@ -204,17 +195,20 @@ with gr.Blocks() as demo:
             outputs=[output_text[i], output_dataframe[i]]
         )
     
-    for i in range(n):
-        rating[i].select(update_selection,rating[i],rating[i])
+    # for i in range(n):
+    #     rating[i].select(update_selection,rating[i],rating[i])
     pft_checkbox.select(update_selection,pft_checkbox,pft_checkbox)
-    # end_button.click(lambda *args: csvlogger.flag(list(args)), [query_input, *output_text, *rating, pft_checkbox], None, preprocess=False)
-    end_button.click(log_data, [query_input, *hidden_text, *output_text, *rating, pft_checkbox], [msg, end_button], preprocess=False, trigger_mode="once").then(
+    end_button.click(log_data, [query_input, *hidden_text, *output_text, *output_dataframe, notes, pft_checkbox], [msg, end_button], preprocess=False, trigger_mode="once").then(
         fn=lambda: time.sleep(1), inputs=None, outputs=None
     ).then(
         fn=hide_message, outputs=[msg, end_button]
     )
-    # end_button.click(log_data, [query_input, *hidden_text, *output_text, *rating, pft_checkbox], None, preprocess=False)
-    # clear_button.click(log_data, [query_input, *hidden_text, *output_text, *rating, pft_checkbox], None, preprocess=False)
+    # end_button.click(log_data, [query_input, *hidden_text, *output_text, *rating, pft_checkbox], [msg, end_button], preprocess=False, trigger_mode="once").then(
+    #     fn=lambda: time.sleep(1), inputs=None, outputs=None
+    # ).then(
+    #     fn=hide_message, outputs=[msg, end_button]
+    # )
+    
 
 if __name__ == "__main__":
-    demo.launch(debug=True,share=True)
\ No newline at end of file
+    demo.launch(debug=True,share=True,show_api=False)
\ No newline at end of file
diff --git a/api_writer/utils.py b/api_writer/utils.py
index 0b46adf..196c24e 100644
--- a/api_writer/utils.py
+++ b/api_writer/utils.py
@@ -2,6 +2,7 @@ import yaml
 import pickle
 from nomad.units import ureg as units
 import json
+from collections import defaultdict
 def load_templates(model_path):
     with open(model_path+"/system_prompt.txt", "r") as f:
         system_prompt = f.read()
@@ -29,15 +30,201 @@ def get_unit_quantities():
         if 'unit' in search_quantities[i]:
             unit_quantities[i]=search_quantities[i]['unit']
     return unit_quantities
+
 unit_quantities=get_unit_quantities()
 def convert_units(key,value,unit):
     search_unit=unit_quantities[key]
     value=units.Quantity(float(value),unit).to(search_unit).magnitude
     return value
+
+
 def add_values(base_json,values):
     for i in values:
         key,tag,value,unit = i.split(':')
-        ind=base_json.index(tag)
-        value = convert_units(key,value,unit)
-        base_json = base_json[:ind-1] + str(value) + base_json[ind+len(tag)+1:]
-    return base_json
\ No newline at end of file
+        try:
+            ind=base_json.index(tag)
+            value = convert_units(key,value,unit)
+            base_json = base_json[:ind-1] + str(value) + base_json[ind+len(tag)+1:]
+        except Exception as e:
+            print(e)
+            pass
+    return base_json
+
+def format_num_response(response):
+    response=response[response.index('JSON')+5:]
+    values=response[response.index('\'\'\'')+3:].strip().split('\n')
+    base_json=response[:response.index('\'\'\'')].strip()
+    if values!=['']:
+        response=add_values(base_json,values)
+    else:
+        return base_json
+    return response
+def clean_json(data, exclude_fields=None):
+    """
+    Clean a nested JSON structure by removing specified fields and formatting numbers.
+    
+    Args:
+        data: Input JSON structure (dict, list, or primitive types)
+        exclude_fields: Set of field names to remove
+        
+    Returns:
+        Cleaned data structure
+    """
+    if exclude_fields is None:
+        exclude_fields = set()
+        
+    if isinstance(data, dict):
+        if data != {}:
+            return {
+                key: clean_json(value, exclude_fields)
+                for key, value in data.items()
+                if key not in exclude_fields and value is not None
+            }
+    elif isinstance(data, list):
+        clean_list=[]
+        for item in data:
+            if item !={}:
+                clean_item = clean_json(item,exclude_fields)
+                if clean_item != {}:
+                    clean_list.append(clean_item)
+        return clean_list
+        
+    elif isinstance(data, float):
+        # Format float to 3 decimal places and use E notation where appropriate
+        formatted = f"{data:.3e}" if abs(data) < 0.001 or abs(data) >= 1000 else f"{data:.3f}"
+        return float(formatted)
+    return data
+
+def load_query(query):
+    query=query.replace('\\"','"').replace('\\n','\n')
+    try:
+        query = format_num_response(query)
+    except Exception as e:
+        return True, 'Error formatting num query: ' + str(e)
+    # print(query)
+    try:
+        query+=" "
+        query = query[query.index('{'):query[::-1].index('}')*-1]
+        # print(query)
+        query = query.replace("\'",'"')
+        # print(query)
+        if 'null' in query:
+            query = json.loads(query)
+            query=clean_json(query)
+            # print('dd')
+        else:
+            query = json.loads(query)
+        # print(query)
+        if len(query.keys())==1 and 'all' in query.keys():
+            query['and'] = query['all']
+        # print(query)
+    except Exception as e:
+        return True, 'Error parsing query: ' + query + ' ' + str(e)
+    return False, query
+
+def get_query_keys(
+    d,
+    exclude_keys = None,
+    current_key_string= '',
+    keys = None,
+    values=None,
+) :
+    """
+    Extracts all unique keys from a dictionary or list.
+
+    Arguments:
+        d: Dictionary or list to process
+        exclude_keys: Set of keys to exclude
+        current_key_string: Current key string
+        keys: Set to store keys
+
+    Returns:
+        Set of keys
+    """
+    
+    if keys is None:
+        keys = set()
+    if exclude_keys is None:
+        exclude_keys = set()
+    if values is None:
+        values=defaultdict(list)
+    if isinstance(d, dict):
+        # If dictionary is empty or has no non-excluded keys, add current key string
+        valid_items = [
+            (k, v)
+            for k, v in d.items()
+            if isinstance(v, (dict, list)) or k not in exclude_keys
+        ]
+        
+        if not valid_items and current_key_string:
+            keys.add(current_key_string)
+
+        for key, value in d.items():
+            # Determine the new key string based on whether key is excluded
+            if key in exclude_keys:
+                new_key_string = current_key_string
+            else:
+                new_key_string = f'{current_key_string}.{key}' if current_key_string else key
+
+            # Only recurse if value is a dict, list, or key is excluded
+            if isinstance(value, (dict, list)):
+                get_query_keys(value, exclude_keys, new_key_string, keys,values)
+            elif key not in exclude_keys:
+                keys.add(new_key_string)
+                values[new_key_string].append(d[key])
+
+    elif isinstance(d, list):
+        if (not d) and current_key_string:  # Empty list
+            keys.add(current_key_string)
+        flag=0
+        for item in d:            
+            if isinstance(item,(dict,list)):
+                flag=1
+                get_query_keys(item, exclude_keys, current_key_string, keys,values)
+        if not flag:
+            keys.add(current_key_string)
+            values[current_key_string].append(d)
+    else:
+        keys.add(current_key_string)
+        values[current_key_string].append(d)
+
+    return keys, values
+
+def check_keys(o):
+    queries=[load_query(q) for q in o]
+    qks=[]
+    for i in queries:
+        if not i[0]:
+            # if len(i[1])==1 and 'and' in i[1]:
+            #     q=
+            # else:
+            #     q=i[1]
+            q=i[1]
+            qk=get_query_keys(q,exclude_keys=['and'])[0]
+            qks.append(qk)
+        else:
+            qks.append([])
+    for i in range(len(qks)):
+        if qks[i]!=[]:
+            qk1_ind=i
+            qk1=qks[i]
+            break
+    qk2_ind=-1
+    diff=0
+    for i,qk in enumerate(qks):
+        if i==qk1_ind or qk==[]:
+            continue
+        idiff=len(qk1.difference(qk))
+        if idiff>diff:
+            qk2_ind=i
+            diff=idiff
+    dissimilar=True
+    if qk2_ind==-1:
+        dissimilar=False
+        for i in range(len(qks)):
+            if qks[i]!=[] and i!=qk1_ind:
+                qk2_ind=i
+                qk2=qks[i]
+                break
+    return dissimilar,[queries[qk1_ind],queries[qk2_ind]],[qk1_ind,qk2_ind]
+    
\ No newline at end of file
diff --git a/api_writer/vllm_api.py b/api_writer/vllm_api.py
index 2cafc2f..ca7b9fb 100644
--- a/api_writer/vllm_api.py
+++ b/api_writer/vllm_api.py
@@ -12,7 +12,7 @@ client = OpenAI(
     base_url=openai_api_base,
 )   
 model = 'api-lora'
-sampling_params=load_config('api_writer/sampling_params.yaml')
+sampling_params=load_config('api_writer/sampling_params_2.yaml')
 system_prompt, chat_template, eval_chat_template, full_context, system_context = load_templates("api_lora")
 def http_bot(prompt):
     headers = {"User-Agent": "vLLM Client"}
diff --git a/api_writer/vllm_model.py b/api_writer/vllm_model.py
index 8c318e4..7a78b4a 100644
--- a/api_writer/vllm_model.py
+++ b/api_writer/vllm_model.py
@@ -13,7 +13,7 @@ max_memory = round(gpu_stats.total_memory / 1024 / 1024 / 1024, 3)
 print(f"GPU = {gpu_stats.name}. Max memory = {max_memory} GB.")
 print(f"{start_gpu_memory} GB of memory reserved.")
 
-sampling_config=load_config('api_writer/sampling_params.yaml')
+sampling_config=load_config('api_writer/sampling_params_2.yaml')
 system_prompt, chat_template, eval_chat_template, full_context, system_context = load_templates("api_lora")
 sampling_params=SamplingParams(
     n=sampling_config['n'],
-- 
GitLab


From a672c52dacd107d00d3aff1d58ab8dbacc349e9d Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Fri, 23 May 2025 16:06:20 +0200
Subject: [PATCH 20/28] fix

---
 api_writer/test_ui.py | 2 +-
 api_writer/utils.py   | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
index 66f545c..6d33fac 100644
--- a/api_writer/test_ui.py
+++ b/api_writer/test_ui.py
@@ -102,7 +102,7 @@ def update_selection(selected_values):
         return [selected_values[-1]]
     return selected_values
 
-description = open("description.md").read()
+description = open("api_writer/description.md").read()
 rating_dict={"👍":1, "👎":0}
 pft_dict = {"Tie":0, "Both are bad":-1}
 csvlogger = gr.CSVLogger()
diff --git a/api_writer/utils.py b/api_writer/utils.py
index 196c24e..f5dfe68 100644
--- a/api_writer/utils.py
+++ b/api_writer/utils.py
@@ -224,7 +224,8 @@ def check_keys(o):
         for i in range(len(qks)):
             if qks[i]!=[] and i!=qk1_ind:
                 qk2_ind=i
-                qk2=qks[i]
                 break
+    if qk2_ind==-1:
+        qk2_ind=qk1_ind
     return dissimilar,[queries[qk1_ind],queries[qk2_ind]],[qk1_ind,qk2_ind]
     
\ No newline at end of file
-- 
GitLab


From 32174c8208b838288f78be1f038776d681d77483 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Fri, 23 May 2025 16:28:05 +0200
Subject: [PATCH 21/28] fix

---
 api_writer/nomad_api.py | 1 +
 api_writer/test_ui.py   | 6 +++---
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/api_writer/nomad_api.py b/api_writer/nomad_api.py
index 0ee1f78..6cf8b4c 100644
--- a/api_writer/nomad_api.py
+++ b/api_writer/nomad_api.py
@@ -29,4 +29,5 @@ def make_query(query: str):
     request_query = BASE_REQUEST.copy()
     request_query['query'] = query
     response = requests.post(URL + 'entries/query/', json=request_query)
+    print('API response:', response.status_code)
     return response.status_code, response.json()
\ No newline at end of file
diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
index 6d33fac..30ac0ab 100644
--- a/api_writer/test_ui.py
+++ b/api_writer/test_ui.py
@@ -55,7 +55,7 @@ def process_api_output(api_output: dict) -> pd.DataFrame:
                     base[col]=i[columns[col]]
             except:
                 base[col]=''
-        data.append(base)
+        data.append(deepcopy(base))
     return pd.DataFrame(data)
 
 track(capture_input=False, capture_output=False)
@@ -92,8 +92,8 @@ def process_query(query):
     return *rh_llm_query, *r_llm_query, *r_df
 
 def user_fix_query(query):
-    api_response = json.load(open("demo_return.json"))
-    df = process_api_output(api_response)
+    status_code, api_output = make_query(query)
+    df = process_api_output(api_output)
     return query + " Fixed", df
 
 def update_selection(selected_values):
-- 
GitLab


From 08fb0a9359df21a907e4e9444c38c16479559b28 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Fri, 23 May 2025 17:36:00 +0200
Subject: [PATCH 22/28] fixes

---
 api_writer/description.md         |  2 +-
 api_writer/nomad_api.py           | 20 +++++++++---------
 api_writer/sampling_params.yaml   |  2 +-
 api_writer/sampling_params_2.yaml |  4 ++--
 api_writer/test_ui.py             | 34 +++++++++++++++++--------------
 api_writer/utils.py               |  1 +
 api_writer/vllm_api.py            |  2 +-
 7 files changed, 35 insertions(+), 30 deletions(-)

diff --git a/api_writer/description.md b/api_writer/description.md
index 2749e51..7744019 100644
--- a/api_writer/description.md
+++ b/api_writer/description.md
@@ -2,7 +2,7 @@
 
 This tool transforms your natural language text into structured API queries for searching NOMAD. We want to test and evaluate the models capablities and find its shortcomings to improve the model and the search functionality.
 
-The LLM generates two options for you to evaluate. Select which query performed better (1 or 2), or indicate if both performed equally well (Tie) or if neither were satisfactory (Both are bad).
+The LLM generates two options for you to evaluate. Select which query performed better (1 or 2), or indicate if both performed equally well (Tie) or if neither were satisfactory (Both are bad). Note: The two options may be the same sometimes.
 
 You can also edit either generated query to demonstrate the correct query or provide free-form feedback in the notes section.
 
diff --git a/api_writer/nomad_api.py b/api_writer/nomad_api.py
index 6cf8b4c..29191dd 100644
--- a/api_writer/nomad_api.py
+++ b/api_writer/nomad_api.py
@@ -13,16 +13,16 @@ BASE_REQUEST ={
 }
 
 def make_query(query: str):
-    # print(query)
-    try:
-        query+=" "
-        query = query[query.index('{'):query[::-1].index('}')*-1]
-        query = query.replace("\'",'"')
-        query = json.loads(query)
-        if len(query.keys())==1 and 'all' in query.keys():
-            query['and'] = query['all']
-    except Exception as e:
-        return True, 'Error parsing query: ' + query + ' ' + str(e)
+    if type(query)==str:
+      try:
+          query+=" "
+          query = query[query.index('{'):query[::-1].index('}')*-1]
+          query = query.replace("\'",'"')
+          query = json.loads(query)
+          if len(query.keys())==1 and 'all' in query.keys():
+              query['and'] = query['all']
+      except Exception as e:
+          return True, 'Error parsing query: ' + query + ' ' + str(e)
     if 'query' in query:
         query = query['query']
     query["upload_name:none"]=["Co-pilot test"]
diff --git a/api_writer/sampling_params.yaml b/api_writer/sampling_params.yaml
index 30574ef..a668699 100644
--- a/api_writer/sampling_params.yaml
+++ b/api_writer/sampling_params.yaml
@@ -1,5 +1,5 @@
 n: 2
-model: "api-lora"
+model: "api_lora"
 stream: False
 max_tokens: 2048
 temperature: 1.0    
diff --git a/api_writer/sampling_params_2.yaml b/api_writer/sampling_params_2.yaml
index 91c1ea5..92c7aae 100644
--- a/api_writer/sampling_params_2.yaml
+++ b/api_writer/sampling_params_2.yaml
@@ -1,8 +1,8 @@
 n: 5
-model: "api-lora"
+model: "api_lora"
 stream: False
 max_tokens: 2048
-temperature: 1.0    
+temperature: 0.7    
 top_k: 10
 seed: 42
 stop: ["<|end_of_text|>"]
diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
index 30ac0ab..b0eb3b8 100644
--- a/api_writer/test_ui.py
+++ b/api_writer/test_ui.py
@@ -5,8 +5,9 @@ import json
 import time
 from opik import track, opik_context
 from api_writer.nomad_api import make_query
-from api_writer.utils import add_values, check_keys
+from api_writer.utils import add_values, check_keys, load_query
 from copy import deepcopy
+
 use_vllm_api = os.environ['USE_VLLM_API']
 if use_vllm_api == "True":
     from api_writer.vllm_api import http_bot
@@ -56,6 +57,8 @@ def process_api_output(api_output: dict) -> pd.DataFrame:
             except:
                 base[col]=''
         data.append(deepcopy(base))
+    if data==[]:
+        data={'Search Result':["Zero entries found"]}
     return pd.DataFrame(data)
 
 track(capture_input=False, capture_output=False)
@@ -71,30 +74,31 @@ def process_query(query):
     r_llm_query=[]
     rh_llm_query=[]
     for llm_query in llm_queries:
-        try:
-            llm_query = llm_query[llm_query.index("\'\'\'"):]
-        except:
-            pass
-        llm_query=llm_query.replace('\\"','"').replace('\\n','\n')
-        try:
-            formatted_llm_query=format_num_response(llm_query)
-        except:
-            formatted_llm_query=llm_query
-        full_llm_query = llm_query +'\n\n\n' + formatted_llm_query
-        status_code, api_output = make_query(formatted_llm_query)
+        error,formatted_llm_query=load_query(llm_query)
+        # try:
+        #     llm_query = llm_query[llm_query.index("\'\'\'"):]
+        # except:
+        #     pass
+        # llm_query=llm_query.replace('\\"','"').replace('\\n','\n')
+        # try:
+        #     formatted_llm_query=format_num_response(llm_query)
+        # except:
+        #     formatted_llm_query=llm_query
+        full_llm_query = llm_query +'\n\n\n' + json.dumps(formatted_llm_query,indent=4)
+        status_code, api_output = make_query(deepcopy(formatted_llm_query))
         if status_code==200:
             df = process_api_output(api_output)
         else:
             df = pd.DataFrame({"Error":[True]})
         r_df.append(df)
-        r_llm_query.append(formatted_llm_query)
+        r_llm_query.append(json.dumps(formatted_llm_query,indent=4))
         rh_llm_query.append(full_llm_query)
-    return *rh_llm_query, *r_llm_query, *r_df
+    return *r_llm_query, *rh_llm_query, *r_df
 
 def user_fix_query(query):
     status_code, api_output = make_query(query)
     df = process_api_output(api_output)
-    return query + " Fixed", df
+    return query + "\n Fixed", df
 
 def update_selection(selected_values):
     # Take only the last selected value if multiple are selected
diff --git a/api_writer/utils.py b/api_writer/utils.py
index f5dfe68..7132cb1 100644
--- a/api_writer/utils.py
+++ b/api_writer/utils.py
@@ -204,6 +204,7 @@ def check_keys(o):
             qks.append(qk)
         else:
             qks.append([])
+    qk1_ind=0
     for i in range(len(qks)):
         if qks[i]!=[]:
             qk1_ind=i
diff --git a/api_writer/vllm_api.py b/api_writer/vllm_api.py
index ca7b9fb..82a6c0f 100644
--- a/api_writer/vllm_api.py
+++ b/api_writer/vllm_api.py
@@ -11,7 +11,7 @@ client = OpenAI(
     api_key=openai_api_key,
     base_url=openai_api_base,
 )   
-model = 'api-lora'
+model = 'api_lora'
 sampling_params=load_config('api_writer/sampling_params_2.yaml')
 system_prompt, chat_template, eval_chat_template, full_context, system_context = load_templates("api_lora")
 def http_bot(prompt):
-- 
GitLab


From e32a0af6ac7b5407a7efae02c2da8c511efd86a3 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Mon, 26 May 2025 11:14:33 +0200
Subject: [PATCH 23/28] log all

---
 api_writer/test_ui.py | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
index b0eb3b8..c9f0e7c 100644
--- a/api_writer/test_ui.py
+++ b/api_writer/test_ui.py
@@ -5,7 +5,7 @@ import json
 import time
 from opik import track, opik_context
 from api_writer.nomad_api import make_query
-from api_writer.utils import add_values, check_keys, load_query
+from api_writer.utils import add_values, check_keys, load_query, load_config
 from copy import deepcopy
 
 use_vllm_api = os.environ['USE_VLLM_API']
@@ -27,6 +27,8 @@ try:
 except:
     project_name = "NOMAD_Demo_test_ui"
 
+sampling_params=load_config('api_writer/sampling_params_2.yaml')
+
 n=2
 def format_num_response(response):
     response=response[response.index('JSON')+5:]
@@ -66,9 +68,12 @@ def process_query(query):
     # llm_query = json.load(open("demo_api.json"))
     # api_response = json.load(open("demo_return.json"))
     llm_response, llm_queries = http_bot(query)
+    hidden_all_text = "\n\n\n".join(llm_queries)
     dissimilar,qs,qi = check_keys(llm_queries)
     if not dissimilar:
         gr.Info(" LLM Queries are same", duration=5)
+        # gr.Info(" LLM Queries might be same", duration=5)
+
     llm_queries = [llm_queries[i] for i in range(len(llm_queries)) if i in qi]
     r_df=[]
     r_llm_query=[]
@@ -93,7 +98,7 @@ def process_query(query):
         r_df.append(df)
         r_llm_query.append(json.dumps(formatted_llm_query,indent=4))
         rh_llm_query.append(full_llm_query)
-    return *r_llm_query, *rh_llm_query, *r_df
+    return *r_llm_query, *rh_llm_query, hidden_all_text, *r_df
 
 def user_fix_query(query):
     status_code, api_output = make_query(query)
@@ -124,6 +129,7 @@ def log_data(*args):
     feedback_scores.append({'name':'Preferred LLM Query', 'value': preferred_query})
     input = {'query': args[0]}
     output['Notes'] = args[-2]
+    output['All LLM Generated Queries'] = args[-3]
     if preferred_query >0:
         output[f'Preferred LLM Query ({preferred_query})'] = args[preferred_query+n+1]
     opik_context.update_current_trace(input=input,
@@ -156,6 +162,7 @@ with gr.Blocks() as demo:
     n=2    
     output_text = []
     hidden_text = []
+    # hidden_all_text = []
     output_dataframe = []
     rating = []
     with gr.Row():
@@ -163,6 +170,7 @@ with gr.Blocks() as demo:
             with gr.Column():
                 output_text.append(gr.Textbox(label=f"LLM Generated query {i+1}", max_lines=100, interactive=True, submit_btn=True))
                 hidden_text.append(gr.Textbox(label=f"Original LLM Generated query {i+1}", interactive=False, visible=False))
+        hidden_all_text = gr.Textbox(label="All LLM Generated queries", interactive=False, visible=False)
                 # rating.append(gr.CheckboxGroup(["👍", "👎"], label="Rating", info="👍  Upvote or 👎 Downvote"))
                 # rating.append(gr.CheckboxGroup(["1", "2", "3", "4", "5"], label="Rating", info="Rate the query from 1 to 5"))
        
@@ -176,20 +184,20 @@ with gr.Blocks() as demo:
     with gr.Row():
         for i in range(n):
             with gr.Column():
-                output_dataframe.append(gr.Dataframe(interactive=False, max_height=500))
+                output_dataframe.append(gr.Dataframe(interactive=False, max_height=500, wrap=True))
 
     with gr.Row():
         end_button = gr.Button("Submit")
         msg = gr.Markdown("✅ Process Complete!", visible=False)
     with gr.Row():
-        clear_button = gr.ClearButton(components=[query_input, *hidden_text, *output_text, *output_dataframe, notes, pft_checkbox],value="Clear")
+        clear_button = gr.ClearButton(components=[query_input, *hidden_text, *output_text, *output_dataframe, hidden_all_text, notes, pft_checkbox],value="Clear")
         # clear_button = gr.ClearButton(components=[query_input, *hidden_text, *output_text, *rating, *output_dataframe, pft_checkbox],value="Clear")
-    csvlogger.setup([query_input, *hidden_text, *output_text, *output_dataframe, notes,pft_checkbox], "out_dir")
+    csvlogger.setup([query_input, *hidden_text, *output_text, *output_dataframe, hidden_all_text, notes,pft_checkbox], "out_dir")
     # csvlogger.setup([query_input, *hidden_text, *output_text, *rating, pft_checkbox], "out_dir")
     query_input.submit(
         fn=process_query,
         inputs=query_input,
-        outputs=[*output_text, *hidden_text, *output_dataframe],
+        outputs=[*output_text, *hidden_text, hidden_all_text, *output_dataframe],
     )
 
     for i in range(n):
@@ -202,7 +210,7 @@ with gr.Blocks() as demo:
     # for i in range(n):
     #     rating[i].select(update_selection,rating[i],rating[i])
     pft_checkbox.select(update_selection,pft_checkbox,pft_checkbox)
-    end_button.click(log_data, [query_input, *hidden_text, *output_text, *output_dataframe, notes, pft_checkbox], [msg, end_button], preprocess=False, trigger_mode="once").then(
+    end_button.click(log_data, [query_input, *hidden_text, *output_text, *output_dataframe, hidden_all_text, notes, pft_checkbox], [msg, end_button], preprocess=False, trigger_mode="once").then(
         fn=lambda: time.sleep(1), inputs=None, outputs=None
     ).then(
         fn=hide_message, outputs=[msg, end_button]
-- 
GitLab


From 2387b56720434cd0384bd1148bb760d637511072 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Mon, 26 May 2025 12:19:17 +0200
Subject: [PATCH 24/28] bug_fix

---
 api_writer/test_ui.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
index c9f0e7c..193df81 100644
--- a/api_writer/test_ui.py
+++ b/api_writer/test_ui.py
@@ -131,7 +131,7 @@ def log_data(*args):
     output['Notes'] = args[-2]
     output['All LLM Generated Queries'] = args[-3]
     if preferred_query >0:
-        output[f'Preferred LLM Query ({preferred_query})'] = args[preferred_query+n+1]
+        output[f'Preferred LLM Query ({preferred_query})'] = args[preferred_query+n+1-1]
     opik_context.update_current_trace(input=input,
                                       output=output,
                                       feedback_scores=feedback_scores)
-- 
GitLab


From 07dac87d84ecde1f154c0eff3ef168c91f1949a8 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Mon, 26 May 2025 12:36:43 +0200
Subject: [PATCH 25/28] added links to entries

---
 api_writer/nomad_api.py | 2 +-
 api_writer/test_ui.py   | 4 +++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/api_writer/nomad_api.py b/api_writer/nomad_api.py
index 29191dd..b9cfb99 100644
--- a/api_writer/nomad_api.py
+++ b/api_writer/nomad_api.py
@@ -9,7 +9,7 @@ BASE_REQUEST ={
     "order": "desc",
     "page_size": 20
   },
-"required": {"include":["upload_name","origin","results.material.chemical_formula_descriptive"]}
+"required": {"include":["entry_id","upload_name","origin","results.material.chemical_formula_descriptive"]}
 }
 
 def make_query(query: str):
diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
index 193df81..3c802e7 100644
--- a/api_writer/test_ui.py
+++ b/api_writer/test_ui.py
@@ -14,6 +14,7 @@ if use_vllm_api == "True":
 else:
     from api_writer.vllm_model import http_bot
 
+search_link_url='https://nomad-lab.eu/prod/v1/gui/search/entries/entry/id/'
 print("Caching context...")
 http_bot('warmup')
 
@@ -50,6 +51,7 @@ def process_api_output(api_output: dict) -> pd.DataFrame:
     columns={'Name':'upload_name','Formula':"results.material.chemical_formula_descriptive","Entry Type":'entry_type','Author':'origin'}
     for i in api_output['data']:
         base={}
+        base[' '] = f'<a href="{search_link_url}{i['entry_id']}" target="_blank" style="text-decoration: none; font-size: 16px;">↗️</a>'
         for col in columns:
             try:
                 if col=='Formula':
@@ -184,7 +186,7 @@ with gr.Blocks() as demo:
     with gr.Row():
         for i in range(n):
             with gr.Column():
-                output_dataframe.append(gr.Dataframe(interactive=False, max_height=500, wrap=True))
+                output_dataframe.append(gr.Dataframe(interactive=False, max_height=500, wrap=True, datatype=['html','str','str','str','str']))
 
     with gr.Row():
         end_button = gr.Button("Submit")
-- 
GitLab


From 7d7ab4b3fcb499b36a3a00e6bd1e7d9b2b521ca2 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Mon, 26 May 2025 12:50:32 +0200
Subject: [PATCH 26/28] col_width

---
 api_writer/test_ui.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
index 3c802e7..b43d1e7 100644
--- a/api_writer/test_ui.py
+++ b/api_writer/test_ui.py
@@ -186,7 +186,7 @@ with gr.Blocks() as demo:
     with gr.Row():
         for i in range(n):
             with gr.Column():
-                output_dataframe.append(gr.Dataframe(interactive=False, max_height=500, wrap=True, datatype=['html','str','str','str','str']))
+                output_dataframe.append(gr.Dataframe(interactive=False, max_height=500, wrap=True,column_widths=["10%", "30%", "20%", "20%", "20%" ], datatype=['html','str','str','str','str']))
 
     with gr.Row():
         end_button = gr.Button("Submit")
-- 
GitLab


From 5c21a89ca375926b12bb048140f11313b5595e96 Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Tue, 27 May 2025 11:25:21 +0200
Subject: [PATCH 27/28] update sampling

---
 api_writer/sampling_params_2.yaml |  2 +-
 api_writer/test_ui.py             |  2 +-
 api_writer/vllm_model.py          | 31 ++++++++++++++++++++++++++++---
 3 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/api_writer/sampling_params_2.yaml b/api_writer/sampling_params_2.yaml
index 92c7aae..6e073d5 100644
--- a/api_writer/sampling_params_2.yaml
+++ b/api_writer/sampling_params_2.yaml
@@ -1,4 +1,4 @@
-n: 5
+n: 3
 model: "api_lora"
 stream: False
 max_tokens: 2048
diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
index b43d1e7..7a42e62 100644
--- a/api_writer/test_ui.py
+++ b/api_writer/test_ui.py
@@ -186,7 +186,7 @@ with gr.Blocks() as demo:
     with gr.Row():
         for i in range(n):
             with gr.Column():
-                output_dataframe.append(gr.Dataframe(interactive=False, max_height=500, wrap=True,column_widths=["10%", "30%", "20%", "20%", "20%" ], datatype=['html','str','str','str','str']))
+                output_dataframe.append(gr.Dataframe(interactive=False, max_height=500, wrap=True,column_widths=["5%", "35%", "20%", "20%", "20%" ], datatype=['html','str','str','str','str']))
 
     with gr.Row():
         end_button = gr.Button("Submit")
diff --git a/api_writer/vllm_model.py b/api_writer/vllm_model.py
index 7a78b4a..0a88760 100644
--- a/api_writer/vllm_model.py
+++ b/api_writer/vllm_model.py
@@ -15,21 +15,46 @@ print(f"{start_gpu_memory} GB of memory reserved.")
 
 sampling_config=load_config('api_writer/sampling_params_2.yaml')
 system_prompt, chat_template, eval_chat_template, full_context, system_context = load_templates("api_lora")
-sampling_params=SamplingParams(
+sampling_params = [SamplingParams(
+    n=1,
+    temperature=0.0,
+    max_tokens=2048,
+    top_k=10,
+    seed=42,
+    stop=["<|end_of_text|>"],
+),SamplingParams(
+    n=1,
+    temperature=1.0,
+    max_tokens=2048,
+    top_k=10,
+    seed=42,
+    stop=["<|end_of_text|>"],
+)]
+
+# sampling_params=[SamplingParams(
+#     n=sampling_config['n'],
+#     temperature=sampling_config['temperature'],
+#     max_tokens=sampling_config['max_tokens'],
+#     top_k=sampling_config['top_k'],
+#     seed=sampling_config['seed'],
+#     stop=sampling_config['stop'],
+# )]
+
+sampling_params.append(SamplingParams(
     n=sampling_config['n'],
     temperature=sampling_config['temperature'],
     max_tokens=sampling_config['max_tokens'],
     top_k=sampling_config['top_k'],
     seed=sampling_config['seed'],
     stop=sampling_config['stop'],
-)
+))
 lora_request=LoRARequest("api_lora", 1, "api_lora")
 
 
 def http_bot(prompt, llm=llm, sampling_params=sampling_params,lora_request=lora_request):
     # time the generation
     start_time = time.time()
-    prompt = eval_chat_template.format(SYSTEM=system_context, INPUT=prompt)
+    prompt = [eval_chat_template.format(SYSTEM=system_context, INPUT=prompt)]*len(sampling_params)
     outputs = llm.generate(
     prompt,
     sampling_params,
-- 
GitLab


From a536baa25d31ec6f7d86f216d857d43360eedece Mon Sep 17 00:00:00 2001
From: Sharat Patil <patilsha@slurm-login.slurm.hpc.hu-berlin.de>
Date: Tue, 27 May 2025 12:05:42 +0200
Subject: [PATCH 28/28] updated with copy button

---
 api_writer/test_ui.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/api_writer/test_ui.py b/api_writer/test_ui.py
index 7a42e62..3efa759 100644
--- a/api_writer/test_ui.py
+++ b/api_writer/test_ui.py
@@ -170,7 +170,7 @@ with gr.Blocks() as demo:
     with gr.Row():
         for i in range(n):
             with gr.Column():
-                output_text.append(gr.Textbox(label=f"LLM Generated query {i+1}", max_lines=100, interactive=True, submit_btn=True))
+                output_text.append(gr.Textbox(label=f"LLM Generated query {i+1}", max_lines=100, interactive=True, submit_btn=True, show_copy_button=True))
                 hidden_text.append(gr.Textbox(label=f"Original LLM Generated query {i+1}", interactive=False, visible=False))
         hidden_all_text = gr.Textbox(label="All LLM Generated queries", interactive=False, visible=False)
                 # rating.append(gr.CheckboxGroup(["👍", "👎"], label="Rating", info="👍  Upvote or 👎 Downvote"))
-- 
GitLab